]> uap-core.de Git - mizunara.git/commitdiff
add sidebar
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Tue, 7 Jan 2025 22:23:04 +0000 (23:23 +0100)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Tue, 7 Jan 2025 22:23:04 +0000 (23:23 +0100)
mizunara/application.h
mizunara/window.c
mizunara/window.h

index 7fd12bc1ca9fa0781fd1e76310dd7eb9b62117bf..25e00d28482900515b57aca9e9c204e2efb62b1e 100644 (file)
@@ -39,7 +39,15 @@ extern "C" {
  * main window data
  */
 typedef struct MainWindow {
-    int a;
+    /*
+     * sidebar default directories
+     */
+    UiList *default_dirs;
+    
+    /*
+     * sidebar xdg user directories
+     */
+    UiList *user_dirs;
 } MainWindow;
 
 /*
index 1c627f9a5d6335cbe8e6c989724237158b890a0b..a03e13cf9f311f4136778cc4ef59a956c9463c27 100644 (file)
@@ -37,6 +37,7 @@ UiObject* window_create(const char *url) {
     // create window data object
     MainWindow *wdata = ui_malloc(obj->ctx, sizeof(MainWindow));
     memset(wdata, 0, sizeof(MainWindow));
+    windowdata_init(obj->ctx, wdata);
     obj->window = wdata;
     
     // create browser document
@@ -44,5 +45,45 @@ UiObject* window_create(const char *url) {
     FileBrowser *browser = filebrowser_new(url);
     ui_attach_document(obj->ctx, browser);
     
+    // add UI
+    ui_sidebar0(obj) {
+        UiSubList sublists[] = {
+                { .value = wdata->default_dirs, .userdata = window_sidebar_default_dirs_item },
+                { .value = wdata->user_dirs, .userdata = window_sidebar_user_dirs_item, .separator = TRUE }
+        };
+        ui_sourcelist(obj, .sublists = sublists, .numsublists = 2, .getvalue = window_sidebar_getvalue);
+    }
+    
+    
     return obj;
 }
+
+
+void windowdata_init(UiContext *ctx, MainWindow *win) {
+    win->default_dirs = ui_list_new(ctx, NULL);
+    win->user_dirs = ui_list_new(ctx, NULL);
+    
+    // TODO: init lists
+    ui_list_append(win->default_dirs, "Test");
+    ui_list_append(win->user_dirs, "Test");
+}
+
+/*
+ * callback for ui_sourcelist
+ * 
+ * sublist_userdata: sublist identifier (sidebar_list_default_dirs, sidebar_list_user_dirs)
+ */
+void window_sidebar_getvalue(void *sublist_userdata, void *rowdata, int index, UiSubListItem *item) {
+    ui_sublist_getvalue_func getvalue = sublist_userdata;
+    getvalue(NULL, rowdata, index, item);
+}
+
+void window_sidebar_default_dirs_item(void *sublist_userdata, void *rowdata, int index, UiSubListItem *item) {
+    item->icon = strdup("user-home-symbolic");
+    item->label = strdup("Home");
+}
+
+void window_sidebar_user_dirs_item(void *sublist_userdata, void *rowdata, int index, UiSubListItem *item) {
+    item->icon = strdup("folder-documents-symbolic");
+    item->label = strdup("Documents");
+}
index 20ee45897c946f6d4b45baef0d5642e4248913a6..a5b46bf9610fdb8e2916fff7df89e054ea15fbdd 100644 (file)
@@ -37,6 +37,13 @@ extern "C" {
 
 UiObject* window_create(const char *url);
 
+void windowdata_init(UiContext *ctx, MainWindow *win);
+
+void window_sidebar_getvalue(void *sublist_userdata, void *rowdata, int index, UiSubListItem *item);
+
+void window_sidebar_default_dirs_item(void *sublist_userdata, void *rowdata, int index, UiSubListItem *item);
+void window_sidebar_user_dirs_item(void *sublist_userdata, void *rowdata, int index, UiSubListItem *item);
+
 
 #ifdef __cplusplus
 }