diff --git a/source/ubl-settings-repomanager.c b/source/ubl-settings-repomanager.c index fec3dca..4979239 100644 --- a/source/ubl-settings-repomanager.c +++ b/source/ubl-settings-repomanager.c @@ -327,17 +327,81 @@ void on_add_target_arch_selection_changed(GtkWidget *target,repo_add_window *win int valid = gtk_tree_model_iter_children(GTK_TREE_MODEL(window->tree_copy),&itar,&iter); for(;valid;valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(window->tree_copy),&itar)){ - char *current; - gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&itar,2,¤t,-1); + char *current, *current_path; + gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&itar,2,¤t,3,¤t_path,-1); if (!yon_char_is_empty(current)){ char *path_str = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(window->tree_copy),&itar); gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->ArchitectureCombo),path_str,current); + + } + } + } + } +} + +void on_add_target_package_selection_changed(GtkWidget *target,repo_add_window *window){ + gtk_list_store_clear(GTK_LIST_STORE(window->PackagesList)); + char *path_str = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->ArchitectureCombo)); + if (!yon_char_is_empty(path_str)){ + GtkTreeIter iter, itar; + GtkTreePath *path = gtk_tree_path_new_from_string(path_str); + if (gtk_tree_model_get_iter(GTK_TREE_MODEL(window->tree_copy),&iter,path)){ + char *curpath; + gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&iter,3,&curpath,-1); + char *packages; + yon_window_config_get_parameter("package_info",curpath,&packages,YON_TYPE_STRING); + if (!yon_char_is_empty(packages)){ + int size; + config_str parsed = yon_char_parse(packages,&size,","); + for (int i=0;iPackagesList,&iter); + gtk_list_store_set(window->PackagesList,&iter,1,parsed[i],2,full_path_package,-1); + free(full_path_package); } } } } } +void on_add_package(GtkWidget *self, repo_add_window *window){ + GtkWidget *dialog = gtk_file_chooser_dialog_new(TITLE_LABEL,GTK_WINDOW(window->MainWindow),GTK_FILE_CHOOSER_ACTION_OPEN,CANCEL_LABEL,GTK_RESPONSE_CANCEL,ACCEPT_LABEL,GTK_RESPONSE_ACCEPT,NULL); + gtk_widget_show(dialog); + GtkFileFilter *filter = gtk_file_filter_new(); + gtk_file_filter_add_pattern(filter,"*.tar.*"); + gtk_file_filter_set_name(filter,"*.tar.*"); + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog),filter); + int responce = gtk_dialog_run(GTK_DIALOG(dialog)); + if (responce == GTK_RESPONSE_ACCEPT){ + char *id = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->ArchitectureCombo)); + char *path; + GtkTreeIter iter,itar; + gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->tree_copy),&iter,id); + gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&iter,3,&path,-1); + char *packages; + yon_window_config_get_parameter("package_info",path,&packages,YON_TYPE_STRING); + int size; + config_str parsed = yon_char_parse(packages,&size,","); + GSList *list = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(dialog)); + for (int i=0;iPackagesList,&itar); + gtk_list_store_set(window->PackagesList,&itar,1,name,2,current,-1); + + } + } + } + gtk_widget_destroy(dialog); +} + +void on_remove_package(){ + +} + void on_add_selection_changed(GtkWidget *self, repo_add_window *window){ gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(window->storage_filter)); gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(window->repo_filter)); @@ -382,9 +446,11 @@ repo_add_window *yon_repo_add_window_new(){ g_signal_connect(G_OBJECT(window->StorageCombo),"changed",G_CALLBACK(on_add_target_repo_selection_changed),window); g_signal_connect(G_OBJECT(window->RepositoryCombo),"changed",G_CALLBACK(on_add_target_arch_selection_changed),window); - // g_signal_connect(G_OBJECT(window->ArchitectureCombo),"changed",G_CALLBACK(on_add_target_selection_changed),window); + g_signal_connect(G_OBJECT(window->ArchitectureCombo),"changed",G_CALLBACK(on_add_target_package_selection_changed),window); g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); g_signal_connect(G_OBJECT(window->AddButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); + g_signal_connect(G_OBJECT(window->AddPackageButton),"clicked",G_CALLBACK(on_add_package),window); + g_signal_connect(G_OBJECT(window->RemoveButton),"clicked",G_CALLBACK(on_remove_package),window); return window; } @@ -489,6 +555,45 @@ void yon_config_load_update(main_window *widgets){ yon_char_parsed_free(storages,size); } +void on_main_tree_selection_changed(GtkWidget *self, main_window *widgets){ + gtk_list_store_clear(widgets->RepoFileList); + GtkTreeIter iter,itar; + GtkTreeModel *model=NULL; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),&model,&iter)){ + GtkTreePath *path = gtk_tree_model_get_path(model,&iter); + int depth = gtk_tree_path_get_depth(path); + char *target; + gtk_tree_model_get(model, &iter,3,&target,-1); + switch (depth){ + case 1:{ + + } + break; + case 2:{ + + } + break; + case 3:{ + char *packages; + int size; + yon_window_config_get_parameter("package_info",target,&packages,YON_TYPE_STRING); + if (!yon_char_is_empty(packages)){ + config_str parsed = yon_char_parse(packages,&size,","); + for (int i=0;iRepoFileList,&itar); + char *name = yon_char_new(parsed[i]); + char *temp = yon_char_divide_search(name,"-",-1); + free(name); + name=temp; + gtk_list_store_set(widgets->RepoFileList,&itar,1,name,3,parsed[i],-1); + } + } + } + break; + } + } +} + main_window *yon_main_window_complete(main_window *widgets){ widgets = yon_remalloc(widgets,sizeof(main_window)); GtkBuilder *builder = gtk_builder_new_from_resource(glade_path); @@ -517,6 +622,7 @@ main_window *yon_main_window_complete(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->AddButton),"clicked",G_CALLBACK(on_add_clicked),widgets); g_signal_connect(G_OBJECT(widgets->MoveButton),"clicked",G_CALLBACK(on_move_clicked),widgets); g_signal_connect(G_OBJECT(widgets->RemoveButton),"clicked",G_CALLBACK(on_remove_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->ReposTree),"cursor-changed",G_CALLBACK(on_main_tree_selection_changed),widgets); gtk_window_set_title(GTK_WINDOW(widgets->Window),TITLE_LABEL); diff --git a/ubl-settings-repomanager-add.glade b/ubl-settings-repomanager-add.glade index 13ae7fa..17c0833 100644 --- a/ubl-settings-repomanager-add.glade +++ b/ubl-settings-repomanager-add.glade @@ -3,7 +3,16 @@ - + + + + + + + + + + True False @@ -490,9 +499,43 @@ True True PackagesList + both + + + Type + + + + 0 + + + + + + + Name + + + + 1 + + + + + + + Path + + + + 2 + + + + diff --git a/ubl-settings-repomanager.glade b/ubl-settings-repomanager.glade index 2373121..36df70a 100644 --- a/ubl-settings-repomanager.glade +++ b/ubl-settings-repomanager.glade @@ -14,13 +14,9 @@ - - - - - + - + @@ -334,7 +330,7 @@ True True - RepoPackagesStore + RepoFileList False @@ -345,13 +341,13 @@ - 0 + 2 - 1 + 3