2nd page added. rework for optimisation WIP

pull/9/head
parent bd95e64597
commit b3e3fd01c0

@ -5,6 +5,7 @@
<file>ubl-settings-kernel-info.glade</file> <file>ubl-settings-kernel-info.glade</file>
<file>ubl-settings-kernel-install.glade</file> <file>ubl-settings-kernel-install.glade</file>
<file>ubl-settings-kernel-table-row.glade</file> <file>ubl-settings-kernel-table-row.glade</file>
<file>ubl-settings-kernel-additions-table-row.glade</file>
</gresource> </gresource>
<gresource prefix="/com/ublinux/css"> <gresource prefix="/com/ublinux/css">
<file>ubl-settings-kernel.css</file> <file>ubl-settings-kernel.css</file>

@ -35,6 +35,7 @@ set(DEPENDFILES
../ubl-settings-kernel-info.glade ../ubl-settings-kernel-info.glade
../ubl-settings-kernel-install.glade ../ubl-settings-kernel-install.glade
../ubl-settings-kernel-table-row.glade ../ubl-settings-kernel-table-row.glade
../ubl-settings-kernel-additions-table-row.glade
../gresource.xml ../gresource.xml
../kernel-list.csv ../kernel-list.csv
../kernel-list-addon.csv ../kernel-list-addon.csv
@ -66,7 +67,7 @@ add_custom_target(
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Werror -Wmissing-declarations -fdiagnostics-color=always \ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Werror -Wmissing-declarations -fdiagnostics-color=always \
-O2 -pipe -fno-plt -fexceptions \ -O2 -pipe -fno-plt -fexceptions \
-Wp,-D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security \ -Wp,-D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security \
-fstack-clash-protection -fcf-protection") -fstack-clash-protection -fcf-protection -fsanitize=thread")
set(SOURCE_FILES set(SOURCE_FILES
ubl-settings-kernel.c ubl-settings-kernel.c

@ -39,17 +39,101 @@ void yon_load_proceed(YON_CONFIG_TYPE type){
} }
} }
void yon_interface_update(main_window *widgets){ void on_config_save(GtkWidget *, main_window *widgets){
GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->KernelsPackageBox)); main_config.save_config=2;
for (guint i=0;i<g_list_length(list);i++){ template_saving_window *window = yon_save_proceed(NULL,YON_CONFIG_BOTH,yon_config_get_custom_command("global"),NULL);
gtk_widget_destroy(g_list_nth_data(list,i)); if (window){};
yon_interface_update(widgets);
}
void on_config_global_save(GtkWidget *, main_window *widgets){
main_config.save_config=0;
template_saving_window *window = yon_save_proceed("global",YON_CONFIG_GLOBAL,yon_config_get_custom_command("global"),NULL);
if (window){};
yon_interface_update(widgets);
}
void on_config_local_save(GtkWidget *, main_window *widgets){
main_config.save_config=1;
template_saving_window *window = yon_save_proceed("system",YON_CONFIG_LOCAL,yon_config_get_custom_command("system"),NULL);
if (window){};
yon_interface_update(widgets);
}
void on_config_custom_save(GtkWidget *, main_window *widgets){
main_config.save_config=1;
template_saving_window *window = yon_save_proceed(NULL,YON_CONFIG_CUSTOM,yon_config_get_custom_command("system"),NULL);
if (window){};
yon_interface_update(widgets);
}
void on_config_local_load(GtkWidget *, main_window *widgets){
yon_load_proceed(YON_CONFIG_LOCAL);
textdomain(template_ui_LocaleName);
yon_ubl_status_box_render(LOCAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
textdomain(LocaleName);
main_config.load_mode=1;
yon_interface_update(widgets);
}
void on_config_global_load(GtkWidget *, main_window *widgets){
yon_load_proceed(YON_CONFIG_GLOBAL);
textdomain(template_ui_LocaleName);
yon_ubl_status_box_render(GLOBAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
textdomain(LocaleName);
main_config.load_mode=0;
yon_interface_update(widgets);
}
void on_config_custom_load(GtkWidget *,main_window *widgets){
yon_load_proceed(YON_CONFIG_CUSTOM);
textdomain(template_ui_LocaleName);
yon_ubl_status_box_render(GLOBAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
textdomain(LocaleName);
main_config.load_mode=3;
yon_interface_update(widgets);
}
void *yon_interface_update(main_window *widgets){
g_mutex_lock(&main_config.mutex);
if (!main_config.kernel_tabs){
GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->KernelsPackageBox));
for (guint i=0;i<g_list_length(list);i++){
gtk_widget_destroy(g_list_nth_data(list,i));
}
g_list_free(list);
} }
if (!main_config.addition_tabs){
GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->AdditionsPackageBox));
for (guint i=0;i<g_list_length(list);i++){
gtk_widget_destroy(g_list_nth_data(list,i));
}
g_list_free(list);
}
int kernels_size; int kernels_size;
config_str kernels = yon_resource_open_file(kernels_path, &kernels_size); config_str kernels = yon_resource_open_file(kernels_path, &kernels_size);
char *boot_run = config(KERNEL_BOOT_parameter);
for (int i=1;i<kernels_size;i++){
kernels_tab *tab = yon_tab_row_new(GTK_LIST_BOX(widgets->KernelsPackageBox),kernels[i],widgets);
if (!yon_char_is_empty(boot_run)&&!strcmp(tab->package,boot_run)){
yon_tag_add(GTK_BOX(tab->run_tags_box),BOOT_RUN_LABEL,"tag_orange",NULL);
gtk_widget_hide(tab->launch_button);
gtk_widget_hide(tab->remove_module_button);
gtk_widget_hide(tab->remove_package_button);
}
gtk_widget_set_can_focus(gtk_widget_get_parent(tab->main_box),0);
}
yon_char_parsed_free(kernels,kernels_size);
kernels = yon_resource_open_file(kernels_addon_path, &kernels_size);
for (int i=1;i<kernels_size;i++){ for (int i=1;i<kernels_size;i++){
GtkWidget * current = yon_tab_row_new(GTK_LIST_BOX(widgets->KernelsPackageBox),kernels[i],widgets); additions_kernels_tab *tab = yon_additions_tab_row_new(GTK_LIST_BOX(widgets->AdditionsPackageBox),kernels[i],widgets);
gtk_widget_set_can_focus(gtk_widget_get_parent(current),0); gtk_widget_set_can_focus(gtk_widget_get_parent(tab->main_box),0);
} }
g_mutex_unlock(&main_config.mutex);
return NULL;
} }
info_window *yon_info_window_new(){ info_window *yon_info_window_new(){
@ -106,7 +190,7 @@ 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){ 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_transition_type(GTK_REVEALER(widgets->MainRevealer),GTK_REVEALER_TRANSITION_TYPE_SLIDE_DOWN);
gtk_revealer_set_reveal_child(GTK_REVEALER(widgets->MainRevealer),0); gtk_revealer_set_reveal_child(GTK_REVEALER(widgets->MainRevealer),0);
yon_interface_update(widgets); yon_interface_update(widgets);
return G_SOURCE_REMOVE; return G_SOURCE_REMOVE;
} }
@ -125,6 +209,7 @@ void on_module_install_clicked(GtkWidget *,dictionary *dict){
kernels_tab *tab = yon_dictionary_get_data(dict->first->next,kernels_tab*); kernels_tab *tab = yon_dictionary_get_data(dict->first->next,kernels_tab*);
char *command = install_command(tab->module); char *command = install_command(tab->module);
yon_command_execute_async(command,widgets); yon_command_execute_async(command,widgets);
tab->module_installed=1;
} }
@ -133,6 +218,7 @@ void on_package_install_clicked(GtkWidget *,dictionary *dict){
kernels_tab *tab = yon_dictionary_get_data(dict->first->next,kernels_tab*); kernels_tab *tab = yon_dictionary_get_data(dict->first->next,kernels_tab*);
char *command = install_command(tab->package); char *command = install_command(tab->package);
yon_command_execute_async(command,widgets); yon_command_execute_async(command,widgets);
tab->package_installed=1;
} }
@ -141,6 +227,7 @@ void on_module_remove_clicked(GtkWidget *,dictionary *dict){
kernels_tab *tab = yon_dictionary_get_data(dict->first->next,kernels_tab*); kernels_tab *tab = yon_dictionary_get_data(dict->first->next,kernels_tab*);
char *command = remove_command(tab->module); char *command = remove_command(tab->module);
yon_command_execute_async(command,widgets); yon_command_execute_async(command,widgets);
tab->module_installed=0;
} }
@ -149,108 +236,272 @@ void on_package_remove_clicked(GtkWidget *,dictionary *dict){
kernels_tab *tab = yon_dictionary_get_data(dict->first->next,kernels_tab*); kernels_tab *tab = yon_dictionary_get_data(dict->first->next,kernels_tab*);
char *command = remove_command(tab->package); char *command = remove_command(tab->package);
yon_command_execute_async(command,widgets); yon_command_execute_async(command,widgets);
tab->package_installed=0;
} }
GtkWidget *yon_tab_row_new(GtkListBox *target, char *target_string, main_window *widgets){ void on_launch_cliked(GtkWidget *,dictionary *dict){
GtkBuilder *builder = gtk_builder_new_from_resource(glade_table_row_path); main_window *widgets = yon_dictionary_get_data(dict->first,main_window*);
kernels_tab *tab = yon_dictionary_get_data(dict->first->next,kernels_tab*);
kernels_tab *tab = malloc(sizeof(kernels_tab)); yon_config_set(KERNEL_BOOT_parameter,tab->package);
tab->main_box = yon_gtk_builder_get_widget(builder,"TableRowLabel"); yon_interface_update(widgets);
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");
tab->description_label = yon_gtk_builder_get_widget(builder,"DescriptionLabel");
tab->remove_module_button = yon_gtk_builder_get_widget(builder,"RemoveModuleButton");
tab->remove_package_button = yon_gtk_builder_get_widget(builder,"RemovePackageButton");
tab->install_module_button = yon_gtk_builder_get_widget(builder,"InstallModuleButton");
tab->install_package_button = yon_gtk_builder_get_widget(builder,"InstallPackageButton");
tab->changelog_button = yon_gtk_builder_get_widget(builder,"ChangelogButton");
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,"tab",tab);
g_signal_connect(G_OBJECT(tab->install_module_button),"clicked",G_CALLBACK(on_module_install_clicked),dict);
g_signal_connect(G_OBJECT(tab->install_package_button),"clicked",G_CALLBACK(on_package_install_clicked),dict);
g_signal_connect(G_OBJECT(tab->remove_module_button),"clicked",G_CALLBACK(on_module_remove_clicked),dict);
g_signal_connect(G_OBJECT(tab->remove_package_button),"clicked",G_CALLBACK(on_package_remove_clicked),dict);
g_signal_connect(G_OBJECT(tab->changelog_button),"clicked",G_CALLBACK(on_changelog_clicked),tab);
gtk_list_box_insert(target,tab->main_box,-1);
kernels_tab *yon_tab_row_new(GtkListBox *target, char *target_string, main_window *widgets){
int size; int size;
config_str parsed = yon_char_parse(target_string,&size,";"); config_str parsed = yon_char_parse(target_string,&size,";");
if (size){ if (size){
char *boot_run = config(KERNEL_BOOT_parameter);
if (!yon_char_is_empty(boot_run)&&!strcmp(parsed[1],boot_run)){
yon_tag_add(GTK_BOX(tab->run_tags_box),BOOT_RUN_LABEL,"tag_orange",restart_icon_path);
}
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("<b>",tab->name,"</b>",NULL);
char *module = yon_char_unite("<i>",MODULE_LABEL," ",tab->module,"</i>",NULL);
char *package = yon_char_unite("<i>",PACKAGE_LABEL," ",tab->package,"</i>",NULL);
int types_size; int types_size;
config_str types_parsed = yon_char_parse(parsed[5],&types_size,", "); dictionary *cur = yon_dictionary_get(&main_config.kernel_tabs,parsed[2]);
for (int k=0;k<types_size;k++){ kernels_tab *tab = NULL;
char *passw = types_parsed[k][0]==' '?yon_char_divide(types_parsed[k],0):NULL; if (cur){
if (passw) free(passw); tab = (kernels_tab*)cur->data;
char *tag_type = NULL; GList *list = gtk_container_get_children(GTK_CONTAINER(tab->install_tags_box));
if (!strcmp(types_parsed[k],"LTS")){ for (guint i=0;i<g_list_length(list);i++){
tag_type = "tag_blue"; gtk_widget_destroy(g_list_nth_data(list,i));
} else if (!strcmp(types_parsed[k],"Stable")){ }
tag_type = "tag_green"; g_list_free(list);
} else if (!strcmp(types_parsed[k],"RealTime")){ gtk_widget_hide(tab->changelog_button);
tag_type = "tag_orange"; gtk_widget_show(tab->launch_button);
} else if (!strcmp(types_parsed[k],"Hardened")){ if (tab->module_installed){
tag_type = "tag_yellow"; gtk_widget_show(tab->remove_module_button);
} else if (!strcmp(types_parsed[k],"Recomended")){ gtk_widget_hide(tab->install_module_button);
tag_type = "tag_blue"; gtk_widget_show(tab->remove_module_button);
} else if (!strcmp(types_parsed[k],"Reactive")){ yon_tag_add(GTK_BOX(tab->install_tags_box),MODULE_INSTALLED_LABEL,"tag_green",NULL);
tag_type = "tag_purple"; } else {
} else continue; gtk_widget_hide(tab->remove_module_button);
gtk_widget_show(tab->install_module_button);
yon_tag_add(GTK_BOX(tab->tags_box),types_parsed[k],tag_type,NULL);
} }
char *check_install_command = get_package_is_installed_command(tab->module); if (tab->package_installed){
if (!system(check_install_command)){ gtk_widget_show(tab->remove_package_button);
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);
}
{
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",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_hide(tab->install_package_button);
gtk_widget_show(tab->changelog_button);
yon_tag_add(GTK_BOX(tab->install_tags_box),PACKAGE_INSTALLED_LABEL,"tag_green",NULL);
} else {
gtk_widget_hide(tab->remove_package_button);
gtk_widget_show(tab->install_package_button);
}
if (!tab->package_installed&&!tab->module_installed){
gtk_widget_hide(tab->launch_button);
}
} else {
tab = malloc(sizeof(kernels_tab));
GtkBuilder *builder = gtk_builder_new_from_resource(glade_table_row_path);
tab->main_box = yon_gtk_builder_get_widget(builder,"TableRowLabel");
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");
tab->description_label = yon_gtk_builder_get_widget(builder,"DescriptionLabel");
tab->remove_module_button = yon_gtk_builder_get_widget(builder,"RemoveModuleButton");
tab->remove_package_button = yon_gtk_builder_get_widget(builder,"RemovePackageButton");
tab->install_module_button = yon_gtk_builder_get_widget(builder,"InstallModuleButton");
tab->install_package_button = yon_gtk_builder_get_widget(builder,"InstallPackageButton");
tab->changelog_button = yon_gtk_builder_get_widget(builder,"ChangelogButton");
tab->launch_button = yon_gtk_builder_get_widget(builder,"LaunchButton");
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,"tab",tab);
g_signal_connect(G_OBJECT(tab->install_module_button),"clicked",G_CALLBACK(on_module_install_clicked),dict);
g_signal_connect(G_OBJECT(tab->install_package_button),"clicked",G_CALLBACK(on_package_install_clicked),dict);
g_signal_connect(G_OBJECT(tab->remove_module_button),"clicked",G_CALLBACK(on_module_remove_clicked),dict);
g_signal_connect(G_OBJECT(tab->remove_package_button),"clicked",G_CALLBACK(on_package_remove_clicked),dict);
g_signal_connect(G_OBJECT(tab->changelog_button),"clicked",G_CALLBACK(on_changelog_clicked),tab);
g_signal_connect(G_OBJECT(tab->launch_button),"clicked",G_CALLBACK(on_launch_cliked),dict);
tab->module_installed=-1;
tab->package_installed=-1;
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("<b>",tab->name,"</b>",NULL);
char *module = yon_char_unite("<i>",MODULE_LABEL," ",tab->module,"</i>",NULL);
char *package = yon_char_unite("<i>",PACKAGE_LABEL," ",tab->package,"</i>",NULL);
yon_dictionary_add_or_create_if_exists_with_data(main_config.kernel_tabs,tab->package,tab);
gtk_list_box_insert(target,tab->main_box,-1);
config_str types_parsed = yon_char_parse(parsed[5],&types_size,", ");
for (int k=0;k<types_size;k++){
char *passw = types_parsed[k][0]==' '?yon_char_divide(types_parsed[k],0):NULL;
if (passw) free(passw);
char *tag_type = NULL;
if (!strcmp(types_parsed[k],"LTS")){
tag_type = "tag_blue";
} else if (!strcmp(types_parsed[k],"Stable")){
tag_type = "tag_green";
} else if (!strcmp(types_parsed[k],"RealTime")){
tag_type = "tag_orange";
} else if (!strcmp(types_parsed[k],"Hardened")){
tag_type = "tag_yellow";
} else if (!strcmp(types_parsed[k],"Recomended")){
tag_type = "tag_blue";
} else if (!strcmp(types_parsed[k],"Reactive")){
tag_type = "tag_purple";
} else continue;
yon_tag_add(GTK_BOX(tab->tags_box),types_parsed[k],tag_type,NULL);
}
char *check_install_command = get_package_is_installed_command(tab->module);
if (!system(check_install_command)){
yon_tag_add(GTK_BOX(tab->install_tags_box),MODULE_INSTALLED_LABEL,"tag_green",NULL);
tab->module_installed=1;
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_hide(tab->install_module_button);
gtk_widget_show(tab->changelog_button);
gtk_widget_show(tab->launch_button);
} else tab->module_installed=0;
{
free(check_install_command);
check_install_command = get_package_is_installed_command(tab->package);
if (!system(check_install_command)){
tab->package_installed=1;
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);
gtk_widget_show(tab->changelog_button);
gtk_widget_show(tab->launch_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->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);
gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->DescriptionSizeGroup),tab->description_label);
}
return tab;
}
return NULL;
}
additions_kernels_tab *yon_additions_tab_row_new(GtkListBox *target, char *target_string, main_window *widgets){
int size;
config_str parsed = yon_char_parse(target_string,&size,";");
if (size){
dictionary *cur = yon_dictionary_get(&main_config.addition_tabs,parsed[2]);
additions_kernels_tab *tab = NULL;
if (cur){
tab = (additions_kernels_tab*)cur->data;
GList *list = gtk_container_get_children(GTK_CONTAINER(tab->install_tags_box));
for (guint i=0;i<g_list_length(list);i++){
gtk_widget_destroy(g_list_nth_data(list,i));
}
g_list_free(list);
if (tab->module_installed){
gtk_widget_show(tab->remove_module_button);
gtk_widget_hide(tab->install_module_button);
gtk_widget_show(tab->remove_module_button);
yon_tag_add(GTK_BOX(tab->install_tags_box),MODULE_INSTALLED_LABEL,"tag_green",NULL);
} else {
gtk_widget_hide(tab->remove_module_button);
gtk_widget_show(tab->install_module_button);
}
if (tab->package_installed){
gtk_widget_show(tab->remove_package_button); gtk_widget_show(tab->remove_package_button);
gtk_widget_hide(tab->install_package_button);
yon_tag_add(GTK_BOX(tab->install_tags_box),PACKAGE_INSTALLED_LABEL,"tag_green",NULL);
} else {
gtk_widget_hide(tab->remove_package_button);
gtk_widget_show(tab->install_package_button);
}
} else {
GtkBuilder *builder = gtk_builder_new_from_resource(glade_additions_table_row_path);
tab = malloc(sizeof(additions_kernels_tab));
tab->main_box = yon_gtk_builder_get_widget(builder,"TableRowLabel");
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->description_label = yon_gtk_builder_get_widget(builder,"DescriptionLabel");
tab->remove_module_button = yon_gtk_builder_get_widget(builder,"RemoveModuleButton");
tab->remove_package_button = yon_gtk_builder_get_widget(builder,"RemovePackageButton");
tab->install_module_button = yon_gtk_builder_get_widget(builder,"InstallModuleButton");
tab->install_package_button = yon_gtk_builder_get_widget(builder,"InstallPackageButton");
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,"tab",tab);
g_signal_connect(G_OBJECT(tab->install_module_button),"clicked",G_CALLBACK(on_module_install_clicked),dict);
g_signal_connect(G_OBJECT(tab->install_package_button),"clicked",G_CALLBACK(on_package_install_clicked),dict);
g_signal_connect(G_OBJECT(tab->remove_module_button),"clicked",G_CALLBACK(on_module_remove_clicked),dict);
g_signal_connect(G_OBJECT(tab->remove_package_button),"clicked",G_CALLBACK(on_package_remove_clicked),dict);
gtk_list_box_insert(target,tab->main_box,-1);
int size;
config_str parsed = yon_char_parse(target_string,&size,";");
if (size){
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("<b>",tab->name,"</b>",NULL);
char *module = yon_char_unite("<i>",MODULE_LABEL," ",tab->module,"</i>",NULL);
char *package = yon_char_unite("<i>",PACKAGE_LABEL," ",tab->package,"</i>",NULL);
char *check_install_command = get_package_is_installed_command(tab->module);
yon_dictionary_add_or_create_if_exists_with_data(main_config.addition_tabs,tab->package,tab);
if (!system(check_install_command)){
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);
}
{
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",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);
}
}
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[3]);
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->InstallSizeGroup),tab->install_tags_box);
gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->DescriptionSizeGroup),tab->description_label);
} }
} }
yon_char_parsed_free(types_parsed,types_size); return tab;
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->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);
gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->DescriptionSizeGroup),tab->description_label);
} }
return tab->main_box; return NULL;
} }
// standard functions // standard functions
@ -272,10 +523,18 @@ void config_init(){
main_config.lock_save_global=0; main_config.lock_save_global=0;
main_config.lock_save_local=0; main_config.lock_save_local=0;
main_config.load_mode=1; main_config.load_mode=1;
main_config.save_config=1;
main_config.kernel_tabs=NULL;
main_config.addition_tabs=NULL;
} }
void on_update_clicked(GtkWidget *, main_window *widgets){ void on_update_clicked(GtkWidget *, main_window *widgets){
yon_interface_update(widgets); yon_dictionary_free_all(main_config.kernel_tabs,free);
yon_dictionary_free_all(main_config.addition_tabs,free);
main_config.kernel_tabs=NULL;
main_config.addition_tabs=NULL;
yon_interface_update(widgets);
} }
void on_selection_changed(GtkWidget *, GtkListBoxRow* row, main_window *widgets){ void on_selection_changed(GtkWidget *, GtkListBoxRow* row, main_window *widgets){
@ -434,6 +693,14 @@ void yon_main_window_complete(main_window *widgets){
g_signal_connect(G_OBJECT(widgets->AdditionsPackageBox),"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); g_signal_connect(G_OBJECT(widgets->InstallTerminal),"child-exited",G_CALLBACK(on_command_execute_success),widgets);
g_signal_connect(G_OBJECT(widgets->SaveMenuItem),"activate",G_CALLBACK(on_config_save),widgets);
g_signal_connect(G_OBJECT(widgets->SaveGlobalMenuItem),"activate",G_CALLBACK(on_config_global_save),widgets);
g_signal_connect(G_OBJECT(widgets->SaveLocalMenuItem),"activate",G_CALLBACK(on_config_local_save),widgets);
g_signal_connect(G_OBJECT(widgets->SaveCustomMenuItem),"activate",G_CALLBACK(on_config_custom_save),widgets);
g_signal_connect(G_OBJECT(widgets->LoadGlobalMenuItem),"activate",G_CALLBACK(on_config_global_load),widgets);
g_signal_connect(G_OBJECT(widgets->LoadLocalMenuItem),"activate",G_CALLBACK(on_config_local_load),widgets);
g_signal_connect(G_OBJECT(widgets->LoadCustomMenuItem),"activate",G_CALLBACK(on_config_custom_load),widgets);
GdkRGBA rgba; GdkRGBA rgba;
vte_terminal_get_color_background_for_draw(VTE_TERMINAL(widgets->InstallTerminal),&rgba); vte_terminal_get_color_background_for_draw(VTE_TERMINAL(widgets->InstallTerminal),&rgba);
vte_terminal_set_color_cursor(VTE_TERMINAL(widgets->InstallTerminal),&rgba); vte_terminal_set_color_cursor(VTE_TERMINAL(widgets->InstallTerminal),&rgba);

@ -25,6 +25,7 @@
#define glade_info_path "/com/ublinux/ui/ubl-settings-kernel-info.glade" #define glade_info_path "/com/ublinux/ui/ubl-settings-kernel-info.glade"
#define glade_install_path "/com/ublinux/ui/ubl-settings-kernel-install.glade" #define glade_install_path "/com/ublinux/ui/ubl-settings-kernel-install.glade"
#define glade_table_row_path "/com/ublinux/ui/ubl-settings-kernel-table-row.glade" #define glade_table_row_path "/com/ublinux/ui/ubl-settings-kernel-table-row.glade"
#define glade_additions_table_row_path "/com/ublinux/ui/ubl-settings-kernel-additions-table-row.glade"
#define banner_path "/com/ublinux/images/ubl-settings-kernel-banner.png" #define banner_path "/com/ublinux/images/ubl-settings-kernel-banner.png"
#define CssPath "/com/ublinux/css/ubl-settings-kernel.css" #define CssPath "/com/ublinux/css/ubl-settings-kernel.css"
#define config_path yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL) #define config_path yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL)
@ -67,7 +68,10 @@ char *local;
typedef struct { typedef struct {
template_config_fields template_config_fields
GMutex mutex;
int save_config;
dictionary *kernel_tabs;
dictionary *addition_tabs;
} config; } config;
typedef struct { typedef struct {
@ -125,6 +129,11 @@ typedef struct {
}install_window; }install_window;
typedef struct { typedef struct {
char *module;
char *package;
char *name;
int module_installed;
int package_installed;
GtkWidget *main_box; GtkWidget *main_box;
GtkWidget *name_label; GtkWidget *name_label;
GtkWidget *module_label; GtkWidget *module_label;
@ -140,16 +149,45 @@ typedef struct {
GtkWidget *install_module_button; GtkWidget *install_module_button;
GtkWidget *install_package_button; GtkWidget *install_package_button;
GtkWidget *changelog_button; GtkWidget *changelog_button;
GtkWidget *launch_button;
} kernels_tab;
typedef struct {
char *module; char *module;
char *package; char *package;
char *name; char *name;
int module_installed;
int package_installed;
GtkWidget *main_box;
GtkWidget *name_label;
GtkWidget *module_label;
GtkWidget *package_label;
GtkWidget *module_icon;
GtkWidget *package_icon;
GtkWidget *install_tags_box;
GtkWidget *description_label;
GtkWidget *remove_module_button;
GtkWidget *remove_package_button;
GtkWidget *install_module_button;
GtkWidget *install_package_button;
} kernels_tab; } additions_kernels_tab;
void yon_interface_update(main_window *widgets); void *yon_interface_update(main_window *widgets);
void on_config_save(GtkWidget *self, main_window *widgets);
void on_config_global_save(GtkWidget *self, main_window *widgets);
void on_config_local_save(GtkWidget *self, main_window *widgets);
void on_config_custom_save(GtkWidget *self, main_window *widgets);
void yon_load_proceed(YON_CONFIG_TYPE type); void yon_load_proceed(YON_CONFIG_TYPE type);
void on_config_local_load(GtkWidget *, main_window *widgets);
void on_config_global_load(GtkWidget *, main_window *widgets);
void on_config_custom_load(GtkWidget *,main_window *widgets);
void config_init(); void config_init();
void yon_main_window_complete(main_window *widgets); void yon_main_window_complete(main_window *widgets);
@ -161,10 +199,12 @@ void on_module_install_clicked(GtkWidget *,dictionary *dict);
void on_package_install_clicked(GtkWidget *,dictionary *dict); void on_package_install_clicked(GtkWidget *,dictionary *dict);
void on_module_remove_clicked(GtkWidget *,dictionary *dict); void on_module_remove_clicked(GtkWidget *,dictionary *dict);
void on_package_remove_clicked(GtkWidget *,dictionary *dict); void on_package_remove_clicked(GtkWidget *,dictionary *dict);
void on_launch_cliked(GtkWidget *,dictionary *dict);
void on_build_execute(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); 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); kernels_tab *yon_tab_row_new(GtkListBox *target, char *target_string, main_window *widgets);
additions_kernels_tab *yon_additions_tab_row_new(GtkListBox *target, char *target_string, main_window *widgets);
void on_update_clicked(GtkWidget *, main_window *widgets); void on_update_clicked(GtkWidget *, main_window *widgets);

@ -0,0 +1,245 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 -->
<interface domain="ubl-settings-kernel">
<requires lib="gtk+" version="3.24"/>
<!-- interface-css-provider-path ubl-settings-kernel.css -->
<object class="GtkBox" id="TableRowLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">15</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="valign">center</property>
<property name="orientation">vertical</property>
<property name="spacing">1</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="NameLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Name</property>
<property name="use-markup">True</property>
<property name="track-visited-links">False</property>
<property name="xalign">0</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">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="GtkImage" id="ModuleIcon">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="ModuleLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Module</property>
<property name="xalign">0</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">1</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="GtkImage" id="PackageIcon">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="PackageLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Package</property>
<property name="xalign">0</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>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkBox" id="InstallTagsBox">
<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">3</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="valign">center</property>
<property name="margin-bottom">5</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkButton" id="InstallModuleButton">
<property name="label" translatable="yes">Install module</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<style>
<class name="buttonlistfx"/>
</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="RemoveModuleButton">
<property name="label" translatable="yes">Remove module</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<style>
<class name="buttonlistfx"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="InstallPackageButton">
<property name="label" translatable="yes">Install package</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<style>
<class name="buttonlistfx"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkButton" id="RemovePackageButton">
<property name="label" translatable="yes">Remove package</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<style>
<class name="buttonlistfx"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack-type">end</property>
<property name="position">4</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="DescriptionLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="wrap">True</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="pack-type">end</property>
<property name="position">6</property>
</packing>
</child>
<style>
<class name="tableborderbottom"/>
</style>
</object>
</interface>

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.40.0 --> <!-- Generated with glade 3.38.2 -->
<interface domain="ubl-settings-kernel"> <interface domain="ubl-settings-kernel">
<requires lib="gtk+" version="3.24"/> <requires lib="gtk+" version="3.24"/>
<!-- interface-css-provider-path ubl-settings-kernel.css --> <!-- interface-css-provider-path ubl-settings-kernel.css -->
@ -200,9 +200,8 @@
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkButton" id="InstallPackageButton"> <object class="GtkButton" id="RemoveModuleButton">
<property name="label" translatable="yes">Install package</property> <property name="label" translatable="yes">Remove module</property>
<property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="receives-default">True</property> <property name="receives-default">True</property>
<style> <style>
@ -216,8 +215,9 @@
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkButton" id="RemoveModuleButton"> <object class="GtkButton" id="InstallPackageButton">
<property name="label" translatable="yes">Remove module</property> <property name="label" translatable="yes">Install package</property>
<property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="receives-default">True</property> <property name="receives-default">True</property>
<style> <style>
@ -248,7 +248,6 @@
<child> <child>
<object class="GtkButton" id="ChangelogButton"> <object class="GtkButton" id="ChangelogButton">
<property name="label" translatable="yes">Changelog</property> <property name="label" translatable="yes">Changelog</property>
<property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="receives-default">True</property> <property name="receives-default">True</property>
<style> <style>
@ -261,6 +260,21 @@
<property name="position">4</property> <property name="position">4</property>
</packing> </packing>
</child> </child>
<child>
<object class="GtkButton" id="LaunchButton">
<property name="label" translatable="yes">Launch</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<style>
<class name="buttonlistfx"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">5</property>
</packing>
</child>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>

Loading…
Cancel
Save