parent
62684554e9
commit
2775a9e37f
@ -0,0 +1,243 @@
|
||||
#include "ubinstall-gtk.h"
|
||||
|
||||
void yon_language_update(main_window *widgets){
|
||||
gtk_list_store_clear(widgets->LanguageList);
|
||||
{
|
||||
char *config_locale = config(locale_parameter);
|
||||
char *config_languages = config(lang_parameter);
|
||||
if (yon_char_is_empty(config_locale)||yon_config_check_ignore(locale_parameter)){
|
||||
gtk_switch_set_active(GTK_SWITCH(widgets->LocaleDefaultSwitch),1);
|
||||
} else {
|
||||
gtk_switch_set_active(GTK_SWITCH(widgets->LocaleDefaultSwitch),0);
|
||||
int parsed_param_size;
|
||||
config_str parsed_param = yon_char_parse(config_locale,&parsed_param_size,",");
|
||||
GtkTreeIter iter;
|
||||
for (int i=0;i<parsed_param_size;i++){
|
||||
char *cur_lang = g_hash_table_lookup(main_config.languages,parsed_param[i]);
|
||||
if (!yon_char_is_empty(cur_lang)){
|
||||
int parsed_size;
|
||||
config_str parsed = yon_char_parse(cur_lang,&parsed_size,"|");
|
||||
gtk_list_store_append(widgets->LanguageList,&iter);
|
||||
gtk_list_store_set(widgets->LanguageList,&iter,1,parsed[1],2,parsed[2],3,parsed[0],-1);
|
||||
if (!yon_char_is_empty(config_languages)){
|
||||
if (!strcmp(config_languages,parsed[0])){
|
||||
gtk_list_store_set(widgets->LanguageList,&iter,0,1,-1);
|
||||
}
|
||||
} else if (yon_char_is_empty(config_languages)&&!i){
|
||||
gtk_list_store_set(widgets->LanguageList,&iter,0,1,-1);
|
||||
}
|
||||
yon_char_parsed_free(parsed,parsed_size);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
void on_locale_toggle(GtkCellRenderer *, gchar *path,language_window *window){
|
||||
GtkTreeIter iter;
|
||||
GtkTreeModel *model = GTK_TREE_MODEL(window->LanguagesList);
|
||||
gtk_tree_model_get_iter_from_string(model,&iter,path);
|
||||
gboolean is_active;
|
||||
char *target;
|
||||
gtk_tree_model_get(model,&iter,0,&is_active,1,&target,-1);
|
||||
gtk_list_store_set(GTK_LIST_STORE(model),&iter,0,!is_active,-1);
|
||||
|
||||
char *locales = (char*)gtk_entry_get_text(GTK_ENTRY(window->ManualEntry));
|
||||
if (!is_active){
|
||||
if (!yon_char_check_element(locales,target,",")){
|
||||
char *temp = yon_char_append_element(locales,target,",");
|
||||
gtk_entry_set_text(GTK_ENTRY(window->ManualEntry),temp);
|
||||
free(temp);
|
||||
}
|
||||
} else {
|
||||
char *temp = yon_char_remove_element(locales,target,",");
|
||||
gtk_entry_set_text(GTK_ENTRY(window->ManualEntry),temp);
|
||||
if (!yon_char_is_empty(temp)) free(temp);
|
||||
}
|
||||
}
|
||||
|
||||
void on_locale_accept(GtkWidget *self, language_window *window){
|
||||
main_window *widgets = g_object_get_data(G_OBJECT(window->Window),"widgets");
|
||||
|
||||
char *final = (char*)gtk_entry_get_text(GTK_ENTRY(window->ManualEntry));
|
||||
if (yon_char_is_empty(final)) {
|
||||
yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),yon_char_get_localised_from_lib(NOTHING_CHOSEN_LABEL),5,BACKGROUND_IMAGE_FAIL_TYPE);
|
||||
return;
|
||||
}
|
||||
char *locale_str = config(locale_parameter);
|
||||
GtkTreeIter iter,itar;
|
||||
for_iter (GTK_TREE_MODEL(window->LanguagesList),&iter){
|
||||
char *locale,*lang,*territory;
|
||||
int status;
|
||||
gtk_tree_model_get(GTK_TREE_MODEL(window->LanguagesList),&iter,0,&status,1,&locale,2,&lang,3,&territory,-1);
|
||||
if (status){
|
||||
gtk_list_store_append(widgets->LanguageList,&itar);
|
||||
gtk_list_store_set(widgets->LanguageList,&itar,1,lang,2,territory,3,locale,-1);
|
||||
if (!yon_char_is_empty(locale_str)&&!strcmp(locale_str,locale)){
|
||||
gtk_list_store_set(widgets->LanguageList,&itar,0,1,-1);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (yon_char_is_empty(locale_str)){
|
||||
if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->LanguageList),&iter)){
|
||||
gtk_list_store_set(widgets->LanguageList,&iter,0,1,-1);
|
||||
}
|
||||
}
|
||||
on_subwindow_close(self);
|
||||
}
|
||||
|
||||
gboolean yon_locale_window_set_locales(struct locales_struct *data){
|
||||
GtkTreeIter iter;
|
||||
gtk_list_store_append(GTK_LIST_STORE(data->list),&iter);
|
||||
gtk_list_store_set(GTK_LIST_STORE(data->list),&iter,1,data->locale,2,data->lang,3,data->territory,0,data->chosen,-1);
|
||||
if(!yon_char_is_empty(data->lang)) free(data->lang);
|
||||
if(!yon_char_is_empty(data->locale)) free(data->locale);
|
||||
if(!yon_char_is_empty(data->territory)) free(data->territory);
|
||||
if(!yon_char_is_empty(data->lang)) free(data);
|
||||
return G_SOURCE_REMOVE;
|
||||
}
|
||||
|
||||
gboolean yon_locale_window_unlock(GtkWidget *spinner){
|
||||
gtk_widget_hide(spinner);
|
||||
return G_SOURCE_REMOVE;
|
||||
}
|
||||
|
||||
void *yon_locales_load_func(language_window *window){
|
||||
char *config_value = config(locale_parameter);
|
||||
int config_parsed_size;
|
||||
config_str config_parsed = NULL;
|
||||
if (config_value){
|
||||
gtk_entry_set_text(GTK_ENTRY(window->ManualEntry),config_value);
|
||||
config_parsed = yon_char_parse(config_value,&config_parsed_size,",");
|
||||
}
|
||||
|
||||
int size;
|
||||
config_str languages = yon_config_load(languages_command,&size);
|
||||
for (int i=0;i<size;i++){
|
||||
struct locales_struct *data_struct = malloc(sizeof(struct locales_struct));
|
||||
data_struct->list=window->LanguagesList;
|
||||
yon_char_remove_last_symbol(languages[i],'\n');
|
||||
int parsed_size;
|
||||
config_str parsed = yon_char_parse(languages[i],&parsed_size,"|");
|
||||
data_struct->locale = yon_char_new(parsed[0]);
|
||||
data_struct->lang = yon_char_new(parsed[1]);
|
||||
data_struct->territory = yon_char_new(parsed[2]);
|
||||
|
||||
if (config_parsed_size&&yon_char_parsed_check_exist(config_parsed,config_parsed_size,parsed[0])>-1){
|
||||
data_struct->chosen=1;
|
||||
} else {
|
||||
data_struct->chosen=0;
|
||||
}
|
||||
g_idle_add((GSourceFunc)yon_locale_window_set_locales,data_struct);
|
||||
yon_char_parsed_free(parsed,parsed_size);
|
||||
}
|
||||
g_idle_add((GSourceFunc)yon_locale_window_unlock,window->LoadingSpinner);
|
||||
yon_char_parsed_free(config_parsed,config_parsed_size);
|
||||
g_thread_exit(NULL);
|
||||
}
|
||||
|
||||
language_window *yon_language_window_new(){
|
||||
language_window *window = malloc(sizeof(language_window));
|
||||
GtkBuilder *builder = gtk_builder_new_from_resource(glade_locales_path);
|
||||
window->Window = yon_gtk_builder_get_widget(builder,"Window");
|
||||
window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox");
|
||||
window->LanguagesTree = yon_gtk_builder_get_widget(builder,"LanguagesTree");
|
||||
window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton");
|
||||
window->AcceptButton = yon_gtk_builder_get_widget(builder,"AcceptButton");
|
||||
window->ManualEntry = yon_gtk_builder_get_widget(builder,"ManualEntry");
|
||||
window->LoadingOverlay = yon_gtk_builder_get_widget(builder,"LoadingOverlay");
|
||||
window->LoadingSpinner = yon_gtk_builder_get_widget(builder,"LoadingSpinner");
|
||||
window->ToggleCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"ToggleCell"));
|
||||
window->LanguagesList = GTK_LIST_STORE(gtk_builder_get_object(builder,"LanguagesList"));
|
||||
|
||||
g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
|
||||
g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_locale_accept),window);
|
||||
g_signal_connect(G_OBJECT(window->ToggleCell),"toggled",G_CALLBACK(on_locale_toggle),window);
|
||||
yon_gtk_tree_view_minimal_fixed_size_set_full(GTK_TREE_VIEW(window->LanguagesTree));
|
||||
|
||||
gtk_overlay_add_overlay(GTK_OVERLAY(window->LoadingOverlay),window->LoadingSpinner);
|
||||
g_thread_new("locales-thread",(GThreadFunc)yon_locales_load_func,window);
|
||||
return window;
|
||||
}
|
||||
|
||||
void on_language_open(GtkWidget *, main_window *widgets){
|
||||
language_window *window = yon_language_window_new();
|
||||
|
||||
g_object_set_data(G_OBJECT(window->Window),"widgets",widgets);
|
||||
|
||||
yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->MainWindow),ADD_LANGUAGE_TITLE_LABEL,icon_path,"LocalesWindow");
|
||||
|
||||
gtk_widget_show(window->Window);
|
||||
|
||||
}
|
||||
|
||||
void on_language_remove(GtkWidget *, main_window *widgets){
|
||||
GtkTreeIter iter;
|
||||
GtkTreeModel *model;
|
||||
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->LocaleTree)),&model,&iter)){
|
||||
gtk_list_store_remove(widgets->LanguageList,&iter);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void on_language_default_toggled(GtkWidget *, int status, main_window *widgets){
|
||||
gtk_widget_set_sensitive(widgets->LocaleTree,!status);
|
||||
gtk_widget_set_sensitive(widgets->LocaleAddButton,!status);
|
||||
GtkTreeModel *model;
|
||||
GtkTreeIter iter;
|
||||
if (!status&>k_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->LocaleTree)),&model,&iter)){
|
||||
gtk_widget_set_sensitive(widgets->LocaleRemoveButton,1);
|
||||
} else {
|
||||
gtk_widget_set_sensitive(widgets->LocaleRemoveButton,0);
|
||||
}
|
||||
}
|
||||
|
||||
void on_locale_toggled(GtkCellRenderer *, gchar *path, main_window *widgets){
|
||||
GtkTreeIter fiter;
|
||||
GtkTreeIter iter;
|
||||
GtkTreeModel *model = GTK_TREE_MODEL(widgets->LanguageList);
|
||||
gtk_tree_model_get_iter_from_string(model,&fiter,path);
|
||||
for_iter(model,&iter){
|
||||
gtk_list_store_set(GTK_LIST_STORE(model),&iter,0,0,-1);
|
||||
|
||||
}
|
||||
char *target;
|
||||
gtk_tree_model_get(model,&fiter,3,&target,-1);
|
||||
gtk_list_store_set(GTK_LIST_STORE(model),&fiter,0,1,-1);
|
||||
// yon_config_register(lang_parameter,lang_parameter_command,target);
|
||||
}
|
||||
|
||||
int yon_language_save(main_window *widgets){
|
||||
int status = gtk_switch_get_active(GTK_SWITCH(widgets->LocaleDefaultSwitch));
|
||||
if (!status){
|
||||
GtkTreeModel *model = GTK_TREE_MODEL(widgets->LanguageList);
|
||||
GtkTreeIter iter;
|
||||
char *locales = NULL;
|
||||
for_iter(model,&iter){
|
||||
int status;
|
||||
char *target;
|
||||
|
||||
gtk_tree_model_get(model,&iter,0,&status,3,&target,-1);
|
||||
char *temp = yon_char_append_element(locales?locales:"",target,",");
|
||||
if (!yon_char_is_empty(locales)) free(locales);
|
||||
locales = temp;
|
||||
if (status){
|
||||
yon_config_register(lang_parameter,lang_parameter_command,target);
|
||||
}
|
||||
}
|
||||
if (!yon_char_is_empty(locales)){
|
||||
yon_config_register(locale_parameter,locale_parameter_command,locales);
|
||||
}
|
||||
} else {
|
||||
yon_config_remove_by_key(lang_parameter);
|
||||
yon_config_remove_by_key(locale_parameter);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
void yon_language_init(main_window *widgets){
|
||||
yon_language_update(widgets);
|
||||
}
|
||||
@ -0,0 +1,238 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Generated with glade 3.40.0 -->
|
||||
<interface>
|
||||
<requires lib="gtk+" version="3.24"/>
|
||||
<object class="GtkListStore" id="LanguagesList">
|
||||
<columns>
|
||||
<!-- column-name Chosen -->
|
||||
<column type="gboolean"/>
|
||||
<!-- column-name Code -->
|
||||
<column type="gchararray"/>
|
||||
<!-- column-name Name -->
|
||||
<column type="gchararray"/>
|
||||
<!-- column-name Description -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
</object>
|
||||
<object class="GtkSpinner" id="LoadingSpinner">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="active">True</property>
|
||||
</object>
|
||||
<object class="GtkImage" id="image8">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="icon-name">com.ublinux.libublsettingsui-gtk3.cancel-uncolored-symbolic</property>
|
||||
</object>
|
||||
<object class="GtkImage" id="image9">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="icon-name">com.ublinux.libublsettingsui-gtk3.accept-symbolic</property>
|
||||
</object>
|
||||
<object class="GtkWindow" id="Window">
|
||||
<property name="width-request">500</property>
|
||||
<property name="height-request">550</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="modal">True</property>
|
||||
<property name="icon-name">com.ublinux.ubl-settings-system</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="margin-bottom">5</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="spacing">5</property>
|
||||
<child>
|
||||
<object class="GtkBox" id="StatusBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkOverlay" id="LoadingOverlay">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<child>
|
||||
<object class="GtkScrolledWindow">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">True</property>
|
||||
<property name="margin-start">5</property>
|
||||
<property name="margin-end">5</property>
|
||||
<property name="hscrollbar-policy">never</property>
|
||||
<property name="shadow-type">in</property>
|
||||
<child>
|
||||
<object class="GtkTreeView" id="LanguagesTree">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">True</property>
|
||||
<property name="model">LanguagesList</property>
|
||||
<property name="search-column">1</property>
|
||||
<property name="enable-grid-lines">both</property>
|
||||
<property name="activate-on-single-click">True</property>
|
||||
<child internal-child="selection">
|
||||
<object class="GtkTreeSelection"/>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkTreeViewColumn">
|
||||
<child>
|
||||
<object class="GtkCellRendererToggle" id="ToggleCell"/>
|
||||
<attributes>
|
||||
<attribute name="active">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkTreeViewColumn">
|
||||
<property name="title" translatable="yes">Locale</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText">
|
||||
<property name="wrap-mode">word</property>
|
||||
<property name="wrap-width">150</property>
|
||||
</object>
|
||||
<attributes>
|
||||
<attribute name="text">1</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkTreeViewColumn">
|
||||
<property name="sizing">autosize</property>
|
||||
<property name="min-width">35</property>
|
||||
<property name="title" translatable="yes">Language</property>
|
||||
<property name="expand">True</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText">
|
||||
<property name="wrap-mode">word</property>
|
||||
<property name="wrap-width">100</property>
|
||||
</object>
|
||||
<attributes>
|
||||
<attribute name="text">2</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkTreeViewColumn">
|
||||
<property name="sizing">autosize</property>
|
||||
<property name="title" translatable="yes">Territory</property>
|
||||
<property name="expand">True</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText">
|
||||
<property name="wrap-mode">word</property>
|
||||
<property name="wrap-width">125</property>
|
||||
</object>
|
||||
<attributes>
|
||||
<attribute name="text">3</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="index">-1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="margin-start">5</property>
|
||||
<property name="margin-end">5</property>
|
||||
<property name="spacing">5</property>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="label" translatable="yes">Manual input:</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkEntry" id="ManualEntry">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child type="titlebar">
|
||||
<object class="GtkHeaderBar" id="SettingsBar">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<child type="title">
|
||||
<object class="GtkLabel" id="TitleLabel">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="label" translatable="yes">System configuration</property>
|
||||
<attributes>
|
||||
<attribute name="weight" value="bold"/>
|
||||
</attributes>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="CancelButton">
|
||||
<property name="label" translatable="yes">Cancel</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">True</property>
|
||||
<property name="receives-default">True</property>
|
||||
<property name="image">image8</property>
|
||||
<style>
|
||||
<class name="button"/>
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="AcceptButton">
|
||||
<property name="label" translatable="yes">Apply</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">True</property>
|
||||
<property name="receives-default">True</property>
|
||||
<property name="image">image9</property>
|
||||
<style>
|
||||
<class name="button"/>
|
||||
</style>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="pack-type">end</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</interface>
|
||||
Loading…
Reference in new issue