Added language slide; Fixed kernel crash

pull/165/head
parent 62684554e9
commit 2775a9e37f

@ -19,6 +19,7 @@
<file>ubinstall-gtk-configuration-mode.glade</file>
<file>ubinstall-gtk-source.glade</file>
<file>ubinstall-gtk-source-element.glade</file>
<file>ubinstall-gtk-layouts.glade</file>
</gresource>
<gresource prefix="/com/ublinux/css">
<file>ubinstall-gtk.css</file>

@ -72,6 +72,7 @@ set(DEPENDFILES
../ubinstall-gtk-configuration-mode.glade
../ubinstall-gtk-source.glade
../ubinstall-gtk-source-element.glade
../ubinstall-gtk-layouts.glade
../gresource.xml
../ubinstall-gtk.css
../modules.csv
@ -147,6 +148,7 @@ set(SOURCE_FILES
ubinstall-gtk-install-start.c
ubinstall-gtk-startup-services.c
ubinstall-gtk-kernel.c
ubinstall-gtk-language.c
ubinstall-gtk.h
ubl-strings.h
)

@ -195,24 +195,27 @@ void yon_os_components_init(main_window *widgets){
int size = 0;
GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->OSSoftwareListBox));
GList *iter;
if (!list){
gtk_overlay_add_overlay(GTK_OVERLAY(widgets->OSOverlay),widgets->OSSpinner);
gtk_spinner_start(GTK_SPINNER(widgets->OSSpinner));
gtk_widget_show(widgets->OSSpinner);
g_thread_new("geag",(GThreadFunc)yon_os_components_setup,widgets);
while(gtk_events_pending()) gtk_main_iteration();
list = gtk_container_get_children(GTK_CONTAINER(widgets->OSSoftwareListBox));
for(iter = list;iter;iter=iter->next){
os_row *row = g_object_get_data(iter->data,"kernel_row");
int cur_size = 0;
gtk_widget_realize(row->RowBox);
gtk_widget_get_preferred_width(row->RowBox,&cur_size,NULL);
if (size<cur_size)size=cur_size;
}
for(iter = list;iter;iter=iter->next){
os_row *row = g_object_get_data(iter->data,"kernel_row");
gtk_widget_set_size_request(row->RowBox,size,-1);
}
for (iter=list;iter;iter=iter->next){
os_row *row = g_object_get_data(iter->data,"kernel_row");
free(row);
gtk_widget_destroy(GTK_WIDGET(iter->data));
}
gtk_overlay_add_overlay(GTK_OVERLAY(widgets->OSOverlay),widgets->OSSpinner);
gtk_spinner_start(GTK_SPINNER(widgets->OSSpinner));
gtk_widget_show(widgets->OSSpinner);
g_thread_new("geag",(GThreadFunc)yon_os_components_setup,widgets);
while(gtk_events_pending()) gtk_main_iteration();
list = gtk_container_get_children(GTK_CONTAINER(widgets->OSSoftwareListBox));
for(iter = list;iter;iter=iter->next){
os_row *row = g_object_get_data(iter->data,"kernel_row");
int cur_size = 0;
gtk_widget_realize(row->RowBox);
gtk_widget_get_preferred_width(row->RowBox,&cur_size,NULL);
if (size<cur_size)size=cur_size;
}
for(iter = list;iter;iter=iter->next){
os_row *row = g_object_get_data(iter->data,"kernel_row");
gtk_widget_set_size_request(row->RowBox,size,-1);
}
char *modules = config(modules_parameter);

@ -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&&gtk_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);
}

