WIP task 45. Added packages tree

pull/168/head
parent 5899974158
commit 498385c852

@ -60,6 +60,7 @@
<file>services-list.csv</file>
<file>network-list.csv</file>
<file>filesystems-format-list.csv</file>
<file>groups-list.csv</file>
<file>vfs-list.csv</file>
</gresource>
</gresources>

@ -1,6 +1,6 @@
GROUP_NAME;SUBGROUP_NAME;PACKAGES;DESCRIPTION
Containerization;ubm-docker;Docker and webmanager and utils
Containerization;ubm-podman;Podman and webmanager and utils
Containerization;;ubm-docker;Docker and webmanager and utils
Containerization;;ubm-podman;Podman and webmanager and utils
Drivers;Printer;ubm-drv-brother;Brother printer drivers
Drivers;Printer;ubm-drv-canon-capt;Canon CAPT Printer Driver
Drivers;Printer;ubm-drv-canon-ufrii;Canon UFR II LIPSLX CARPS2 printer driver

1 GROUP_NAME;SUBGROUP_NAME;PACKAGES;DESCRIPTION GROUP_NAME SUBGROUP_NAME PACKAGES DESCRIPTION
2 Containerization;ubm-docker;Docker and webmanager and utils Containerization ubm-docker Docker and webmanager and utils
3 Containerization;ubm-podman;Podman and webmanager and utils Containerization ubm-podman Podman and webmanager and utils
4 Drivers;Printer;ubm-drv-brother;Brother printer drivers Drivers Printer ubm-drv-brother Brother printer drivers
5 Drivers;Printer;ubm-drv-canon-capt;Canon CAPT Printer Driver Drivers Printer ubm-drv-canon-capt Canon CAPT Printer Driver
6 Drivers;Printer;ubm-drv-canon-ufrii;Canon UFR II LIPSLX CARPS2 printer driver Drivers Printer ubm-drv-canon-ufrii Canon UFR II LIPSLX CARPS2 printer driver

