diff --git a/languages.csv b/languages.csv index 78f12e5..7e96286 100644 --- a/languages.csv +++ b/languages.csv @@ -1,66 +1,66 @@ -LANG_GROUP;LANG;LANG_NAME -af;af_ZA.UTF-8;Afrikaans -ar;ar_AE.UTF-8;Arabic -as;as_IN.UTF-8;Assamese -az;az_AZ.UTF-8;Azerbaijani -be;be_BY.UTF-8;Belarusian -bg;bg_BG.UTF-8;Bulgarian -bn;bn_IN.UTF-8;Bengali -bs;bs_BA.UTF-8;Bosnian -ca;ca_ES.UTF-8;Catalan -cs;cs_CZ.UTF-8;Czech -da;da_DK.UTF-8;Danish -de;de_DE.UTF-8;German -el;el_GR.UTF-8;Greek -en;en_GB.UTF-8;English -es;es_ES.UTF-8;Spanish -et;et_EE.UTF-8;Estonian -fi;fi_FI.UTF-8;Finnish -fr;fr_FR.UTF-8;French -gu;gu_IN.UTF-8;Gujarati -he;he_IL.UTF-8;Hebrew -hi;hi_IN.UTF-8;Hindi -hr;hr_HR.UTF-8;Croatian -hu;hu_HU.UTF-8;Hungarian -hy;hy_AM.UTF-8;Armenian -id;id_ID.UTF-8;Indonesian -is;is_IS.UTF-8;Icelandic -it;it_IT.UTF-8;Italian -ja;ja_JP.UTF-8;Japanese -ka;ka_GE.UTF-8;Georgian -kk;kk_KZ.UTF-8;Kazakh -kn;kn_IN.UTF-8;Kannada -ko;ko_KR.UTF-8;Korean -ks;ks_IN.UTF-8;Kashmiri -ku;ku_TR.UTF-8;Kurdish -ky;ky_KG.UTF-8;Kirghiz -lt;lt_LT.UTF-8;Lithuanian -lv;lv_LV.UTF-8;Latvian -mk;mk_MK.UTF-8;Macedonian -ml;ml_IN.UTF-8;Malayalam -mr;mr_IN.UTF-8;Marathi -ms;ms_MY.UTF-8;Malay -mt;mt_MT.UTF-8;Maltese -nb;nb_NO.UTF-8;Bokmal -nl;nl_NL.UTF-8;Dutch -nn;nn_NO.UTF-8;Nynorsk -or;or_IN.UTF-8;Oriya -pa;pa_IN.UTF-8;Punjabi -pl;pl_PL.UTF-8;Polish -pt;pt_PT.UTF-8;Portuguese -ro;ro_RO.UTF-8;Romanian -ru;ru_RU.UTF-8;Russian -sa;sa_IN.UTF-8;Sanskrit -sk;sk_SK.UTF-8;Slovak -sl;sl_SI.UTF-8;Slovenian -sq;sq_AL.UTF-8;Albanian -sr;sr_ME.UTF-8;Serbian -sr;sr_RS.UTF-8;Serbian -sv;sv_SE.UTF-8;Swedish -ta;ta_IN.UTF-8;Tamil -te;te_IN.UTF-8;Telugu -th;th_TH.UTF-8;Thai -tr;tr_TR.UTF-8;Turkish -uk;uk_UA.UTF-8;Ukrainian -vi;vi_VN.UTF-8;Vietnamese -zh;zh_CN.UTF-8;Simplified Chinese \ No newline at end of file +LANG;LANG_NAME +af_ZA.UTF-8;Afrikaans +ar_AE.UTF-8;Arabic +as_IN.UTF-8;Assamese +az_AZ.UTF-8;Azerbaijani +be_BY.UTF-8;Belarusian +bg_BG.UTF-8;Bulgarian +bn_IN.UTF-8;Bengali +bs_BA.UTF-8;Bosnian +ca_ES.UTF-8;Catalan +cs_CZ.UTF-8;Czech +da_DK.UTF-8;Danish +de_DE.UTF-8;German +el_GR.UTF-8;Greek +en_GB.UTF-8;English +es_ES.UTF-8;Spanish +et_EE.UTF-8;Estonian +fi_FI.UTF-8;Finnish +fr_FR.UTF-8;French +gu_IN.UTF-8;Gujarati +he_IL.UTF-8;Hebrew +hi_IN.UTF-8;Hindi +hr_HR.UTF-8;Croatian +hu_HU.UTF-8;Hungarian +hy_AM.UTF-8;Armenian +id_ID.UTF-8;Indonesian +is_IS.UTF-8;Icelandic +it_IT.UTF-8;Italian +ja_JP.UTF-8;Japanese +ka_GE.UTF-8;Georgian +kk_KZ.UTF-8;Kazakh +kn_IN.UTF-8;Kannada +ko_KR.UTF-8;Korean +ks_IN.UTF-8;Kashmiri +ku_TR.UTF-8;Kurdish +ky_KG.UTF-8;Kirghiz +lt_LT.UTF-8;Lithuanian +lv_LV.UTF-8;Latvian +mk_MK.UTF-8;Macedonian +ml_IN.UTF-8;Malayalam +mr_IN.UTF-8;Marathi +ms_MY.UTF-8;Malay +mt_MT.UTF-8;Maltese +nb_NO.UTF-8;Bokmal +nl_NL.UTF-8;Dutch +nn_NO.UTF-8;Nynorsk +or_IN.UTF-8;Oriya +pa_IN.UTF-8;Punjabi +pl_PL.UTF-8;Polish +pt_PT.UTF-8;Portuguese +ro_RO.UTF-8;Romanian +ru_RU.UTF-8;Russian +sa_IN.UTF-8;Sanskrit +sk_SK.UTF-8;Slovak +sl_SI.UTF-8;Slovenian +sq_AL.UTF-8;Albanian +sr_ME.UTF-8;Serbian +sr_RS.UTF-8;Serbian +sv_SE.UTF-8;Swedish +ta_IN.UTF-8;Tamil +te_IN.UTF-8;Telugu +th_TH.UTF-8;Thai +tr_TR.UTF-8;Turkish +uk_UA.UTF-8;Ukrainian +vi_VN.UTF-8;Vietnamese +zh_CN.UTF-8;Simplified Chinese \ No newline at end of file diff --git a/locales.csv b/locales.csv index b78f731..1d8d0ca 100644 --- a/locales.csv +++ b/locales.csv @@ -79,7 +79,7 @@ hu;hu_HU.UTF-8;Hungarian, Hungary hy;hy_AM.UTF-8;Armenian, Armenia id;id_ID.UTF-8;Indonesian, Indonesia is;is_IS.UTF-8;Icelandic, Iceland -it;it_CH.UTF-8;Italian, Switzerla;nd +it;it_CH.UTF-8;Italian, Switzerland it;it_IT.UTF-8;Italian, Italy ja;ja_JP.UTF-8;Japanese, Japan ka;ka_GE.UTF-8;Georgian, Georgia diff --git a/source/ubinstall-gtk.c b/source/ubinstall-gtk.c index b2a091c..7914616 100644 --- a/source/ubinstall-gtk.c +++ b/source/ubinstall-gtk.c @@ -310,14 +310,28 @@ void config_init(){ // void *on_setup_system_configuration(void *data); -void on_locale_changed(GtkWidget *self,main_window *widgets){ - char *window_language; +void on_locale_changed(GtkWidget *,main_window *widgets){ GtkTreeIter iter; GtkTreeModel *model; if (!gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->LanguagesTree)),&model,&iter)) return; - gtk_tree_model_get(model,&iter,0,&window_language,-1); - if (!yon_char_is_empty(window_language)){ - yon_config_register(installer_lang_parameter,installer_lang_parameter_command,(char*)window_language); + gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(widgets->InstallerCountryFilter)); + char *config_code = config(installer_lang_parameter); + if (yon_char_is_empty(config_code)){ + config_code = yon_char_new(setlocale(LC_ALL,NULL)); + if (strstr(config_code,".")){ + yon_char_divide_search_self(config_code,".",-1); + } + } + GtkTreeIter itar; + for_iter(widgets->InstallerCountryFilter,&iter){ + gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(widgets->InstallerCountryFilter),&itar,&iter); + char *target; + gtk_tree_model_get(GTK_TREE_MODEL(widgets->InstallerCountryList),&itar,2,&target,-1); + if (!strcmp(config_code,target)){ + gtk_tree_model_filter_convert_child_iter_to_iter(GTK_TREE_MODEL_FILTER(widgets->InstallerCountryFilter),&iter,&itar); + gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->CountryLanguagesTree)),&iter); + break; + } } } @@ -326,9 +340,8 @@ void on_installer_language_changed(GtkWidget *self, main_window *widgets){ char *window_language; GtkTreeIter iter; GtkTreeModel *model; - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->LanguagesTree)),&model,&iter)){ - gtk_tree_model_get(model,&iter,0,&window_language,-1); - } + if (!gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->CountryLanguagesTree)),&model,&iter)) return; + gtk_tree_model_get(model,&iter,2,&window_language,-1); if (!yon_char_is_empty(window_language)){ yon_config_register(installer_lang_parameter,installer_lang_parameter_command,(char*)window_language); } @@ -351,7 +364,6 @@ void on_installer_language_changed(GtkWidget *self, main_window *widgets){ g_signal_handlers_block_by_func(G_OBJECT(self),G_CALLBACK(on_locale_changed),widgets); model = GTK_TREE_MODEL(widgets->InstallerLanguageList); gtk_tree_model_get_iter_from_string(model,&iter,active_lang_id); - gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->LanguagesTree)),&iter); g_signal_handlers_unblock_by_func(G_OBJECT(self),G_CALLBACK(on_locale_changed),widgets); } @@ -413,6 +425,7 @@ typedef struct{ char *locale_name; char *code; char *localised_name; + char *code_full; } locale_struct; void set_locales_list(main_window *widgets){ @@ -435,6 +448,30 @@ void set_locales_list(main_window *widgets){ yon_char_remove_last_symbol(code,'"'); free(yon_char_divide_search(code,"\"",-1)); + { + char *region = yon_char_parsed_check_exist_begins_with(code_info,info_size,"territory"); + if (!yon_char_is_empty(region)){ + yon_char_remove_last_symbol(region,'\n'); + yon_char_remove_last_symbol(region,'"'); + free(yon_char_divide_search(region,"\"",-1)); + } + char *lang_name = yon_char_parsed_check_exist_begins_with(code_info,info_size,"language"); + if (!yon_char_is_empty(lang_name)){ + yon_char_remove_last_symbol(lang_name,'\n'); + yon_char_remove_last_symbol(lang_name,'"'); + free(yon_char_divide_search(lang_name,"\"",-1)); + } + char *tooltip = yon_char_parsed_check_exist_begins_with(code_info,info_size,"title"); + if (!yon_char_is_empty(tooltip)){ + yon_char_remove_last_symbol(tooltip,'\n'); + yon_char_remove_last_symbol(tooltip,'"'); + free(yon_char_divide_search(tooltip,"\"",-1)); + } + GtkTreeIter iter; + char *country = yon_char_unite(lang_name," (",region,")",NULL); + gtk_list_store_append(widgets->InstallerCountryList,&iter); + gtk_list_store_set(widgets->InstallerCountryList,&iter,0,code,1,_(country),2,locales[i],3,_(tooltip),-1); + } if (!g_hash_table_contains(localisations,code)) { locale_struct *locale = malloc(sizeof(locale_struct)); memset(locale,0,sizeof(locale_struct)); @@ -442,6 +479,7 @@ void set_locales_list(main_window *widgets){ locale->locale_name = yon_char_parsed_check_exist_begins_with(code_info,info_size,"language"); locale->code = code; locale->localised_name = yon_char_parsed_check_exist_begins_with(code_info,info_size,"lang_name"); + locale->code_full = yon_char_new(locales[i]); if (!yon_char_is_empty(locale->locale_name)){ yon_char_remove_last_symbol(locale->locale_name,'\n'); @@ -462,11 +500,50 @@ void set_locales_list(main_window *widgets){ GtkTreeIter iter; dictionary *dict; + char *config_val = yon_char_new(config(installer_lang_parameter)); + char *config_code = NULL; + if (yon_char_is_empty(config_val)) config_val = yon_char_new(setlocale(LC_ALL,NULL)); + if(strstr(config_val,"_")){ + config_code = yon_char_divide_search(config_val,"_",-1); + free(config_val); + + } for_dictionaries(dict,locale_dict){ locale_struct *locale = yon_dictionary_get_data(dict,locale_struct*); gtk_list_store_append(widgets->InstallerLanguageList,&iter); - gtk_list_store_set(widgets->InstallerLanguageList,&iter,0,locale->code,1,locale->locale_name,2,locale->localised_name,-1); + gtk_list_store_set(widgets->InstallerLanguageList,&iter,0,locale->code,1,locale->locale_name,2,_(locale->localised_name),3,locale->code_full,-1); + if (!yon_char_is_empty(config_code)){ + if (!strcmp(config_code,locale->code)){ + g_signal_handlers_block_by_func(G_OBJECT(widgets->CountryLanguagesTree),G_CALLBACK(on_installer_language_changed),widgets); + gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->LanguagesTree)),&iter); + on_locale_changed(NULL,widgets); + g_signal_handlers_unblock_by_func(G_OBJECT(widgets->CountryLanguagesTree),G_CALLBACK(on_installer_language_changed),widgets); + } + } + + } + +} + +gboolean on_country_filter(GtkTreeModel *self, GtkTreeIter *iter, main_window *widgets){ + GtkTreeIter itar; + GtkTreeModel *model; + if (!gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->LanguagesTree)),&model,&itar)) return 0; + char *cur_code,*country; + gtk_tree_model_get(self,iter,0,&cur_code,1,&country,-1); + char *code; + + gtk_tree_model_get(model,&itar,0,&code,-1); + if (!strcmp(code,cur_code)){ + char *config_lang = config(installer_lang_parameter); + if (!yon_char_is_empty(config_lang)&&!strcmp(cur_code,config_lang)){ + if (gtk_tree_model_filter_convert_child_iter_to_iter(GTK_TREE_MODEL_FILTER(widgets->InstallerCountryFilter),iter,&itar)){ + gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->CountryLanguagesTree)),&itar); + } + } + return 1; } + return 0; } @@ -625,6 +702,7 @@ void yon_main_window_create(main_window *widgets){ widgets->LanguagesTree=yon_gtk_builder_get_widget(builder,"LanguagesTree"); widgets->CountryLanguagesTree=yon_gtk_builder_get_widget(builder,"CountryLanguagesTree"); widgets->InstallerCountryList=GTK_LIST_STORE(gtk_builder_get_object(builder,"InstallerCountryList")); + widgets->InstallerCountryFilter=GTK_TREE_MODEL(gtk_builder_get_object(builder,"InstallerCountryFilter")); widgets->InstallerLanguageList=GTK_LIST_STORE(gtk_builder_get_object(builder,"InstallerLanguageList")); // widgets->LanguageCombo=yon_gtk_builder_get_widget(builder,"LanguageCombo"); widgets->RegionCombo=yon_gtk_builder_get_widget(builder,"RegionCombo"); @@ -793,7 +871,7 @@ void yon_main_window_create(main_window *widgets){ gtk_tree_model_filter_set_visible_column(GTK_TREE_MODEL_FILTER(widgets->LayoutsFilter),3); g_signal_connect(G_OBJECT(widgets->LanguagesTree),"cursor-changed",G_CALLBACK(on_locale_changed),widgets); - g_signal_connect(G_OBJECT(widgets->CountryLanguagesTree),"cursor-changed",G_CALLBACK(on_locale_changed),widgets); + g_signal_connect(G_OBJECT(widgets->CountryLanguagesTree),"cursor-changed",G_CALLBACK(on_installer_language_changed),widgets); // g_signal_connect(G_OBJECT(widgets->LanguageCombo),"changed",G_CALLBACK(on_locale_changed),widgets); g_signal_connect(G_OBJECT(widgets->AdditionalSoftwareCell),"toggled",G_CALLBACK(on_additional_software_toggled),widgets); g_signal_connect(G_OBJECT(widgets->StartupChosenCell),"toggled",G_CALLBACK(on_srartup_services_toggled),widgets); @@ -847,6 +925,7 @@ void yon_main_window_create(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->SourceButton),"clicked",G_CALLBACK(on_source_clicked),widgets); g_signal_connect(G_OBJECT(widgets->SkipInstallationButton),"clicked",G_CALLBACK(on_system_setup_pass),widgets); + gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(widgets->InstallerCountryFilter),(GtkTreeModelFilterVisibleFunc)on_country_filter,widgets,NULL); { if (main_config.lock_load_global == 1){ @@ -898,7 +977,6 @@ void yon_main_window_create(main_window *widgets){ } gtk_builder_connect_signals(builder,NULL); // yon_load_proceed(YON_CONFIG_LOCAL); - on_config_global_load(NULL,widgets); // yon_interface_update(widgets); if (!yon_char_is_empty(config(AUTOINSTALL_TYPE_INSTALL))){ gtk_widget_show(widgets->StartScenarioButton); @@ -951,6 +1029,7 @@ int main(int argc, char *argv[]){ gtk_init(&argc,&argv); main_window *widgets = NULL; widgets = yon_main_window_complete(); + on_config_global_load(NULL,widgets); if (widgets){}; char *path = yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL); yon_window_config_setup(GTK_WINDOW(widgets->MainWindow)); diff --git a/source/ubinstall-gtk.h b/source/ubinstall-gtk.h index 6d0d1ad..541ba2a 100755 --- a/source/ubinstall-gtk.h +++ b/source/ubinstall-gtk.h @@ -59,7 +59,7 @@ #define licence_path "/usr/share/ublinux/agreement/EULA.txt" #define languages_path "/usr/share/ubinstall-gtk/csv/locales.csv" -#define installer_languages_path "resource:///com/ublinux/csv/languages.csv" +// #define installer_languages_path "resource:///com/ublinux/csv/languages.csv" #define zone_path "/usr/share/zoneinfo/" @@ -445,6 +445,7 @@ typedef struct { GtkWidget *CountryLanguagesTree; GtkListStore *InstallerCountryList; GtkListStore *InstallerLanguageList; + GtkTreeModel *InstallerCountryFilter; // GtkWidget *LanguageCombo; GtkWidget *RegionCombo; GtkWidget *ZoneCombo; @@ -1131,4 +1132,5 @@ void yon_resize_images_update(main_window *widgets); void on_vnc_toggled(GtkWidget *self, main_window *widgets); void yon_main_window_create(main_window *widgets); void set_locales_list(main_window *widgets); -void on_installer_language_changed(GtkWidget *self, main_window *widgets); \ No newline at end of file +void on_installer_language_changed(GtkWidget *self, main_window *widgets); +gboolean on_country_filter(GtkTreeModel *self, GtkTreeIter *iter, main_window *widgets); \ No newline at end of file diff --git a/ubinstall-gtk.glade b/ubinstall-gtk.glade index 3577bd0..31ad87d 100644 --- a/ubinstall-gtk.glade +++ b/ubinstall-gtk.glade @@ -1,5 +1,5 @@ - + @@ -56,8 +56,15 @@ + + + + + + InstallerCountryList + @@ -66,6 +73,8 @@ + + @@ -878,13 +887,22 @@ and help you install UBLinux on your computer True True - InstallerCountryList + InstallerCountryFilter False + 1 + 3 - + + + + + 1 + + +