summaryrefslogtreecommitdiff
path: root/src/ui/sidebarwidget.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/sidebarwidget.c')
-rw-r--r--src/ui/sidebarwidget.c52
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
105static int cmpTitle_Bookmark_(const iBookmark **a, const iBookmark **b) {
106 return cmpStringCase_String(&(*a)->title, &(*b)->title);
107}
108
105static void updateItems_SidebarWidget_(iSidebarWidget *d) { 109static 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
544iBeginDefineSubclass(SidebarWidget, Widget) 556iBeginDefineSubclass(SidebarWidget, Widget)