@ -82,6 +82,7 @@ set(DEPENDFILES
../services-list.csv
../network-list.csv
../filesystems-format-list.csv
../groups-list.csv
../vfs-list.csv
../icons-builtin/install_type_custom_normal.png
../icons-builtin/install_type_data_only_normal.png
@ -143,7 +144,7 @@ set(SOURCE_FILES
ubinstall-gtk-configuration-mode.c
ubinstall-gtk-decorations.c
ubinstall-gtk-log.c
# ubinstall-gtk-password.c
ubinstall-gtk-packages.c
ubinstall-gtk-saving.c
ubinstall-gtk-standard.c
ubinstall-gtk-install-start.c

@ -1,11 +1,12 @@
#include "ubinstall-gtk.h"
GtkTreeIter *yon_category_check(GtkTreeStore *target,char *category);
GtkTreeIter *yon_category_check(GtkTreeStore *target,char *category){
GtkTreeIter iter;
GtkTreeIter *ret_iter = NULL;
for_iter(target,&iter){
char *cur_category;
gtk_tree_model_get(GTK_TREE_MODEL(target),&iter,0,&cur_category,-1);
gtk_tree_model_get(GTK_TREE_MODEL(target),&iter,1,&cur_category,-1);
if (!strcmp(cur_category,category)){
ret_iter = gtk_tree_iter_copy(&iter);
}
@ -13,14 +14,15 @@ GtkTreeIter *yon_category_check(GtkTreeStore *target,char *category){
return ret_iter;
}
GtkTreeIter *yon_subcategory_check(GtkTreeStore *target, GtkTreeIter *parent_iter, char *category);
GtkTreeIter *yon_subcategory_check(GtkTreeStore *target, GtkTreeIter *parent_iter, char *category){
GtkTreeIter iter;
GtkTreeIter *ret_iter = NULL;
gtk_tree_model_iter_children(GTK_TREE_MODEL(target),&iter,parent_iter);
for(int valid = 1; valid; valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(target),&iter)){
int valid = gtk_tree_model_iter_children(GTK_TREE_MODEL(target),&iter,parent_iter);
for(; valid; valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(target),&iter)){
char *cur_category;
gtk_tree_model_get(GTK_TREE_MODEL(target),&iter,0,&cur_category,-1);
if (!strcmp(cur_category,category)){
gtk_tree_model_get(GTK_TREE_MODEL(target),&iter,1,&cur_category,-1);
if ((yon_char_is_empty(cur_category)&&yon_char_is_empty(category))||!strcmp(cur_category,category)){
ret_iter = gtk_tree_iter_copy(&iter);
}
}
@ -28,44 +30,75 @@ GtkTreeIter *yon_subcategory_check(GtkTreeStore *target, GtkTreeIter *parent_ite
}
void yon_packages_tab_init(main_window *widgets){
GHashTable *category = g_hash_table_new(g_str_hash,g_str_equal);
GHashTable *subcategory = g_hash_table_new(g_str_hash,g_str_equal);
// GHashTable *category = g_hash_table_new(g_str_hash,g_str_equal);
// GHashTable *subcategory = g_hash_table_new(g_str_hash,g_str_equal);
int size;
config_str packages = yon_resource_open_file(groups_list_path,&size);
for (int i=0;i<size;i++){
for (int i=1;i<size;i++){
int parsed_size;
config_str parsed = yon_char_parse(packages[i],&parsed_size,";");
GtkTreeIter *category_iter = yon_category_check(widgets->PackagesList,parsed[0]);
if (category_iter){
GtkTreeIter *subcategory_iter = yon_subcategory_check(widgets->PackagesList,category_iter,parsed[0]);
if (!yon_char_is_empty(parsed[1])){
GtkTreeIter *subcategory_iter = yon_subcategory_check(widgets->PackagesList,category_iter,parsed[1]);
if (subcategory_iter){
GtkTreeIter package_iter;
gtk_tree_store_append(widgets->PackagesList,&package_iter,subcategory_iter);
gtk_tree_store_set(widgets->PackagesList,&package_iter,0,packages[2],1,packages[3],-1);
gtk_tree_store_set(widgets->PackagesList,&package_iter,0,0,1,parsed[2],2,parsed[3],3,1,-1);
gtk_tree_iter_free(subcategory_iter);
} else {
GtkTreeIter subcatiter;
GtkTreeIter package_iter;
gtk_tree_store_append(widgets->PackagesList,&subcatiter,category_iter);
gtk_tree_store_set(widgets->PackagesList,&subcatiter,1,parsed[1],2,parsed[3],3,0,-1);
gtk_tree_store_append(widgets->PackagesList,&package_iter,&subcatiter);
gtk_tree_store_set(widgets->PackagesList,&package_iter,0,0,1,parsed[2],2,parsed[3],3,1,-1);
}
} else {
GtkTreeIter package_iter;
gtk_tree_store_append(widgets->PackagesList,&package_iter,category_iter);
gtk_tree_store_set(widgets->PackagesList,&package_iter,0,0,1,parsed[2],2,parsed[3],3,1,-1);
}
gtk_tree_iter_free(category_iter);
} else {
if (!yon_char_is_empty(parsed[1])){
GtkTreeIter subcategory_iter;
GtkTreeIter catiter;
GtkTreeIter package_iter;
gtk_tree_store_append(widgets->PackagesList,&catiter,NULL);
gtk_tree_store_set(widgets->PackagesList,&catiter,1,parsed[0],2,parsed[3],3,0,-1);
gtk_tree_store_append(widgets->PackagesList,&subcategory_iter,&catiter);
gtk_tree_store_set(widgets->PackagesList,&subcategory_iter,1,parsed[1],2,parsed[3],3,0,-1);
gtk_tree_store_append(widgets->PackagesList,&package_iter,&subcategory_iter);
gtk_tree_store_set(widgets->PackagesList,&package_iter,1,parsed[2],2,parsed[3],3,1,-1);
} else {
GtkTreeIter package_iter;
GtkTreeIter catiter;
gtk_tree_store_append(widgets->PackagesList,&catiter,NULL);
gtk_tree_store_set(widgets->PackagesList,&catiter,1,parsed[0],2,parsed[3],3,0,-1);
gtk_tree_store_append(widgets->PackagesList,&package_iter,&catiter);
gtk_tree_store_set(widgets->PackagesList,&package_iter,0,0,1,parsed[2],2,parsed[3],3,1,-1);
}
}
}
void yon_on_packages_chosen(GtkTreeStore *, char *path, main_window *widgets){
GtkTreeIter iter, chiter;
gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(widgets->PackagesList),&iter,path);
GtkTreePath *cur_path = gtk_tree_model_get_path(GTK_TREE_MODEL(widgets->PackagesList),&iter);
int depth = gtk_tree_path_get_depth(cur_path);
if (depth<2){
GtkTreeIter *cur_parent, *cur_iter;
cur_parent = gtk_tree_iter_copy(&iter);
cur_iter = gtk_tree_iter_copy(&chiter);
switch(depth){
case 0:
gtk_tree_model_iter_children(GTK_TREE_MODEL(widgets->PackagesList),cur_iter,&iter);
__attribute__((fallthrough));
case 1:
gtk_tree_model_iter_children(GTK_TREE_MODEL(widgets->PackagesList),cur_iter,cur_parent);
gtk_tree_view_expand_all(GTK_TREE_VIEW(widgets->PackagesTree));
}
void yon_on_packages_chosen(GtkWidget *, main_window *widgets){
GtkTreeIter iter;
GtkTreeModel *model;
gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->PackagesTree)),&model,&iter);
GtkTreeIter cur_parent, cur_iter;
int status;
gtk_tree_model_get(model,&iter,3,&status,-1);
if (status)
return;
gtk_tree_model_iter_children(model,&cur_parent,&iter);
gtk_tree_model_get(model,&cur_parent,3,&status,-1);
if (status){
gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->PackagesTree)),&cur_parent);
return;
}
gtk_tree_model_iter_children(model,&cur_iter,&cur_parent);
gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->PackagesTree)),&cur_iter);
}

