return NULL;
}
+void nbconfig_update_lists(NotebookConfigDialog *wdata) {
+ CxIterator i = cxListIterator(wdata->groups);
+ cx_foreach(Resource *, res, i) {
+ ui_list_append(wdata->tab1_groups, res);
+ ui_list_append(wdata->tab2_groups, res);
+ }
+
+ i = cxListIterator(wdata->notebooks);
+ cx_foreach(Resource *, res, i) {
+ ui_list_append(wdata->tab2_notebooks, res);
+ }
+
+ i = cxListIterator(wdata->repositories);
+ //
+
+ ui_list_update(wdata->tab1_groups);
+ ui_list_update(wdata->tab1_repositories);
+ ui_list_update(wdata->tab2_groups);
+ ui_list_update(wdata->tab2_notebooks);
+ ui_list_update(wdata->tab2_repositories);
+}
+
+static void nbconfig_tab1_load_group(NotebookConfigDialog *wdata, Resource *res) {
+ Notebook *nb = res->notebook;
+
+ ui_set(wdata->tab1_group_name, res->nodename);
+}
+
+static void nbconfig_tab2_load_notebook(NotebookConfigDialog *wdata, Resource *res) {
+ Notebook *nb = res->notebook;
+ CxHashKey key = cx_hash_key(&res->resource_id, sizeof(res->resource_id));
+ Resource *parent = cxMapGet(wdata->notebook_parents, key);
+
+ ui_set(wdata->tab2_notebook_name, res->nodename);
+ if(parent) {
+ size_t index = cxListFind(wdata->groups, parent);
+ ui_list_setselection(wdata->tab2_groups, index);
+ }
+}
+
+static int nbconfig_list_activate_event(UiEvent *event, UiList *list, void **listelm) {
+ NotebookConfigDialog *wdata = event->window;
+ UiListSelection *sel = event->eventdata;
+ if(sel->count != 1) {
+ return 1; // should not happen
+ }
+
+ *listelm = ui_list_get(list, sel->rows[0]);
+ return 0;
+}
+
+static void nbconfig_grouplist_activate(UiEvent *event, void *userdata) {
+ NotebookConfigDialog *wdata = event->window;
+ Resource *res;
+ if(nbconfig_list_activate_event(event, wdata->tab1_groups, (void**)&res)) {
+ return;
+ }
+ nbconfig_tab1_load_group(wdata, res);
+}
+
+static void nbconfig_notebooklist_activate(UiEvent *event, void *userdata) {
+ NotebookConfigDialog *wdata = event->window;
+ Resource *res;
+ if(nbconfig_list_activate_event(event, wdata->tab2_notebooks, (void**)&res)) {
+ return;
+ }
+ nbconfig_tab2_load_notebook(wdata, res);
+}
+
void action_notebook_config(UiEvent *event, void *userdata) {
NoteStore *store = note_store_get();
// TODO: check store->root and show different dialog, when root is missing
UiObject *obj = ui_simple_window("Notebooks", NULL);
+ const CxAllocator *a = ui_allocator(obj->ctx);
NotebookConfigDialog *wdata = ui_malloc(obj->ctx, sizeof(NotebookConfigDialog));
+ memset(wdata, 0, sizeof(NotebookConfigDialog));
+ obj->window = wdata;
+
wdata->tab1_groups = ui_list_new(obj->ctx, NULL);
+ wdata->tab1_group_name = ui_string_new(obj->ctx, NULL);
wdata->tab1_types = ui_list_new(obj->ctx, NULL);
wdata->tab1_repositories = ui_list_new(obj->ctx, NULL);
wdata->tab2_notebooks = ui_list_new(obj->ctx, NULL);
wdata->tab2_groups = ui_list_new(obj->ctx, NULL);
+ wdata->tab2_notebook_name = ui_string_new(obj->ctx, NULL);
wdata->tab2_types = ui_list_new(obj->ctx, NULL);
wdata->tab2_repositories = ui_list_new(obj->ctx, NULL);
+ wdata->repositories = cxArrayListCreate(a, NULL, CX_STORE_POINTERS, 32);
+ wdata->groups = cxArrayListCreate(a, NULL, CX_STORE_POINTERS, 32);
+ wdata->notebooks = cxArrayListCreate(a, NULL, CX_STORE_POINTERS, 32);
+ wdata->notebook_parents = cxHashMapCreate(a, CX_STORE_POINTERS, 32);
+
// fill data
+ Resource *group1 = NULL;
+ Resource *notebook1 = NULL;
CxIterator i = cxListIterator(store->root->children);
cx_foreach(Resource *, res, i) {
- ui_list_append(wdata->tab1_groups, res);
- ui_list_append(wdata->tab2_groups, res);
+ cxListAdd(wdata->groups, res);
+ if(!group1) {
+ group1 = res;
+ }
CxIterator k = cxListIterator(res->children);
cx_foreach(Resource *, nb, k) {
- ui_list_append(wdata->tab2_notebooks, nb);
+ cxListAdd(wdata->notebooks, nb);
+ CxHashKey key = cx_hash_key(&nb->resource_id, sizeof(nb->resource_id));
+ cxMapPut(wdata->notebook_parents, key, res);
+ if(!notebook1) {
+ notebook1 = nb;
+ }
}
}
+ nbconfig_update_lists(wdata);
+
+ ui_list_append(wdata->tab1_types, "Notes");
+ ui_list_append(wdata->tab1_types, "Feed");
+
+ ui_list_append(wdata->tab2_types, "Notes");
+ ui_list_append(wdata->tab2_types, "Feed");
// UI
ui_tab(obj, "Groups") {
ui_hbox(obj, .margin = 10, .spacing = 10, .fill = UI_ON) {
ui_vbox(obj, .fill = UI_OFF) {
- ui_listview(obj, .list = wdata->tab1_groups, .getvalue = reslist_getvalue, .fill = UI_ON);
+ ui_listview(obj, .list = wdata->tab1_groups, .getvalue = reslist_getvalue, .fill = UI_ON, .onactivate = nbconfig_grouplist_activate);
ui_hbox(obj, .fill = UI_OFF) {
ui_button(obj, .icon = UI_ICON_NEW_FOLDER);
ui_button(obj, .icon = UI_ICON_DELETE);
ui_grid(obj, .columnspacing = 10, .rowspacing = 10, .fill = UI_ON, .def_vfill = TRUE) {
ui_rlabel(obj, .label = "Name");
- ui_textfield(obj, .varname = "todo1");
- ui_newline(obj);
-
- ui_rlabel(obj, .label = "Type");
- ui_combobox(obj, .list = wdata->tab1_types);
+ ui_textfield(obj, .value = wdata->tab1_group_name);
ui_newline(obj);
- ui_rlabel(obj, .label = "Repository");
+ ui_rlabel(obj, .label = "Default Repository");
ui_combobox(obj, .list = wdata->tab1_repositories);
ui_newline(obj);
+
+ ui_rlabel(obj, .label = "Default Notebook Type");
+ ui_combobox(obj, .list = wdata->tab1_types);
+ ui_newline(obj);
}
}
}
ui_tab(obj, "Notebooks") {
ui_hbox(obj, .margin = 10, .spacing = 10, .fill = UI_ON) {
ui_vbox(obj, .fill = UI_OFF) {
- ui_listview(obj, .list = wdata->tab2_notebooks, .getvalue = reslist_getvalue, .fill = UI_ON);
+ ui_listview(obj, .list = wdata->tab2_notebooks, .getvalue = reslist_getvalue, .fill = UI_ON, .onactivate = nbconfig_notebooklist_activate);
ui_hbox(obj, .fill = UI_OFF) {
ui_button(obj, .icon = UI_ICON_NEW_FOLDER);
ui_button(obj, .icon = UI_ICON_DELETE);
ui_newline(obj);
ui_rlabel(obj, .label = "Name");
- ui_textfield(obj, .varname = "todo1");
- ui_newline(obj);
-
- ui_rlabel(obj, .label = "Type");
- ui_combobox(obj, .list = wdata->tab2_types);
+ ui_textfield(obj, .value = wdata->tab2_notebook_name);
ui_newline(obj);
ui_rlabel(obj, .label = "Repository");
ui_combobox(obj, .list = wdata->tab1_repositories);
ui_newline(obj);
+
+ ui_rlabel(obj, .label = "Type");
+ ui_combobox(obj, .list = wdata->tab2_types);
+ ui_newline(obj);
}
}
}
}
}
+ ui_list_setselection(wdata->tab1_groups, 0);
+ ui_list_setselection(wdata->tab2_notebooks, 0);
+ if(group1) {
+ nbconfig_tab1_load_group(wdata, group1);
+ }
+ if(notebook1) {
+ nbconfig_tab2_load_notebook(wdata, notebook1);
+ }
ui_show(obj);
}