diff options
author | Jaakko Keränen <jaakko.keranen@iki.fi> | 2020-08-14 21:49:59 +0300 |
---|---|---|
committer | Jaakko Keränen <jaakko.keranen@iki.fi> | 2020-08-14 21:49:59 +0300 |
commit | f01dd9cf06774173194fe4fcc5fcad1f6d87d2d9 (patch) | |
tree | 8718da20725c093431c2b6a6dde16ff0a7df769a | |
parent | 639c0dd31d299aaffadbb093a48eaed45e62f81b (diff) |
Editing bookmarks
-rw-r--r-- | src/bookmarks.c | 4 | ||||
-rw-r--r-- | src/bookmarks.h | 1 | ||||
-rw-r--r-- | src/ui/sidebarwidget.c | 24 | ||||
-rw-r--r-- | src/ui/util.c | 46 | ||||
-rw-r--r-- | src/ui/util.h | 1 |
5 files changed, 65 insertions, 11 deletions
diff --git a/src/bookmarks.c b/src/bookmarks.c index 29b3d836..795e0d44 100644 --- a/src/bookmarks.c +++ b/src/bookmarks.c | |||
@@ -127,6 +127,10 @@ iBool remove_Bookmarks(iBookmarks *d, uint32_t id) { | |||
127 | return iFalse; | 127 | return iFalse; |
128 | } | 128 | } |
129 | 129 | ||
130 | iBookmark *get_Bookmarks(iBookmarks *d, uint32_t id) { | ||
131 | return (iBookmark *) value_Hash(&d->bookmarks, id); | ||
132 | } | ||
133 | |||
130 | const iPtrArray *list_Bookmarks(const iBookmarks *d, iBookmarksFilterFunc filter, | 134 | const iPtrArray *list_Bookmarks(const iBookmarks *d, iBookmarksFilterFunc filter, |
131 | iBookmarksCompareFunc cmp) { | 135 | iBookmarksCompareFunc cmp) { |
132 | iPtrArray *list = collectNew_PtrArray(); | 136 | iPtrArray *list = collectNew_PtrArray(); |
diff --git a/src/bookmarks.h b/src/bookmarks.h index 336e542a..e05aefd3 100644 --- a/src/bookmarks.h +++ b/src/bookmarks.h | |||
@@ -28,6 +28,7 @@ void save_Bookmarks (const iBookmarks *, const char *dirPath); | |||
28 | 28 | ||
29 | void add_Bookmarks (iBookmarks *, const iString *url, const iString *title, const iString *tags, iChar icon); | 29 | void add_Bookmarks (iBookmarks *, const iString *url, const iString *title, const iString *tags, iChar icon); |
30 | iBool remove_Bookmarks (iBookmarks *, uint32_t id); | 30 | iBool remove_Bookmarks (iBookmarks *, uint32_t id); |
31 | iBookmark *get_Bookmarks (iBookmarks *, uint32_t id); | ||
31 | 32 | ||
32 | typedef iBool (*iBookmarksFilterFunc) (const iBookmark *); | 33 | typedef iBool (*iBookmarksFilterFunc) (const iBookmark *); |
33 | typedef int (*iBookmarksCompareFunc)(const iBookmark **, const iBookmark **); | 34 | typedef int (*iBookmarksCompareFunc)(const iBookmark **, const iBookmark **); |
diff --git a/src/ui/sidebarwidget.c b/src/ui/sidebarwidget.c index 7729ccca..7d0e8b42 100644 --- a/src/ui/sidebarwidget.c +++ b/src/ui/sidebarwidget.c | |||
@@ -76,8 +76,12 @@ static void clearItems_SidebarWidget_(iSidebarWidget *d) { | |||
76 | 76 | ||
77 | static iRect contentBounds_SidebarWidget_(const iSidebarWidget *d) { | 77 | static iRect contentBounds_SidebarWidget_(const iSidebarWidget *d) { |
78 | iRect bounds = bounds_Widget(constAs_Widget(d)); | 78 | iRect bounds = bounds_Widget(constAs_Widget(d)); |
79 | adjustEdges_Rect(&bounds, as_Widget(d->modeButtons[0])->rect.size.y + gap_UI, | 79 | const iWidget *scroll = constAs_Widget(d->scroll); |
80 | -constAs_Widget(d->scroll)->rect.size.x, -gap_UI, 0); | 80 | adjustEdges_Rect(&bounds, |
81 | as_Widget(d->modeButtons[0])->rect.size.y + gap_UI, | ||
82 | isVisible_Widget(scroll) ? -scroll->rect.size.x : 0, | ||
83 | -gap_UI, | ||
84 | 0); | ||
81 | return bounds; | 85 | return bounds; |
82 | } | 86 | } |
83 | 87 | ||
@@ -318,6 +322,15 @@ void setWidth_SidebarWidget(iSidebarWidget *d, int width) { | |||
318 | iBool handleBookmarkEditorCommands_SidebarWidget_(iWidget *editor, const char *cmd) { | 322 | iBool handleBookmarkEditorCommands_SidebarWidget_(iWidget *editor, const char *cmd) { |
319 | iSidebarWidget *d = findWidget_App("sidebar"); | 323 | iSidebarWidget *d = findWidget_App("sidebar"); |
320 | if (equal_Command(cmd, "bmed.accept") || equal_Command(cmd, "cancel")) { | 324 | if (equal_Command(cmd, "bmed.accept") || equal_Command(cmd, "cancel")) { |
325 | if (equal_Command(cmd, "bmed.accept")) { | ||
326 | const iSidebarItem *item = hoverItem_SidebarWidget_(d); | ||
327 | iAssert(item); /* hover item cannot have been changed */ | ||
328 | iBookmark *bm = get_Bookmarks(bookmarks_App(), item->id); | ||
329 | set_String(&bm->title, text_InputWidget(findChild_Widget(editor, "bmed.title"))); | ||
330 | set_String(&bm->url, text_InputWidget(findChild_Widget(editor, "bmed.url"))); | ||
331 | set_String(&bm->tags, text_InputWidget(findChild_Widget(editor, "bmed.tags"))); | ||
332 | postCommand_App("bookmarks.changed"); | ||
333 | } | ||
321 | setFlags_Widget(as_Widget(d), disabled_WidgetFlag, iFalse); | 334 | setFlags_Widget(as_Widget(d), disabled_WidgetFlag, iFalse); |
322 | destroy_Widget(editor); | 335 | destroy_Widget(editor); |
323 | return iTrue; | 336 | return iTrue; |
@@ -402,9 +415,10 @@ static iBool processEvent_SidebarWidget_(iSidebarWidget *d, const SDL_Event *ev) | |||
402 | if (d->mode == bookmarks_SidebarMode && item) { | 415 | if (d->mode == bookmarks_SidebarMode && item) { |
403 | setFlags_Widget(w, disabled_WidgetFlag, iTrue); | 416 | setFlags_Widget(w, disabled_WidgetFlag, iTrue); |
404 | iWidget *dlg = makeBookmarkEditor_Widget(); | 417 | iWidget *dlg = makeBookmarkEditor_Widget(); |
405 | setText_InputWidget(findChild_Widget(dlg, "bmed.title"), &item->label); | 418 | iBookmark *bm = get_Bookmarks(bookmarks_App(), item->id); |
406 | setText_InputWidget(findChild_Widget(dlg, "bmed.url"), &item->url); | 419 | setText_InputWidget(findChild_Widget(dlg, "bmed.title"), &bm->title); |
407 | //setText_InputWidget(findChild_Widget(dlg, "bmed.tags"), &item->) | 420 | setText_InputWidget(findChild_Widget(dlg, "bmed.url"), &bm->url); |
421 | setText_InputWidget(findChild_Widget(dlg, "bmed.tags"), &bm->tags); | ||
408 | setCommandHandler_Widget(dlg, handleBookmarkEditorCommands_SidebarWidget_); | 422 | setCommandHandler_Widget(dlg, handleBookmarkEditorCommands_SidebarWidget_); |
409 | } | 423 | } |
410 | return iTrue; | 424 | return iTrue; |
diff --git a/src/ui/util.c b/src/ui/util.c index 185d37f3..05b3c930 100644 --- a/src/ui/util.c +++ b/src/ui/util.c | |||
@@ -168,8 +168,9 @@ iWidget *makeMenu_Widget(iWidget *parent, const iMenuItem *items, size_t n) { | |||
168 | setFrameColor_Widget(menu, black_ColorId); | 168 | setFrameColor_Widget(menu, black_ColorId); |
169 | setBackgroundColor_Widget(menu, gray25_ColorId); | 169 | setBackgroundColor_Widget(menu, gray25_ColorId); |
170 | setFlags_Widget(menu, | 170 | setFlags_Widget(menu, |
171 | keepOnTop_WidgetFlag | hidden_WidgetFlag | arrangeVertical_WidgetFlag | | 171 | keepOnTop_WidgetFlag | collapse_WidgetFlag | hidden_WidgetFlag | |
172 | arrangeSize_WidgetFlag | resizeChildrenToWidestChild_WidgetFlag, | 172 | arrangeVertical_WidgetFlag | arrangeSize_WidgetFlag | |
173 | resizeChildrenToWidestChild_WidgetFlag, | ||
173 | iTrue); | 174 | iTrue); |
174 | for (size_t i = 0; i < n; ++i) { | 175 | for (size_t i = 0; i < n; ++i) { |
175 | const iMenuItem *item = &items[i]; | 176 | const iMenuItem *item = &items[i]; |
@@ -659,10 +660,8 @@ iWidget *makeQuestion_Widget(const char *title, | |||
659 | 660 | ||
660 | void setToggle_Widget(iWidget *d, iBool active) { | 661 | void setToggle_Widget(iWidget *d, iBool active) { |
661 | setFlags_Widget(d, selected_WidgetFlag, active); | 662 | setFlags_Widget(d, selected_WidgetFlag, active); |
662 | updateText_LabelWidget( | 663 | updateText_LabelWidget((iLabelWidget *) d, |
663 | (iLabelWidget *) d, | 664 | collectNewFormat_String("%s", isSelected_Widget(d) ? "YES" : "NO")); |
664 | collectNewFormat_String( | ||
665 | "%s", isSelected_Widget(d) ? "YES" : "NO")); | ||
666 | } | 665 | } |
667 | 666 | ||
668 | static iBool toggleHandler_(iWidget *d, const char *cmd) { | 667 | static iBool toggleHandler_(iWidget *d, const char *cmd) { |
@@ -709,3 +708,38 @@ iWidget *makePreferences_Widget(void) { | |||
709 | centerSheet_Widget(dlg); | 708 | centerSheet_Widget(dlg); |
710 | return dlg; | 709 | return dlg; |
711 | } | 710 | } |
711 | |||
712 | iWidget *makeBookmarkEditor_Widget(void) { | ||
713 | iWidget *dlg = makeSheet_Widget("bmed"); | ||
714 | addChild_Widget(dlg, iClob(new_LabelWidget(cyan_ColorEscape "EDIT BOOKMARK", 0, 0, NULL))); | ||
715 | iWidget *page = new_Widget(); | ||
716 | addChild_Widget(dlg, iClob(page)); | ||
717 | setFlags_Widget(page, arrangeHorizontal_WidgetFlag | arrangeSize_WidgetFlag, iTrue); | ||
718 | iWidget *headings = addChildFlags_Widget( | ||
719 | page, iClob(new_Widget()), arrangeVertical_WidgetFlag | arrangeSize_WidgetFlag); | ||
720 | iWidget *values = addChildFlags_Widget( | ||
721 | page, iClob(new_Widget()), arrangeVertical_WidgetFlag | arrangeSize_WidgetFlag); | ||
722 | iInputWidget *inputs[4]; | ||
723 | addChild_Widget(headings, iClob(makeHeading_Widget("Title:"))); | ||
724 | setId_Widget(addChild_Widget(values, iClob(inputs[0] = new_InputWidget(0))), "bmed.title"); | ||
725 | addChild_Widget(headings, iClob(makeHeading_Widget("URL:"))); | ||
726 | setId_Widget(addChild_Widget(values, iClob(inputs[1] = new_InputWidget(0))), "bmed.url"); | ||
727 | addChild_Widget(headings, iClob(makeHeading_Widget("Tags:"))); | ||
728 | setId_Widget(addChild_Widget(values, iClob(inputs[2] = new_InputWidget(0))), "bmed.tags"); | ||
729 | arrange_Widget(dlg); | ||
730 | for (int i = 0; i < 3; ++i) { | ||
731 | as_Widget(inputs[i])->rect.size.x = dlg->rect.size.x - headings->rect.size.x - 3 * gap_UI; | ||
732 | } | ||
733 | iWidget *div = new_Widget(); { | ||
734 | setFlags_Widget(div, arrangeHorizontal_WidgetFlag | arrangeSize_WidgetFlag, iTrue); | ||
735 | addChild_Widget(div, iClob(new_LabelWidget("Cancel", SDLK_ESCAPE, 0, "cancel"))); | ||
736 | addChild_Widget( | ||
737 | div, | ||
738 | iClob(new_LabelWidget( | ||
739 | orange_ColorEscape "Save", SDLK_RETURN, KMOD_PRIMARY, "bmed.accept"))); | ||
740 | } | ||
741 | addChild_Widget(dlg, iClob(div)); | ||
742 | addChild_Widget(get_Window()->root, iClob(dlg)); | ||
743 | centerSheet_Widget(dlg); | ||
744 | return dlg; | ||
745 | } | ||
diff --git a/src/ui/util.h b/src/ui/util.h index b67f0a87..6595b94c 100644 --- a/src/ui/util.h +++ b/src/ui/util.h | |||
@@ -121,3 +121,4 @@ void makeMessage_Widget (const char *title, const char *msg); | |||
121 | iWidget * makeQuestion_Widget (const char *title, const char *msg, | 121 | iWidget * makeQuestion_Widget (const char *title, const char *msg, |
122 | const char *labels[], const char *commands[], size_t count); | 122 | const char *labels[], const char *commands[], size_t count); |
123 | iWidget * makePreferences_Widget (void); | 123 | iWidget * makePreferences_Widget (void); |
124 | iWidget * makeBookmarkEditor_Widget(void); | ||