@ -20,7 +20,7 @@ enum YON_PAGES yon_page_get_next(main_window *widgets, enum YON_PAGES page){
case YON_PAGE_USERS: return YON_PAGE_STARTUP; break;
case YON_PAGE_STARTUP: return YON_PAGE_BOOTLOADER; break;
case YON_PAGE_BOOTLOADER: return YON_PAGE_NETWORK; break;
case YON_PAGE_NETWORK: return YON_PAGE_KERNEL; break;
case YON_PAGE_NETWORK: return YON_PAGE_PACKAGES_HUB; break;
case YON_PAGE_PACKAGES_HUB: return main_config.configure_mode? YON_PAGE_CONFIGURE_END : YON_PAGE_INSTALLATION;
case YON_PAGE_INSTALL_COMMON: return YON_PAGE_OS_COMPONENTS; break;
case YON_PAGE_INSTALL_SEPARATE: return YON_PAGE_OS_COMPONENTS; break;
@ -63,6 +63,7 @@ enum YON_PAGES yon_page_get_prev(enum YON_PAGES page){
case YON_PAGE_STARTUP: return YON_PAGE_USERS; break;
case YON_PAGE_BOOTLOADER: return YON_PAGE_STARTUP; break;
case YON_PAGE_NETWORK: return YON_PAGE_BOOTLOADER; break;
case YON_PAGE_PACKAGES_HUB: return YON_PAGE_NETWORK;
case YON_PAGE_INSTALLATION: return YON_PAGE_INSTALLATION; break;
case YON_PAGE_CONFIGURE_END: return YON_PAGE_CONFIGURE_END; break;
case YON_PAGE_INSTALL_COMMON: return YON_PAGE_SECTIONS; break;
@ -384,6 +385,9 @@ void yon_page_init(main_window *widgets, enum YON_PAGES page){
case YON_PAGE_NETWORK:
yon_network_init(widgets);
break;
case YON_PAGE_PACKAGES_HUB:
yon_packages_tab_init(widgets);
break;
case YON_PAGE_INSTALL_ADVANCED:
yon_install_advanced_init(widgets);
__attribute__((fallthrough));

@ -1082,6 +1082,10 @@ void yon_main_window_create(main_window *widgets){
widgets->HostnameSensitiveSwitch = yon_gtk_builder_get_widget(builder,"HostnameSensitiveSwitch");
widgets->AutoHostnameCheck=yon_gtk_builder_get_widget(builder,"AutoHostnameCheck");
widgets->AdvancedVirtualDeviceLabel = yon_gtk_builder_get_widget(builder,"AdvancedVirtualDeviceLabel");
widgets->PackagesTree = yon_gtk_builder_get_widget(builder,"PackagesTree");
widgets->PackagesList = GTK_TREE_STORE(gtk_builder_get_object(builder,"Packages"));
widgets->network_connections = NULL;
widgets->pacmanchosen = g_hash_table_new_full(g_str_hash,g_str_equal,free,NULL);
@ -1211,6 +1215,7 @@ void yon_main_window_create(main_window *widgets){
g_signal_connect(G_OBJECT(widgets->AdvancedAddButton),"clicked",G_CALLBACK(on_advanced_partition_create),widgets);
g_signal_connect(G_OBJECT(widgets->AdvancedPartChosenCell),"toggled",G_CALLBACK(on_install_advanced_partition_chosen),widgets);
g_signal_connect(G_OBJECT(widgets->AdvancedVirtualDeviceCombo),"changed",G_CALLBACK(on_advanced_virtual_device_changed),widgets);
g_signal_connect(G_OBJECT(widgets->PackagesTree),"cursor-changed",G_CALLBACK(yon_on_packages_chosen),widgets);
g_signal_connect(G_OBJECT(widgets->AboutMenuItem),"activate",G_CALLBACK(on_about),widgets);
g_signal_connect(G_OBJECT(widgets->DocumentationMenuItem),"activate",G_CALLBACK(on_open_documentation_confirmation),WIKI_LINK);

@ -728,6 +728,7 @@ typedef struct {
GSequence *advanced_partition_order;
GtkTreeStore *PackagesList;
GtkWidget *PackagesTree;
GFile *install_progress_file;
@ -1341,3 +1342,5 @@ void on_layout_selection_changed(GtkTreeView *self,main_window *widgets);
void on_num_lock_changed(GtkComboBox *self, main_window *);
void on_model_changed(GtkComboBoxText *self, main_window *widgets);
void on_options_save(GtkWidget *,main_window *widgets);
void yon_packages_tab_init(main_window *widgets);
void yon_on_packages_chosen(GtkWidget *, main_window *widgets);

@ -153,7 +153,18 @@
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<object class="GtkListStore" id="Packages"/>
<object class="GtkTreeStore" id="Packages">
<columns>
<!-- column-name Chosen -->
<column type="gboolean"/>
<!-- column-name Name -->
<column type="gchararray"/>
<!-- column-name Description -->
<column type="gchararray"/>
<!-- column-name ChosenVisible -->
<column type="gboolean"/>
</columns>
</object>
<object class="GtkListStore" id="PacmanSoftwareAllList">
<columns>
<!-- column-name Chosen -->
@ -6342,13 +6353,37 @@ agreement</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<child>
<object class="GtkTreeView">
<object class="GtkTreeView" id="PackagesTree">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="model">Packages</property>
<property name="headers-visible">False</property>
<child internal-child="selection">
<object class="GtkTreeSelection"/>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">column</property>
<child>
<object class="GtkCellRendererToggle"/>
<attributes>
<attribute name="visible">3</attribute>
<attribute name="active">0</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">column</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">1</attribute>
</attributes>
</child>
</object>
</child>
</object>
</child>
</object>

Loading…
Cancel
Save