|
|
#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);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
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->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;
|
|
|
}
|
|
|
|
|
|
GtkWidget *yon_tab_row_new(GtkBox *target, char *target_string, main_window *widgets){
|
|
|
GtkBuilder *builder = gtk_builder_new_from_resource(glade_table_row_path);
|
|
|
|
|
|
GtkWidget *main_box = yon_gtk_builder_get_widget(builder,"TableRowLabel");
|
|
|
GtkWidget *icon_box = yon_gtk_builder_get_widget(builder,"IconPackBox");
|
|
|
GtkWidget *name_label = yon_gtk_builder_get_widget(builder,"NameLabel");
|
|
|
GtkWidget *tags_box = yon_gtk_builder_get_widget(builder,"TagsBox");
|
|
|
GtkWidget *module_check = yon_gtk_builder_get_widget(builder,"ModuleCheck");
|
|
|
GtkWidget *package_check = yon_gtk_builder_get_widget(builder,"PackageCheck");
|
|
|
GtkWidget *loaded_radio = yon_gtk_builder_get_widget(builder,"LoadedRadio");
|
|
|
GtkWidget *description_label = yon_gtk_builder_get_widget(builder,"DescriptionLabel");
|
|
|
gtk_box_pack_start(target,main_box,0,0,0);
|
|
|
|
|
|
int size;
|
|
|
config_str parsed = yon_char_parse(target_string,&size,";");
|
|
|
if (size){
|
|
|
char *name = yon_char_unite("<b>",parsed[2],"</b>\n<i>",parsed[0],"\n",parsed[1],"</i>",NULL);
|
|
|
int types_size;
|
|
|
config_str types_parsed = yon_char_parse(parsed[3],&types_size,", ");
|
|
|
for (int k=0;k<types_size;k++){
|
|
|
GtkWidget *cur_tag_label = gtk_label_new(types_parsed[k]);
|
|
|
gtk_box_pack_start(GTK_BOX(tags_box),cur_tag_label,0,0,5);
|
|
|
gtk_widget_show(cur_tag_label);
|
|
|
char *passw = types_parsed[k][0]==' '?yon_char_divide(types_parsed[k],0):NULL;
|
|
|
if (passw) free(passw);
|
|
|
if (!strcmp(types_parsed[k],"LTS")){
|
|
|
gtk_style_context_add_class(gtk_widget_get_style_context(cur_tag_label),"tag_blue");
|
|
|
} else if (!strcmp(types_parsed[k],"Stable")){
|
|
|
gtk_style_context_add_class(gtk_widget_get_style_context(cur_tag_label),"tag_green");
|
|
|
} else if (!strcmp(types_parsed[k],"RealTime")){
|
|
|
gtk_style_context_add_class(gtk_widget_get_style_context(cur_tag_label),"tag_orange");
|
|
|
} else if (!strcmp(types_parsed[k],"Hardened")){
|
|
|
gtk_style_context_add_class(gtk_widget_get_style_context(cur_tag_label),"tag_yellow");
|
|
|
} else if (!strcmp(types_parsed[k],"Recomended")){
|
|
|
gtk_style_context_add_class(gtk_widget_get_style_context(cur_tag_label),"tag_blue");
|
|
|
} else if (!strcmp(types_parsed[k],"Reactive")){
|
|
|
gtk_style_context_add_class(gtk_widget_get_style_context(cur_tag_label),"tag_purple");
|
|
|
} else continue;
|
|
|
|
|
|
}
|
|
|
gtk_label_set_markup(GTK_LABEL(name_label),name);
|
|
|
gtk_label_set_text(GTK_LABEL(description_label),parsed[4]);
|
|
|
gtk_size_group_add_widget(widgets->StatusSizeGroup,icon_box);
|
|
|
gtk_size_group_add_widget(widgets->KernelSizeGroup,name_label);
|
|
|
gtk_size_group_add_widget(widgets->TagsSizeGroup,tags_box);
|
|
|
gtk_size_group_add_widget(widgets->ModuleSizeGroup,module_check);
|
|
|
gtk_size_group_add_widget(widgets->PackageSizeGroup,package_check);
|
|
|
gtk_size_group_add_widget(widgets->LoaderSizeGroup,loaded_radio);
|
|
|
gtk_size_group_add_widget(widgets->DescriptionSizeGroup,description_label);
|
|
|
|
|
|
}
|
|
|
return main_box;
|
|
|
}
|
|
|
|
|
|
// 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;
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void on_update_clicked(GtkWidget *, main_window *widgets){
|
|
|
if (widgets){};
|
|
|
|
|
|
}
|
|
|
|
|
|
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->KernelsTree;
|
|
|
} else {
|
|
|
current_tree = widgets->AdditionsTree;
|
|
|
}
|
|
|
GtkTreeModel *model;
|
|
|
GtkTreeIter iter;
|
|
|
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(current_tree)),&model,&iter)){
|
|
|
char *target;
|
|
|
gtk_tree_model_get(model,&iter,4,&target,-1);
|
|
|
int size;
|
|
|
config_str ret = yon_config_load(yon_get_info_command(target),&size);
|
|
|
if (size){
|
|
|
char *final_text = yon_char_parsed_to_string(ret,size,"");
|
|
|
gtk_label_set_text(GTK_LABEL(window->InfoLabel),final_text);
|
|
|
free(final_text);
|
|
|
yon_char_parsed_free(ret,size);
|
|
|
}
|
|
|
}
|
|
|
gtk_widget_show(window->window);
|
|
|
}
|
|
|
|
|
|
void on_changelog_clicked(GtkWidget *, main_window *widgets){
|
|
|
if (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,"changelog_window");
|
|
|
gtk_widget_show(window->window);
|
|
|
}
|
|
|
|
|
|
void on_building_clicked(GtkWidget *, main_window *widgets){
|
|
|
if (widgets){};
|
|
|
install_window *window = yon_install_window_new();
|
|
|
yon_gtk_window_setup(GTK_WINDOW(window->window),GTK_WINDOW(widgets->Window),INFO_TITLE_LABEL,icon_path,"install_window");
|
|
|
gtk_widget_show(window->window);
|
|
|
|
|
|
}
|
|
|
|
|
|
void on_install_module_toggled(GtkWidget *, char *path, main_window *widgets){
|
|
|
if (widgets||path){};
|
|
|
|
|
|
}
|
|
|
|
|
|
void on_install_package_toggled(GtkWidget *, char *path, main_window *widgets){
|
|
|
if (widgets||path){};
|
|
|
|
|
|
}
|
|
|
|
|
|
void on_boot_toggled(GtkWidget *, char *path, main_window *widgets){
|
|
|
if (widgets||path){};
|
|
|
|
|
|
}
|
|
|
|
|
|
/**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, "AdditionsTree");
|
|
|
widgets->KernelsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"KernelsList"));
|
|
|
widgets->AdditionsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"AdditionsList"));
|
|
|
widgets->PackageBox = yon_gtk_builder_get_widget(builder,"PackageBox");
|
|
|
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->ModuleSizeGroup = GTK_SIZE_GROUP(gtk_builder_get_object(builder,"ModuleSizeGroup"));
|
|
|
widgets->PackageSizeGroup = GTK_SIZE_GROUP(gtk_builder_get_object(builder,"PackageSizeGroup"));
|
|
|
widgets->LoaderSizeGroup = GTK_SIZE_GROUP(gtk_builder_get_object(builder,"LoaderSizeGroup"));
|
|
|
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->LogButton),"clicked",G_CALLBACK(on_changelog_clicked),widgets);
|
|
|
g_signal_connect(G_OBJECT(widgets->BuildingButton),"clicked",G_CALLBACK(on_building_clicked),widgets);
|
|
|
g_signal_connect(G_OBJECT(widgets->BuildingButton),"clicked",G_CALLBACK(on_install_module_toggled),widgets);
|
|
|
g_signal_connect(G_OBJECT(widgets->BuildingButton),"clicked",G_CALLBACK(on_install_package_toggled),widgets);
|
|
|
g_signal_connect(G_OBJECT(widgets->BuildingButton),"clicked",G_CALLBACK(on_boot_toggled),widgets);
|
|
|
|
|
|
GtkWidget *radio_group=NULL;
|
|
|
int kernels_size;
|
|
|
config_str kernels = yon_resource_open_file(kernels_path, &kernels_size);
|
|
|
for (int i=1;i<kernels_size;i++){
|
|
|
GtkWidget *current = yon_tab_row_new(GTK_BOX(widgets->PackageBox),kernels[i],widgets);
|
|
|
GList *list = gtk_container_get_children(GTK_CONTAINER(current));
|
|
|
GtkWidget *radio = GTK_WIDGET(g_list_nth_data(list,5));
|
|
|
if (radio_group) gtk_radio_button_join_group(GTK_RADIO_BUTTON(radio),GTK_RADIO_BUTTON(radio_group));
|
|
|
radio_group = radio;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
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;
|
|
|
} |