diff options
Diffstat (limited to 'src/ui/sidebarwidget.c')
-rw-r--r-- | src/ui/sidebarwidget.c | 52 |
1 files changed, 32 insertions, 20 deletions
diff --git a/src/ui/sidebarwidget.c b/src/ui/sidebarwidget.c index 7d0e8b42..de3cfd86 100644 --- a/src/ui/sidebarwidget.c +++ b/src/ui/sidebarwidget.c | |||
@@ -102,6 +102,10 @@ static void updateVisible_SidebarWidget_(iSidebarWidget *d) { | |||
102 | : 0); | 102 | : 0); |
103 | } | 103 | } |
104 | 104 | ||
105 | static int cmpTitle_Bookmark_(const iBookmark **a, const iBookmark **b) { | ||
106 | return cmpStringCase_String(&(*a)->title, &(*b)->title); | ||
107 | } | ||
108 | |||
105 | static void updateItems_SidebarWidget_(iSidebarWidget *d) { | 109 | static void updateItems_SidebarWidget_(iSidebarWidget *d) { |
106 | clearItems_SidebarWidget_(d); | 110 | clearItems_SidebarWidget_(d); |
107 | destroy_Widget(d->menu); | 111 | destroy_Widget(d->menu); |
@@ -122,7 +126,7 @@ static void updateItems_SidebarWidget_(iSidebarWidget *d) { | |||
122 | break; | 126 | break; |
123 | } | 127 | } |
124 | case bookmarks_SidebarMode: { | 128 | case bookmarks_SidebarMode: { |
125 | iConstForEach(PtrArray, i, list_Bookmarks(bookmarks_App(), NULL, NULL)) { | 129 | iConstForEach(PtrArray, i, list_Bookmarks(bookmarks_App(), NULL, cmpTitle_Bookmark_)) { |
126 | const iBookmark *bm = i.ptr; | 130 | const iBookmark *bm = i.ptr; |
127 | iSidebarItem item; | 131 | iSidebarItem item; |
128 | init_SidebarItem(&item); | 132 | init_SidebarItem(&item); |
@@ -130,11 +134,12 @@ static void updateItems_SidebarWidget_(iSidebarWidget *d) { | |||
130 | item.icon = bm->icon; | 134 | item.icon = bm->icon; |
131 | set_String(&item.url, &bm->url); | 135 | set_String(&item.url, &bm->url); |
132 | set_String(&item.label, &bm->title); | 136 | set_String(&item.label, &bm->title); |
133 | iDate date; | 137 | // iDate date; |
134 | init_Date(&date, &bm->when); | 138 | // init_Date(&date, &bm->when); |
135 | iString *ds = format_Date(&date, "%Y %b %d"); | 139 | // iString *ds = format_Date(&date, "%Y %b %d"); |
136 | set_String(&item.meta, ds); | 140 | // set_String(&item.meta, ds); |
137 | delete_String(ds); | 141 | set_String(&item.meta, &bm->tags); |
142 | // delete_String(ds); | ||
138 | pushBack_Array(&d->items, &item); | 143 | pushBack_Array(&d->items, &item); |
139 | } | 144 | } |
140 | d->menu = makeMenu_Widget( | 145 | d->menu = makeMenu_Widget( |
@@ -142,7 +147,7 @@ static void updateItems_SidebarWidget_(iSidebarWidget *d) { | |||
142 | (iMenuItem[]){ { "Edit Bookmark...", 0, 0, "bookmark.edit" }, | 147 | (iMenuItem[]){ { "Edit Bookmark...", 0, 0, "bookmark.edit" }, |
143 | { "Copy URL", 0, 0, "bookmark.copy" }, | 148 | { "Copy URL", 0, 0, "bookmark.copy" }, |
144 | { "---", 0, 0, NULL }, | 149 | { "---", 0, 0, NULL }, |
145 | { orange_ColorEscape "Delete Bookmark", 0, 0, "bookmark.delete" } }, | 150 | { uiTextCaution_ColorEscape "Delete Bookmark", 0, 0, "bookmark.delete" } }, |
146 | 4); | 151 | 4); |
147 | break; | 152 | break; |
148 | } | 153 | } |
@@ -161,7 +166,7 @@ void setMode_SidebarWidget(iSidebarWidget *d, enum iSidebarMode mode) { | |||
161 | for (enum iSidebarMode i = 0; i < max_SidebarMode; i++) { | 166 | for (enum iSidebarMode i = 0; i < max_SidebarMode; i++) { |
162 | setFlags_Widget(as_Widget(d->modeButtons[i]), selected_WidgetFlag, i == d->mode); | 167 | setFlags_Widget(as_Widget(d->modeButtons[i]), selected_WidgetFlag, i == d->mode); |
163 | } | 168 | } |
164 | const float heights[max_SidebarMode] = { 1.2f, 2.4f, 3, 3 }; | 169 | const float heights[max_SidebarMode] = { 1.2f, 1.5f, 3, 3 }; |
165 | d->itemHeight = heights[mode] * lineHeight_Text(default_FontId); | 170 | d->itemHeight = heights[mode] * lineHeight_Text(default_FontId); |
166 | } | 171 | } |
167 | 172 | ||
@@ -351,7 +356,7 @@ static iBool processEvent_SidebarWidget_(iSidebarWidget *d, const SDL_Event *ev) | |||
351 | if (argLabel_Command(cmd, "button") == SDL_BUTTON_LEFT) { | 356 | if (argLabel_Command(cmd, "button") == SDL_BUTTON_LEFT) { |
352 | if (arg_Command(cmd)) { | 357 | if (arg_Command(cmd)) { |
353 | setFlags_Widget(d->resizer, pressed_WidgetFlag, iTrue); | 358 | setFlags_Widget(d->resizer, pressed_WidgetFlag, iTrue); |
354 | setBackgroundColor_Widget(d->resizer, gray75_ColorId); | 359 | setBackgroundColor_Widget(d->resizer, uiBackgroundFramelessHover_ColorId); |
355 | setMouseGrab_Widget(d->resizer); | 360 | setMouseGrab_Widget(d->resizer); |
356 | refresh_Widget(d->resizer); | 361 | refresh_Widget(d->resizer); |
357 | } | 362 | } |
@@ -420,6 +425,7 @@ static iBool processEvent_SidebarWidget_(iSidebarWidget *d, const SDL_Event *ev) | |||
420 | setText_InputWidget(findChild_Widget(dlg, "bmed.url"), &bm->url); | 425 | setText_InputWidget(findChild_Widget(dlg, "bmed.url"), &bm->url); |
421 | setText_InputWidget(findChild_Widget(dlg, "bmed.tags"), &bm->tags); | 426 | setText_InputWidget(findChild_Widget(dlg, "bmed.tags"), &bm->tags); |
422 | setCommandHandler_Widget(dlg, handleBookmarkEditorCommands_SidebarWidget_); | 427 | setCommandHandler_Widget(dlg, handleBookmarkEditorCommands_SidebarWidget_); |
428 | setFocus_Widget(findChild_Widget(dlg, "bmed.title")); | ||
423 | } | 429 | } |
424 | return iTrue; | 430 | return iTrue; |
425 | } | 431 | } |
@@ -500,35 +506,41 @@ static void draw_SidebarWidget_(const iSidebarWidget *d) { | |||
500 | const iBool isHover = (d->hoverItem == i); | 506 | const iBool isHover = (d->hoverItem == i); |
501 | setClip_Paint(&p, intersect_Rect(itemRect, bounds)); | 507 | setClip_Paint(&p, intersect_Rect(itemRect, bounds)); |
502 | if (isHover) { | 508 | if (isHover) { |
503 | fillRect_Paint(&p, itemRect, isPressing ? orange_ColorId : teal_ColorId); | 509 | fillRect_Paint(&p, |
510 | itemRect, | ||
511 | isPressing ? uiBackgroundPressed_ColorId | ||
512 | : uiBackgroundFramelessHover_ColorId); | ||
504 | } | 513 | } |
505 | if (d->mode == documentOutline_SidebarMode) { | 514 | if (d->mode == documentOutline_SidebarMode) { |
506 | const int fg = isHover ? (isPressing ? black_ColorId : white_ColorId) : | 515 | const int fg = |
507 | (item->indent == 0 ? white_ColorId : gray75_ColorId); | 516 | isHover ? (isPressing ? uiTextPressed_ColorId : uiTextFramelessHover_ColorId) |
517 | : (item->indent == 0 ? uiTextStrong_ColorId : uiText_ColorId); | ||
508 | drawRange_Text(font, init_I2(pos.x + 3 * gap_UI + item->indent, | 518 | drawRange_Text(font, init_I2(pos.x + 3 * gap_UI + item->indent, |
509 | mid_Rect(itemRect).y - lineHeight_Text(font) / 2), | 519 | mid_Rect(itemRect).y - lineHeight_Text(font) / 2), |
510 | fg, range_String(&item->label)); | 520 | fg, range_String(&item->label)); |
511 | } | 521 | } |
512 | else if (d->mode == bookmarks_SidebarMode) { | 522 | else if (d->mode == bookmarks_SidebarMode) { |
513 | const int fg = | 523 | const int fg = |
514 | isHover ? (isPressing ? black_ColorId : white_ColorId) : gray75_ColorId; | 524 | isHover ? (isPressing ? uiTextPressed_ColorId : uiTextFramelessHover_ColorId) |
525 | : uiText_ColorId; | ||
515 | iString str; | 526 | iString str; |
516 | init_String(&str); | 527 | init_String(&str); |
517 | appendChar_String(&str, item->icon ? item->icon : 0x1f588); | 528 | appendChar_String(&str, item->icon ? item->icon : 0x1f588); |
518 | const iRect iconArea = { pos, init_I2(10 * gap_UI, d->itemHeight) }; | 529 | const iRect iconArea = { addX_I2(pos, gap_UI), init_I2(7 * gap_UI, d->itemHeight) }; |
519 | drawCentered_Text(uiBookmarkIcon_FontId, | 530 | drawCentered_Text(font, |
520 | iconArea, | 531 | iconArea, |
521 | iTrue, | 532 | iTrue, |
522 | isHover && isPressing ? black_ColorId : cyan_ColorId, | 533 | isHover && isPressing ? uiTextPressed_ColorId : uiIcon_ColorId, |
523 | "%s", | 534 | "%s", |
524 | cstr_String(&str)); | 535 | cstr_String(&str)); |
525 | deinit_String(&str); | 536 | deinit_String(&str); |
526 | iInt2 textPos = addY_I2(topRight_Rect(iconArea), 0.2f * lineHeight_Text(font)); | 537 | iInt2 textPos = |
538 | addY_I2(topRight_Rect(iconArea), (d->itemHeight - lineHeight_Text(font)) / 2); | ||
527 | drawRange_Text(font, textPos, fg, range_String(&item->label)); | 539 | drawRange_Text(font, textPos, fg, range_String(&item->label)); |
528 | drawRange_Text(font, | 540 | /*drawRange_Text(font, |
529 | addY_I2(textPos, lineHeight_Text(font)), | 541 | addY_I2(textPos, lineHeight_Text(font)), |
530 | isHover ? (isPressing ? black_ColorId : cyan_ColorId) : teal_ColorId, | 542 | isHover ? (isPressing ? black_ColorId : cyan_ColorId) : teal_ColorId, |
531 | range_String(&item->meta)); | 543 | range_String(&item->meta));*/ |
532 | } | 544 | } |
533 | unsetClip_Paint(&p); | 545 | unsetClip_Paint(&p); |
534 | pos.y += d->itemHeight; | 546 | pos.y += d->itemHeight; |
@@ -538,7 +550,7 @@ static void draw_SidebarWidget_(const iSidebarWidget *d) { | |||
538 | drawVLine_Paint(&p, | 550 | drawVLine_Paint(&p, |
539 | addX_I2(topRight_Rect(bounds_Widget(w)), -1), | 551 | addX_I2(topRight_Rect(bounds_Widget(w)), -1), |
540 | height_Rect(bounds_Widget(w)), | 552 | height_Rect(bounds_Widget(w)), |
541 | black_ColorId); | 553 | uiSeparator_ColorId); |
542 | } | 554 | } |
543 | 555 | ||
544 | iBeginDefineSubclass(SidebarWidget, Widget) | 556 | iBeginDefineSubclass(SidebarWidget, Widget) |