diff options
Diffstat (limited to 'src/ui/util.c')
-rw-r--r-- | src/ui/util.c | 111 |
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) { | |||
1327 | iLabelWidget *makeMenuButton_LabelWidget(const char *label, const iMenuItem *items, size_t n) { | 1328 | iLabelWidget *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 | ||
3165 | iWidget *makeFeedSettings_Widget(uint32_t bookmarkId) { | 3171 | iWidget *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 | ||
3236 | iWidget *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 | |||
3231 | iWidget *makeIdentityCreation_Widget(void) { | 3262 | iWidget *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 | ||
3485 | iWidget *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 | |||
3454 | void init_PerfTimer(iPerfTimer *d) { | 3533 | void init_PerfTimer(iPerfTimer *d) { |
3455 | d->ticks = SDL_GetPerformanceCounter(); | 3534 | d->ticks = SDL_GetPerformanceCounter(); |
3456 | } | 3535 | } |