summaryrefslogtreecommitdiff
path: root/riscos/menus.c
diff options
context:
space:
mode:
authorJames Bursa <james@netsurf-browser.org>2003-08-21 21:39:07 +0000
committerJames Bursa <james@netsurf-browser.org>2003-08-21 21:39:07 +0000
commitdfbe3c84f1541590cf4bea240d0abfaf76d5afb1 (patch)
tree2dbb2be0f21d2aa947e269d56185073fcf42836d /riscos/menus.c
parent15d57a66349d999edf83bfb892b8405779fc2821 (diff)
downloadnetsurf-dfbe3c84f1541590cf4bea240d0abfaf76d5afb1.tar.gz
netsurf-dfbe3c84f1541590cf4bea240d0abfaf76d5afb1.tar.bz2
[project @ 2003-08-21 21:39:07 by bursa]
Break out menu related code. svn path=/import/netsurf/; revision=245
Diffstat (limited to 'riscos/menus.c')
-rw-r--r--riscos/menus.c233
1 files changed, 233 insertions, 0 deletions
diff --git a/riscos/menus.c b/riscos/menus.c
new file mode 100644
index 000000000..51b76f0ac
--- /dev/null
+++ b/riscos/menus.c
@@ -0,0 +1,233 @@
+/*
+ * This file is part of NetSurf, http://netsurf.sourceforge.net/
+ * Licensed under the GNU General Public License,
+ * http://www.opensource.org/licenses/gpl-license
+ * Copyright 2003 Phil Mellor <monkeyson@users.sourceforge.net>
+ * Copyright 2003 James Bursa <bursa@users.sourceforge.net>
+ * Copyright 2003 John M Bell <jmb202@ecs.soton.ac.uk>
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include "oslib/wimp.h"
+#include "netsurf/desktop/gui.h"
+#include "netsurf/riscos/gui.h"
+#include "netsurf/riscos/theme.h"
+#include "netsurf/utils/log.h"
+#include "netsurf/utils/messages.h"
+#include "netsurf/utils/utils.h"
+
+
+static void translate_menu(wimp_menu *menu);
+
+wimp_menu *current_menu;
+int current_menu_x, current_menu_y;
+gui_window *current_gui;
+
+
+/* default menu item flags */
+#define DEFAULT_FLAGS (wimp_ICON_TEXT | wimp_ICON_FILLED | \
+ (wimp_COLOUR_BLACK << wimp_ICON_FG_COLOUR_SHIFT) | \
+ (wimp_COLOUR_WHITE << wimp_ICON_BG_COLOUR_SHIFT))
+
+/* iconbar menu */
+wimp_menu *iconbar_menu = (wimp_menu *) & (wimp_MENU(3)) {
+ { "NetSurf" }, 7,2,7,0, 200, 44, 0,
+ {
+ { 0, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "Info" } },
+ { 0, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "Choices" } },
+ { wimp_MENU_LAST, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "Quit" } }
+ }
+};
+int iconbar_menu_height = 3 * 44;
+
+/* browser window menu structure - based on Style Guide */
+/*wimp_menu *browser_page_menu = (wimp_menu *) & (wimp_MENU(4)) {*/
+static wimp_MENU(4) page_menu = {
+ { "Page" }, 7,2,7,0, 200, 44, 0,
+ {
+ { 0, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "Info" } },
+ { 0, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "Save" } },
+ { 0, (wimp_menu *) 1, DEFAULT_FLAGS | wimp_ICON_SHADED, { "Export" } },
+ { wimp_MENU_LAST, wimp_NO_SUB_MENU, DEFAULT_FLAGS | wimp_ICON_SHADED, { "Print" } }
+ }
+};
+static wimp_menu *browser_page_menu = (wimp_menu *) &page_menu;
+
+static wimp_MENU(3) selection_menu = {
+ { "Selection" }, 7,2,7,0, 300, 44, 0,
+ {
+ { 0, wimp_NO_SUB_MENU, DEFAULT_FLAGS | wimp_ICON_SHADED, { "Copy" } },
+ { 0, wimp_NO_SUB_MENU, DEFAULT_FLAGS | wimp_ICON_SHADED, { "SelectAll" } },
+ { wimp_MENU_LAST, wimp_NO_SUB_MENU, DEFAULT_FLAGS | wimp_ICON_SHADED, { "Clear" } }
+ }
+};
+static wimp_menu *browser_selection_menu = (wimp_menu *) &selection_menu;
+
+static wimp_MENU(5) navigate_menu = {
+ { "Navigate" }, 7,2,7,0, 300, 44, 0,
+ {
+ { 0, wimp_NO_SUB_MENU, DEFAULT_FLAGS | wimp_ICON_SHADED, { "OpenURL" } },
+ { 0, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "Home" } },
+ { 0, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "Back" } },
+ { 0, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "Forward" } },
+ { wimp_MENU_LAST, wimp_NO_SUB_MENU, DEFAULT_FLAGS | wimp_ICON_SHADED, { "Reload" } }
+ }
+};
+static wimp_menu *browser_navigate_menu = (wimp_menu *) &navigate_menu;
+
+wimp_menu *browser_menu = (wimp_menu *) & (wimp_MENU(3)) {
+ { "NetSurf" }, 7,2,7,0, 200, 44, 0,
+ {
+ { 0, (wimp_menu *) &page_menu, DEFAULT_FLAGS, { "Page" } },
+ { 0, (wimp_menu *) &selection_menu, DEFAULT_FLAGS, { "Selection" } },
+ { wimp_MENU_LAST, (wimp_menu *) &navigate_menu, DEFAULT_FLAGS, { "Navigate" } }
+ }
+};
+
+
+/**
+ * Create menu structures.
+ */
+
+void ro_gui_menus_init(void)
+{
+ translate_menu(iconbar_menu);
+ translate_menu(browser_menu);
+ translate_menu(browser_page_menu);
+ translate_menu(browser_selection_menu);
+ translate_menu(browser_navigate_menu);
+
+ iconbar_menu->entries[0].sub_menu = (wimp_menu *) netsurf_info;
+ browser_page_menu->entries[1].sub_menu = (wimp_menu *) netsurf_saveas;
+}
+
+
+/**
+ * Replace text in a menu with message values.
+ */
+
+void translate_menu(wimp_menu *menu)
+{
+ unsigned int i = 0;
+
+ /* title */
+ menu->title_data.indirected_text.text = messages_get(menu->title_data.text);
+ menu->entries[0].menu_flags |= wimp_MENU_TITLE_INDIRECTED;
+
+ /* items */
+ do {
+ menu->entries[i].icon_flags |= wimp_ICON_INDIRECTED;
+ menu->entries[i].data.indirected_text.text =
+ messages_get(menu->entries[i].data.text);
+ menu->entries[i].data.indirected_text.validation = 0;
+ menu->entries[i].data.indirected_text.size =
+ strlen(menu->entries[i].data.indirected_text.text) + 1;
+ i++;
+ } while ((menu->entries[i].menu_flags & wimp_MENU_LAST) == 0);
+}
+
+
+/**
+ * Display a menu.
+ */
+
+void ro_gui_create_menu(wimp_menu *menu, int x, int y, gui_window *g)
+{
+ current_menu = menu;
+ current_menu_x = x;
+ current_menu_y = y;
+ current_gui = g;
+ wimp_create_menu(menu, x, y);
+}
+
+
+/**
+ * Handle menu selection.
+ */
+
+void ro_gui_menu_selection(wimp_selection *selection)
+{
+ struct browser_action msg;
+ wimp_pointer pointer;
+
+ wimp_get_pointer_info(&pointer);
+
+ if (current_menu == combo_menu && selection->items[0] >= 0) {
+ msg.type = act_GADGET_SELECT;
+ msg.data.gadget_select.g = current_gadget;
+ msg.data.gadget_select.item = selection->items[0];
+ browser_window_action(current_gui->data.browser.bw, &msg);
+
+ } else if (current_menu == iconbar_menu) {
+ switch (selection->items[0]) {
+ case 0: /* Info */
+ ro_gui_create_menu((wimp_menu *) netsurf_info,
+ pointer.pos.x, pointer.pos.y, 0);
+ break;
+ case 1: /* Choices */
+ gui_show_choices();
+ break;
+ case 2: /* Quit */
+ netsurf_quit = 1;
+ break;
+ }
+
+ } else if (current_menu == browser_menu) {
+ switch (selection->items[0]) {
+ case 0: /* Page -> */
+ switch (selection->items[1]) {
+ case 0: /* Info */
+ break;
+ case 1: /* Save */
+ break;
+ case 2: /* Export */
+ break;
+ case 3: /* Print */
+ break;
+ }
+ break;
+ case 1: /* Selection -> */
+ switch (selection->items[1]) {
+ case 0: /* Copy to clipboard */
+ ro_gui_copy_selection(current_gui);
+ break;
+ case 1: /* Select all */
+ break;
+ case 2: /* Clear */
+ msg.type = act_CLEAR_SELECTION;
+ browser_window_action(current_gui->data.browser.bw, &msg);
+ break;
+ }
+ break;
+ case 2: /* Navigate -> */
+ switch (selection->items[1]) {
+ case 0: /* Open URL... */
+ break;
+ case 1: /* Home */
+ browser_window_open_location(current_gui->data.browser.bw, HOME_URL);
+ break;
+ case 2: /* Back */
+ browser_window_back(current_gui->data.browser.bw);
+ break;
+ case 3: /* Forward */
+ browser_window_forward(current_gui->data.browser.bw);
+ break;
+ case 4: /* Reload */
+ break;
+ }
+ break;
+ }
+
+ } else if (current_menu == theme_menu && theme_menu != NULL) {
+ ro_gui_theme_menu_selection(theme_menu->entries[selection->items[0]].data.indirected_text.text);
+ }
+
+ if (pointer.buttons == wimp_CLICK_ADJUST) {
+ if (current_menu == combo_menu)
+ gui_gadget_combo(current_gui->data.browser.bw, current_gadget, current_menu_x, current_menu_y);
+ else
+ ro_gui_create_menu(current_menu, current_menu_x, current_menu_y, current_gui);
+ }
+}
+