From beec6b1009ea1851a6542ee05d3fcb868863a912 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Thu, 6 Jul 2023 18:07:16 +0600 Subject: [PATCH] Implemented save button --- source/ubl-settings-repomanager.c | 53 +++++++++++++++++++++++++++---- source/ubl-settings-repomanager.h | 1 + 2 files changed, 47 insertions(+), 7 deletions(-) diff --git a/source/ubl-settings-repomanager.c b/source/ubl-settings-repomanager.c index 9bb046a..7d41d31 100644 --- a/source/ubl-settings-repomanager.c +++ b/source/ubl-settings-repomanager.c @@ -98,6 +98,34 @@ void on_about(){ gtk_widget_show(window); } +void on_save(){ + char *command = "ubl-settings-repo-back"; + char *remove_flagged = " "; + char *add_flagged = " "; + char *origin_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)){ + char *path=NULL; + char *name = NULL; + char *remove_flagged = " "; + char *add_flagged = " "; + gtk_tree_model_get(GTK_TREE_MODEL(main_config.tree_store),&iter,3,&path,1,&name,-1); + origin_flagged = yon_char_unite(path,"/",name,".db.tar.gz",NULL); + if (strstr(origin_flagged," ")) origin_flagged = yon_char_unite("\"",origin_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)){ + path=NULL; + int status = 0,deleted = 0; + gtk_tree_model_get(GTK_TREE_MODEL(main_config.tree_store),&childIter,3,&path,4,&status,5,&deleted,-1); + if (status==-1) { remove_flagged = yon_char_unite(remove_flagged," --package-remove ",path,NULL); gtk_tree_store_remove(main_config.tree_store,&childIter);} + else if (status == 1&&deleted==0) add_flagged = yon_char_unite(add_flagged," --package-add ",path,NULL); + + } + command = yon_char_unite(command," -o ",origin_flagged,"/",name,".db.tar.gz",remove_flagged,add_flagged,NULL); + } + printf("%s\n",command); +} void on_tree_selection_changed(GtkWidget *self,main_window *widgets){ GtkTreeModel *model = GTK_TREE_MODEL(main_config.tree_store); @@ -131,6 +159,7 @@ int yon_add_branches(GtkTreeModel* model, GtkTreePath* path, GtkTreeIter* iter, 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 = yon_char_new((char*)gtk_entry_get_text(GTK_ENTRY(window->NameEntry))); if (!name||strcmp(name,"")!=0){ on_close_subwindow(self); @@ -157,13 +186,14 @@ void on_branch_add(GtkCellRendererText *self, char*path,char *new_text, repo_cre } } -void on_choose_repo_folder(repo_create_window *window){ +void on_choose_repo_folder(GtkWidget *self,repo_create_window *window){ GtkWidget *chooser = gtk_file_chooser_dialog_new(ADD_PACKAGE_REPO_LABEL,NULL,GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,CANCEL_LABEL,GTK_RESPONSE_CANCEL,OPEN_LABEL,GTK_RESPONSE_ACCEPT,NULL); 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=filename; + window->path=yon_char_new(filename); + gtk_label_set_text(GTK_LABEL(window->PathLabel),window->path); } on_close_subwindow(chooser); } @@ -179,6 +209,8 @@ void on_repo_new (GtkWidget *self, main_window *widgets){ window->repoChooseFolderButton=yon_gtk_builder_get_widget(builder,"repoChooseFolderButton"); window->BranchCell=GTK_CELL_RENDERER(gtk_builder_get_object(builder,"branchTextCell")); window->BranchesListStore=GTK_LIST_STORE(gtk_builder_get_object(builder,"curRepoEditList")); + window->PathLabel=yon_gtk_builder_get_widget(builder,"repoPathLabel"); + window->path=NULL; gtk_widget_show(window->Window); GtkTreeIter iter; gtk_list_store_append(window->BranchesListStore,&iter); @@ -265,6 +297,7 @@ GtkTreeIter *yon_repo_append(main_window *widgets, char *name, YON_REPO_LINE_TYP 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; @@ -274,7 +307,7 @@ GtkTreeIter *yon_repo_append(main_window *widgets, char *name, YON_REPO_LINE_TYP if (type==YON_REPO_LINE_REPO_TYPE){ icon = gtk_icon_theme_load_icon_for_scale(theme,"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, "folder-symbolic", 1, name_short,3,name,-1); + gtk_tree_store_set(main_config.tree_store,&iter,0, "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){ @@ -283,12 +316,12 @@ GtkTreeIter *yon_repo_append(main_window *widgets, char *name, YON_REPO_LINE_TYP 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,-1); + 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(&branch); } 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,-1); + 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); @@ -298,7 +331,7 @@ GtkTreeIter *yon_repo_append(main_window *widgets, char *name, YON_REPO_LINE_TYP else if (type==YON_REPO_LINE_REPO_TYPE){ icon = gtk_icon_theme_load_icon_for_scale(theme,"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, "folder-symbolic", 1, name_short,3,name,-1); + gtk_tree_store_set(main_config.tree_store,&iter,0, "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 { @@ -313,7 +346,12 @@ void yon_repo_remove_package(main_window *widgets){ 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); + // 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,5,1,-1); 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); } @@ -475,6 +513,7 @@ main_window *setup_window(){ 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); /* Localisation | Локализация */ gtk_widget_show(widgets->Window); diff --git a/source/ubl-settings-repomanager.h b/source/ubl-settings-repomanager.h index c12885f..31f2619 100644 --- a/source/ubl-settings-repomanager.h +++ b/source/ubl-settings-repomanager.h @@ -125,6 +125,7 @@ typedef struct { GtkWidget *repoChooseFolderButton; GtkListStore *BranchesListStore; + GtkWidget *PathLabel; char *path; } repo_create_window;