diff options
Diffstat (limited to 'src/ui/util.c')
-rw-r--r-- | src/ui/util.c | 107 |
1 files changed, 93 insertions, 14 deletions
diff --git a/src/ui/util.c b/src/ui/util.c index a2aaa893..61ecf948 100644 --- a/src/ui/util.c +++ b/src/ui/util.c | |||
@@ -1688,8 +1688,19 @@ static void appendFramelessTabPage_(iWidget *tabs, iWidget *page, const char *ti | |||
1688 | iTrue); | 1688 | iTrue); |
1689 | } | 1689 | } |
1690 | 1690 | ||
1691 | static iWidget *makeTwoColumnWidget_(iWidget **headings, iWidget **values) { | ||
1692 | iWidget *page = new_Widget(); | ||
1693 | setFlags_Widget(page, arrangeHorizontal_WidgetFlag | arrangeSize_WidgetFlag, iTrue); | ||
1694 | *headings = addChildFlags_Widget( | ||
1695 | page, iClob(new_Widget()), arrangeVertical_WidgetFlag | arrangeSize_WidgetFlag); | ||
1696 | *values = addChildFlags_Widget( | ||
1697 | page, iClob(new_Widget()), arrangeVertical_WidgetFlag | arrangeSize_WidgetFlag); | ||
1698 | return page; | ||
1699 | } | ||
1700 | |||
1691 | static iWidget *appendTwoColumnPage_(iWidget *tabs, const char *title, int shortcut, iWidget **headings, | 1701 | static iWidget *appendTwoColumnPage_(iWidget *tabs, const char *title, int shortcut, iWidget **headings, |
1692 | iWidget **values) { | 1702 | iWidget **values) { |
1703 | /* TODO: Use `makeTwoColumnWidget_()`, see above. */ | ||
1693 | iWidget *page = new_Widget(); | 1704 | iWidget *page = new_Widget(); |
1694 | setFlags_Widget(page, arrangeVertical_WidgetFlag | arrangeSize_WidgetFlag | | 1705 | setFlags_Widget(page, arrangeVertical_WidgetFlag | arrangeSize_WidgetFlag | |
1695 | resizeHeightOfChildren_WidgetFlag | borderTop_WidgetFlag, iTrue); | 1706 | resizeHeightOfChildren_WidgetFlag | borderTop_WidgetFlag, iTrue); |
@@ -1935,13 +1946,8 @@ iWidget *makeBookmarkEditor_Widget(void) { | |||
1935 | iClob(new_LabelWidget(uiHeading_ColorEscape "EDIT BOOKMARK", NULL)), | 1946 | iClob(new_LabelWidget(uiHeading_ColorEscape "EDIT BOOKMARK", NULL)), |
1936 | frameless_WidgetFlag), | 1947 | frameless_WidgetFlag), |
1937 | "bmed.heading"); | 1948 | "bmed.heading"); |
1938 | iWidget *page = new_Widget(); | 1949 | iWidget *headings, *values; |
1939 | addChild_Widget(dlg, iClob(page)); | 1950 | addChild_Widget(dlg, iClob(makeTwoColumnWidget_(&headings, &values))); |
1940 | setFlags_Widget(page, arrangeHorizontal_WidgetFlag | arrangeSize_WidgetFlag, iTrue); | ||
1941 | iWidget *headings = addChildFlags_Widget( | ||
1942 | page, iClob(new_Widget()), arrangeVertical_WidgetFlag | arrangeSize_WidgetFlag); | ||
1943 | iWidget *values = addChildFlags_Widget( | ||
1944 | page, iClob(new_Widget()), arrangeVertical_WidgetFlag | arrangeSize_WidgetFlag); | ||
1945 | iInputWidget *inputs[4]; | 1951 | iInputWidget *inputs[4]; |
1946 | addChild_Widget(headings, iClob(makeHeading_Widget("Title:"))); | 1952 | addChild_Widget(headings, iClob(makeHeading_Widget("Title:"))); |
1947 | setId_Widget(addChild_Widget(values, iClob(inputs[0] = new_InputWidget(0))), "bmed.title"); | 1953 | setId_Widget(addChild_Widget(values, iClob(inputs[0] = new_InputWidget(0))), "bmed.title"); |
@@ -2074,13 +2080,8 @@ iWidget *makeFeedSettings_Widget(uint32_t bookmarkId) { | |||
2074 | NULL)), | 2080 | NULL)), |
2075 | frameless_WidgetFlag), | 2081 | frameless_WidgetFlag), |
2076 | "feedcfg.heading"); | 2082 | "feedcfg.heading"); |
2077 | iWidget *page = new_Widget(); | 2083 | iWidget *headings, *values; |
2078 | addChild_Widget(dlg, iClob(page)); | 2084 | addChild_Widget(dlg, iClob(makeTwoColumnWidget_(&headings, &values))); |
2079 | setFlags_Widget(page, arrangeHorizontal_WidgetFlag | arrangeSize_WidgetFlag, iTrue); | ||
2080 | iWidget *headings = addChildFlags_Widget( | ||
2081 | page, iClob(new_Widget()), arrangeVertical_WidgetFlag | arrangeSize_WidgetFlag); | ||
2082 | iWidget *values = addChildFlags_Widget( | ||
2083 | page, iClob(new_Widget()), arrangeVertical_WidgetFlag | arrangeSize_WidgetFlag); | ||
2084 | addChild_Widget(headings, iClob(makeHeading_Widget("Title:"))); | 2085 | addChild_Widget(headings, iClob(makeHeading_Widget("Title:"))); |
2085 | iInputWidget *input = new_InputWidget(0); | 2086 | iInputWidget *input = new_InputWidget(0); |
2086 | setId_Widget(addChild_Widget(values, iClob(input)), "feedcfg.title"); | 2087 | setId_Widget(addChild_Widget(values, iClob(input)), "feedcfg.title"); |
@@ -2184,3 +2185,81 @@ iWidget *makeIdentityCreation_Widget(void) { | |||
2184 | finalizeSheet_Widget(dlg); | 2185 | finalizeSheet_Widget(dlg); |
2185 | return dlg; | 2186 | return dlg; |
2186 | } | 2187 | } |
2188 | |||
2189 | static const iMenuItem languages[] = { | ||
2190 | { "Arabic", 0, 0, "xlt.lang id:ar" }, | ||
2191 | { "Chinese", 0, 0, "xlt.lang id:zh" }, | ||
2192 | { "English", 0, 0, "xlt.lang id:en" }, | ||
2193 | { "French", 0, 0, "xlt.lang id:fr" }, | ||
2194 | { "German", 0, 0, "xlt.lang id:de" }, | ||
2195 | { "Hindi", 0, 0, "xlt.lang id:hi" }, | ||
2196 | { "Italian", 0, 0, "xlt.lang id:it" }, | ||
2197 | { "Japanese", 0, 0, "xlt.lang id:ja" }, | ||
2198 | { "Portuguese", 0, 0, "xlt.lang id:pt" }, | ||
2199 | { "Russian", 0, 0, "xlt.lang id:ru" }, | ||
2200 | { "Spanish", 0, 0, "xlt.lang id:es" }, | ||
2201 | }; | ||
2202 | |||
2203 | static iBool translationHandler_(iWidget *dlg, const char *cmd) { | ||
2204 | if (equal_Command(cmd, "xlt.lang")) { | ||
2205 | iLabelWidget *menuItem = pointer_Command(cmd); | ||
2206 | iWidget *button = parent_Widget(parent_Widget(menuItem)); | ||
2207 | iAssert(isInstance_Object(button, &Class_LabelWidget)); | ||
2208 | updateText_LabelWidget((iLabelWidget *) button, text_LabelWidget(menuItem)); | ||
2209 | return iTrue; | ||
2210 | } | ||
2211 | return iFalse; | ||
2212 | } | ||
2213 | |||
2214 | const char *languageId_String(const iString *menuItemLabel) { | ||
2215 | iForIndices(i, languages) { | ||
2216 | if (!cmp_String(menuItemLabel, languages[i].label)) { | ||
2217 | return cstr_Rangecc(range_Command(languages[i].command, "id")); | ||
2218 | } | ||
2219 | } | ||
2220 | return ""; | ||
2221 | } | ||
2222 | |||
2223 | iWidget *makeTranslation_Widget(iWidget *parent) { | ||
2224 | iWidget *dlg = makeSheet_Widget("xlt"); | ||
2225 | setCommandHandler_Widget(dlg, translationHandler_); | ||
2226 | addChildFlags_Widget(dlg, | ||
2227 | iClob(new_LabelWidget(uiHeading_ColorEscape "TRANSLATE PAGE", NULL)), | ||
2228 | frameless_WidgetFlag); | ||
2229 | addChild_Widget(dlg, iClob(makePadding_Widget(lineHeight_Text(uiLabel_FontId)))); | ||
2230 | iWidget *headings, *values; | ||
2231 | iWidget *page; | ||
2232 | addChild_Widget(dlg, iClob(page = makeTwoColumnWidget_(&headings, &values))); | ||
2233 | setId_Widget(page, "xlt.langs"); | ||
2234 | addChild_Widget(headings, iClob(makeHeading_Widget("From:"))); | ||
2235 | iLabelWidget *fromLang, *toLang; | ||
2236 | setId_Widget(addChildFlags_Widget(values, | ||
2237 | iClob(fromLang = makeMenuButton_LabelWidget( | ||
2238 | "Portuguese", languages, iElemCount(languages))), | ||
2239 | alignLeft_WidgetFlag), | ||
2240 | "xlt.from"); | ||
2241 | updateTextCStr_LabelWidget(fromLang, "French"); /* TODO: Check source media type; remember last use. */ | ||
2242 | setBackgroundColor_Widget(findChild_Widget(as_Widget(fromLang), "menu"), | ||
2243 | uiBackgroundMenu_ColorId); | ||
2244 | addChild_Widget(headings, iClob(makeHeading_Widget("To:"))); | ||
2245 | setId_Widget(addChildFlags_Widget(values, | ||
2246 | iClob(toLang = makeMenuButton_LabelWidget( | ||
2247 | "Portuguese", languages, iElemCount(languages))), | ||
2248 | alignLeft_WidgetFlag), | ||
2249 | "xlt.to"); | ||
2250 | setBackgroundColor_Widget(findChild_Widget(as_Widget(toLang), "menu"), | ||
2251 | uiBackgroundMenu_ColorId); | ||
2252 | updateTextCStr_LabelWidget(toLang, "English"); /* TODO: User preference. */ | ||
2253 | addChild_Widget(dlg, iClob(makePadding_Widget(lineHeight_Text(uiLabel_FontId)))); | ||
2254 | addChild_Widget( | ||
2255 | dlg, | ||
2256 | iClob(makeDialogButtons_Widget( | ||
2257 | (iMenuItem[]){ | ||
2258 | { "Cancel", SDLK_ESCAPE, 0, "translation.cancel" }, | ||
2259 | { uiTextAction_ColorEscape "Translate", SDLK_RETURN, 0, "translation.submit" } }, | ||
2260 | 2))); | ||
2261 | addChild_Widget(parent, iClob(dlg)); | ||
2262 | arrange_Widget(dlg); | ||
2263 | finalizeSheet_Widget(dlg); | ||
2264 | return dlg; | ||
2265 | } | ||