#include "ubinstall-gtk.h" config main_config; //functions // void yon_load_proceed(YON_CONFIG_TYPE type){ // if (yon_config_load_register(type,,,NULL)){ // } // } void yon_open_browser(GtkWidget *, char *link); void yon_open_browser(GtkWidget *, char *link){ GtkWidget *window = yon_ubl_browser_window_open(link,TITLE_LABEL); if (window) gtk_window_set_icon_name(GTK_WINDOW(window),yon_char_append("com.ublinux.",LocaleName)); } void on_open_documentation_confirmation(GtkWidget *self, char *link); void on_open_documentation_confirmation(GtkWidget *self, char *link){ if (main_config.always_open_documentation==0){ GtkBuilder *builder = gtk_builder_new_from_resource(ui_glade_path_documentation); documentation_confirmation_window *window = malloc(sizeof(documentation_confirmation_window)); window->Window = yon_gtk_builder_get_widget(builder,"helpConfirmationWindow"); window->AcceptButton = yon_gtk_builder_get_widget(builder,"ReadHelpButton"); window->CloseButton = yon_gtk_builder_get_widget(builder,"CancelHelpButton"); window->HeaderLabel = yon_gtk_builder_get_widget(builder,"webHeaderNameLabel"); window->AlwaysOpenCheck = yon_gtk_builder_get_widget(builder,"AlwaysOpenDocumentationCheckbox"); gtk_label_set_text(GTK_LABEL(window->HeaderLabel),TITLE_LABEL); gtk_widget_show_all(window->Window); g_signal_connect(G_OBJECT(window->CloseButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(yon_open_browser),yon_char_new(link)); g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); } else { yon_open_browser(self,link); } } void on_link(GtkWidget *self, char* uri); void on_link(GtkWidget *self, char* uri){ gtk_widget_destroy(self); on_open_documentation_confirmation(self,uri); } void on_about(GtkWidget *); void on_about(GtkWidget *){ GtkBuilder *builder=gtk_builder_new_from_resource(ui_glade_path_about); GtkWidget *window=yon_gtk_builder_get_widget(builder,"AboutWindow"); GtkWidget *title=yon_gtk_builder_get_widget(builder,"headerAboutTopic"); GtkWidget *hideButtonBox=yon_gtk_builder_get_widget(builder,"buttonBoxHide"); gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(window),version_application); gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(window),TITLE_LABEL); gtk_about_dialog_set_logo_icon_name(GTK_ABOUT_DIALOG(window),yon_char_append("com.ublinux.",LocaleName)); gtk_window_set_icon_name(GTK_WINDOW(window),yon_char_append("com.ublinux.",LocaleName)); gtk_about_dialog_set_program_name(GTK_ABOUT_DIALOG(window),LocaleName); gtk_label_set_text(GTK_LABEL(title),TITLE_LABEL); g_signal_connect(G_OBJECT(window),"activate-link",G_CALLBACK(on_link),WIKI_LINK); gtk_widget_set_visible(hideButtonBox,0); gtk_widget_destroy(hideButtonBox); gtk_widget_show(window); } double yon_size_long_convert_automatic(unsigned long bytes, char *size); double yon_size_long_convert_automatic(unsigned long bytes, char *size){ int repeats; double byte_float=bytes; for (repeats=-1;byte_float>1024;repeats++){ byte_float=byte_float/1024; } if (repeats==-1) { repeats=0; byte_float=byte_float/1024; } switch(repeats){ case 0: (*size)='K'; break; case 1: (*size)='M'; break; case 2: (*size)='G'; break; case 3: (*size)='T'; break; } return byte_float; } // standard functions void on_keyboard_accept(GtkWidget *self,main_window *widgets); void on_keyboard_accept(GtkWidget *self,main_window *widgets){ gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(widgets->LayoutsFilter)); on_subwindow_close(self); } void on_layout_toggle(GtkCellRendererToggle*, gchar* path, ubinstall_keyboard_window *window); void on_layout_toggle(GtkCellRendererToggle*, gchar* path, ubinstall_keyboard_window *window){ GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(window->LayoutsTree)); GtkTreeIter iter; if (gtk_tree_model_get_iter_from_string(model,&iter,path)){ int status=0; gtk_tree_model_get(model,&iter,3,&status,-1); gtk_tree_store_set(GTK_TREE_STORE(model),&iter,3,!status,-1); } } ubinstall_keyboard_window *yon_ubinstall_keyboard_new(){ ubinstall_keyboard_window *window = malloc(sizeof(ubinstall_keyboard_window)); GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_ubinstall_keyboard); window->MainWindow=yon_gtk_builder_get_widget(builder,"MainWindow"); window->StatusBox=yon_gtk_builder_get_widget(builder,"StatusBox"); window->headerBar=yon_gtk_builder_get_widget(builder,"headerBar"); window->CancelButton=yon_gtk_builder_get_widget(builder,"CancelButton"); window->SaveButton=yon_gtk_builder_get_widget(builder,"SaveButton"); window->LayoutsTree=yon_gtk_builder_get_widget(builder,"LayoutsTree"); window->ActiveToggle = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"ActiveToggle")); g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); return window; } void on_keyboard_clicked (GtkWidget *, main_window *widgets); void on_keyboard_clicked (GtkWidget *, main_window *widgets){ ubinstall_keyboard_window *window = yon_ubinstall_keyboard_new(); yon_gtk_window_setup(GTK_WINDOW(window->MainWindow),GTK_WINDOW(widgets->MainWindow),KEYBOARD_TITLE_LABEL,icon_path,"keyboard-window"); gtk_tree_view_set_model(GTK_TREE_VIEW(window->LayoutsTree),GTK_TREE_MODEL(widgets->LayoutList)); g_signal_connect(G_OBJECT(window->ActiveToggle),"toggled",G_CALLBACK(on_layout_toggle),window); g_signal_connect(G_OBJECT(window->SaveButton),"clicked",G_CALLBACK(on_keyboard_accept),widgets); gtk_widget_show(window->MainWindow); } void yon_language_selection_changed(GtkCellRenderer *, char *path, ubinstall_language_window *window); void yon_language_selection_changed(GtkCellRenderer *, char *path, ubinstall_language_window *window){ GtkTreeIter iter; int state; if (gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->liststore1),&iter,path)){ gtk_tree_model_get(GTK_TREE_MODEL(window->liststore1),&iter,0,&state,-1); gtk_list_store_set(window->liststore1,&iter,0,!state,-1); } } void on_language_window_accept(GtkWidget *,dictionary *dict); void on_language_window_accept(GtkWidget *,dictionary *dict){ main_window *widgets= yon_dictionary_get_data(dict->first,main_window*); ubinstall_language_window *window = yon_dictionary_get_data(dict->first->next,ubinstall_language_window*); if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->DefaultCheck))){ gtk_entry_set_text(GTK_ENTRY(widgets->AvailableLanguagesEntry),""); } else { yon_gtk_list_store_copy_full(widgets->LanguagesList,window->liststore1); gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(widgets->LanguagesFilter)); config_str parsed = NULL; int size; GtkTreeIter iter; for_iter(GTK_TREE_MODEL(window->liststore1),&iter){ char *current; int status; gtk_tree_model_get(GTK_TREE_MODEL(window->liststore1),&iter,0,&status,1,¤t,-1); if (status) yon_char_parsed_add_or_create_if_exists(parsed,&size,current); } gtk_entry_set_text(GTK_ENTRY(widgets->AvailableLanguagesEntry),yon_char_parsed_to_string(parsed,size,", ")); } on_subwindow_close(window->MainWindow); free(window); } ubinstall_language_window *yon_ubinstall_language_new(){ ubinstall_language_window *window = malloc(sizeof(ubinstall_language_window)); GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_ubinstall_language); window->liststore1=GTK_LIST_STORE(gtk_builder_get_object(builder,"liststore1")); window->MainWindow=yon_gtk_builder_get_widget(builder,"MainWindow"); window->StatusBox=yon_gtk_builder_get_widget(builder,"StatusBox"); window->DefaultCheck=yon_gtk_builder_get_widget(builder,"DefaultCheck"); window->LanguagesTree=yon_gtk_builder_get_widget(builder,"LanguagesTree"); window->headerBar=yon_gtk_builder_get_widget(builder,"headerBar"); window->CancelButton=yon_gtk_builder_get_widget(builder,"CancelButton"); window->SaveButton=yon_gtk_builder_get_widget(builder,"SaveButton"); window->ToggleRenderer=GTK_CELL_RENDERER(gtk_builder_get_object(builder,"ToggleRenderer")); g_signal_connect(G_OBJECT(window->DefaultCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->LanguagesTree); g_signal_connect(G_OBJECT(window->ToggleRenderer),"toggled",G_CALLBACK(yon_language_selection_changed),window); g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); return window; } void on_language_clicked(GtkWidget *, main_window *widgets); void on_language_clicked(GtkWidget *, main_window *widgets){ ubinstall_language_window *window = yon_ubinstall_language_new(); g_object_ref(G_OBJECT(window->liststore1)); gtk_tree_view_set_model(GTK_TREE_VIEW(window->LanguagesTree),NULL); yon_gtk_list_store_copy_full(window->liststore1,widgets->LanguagesList); gtk_tree_view_set_model(GTK_TREE_VIEW(window->LanguagesTree),GTK_TREE_MODEL(window->liststore1)); yon_gtk_window_setup(GTK_WINDOW(window->MainWindow),GTK_WINDOW(widgets->MainWindow),TITLE_LABEL,icon_path,"language-chooser-window"); dictionary *dict=NULL; yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); g_signal_connect(G_OBJECT(window->SaveButton),"clicked",G_CALLBACK(on_language_window_accept),dict); gtk_widget_show(window->MainWindow); } /**config_init() * [EN] * * [RU] * Функция инициализации всех параметров конфигурации */ void config_init(){ main_config.always_open_documentation=0; main_config.socket_id=-1; main_config.save_socket_id=-1; main_config.load_socket_id=-1; main_config.lock_help=0; main_config.lock_help=0; main_config.lock_load_global=0; main_config.lock_save_global=0; main_config.lock_save_local=0; main_config.debug_mode=0; main_config.slider_thread=0; main_config.config_save_thread=NULL; main_config.install_thread=NULL; main_config.progress_thread=0; main_config.install_complete=0; main_config.save_done=0; main_config.configure_mode=0; } void on_configuration_mode_switch(GtkWidget *self); void on_configuration_mode_switch(GtkWidget *self){ main_config.configure_mode = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(self)); } int yon_image_resize_from_container(GtkImage *target, GdkPixbuf *pixbuf_unscaled); int yon_image_resize_from_container(GtkImage *target, GdkPixbuf *pixbuf_unscaled){ int width = gtk_widget_get_allocated_width(gtk_widget_get_parent(gtk_widget_get_parent(GTK_WIDGET(target)))); int height = gtk_widget_get_allocated_height(gtk_widget_get_parent(gtk_widget_get_parent(GTK_WIDGET(target)))); int newImgWidthDef = (width <= 217) ? width : width - 30; int newImgHeightDef = (height <= 120) ? height : height - 217; GdkPixbuf *pixBuf = pixbuf_unscaled; int newImgHeight = (int)(gdk_pixbuf_get_height(pixBuf) / ((double) gdk_pixbuf_get_width(pixBuf) / newImgWidthDef)); if (newImgHeight > newImgHeightDef) { newImgHeight = newImgHeightDef; newImgWidthDef = newImgWidthDef; } int newImageWidth = (int)(gdk_pixbuf_get_width(pixBuf) / ((double) gdk_pixbuf_get_height(pixBuf) / newImgHeight)); GdkPixbuf *scaledPixBuf = gdk_pixbuf_scale_simple(pixBuf, abs(newImageWidth), abs(newImgHeight), GDK_INTERP_BILINEAR); gtk_image_set_from_pixbuf(target, scaledPixBuf); return 1; } void on_region_resized(GtkWidget *,main_window *widgets); void on_region_resized(GtkWidget *,main_window *widgets){ yon_image_resize_from_container(GTK_IMAGE(widgets->SlidesImage), widgets->slides_original); yon_image_resize_from_container(GTK_IMAGE(widgets->RegionImage), widgets->regions_original); yon_image_resize_from_container(GTK_IMAGE(widgets->KeyboardImage), widgets->keyboard_original); } void on_toggle_block(GtkToggleButton *self); void on_toggle_block(GtkToggleButton *self){ int state = gtk_toggle_button_get_active(self); g_signal_handlers_block_by_func(G_OBJECT(self),on_toggle_block,NULL); gtk_toggle_button_set_active(self,!state); g_signal_handlers_unblock_by_func(G_OBJECT(self),on_toggle_block,NULL); } void yon_switch_page_render(main_window *widgets, int page); void yon_switch_page_render(main_window *widgets, int page){ GtkContainer *parent = GTK_CONTAINER(gtk_widget_get_parent(widgets->UsersToggle)); GList *list = gtk_container_get_children(parent); for (guint i=0;islides_original); widgets->slides_original = gdk_pixbuf_new_from_resource_at_scale(target[cur_slide],600,400,1,NULL); GtkWidget *parent = gtk_widget_get_parent(widgets->SlidesImage); gtk_widget_destroy(widgets->SlidesImage); widgets->SlidesImage = gtk_image_new(); gtk_container_add(GTK_CONTAINER(parent),widgets->SlidesImage); gtk_widget_show(widgets->SlidesImage); gtk_image_set_from_pixbuf(GTK_IMAGE(widgets->SlidesImage),widgets->slides_original); gtk_widget_queue_draw(widgets->SlidesImage); if (cur_slideNotebook),YON_PAGE_INSTALL_ERROR); // yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),INSTALLATION_ERROR,5,BACKGROUND_IMAGE_FAIL_TYPE); }; main_config.install_thread=NULL; main_config.install_complete=1; yon_debug_output("Install set to: %s\n",yon_char_from_int(main_config.install_complete)); yon_debug_output("Save state: %s\n",yon_char_from_int(main_config.save_done)); if (main_config.save_done){ gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),YON_PAGE_COMPLETION); } main_config.config_save_thread=NULL; } return NULL; } gboolean yon_installation_progress_update(void *data); gboolean yon_installation_progress_update(void *data){ main_window *widgets = (main_window*)data; FILE *file = NULL; char *current = g_malloc0(4096); clock_t last_time = 0; clock_t current_time; while (1){ while (gtk_events_pending()) gtk_main_iteration(); current_time = clock(); if ((double)(current_time - last_time) / CLOCKS_PER_SEC >= 0.5){ if (!file) file = fopen(progress_path,"r"); if (file){ if (fgets(current,4096,file)){ } else { if (!yon_char_is_empty(current)&¤t[0]=='('){ char * current_copy = yon_char_new(current); char *percentage = yon_char_divide_search(current_copy,")",-1); free(yon_char_divide(current_copy,0)); free(yon_char_divide(percentage,0)); if (strcmp(percentage,"#pb")){ double fraction = atof(percentage); gtk_label_set_text(GTK_LABEL(widgets->InstallationLabel),current_copy); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(widgets->InstallationProgress),fraction/100); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(widgets->PackageInstallationProgress),0); gtk_label_set_text(GTK_LABEL(widgets->PackageInstallationLabel),""); } else { gtk_widget_show(gtk_widget_get_parent(widgets->PackageInstallationProgress)); int size; config_str parsed = yon_char_parse(current_copy,&size," "); double fraction = atof(parsed[2])/100; gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(widgets->PackageInstallationProgress),fraction); gtk_label_set_text(GTK_LABEL(widgets->PackageInstallationLabel),yon_char_parsed_to_string(parsed,size," ")); yon_char_parsed_free(parsed,size); } last_time = current_time; free(current_copy); free(percentage); } break; } } } } fclose(file); file=NULL; if (main_config.install_thread){ return 1; } else return 0; } void on_page_changed(GtkWidget *,GtkWidget *,int page, main_window *widgets); void on_page_changed(GtkWidget *,GtkWidget *,int page, main_window *widgets){ switch(page){ case YON_PAGE_WELCOME: { gtk_widget_set_sensitive(widgets->CancelInstallButton,0); gtk_widget_set_sensitive(widgets->BackButton,0); gtk_widget_set_sensitive(widgets->NextButton,1); gtk_widget_set_sensitive(widgets->BackButton,0); gtk_button_set_label(GTK_BUTTON(widgets->NextButton),NEXT_LABEL); gtk_button_set_label(GTK_BUTTON(widgets->CancelInstallButton),CANCEL_LABEL); gtk_image_set_from_icon_name(GTK_IMAGE(gtk_button_get_image(GTK_BUTTON(widgets->NextButton))),"com.ublinux.ubinstall-gtk.arrow-right-symbolic",GTK_ICON_SIZE_BUTTON); gtk_image_set_from_icon_name(GTK_IMAGE(gtk_button_get_image(GTK_BUTTON(widgets->CancelInstallButton))),"com.ublinux.ubinstall-gtk.circle-exit-symbolic",GTK_ICON_SIZE_BUTTON); gtk_widget_set_sensitive(widgets->ConfigurationModeMenuItem,1); yon_switch_page_render(widgets,0); } break; case YON_PAGE_LICENCE:{ gtk_widget_set_sensitive(widgets->CancelInstallButton,1); gtk_widget_set_sensitive(widgets->BackButton,1); yon_switch_page_render(widgets,1); } break; case YON_PAGE_REGION: { yon_image_resize_from_container(GTK_IMAGE(widgets->RegionImage), widgets->regions_original); yon_switch_page_render(widgets,4); } break; case YON_PAGE_KEYBOARD: { yon_switch_page_render(widgets,5); yon_image_resize_from_container(GTK_IMAGE(widgets->KeyboardImage), widgets->keyboard_original); } break; case YON_PAGE_OS_COMPONENTS: case YON_PAGE_SOFTWARE: case YON_PAGE_INSTALLATION_BEGIN: yon_switch_page_render(widgets,3); break; case YON_PAGE_INSTALLATION:{ yon_switch_page_render(widgets,3); gtk_widget_set_sensitive(widgets->BackButton,0); if (main_config.config_save_thread&&!main_config.configure_mode) g_thread_join(main_config.config_save_thread); if (!main_config.progress_thread&&!main_config.configure_mode) main_config.progress_thread = gdk_threads_add_timeout(500,(GSourceFunc)yon_installation_progress_update,widgets); if (!main_config.slider_thread&&!main_config.configure_mode) main_config.slider_thread = g_timeout_add(5000,(GSourceFunc)on_image_slide,widgets); gtk_widget_show(gtk_widget_get_parent(widgets->InstallationProgress)); } break; case YON_PAGE_USERS: yon_switch_page_render(widgets,6); gtk_widget_set_sensitive(widgets->NextButton,1); break; case YON_PAGE_INSTALL_ERROR: case YON_PAGE_COMPLETION:{ yon_switch_page_render(widgets,7); gtk_widget_set_sensitive(widgets->BackButton,0); gtk_widget_hide(gtk_widget_get_parent(widgets->PackageInstallationProgress)); gtk_widget_hide(widgets->InstallationLabel); gtk_widget_hide(widgets->PackageInstallationLabel); gtk_widget_set_sensitive(widgets->NextButton,1); gtk_widget_set_sensitive(widgets->CancelInstallButton,1); main_config.install_complete=0; main_config.save_done=0; gtk_button_set_label(GTK_BUTTON(widgets->NextButton),RESTART_LABEL); gtk_button_set_label(GTK_BUTTON(widgets->CancelInstallButton),EXIT_LABEL); gtk_image_set_from_icon_name(GTK_IMAGE(gtk_button_get_image(GTK_BUTTON(widgets->NextButton))),"com.ublinux.libublsettingsui-gtk3.sync-symbolic",GTK_ICON_SIZE_BUTTON); } break; case YON_PAGE_SECTIONS: case YON_PAGE_INSTALL_COMMON: case YON_PAGE_INSTALL_SEPARATE: case YON_PAGE_INSTALL_SAME_PARTITION: case YON_PAGE_INSTALL_OPTIONS: case YON_PAGE_OPTIONS_GRUB_INSTALL: case YON_PAGE_OPTIONS_GRUB_UPDATE: case YON_PAGE_OPTIONS_SEPARATE: case YON_PAGE_OPTIONS_SEPARATE_USRDATA: case YON_PAGE_OPTIONS_OS_ONLY: case YON_PAGE_OPTIONS_USRDATA_ONLY: { yon_switch_page_render(widgets,2); } } } void *on_setup_system_configuration(void *data); void *on_setup_system_configuration(void * data){ main_window *widgets = (main_window*)data; if (widgets){}; int size; config_str all_parameters = yon_config_get_selection_by_key(&size, user_gecos_parameter, user_password_parameter, root_password_parameter, autologin_parameter, xkbmodel_parameter, xkblayout_parameter, xkbvariant_parameter, xkboptions_parameter, hostname_parameter, zone_parameter, lang_parameter, locale_parameter, NULL); if (all_parameters){ char *parameter_string = yon_char_parsed_to_string(all_parameters,size," "); char *command = set_user_config_command(parameter_string); if (system(command)){}; yon_char_parsed_free(all_parameters,size); free(command); if (parameter_string) free(parameter_string); } return NULL; } void yon_install_options_save(GtkWidget *device_tree, GtkWidget *part_tree,char *mode,main_window *widgets); void yon_install_options_save(GtkWidget *device_tree, GtkWidget *part_tree,char *mode,main_window *widgets){ GtkTreeIter iter,itar; GtkTreeModel *model,*model2; if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(device_tree)),&model,&iter)){ if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(part_tree)),&model2,&itar)){ char *cur_device, *cur_section; gtk_tree_model_get(model,&iter,0,&cur_device,-1); gtk_tree_model_get(model2,&itar,0,&cur_section,-1); yon_config_register(AUTOINSTALL_DEVICE,AUTOINSTALL_DEVICE_command,cur_device); yon_config_register(AUTOINSTALL_TYPE_INSTALL,AUTOINSTALL_TYPE_INSTALL_command,mode); yon_config_register(part_parameter,part_parameter_command,cur_section); if (!main_config.configure_mode) gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),YON_PAGE_INSTALLATION_BEGIN); else gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),YON_PAGE_REGION); } else { yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),NO_DEVICE_CHOSEN_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); yon_ubl_status_highlight_incorrect(part_tree); } } else { yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),NO_DEVICE_CHOSEN_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); yon_ubl_status_highlight_incorrect(device_tree); } } void on_page_navigation_clicked(GtkWidget *self, main_window *widgets); void on_page_navigation_clicked(GtkWidget *self, main_window *widgets){ int mode = self==widgets->NextButton ? 1 : self == widgets->BackButton ? -1 : self==widgets->CancelInstallButton?-2:0; int page = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->Notebook)); switch (mode){ case 1: { // Next switch (page){ case YON_PAGE_WELCOME:{ gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),YON_PAGE_LICENCE); gtk_widget_set_sensitive(widgets->ConfigurationModeMenuItem,0); } break; case YON_PAGE_SECTIONS:{ //sections int active_id=-1; if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->InstallationRadio))) active_id=0; else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->InstallationNearRadio))) active_id=1; else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->InstallationLinuxRadio))) active_id=2; else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->InstallationWindowsRadio))) active_id=3; // else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->InstallationRadio))) // active_id=4; main_config.install_mode=active_id; switch (active_id){ case 0:{ // normal installation gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),YON_PAGE_INSTALL_COMMON); } break; case 1: gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),YON_PAGE_INSTALL_SEPARATE); break; case 2: gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),YON_PAGE_INSTALL_SAME_PARTITION); break; case 3: gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),YON_PAGE_INSTALL_OPTIONS); } }break; case YON_PAGE_REGION:{ //region gtk_widget_set_sensitive(widgets->BackButton,1); if (gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->RegionCombo))==-1){ yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),REGION_EMPTY_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); yon_ubl_status_highlight_incorrect(widgets->RegionCombo); return; } else if (gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->ZoneCombo))==-1){ yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),ZONE_EMPTY_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); yon_ubl_status_highlight_incorrect(widgets->ZoneCombo); return; } char *languages = ""; GtkTreeIter iter; GtkTreeModel *model = GTK_TREE_MODEL(widgets->LanguagesFilter); char *lang_code=NULL; for_iter(model,&iter){ gtk_tree_model_get(model,&iter,1,&lang_code,-1); languages = yon_char_unite(languages,",",lang_code,NULL); } if (yon_char_is_empty(gtk_entry_get_text(GTK_ENTRY(widgets->AvailableLanguagesEntry)))){ yon_config_remove_by_key(locale_parameter); } else { yon_config_register(locale_parameter,locale_parameter_command,languages); } if (gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->LanguagesCombo))==-1){ yon_config_remove_by_key(lang_parameter); } else { char *language = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->LanguagesCombo)); yon_config_register(lang_parameter,lang_parameter_command,language); } char *region = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->RegionCombo)); char *zone = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->ZoneCombo)); yon_config_register(zone_parameter,zone_parameter_command,yon_char_unite(region,"/",zone,NULL)); gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),page+1); }break; case YON_PAGE_KEYBOARD: { //keyboard gtk_widget_set_sensitive(widgets->BackButton,1); if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->ManualLayoutRadio))){ GtkTreeIter iter; if (!gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->LayoutList),&iter)){ yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),LAYOUTS_CHOSEN_BUT_EMPTY_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); yon_ubl_status_highlight_incorrect(widgets->ManualLayoutRadio); yon_ubl_status_highlight_incorrect(gtk_widget_get_parent(widgets->LayoutTree)); } } char *layouts_list=""; if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->ManualLayoutRadio))){ GtkTreeModel *layouts_model=GTK_TREE_MODEL(widgets->LayoutList); GtkTreeIter iter; char *cur_layout=NULL; for_iter(layouts_model,&iter){ int chosen=0; gtk_tree_model_get(layouts_model,&iter,0,&cur_layout,3,&chosen,-1); if (chosen) layouts_list = yon_char_unite(layouts_list,yon_char_is_empty(layouts_list)?"":",",cur_layout,NULL); } } else { yon_config_remove_by_key(xkblayout_parameter); } char *model = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->KeyboardModelCombo))?(char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->KeyboardModelCombo)):""; // char *layout_switch; if (!yon_char_is_empty(model)) yon_config_register(xkbmodel_parameter,xkbmodel_parameter_command,model); else yon_config_remove_by_key(xkbmodel_parameter); if (!yon_char_is_empty(layouts_list)) yon_config_register(locale_parameter,locale_parameter_command,layouts_list); else yon_config_remove_by_key(locale_parameter); gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),page+1); } break; default:{ // all other pages gtk_widget_set_sensitive(widgets->BackButton,1); gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),page+1); }break; case YON_PAGE_INSTALL_COMMON: { GtkTreeModel *model; GtkTreeIter iter; if (!gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->CommonInstallationDevicesTree)),&model,&iter)){ yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),NO_DEVICE_CHOSEN_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); yon_ubl_status_highlight_incorrect(gtk_widget_get_parent(widgets->CommonInstallationDevicesTree)); return; } char *file_system_type = (char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(widgets->CommonInstallationFilesystemTypeCombo)); char *device_name = (char*)gtk_entry_get_text(GTK_ENTRY(widgets->CommonInstallationSectionNameEntry)); char *device; yon_config_remove_by_key(part_parameter); gtk_tree_model_get(model,&iter,0,&device,-1); yon_config_register(AUTOINSTALL_TYPE_INSTALL,AUTOINSTALL_TYPE_INSTALL_command,"fast"); yon_config_register(AUTOINSTALL_DEVICE,AUTOINSTALL_DEVICE_command,device); yon_config_register(device_label_parameter,device_label_parameter_command,device_name); yon_config_register(part_type_parameter,part_type_parameter_command,file_system_type); if (!main_config.configure_mode) gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),YON_PAGE_INSTALLATION_BEGIN); else gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),YON_PAGE_REGION); }break; case YON_PAGE_INSTALL_SEPARATE: { GtkTreeModel *model; GtkTreeIter iter; if (!gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->InstallationNearSysDevicesTree)),&model,&iter)){ yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),NO_DEVICE_CHOSEN_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); yon_ubl_status_highlight_incorrect(gtk_widget_get_parent(widgets->CommonInstallationDevicesTree)); return; } char *device; gtk_tree_model_get(model,&iter,0,&device,-1); if (!gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->InstallationNearSysSectionTree)),&model,&iter)){ yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),NO_DEVICE_CHOSEN_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); yon_ubl_status_highlight_incorrect(gtk_widget_get_parent(widgets->CommonInstallationDevicesTree)); return; } double part_size = gtk_spin_button_get_value(GTK_SPIN_BUTTON(widgets->InstallationNearSizeSpin)); if (part_size){ char *size_letter = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->InstallationNearSizeTypeSpin)); char *size_final = yon_char_append(yon_char_from_long((long)part_size),size_letter); yon_config_register(part_size_parameter,part_size_parameter_command,size_final); } else yon_config_remove_by_key(part_size_parameter); char *device_name = (char*)gtk_entry_get_text(GTK_ENTRY(widgets->NextInstallationSectionNameEntry)); char *part; gtk_tree_model_get(model,&iter,0,&part,-1); yon_config_register(AUTOINSTALL_TYPE_INSTALL,AUTOINSTALL_TYPE_INSTALL_command,"next"); yon_config_register(AUTOINSTALL_DEVICE,AUTOINSTALL_DEVICE_command,device); yon_config_register(part_parameter,part_parameter_command,part); yon_config_register(device_label_parameter,device_label_parameter_command,device_name); if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->NextInstallationFormatCheck))){ yon_config_register(device_format_parameter,device_format_parameter_command,"no"); yon_config_remove_by_key(part_type_parameter); } else { char *file_system_type = (char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(widgets->NextInstallationFilesystemTypeCombo)); yon_config_register(part_type_parameter,part_type_parameter_command,file_system_type); yon_config_remove_by_key(device_format_parameter); } if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->NextInstallationFormatCheck))) yon_config_register(device_format_parameter,device_format_parameter_command,"no"); if (!main_config.configure_mode) gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),YON_PAGE_INSTALLATION_BEGIN); else gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),YON_PAGE_REGION); } break; case YON_PAGE_INSTALL_SAME_PARTITION: { GtkTreeModel *model; GtkTreeIter iter; if (!gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SamePlaceDeviceTree)),&model,&iter)){ yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),NO_DEVICE_CHOSEN_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); yon_ubl_status_highlight_incorrect(gtk_widget_get_parent(widgets->CommonInstallationDevicesTree)); return; } char *device; gtk_tree_model_get(model,&iter,0,&device,-1); if (!gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SamePlacePartTree)),&model,&iter)){ yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),NO_DEVICE_CHOSEN_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); yon_ubl_status_highlight_incorrect(gtk_widget_get_parent(widgets->CommonInstallationDevicesTree)); return; } yon_config_remove_by_key(part_size_parameter); char *device_name = (char*)gtk_entry_get_text(GTK_ENTRY(widgets->SameInstallationSectionNameEntry)); char *part; gtk_tree_model_get(model,&iter,0,&part,-1); yon_config_register(AUTOINSTALL_TYPE_INSTALL,AUTOINSTALL_TYPE_INSTALL_command,"part"); yon_config_register(AUTOINSTALL_DEVICE,AUTOINSTALL_DEVICE_command,device); yon_config_register(part_parameter,part_parameter_command,part); yon_config_register(device_label_parameter,device_label_parameter_command,device_name); if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->SameInstallationFormatCheck))){ yon_config_register(device_format_parameter,device_format_parameter_command,"no"); yon_config_remove_by_key(part_type_parameter); } else { char *file_system_type = (char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(widgets->SameInstallationFilesystemTypeCombo)); yon_config_register(part_type_parameter,part_type_parameter_command,file_system_type); yon_config_remove_by_key(device_format_parameter); } if (!main_config.configure_mode) gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),YON_PAGE_INSTALLATION_BEGIN); else gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),YON_PAGE_REGION); }break; case YON_PAGE_USERS:{ //users if (yon_char_is_empty(gtk_entry_get_text(GTK_ENTRY(widgets->UserNameEntry)))){ yon_config_remove_by_key(user_gecos_parameter); } else { char *username = (char*)gtk_entry_get_text(GTK_ENTRY(widgets->UserNameEntry)); yon_config_register(user_gecos_parameter,user_gecos_parameter_command,username); } if (yon_char_is_empty(gtk_entry_get_text(GTK_ENTRY(widgets->LoginEntry)))){ yon_config_remove_by_key(user_name_parameter); } else { char *login = (char*)gtk_entry_get_text(GTK_ENTRY(widgets->UserNameEntry)); yon_config_register(user_name_parameter,user_name_parameter_command,login); } if (gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->PasswordCombo))==1){ if (yon_char_is_empty(gtk_entry_get_text(GTK_ENTRY(widgets->PasswordEntry)))){ yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); yon_ubl_status_highlight_incorrect(widgets->PasswordEntry); return; } else { char *password = (char*)gtk_entry_get_text(GTK_ENTRY(widgets->PasswordEntry)); yon_config_register(user_password_parameter,user_password_parameter_command,password); } } else { yon_config_register(user_password_parameter,user_password_parameter_command,PASSWORD_DEFAULT); } if (gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->AdminPasswordCombo))==1){ if (yon_char_is_empty(gtk_entry_get_text(GTK_ENTRY(widgets->AdminPasswordEntry)))){ yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); yon_ubl_status_highlight_incorrect(widgets->AdminPasswordEntry); return; } else { char *root_password = (char*)gtk_entry_get_text(GTK_ENTRY(widgets->AdminPasswordEntry)); yon_config_register(root_password_parameter,root_password_parameter_command,root_password); } } else { yon_config_register(user_password_parameter,user_password_parameter_command,PASSWORD_DEFAULT); } if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->AutoHostnameCheck))){ yon_config_register(hostname_parameter,hostname_parameter_command,"auto"); } else { if (yon_char_is_empty(gtk_entry_get_text(GTK_ENTRY(widgets->HotnameEntry)))){ yon_config_remove_by_key(hostname_parameter); } else { char *hostname = (char*)gtk_entry_get_text(GTK_ENTRY(widgets->UserNameEntry)); yon_config_register(hostname_parameter,hostname_parameter_command,hostname); } } char *autologin = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->AutologinCheck))?"yes":"no"; yon_config_register(autologin_parameter,autologin_parameter_command,autologin); GtkTreeIter iter; if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->LayoutsFilter),&iter)){ char *locales=""; for_iter (GTK_TREE_MODEL(widgets->LayoutsFilter),&iter){ char *id; int status; gtk_tree_model_get(GTK_TREE_MODEL(widgets->LayoutsFilter),&iter,0,&id,3,&status,-1); if (status){ char *temp = yon_char_unite(locales,!yon_char_is_empty(locales)?",":"",id,NULL); free(locales); locales=temp; } } if (!yon_char_is_empty(locales)){ yon_config_register(xkblayout_parameter,xkblayout_parameter_command,locales); } else { yon_config_remove_by_key(xkblayout_parameter); } } char *model = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->KeyboardModelCombo)); if (!yon_char_is_empty(model)){ yon_config_register(xkbmodel_parameter,xkbmodel_parameter_command,model); } else { yon_config_remove_by_key(xkbmodel_parameter); } char *options = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->LayoutBindingCombo)); if (!yon_char_is_empty(options)){ yon_config_register(xkboptions_parameter,xkboptions_parameter_command,options); } else { yon_config_remove_by_key(xkboptions_parameter); } if (!main_config.configure_mode){ if (!main_config.install_complete){ gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),YON_PAGE_INSTALLATION); } else { gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),YON_PAGE_COMPLETION); } if (gtk_progress_bar_get_fraction(GTK_PROGRESS_BAR(widgets->InstallationProgress))>0.9){ pthread_t tid; pthread_create(&tid,NULL,on_setup_system_configuration,widgets); } main_config.save_done=1; yon_debug_output("Save changed to: %s\n",yon_char_from_int(main_config.save_done)); yon_debug_output("Install state: %s\n",yon_char_from_int(main_config.install_complete)); if (main_config.install_complete) gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),YON_PAGE_COMPLETION); else { gtk_widget_set_sensitive(widgets->CancelInstallButton,0); gtk_widget_set_sensitive(widgets->NextButton,0); gtk_widget_set_sensitive(widgets->BackButton,0); } } else { gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),YON_PAGE_CONFIGURE_END); } }break; case YON_PAGE_INSTALLATION_BEGIN:{ pthread_t tid; pthread_create(&tid,NULL,on_config_save,widgets); gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),YON_PAGE_INSTALLATION); } break; case YON_PAGE_COMPLETION: if (!system("reboot")) return; break; case YON_PAGE_INSTALL_OPTIONS: { int mode = -1; if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->GrubInstallRadio))){ mode = 0; } else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->GrubUpdateRadio))){ mode = 1; } else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->SeparateRadio))){ mode = 2; } else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->OSRadio))){ mode = 3; } else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->UserDataOnlyRadio))){ mode = 4; } switch(mode){ case 0: gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),YON_PAGE_OPTIONS_GRUB_INSTALL); break; case 1: gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),YON_PAGE_OPTIONS_GRUB_UPDATE); break; case 2: gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),YON_PAGE_OPTIONS_SEPARATE); break; case 3: gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),YON_PAGE_OPTIONS_OS_ONLY); break; case 4: gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),YON_PAGE_OPTIONS_USRDATA_ONLY); break; } } break; case YON_PAGE_OPTIONS_GRUB_INSTALL:{ GtkTreeIter iter; GtkTreeModel *model; if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->GrubInstallDevicesTree)),&model,&iter)){ char *cur_device; gtk_tree_model_get(model,&iter,0,&cur_device,-1); yon_config_register(AUTOINSTALL_DEVICE,AUTOINSTALL_DEVICE_command,cur_device); yon_config_register(AUTOINSTALL_TYPE_INSTALL,AUTOINSTALL_TYPE_INSTALL_command,"grub_install"); yon_config_remove_by_key(part_parameter); if (!main_config.configure_mode) gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),YON_PAGE_INSTALLATION_BEGIN); else gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),YON_PAGE_REGION); } else { yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),NO_DEVICE_CHOSEN_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); yon_ubl_status_highlight_incorrect(widgets->GrubInstallDevicesTree); } } break; case YON_PAGE_OPTIONS_GRUB_UPDATE:{ GtkTreeIter iter; GtkTreeModel *model; if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->GrubUpdateDevicesTree)),&model,&iter)){ char *cur_device; gtk_tree_model_get(model,&iter,0,&cur_device,-1); yon_config_register(AUTOINSTALL_DEVICE,AUTOINSTALL_DEVICE_command,cur_device); yon_config_register(AUTOINSTALL_TYPE_INSTALL,AUTOINSTALL_TYPE_INSTALL_command,"grub_update"); yon_config_remove_by_key(part_parameter); if (!main_config.configure_mode) gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),YON_PAGE_INSTALLATION_BEGIN); else gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),YON_PAGE_REGION); } else { yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),NO_DEVICE_CHOSEN_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); yon_ubl_status_highlight_incorrect(widgets->GrubUpdateDevicesTree); } }break; case YON_PAGE_OPTIONS_SEPARATE:{ yon_install_options_save(widgets->SeparateDevicesTree,widgets->SeparateSysSectionTree,"system_only",widgets); }break; case YON_PAGE_OPTIONS_SEPARATE_USRDATA:{ yon_install_options_save(widgets->SeparateUserDevicesTree,widgets->SeparateUserSysSectionTree,"system_only",widgets); } break; case YON_PAGE_OPTIONS_OS_ONLY:{ yon_install_options_save(widgets->OSDevicesTree,widgets->OSSysSectionTree,"system_only",widgets); } break; case YON_PAGE_OPTIONS_USRDATA_ONLY:{ yon_install_options_save(widgets->UserdataDevicesTree,widgets->UserdataSysSectionTree,"data_only",widgets); } break; } } break; case -1: { // Previous switch (page){ case YON_PAGE_REGION: { if (!main_config.configure_mode){ gtk_widget_set_sensitive(widgets->BackButton,0); gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),page-1); } else { gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),YON_PAGE_SECTIONS); } }break; case YON_PAGE_INSTALL_COMMON: case YON_PAGE_INSTALL_SEPARATE: case YON_PAGE_INSTALL_SAME_PARTITION: case YON_PAGE_INSTALL_OPTIONS: { gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),YON_PAGE_SECTIONS); } break; case YON_PAGE_OPTIONS_GRUB_INSTALL: case YON_PAGE_OPTIONS_GRUB_UPDATE: case YON_PAGE_OPTIONS_SEPARATE: case YON_PAGE_OPTIONS_OS_ONLY: case YON_PAGE_OPTIONS_USRDATA_ONLY: gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),YON_PAGE_INSTALL_OPTIONS); break; default:{ gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),page-1); } } } break; case -2: { // Cancel/repeat switch (page){ case YON_PAGE_COMPLETION:{ gtk_main_quit(); }break; default:{ gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),0); } } }break; } } void on_region_changed(GtkComboBox *self, main_window *widgets); void on_region_changed(GtkComboBox *self, main_window *widgets){ char *active = (char*)gtk_combo_box_get_active_id(self); active = yon_char_append("/usr/share/zoneinfo/",active); int size; gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(widgets->ZoneCombo)); if (yon_file_is_directory(active)){ config_str parsed = yon_file_ls(active,&size); for (int i=0;iZoneCombo),parsed[i],_(parsed[i])); } gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->ZoneCombo),0); } } void on_locale_changed(GtkWidget *,main_window *); void on_locale_changed(GtkWidget *,main_window *){ } void on_additional_software_toggled(); void on_additional_software_toggled(){ } void yon_set_max_size_from_partition(GtkTreeView *table, GtkSpinButton *spin_size, GtkComboBox *size_type); void yon_set_max_size_from_partition(GtkTreeView *table, GtkSpinButton *spin_size, GtkComboBox *size_type){ GtkTreeModel *model; GtkTreeIter iter; char *selected_size=NULL; if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(table),&model,&iter)){ gtk_tree_model_get(model,&iter,1,&selected_size,-1); if (!yon_char_is_empty(selected_size)){ int size = gtk_combo_box_get_active(size_type); double cur_size = atof(selected_size); char cur_size_letter = selected_size[strlen(selected_size)-1]; int cur_size_type=0; switch (cur_size_letter){ case 'M': cur_size_type=0; break; case 'G': cur_size_type=1; break; case 'T': cur_size_type=2; break; } if (size-cur_size_type>0){ for (int i=0;iInstallationNearSysSectionTree) yon_set_max_size_from_partition(GTK_TREE_VIEW(widgets->InstallationNearSysSectionTree),GTK_SPIN_BUTTON(widgets->InstallationNearSizeSpin),GTK_COMBO_BOX(widgets->InstallationNearSizeTypeSpin)); } void on_near_installation_device_changed(GtkWidget *self, main_window *widgets); void on_near_installation_device_changed(GtkWidget *self, main_window *widgets){ gtk_list_store_clear(widgets->PartitionsList); GtkTreeIter iter; GtkTreeModel *model; if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(self)),&model,&iter)){ char *disk_path=""; gtk_tree_model_get(model,&iter,0,&disk_path,-1); int size; config_str parsed; parsed = yon_config_load(get_parts_and_devices_command,&size); char *string = yon_char_parsed_to_string(parsed,size,""); struct json_object *root; struct json_object *blockdevices; root = json_tokener_parse(string); json_object_object_get_ex(root, "blockdevices", &blockdevices); for (long unsigned int i = 0; i < json_object_array_length(blockdevices); i++) { struct json_object *device = json_object_array_get_idx(blockdevices, i); struct json_object *type, *path, *size, *model, *fstype, *fsused; json_object_object_get_ex(device, "type", &type); if (strcmp("part",json_object_get_string(type))) continue; json_object_object_get_ex(device, "path", &path); if (!strstr(json_object_get_string(path),disk_path)){ continue; } json_object_object_get_ex(device, "size", &size); json_object_object_get_ex(device, "model", &model); json_object_object_get_ex(device, "fstype", &fstype); json_object_object_get_ex(device, "fsused", &fsused); float free_space=0; char *free_space_string=""; if (size&&fsused){ free_space = atof(json_object_get_string(size))-atof(json_object_get_string(fsused)); free_space_string = yon_char_append(yon_char_from_float(free_space)," "); free_space_string[strlen(free_space_string)-1]=json_object_get_string(size)[strlen(json_object_get_string(size))-1]; } // gtk_spin_button_set_value(GTK_SPIN_BUTTON(widgets->InstallationNearSizeSpin),0.0); gtk_adjustment_set_upper(gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(widgets->InstallationNearSizeSpin)),0.0); gtk_list_store_append(widgets->PartitionsList,&iter); gtk_list_store_set(widgets->PartitionsList,&iter,0,json_object_get_string(path),1,json_object_get_string(size),2,free_space_string,3,json_object_get_string(fstype),-1); } yon_char_parsed_free(parsed,size); } } void on_same_installation_device_changed(GtkWidget *, main_window *widgets); void on_same_installation_device_changed(GtkWidget *, main_window *widgets){ gtk_list_store_clear(widgets->PartitionsList); GtkTreeIter iter; GtkTreeModel *model; if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SamePlaceDeviceTree)),&model,&iter)){ char *disk_path=""; gtk_tree_model_get(model,&iter,0,&disk_path,-1); int size; config_str parsed; parsed = yon_config_load(get_parts_and_devices_command,&size); char *string = yon_char_parsed_to_string(parsed,size,""); struct json_object *root; struct json_object *blockdevices; root = json_tokener_parse(string); json_object_object_get_ex(root, "blockdevices", &blockdevices); for (long unsigned int i = 0; i < json_object_array_length(blockdevices); i++) { struct json_object *device = json_object_array_get_idx(blockdevices, i); struct json_object *type, *path, *size, *model, *vendor, *serial; json_object_object_get_ex(device, "type", &type); if (strcmp("part",json_object_get_string(type))) continue; json_object_object_get_ex(device, "path", &path); if (!strstr(json_object_get_string(path),disk_path)){ continue; } json_object_object_get_ex(device, "size", &size); json_object_object_get_ex(device, "model", &model); json_object_object_get_ex(device, "vendor", &vendor); json_object_object_get_ex(device, "serial", &serial); gtk_list_store_append(widgets->PartitionsList,&iter); gtk_list_store_set(widgets->PartitionsList,&iter,0,json_object_get_string(path),1,json_object_get_string(model),2,json_object_get_string(serial),3,json_object_get_string(size),4,json_object_get_string(vendor),-1); } yon_char_parsed_free(parsed,size); } } void on_gparted_open(); void on_gparted_open(){ yon_launch_app_with_arguments(open_gparted_command,NULL); } /**yon_main_window_complete(main_window *widgets) * [EN] * * [RU] * Функция настройки основного окна приложения. [widgets] - структура со стандартным интерфейсом. */ main_window *yon_main_window_complete(){ main_window *widgets=NULL; widgets = yon_remalloc(widgets,sizeof(main_window)); GtkBuilder *builder = gtk_builder_new_from_resource(glade_path); // Custom widgets configuration widgets->builder = builder; widgets->DevicesList=GTK_LIST_STORE(gtk_builder_get_object(builder,"DevicesList")); widgets->LanguagesList=GTK_LIST_STORE(gtk_builder_get_object(builder,"LanguagesList")); widgets->MainWindow=yon_gtk_builder_get_widget(builder,"MainWindow"); widgets->WelcomeToggle=yon_gtk_builder_get_widget(builder,"WelcomeToggle"); widgets->LicenceToggle=yon_gtk_builder_get_widget(builder,"LicenceToggle"); widgets->LocationToggle=yon_gtk_builder_get_widget(builder,"LocationToggle"); widgets->KeyboardToggle=yon_gtk_builder_get_widget(builder,"KeyboardToggle"); widgets->SectionsToggle=yon_gtk_builder_get_widget(builder,"SectionsToggle"); widgets->UsersToggle=yon_gtk_builder_get_widget(builder,"USersToggle"); widgets->SummaryToggle=yon_gtk_builder_get_widget(builder,"SummaryToggle"); widgets->CompletionToggle=yon_gtk_builder_get_widget(builder,"CompletionToggle"); widgets->InstallationToggle=yon_gtk_builder_get_widget(builder,"InstallationToggle"); widgets->LanguageCombo=yon_gtk_builder_get_widget(builder,"LanguageCombo"); widgets->RegionCombo=yon_gtk_builder_get_widget(builder,"RegionCombo"); widgets->ZoneCombo=yon_gtk_builder_get_widget(builder,"ZoneCombo"); widgets->AvailableLanguagesEntry=yon_gtk_builder_get_widget(builder,"AvailableLanguagesEntry"); widgets->AvailableLanguagesButton=yon_gtk_builder_get_widget(builder,"AvailableLanguagesButton"); widgets->LanguagesCombo=yon_gtk_builder_get_widget(builder,"LanguagesCombo"); widgets->KeyboardModelCombo=yon_gtk_builder_get_widget(builder,"KeyboardModelCombo"); widgets->LayoutBindingCombo=yon_gtk_builder_get_widget(builder,"LayoutBindingCombo"); widgets->DefaultLayoutRadio=yon_gtk_builder_get_widget(builder,"DefaultLayoutRadio"); widgets->ManualLayoutRadio=yon_gtk_builder_get_widget(builder,"ManualLayoutRadio"); widgets->LayoutTree=yon_gtk_builder_get_widget(builder,"LayoutTree"); widgets->AddButton=yon_gtk_builder_get_widget(builder,"AddButton"); widgets->RemoveButton=yon_gtk_builder_get_widget(builder,"RemoveButton"); widgets->InstallationRadio=yon_gtk_builder_get_widget(builder,"InstallationRadio"); widgets->InstallationNearRadio=yon_gtk_builder_get_widget(builder,"InstallationNearRadio"); widgets->InstallationLinuxRadio=yon_gtk_builder_get_widget(builder,"InstallationLinuxRadio"); widgets->InstallationWindowsRadio=yon_gtk_builder_get_widget(builder,"InstallationWindowsRadio"); widgets->InstallationOptionsRadio=yon_gtk_builder_get_widget(builder,"InstallationOptionsRadio"); widgets->UserNameEntry=yon_gtk_builder_get_widget(builder,"UserNameEntry"); widgets->LoginEntry=yon_gtk_builder_get_widget(builder,"LoginEntry"); widgets->PasswordCombo=yon_gtk_builder_get_widget(builder,"PasswordCombo"); widgets->PasswordEntry=yon_gtk_builder_get_widget(builder,"PasswordEntry"); widgets->PasswordButton=yon_gtk_builder_get_widget(builder,"PasswordButton"); widgets->AutologinCheck=yon_gtk_builder_get_widget(builder,"AutologinCheck"); widgets->AdminPasswordCombo=yon_gtk_builder_get_widget(builder,"AdminPasswordCombo"); widgets->AdminPasswordEntry=yon_gtk_builder_get_widget(builder,"AdminPasswordEntry"); widgets->AdminPasswordButton=yon_gtk_builder_get_widget(builder,"AdminPasswordButton"); widgets->HotnameEntry=yon_gtk_builder_get_widget(builder,"HotnameEntry"); widgets->AutoHostnameCheck=yon_gtk_builder_get_widget(builder,"AutoHostnameCheck"); widgets->CancelInstallButton=yon_gtk_builder_get_widget(builder,"CancelInstallButton"); widgets->BackButton=yon_gtk_builder_get_widget(builder,"BackButton"); widgets->NextButton=yon_gtk_builder_get_widget(builder,"NextButton"); widgets->mainSettingsButton=yon_gtk_builder_get_widget(builder,"mainSettingsButton"); widgets->menu1=yon_gtk_builder_get_widget(builder,"menu1"); widgets->menu2=yon_gtk_builder_get_widget(builder,"menu2"); widgets->RegionImage = yon_gtk_builder_get_widget(builder,"RegionImage"); widgets->RegionBox = yon_gtk_builder_get_widget(builder,"RegionBox"); widgets->RegionAspect = yon_gtk_builder_get_widget(builder,"RegionAspect"); widgets->KeyboardImage = yon_gtk_builder_get_widget(builder,"KeyboardImage"); widgets->KeyboardBox = yon_gtk_builder_get_widget(builder,"KeyboardBox"); widgets->Notebook = yon_gtk_builder_get_widget(builder,"Notebook"); widgets->LicenceLabel = yon_gtk_builder_get_widget(builder,"LicenceLabel"); widgets->SlidesImage = yon_gtk_builder_get_widget(builder,"SlidesImage"); widgets->CommonInstallationDevicesTree = yon_gtk_builder_get_widget(builder,"CommonInstallationDevicesTree"); widgets->AdditionalSoftwareTree = yon_gtk_builder_get_widget(builder,"AdditionalSoftwareTree"); widgets->SamePlaceDeviceTree = yon_gtk_builder_get_widget(builder,"SamePlaceDeviceTree"); widgets->SamePlacePartTree = yon_gtk_builder_get_widget(builder,"SamePlacePartTree"); widgets->InstallationNearSysDevicesTree = yon_gtk_builder_get_widget(builder,"InstallationNearSysDevicesTree"); widgets->InstallationNearSysSectionTree = yon_gtk_builder_get_widget(builder,"InstallationNearSysSectionTree"); widgets->InstallationNearSizeSpin = yon_gtk_builder_get_widget(builder,"InstallationNearSizeSpin"); widgets->InstallationNearSizeTypeSpin = yon_gtk_builder_get_widget(builder,"InstallationNearSizeTypeSpin"); widgets->InstallationProgress = yon_gtk_builder_get_widget(builder,"InstallationProgress"); widgets->InstallationLabel = yon_gtk_builder_get_widget(builder,"InstallationLabel"); widgets->PackageInstallationProgress = yon_gtk_builder_get_widget(builder,"PackageInstallationProgress"); widgets->PackageInstallationLabel = yon_gtk_builder_get_widget(builder,"PackageInstallationLabel"); widgets->SameInstallationFilesystemTypeCombo = yon_gtk_builder_get_widget(builder,"SameInstallationFilesystemTypeCombo"); widgets->SameInstallationFormatCheck = yon_gtk_builder_get_widget(builder,"SameInstallationFormatCheck"); widgets->SameInstallationSectionNameEntry = yon_gtk_builder_get_widget(builder,"SameInstallationSectionNameEntry"); widgets->NextInstallationFilesystemTypeCombo = yon_gtk_builder_get_widget(builder,"NextInstallationFilesystemTypeCombo"); widgets->NextInstallationFormatCheck = yon_gtk_builder_get_widget(builder,"NextInstallationFormatCheck"); widgets->NextInstallationSectionNameEntry = yon_gtk_builder_get_widget(builder,"NextInstallationSectionNameEntry"); widgets->CommonInstallationFilesystemTypeCombo = yon_gtk_builder_get_widget(builder,"CommonInstallationFilesystemTypeCombo"); widgets->CommonInstallationSectionNameEntry = yon_gtk_builder_get_widget(builder,"CommonInstallationSectionNameEntry"); widgets->GpartedCommonButton = yon_gtk_builder_get_widget(builder,"GpartedCommonButton"); widgets->GpartedNearButton = yon_gtk_builder_get_widget(builder,"GpartedNearButton"); widgets->GpartedSameButton = yon_gtk_builder_get_widget(builder,"GpartedSameButton"); widgets->ConfigurationModeMenuItem = yon_gtk_builder_get_widget(builder,"ConfigurationModeMenuItem"); widgets->DocumentationMenuItem = yon_gtk_builder_get_widget(builder,"DocumentationMenuItem"); widgets->AboutMenuItem = yon_gtk_builder_get_widget(builder,"AboutMenuItem"); widgets->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox"); widgets->AdditionalSoftwareCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"AdditionalSoftwareCell")); widgets->GrubInstallRadio = yon_gtk_builder_get_widget(builder,"GrubInstallRadio"); widgets->GrubUpdateRadio = yon_gtk_builder_get_widget(builder,"GrubUpdateRadio"); widgets->SeparateRadio = yon_gtk_builder_get_widget(builder,"SeparateRadio"); widgets->OSRadio = yon_gtk_builder_get_widget(builder,"OSRadio"); widgets->UserDataOnlyRadio = yon_gtk_builder_get_widget(builder,"UserDataOnlyRadio"); widgets->GpartedGrubInstallButton = yon_gtk_builder_get_widget(builder,"GpartedGrubInstallButton"); widgets->GrubInstallDevicesTree = yon_gtk_builder_get_widget(builder,"GrubInstallDevicesTree"); widgets->GpartedGrubUpdateButton = yon_gtk_builder_get_widget(builder,"GpartedGrubUpdateButton"); widgets->GrubUpdateDevicesTree = yon_gtk_builder_get_widget(builder,"GrubUpdateDevicesTree"); widgets->GpartedSeparateButton = yon_gtk_builder_get_widget(builder,"GpartedSeparateButton"); widgets->SeparateDevicesTree = yon_gtk_builder_get_widget(builder,"SeparateDevicesTree"); widgets->SeparateSysSectionTree = yon_gtk_builder_get_widget(builder,"SeparateSysSectionTree"); widgets->GpartedSeparateUserButton = yon_gtk_builder_get_widget(builder,"GpartedSeparateUserButton"); widgets->SeparateUserDevicesTree = yon_gtk_builder_get_widget(builder,"SeparateUserDevicesTree"); widgets->SeparateUserSysSectionTree = yon_gtk_builder_get_widget(builder,"SeparateUse-rSysSectionTree"); widgets->GpartedOSButton = yon_gtk_builder_get_widget(builder,"GpartedOSButton"); widgets->OSDevicesTree = yon_gtk_builder_get_widget(builder,"OSDevicesTree"); widgets->OSSysSectionTree = yon_gtk_builder_get_widget(builder,"OSSysSectionTree"); widgets->GpartedUserdataButton = yon_gtk_builder_get_widget(builder,"GpartedUserdataButton"); widgets->UserdataDevicesTree = yon_gtk_builder_get_widget(builder,"UserdataDevicesTree"); widgets->UserdataSysSectionTree = yon_gtk_builder_get_widget(builder,"UserdataSysSectionTree"); widgets->LanguagesList = GTK_LIST_STORE(gtk_builder_get_object(builder,"LanguagesList")); widgets->LanguagesFilter = GTK_TREE_MODEL(gtk_builder_get_object(builder,"LanguagesFilter")); widgets->LayoutsFilter = GTK_TREE_MODEL(gtk_builder_get_object(builder,"LayoutsFilter")); widgets->LayoutList = GTK_TREE_STORE(gtk_builder_get_object(builder,"LayoutList")); widgets->AdditionalSoftwareList = GTK_LIST_STORE(gtk_builder_get_object(builder,"AdditionalSoftwareList")); widgets->PartitionsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"PartitionsList")); g_signal_connect(G_OBJECT(widgets->GpartedCommonButton),"clicked",G_CALLBACK(on_gparted_open),NULL); g_signal_connect(G_OBJECT(widgets->GpartedSameButton),"clicked",G_CALLBACK(on_gparted_open),NULL); g_signal_connect(G_OBJECT(widgets->GpartedNearButton),"clicked",G_CALLBACK(on_gparted_open),NULL); g_signal_connect(G_OBJECT(widgets->Notebook),"switch-page",G_CALLBACK(on_page_changed),widgets); g_signal_connect(G_OBJECT(widgets->MainWindow),"check-resize",G_CALLBACK(on_region_resized),widgets); g_signal_connect(G_OBJECT(widgets->BackButton),"clicked",G_CALLBACK(on_page_navigation_clicked),widgets); g_signal_connect(G_OBJECT(widgets->NextButton),"clicked",G_CALLBACK(on_page_navigation_clicked),widgets); g_signal_connect(G_OBJECT(widgets->CancelInstallButton),"clicked",G_CALLBACK(on_page_navigation_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); g_signal_connect(G_OBJECT(widgets->AddButton),"clicked",G_CALLBACK(on_keyboard_clicked),widgets); g_signal_connect(G_OBJECT(widgets->UsersToggle),"toggled",G_CALLBACK(on_toggle_block),NULL); g_signal_connect(G_OBJECT(widgets->LicenceToggle),"toggled",G_CALLBACK(on_toggle_block),NULL); g_signal_connect(G_OBJECT(widgets->WelcomeToggle),"toggled",G_CALLBACK(on_toggle_block),NULL); g_signal_connect(G_OBJECT(widgets->KeyboardToggle),"toggled",G_CALLBACK(on_toggle_block),NULL); g_signal_connect(G_OBJECT(widgets->LocationToggle),"toggled",G_CALLBACK(on_toggle_block),NULL); g_signal_connect(G_OBJECT(widgets->SectionsToggle),"toggled",G_CALLBACK(on_toggle_block),NULL); g_signal_connect(G_OBJECT(widgets->InstallationToggle),"toggled",G_CALLBACK(on_toggle_block),NULL); g_signal_connect(G_OBJECT(widgets->CompletionToggle),"toggled",G_CALLBACK(on_toggle_block),NULL); g_signal_connect(G_OBJECT(widgets->InstallationNearSysDevicesTree),"cursor-changed",G_CALLBACK(on_near_installation_device_changed),widgets); g_signal_connect(G_OBJECT(widgets->SamePlaceDeviceTree),"cursor-changed",G_CALLBACK(on_near_installation_device_changed),widgets); g_signal_connect(G_OBJECT(widgets->ConfigurationModeMenuItem),"toggled",G_CALLBACK(on_configuration_mode_switch),widgets); g_signal_connect(G_OBJECT(widgets->DocumentationMenuItem),"activate",G_CALLBACK(on_open_documentation_confirmation),widgets); g_signal_connect(G_OBJECT(widgets->AboutMenuItem),"activate",G_CALLBACK(on_about),widgets); g_signal_connect(G_OBJECT(widgets->SamePlacePartTree),"cursor-changed",G_CALLBACK(on_partition_changed),widgets); g_signal_connect(G_OBJECT(widgets->InstallationNearSysSectionTree),"cursor-changed",G_CALLBACK(on_partition_changed),widgets); gtk_tree_model_filter_set_visible_column(GTK_TREE_MODEL_FILTER(widgets->LayoutsFilter),3); 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->ManualLayoutRadio),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),gtk_widget_get_parent(gtk_widget_get_parent(widgets->AddButton))); g_signal_connect(G_OBJECT(widgets->AutoHostnameCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),widgets->HotnameEntry); g_signal_connect(G_OBJECT(widgets->NextInstallationFormatCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),widgets->NextInstallationFilesystemTypeCombo); g_signal_connect(G_OBJECT(widgets->SameInstallationFormatCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),widgets->SameInstallationFilesystemTypeCombo); // g_signal_connect(G_OBJECT(widgets->InstallationToggle),"toggled",G_CALLBACK(on_toggle_block),widgets); gtk_tree_model_filter_set_visible_column(GTK_TREE_MODEL_FILTER(widgets->LanguagesFilter),0); gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(widgets->LanguagesFilter)); gtk_window_set_title(GTK_WINDOW(widgets->MainWindow),TITLE_LABEL); gtk_window_set_icon_name(GTK_WINDOW(widgets->MainWindow),icon_path); int size; config_str parsed = yon_file_open(licence_path,&size); if (size){ char *licence = yon_char_parsed_to_string(parsed,size,""); gtk_label_set_text(GTK_LABEL(widgets->LicenceLabel),licence); free(licence); yon_char_parsed_free(parsed,size); } widgets->regions_original = gdk_pixbuf_new_from_resource(regions_path,NULL); widgets->keyboard_original = gdk_pixbuf_new_from_resource(keyboard_path,NULL); widgets->slides_original = gdk_pixbuf_new_from_resource(slide_0_path,NULL); int width = gdk_pixbuf_get_width(widgets->regions_original); int height = gdk_pixbuf_get_height(widgets->regions_original); widgets->region_height_mult = (float)height/width; gtk_image_set_from_pixbuf(GTK_IMAGE(widgets->RegionImage),gdk_pixbuf_scale_simple(widgets->regions_original,600,400,GDK_INTERP_BILINEAR)); gtk_image_set_from_pixbuf(GTK_IMAGE(widgets->KeyboardImage),gdk_pixbuf_scale_simple(widgets->keyboard_original,600,400,GDK_INTERP_BILINEAR)); gtk_image_set_from_pixbuf(GTK_IMAGE(widgets->SlidesImage),gdk_pixbuf_scale_simple(widgets->slides_original,600,400,GDK_INTERP_BILINEAR)); GtkTreeIter iter; gtk_list_store_clear(widgets->LanguagesList); parsed = yon_file_open(languages_path,&size); for (int i=0;iLanguagesList,&iter); gtk_list_store_set(widgets->LanguagesList,&iter,0,0,1,_(cur[1]),2,cur[0],-1); } yon_char_parsed_free(cur,cur_size); } yon_char_parsed_free(parsed,size); parsed = yon_dir_get_contents(zone_path,&size); for (int i=0;iRegionCombo),parsed[i],_(parsed[i])); } free(path); } } gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->RegionCombo),0); yon_char_parsed_free(parsed,size); parsed = yon_config_load(get_layouts_command,&size); GtkTreeIter itar; for (int i=0;iLayoutList,&iter,NULL); gtk_tree_store_set(widgets->LayoutList,&iter,0,layout[0],1,_(layout[1]),2,1,-1); yon_char_parsed_free(layout,layout_size); layout = yon_config_load(get_layouts_local_command(layout_id),&layout_size); for (int j=0;jLayoutList,&itar,&iter); gtk_tree_store_set(widgets->LayoutList,&itar,0,layouts_parsed[0],1,_(layouts_parsed[1]),2,1,3,0,-1); yon_char_parsed_free(layouts_parsed,parsed_size); } } if (layout_size==-1) { gtk_tree_store_set(widgets->LayoutList,&iter,2,1,-1); } yon_char_parsed_free(layout,layout_size); } } yon_char_parsed_free(parsed,size); { parsed = yon_config_load(get_devices_command,&size); char *string = yon_char_parsed_to_string(parsed,size,""); struct json_object *root; struct json_object *blockdevices; root = json_tokener_parse(string); json_object_object_get_ex(root, "blockdevices", &blockdevices); for (long unsigned int i = 0; i < json_object_array_length(blockdevices); i++) { struct json_object *device = json_object_array_get_idx(blockdevices, i); struct json_object *path, *size, *model, *vendor, *serial; json_object_object_get_ex(device, "path", &path); json_object_object_get_ex(device, "size", &size); json_object_object_get_ex(device, "model", &model); json_object_object_get_ex(device, "vendor", &vendor); json_object_object_get_ex(device, "serial", &serial); gtk_list_store_append(widgets->DevicesList,&iter); gtk_list_store_set(widgets->DevicesList,&iter,0,json_object_get_string(path),1,json_object_get_string(model),2,json_object_get_string(serial),3,json_object_get_string(size),4,json_object_get_string(vendor),-1); } yon_char_parsed_free(parsed,size); } parsed = yon_resource_open_file(additional_software_path,&size); for (int i=1;iAdditionalSoftwareList,&iter); gtk_list_store_set(widgets->AdditionalSoftwareList,&iter,0,1,1,module_parsed[0],3,module_parsed[1],-1); //2,module_parsed[2] } } config_str models = yon_config_load(get_models_command,&size); for (int i=0;iKeyboardModelCombo),models[i],_(models[i+1])); } return widgets; } int main(int argc, char *argv[]){ local=setlocale(LC_ALL, ""); textdomain (LocaleName); config_init(); int option_index=0; int show_help=0; { struct option long_options[] = { {"help", 0, 0, 'h'}, {"version", 0, 0, 'V'}, {"lock-help", 0,0, 1}, {"lock-save", 0,0, 2}, {"lock-save-local", 0,0, 3}, {"lock-save-global", 0,0, 4}, {"lock-load-global", 0,0, 5}, {"socket-id", 1, 0, 's'}, {"socket-ext-id", 1,0, 'e'}, {"socket-trd-id", 1,0, 't'}, {"clear-config", 0,0, 'c'}, {"debug", 0,0, 'd'}, { NULL, 0, NULL, 0 } }; for (int i=0;iMainWindow)); yon_window_config_load(config_path); GtkCssProvider *css=gtk_css_provider_new(); gtk_css_provider_load_from_resource(css,CssPath); gtk_style_context_add_provider_for_screen(gdk_screen_get_default(), GTK_STYLE_PROVIDER(css), -1); gtk_main(); }