@ -10,11 +10,12 @@ enum YON_PAGES yon_page_get_next(main_window *widgets, enum YON_PAGES page){
case YON_PAGE_SECTIONS: return yon_sections_get_next_page(widgets); break;
case YON_PAGE_OS_COMPONENTS: return YON_PAGE_SOFTWARE; break;
case YON_PAGE_SOFTWARE: return main_config.configure_mode? YON_PAGE_REGION : YON_PAGE_INSTALLATION_BEGIN; break;
case YON_PAGE_INSTALLATION_BEGIN: return YON_PAGE_KEYBOARD; break;
case YON_PAGE_INSTALLATION_BEGIN: return YON_PAGE_REGION; break;
case YON_PAGE_KERNEL: return YON_PAGE_PACKAGES_HUB; break;
case YON_PAGE_KERNEL_ADDON: return YON_PAGE_PACKAGES_HUB; break;
case YON_PAGE_PACMAN_SOFTWARE: return YON_PAGE_PACKAGES_HUB; break;
case YON_PAGE_REGION: return YON_PAGE_KEYBOARD; break;
case YON_PAGE_REGION: return YON_PAGE_LANGUAGE; break;
case YON_PAGE_LANGUAGE: return YON_PAGE_KEYBOARD; break;
case YON_PAGE_KEYBOARD: return YON_PAGE_USERS; break;
case YON_PAGE_USERS: return YON_PAGE_STARTUP; break;
case YON_PAGE_STARTUP: return YON_PAGE_BOOTLOADER; break;
@ -181,6 +182,9 @@ int yon_page_save(main_window *widgets, enum YON_PAGES page){
case YON_PAGE_REGION:
return yon_region_save(widgets);
break;
case YON_PAGE_LANGUAGE:
return yon_language_save(widgets);
break;
case YON_PAGE_KEYBOARD:
return yon_keyboard_save(widgets);
break;
@ -260,6 +264,7 @@ void yon_switch_page_render(main_window *widgets){
case YON_PAGE_REGION:
page = 3;
break;
case YON_PAGE_LANGUAGE:
case YON_PAGE_KEYBOARD:
page = 4;
break;
@ -361,6 +366,9 @@ void yon_page_init(main_window *widgets, enum YON_PAGES page){
case YON_PAGE_REGION:
yon_region_init(widgets);
break;
case YON_PAGE_LANGUAGE:
yon_language_init(widgets);
break;
case YON_PAGE_KEYBOARD:
yon_keyboard_init(widgets);
break;

@ -973,6 +973,13 @@ void yon_main_window_create(main_window *widgets){
widgets->UserAddBox=yon_gtk_builder_get_widget(builder,"UserAddBox");
widgets->UserAddButton=yon_gtk_builder_get_widget(builder,"UserAddButton");
widgets->LocaleTree = yon_gtk_builder_get_widget(builder,"LocaleTree");
widgets->LocaleAddButton = yon_gtk_builder_get_widget(builder,"LocaleAddButton");
widgets->LocaleRemoveButton = yon_gtk_builder_get_widget(builder,"LocaleRemoveButton");
widgets->LocaleDefaultSwitch = yon_gtk_builder_get_widget(builder,"LocaleDefaultSwitch");
widgets->LocaleCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"LocaleCell"));
widgets->LanguageList = GTK_LIST_STORE(gtk_builder_get_object(builder,"LanguageList"));
widgets->HotnameEntry=yon_gtk_builder_get_widget(builder,"HotnameEntry");
widgets->mainSettingsButton=yon_gtk_builder_get_widget(builder,"mainSettingsButton");
widgets->RegionImage = yon_gtk_builder_get_widget(builder,"RegionImage");
@ -1088,6 +1095,12 @@ void yon_main_window_create(main_window *widgets){
g_signal_connect(G_OBJECT(widgets->MainWindow),"check-resize",G_CALLBACK(on_region_resized),widgets);
g_signal_connect(G_OBJECT(widgets->NextButton),"clicked",G_CALLBACK(on_page_next_clicked),widgets);
g_signal_connect(G_OBJECT(widgets->BackButton),"clicked",G_CALLBACK(on_page_prev_clicked),widgets);
g_signal_connect(G_OBJECT(widgets->LocaleAddButton),"clicked",G_CALLBACK(on_language_open),widgets);
g_signal_connect(G_OBJECT(widgets->LocaleRemoveButton),"clicked",G_CALLBACK(on_language_remove),widgets);
g_signal_connect(G_OBJECT(widgets->LocaleDefaultSwitch),"state-set",G_CALLBACK(on_language_default_toggled),widgets);
g_signal_connect(G_OBJECT(widgets->LocaleCell),"toggled",G_CALLBACK(on_locale_toggled),widgets);
g_signal_connect(G_OBJECT(widgets->CancelInstallButton),"clicked",G_CALLBACK(on_page_cancel_clicked),widgets);
g_signal_connect(G_OBJECT(widgets->AvailableLanguagesButton),"clicked",G_CALLBACK(on_language_clicked),widgets);
g_signal_connect(G_OBJECT(widgets->RegionCombo),"changed",G_CALLBACK(on_region_changed),widgets);

@ -38,6 +38,7 @@
#define glade_path_configuration_mode "/com/ublinux/ui/ubinstall-gtk-configuration-mode.glade"
#define glade_path_source "/com/ublinux/ui/ubinstall-gtk-source.glade"
#define glade_path_source_element "/com/ublinux/ui/ubinstall-gtk-source-element.glade"
#define glade_locales_path "/com/ublinux/ui/ubinstall-gtk-layouts.glade"
#define CssPath "/com/ublinux/css/ubinstall-gtk.css"
#define config_path yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL)
@ -351,6 +352,7 @@ enum YON_PAGES {
YON_PAGE_SOFTWARE,
YON_PAGE_PACMAN_SOFTWARE,
YON_PAGE_REGION,
YON_PAGE_LANGUAGE,
YON_PAGE_KEYBOARD,
YON_PAGE_USERS,
YON_PAGE_STARTUP,
@ -498,6 +500,13 @@ typedef struct {
GtkWidget *menu1;
GtkWidget *menu2;
GtkWidget *LocaleDefaultSwitch;
GtkWidget *LocaleTree;
GtkWidget *LocaleAddButton;
GtkWidget *LocaleRemoveButton;
GtkCellRenderer *LocaleCell;
GtkListStore *LanguageList;
GtkWidget *RegionImage;
GtkWidget *RegionBox;
GtkWidget *RegionAspect;
@ -998,6 +1007,28 @@ struct row_data {
char *description;
};
typedef struct {
GtkWidget *Window;
GtkWidget *StatusBox;
GtkWidget *LanguagesTree;
GtkWidget *CancelButton;
GtkWidget *AcceptButton;
GtkWidget *ManualEntry;
GtkWidget *LoadingOverlay;
GtkWidget *LoadingSpinner;
GtkCellRenderer *ToggleCell;
GtkListStore *LanguagesList;
} language_window;
struct locales_struct {
char *locale;
char *lang;
char *territory;
int chosen;
GtkListStore *list;
};
void config_init();
main_window *yon_main_window_complete();
@ -1236,4 +1267,17 @@ kernel_addon_row *yon_kernel_addon_row_new();
void yon_kernel_addon_row_setup(kernel_addon_row *row, char *name, char *modules,char *package, char *description);
void on_kernel_addon_install_enabled(GtkWidget *, kernel_addon_row *row);
void on_kernel_addon_info(GtkLabel *self);
void yon_license_init(main_window *widgets);
void yon_license_init(main_window *widgets);
void on_locale_toggle(GtkCellRenderer *, gchar *path,language_window *window);
void on_locale_accept(GtkWidget *self, language_window *window);
gboolean yon_locale_window_set_locales(struct locales_struct *data);
gboolean yon_locale_window_unlock(GtkWidget *spinner);
void *yon_locales_load_func(language_window *window);
language_window *yon_language_window_new();
void on_language_open(GtkWidget *, main_window *widgets);
void on_language_remove(GtkWidget *, main_window *widgets);
void on_language_default_toggled(GtkWidget *, int status, main_window *widgets);
void on_locale_toggled(GtkCellRenderer *, gchar *path, main_window *widgets);
void yon_language_update(main_window *widgets);
int yon_language_save(main_window *widgets);
void yon_language_init(main_window *widgets);

@ -234,6 +234,7 @@ NULL)
#define PACKAGE_INFO_LABEL _("Package information")
#define LICENCE_AGREE_LABEL _("Yes, I agree to the License Agreement")
#define LICENCE_DISAGREE_LABEL _("No, i do not agree")
#define ADD_LANGUAGE_TITLE_LABEL _("Add locales")
// #define _LABEL _("<i><b>Package:</b></i>")
// #define _LABEL _("<i><b>Module:</b></i>")
// #define _LABEL _("New section at")

@ -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>

@ -94,6 +94,18 @@
<column type="gchararray"/>
</columns>
</object>
<object class="GtkListStore" id="LanguageList">
<columns>
<!-- column-name SystemLocale -->
<column type="gboolean"/>
<!-- column-name Name -->
<column type="gchararray"/>
<!-- column-name Country -->
<column type="gchararray"/>
<!-- column-name Value -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkListStore" id="LanguagesList">
<columns>
<!-- column-name Chosen -->
@ -126,6 +138,7 @@
<object class="GtkTreeModelFilter" id="LayoutsFilter">
<property name="child-model">LayoutList</property>
</object>
<object class="GtkListStore" id="LocaleList"/>
<object class="GtkSpinner" id="MainSpinner">
<property name="visible">True</property>
<property name="can-focus">False</property>
@ -321,11 +334,21 @@
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.libublsettingsui-gtk3.flag-finish-symbolic</property>
</object>
<object class="GtkImage" id="image29">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.libublsettingsui-gtk3.increase-symbolic</property>
</object>
<object class="GtkImage" id="image3">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.libublsettingsui-gtk3.properties-symbolic</property>
</object>
<object class="GtkImage" id="image30">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.libublsettingsui-gtk3.trash-symbolic</property>
</object>
<object class="GtkImage" id="image36">
<property name="visible">True</property>
<property name="can-focus">False</property>
@ -1048,7 +1071,7 @@ agreement</property>
<object class="GtkLabel" id="WelcomeInfoLabel2">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">This program will ask you few questions and help you install system on your computer</property>
<property name="label" translatable="yes">Please read the license agreement before continuing the installation.</property>
<property name="justify">center</property>
<property name="wrap">True</property>
<property name="xalign">0</property>
@ -1238,7 +1261,7 @@ agreement</property>
<object class="GtkLabel" id="WelcomeInfoLabel1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">This program will ask you few questions and help you install system on your computer</property>
<property name="label" translatable="yes">Please specify what type of installation you want to perform</property>
<property name="justify">center</property>
<property name="wrap">True</property>
<property name="xalign">0</property>
@ -1768,7 +1791,7 @@ agreement</property>
<object class="GtkLabel" id="WelcomeTitleLabel3">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Installation completion</property>
<property name="label" translatable="yes">Selection of main components</property>
<property name="wrap">True</property>
<property name="xalign">0</property>
<attributes>
@ -1788,7 +1811,7 @@ agreement</property>
<object class="GtkLabel" id="WelcomeInfoLabel3">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">This program will ask you few questions and help you install system on your computer</property>
<property name="label" translatable="yes">Specify what type of installation you want to perform</property>
<property name="justify">center</property>
<property name="wrap">True</property>
<property name="xalign">0</property>
@ -1909,12 +1932,8 @@ agreement</property>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Selecting additional software to install from the repository via the Internet</property>
</object>
<child type="label_item">
<placeholder/>
</child>
</object>
<packing>
@ -3273,7 +3292,7 @@ agreement</property>
<object class="GtkLabel" id="WelcomeTitleLabel8">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Choose system kernel</property>
<property name="label" translatable="yes">Location</property>
<property name="wrap">True</property>
<property name="xalign">0</property>
<attributes>
@ -3293,7 +3312,7 @@ agreement</property>
<object class="GtkLabel" id="WelcomeInfoLabel8">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">This program will ask you few questions and help you install system on your computer</property>
<property name="label" translatable="yes">Enter your time zone</property>
<property name="justify">center</property>
<property name="wrap">True</property>
<property name="xalign">0</property>
@ -3609,6 +3628,204 @@ agreement</property>
<property name="tab-fill">False</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</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">Available locales in the system:</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSwitch" id="LocaleDefaultSwitch">
<property name="visible">True</property>
<property name="can-focus">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Default</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkScrolledWindow">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="shadow-type">in</property>
<property name="min-content-height">125</property>
<child>
<object class="GtkTreeView" id="LocaleTree">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="model">LanguageList</property>
<property name="search-column">0</property>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">System locale</property>
<child>
<object class="GtkCellRendererToggle" id="LocaleCell">
<property name="radio">True</property>
</object>
<attributes>
<attribute name="active">0</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="min-width">100</property>
<property name="title" translatable="yes">Locale</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">3</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Language</property>
<property name="expand">True</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">1</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Territory</property>
<property name="expand">True</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">2</attribute>
</attributes>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkButton" id="LocaleAddButton">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Add locale</property>
<property name="image">image29</property>
<style>
<class name="thin"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="LocaleRemoveButton">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Remove language</property>
<property name="image">image30</property>
<style>
<class name="thin"/>
</style>
</object>
<packing>
<property name="expand">False</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">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="position">10</property>
</packing>
</child>
<child type="tab">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Language</property>
</object>
<packing>
<property name="position">10</property>
<property name="tab-fill">False</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
@ -3653,7 +3870,7 @@ agreement</property>
<object class="GtkLabel" id="WelcomeTitleLabel9">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Choose system kernel</property>
<property name="label" translatable="yes">Keyboard</property>
<property name="wrap">True</property>
<property name="xalign">0</property>
<attributes>
@ -3673,7 +3890,7 @@ agreement</property>
<object class="GtkLabel" id="WelcomeInfoLabel9">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">This program will ask you few questions and help you install system on your computer</property>
<property name="label" translatable="yes">Specify your preferred keyboard settings</property>
<property name="justify">center</property>
<property name="wrap">True</property>
<property name="xalign">0</property>
@ -3723,7 +3940,6 @@ agreement</property>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Keyboard</property>
<attributes>
<attribute name="weight" value="bold"/>
<attribute name="scale" value="1"/>
@ -3993,7 +4209,7 @@ agreement</property>
</child>
</object>
<packing>
<property name="position">10</property>
<property name="position">11</property>
</packing>
</child>
<child type="tab">
@ -4003,7 +4219,7 @@ agreement</property>
<property name="label" translatable="yes">Keyboard</property>
</object>
<packing>
<property name="position">10</property>
<property name="position">11</property>
<property name="tab-fill">False</property>
</packing>
</child>
@ -4453,7 +4669,7 @@ agreement</property>
</child>
</object>
<packing>
<property name="position">11</property>
<property name="position">12</property>
</packing>
</child>
<child type="tab">
@ -4463,7 +4679,7 @@ agreement</property>
<property name="label" translatable="yes">Users</property>
</object>
<packing>
<property name="position">11</property>
<property name="position">12</property>
<property name="tab-fill">False</property>
</packing>
</child>
@ -4751,7 +4967,7 @@ agreement</property>
</child>
</object>
<packing>
<property name="position">12</property>
<property name="position">13</property>
</packing>
</child>
<child type="tab">
@ -4761,7 +4977,7 @@ agreement</property>
<property name="label" translatable="yes">Startup configuration</property>
</object>
<packing>
<property name="position">12</property>
<property name="position">13</property>
<property name="tab-fill">False</property>
</packing>
</child>
@ -5217,7 +5433,7 @@ agreement</property>
</child>
</object>
<packing>
<property name="position">13</property>
<property name="position">14</property>
</packing>
</child>
<child type="tab">
@ -5227,7 +5443,7 @@ agreement</property>
<property name="label" translatable="yes">Bootloader</property>
</object>
<packing>
<property name="position">13</property>
<property name="position">14</property>
<property name="tab-fill">False</property>
</packing>
</child>
@ -5713,7 +5929,7 @@ agreement</property>
</child>
</object>
<packing>
<property name="position">14</property>
<property name="position">15</property>
</packing>
</child>
<child type="tab">
@ -5723,7 +5939,7 @@ agreement</property>
<property name="label" translatable="yes">Network</property>
</object>
<packing>
<property name="position">14</property>
<property name="position">15</property>
<property name="tab-fill">False</property>
</packing>
</child>
@ -6071,7 +6287,7 @@ agreement</property>
</child>
</object>
<packing>
<property name="position">15</property>
<property name="position">16</property>
</packing>
</child>
<child type="tab">
@ -6081,7 +6297,7 @@ agreement</property>
<property name="label" translatable="yes">Packages</property>
</object>
<packing>
<property name="position">15</property>
<property name="position">16</property>
<property name="tab-fill">False</property>
</packing>
</child>
@ -6225,7 +6441,7 @@ agreement</property>
</child>
</object>
<packing>
<property name="position">16</property>
<property name="position">17</property>
</packing>
</child>
<child type="tab">
@ -6235,7 +6451,7 @@ agreement</property>
<property name="label" translatable="yes">Installation process</property>
</object>
<packing>
<property name="position">16</property>
<property name="position">17</property>
<property name="tab-fill">False</property>
</packing>
</child>
@ -6416,7 +6632,7 @@ or continue working in the environment, booted from the Live image.</property>
</child>
</object>
<packing>
<property name="position">17</property>
<property name="position">18</property>
</packing>
</child>
<child type="tab">
@ -6426,7 +6642,7 @@ or continue working in the environment, booted from the Live image.</property>
<property name="label" translatable="yes">Completion</property>
</object>
<packing>
<property name="position">17</property>
<property name="position">18</property>
<property name="tab-fill">False</property>
</packing>
</child>
@ -6605,7 +6821,7 @@ or continue working in the environment, booted from the Live image.</property>
</child>
</object>
<packing>
<property name="position">18</property>
<property name="position">19</property>
</packing>
</child>
<child type="tab">
@ -6615,7 +6831,7 @@ or continue working in the environment, booted from the Live image.</property>
<property name="label" translatable="yes">Completed</property>
</object>
<packing>
<property name="position">18</property>
<property name="position">19</property>
<property name="tab-fill">False</property>
</packing>
</child>
@ -6794,7 +7010,7 @@ or continue working in the environment, booted from the Live image.</property>
</child>
</object>
<packing>
<property name="position">19</property>
<property name="position">20</property>
</packing>
</child>
<child type="tab">
@ -6804,7 +7020,7 @@ or continue working in the environment, booted from the Live image.</property>
<property name="label" translatable="yes">Configuration error</property>
</object>
<packing>
<property name="position">19</property>
<property name="position">20</property>
<property name="tab-fill">False</property>
</packing>
</child>
@ -6983,7 +7199,7 @@ or continue working in the environment, booted from the Live image.</property>
</child>
</object>
<packing>
<property name="position">20</property>
<property name="position">21</property>
</packing>
</child>
<child type="tab">
@ -6993,7 +7209,7 @@ or continue working in the environment, booted from the Live image.</property>
<property name="label" translatable="yes">Configuration end</property>
</object>
<packing>
<property name="position">20</property>
<property name="position">21</property>
<property name="tab-fill">False</property>
</packing>
</child>
@ -7172,7 +7388,7 @@ or continue working in the environment, booted from the Live image.</property>
</child>
</object>
<packing>
<property name="position">21</property>
<property name="position">22</property>
</packing>
</child>
<child type="tab">
@ -7182,7 +7398,7 @@ or continue working in the environment, booted from the Live image.</property>
<property name="label" translatable="yes">Configuration saved</property>
</object>
<packing>
<property name="position">21</property>
<property name="position">22</property>
<property name="tab-fill">False</property>
</packing>
</child>
@ -7636,7 +7852,7 @@ or continue working in the environment, booted from the Live image.</property>
</child>
</object>
<packing>
<property name="position">22</property>
<property name="position">23</property>
</packing>
</child>
<child type="tab">
@ -7646,7 +7862,7 @@ or continue working in the environment, booted from the Live image.</property>
<property name="label" translatable="yes">Common Installation</property>
</object>
<packing>
<property name="position">22</property>
<property name="position">23</property>
<property name="tab-fill">False</property>
</packing>
</child>
@ -8310,7 +8526,7 @@ or continue working in the environment, booted from the Live image.</property>
</child>
</object>
<packing>
<property name="position">23</property>
<property name="position">24</property>
</packing>
</child>
<child type="tab">
@ -8320,7 +8536,7 @@ or continue working in the environment, booted from the Live image.</property>
<property name="label" translatable="yes">Installation next to system</property>
</object>
<packing>
<property name="position">23</property>
<property name="position">24</property>
<property name="tab-fill">False</property>
</packing>
</child>
@ -8939,7 +9155,7 @@ or continue working in the environment, booted from the Live image.</property>
</child>
</object>
<packing>
<property name="position">24</property>
<property name="position">25</property>
</packing>
</child>
<child type="tab">
@ -8949,7 +9165,7 @@ or continue working in the environment, booted from the Live image.</property>
<property name="label" translatable="yes">Installation on same partition</property>
</object>
<packing>
<property name="position">24</property>
<property name="position">25</property>
<property name="tab-fill">False</property>
</packing>
</child>
@ -9995,7 +10211,7 @@ separately into the selected partition.</property>
</child>
</object>
<packing>
<property name="position">25</property>
<property name="position">26</property>
</packing>
</child>
<child type="tab">
@ -10005,7 +10221,7 @@ separately into the selected partition.</property>
<property name="label" translatable="yes">Advanced section</property>
</object>
<packing>
<property name="position">25</property>
<property name="position">26</property>
<property name="tab-fill">False</property>
</packing>
</child>
@ -10480,7 +10696,7 @@ separately into the selected partition.</property>
</child>
</object>
<packing>
<property name="position">26</property>
<property name="position">27</property>
</packing>
</child>
<child type="tab">
@ -10490,7 +10706,7 @@ separately into the selected partition.</property>
<property name="label" translatable="yes">Recovery section</property>
</object>
<packing>
<property name="position">26</property>
<property name="position">27</property>
<property name="tab-fill">False</property>
</packing>
</child>
@ -10882,7 +11098,7 @@ separately into the selected partition.</property>
</child>
</object>
<packing>
<property name="position">27</property>
<property name="position">28</property>
</packing>
</child>
<child type="tab">
@ -10892,7 +11108,7 @@ separately into the selected partition.</property>
<property name="label" translatable="yes">GRUB install</property>
</object>
<packing>
<property name="position">27</property>
<property name="position">28</property>
<property name="tab-fill">False</property>
</packing>
</child>
@ -11271,7 +11487,7 @@ separately into the selected partition.</property>
</child>
</object>
<packing>
<property name="position">28</property>
<property name="position">29</property>
</packing>
</child>
<child type="tab">
@ -11281,7 +11497,7 @@ separately into the selected partition.</property>
<property name="label" translatable="yes">GRUB update</property>
</object>
<packing>
<property name="position">28</property>
<property name="position">29</property>
<property name="tab-fill">False</property>
</packing>
</child>
@ -12007,7 +12223,7 @@ separately into the selected partition.</property>
</child>
</object>
<packing>
<property name="position">29</property>
<property name="position">30</property>
</packing>
</child>
<child type="tab">
@ -12017,7 +12233,7 @@ separately into the selected partition.</property>
<property name="label" translatable="yes">OS only</property>
</object>
<packing>
<property name="position">29</property>
<property name="position">30</property>
<property name="tab-fill">False</property>
</packing>
</child>
@ -12813,7 +13029,7 @@ separately into the selected partition.</property>
</child>
</object>
<packing>
<property name="position">30</property>
<property name="position">31</property>
</packing>
</child>
<child type="tab">
@ -12823,7 +13039,7 @@ separately into the selected partition.</property>
<property name="label" translatable="yes">User data only</property>
</object>
<packing>
<property name="position">30</property>
<property name="position">31</property>
<property name="tab-fill">False</property>
</packing>
</child>

Loading…
Cancel
Save