summaryrefslogtreecommitdiff
path: root/src/ui
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/mobile.c16
-rw-r--r--src/ui/mobile.h11
-rw-r--r--src/ui/root.c83
-rw-r--r--src/ui/util.c13
4 files changed, 76 insertions, 47 deletions
diff --git a/src/ui/mobile.c b/src/ui/mobile.c
index 08d8dba2..e34cad3a 100644
--- a/src/ui/mobile.c
+++ b/src/ui/mobile.c
@@ -37,6 +37,22 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
37# include "ios.h" 37# include "ios.h"
38#endif 38#endif
39 39
40const iToolbarActionSpec toolbarActions_Mobile[max_ToolbarAction] = {
41 { backArrow_Icon, "${menu.back}", "navigate.back" },
42 { forwardArrow_Icon, "${menu.forward}", "navigate.forward" },
43 { home_Icon, "${menu.home}", "navigate.home" },
44 { upArrow_Icon, "${menu.parent}", "navigate.parent" },
45 { reload_Icon, "${menu.reload}", "navigate.reload" },
46 { openTab_Icon, "${menu.newtab}", "tabs.new" },
47 { close_Icon, "${menu.closetab}", "tabs.close" },
48 { bookmark_Icon, "${menu.page.bookmark}", "bookmark.add" },
49 { globe_Icon, "${menu.page.translate}", "document.translate" },
50 { upload_Icon, "${menu.page.upload}", "document.upload" },
51 { edit_Icon, "${menu.page.upload.edit}", "document.upload copy:1" },
52 { magnifyingGlass_Icon, "${menu.find}", "focus.set id:find.input" },
53 { gear_Icon, "${menu.settings}", "preferences" },
54};
55
40iBool isUsingPanelLayout_Mobile(void) { 56iBool isUsingPanelLayout_Mobile(void) {
41 return deviceType_App() != desktop_AppDeviceType; 57 return deviceType_App() != desktop_AppDeviceType;
42} 58}
diff --git a/src/ui/mobile.h b/src/ui/mobile.h
index 54f55fd2..c19623f9 100644
--- a/src/ui/mobile.h
+++ b/src/ui/mobile.h
@@ -22,8 +22,19 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
22 22
23#pragma once 23#pragma once
24 24
25#include "defs.h"
25#include <the_Foundation/rect.h> 26#include <the_Foundation/rect.h>
26 27
28iDeclareType(ToolbarActionSpec)
29
30struct Impl_ToolbarActionSpec {
31 const char *icon;
32 const char *label;
33 const char *command;
34};
35
36const iToolbarActionSpec toolbarActions_Mobile[max_ToolbarAction];
37
27iDeclareType(Widget) 38iDeclareType(Widget)
28iDeclareType(MenuItem) 39iDeclareType(MenuItem)
29 40
diff --git a/src/ui/root.c b/src/ui/root.c
index bc2bc0fb..31176115 100644
--- a/src/ui/root.c
+++ b/src/ui/root.c
@@ -592,14 +592,21 @@ static void updateNavBarIdentity_(iWidget *navBar) {
592 592
593static void updateNavDirButtons_(iWidget *navBar) { 593static void updateNavDirButtons_(iWidget *navBar) {
594 const iHistory *history = history_DocumentWidget(document_App()); 594 const iHistory *history = history_DocumentWidget(document_App());
595 const iBool atOldest = atOldest_History(history); 595 iBool atOldest = atOldest_History(history);
596 const iBool atNewest = atNewest_History(history); 596 iBool atNewest = atNewest_History(history);
597 setFlags_Widget(findChild_Widget(navBar, "navbar.back"), disabled_WidgetFlag, atOldest); 597 setFlags_Widget(findChild_Widget(navBar, "navbar.back"), disabled_WidgetFlag, atOldest);
598 setFlags_Widget(findChild_Widget(navBar, "navbar.forward"), disabled_WidgetFlag, atNewest); 598 setFlags_Widget(findChild_Widget(navBar, "navbar.forward"), disabled_WidgetFlag, atNewest);
599 iWidget *toolBar = findWidget_App("toolbar"); 599 iWidget *toolBar = findWidget_App("toolbar");
600 if (toolBar) { 600 if (toolBar) {
601 iLabelWidget *back = findChild_Widget(toolBar, "toolbar.back"); 601 /* Reset the state. */
602 iLabelWidget *fwd = findChild_Widget(toolBar, "toolbar.forward"); 602 for (int i = 0; i < 2; i++) {
603 const char *id = (i == 0 ? "toolbar.action1" : "toolbar.action2");
604 setFlags_Widget(findChild_Widget(toolBar, id), disabled_WidgetFlag, iFalse);
605 setOutline_LabelWidget(findChild_Widget(toolBar, id), iFalse);
606 }
607 /* Disable certain actions. */
608 iLabelWidget *back = findMenuItem_Widget(toolBar, "navigate.back");
609 iLabelWidget *fwd = findMenuItem_Widget(toolBar, "navigate.forward");
603 setFlags_Widget(as_Widget(back), disabled_WidgetFlag, atOldest); 610 setFlags_Widget(as_Widget(back), disabled_WidgetFlag, atOldest);
604 setOutline_LabelWidget(back, atOldest); 611 setOutline_LabelWidget(back, atOldest);
605 setFlags_Widget(as_Widget(fwd), disabled_WidgetFlag, atNewest); 612 setFlags_Widget(as_Widget(fwd), disabled_WidgetFlag, atNewest);
@@ -1062,14 +1069,23 @@ static iBool handleSearchBarCommands_(iWidget *searchBar, const char *cmd) {
1062} 1069}
1063 1070
1064#if defined (iPlatformMobile) 1071#if defined (iPlatformMobile)
1065static void dismissSidebar_(iWidget *sidebar, const char *toolButtonId) { 1072
1066 if (isVisible_Widget(sidebar)) { 1073static void updateToolBarActions_(iWidget *toolBar) {
1067 postCommandf_App("%s.toggle", cstr_String(id_Widget(sidebar))); 1074 const iPrefs *prefs = prefs_App();
1068// if (toolButtonId) { 1075 for (int i = 0; i < 2; i++) {
1069 // setFlags_Widget(findWidget_App(toolButtonId), noBackground_WidgetFlag, iTrue); 1076 int action = prefs->toolbarActions[i]
1070// } 1077 ? prefs->toolbarActions[i]
1071 setVisualOffset_Widget(sidebar, height_Widget(sidebar), 250, easeIn_AnimFlag); 1078 : (i == 0 ? back_ToolbarAction : forward_ToolbarAction);
1079 iLabelWidget *button =
1080 findChild_Widget(toolBar, i == 0 ? "toolbar.action1" : "toolbar.action2");
1081 if (button) {
1082 setFlags_Widget(as_Widget(button), disabled_WidgetFlag, iFalse);
1083 setOutline_LabelWidget(button, iFalse);
1084 updateTextCStr_LabelWidget(button, toolbarActions_Mobile[action].icon);
1085 setCommand_LabelWidget(button, collectNewCStr_String(toolbarActions_Mobile[action].command));
1086 }
1072 } 1087 }
1088 refresh_Widget(toolBar);
1073} 1089}
1074 1090
1075static iBool handleToolBarCommands_(iWidget *toolBar, const char *cmd) { 1091static iBool handleToolBarCommands_(iWidget *toolBar, const char *cmd) {
@@ -1081,13 +1097,6 @@ static iBool handleToolBarCommands_(iWidget *toolBar, const char *cmd) {
1081 return iTrue; 1097 return iTrue;
1082 } 1098 }
1083 else if (equal_Command(cmd, "toolbar.showview")) { 1099 else if (equal_Command(cmd, "toolbar.showview")) {
1084 /* TODO: Clean this up. */
1085// iWidget *sidebar = findWidget_App("sidebar");
1086// iWidget *sidebar2 = findWidget_App("sidebar2");
1087// dismissSidebar_(sidebar2, "toolbar.ident");
1088// const iBool isVisible = isVisible_Widget(sidebar);
1089 /* If a sidebar hasn't been shown yet, it's height is zero. */
1090// const int viewHeight = size_Root(get_Root()).y;
1091 if (arg_Command(cmd) >= 0) { 1100 if (arg_Command(cmd) >= 0) {
1092 postCommandf_App("sidebar.mode arg:%d show:1", arg_Command(cmd)); 1101 postCommandf_App("sidebar.mode arg:%d show:1", arg_Command(cmd));
1093 } 1102 }
@@ -1102,29 +1111,6 @@ static iBool handleToolBarCommands_(iWidget *toolBar, const char *cmd) {
1102 postCommandf_App("sidebar.toggle"); 1111 postCommandf_App("sidebar.toggle");
1103 } 1112 }
1104 postCommand_App("preferences idents:1"); 1113 postCommand_App("preferences idents:1");
1105#if 0
1106 /* TODO: Clean this up. */
1107 iWidget *sidebar2 = findWidget_App("sidebar2");
1108 //dismissSidebar_(sidebar, "toolbar.view");
1109 if (isVisible_Widget(sidebar)) {
1110 postCommandf_App("sidebar.toggle");
1111 }
1112 const iBool isVisible = isVisible_Widget(sidebar2);
1113 // setFlags_Widget(findChild_Widget(toolBar, "toolbar.ident"), noBackground_WidgetFlag,
1114 // isVisible);
1115 /* If a sidebar hasn't been shown yet, it's height is zero. */
1116 const int viewHeight = size_Root(get_Root()).y;
1117 if (isVisible) {
1118 dismissSidebar_(sidebar2, NULL);
1119 }
1120 else {
1121 postCommand_App("sidebar2.mode arg:3 show:1");
1122 int offset = height_Widget(sidebar2);
1123 if (offset == 0) offset = size_Root(get_Root()).y;
1124 setVisualOffset_Widget(sidebar2, offset, 0, 0);
1125 setVisualOffset_Widget(sidebar2, 0, 400, easeOut_AnimFlag | softer_AnimFlag);
1126 }
1127#endif
1128 return iTrue; 1114 return iTrue;
1129 } 1115 }
1130 else if (equal_Command(cmd, "sidebar.mode.changed")) { 1116 else if (equal_Command(cmd, "sidebar.mode.changed")) {
@@ -1132,8 +1118,13 @@ static iBool handleToolBarCommands_(iWidget *toolBar, const char *cmd) {
1132 updateTextCStr_LabelWidget(viewTool, icon_SidebarMode(arg_Command(cmd))); 1118 updateTextCStr_LabelWidget(viewTool, icon_SidebarMode(arg_Command(cmd)));
1133 return iFalse; 1119 return iFalse;
1134 } 1120 }
1121 else if (equal_Command(cmd, "toolbar.actions.changed")) {
1122 updateToolBarActions_(toolBar);
1123 return iFalse;
1124 }
1135 return iFalse; 1125 return iFalse;
1136} 1126}
1127
1137#endif /* defined (iPlatformMobile) */ 1128#endif /* defined (iPlatformMobile) */
1138 1129
1139static iLabelWidget *newLargeIcon_LabelWidget(const char *text, const char *cmd) { 1130static iLabelWidget *newLargeIcon_LabelWidget(const char *text, const char *cmd) {
@@ -1552,14 +1543,14 @@ void createUserInterface_Root(iRoot *d) {
1552 "toolbar.close"); 1543 "toolbar.close");
1553#else 1544#else
1554 setId_Widget(addChildFlags_Widget(toolBar, 1545 setId_Widget(addChildFlags_Widget(toolBar,
1555 iClob(newLargeIcon_LabelWidget(backArrow_Icon, "navigate.back")), 1546 iClob(newLargeIcon_LabelWidget("", "...")),
1556 frameless_WidgetFlag), 1547 frameless_WidgetFlag),
1557 "toolbar.back"); 1548 "toolbar.action1");
1558#endif 1549#endif
1559 setId_Widget(addChildFlags_Widget(toolBar, 1550 setId_Widget(addChildFlags_Widget(toolBar,
1560 iClob(newLargeIcon_LabelWidget(forwardArrow_Icon, "navigate.forward")), 1551 iClob(newLargeIcon_LabelWidget("", "...")),
1561 frameless_WidgetFlag), 1552 frameless_WidgetFlag),
1562 "toolbar.forward"); 1553 "toolbar.action2");
1563 iWidget *identButton; 1554 iWidget *identButton;
1564 setId_Widget(identButton = addChildFlags_Widget( 1555 setId_Widget(identButton = addChildFlags_Widget(
1565 toolBar, 1556 toolBar,
@@ -1589,10 +1580,10 @@ void createUserInterface_Root(iRoot *d) {
1589 setId_Widget(as_Widget(menuButton), "toolbar.navmenu"); 1580 setId_Widget(as_Widget(menuButton), "toolbar.navmenu");
1590 addChildFlags_Widget(toolBar, iClob(menuButton), frameless_WidgetFlag); 1581 addChildFlags_Widget(toolBar, iClob(menuButton), frameless_WidgetFlag);
1591 iForEach(ObjectList, i, children_Widget(toolBar)) { 1582 iForEach(ObjectList, i, children_Widget(toolBar)) {
1592 iLabelWidget *btn = i.object;
1593 setFlags_Widget(i.object, noBackground_WidgetFlag, iTrue); 1583 setFlags_Widget(i.object, noBackground_WidgetFlag, iTrue);
1594 } 1584 }
1595 updateToolbarColors_Root(d); 1585 updateToolbarColors_Root(d);
1586 updateToolBarActions_(toolBar);
1596 const iMenuItem items[] = { 1587 const iMenuItem items[] = {
1597 { book_Icon " ${sidebar.bookmarks}", 0, 0, "toolbar.showview arg:0" }, 1588 { book_Icon " ${sidebar.bookmarks}", 0, 0, "toolbar.showview arg:0" },
1598 { star_Icon " ${sidebar.feeds}", 0, 0, "toolbar.showview arg:1" }, 1589 { star_Icon " ${sidebar.feeds}", 0, 0, "toolbar.showview arg:1" },
diff --git a/src/ui/util.c b/src/ui/util.c
index ab7e9ebf..6add5c89 100644
--- a/src/ui/util.c
+++ b/src/ui/util.c
@@ -2383,6 +2383,15 @@ iWidget *makePreferences_Widget(void) {
2383 format_CStr("returnkey.set arg:%d", acceptWithPrimaryMod_ReturnKeyBehavior) }, 2383 format_CStr("returnkey.set arg:%d", acceptWithPrimaryMod_ReturnKeyBehavior) },
2384 { NULL } 2384 { NULL }
2385 }; 2385 };
2386 iMenuItem toolbarActionItems[2][max_ToolbarAction + 1];
2387 iZap(toolbarActionItems);
2388 for (int j = 0; j < 2; j++) {
2389 for (int i = 0; i < max_ToolbarAction; i++) {
2390 toolbarActionItems[j][i].label = toolbarActions_Mobile[i].label;
2391 toolbarActionItems[j][i].command =
2392 format_CStr("toolbar.action.set arg:%d button:%d", i, j);
2393 }
2394 }
2386 iMenuItem docThemes[2][max_GmDocumentTheme + 1]; 2395 iMenuItem docThemes[2][max_GmDocumentTheme + 1];
2387 for (int i = 0; i < 2; ++i) { 2396 for (int i = 0; i < 2; ++i) {
2388 const iBool isDark = (i == 0); 2397 const iBool isDark = (i == 0);
@@ -2476,8 +2485,10 @@ iWidget *makePreferences_Widget(void) {
2476 { "title id:heading.prefs.interface" }, 2485 { "title id:heading.prefs.interface" },
2477 { "dropdown device:0 id:prefs.returnkey", 0, 0, (const void *) returnKeyBehaviors }, 2486 { "dropdown device:0 id:prefs.returnkey", 0, 0, (const void *) returnKeyBehaviors },
2478 { "padding device:1" }, 2487 { "padding device:1" },
2479 //{ "toggle id:prefs.hoverlink" },
2480 { "toggle device:2 id:prefs.hidetoolbarscroll" }, 2488 { "toggle device:2 id:prefs.hidetoolbarscroll" },
2489 { "heading device:2 id:heading.prefs.toolbaractions" },
2490 { "dropdown device:2 id:prefs.toolbaraction1", 0, 0, (const void *) toolbarActionItems[0] },
2491 { "dropdown device:2 id:prefs.toolbaraction2", 0, 0, (const void *) toolbarActionItems[1] },
2481 { "heading id:heading.prefs.sizing" }, 2492 { "heading id:heading.prefs.sizing" },
2482 { "input id:prefs.uiscale maxlen:8" }, 2493 { "input id:prefs.uiscale maxlen:8" },
2483 { NULL } 2494 { NULL }