#include "ubl-settings-repomanager.h" config main_config; /**on_close_subwindow(GtkWidget *self) * [EN] * Closes window in which [self] is contained. * [RU] * Закрывает окно, в котором расположен виджет [self]. */ void on_close_subwindow(GtkWidget *self){ gtk_widget_destroy(gtk_widget_get_toplevel(self)); } /**yon_open_browser(GtkWidget *self, char *link) * [EN] * Opens browser with [link] link. * [RU] * Открывает браузер с [link] ссылкой. */ void yon_open_browser(GtkWidget *self, char *link){ yon_ubl_browser_window_open(link,TITLE_LABEL); } /**on_open_documentation_confirmation(GtkWidget *self, char *link) * [EN] * Opens confirmation window for [link] link. * [RU] * Открывает окно подтверждение перехода по ссылке [link]. */ void on_open_documentation_confirmation(GtkWidget *self, char *link){ if (main_config.always_open_documentation==0){ GtkBuilder *builder = gtk_builder_new_from_resource(glade_path); documentation_confirmation_window *widgets = malloc(sizeof(documentation_confirmation_window)); widgets->Window = yon_gtk_builder_get_widget(builder,"helpConfirmationWindow"); widgets->AcceptButton = yon_gtk_builder_get_widget(builder,"ReadHelpButton"); widgets->CloseButton = yon_gtk_builder_get_widget(builder,"CancelHelpButton"); widgets->HatText = yon_gtk_builder_get_widget(builder,"webHeaderNameLabel"); widgets->HeaderText = yon_gtk_builder_get_widget(builder,"helpHeader"); widgets->InfoText = yon_gtk_builder_get_widget(builder,"helpText"); widgets->AlwaysOpenCheck = yon_gtk_builder_get_widget(builder,"AlwaysOpenDocumentationCheckbox"); gtk_label_set_text(GTK_LABEL(widgets->HatText),TITLE_LABEL); gtk_label_set_text(GTK_LABEL(widgets->HeaderText),HELP_TITLE_LABEL); gtk_label_set_text(GTK_LABEL(widgets->InfoText),HELP_INFO_LABEL); gtk_button_set_label(GTK_BUTTON(widgets->AcceptButton),OPEN_HELP_LABEL); gtk_button_set_label(GTK_BUTTON(widgets->AlwaysOpenCheck),HELP_ALWAYS_OPEN_LABEL); gtk_button_set_label(GTK_BUTTON(widgets->CloseButton),CANCEL_LABEL); gtk_widget_show_all(widgets->Window); g_signal_connect(G_OBJECT(widgets->CloseButton),"clicked",G_CALLBACK(on_close_subwindow),NULL); g_signal_connect(G_OBJECT(widgets->AcceptButton),"clicked",G_CALLBACK(yon_open_browser),yon_char_new(link)); g_signal_connect(G_OBJECT(widgets->AcceptButton),"clicked",G_CALLBACK(on_close_subwindow),NULL); } else { yon_open_browser(self,link); } } /**on_link(GtkWidget *self, char* uri, gpointer user_data) * [EN] * Signal for hadnling AboutDialog links. * Connect to "activate-link" signal. * [self] is AboutDialog window; * [uri] is activated link; * [user_data] is pointer for user data, hasn't used in standard handler; * [RU] * Функция для обработки сигнала нажатия на ссылку окна AboutDialog. * Присоединять к сигналу "activate-link". * [self] - окно AboutDialog; * [uri] - ссылка, по которой совершается переход; * [user_data] - указатель на любые другие данные, не используется в стандартном обработчике; */ void on_link(GtkWidget *self, char* uri, gpointer user_data){ gtk_widget_destroy(self); on_open_documentation_confirmation(self,uri); } /**on_about() * [EN] * Function for setting up and showing AboutDialog. * Connect it to "activate" signal of Documentation MenuItem. * [RU] * Функиця для настройки и показа окна AboutDialog. * Присоединять к сигналу "activate" кнопки справки типа MenuItem. */ void on_about(){ GtkBuilder *builder=gtk_builder_new_from_resource(glade_path); GtkWidget *window=yon_gtk_builder_get_widget(builder,"AboutWindow"); GtkWidget *title=yon_gtk_builder_get_widget(builder,"headerAboutTopic"); GtkWidget *hideButtonBox=yon_gtk_builder_get_widget(builder,"buttonBoxHide"); gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(window),version_application); gtk_about_dialog_set_website_label(GTK_ABOUT_DIALOG(window),PROJECT_HOME_LABEL); gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(window),TITLE_LABEL); gtk_label_set_text(GTK_LABEL(title),TITLE_LABEL); g_signal_connect(G_OBJECT(window),"activate-link",G_CALLBACK(on_link),NULL); gtk_widget_set_visible(hideButtonBox,0); gtk_widget_destroy(hideButtonBox); gtk_widget_show(window); } void on_save(){ char *command = "repo-manager"; char *remove_command=NULL; char *add_command=NULL; char *remove_flagged = NULL; char *add_flagged = NULL; char *origin_flagged = NULL; char *name_flagged = NULL; GtkTreeIter iter, childIter; int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(main_config.tree_store),&iter); for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(main_config.tree_store),&iter)){ remove_flagged = NULL; add_flagged = NULL; int repostatus=0; gboolean renamed=0; char *old_name=NULL; gtk_tree_model_get(GTK_TREE_MODEL(main_config.tree_store),&iter,1,&name_flagged,3,&origin_flagged,4,&repostatus,6,&old_name,7,&renamed,-1); // if (!strstr(name_flagged,".db.tar.gz")) name_flagged = yon_char_append(name_flagged,".db.tar.gz"); remove_command = yon_char_unite(command," remove -d ", origin_flagged, " -r ", name_flagged, NULL); add_command = yon_char_unite(command," add -d ", origin_flagged, " -r ", name_flagged, NULL); int valid_child=gtk_tree_model_iter_children(GTK_TREE_MODEL(main_config.tree_store),&childIter,&iter); for (;valid_child;valid_child=gtk_tree_model_iter_next(GTK_TREE_MODEL(main_config.tree_store),&childIter)){ int status = 0,deleted = 0; char *path=NULL; gtk_tree_model_get(GTK_TREE_MODEL(main_config.tree_store),&childIter,3,&path,4,&status,5,&deleted,-1); gtk_tree_store_set(main_config.tree_store,&childIter,4,0,5,0,-1); if (status==-1) { remove_flagged = yon_char_unite(remove_flagged ? yon_char_append(remove_flagged,",") : " -p ",path,NULL); /*gtk_tree_store_remove(main_config.tree_store,&childIter);*/} else if (status == 1&&deleted==0) { add_flagged = yon_char_unite(add_flagged ? yon_char_append(add_flagged,",") : " -p ",path,NULL);gtk_tree_store_set(main_config.tree_store,&childIter,0,"com.ublinux.ubl-settings-repomanager.document-symbolic",-1); } } if (origin_flagged) remove_command = remove_flagged ? yon_char_unite(remove_command,remove_flagged,NULL) : NULL; add_command = add_flagged ? yon_char_unite(add_command, add_flagged,NULL) : add_command; printf("%s\n%s\n",remove_command,add_command); if (remove_command) system(remove_command); if (add_command) system(add_command); } } void on_search(GtkCellEditable *self, main_window *widgets){ GtkTreeIter iter, childIter; char *name=NULL; int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(main_config.tree_store),&iter); for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(main_config.tree_store),&iter)){ gtk_tree_model_get(GTK_TREE_MODEL(main_config.tree_store),&iter,1,&name,-1); if (strstr(name,gtk_entry_get_text(GTK_ENTRY(widgets->Finder)))) { gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoTree)),&iter); return; } gtk_tree_view_expand_row(GTK_TREE_VIEW(widgets->RepoTree),gtk_tree_model_get_path(GTK_TREE_MODEL(main_config.tree_store),&iter),1); int child_valid = gtk_tree_model_iter_children(GTK_TREE_MODEL(main_config.tree_store),&childIter,&iter); for (;child_valid;child_valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(main_config.tree_store),&childIter)){ gtk_tree_model_get(GTK_TREE_MODEL(main_config.tree_store),&childIter,1,&name,-1); if (strstr(name,gtk_entry_get_text(GTK_ENTRY(widgets->Finder)))) { gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoTree)),&childIter); return; } } gtk_tree_view_expand_row(GTK_TREE_VIEW(widgets->RepoTree),gtk_tree_model_get_path(GTK_TREE_MODEL(main_config.tree_store),&iter),0); } } void on_tree_selection_changed(GtkWidget *self,main_window *widgets){ GtkTreeModel *model = GTK_TREE_MODEL(main_config.tree_store); GtkTreeIter iter; if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoTree)),&model,&iter)){ char *codeName=NULL,*version=NULL,*architecture=NULL; int serverType=0,trusted=0,published=0; gtk_tree_model_get(model,&iter,11,&codeName,12,&version,13,&architecture,-1); gtk_label_set_text(GTK_LABEL(widgets->CodeNameInfoLabel),codeName ? codeName : ""); gtk_label_set_text(GTK_LABEL(widgets->VersionInfoLabel),version ? version : ""); gtk_label_set_text(GTK_LABEL(widgets->ArchitectureInfoLabel),architecture ? architecture : ""); } } int yon_char_find_last(char *source, char find){ int size = strlen(source); int i=size; for (;source[i]!=find&&i>0;i--); return i; } void on_repo_add_new(GtkWidget *self, dictionary *dict){ main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); repo_create_window *window = yon_dictionary_get_data(dict->first->next,repo_create_window*); if (!window->path){ yon_ubl_status_box_render(CHOOSE_PATH_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); return;} char *name=NULL; name = window->path; window->path = yon_char_divide(name,yon_char_find_last(window->path, '/')); if (!name||strcmp(name,"")!=0){ GtkTreeIter *iter = yon_repo_append(widgets, name, YON_REPO_LINE_REPO_TYPE); gtk_tree_store_set(main_config.tree_store,iter,0,"com.ublinux.ubl-settings-repomanager.folder-green-symbolic",2,window->BranchesListStore,3,window->path,-1); yon_ubl_status_box_render(OPERATION_DONE_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); } else { yon_ubl_status_box_render(EMPTY_NAME_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); } } void on_branch_add(GtkCellRendererText *self, char*path,char *new_text, repo_create_window *window){ if (new_text&&strcmp(new_text,"")!=0){ GtkTreeIter iter; gboolean used, use=1; gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->BranchesListStore),&iter,path); gtk_tree_model_get(GTK_TREE_MODEL(window->BranchesListStore),&iter,1,&used,-1); used; gtk_list_store_set(window->BranchesListStore,&iter,0,new_text,1,&use,-1); if (used==0) gtk_list_store_append(window->BranchesListStore,&iter); } } char *on_choose_repo_folder(GtkWidget *self,repo_create_window *window){ GtkFileFilter *file_filter = gtk_file_filter_new(); gtk_file_filter_add_pattern(file_filter,"*db.tar.gz"); GtkWidget *chooser = gtk_file_chooser_dialog_new(ADD_PACKAGE_REPO_LABEL,NULL,GTK_FILE_CHOOSER_ACTION_SAVE,CANCEL_LABEL,GTK_RESPONSE_CANCEL,OPEN_LABEL,GTK_RESPONSE_ACCEPT,NULL); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(chooser),file_filter); int res = gtk_dialog_run(GTK_DIALOG(chooser)); if (res==GTK_RESPONSE_ACCEPT){ char *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(chooser)); window->path=yon_char_new(filename); } on_close_subwindow(chooser); } void on_repo_new (GtkWidget *self, main_window *widgets){ repo_create_window *window = new(repo_create_window); window->path=NULL; on_choose_repo_folder(self,window); dictionary *dict = yon_dictionary_new_with_data("",widgets); dict = yon_dictionary_append_with_data(dict,"",window); on_repo_add_new(self,dict); } void on_repo_add_file(GtkWidget *self, main_window *widgets){ yon_add_file(widgets); } void on_repo_remove_package(GtkWidget *self, main_window *widgets){ yon_repo_remove_package(widgets); } void on_repo_remove(GtkWidget *self, main_window *widgets){ yon_repo_remove(widgets); } void on_repo_configure(GtkWidget *self, main_window *widgets){ GtkTreeModel *model = GTK_TREE_MODEL(main_config.tree_store); GtkTreeIter iter; if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoTree)),&model,&iter)){ GtkBuilder *builder = gtk_builder_new_from_resource(glade_repo_path); repo_create_window *window = new(repo_create_window); window->Window=yon_gtk_builder_get_widget(builder,"repoEditWindow"); window->NameEntry=yon_gtk_builder_get_widget(builder,"repoEditNameEntry"); window->CancelButton=yon_gtk_builder_get_widget(builder,"repoEditCancelButton"); window->SaveButton=yon_gtk_builder_get_widget(builder,"repoEditSaveButton"); window->BranchesTree=yon_gtk_builder_get_widget(builder,"repoEditBranchTree"); window->BranchesListStore=GTK_LIST_STORE(gtk_builder_get_object(builder,"curRepoEditList")); gtk_widget_show(window->Window); dictionary *dict = yon_dictionary_new_with_data("",widgets); dict = yon_dictionary_append_with_data(dict,"",window); g_signal_connect(G_OBJECT(window->SaveButton),"clicked",G_CALLBACK(on_repo_configure_done),dict); g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_close_subwindow),NULL); gtk_list_store_clear(window->BranchesListStore); } else yon_ubl_status_box_render(NOTHING_CHOSEN_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); } void on_repo_configure_done(GtkWidget *self, dictionary *dict){ main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); repo_create_window *window = yon_dictionary_get_data(dict->first->next,repo_create_window*); GtkTreeIter iter, parentIter; GtkTreeModel *model = GTK_TREE_MODEL(main_config.tree_store); if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoTree)),&model,&iter)){ if (gtk_tree_model_iter_parent(GTK_TREE_MODEL(main_config.tree_store),&parentIter,&iter)) iter=parentIter; char *oldname=NULL; int status=0; char *name = (char*)gtk_entry_get_text(GTK_ENTRY(window->NameEntry)); gtk_tree_model_get(model,&iter,1,&oldname,4,&status,-1); if (status==0) gtk_tree_store_set(main_config.tree_store,&iter,1,name,6,oldname,7,1,-1); else if (status==1) gtk_tree_store_set(main_config.tree_store,&iter,1,name,-1); } on_close_subwindow(self); } void on_repo_load_local(GtkWidget *self, main_window *widgets){ GtkFileFilter *file_filter = gtk_file_filter_new(); gtk_file_filter_add_pattern(file_filter,"*db.tar.gz"); GtkWidget *chooser = gtk_file_chooser_dialog_new(ADD_PACKAGE_REPO_LABEL,NULL,GTK_FILE_CHOOSER_ACTION_OPEN,CANCEL_LABEL,GTK_RESPONSE_CANCEL,OPEN_LABEL,GTK_RESPONSE_ACCEPT,NULL); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(chooser),file_filter); int res = gtk_dialog_run(GTK_DIALOG(chooser)); if (res==GTK_RESPONSE_ACCEPT){ char *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(chooser)); while (1){ char *ret = yon_char_divide_search(filename,"/",-1); if (strcmp(ret,filename)==0) break; } yon_repo_append(widgets,filename,YON_REPO_LINE_REPO_TYPE); } on_close_subwindow(chooser); } GtkTreeIter *yon_repo_append(main_window *widgets, char *name, YON_REPO_LINE_TYPE type){ GtkTreeIter *retIter=g_malloc0(sizeof(GtkTreeIter)); GtkTreeIter iter,parentIter; GdkPixbuf *icon = NULL; GtkIconTheme *theme = gtk_icon_theme_get_default(); char *name_short = yon_char_new(name); gboolean fls = 0; while(1){ yon_char_divide_search(name_short,"/",-1); if (!strstr(name_short,"/")) break; } GtkTreeModel *model = GTK_TREE_MODEL(main_config.tree_store); if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoTree)),&model,&parentIter)){ if (type==YON_REPO_LINE_REPO_TYPE){ icon = gtk_icon_theme_load_icon_for_scale(theme,"com.ublinux.ubl-settings-repomanager.folder-symbolic",16,1,GTK_ICON_LOOKUP_FORCE_SIZE,NULL); gtk_tree_store_append(main_config.tree_store,&iter,NULL); gtk_tree_store_set(main_config.tree_store,&iter,0, "com.ublinux.ubl-settings-repomanager.folder-symbolic", 1, name_short,3,name,4,1,5,fls,-1); retIter = gtk_tree_iter_copy(&iter); } else if (type==YON_REPO_LINE_FILE_TYPE){ GtkTreeIter branch; icon = gtk_icon_theme_load_icon_for_scale(theme,"com.ublinux.ubl-settings-repomanager.follder-symbolic",16,1,GTK_ICON_LOOKUP_FORCE_SIZE,NULL); if (gtk_tree_model_iter_parent(model,&branch,&parentIter)){ GtkTreeIter repo; gtk_tree_store_append(main_config.tree_store,&iter,&branch); gtk_tree_store_set(main_config.tree_store,&iter,0, "com.ublinux.ubl-settings-repomanager.document-symbolic", 1, name_short,3,name,4,1,5,fls,-1); retIter = gtk_tree_iter_copy(&iter); } else { gtk_tree_store_append(main_config.tree_store,&iter,&parentIter); gtk_tree_store_set(main_config.tree_store,&iter,0, "com.ublinux.ubl-settings-repomanager.document-symbolic", 1, name_short,3,name,4,1,5,fls,-1); retIter = gtk_tree_iter_copy(&iter); } yon_ubl_status_box_render(OPERATION_DONE_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); } gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoTree)),&iter); } else if (type==YON_REPO_LINE_REPO_TYPE){ icon = gtk_icon_theme_load_icon_for_scale(theme,"com.ublinux.ubl-settings-repomanager.folder-symbolic",16,1,GTK_ICON_LOOKUP_FORCE_SIZE,NULL); gtk_tree_store_append(main_config.tree_store,&iter,NULL); gtk_tree_store_set(main_config.tree_store,&iter,0, "com.ublinux.ubl-settings-repomanager.folder-symbolic", 1, name_short,3,name,4,1,5,fls,-1); retIter = gtk_tree_iter_copy(&iter); gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoTree)),&iter); } else { yon_ubl_status_box_render(NOTHING_CHOSEN_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); } return retIter; } void yon_repo_remove_package(main_window *widgets){ GtkTreeIter iter; GtkTreeModel *model = GTK_TREE_MODEL(main_config.tree_store); if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoTree)),&model,&iter)){ GtkTreeIter iterparent; if (gtk_tree_model_iter_parent(model,&iterparent,&iter)){ // gtk_tree_store_remove(main_config.tree_store,&iter); int status = 0; gtk_tree_model_get(GTK_TREE_MODEL(main_config.tree_store),&iter,4,&status,-1); if (status != 1){ gtk_tree_store_set(main_config.tree_store,&iter,4,-1,-1); gtk_tree_store_set(main_config.tree_store,&iter,0,"com.ublinux.ubl-settings-repomanager.document-red-symbolic",-1); } else gtk_tree_store_remove(main_config.tree_store,&iter); yon_ubl_status_box_render(OPERATION_DONE_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); }else yon_ubl_status_box_render(CHOOSE_PACK_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); } } void yon_repo_remove(main_window *widgets){ GtkTreeIter iter; GtkTreeModel *model = GTK_TREE_MODEL(main_config.tree_store); if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoTree)),&model,&iter)){ if(gtk_tree_store_iter_depth(main_config.tree_store,&iter)==0){ gtk_tree_store_set(main_config.tree_store,&iter,4,-1,0,"com.ublinux.ubl-settings-repomanager.folder-red-symbolic",-1); }else yon_ubl_status_box_render(CHOOSE_REPO_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); } else yon_ubl_status_box_render(NOTHING_CHOSEN_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); } void yon_add_file(main_window *widgets){ GtkFileFilter *file_filter = gtk_file_filter_new(); gtk_file_filter_add_pattern(file_filter,"*.pkg.tar.*"); gtk_file_filter_set_name(file_filter,"*.pkg.tar.*"); GtkWidget *chooser = gtk_file_chooser_dialog_new(ADD_PACKAGE_REPO_LABEL,NULL,GTK_FILE_CHOOSER_ACTION_OPEN,CANCEL_LABEL,GTK_RESPONSE_CANCEL,OPEN_LABEL,GTK_RESPONSE_ACCEPT,NULL); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(chooser),file_filter); int res = gtk_dialog_run(GTK_DIALOG(chooser)); if (res==GTK_RESPONSE_ACCEPT){ char *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(chooser)); FILE *file = popen(get_package_info_command(filename),"r"); char *cur_string=g_malloc0(sizeof(char)*4096); char *packname=NULL, *packver=NULL, *packarch=NULL; while (fgets(cur_string,4096,file)){ cur_string = yon_char_divide_search(cur_string,"\n",-1); char *p = yon_char_divide_search(cur_string,":",-1); if (strstr(p,"Name")) packname = yon_char_new(cur_string); else if (strstr(p,"Version")) packver = yon_char_new(cur_string); else if (strstr(p,"Architecture")) packarch = yon_char_new(cur_string); } GtkTreeIter *iter = yon_repo_append(widgets,filename,YON_REPO_LINE_FILE_TYPE); gtk_tree_store_set(main_config.tree_store,iter,0,"com.ublinux.ubl-settings-repomanager.document-green-symbolic",11,packname,12,packver,13,packarch,-1); } on_close_subwindow(chooser); } /* setup functions */ void config_init(){ main_config.tree_store=NULL; main_config.always_open_documentation=0; main_config.win_height=0; main_config.win_width=0; main_config.win_pos_x=0; main_config.win_pos_y=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_window *setup_window(){ /* Widgets getting | Получение виджетов */ main_window *widgets = malloc(sizeof(main_window)); GtkBuilder *builder = gtk_builder_new_from_resource(glade_path); widgets->Window = yon_gtk_builder_get_widget(builder,"MainWindow"); widgets->HatLabel = yon_gtk_builder_get_widget(builder,"headerTopic"); widgets->PlugBox = yon_gtk_builder_get_widget(builder,"plugBox"); widgets->HeadOverlay = yon_gtk_builder_get_widget(builder,"HeadOverlay"); widgets->HeadImage = yon_gtk_builder_get_widget(builder,"HeadBackgroundImage"); widgets->HeadBox = yon_gtk_builder_get_widget(builder,"HeaderBox"); widgets->HeadTitleLabel = yon_gtk_builder_get_widget(builder,"HeaderTitleLabel"); widgets->HeadInfoLabel = yon_gtk_builder_get_widget(builder,"HeaderInfoLabel"); widgets->StatusBox = yon_gtk_builder_get_widget(builder,"mainStatusBox"); widgets->StatusIcon = yon_gtk_builder_get_widget(builder,"mainStatusIcon"); widgets->StatusLabel = yon_gtk_builder_get_widget(builder,"mainStatusLabel"); widgets->SaveLabel = yon_gtk_builder_get_widget(builder,"headerSaveConfigLabel"); widgets->SaveMenuItem = yon_gtk_builder_get_widget(builder,"SaveGlobalLocalConfigurationMenuItem"); widgets->SaveGlobalMenuItem = yon_gtk_builder_get_widget(builder,"SaveGlobalConfigurationMenuItem"); widgets->SaveLocalMenuItem = yon_gtk_builder_get_widget(builder,"SaveLocalConfigurationMenuItem"); widgets->RightBox = yon_gtk_builder_get_widget(builder,"HeaderRightBox"); widgets->LoadLabel = yon_gtk_builder_get_widget(builder,"headerLoadConfigLabel"); widgets->LoadGlobalMenuItem = yon_gtk_builder_get_widget(builder,"LoadGlobalConfigurationMenuItem"); widgets->LoadLocalMenuItem = yon_gtk_builder_get_widget(builder,"LoadLocalConfigurationMenuItem"); widgets->LeftBox = yon_gtk_builder_get_widget(builder,"HeaderLeftBox"); // widgets->DocumentationMenuItem = yon_gtk_builder_get_widget(builder,"DocumentationMenuItem"); // widgets->AboutMenuItem = yon_gtk_builder_get_widget(builder,"AboutMenuItem"); widgets->GeneralTabLabel = yon_gtk_builder_get_widget(builder,"GeneralTabLabel"); widgets->PublicationTabLabel = yon_gtk_builder_get_widget(builder,"PublicationTabLabel"); widgets->CreateButton = yon_gtk_builder_get_widget(builder,"CreateButton"); widgets->LoadFromNetButton = yon_gtk_builder_get_widget(builder,"LoadNetButton"); widgets->ConfigureButton = yon_gtk_builder_get_widget(builder,"ConfigureButton"); widgets->DeleteButton = yon_gtk_builder_get_widget(builder,"DeleteButton"); widgets->LoadFromLocalButton = yon_gtk_builder_get_widget(builder,"LoadLocalButton"); widgets->SwitchPublishButton = yon_gtk_builder_get_widget(builder,"SwitchPublishButton"); widgets->CheckDependencesButton = yon_gtk_builder_get_widget(builder,"CheckDependencesButton"); widgets->SignButton = yon_gtk_builder_get_widget(builder,"SignButton"); widgets->AddPackageButton = yon_gtk_builder_get_widget(builder,"AddPackageButton"); widgets->RemovePackageButton = yon_gtk_builder_get_widget(builder,"RemovePackageButton"); widgets->RepoTree = yon_gtk_builder_get_widget(builder,"RepoTree"); widgets->TrustedRepoCheck = yon_gtk_builder_get_widget(builder,"TrustedCheck"); widgets->ServerTypeLabel = yon_gtk_builder_get_widget(builder,"ServerLabel"); widgets->ServerTypeCombo = yon_gtk_builder_get_widget(builder,"ServerCombo"); widgets->IpAdressLabel = yon_gtk_builder_get_widget(builder,"IpAdresslabel"); widgets->IpAdressCombo = yon_gtk_builder_get_widget(builder,"IpAdressCombo"); widgets->PortLabel = yon_gtk_builder_get_widget(builder,"PortLabel"); widgets->PortSpin = yon_gtk_builder_get_widget(builder,"PortSpin"); widgets->OutputEntry = yon_gtk_builder_get_widget(builder,"OutputEntry"); widgets->CopyButton = yon_gtk_builder_get_widget(builder,"CopyButton"); widgets->PublishButton = yon_gtk_builder_get_widget(builder,"PublishButton"); widgets->CodeNameLabel = yon_gtk_builder_get_widget(builder,"CodeNameLabel"); widgets->CodeNameInfoLabel = yon_gtk_builder_get_widget(builder,"CodeNameInfoLabel"); widgets->BranchLabel = yon_gtk_builder_get_widget(builder,"BranchLabel"); widgets->BranchInfoLabel = yon_gtk_builder_get_widget(builder,"BranchInfoLabel"); widgets->VersionLabel = yon_gtk_builder_get_widget(builder,"VersionLabel"); widgets->VersionInfoLabel = yon_gtk_builder_get_widget(builder,"VersionInfoLabel"); widgets->ArchitectureLabel = yon_gtk_builder_get_widget(builder,"ArchitectureLabel"); widgets->ArchitectureInfoLabel = yon_gtk_builder_get_widget(builder,"ArchitectureInfoLabel"); widgets->ComponentsLabel = yon_gtk_builder_get_widget(builder,"ComponentsLabel"); widgets->ComponentsInfoLabel = yon_gtk_builder_get_widget(builder,"ComponentsInfoLabel"); widgets->SignatureLabel = yon_gtk_builder_get_widget(builder,"SignatureLabel"); widgets->SignatureInfoLabel = yon_gtk_builder_get_widget(builder,"SignatureInfoLabel"); widgets->Finder = yon_gtk_builder_get_widget(builder,"RepoFinder"); widgets->SaveButton = yon_gtk_builder_get_widget(builder,"mainSaveButton"); main_config.tree_store = GTK_TREE_STORE(gtk_builder_get_object(builder,"RepoStore")); widgets->DocumentationMenuItem = yon_ubl_menu_item_documentation_new(DOCUMENTATION_LABEL); // yon_gtk_builder_get_widget(builder,"DocumentationMenuItem"); widgets->AboutMenuItem = yon_ubl_menu_item_about_new(ABOUT_LABEL); // yon_gtk_builder_get_widget(builder,"AboutMenuItem"); gtk_window_set_title(GTK_WINDOW(widgets->Window),TITLE_LABEL); GtkWidget *menu = yon_gtk_builder_get_widget(builder,"menu2"); gtk_menu_shell_append(GTK_MENU_SHELL(menu),widgets->DocumentationMenuItem); gtk_menu_shell_append(GTK_MENU_SHELL(menu),widgets->AboutMenuItem); if (main_config.lock_load_global == 1){ gtk_widget_set_sensitive(widgets->LoadGlobalMenuItem,0); } if (main_config.lock_save_global == 1&&main_config.lock_save_local == 1){ gtk_widget_set_sensitive(gtk_widget_get_parent(gtk_widget_get_parent(widgets->SaveLabel)),0); }else{ if (main_config.lock_save_global == 1){ gtk_widget_set_sensitive(widgets->SaveGlobalMenuItem,0); gtk_widget_set_sensitive(widgets->SaveMenuItem,0); } if (main_config.lock_save_local == 1){ gtk_widget_set_sensitive(widgets->SaveLocalMenuItem,0); gtk_widget_set_sensitive(widgets->SaveMenuItem,0); } } /* Signal connection | Присоединение сигналов */ g_signal_connect(G_OBJECT(widgets->Window), "destroy", G_CALLBACK(gtk_main_quit), NULL); g_signal_connect(G_OBJECT(widgets->DocumentationMenuItem),"activate",G_CALLBACK(on_open_documentation_confirmation),WIKI_LINK); g_signal_connect(G_OBJECT(widgets->AboutMenuItem),"activate",G_CALLBACK(on_about),NULL); g_signal_connect(G_OBJECT(widgets->CreateButton),"clicked",G_CALLBACK(on_repo_new),widgets); g_signal_connect(G_OBJECT(widgets->AddPackageButton),"clicked",G_CALLBACK(on_repo_add_file),widgets); g_signal_connect(G_OBJECT(widgets->RemovePackageButton),"clicked",G_CALLBACK(on_repo_remove_package),widgets); g_signal_connect(G_OBJECT(widgets->DeleteButton),"clicked",G_CALLBACK(on_repo_remove),widgets); g_signal_connect(G_OBJECT(widgets->LoadFromLocalButton),"clicked",G_CALLBACK(on_repo_load_local),widgets); g_signal_connect(G_OBJECT(widgets->ConfigureButton),"clicked",G_CALLBACK(on_repo_configure),widgets); g_signal_connect(G_OBJECT(widgets->SaveButton),"clicked",G_CALLBACK(on_save),widgets); g_signal_connect(G_OBJECT(widgets->RepoTree),"cursor-changed",G_CALLBACK(on_tree_selection_changed),widgets); g_signal_connect(G_OBJECT(widgets->Finder),"changed",G_CALLBACK(on_search),widgets); /* Localisation | Локализация */ gtk_widget_show(widgets->Window); return widgets; } int main(int argc, char *argv[]){ local=setlocale(LC_ALL, ""); textdomain (LocaleName); config_init(); int option_index=0; int show_help=0; int debug_mode=0; { struct option long_options[] = { {"help", 0, 0, 'h'}, {"version", 0, 0, 'V'}, {"lock-help", 0,0, 1}, {"lock-save", 0,0, 2}, {"lock-save-local", 0,0, 3}, {"lock-save-global", 0,0, 4}, {"lock-load-global", 0,0, 5}, {"socket-id", 1, 0, 's'}, {"socket-ext-id", 1,0, 'e'}, {"socket-trd-id", 1,0, 't'}, {"debug", 0,0, 'd'}, { NULL, 0, NULL, 0 } }; for (int i=0;iHeadOverlay,widgets->HeadBox,widgets->HeadImage,banner_path); yon_ubl_status_box_setup(widgets->StatusIcon,widgets->StatusBox,widgets->StatusLabel); yon_ubl_status_box_render(TITLE_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); yon_ubl_setup_sockets(widgets->PlugBox,widgets->LeftBox,widgets->RightBox,main_config.socket_id,main_config.load_socket_id,main_config.save_socket_id); yon_window_config_setup(GTK_WINDOW(widgets->Window)); yon_window_config_load(config_path); GtkCssProvider *css=gtk_css_provider_new(); gtk_css_provider_load_from_resource(css,CssPath); gtk_style_context_add_provider_for_screen(gdk_screen_get_default(), GTK_STYLE_PROVIDER(css), -1); gtk_main(); }