From 85fb6425ccc6bb2e42b05a99e249ac84388c9241 Mon Sep 17 00:00:00 2001 From: Olaf Wintermann Date: Sun, 4 May 2025 12:58:40 +0200 Subject: [PATCH] add UI for "add notebook" dialog --- application/window.c | 71 +++++++++++++++++++++++++++++++++++++++++++- application/window.h | 16 ++++++++++ 2 files changed, 86 insertions(+), 1 deletion(-) diff --git a/application/window.c b/application/window.c index 80fd2ad..dfd9912 100644 --- a/application/window.c +++ b/application/window.c @@ -53,7 +53,9 @@ void window_create() { ui_sidebar(obj) { ui_sourcelist(obj, .dynamic_sublist = wdata->notebooks, .getvalue = window_sidebar_getvalue, .onactivate = action_notebook_selected, .fill = UI_ON); ui_hbox(obj, .spacing = 2, .fill = UI_OFF) { - ui_button(obj, .icon = "folder-new-symbolic", .style_class = "flat"); + ui_button(obj, .icon = "folder-new-symbolic", .style_class = "flat", .onclick = action_notebook_add); + ui_label(obj, .fill = UI_ON); + ui_button(obj, .icon = "emblem-system-symbolic", .style_class = "flat", .onclick = action_notebook_config); } } @@ -254,6 +256,73 @@ void window_navigate(MainWindow *window, NavStack *nav) { +static void action_nnd_new_group(UiEvent *event, void *userdata) { + NewNotebookDialog *wdata = event->window; + if(event->set) { + return; + } + + ui_set(wdata->gs_new_group, event->intval); + ui_set(wdata->gn_new_group, event->intval); + if(event->intval) { + wdata->new_group = 1; + ui_set_group(event->obj->ctx, NEWNOTEBOOK_DIALOG_STATE_NEW_GROUP); + ui_unset_group(event->obj->ctx, NEWNOTEBOOK_DIALOG_STATE_SELECT_GROUP); + } else { + wdata->new_group = 0; + ui_set_group(event->obj->ctx, NEWNOTEBOOK_DIALOG_STATE_SELECT_GROUP); + ui_unset_group(event->obj->ctx, NEWNOTEBOOK_DIALOG_STATE_NEW_GROUP); + } +} + +void action_notebook_add(UiEvent *event, void *userdata) { + UiObject *obj = ui_dialog_window(event->obj, + .modal = UI_ON, + .show_closebutton = UI_OFF, + .title = "Add Notebook", + .lbutton1 = "Add", + .rbutton4 = "Cancel", + .default_button = 1); + ui_set_group(obj->ctx, NEWNOTEBOOK_DIALOG_STATE_SELECT_GROUP); + + NewNotebookDialog *wdata = ui_malloc(obj->ctx, sizeof(NewNotebookDialog)); + wdata->groups = ui_list_new(obj->ctx, NULL); + wdata->notebook_name = ui_string_new(obj->ctx, NULL); + wdata->gs_new_group = ui_int_new(obj->ctx, NULL); + wdata->gn_new_group = ui_int_new(obj->ctx, NULL); + wdata->new_group = 0; + obj->window = wdata; + + ui_grid(obj, .margin = 10, .columnspacing = 10, .rowspacing = 10, .def_vfill = TRUE, .fill = UI_ON) { + UIWIDGET gs_label = ui_rlabel(obj, .label = "Group"); + UIWIDGET gs_list = ui_combobox(obj, .varname = "notebook_groups", .hexpand = TRUE, .hfill = TRUE); + UIWIDGET gs_button = ui_togglebutton(obj, .label = "New Group", .value = wdata->gs_new_group, .onchange = action_nnd_new_group); + ui_newline(obj); + ui_widget_set_groups(obj->ctx, gs_label, (ui_enablefunc)ui_set_visible, NEWNOTEBOOK_DIALOG_STATE_SELECT_GROUP, -1); + ui_widget_set_groups(obj->ctx, gs_list, (ui_enablefunc)ui_set_visible, NEWNOTEBOOK_DIALOG_STATE_SELECT_GROUP, -1); + ui_widget_set_groups(obj->ctx, gs_button, (ui_enablefunc)ui_set_visible, NEWNOTEBOOK_DIALOG_STATE_SELECT_GROUP, -1); + + UIWIDGET gn_label = ui_rlabel(obj, .label = "Group"); + UIWIDGET gn_textfield = ui_textfield(obj, .varname = "notebook_group_name", .hexpand = TRUE, .hfill = TRUE); + UIWIDGET gn_button = ui_togglebutton(obj, .label = "New Group", .value = wdata->gn_new_group, .onchange = action_nnd_new_group); + ui_newline(obj); + + ui_widget_set_groups(obj->ctx, gn_label, (ui_enablefunc)ui_set_visible, NEWNOTEBOOK_DIALOG_STATE_NEW_GROUP, -1); + ui_widget_set_groups(obj->ctx, gn_textfield, (ui_enablefunc)ui_set_visible, NEWNOTEBOOK_DIALOG_STATE_NEW_GROUP, -1); + ui_widget_set_groups(obj->ctx, gn_button, (ui_enablefunc)ui_set_visible, NEWNOTEBOOK_DIALOG_STATE_NEW_GROUP, -1); + + ui_newline(obj); + ui_rlabel(obj, .label = "Name"); + ui_textfield(obj, .varname = "notebook_name", .colspan = 2, .hfill = TRUE); + } + + ui_show(obj); +} + +void action_notebook_config(UiEvent *event, void *userdata) { + +} + void action_notebook_selected(UiEvent *event, void *userdata) { UiSubListEventData *data = event->eventdata; MainWindow *window = event->window; diff --git a/application/window.h b/application/window.h index 4ce670e..29be0bc 100644 --- a/application/window.h +++ b/application/window.h @@ -35,10 +35,23 @@ #ifdef __cplusplus extern "C" { #endif + +#define NEWNOTEBOOK_DIALOG_STATE_SELECT_GROUP 1 +#define NEWNOTEBOOK_DIALOG_STATE_NEW_GROUP 2 #define ACTION_DATA_INSERT_LIST_ORDERED (void*)(intptr_t)1 #define ACTION_DATA_INSERT_LIST_UNORDERED (void*)(intptr_t)0 + +typedef struct NewNotebookDialog { + UiList *groups; + UiString *group_name; + UiString *notebook_name; + UiInteger *gs_new_group; + UiInteger *gn_new_group; + int new_group; +} NewNotebookDialog; + void window_create(); MainWindow* window_init_data(UiObject *obj); @@ -55,6 +68,9 @@ void update_sublists(UiContext *ctx, UiList *sublists); void* window_notelist_getvalue(void *data, int col); +void action_notebook_add(UiEvent *event, void *userdata); +void action_notebook_config(UiEvent *event, void *userdata); + void action_notebook_selected(UiEvent *event, void *userdata); void action_note_selected(UiEvent *event, void *userdata); void action_note_activated(UiEvent *event, void *userdata); -- 2.43.5