From bd95e6459797146d88ab2fb895143409cd4fa8df Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Tue, 5 Nov 2024 17:55:30 +0600 Subject: [PATCH] Design changes --- source/ubl-settings-kernel.c | 96 ++++++++++++++++------ source/ubl-settings-kernel.h | 14 +++- ubl-settings-kernel-install.glade | 19 ++++- ubl-settings-kernel-table-row.glade | 121 +++++++++++++++++++++++----- ubl-settings-kernel.glade | 25 +++--- 5 files changed, 212 insertions(+), 63 deletions(-) diff --git a/source/ubl-settings-kernel.c b/source/ubl-settings-kernel.c index fea6fba..988e330 100644 --- a/source/ubl-settings-kernel.c +++ b/source/ubl-settings-kernel.c @@ -77,6 +77,7 @@ install_window *yon_install_window_new(){ window->ExecuteButton = yon_gtk_builder_get_widget(builder,"ExecuteButton"); window->KernelVersionCombo = yon_gtk_builder_get_widget(builder,"KernelVersionCombo"); + window->FilenameEntry = yon_gtk_builder_get_widget(builder,"FilenameEntry"); window->DebugCheck = yon_gtk_builder_get_widget(builder,"DebugCheck"); window->DriversCheck = yon_gtk_builder_get_widget(builder,"DriversCheck"); @@ -103,12 +104,16 @@ int yon_tag_add(GtkBox *target,char *tag_label, char *tag_style, char *icon_name } gboolean on_command_execute_success(GtkWidget *,gint,main_window *widgets){ - + gtk_revealer_set_transition_type(GTK_REVEALER(widgets->MainRevealer),GTK_REVEALER_TRANSITION_TYPE_SLIDE_DOWN); + gtk_revealer_set_reveal_child(GTK_REVEALER(widgets->MainRevealer),0); yon_interface_update(widgets); return G_SOURCE_REMOVE; } void *yon_command_execute_async(char *command,main_window *widgets){ + gtk_revealer_set_transition_type(GTK_REVEALER(widgets->MainRevealer),GTK_REVEALER_TRANSITION_TYPE_SLIDE_UP); + gtk_revealer_set_reveal_child(GTK_REVEALER(widgets->MainRevealer),1); + gtk_revealer_set_reveal_child(GTK_REVEALER(widgets->TerminalRevealer),0); yon_terminal_integrated_start(widgets->InstallTerminal,command); glong columns = vte_terminal_get_column_count(VTE_TERMINAL(widgets->InstallTerminal)); vte_terminal_set_size(VTE_TERMINAL(widgets->InstallTerminal),columns,20); @@ -152,8 +157,13 @@ GtkWidget *yon_tab_row_new(GtkListBox *target, char *target_string, main_window kernels_tab *tab = malloc(sizeof(kernels_tab)); tab->main_box = yon_gtk_builder_get_widget(builder,"TableRowLabel"); - tab->icon_box = yon_gtk_builder_get_widget(builder,"IconBox"); tab->name_label = yon_gtk_builder_get_widget(builder,"NameLabel"); + tab->module_label = yon_gtk_builder_get_widget(builder,"ModuleLabel"); + tab->package_label = yon_gtk_builder_get_widget(builder,"PackageLabel"); + tab->module_icon = yon_gtk_builder_get_widget(builder,"ModuleIcon"); + tab->package_icon = yon_gtk_builder_get_widget(builder,"PackageIcon"); + tab->module_label = yon_gtk_builder_get_widget(builder,"ModuleLabel"); + tab->package_label = yon_gtk_builder_get_widget(builder,"PackageLabel"); tab->install_tags_box = yon_gtk_builder_get_widget(builder,"InstallTagsBox"); tab->run_tags_box = yon_gtk_builder_get_widget(builder,"RunBox"); tab->tags_box = yon_gtk_builder_get_widget(builder,"TagsBox"); @@ -184,7 +194,9 @@ GtkWidget *yon_tab_row_new(GtkListBox *target, char *target_string, main_window tab->name = yon_char_new(parsed[0]); tab->module = yon_char_new(parsed[1]); tab->package = yon_char_new(parsed[2]); - char *name = yon_char_unite("",tab->name,"\n",MODULE_LABEL," ",tab->module,"\n",PACKAGE_LABEL," ",tab->package,"",NULL); + char *name = yon_char_unite("",tab->name,"",NULL); + char *module = yon_char_unite("",MODULE_LABEL," ",tab->module,"",NULL); + char *package = yon_char_unite("",PACKAGE_LABEL," ",tab->package,"",NULL); int types_size; config_str types_parsed = yon_char_parse(parsed[5],&types_size,", "); for (int k=0;kmodule); if (!system(check_install_command)){ - yon_tag_add(GTK_BOX(tab->install_tags_box),MODULE_INSTALLED_LABEL,"tag_green",module_icon_path); - GtkWidget *module_image = gtk_image_new_from_icon_name(module_icon_path,GTK_ICON_SIZE_LARGE_TOOLBAR); - gtk_box_pack_start(GTK_BOX(tab->icon_box),module_image,0,0,2); - GtkWidget *package_image = gtk_image_new_from_icon_name(package_icon_path,GTK_ICON_SIZE_LARGE_TOOLBAR); - gtk_box_pack_start(GTK_BOX(tab->icon_box),package_image,0,0,2); - gtk_widget_show(module_image); - gtk_widget_show(package_image); + yon_tag_add(GTK_BOX(tab->install_tags_box),MODULE_INSTALLED_LABEL,"tag_green",NULL); + + gtk_image_set_from_icon_name(GTK_IMAGE(tab->module_icon),module_icon_path,GTK_ICON_SIZE_BUTTON); gtk_widget_show(tab->remove_module_button); gtk_widget_show(tab->remove_package_button); gtk_widget_hide(tab->install_module_button); gtk_widget_hide(tab->install_package_button); - } else { + } + { free(check_install_command); check_install_command = get_package_is_installed_command(tab->package); if (!system(check_install_command)){ - yon_tag_add(GTK_BOX(tab->install_tags_box),PACKAGE_INSTALLED_LABEL,"tag_green",package_icon_path); - GtkWidget *package_image = gtk_image_new_from_icon_name(package_icon_path,GTK_ICON_SIZE_LARGE_TOOLBAR); - gtk_box_pack_start(GTK_BOX(tab->icon_box),package_image,0,0,2); - gtk_widget_show(package_image); + yon_tag_add(GTK_BOX(tab->install_tags_box),PACKAGE_INSTALLED_LABEL,"tag_green",NULL); + gtk_image_set_from_icon_name(GTK_IMAGE(tab->package_icon),package_icon_path,GTK_ICON_SIZE_BUTTON); gtk_widget_hide(tab->install_package_button); gtk_widget_show(tab->remove_package_button); } } yon_char_parsed_free(types_parsed,types_size); gtk_label_set_markup(GTK_LABEL(tab->name_label),name); + gtk_label_set_markup(GTK_LABEL(tab->module_label),module); + gtk_label_set_markup(GTK_LABEL(tab->package_label),package); gtk_label_set_text(GTK_LABEL(tab->description_label),parsed[6]); - gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->StatusSizeGroup),tab->icon_box); - gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->KernelSizeGroup),tab->name_label); + gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->KernelSizeGroup),gtk_widget_get_parent(gtk_widget_get_parent(tab->name_label))); gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->TagsSizeGroup),tab->tags_box); gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->InstallSizeGroup),tab->install_tags_box); gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->RunSizeGroup),tab->run_tags_box); @@ -266,12 +274,18 @@ void config_init(){ main_config.load_mode=1; } - - void on_update_clicked(GtkWidget *, main_window *widgets){ yon_interface_update(widgets); } +void on_selection_changed(GtkWidget *, GtkListBoxRow* row, main_window *widgets){ + if (row){ + gtk_widget_set_sensitive(widgets->InfoButton,1); + } else { + gtk_widget_set_sensitive(widgets->InfoButton,0); + } +} + void on_info_clicked(GtkWidget *, main_window *widgets){ info_window *window = yon_info_window_new(); yon_gtk_window_setup(GTK_WINDOW(window->window),GTK_WINDOW(widgets->Window),INFO_TITLE_LABEL,icon_path,"info_window"); @@ -285,12 +299,12 @@ void on_info_clicked(GtkWidget *, main_window *widgets){ if (target){ GList *list = gtk_container_get_children(GTK_CONTAINER(target)); GList *list2 = gtk_container_get_children(GTK_CONTAINER(g_list_nth_data(list,0))); - GList *list3 = gtk_container_get_children(GTK_CONTAINER(g_list_nth_data(list2,1))); - char * target_str = yon_char_new((char*)gtk_label_get_text(GTK_LABEL(g_list_nth_data(list3,0)))); + GList *list3 = gtk_container_get_children(GTK_CONTAINER(g_list_nth_data(list2,0))); + GList *list4 = gtk_container_get_children(GTK_CONTAINER(g_list_nth_data(list3,2))); + char * target_str = yon_char_new((char*)gtk_label_get_text(GTK_LABEL(g_list_nth_data(list4,1)))); int size; - config_str parsed = yon_char_parse(target_str,&size,"\n"); char *package=NULL; - if (size&&(package = strstr(parsed[2],": "))){ + if ((package = strstr(target_str,": "))){ package+=2; } config_str info = yon_config_load(get_package_info_command(package),&size); @@ -298,7 +312,6 @@ void on_info_clicked(GtkWidget *, main_window *widgets){ char *final_text = yon_char_parsed_to_string(info,size,""); gtk_label_set_text(GTK_LABEL(window->InfoLabel),final_text); free(final_text); - yon_char_parsed_free(info,size); } else { gtk_label_set_text(GTK_LABEL(window->InfoLabel),PACKAGE_NOT_FOUND_LABEL); } @@ -322,12 +335,38 @@ void on_changelog_clicked(GtkWidget *, kernels_tab *tab){ gtk_widget_show(window->window); } +void on_build_execute(GtkWidget *, dictionary *dict){ + main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); + install_window *window = yon_dictionary_get_data(dict->first->next,install_window*); + int debug = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->DebugCheck)); + int drivers = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->DriversCheck)); + char *target = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->KernelVersionCombo)); + char *filename = (char*)gtk_entry_get_text(GTK_ENTRY(window->FilenameEntry)); + char *command = build_command(target,filename,debug,drivers); + yon_command_execute_async(command,widgets); +} + void on_building_clicked(GtkWidget *, main_window *widgets){ if (widgets){}; install_window *window = yon_install_window_new(); + 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); yon_gtk_window_setup(GTK_WINDOW(window->window),GTK_WINDOW(widgets->Window),INFO_TITLE_LABEL,icon_path,"install_window"); - gtk_widget_show(window->window); + g_signal_connect(G_OBJECT(window->ExecuteButton),"clicked",G_CALLBACK(on_build_execute),dict); + int size; + config_str kernels = yon_resource_open_file(kernels_path,&size); + for (int i=1;iKernelVersionCombo),parsed[2],parsed[0]); + } + gtk_combo_box_set_active(GTK_COMBO_BOX(window->KernelVersionCombo),0); + } + + gtk_widget_show(window->window); } void on_boot_toggled(GtkWidget *, char *path, main_window *widgets){ @@ -375,6 +414,7 @@ void yon_main_window_complete(main_window *widgets){ widgets->InstallTerminal = yon_gtk_builder_get_widget(builder, "InstallTerminal"); widgets->TerminalRevealer = yon_gtk_builder_get_widget(builder, "TerminalRevealer"); widgets->TerminalOverlay = yon_gtk_builder_get_widget(builder, "TerminalOverlay"); + widgets->TerminalScroll = yon_gtk_builder_get_widget(builder, "TerminalScroll"); widgets->KernelsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"KernelsList")); widgets->AdditionsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"AdditionsList")); widgets->KernelsPackageBox = yon_gtk_builder_get_widget(builder,"KernelsPackageBox"); @@ -390,8 +430,14 @@ void yon_main_window_complete(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->InfoButton),"clicked",G_CALLBACK(on_info_clicked),widgets); g_signal_connect(G_OBJECT(widgets->BuildingButton),"clicked",G_CALLBACK(on_building_clicked),widgets); g_signal_connect(G_OBJECT(widgets->MoreButton),"clicked",G_CALLBACK(on_terminal_revealer_open),widgets); + g_signal_connect(G_OBJECT(widgets->KernelsPackageBox),"row-selected",G_CALLBACK(on_selection_changed),widgets); + g_signal_connect(G_OBJECT(widgets->AdditionsPackageBox),"row-selected",G_CALLBACK(on_selection_changed),widgets); g_signal_connect(G_OBJECT(widgets->InstallTerminal),"child-exited",G_CALLBACK(on_command_execute_success),widgets); + GdkRGBA rgba; + vte_terminal_get_color_background_for_draw(VTE_TERMINAL(widgets->InstallTerminal),&rgba); + vte_terminal_set_color_cursor(VTE_TERMINAL(widgets->InstallTerminal),&rgba); + glong columns = vte_terminal_get_column_count(VTE_TERMINAL(widgets->InstallTerminal)); vte_terminal_set_size(VTE_TERMINAL(widgets->InstallTerminal),columns,20); gtk_overlay_add_overlay(GTK_OVERLAY(widgets->TerminalOverlay),widgets->MainRevealer); diff --git a/source/ubl-settings-kernel.h b/source/ubl-settings-kernel.h index 7b13416..65b33e0 100644 --- a/source/ubl-settings-kernel.h +++ b/source/ubl-settings-kernel.h @@ -42,12 +42,14 @@ #define icon_path "com.ublinux.ubl-settings-kernel" #define get_kernel_changelog_command(target) yon_char_unite("find /usr/lib/modules/ -maxdepth 2 -type f -iname \"pkgbase\" -exec grep -il \"",target,"\" {} + | xargs dirname | xargs -I {} cat \"{}/changelog\"", NULL) -#define get_package_info_command(target) yon_char_append("pacman -Q --info ",target) +#define get_package_info_command(target) yon_char_append("pacman -Si ",target) #define get_package_is_installed_command(target) yon_char_append("pacman -Qqs ",target) #define install_command(target) yon_char_append("pacman -S --noconfirm ",target) #define remove_command(target) yon_char_append("pacman -R --noconfirm ",target) +#define build_command(target,filename,debug_bool,drivers_bool) yon_char_unite("ubmkuird -l -n ",filename," -k ",(debug_bool)?"--addon ":"",(drivers_bool)?"-H ":"",target,NULL) + #define yon_config_get_custom_command(target) yon_char_unite("ubconfig --source ",target," get boot KERNEL_BOOT",NULL) #define config_get_local_command "ubconfig --source system get boot KERNEL_BOOT" #define config_get_global_command "ubconfig --source global get boot KERNEL_BOOT" @@ -98,6 +100,7 @@ typedef struct { GtkWidget *InstallationProgress; GtkWidget *MoreButton; GtkWidget *TerminalOverlay; + GtkWidget *TerminalScroll; } main_window; @@ -116,14 +119,18 @@ typedef struct { GtkWidget *ExecuteButton; GtkWidget *KernelVersionCombo; + GtkWidget *FilenameEntry; GtkWidget *DebugCheck; GtkWidget *DriversCheck; }install_window; typedef struct { GtkWidget *main_box; - GtkWidget *icon_box; GtkWidget *name_label; + GtkWidget *module_label; + GtkWidget *package_label; + GtkWidget *module_icon; + GtkWidget *package_icon; GtkWidget *install_tags_box; GtkWidget *run_tags_box; GtkWidget *tags_box; @@ -155,11 +162,14 @@ void on_package_install_clicked(GtkWidget *,dictionary *dict); void on_module_remove_clicked(GtkWidget *,dictionary *dict); void on_package_remove_clicked(GtkWidget *,dictionary *dict); +void on_build_execute(GtkWidget *, dictionary *dict); int yon_tag_add(GtkBox *target,char *tag_label, char *tag_style, char *icon_name); GtkWidget *yon_tab_row_new(GtkListBox *target, char *target_string, main_window *widgets); void on_update_clicked(GtkWidget *, main_window *widgets); +void on_selection_changed(GtkWidget *self,GtkListBoxRow* row,main_window *widgets); + void on_info_clicked(GtkWidget *, main_window *widgets); void on_changelog_clicked(GtkWidget *, kernels_tab *tab); diff --git a/ubl-settings-kernel-install.glade b/ubl-settings-kernel-install.glade index 1726a18..ff1f9d4 100644 --- a/ubl-settings-kernel-install.glade +++ b/ubl-settings-kernel-install.glade @@ -1,5 +1,5 @@ - + @@ -60,6 +60,7 @@ True False + 0 True @@ -74,6 +75,18 @@ 0 + + + True + True + ublinux + + + False + True + 1 + + Add debug components @@ -85,7 +98,7 @@ False True - 1 + 2 @@ -99,7 +112,7 @@ False True - 2 + 3 diff --git a/ubl-settings-kernel-table-row.glade b/ubl-settings-kernel-table-row.glade index 4978e97..bfc8643 100644 --- a/ubl-settings-kernel-table-row.glade +++ b/ubl-settings-kernel-table-row.glade @@ -8,41 +8,120 @@ False 15 - + True False center vertical - 5 + 1 - + + True + False + 5 + + + True + False + + + False + True + 0 + + + + + True + False + Name + True + False + 0 + + + True + True + 1 + + + + + False + True + 0 + - + + True + False + 5 + + + True + False + + + False + True + 0 + + + + + True + False + Module + 0 + + + True + True + 1 + + + + + False + True + 1 + - - - False - True - 0 - - - - - True - False - + True False - True - False - 0 + 5 + + + True + False + + + False + True + 0 + + + + + True + False + Package + 0 + + + True + True + 1 + + - True + False True - 0 + 2 diff --git a/ubl-settings-kernel.glade b/ubl-settings-kernel.glade index 36f286a..02b42e0 100644 --- a/ubl-settings-kernel.glade +++ b/ubl-settings-kernel.glade @@ -1,5 +1,5 @@ - + @@ -43,12 +43,19 @@ + + + + + 100 + 1 + 10 + True False end slide-up - True True @@ -69,6 +76,7 @@ True False True + adjustment1 natural UTF-8 True @@ -82,10 +90,11 @@ - + True False vertical + adjustment1 False @@ -169,14 +178,6 @@ - - - - - 100 - 1 - 10 - True False @@ -227,6 +228,7 @@ True + False True True Open package information @@ -333,7 +335,6 @@ 5 5 5 - in True