summaryrefslogtreecommitdiff
path: root/src/ui/util.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/util.c')
-rw-r--r--src/ui/util.c111
1 files changed, 95 insertions, 16 deletions
diff --git a/src/ui/util.c b/src/ui/util.c
index 5dd8a0bd..54715121 100644
--- a/src/ui/util.c
+++ b/src/ui/util.c
@@ -903,6 +903,7 @@ iWidget *makeMenu_Widget(iWidget *parent, const iMenuItem *items, size_t n) {
903#else 903#else
904 /* Non-native custom popup menu. This may still be displayed inside a separate window. */ 904 /* Non-native custom popup menu. This may still be displayed inside a separate window. */
905 setDrawBufferEnabled_Widget(menu, iTrue); 905 setDrawBufferEnabled_Widget(menu, iTrue);
906 setFrameColor_Widget(menu, uiSeparator_ColorId);
906 setBackgroundColor_Widget(menu, uiBackgroundMenu_ColorId); 907 setBackgroundColor_Widget(menu, uiBackgroundMenu_ColorId);
907 if (deviceType_App() != desktop_AppDeviceType) { 908 if (deviceType_App() != desktop_AppDeviceType) {
908 setPadding1_Widget(menu, 2 * gap_UI); 909 setPadding1_Widget(menu, 2 * gap_UI);
@@ -1084,12 +1085,12 @@ void openMenuFlags_Widget(iWidget *d, iInt2 windowCoord, int menuOpenFlags) {
1084 setFlags_Widget(d, hidden_WidgetFlag, iFalse); 1085 setFlags_Widget(d, hidden_WidgetFlag, iFalse);
1085 setFlags_Widget(d, commandOnMouseMiss_WidgetFlag, iTrue); 1086 setFlags_Widget(d, commandOnMouseMiss_WidgetFlag, iTrue);
1086 setFlags_Widget(findChild_Widget(d, "menu.cancel"), disabled_WidgetFlag, iFalse); 1087 setFlags_Widget(findChild_Widget(d, "menu.cancel"), disabled_WidgetFlag, iFalse);
1087 if (!isPortraitPhone) { 1088// if (!isPortraitPhone) {
1088 setFrameColor_Widget(d, uiBackgroundSelected_ColorId); 1089// setFrameColor_Widget(d, uiSeparator_ColorId);
1089 } 1090// }
1090 else { 1091// else {
1091 setFrameColor_Widget(d, none_ColorId); 1092// setFrameColor_Widget(d, none_ColorId);
1092 } 1093// }
1093 arrange_Widget(d); /* need to know the height */ 1094 arrange_Widget(d); /* need to know the height */
1094 iBool allowOverflow = iFalse; 1095 iBool allowOverflow = iFalse;
1095 /* A vertical offset determined by a possible selected label in the menu. */ 1096 /* A vertical offset determined by a possible selected label in the menu. */
@@ -1327,6 +1328,7 @@ int checkContextMenu_Widget(iWidget *menu, const SDL_Event *ev) {
1327iLabelWidget *makeMenuButton_LabelWidget(const char *label, const iMenuItem *items, size_t n) { 1328iLabelWidget *makeMenuButton_LabelWidget(const char *label, const iMenuItem *items, size_t n) {
1328 iLabelWidget *button = new_LabelWidget(label, "menu.open"); 1329 iLabelWidget *button = new_LabelWidget(label, "menu.open");
1329 iWidget *menu = makeMenu_Widget(as_Widget(button), items, n); 1330 iWidget *menu = makeMenu_Widget(as_Widget(button), items, n);
1331 setFrameColor_Widget(menu, uiBackgroundSelected_ColorId);
1330 setId_Widget(menu, "menu"); 1332 setId_Widget(menu, "menu");
1331 return button; 1333 return button;
1332} 1334}
@@ -2495,6 +2497,7 @@ iWidget *makePreferences_Widget(void) {
2495 { "input id:prefs.searchurl url:1 noheading:1" }, 2497 { "input id:prefs.searchurl url:1 noheading:1" },
2496 { "padding" }, 2498 { "padding" },
2497 { "toggle id:prefs.bookmarks.addbottom" }, 2499 { "toggle id:prefs.bookmarks.addbottom" },
2500 { "toggle id:prefs.dataurl.openimages" },
2498 { "toggle id:prefs.archive.openindex" }, 2501 { "toggle id:prefs.archive.openindex" },
2499 { "radio device:1 id:prefs.pinsplit", 0, 0, (const void *) pinSplitItems }, 2502 { "radio device:1 id:prefs.pinsplit", 0, 0, (const void *) pinSplitItems },
2500 { "padding" }, 2503 { "padding" },
@@ -2567,6 +2570,7 @@ iWidget *makePreferences_Widget(void) {
2567 const iMenuItem networkPanelItems[] = { 2570 const iMenuItem networkPanelItems[] = {
2568 { "title id:heading.prefs.network" }, 2571 { "title id:heading.prefs.network" },
2569 { "toggle id:prefs.decodeurls" }, 2572 { "toggle id:prefs.decodeurls" },
2573 { "input id:prefs.urlsize maxlen:10 selectall:1" },
2570 { "padding" }, 2574 { "padding" },
2571 { "input id:prefs.cachesize maxlen:4 selectall:1 unit:mb" }, 2575 { "input id:prefs.cachesize maxlen:4 selectall:1 unit:mb" },
2572 { "input id:prefs.memorysize maxlen:4 selectall:1 unit:mb" }, 2576 { "input id:prefs.memorysize maxlen:4 selectall:1 unit:mb" },
@@ -2640,8 +2644,9 @@ iWidget *makePreferences_Widget(void) {
2640 setUrlContent_InputWidget(searchUrl, iTrue); 2644 setUrlContent_InputWidget(searchUrl, iTrue);
2641 addDialogPadding_(headings, values); 2645 addDialogPadding_(headings, values);
2642 addDialogToggle_(headings, values, "${prefs.hoverlink}", "prefs.hoverlink"); 2646 addDialogToggle_(headings, values, "${prefs.hoverlink}", "prefs.hoverlink");
2643 addDialogToggle_(headings, values, "${prefs.bookmarks.addbottom}", "prefs.bookmarks.addbottom"); 2647 addDialogToggle_(headings, values, "${prefs.dataurl.openimages}", "prefs.dataurl.openimages");
2644 addDialogToggle_(headings, values, "${prefs.archive.openindex}", "prefs.archive.openindex"); 2648 addDialogToggle_(headings, values, "${prefs.archive.openindex}", "prefs.archive.openindex");
2649 addDialogToggle_(headings, values, "${prefs.bookmarks.addbottom}", "prefs.bookmarks.addbottom");
2645 if (deviceType_App() != phone_AppDeviceType) { 2650 if (deviceType_App() != phone_AppDeviceType) {
2646 addChild_Widget(headings, iClob(makeHeading_Widget("${prefs.pinsplit}"))); 2651 addChild_Widget(headings, iClob(makeHeading_Widget("${prefs.pinsplit}")));
2647 iWidget *pinSplit = new_Widget(); 2652 iWidget *pinSplit = new_Widget();
@@ -2900,6 +2905,7 @@ iWidget *makePreferences_Widget(void) {
2900 appendTwoColumnTabPage_Widget(tabs, "${heading.prefs.network}", '6', &headings, &values); 2905 appendTwoColumnTabPage_Widget(tabs, "${heading.prefs.network}", '6', &headings, &values);
2901 addChild_Widget(headings, iClob(makeHeading_Widget("${prefs.decodeurls}"))); 2906 addChild_Widget(headings, iClob(makeHeading_Widget("${prefs.decodeurls}")));
2902 addChild_Widget(values, iClob(makeToggle_Widget("prefs.decodeurls"))); 2907 addChild_Widget(values, iClob(makeToggle_Widget("prefs.decodeurls")));
2908 addPrefsInputWithHeading_(headings, values, "prefs.urlsize", iClob(new_InputWidget(10)));
2903 /* Cache size. */ { 2909 /* Cache size. */ {
2904 iInputWidget *cache = new_InputWidget(4); 2910 iInputWidget *cache = new_InputWidget(4);
2905 setSelectAllOnFocus_InputWidget(cache, iTrue); 2911 setSelectAllOnFocus_InputWidget(cache, iTrue);
@@ -3163,15 +3169,14 @@ static iBool handleFeedSettingCommands_(iWidget *dlg, const char *cmd) {
3163} 3169}
3164 3170
3165iWidget *makeFeedSettings_Widget(uint32_t bookmarkId) { 3171iWidget *makeFeedSettings_Widget(uint32_t bookmarkId) {
3166 const char *headingText = bookmarkId ? uiHeading_ColorEscape "${heading.feedcfg}" 3172 iWidget *dlg;
3167 : uiHeading_ColorEscape "${heading.subscribe}"; 3173 const char *headingText = bookmarkId ? "${heading.feedcfg}" : "${heading.subscribe}";
3168 const iMenuItem actions[] = { { "${cancel}" }, 3174 const iMenuItem actions[] = { { "${cancel}" },
3169 { bookmarkId ? uiTextCaution_ColorEscape "${dlg.feed.save}" 3175 { bookmarkId ? uiTextCaution_ColorEscape "${dlg.feed.save}"
3170 : uiTextCaution_ColorEscape "${dlg.feed.sub}", 3176 : uiTextCaution_ColorEscape "${dlg.feed.sub}",
3171 SDLK_RETURN, 3177 SDLK_RETURN,
3172 KMOD_PRIMARY, 3178 KMOD_PRIMARY,
3173 format_CStr("feedcfg.accept bmid:%d", bookmarkId) } }; 3179 format_CStr("feedcfg.accept bmid:%d", bookmarkId) } };
3174 iWidget *dlg;
3175 if (isUsingPanelLayout_Mobile()) { 3180 if (isUsingPanelLayout_Mobile()) {
3176 const iMenuItem typeItems[] = { 3181 const iMenuItem typeItems[] = {
3177 { "button id:feedcfg.type.gemini label:dlg.feed.type.gemini", 0, 0, "feedcfg.type arg:0" }, 3182 { "button id:feedcfg.type.gemini label:dlg.feed.type.gemini", 0, 0, "feedcfg.type arg:0" },
@@ -3228,6 +3233,32 @@ iWidget *makeFeedSettings_Widget(uint32_t bookmarkId) {
3228 return dlg; 3233 return dlg;
3229} 3234}
3230 3235
3236iWidget *makeSiteSpecificSettings_Widget(const iString *url) {
3237 iWidget *dlg;
3238 const iMenuItem actions[] = {
3239 { "${cancel}" }, { "${sitespec.accept}", SDLK_RETURN, KMOD_PRIMARY, "sitespec.accept" }
3240 };
3241 if (isUsingPanelLayout_Mobile()) {
3242 iAssert(iFalse);
3243 }
3244 else {
3245 iWidget *headings, *values;
3246 dlg = makeSheet_Widget("sitespec");
3247 addDialogTitle_(dlg, "${heading.sitespec}", "heading.sitespec");
3248 addChild_Widget(dlg, iClob(makeTwoColumns_Widget(&headings, &values)));
3249 addDialogToggle_(headings, values, "${sitespec.ansi}", "sitespec.ansi");
3250 iInputWidget *palInput = new_InputWidget(0);
3251 addPrefsInputWithHeading_(headings, values, "sitespec.palette", iClob(palInput));
3252 as_Widget(palInput)->rect.size.x = 80 * gap_UI;
3253 addChild_Widget(dlg, iClob(makeDialogButtons_Widget(actions, iElemCount(actions))));
3254 }
3255 /* Initialize. */ {
3256 const iRangecc root = urlRoot_String(url);
3257
3258 }
3259 return dlg;
3260}
3261
3231iWidget *makeIdentityCreation_Widget(void) { 3262iWidget *makeIdentityCreation_Widget(void) {
3232 const iMenuItem actions[] = { { "${dlg.newident.more}", 0, 0, "ident.showmore" }, 3263 const iMenuItem actions[] = { { "${dlg.newident.more}", 0, 0, "ident.showmore" },
3233 { "---" }, 3264 { "---" },
@@ -3451,6 +3482,54 @@ iWidget *makeTranslation_Widget(iWidget *parent) {
3451 return dlg; 3482 return dlg;
3452} 3483}
3453 3484
3485iWidget *makeGlyphFinder_Widget(void) {
3486 iString msg;
3487 iString command;
3488 init_String(&msg);
3489 initCStr_String(&command, "!font.find chars:");
3490 for (size_t i = 0; ; i++) {
3491 iChar ch = missing_Text(i);
3492 if (!ch) break;
3493 appendFormat_String(&msg, " U+%04X", ch);
3494 appendChar_String(&command, ch);
3495 }
3496 iArray items;
3497 init_Array(&items, sizeof(iMenuItem));
3498 if (!isEmpty_String(&msg)) {
3499 prependCStr_String(&msg, "${dlg.glyphfinder.missing} ");
3500 appendCStr_String(&msg, "\n\n${dlg.glyphfinder.help}");
3501 pushBackN_Array(
3502 &items,
3503 (iMenuItem[]){
3504 { "${menu.fonts}", 0, 0, "!open newtab:1 url:about:fonts" },
3505 { "${dlg.glyphfinder.disable}", 0, 0, "prefs.font.warnmissing.changed arg:0" },
3506 { "---" },
3507 { uiTextCaution_ColorEscape magnifyingGlass_Icon " ${dlg.glyphfinder.search}",
3508 0,
3509 0,
3510 cstr_String(&command) },
3511 { "${close}", 0, 0, "cancel" } },
3512 5);
3513 }
3514 else {
3515 setCStr_String(&msg, "${dlg.glyphfinder.help.empty}");
3516 pushBackN_Array(&items,
3517 (iMenuItem[]){ { "${menu.reload}", 0, 0, "navigate.reload" },
3518 { "${close}", 0, 0, "cancel" } },
3519 2);
3520 }
3521 iWidget *dlg = makeQuestion_Widget("${heading.glyphfinder}", cstr_String(&msg),
3522 constData_Array(&items),
3523 size_Array(&items));
3524 arrange_Widget(dlg);
3525 deinit_Array(&items);
3526 deinit_String(&command);
3527 deinit_String(&msg);
3528 return dlg;
3529}
3530
3531/*----------------------------------------------------------------------------------------------*/
3532
3454void init_PerfTimer(iPerfTimer *d) { 3533void init_PerfTimer(iPerfTimer *d) {
3455 d->ticks = SDL_GetPerformanceCounter(); 3534 d->ticks = SDL_GetPerformanceCounter();
3456} 3535}