You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ubl-settings-kernel/source/ubl-settings-kernel.c

739 lines
36 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include "ubl-settings-kernel.h"
config main_config;
//functions
void yon_load_proceed(YON_CONFIG_TYPE type){
yon_config_clean();
if (!yon_char_is_empty(config_get_default_command))
yon_config_load_config(YON_CONFIG_DEFAULT,config_get_default_command,NULL);
if (type==YON_CONFIG_GLOBAL){
yon_config_load_config(type,config_get_global_command,NULL);
} else if (type==YON_CONFIG_LOCAL){
yon_config_load_config(type,config_get_local_command,NULL);
} else if (type==YON_CONFIG_CUSTOM){
char *path="";
textdomain(template_ui_LocaleName);
GtkWidget *dialog = gtk_file_chooser_dialog_new(template_app_information.app_title,NULL,GTK_FILE_CHOOSER_ACTION_SAVE,CANCEL_LABEL,GTK_RESPONSE_CANCEL,OPEN_LABEL,GTK_RESPONSE_ACCEPT,NULL);
textdomain(LocaleName);
gtk_window_set_icon_name(GTK_WINDOW(dialog),"com.ublinux.ubl-settings-kernel");
gtk_window_set_title(GTK_WINDOW(dialog),TITLE_LABEL);
GtkFileFilter *filter = gtk_file_filter_new();
gtk_file_filter_add_pattern(filter,"*.ini");
gtk_file_filter_set_name(filter, "*.ini");
gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog),filter);
gtk_widget_show(dialog);
int response = gtk_dialog_run(GTK_DIALOG(dialog));
if (response == GTK_RESPONSE_ACCEPT){
char *file = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
if (!yon_char_is_empty(file)){
path=file;
}
gtk_widget_destroy(dialog);
} else {
gtk_widget_destroy(dialog);
}
char *command = yon_config_get_custom_command(path);
yon_config_load_config(type,command,NULL);
}
}
void on_config_save(GtkWidget *, main_window *widgets){
main_config.save_config=2;
template_saving_window *window = yon_save_proceed(NULL,YON_CONFIG_BOTH,yon_config_get_custom_command("global"),NULL);
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;
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++){
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(tab->main_box),0);
}
g_mutex_unlock(&main_config.mutex);
return NULL;
}
info_window *yon_info_window_new(){
info_window *window = malloc(sizeof(info_window));
GtkBuilder *builder = gtk_builder_new_from_resource(glade_info_path);
window->window = yon_gtk_builder_get_widget(builder,"MainWindow");
window->HeadLabel = yon_gtk_builder_get_widget(builder,"HeadLabel");
window->InfoLabel = yon_gtk_builder_get_widget(builder,"InfoLabel");
return window;
}
install_window *yon_install_window_new(){
install_window *window = malloc(sizeof(install_window));
GtkBuilder *builder = gtk_builder_new_from_resource(glade_install_path);
window->window = yon_gtk_builder_get_widget(builder,"MainWindow");
window->HeadLabel = yon_gtk_builder_get_widget(builder,"HeadLabel");
window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox");
window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton");
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");
g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
return window;
}
int yon_tag_add(GtkBox *target,char *tag_label, char *tag_style, char *icon_name){
if (GTK_IS_BOX(target)&&!yon_char_is_empty(tag_label)&&!yon_char_is_empty(tag_style)){
GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,2);
GtkWidget *label = gtk_label_new(tag_label);
gtk_style_context_add_class(gtk_widget_get_style_context(label),tag_style);
GtkWidget *icon = NULL;
if (icon_name){
icon = gtk_image_new_from_icon_name(icon_name,GTK_ICON_SIZE_BUTTON);
gtk_box_pack_start(GTK_BOX(box),icon,0,0,0);
}
gtk_box_pack_start(GTK_BOX(box),label,1,1,0);
gtk_widget_show_all(box);
gtk_box_pack_start(target,box,0,0,0);
return 1;
}
return 0;
}
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);
return NULL;
}
void on_module_install_clicked(GtkWidget *,dictionary *dict){
main_window *widgets = yon_dictionary_get_data(dict->first,main_window*);
kernels_tab *tab = yon_dictionary_get_data(dict->first->next,kernels_tab*);
char *command = install_command(tab->module);
yon_command_execute_async(command,widgets);
tab->module_installed=1;
}
void on_package_install_clicked(GtkWidget *,dictionary *dict){
main_window *widgets = yon_dictionary_get_data(dict->first,main_window*);
kernels_tab *tab = yon_dictionary_get_data(dict->first->next,kernels_tab*);
char *command = install_command(tab->package);
yon_command_execute_async(command,widgets);
tab->package_installed=1;
}
void on_module_remove_clicked(GtkWidget *,dictionary *dict){
main_window *widgets = yon_dictionary_get_data(dict->first,main_window*);
kernels_tab *tab = yon_dictionary_get_data(dict->first->next,kernels_tab*);
char *command = remove_command(tab->module);
yon_command_execute_async(command,widgets);
tab->module_installed=0;
}
void on_package_remove_clicked(GtkWidget *,dictionary *dict){
main_window *widgets = yon_dictionary_get_data(dict->first,main_window*);
kernels_tab *tab = yon_dictionary_get_data(dict->first->next,kernels_tab*);
char *command = remove_command(tab->package);
yon_command_execute_async(command,widgets);
tab->package_installed=0;
}
void on_launch_cliked(GtkWidget *,dictionary *dict){
main_window *widgets = yon_dictionary_get_data(dict->first,main_window*);
kernels_tab *tab = yon_dictionary_get_data(dict->first->next,kernels_tab*);
yon_config_set(KERNEL_BOOT_parameter,tab->package);
yon_interface_update(widgets);
}
kernels_tab *yon_tab_row_new(GtkListBox *target, char *target_string, main_window *widgets){
int size;
config_str parsed = yon_char_parse(target_string,&size,";");
if (size){
int types_size;
dictionary *cur = yon_dictionary_get(&main_config.kernel_tabs,parsed[2]);
kernels_tab *tab = NULL;
if (cur){
tab = (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);
gtk_widget_hide(tab->changelog_button);
gtk_widget_show(tab->launch_button);
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_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_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);
}
}
return tab;
}
return NULL;
}
// standard functions
/**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.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){
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){
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");
GtkWidget *current_tree=NULL;
if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){
current_tree = widgets->KernelsPackageBox;
} else {
current_tree = widgets->AdditionsPackageBox;
}
GtkListBoxRow *target = gtk_list_box_get_selected_row(GTK_LIST_BOX(current_tree));
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,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;
char *package=NULL;
if ((package = strstr(target_str,": "))){
package+=2;
}
config_str info = yon_config_load(get_package_info_command(package),&size);
if (size!=-1){
char *final_text = yon_char_parsed_to_string(info,size,"");
gtk_label_set_text(GTK_LABEL(window->InfoLabel),final_text);
free(final_text);
} else {
gtk_label_set_text(GTK_LABEL(window->InfoLabel),PACKAGE_NOT_FOUND_LABEL);
}
}
gtk_widget_show(window->window);
}
void on_changelog_clicked(GtkWidget *, kernels_tab *tab){
info_window *window = yon_info_window_new();
yon_gtk_window_setup(GTK_WINDOW(window->window),GTK_WINDOW(gtk_widget_get_toplevel(tab->main_box)),INFO_TITLE_LABEL,icon_path,"changelog_window");
int size;
config_str info = yon_config_load(yon_debug_output("%s\n",get_kernel_changelog_command(tab->package)),&size);
if (size!=-1){
char *full_text = yon_char_parsed_to_string(info,size,"");
gtk_label_set_text(GTK_LABEL(window->InfoLabel),full_text);
free(full_text);
yon_char_parsed_free(info,size);
} else {
gtk_label_set_text(GTK_LABEL(window->InfoLabel),PACKAGE_NOT_FOUND_LABEL);
}
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");
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;i<size;i++){
int cur_size;
config_str parsed = yon_char_parse(kernels[i],&cur_size,";");
if (cur_size&&!system(get_package_is_installed_command(parsed[2]))){
gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->KernelVersionCombo),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){
if (widgets||path){};
}
void on_terminal_revealer_open(GtkWidget *, main_window *widgets){
int opened = gtk_revealer_get_child_revealed(GTK_REVEALER(widgets->TerminalRevealer));
gtk_revealer_set_reveal_child(GTK_REVEALER(widgets->TerminalRevealer),!opened);
switch (opened){
case 0: {
gtk_revealer_set_transition_type(GTK_REVEALER(widgets->TerminalRevealer),GTK_REVEALER_TRANSITION_TYPE_SLIDE_UP);
} break;
case 1: {
gtk_revealer_set_transition_type(GTK_REVEALER(widgets->TerminalRevealer),GTK_REVEALER_TRANSITION_TYPE_SLIDE_DOWN);
} break;
}
}
/**yon_main_window_complete(main_window *widgets)
* [EN]
*
* [RU]
* Функция настройки основного окна приложения. [widgets] - структура со стандартным интерфейсом.
*/
void yon_main_window_complete(main_window *widgets){
widgets = yon_remalloc(widgets,sizeof(main_window));
GtkBuilder *builder = gtk_builder_new_from_resource(glade_path);
gtk_box_pack_start(GTK_BOX(widgets->InterfaceBox),yon_gtk_builder_get_widget(builder,"BoxMain"),1,1,0);
// Custom widgets configuration
{
widgets->MainNotebook = yon_gtk_builder_get_widget(builder, "MainNotebook");
widgets->UpdateButton = yon_gtk_builder_get_widget(builder, "UpdateButton");
widgets->InfoButton = yon_gtk_builder_get_widget(builder, "InfoButton");
widgets->LogButton = yon_gtk_builder_get_widget(builder, "LogButton");
widgets->BuildingButton = yon_gtk_builder_get_widget(builder, "BuildingButton");
widgets->KernelsUpperTree = yon_gtk_builder_get_widget(builder, "KernelsUpperTree");
widgets->KernelsTree = yon_gtk_builder_get_widget(builder, "KernelsTree");
widgets->AdditionsUpperTree = yon_gtk_builder_get_widget(builder, "AdditionsUpperTree");
widgets->AdditionsTree = yon_gtk_builder_get_widget(builder, "TestListBox");
widgets->MainRevealer = yon_gtk_builder_get_widget(builder, "MainRevealer");
widgets->MoreButton = yon_gtk_builder_get_widget(builder, "MoreButton");
widgets->InstallationProgress = yon_gtk_builder_get_widget(builder, "InstallationProgress");
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");
widgets->AdditionsPackageBox = yon_gtk_builder_get_widget(builder,"AdditionsPackageBox");
widgets->StatusSizeGroup = GTK_SIZE_GROUP(gtk_builder_get_object(builder,"StatusSizeGroup"));
widgets->KernelSizeGroup = GTK_SIZE_GROUP(gtk_builder_get_object(builder,"KernelSizeGroup"));
widgets->TagsSizeGroup = GTK_SIZE_GROUP(gtk_builder_get_object(builder,"TagsSizeGroup"));
widgets->InstallSizeGroup = GTK_SIZE_GROUP(gtk_builder_get_object(builder,"InstallSizeGroup"));
widgets->RunSizeGroup = GTK_SIZE_GROUP(gtk_builder_get_object(builder,"RunSizeGroup"));
widgets->DescriptionSizeGroup = GTK_SIZE_GROUP(gtk_builder_get_object(builder,"DescriptionSizeGroup"));
g_signal_connect(G_OBJECT(widgets->UpdateButton),"clicked",G_CALLBACK(on_update_clicked),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);
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;
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);
yon_interface_update(widgets);
}
yon_load_proceed(YON_CONFIG_LOCAL);
}
int main(int argc, char *argv[]){
local=setlocale(LC_ALL, "");
textdomain (LocaleName);
config_init();
yon_ubl_connect_config((_template_config*)&main_config);
yon_ubl_window_init(TITLE_LABEL,TITLE_INFO_LABEL,LocaleName,CssPath,LocaleName,version_application,WIKI_LINK);
config_str unfound = NULL;
int size=0;
yon_ubl_setup_arguments(argc,argv,&unfound,&size,NULL);
gtk_init(&argc,&argv);
template_main_window *widgets = yon_ubl_window_setup();
yon_main_window_complete((main_window*)widgets);
char *path = yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL);
yon_window_config_load(path);
if (getuid()!=0){
textdomain(template_ui_LocaleName);
yon_ubl_status_box_render(ROOT_WARNING_LABEL,BACKGROUND_IMAGE_FAIL_TYPE);
textdomain(LocaleName);
}
gtk_main();
return 0;
}