From cd9c0998e9849472473e577c4c04906e380896e1 Mon Sep 17 00:00:00 2001 From: Steve Fryatt Date: Sun, 20 Feb 2011 23:16:33 +0000 Subject: Merge branches/stevef/toolbars to trunk. svn path=/trunk/netsurf/; revision=11741 --- riscos/iconbar.c | 233 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 233 insertions(+) create mode 100644 riscos/iconbar.c (limited to 'riscos/iconbar.c') diff --git a/riscos/iconbar.c b/riscos/iconbar.c new file mode 100644 index 000000000..77c05fe23 --- /dev/null +++ b/riscos/iconbar.c @@ -0,0 +1,233 @@ +/* + * Copyright 2010 Stephen Fryatt + * + * This file is part of NetSurf, http://www.netsurf-browser.org/ + * + * NetSurf is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * NetSurf is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** \file + * Iconbar icon and menus (implementation). + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "oslib/os.h" +#include "oslib/osbyte.h" +#include "oslib/wimp.h" +#include "riscos/configure.h" +#include "riscos/cookies.h" +#include "riscos/dialog.h" +#include "riscos/global_history.h" +#include "riscos/hotlist.h" +#include "riscos/iconbar.h" +#include "riscos/options.h" +#include "riscos/wimp_event.h" +#include "utils/log.h" +#include "utils/utils.h" + +static bool ro_gui_iconbar_click(wimp_pointer *pointer); + +static bool ro_gui_iconbar_menu_select(wimp_w w, wimp_i i, wimp_menu *menu, + wimp_selection *selection, menu_action action); +static void ro_gui_iconbar_menu_warning(wimp_w w, wimp_i i, wimp_menu *menu, + wimp_selection *selection, menu_action action); + + +static wimp_menu *ro_gui_iconbar_menu = NULL; /**< Iconbar menu handle */ + +/** + * Initialise the iconbar menus, create an icon and register the necessary + * handlers to look after them all. + */ + +void ro_gui_iconbar_initialise(void) +{ + os_error *error; + + /* Build the iconbar menu */ + + static const struct ns_menu iconbar_definition = { + "NetSurf", { + { "Info", NO_ACTION, &dialog_info }, + { "AppHelp", HELP_OPEN_CONTENTS, 0 }, + { "Open", BROWSER_NAVIGATE_URL, 0 }, + { "Open.OpenURL", BROWSER_NAVIGATE_URL, &dialog_openurl }, + { "Open.HotlistShow", HOTLIST_SHOW, 0 }, + { "Open.HistGlobal", HISTORY_SHOW_GLOBAL, 0 }, + { "Open.ShowCookies", COOKIES_SHOW, 0 }, + { "Choices", CHOICES_SHOW, 0 }, + { "Quit", APPLICATION_QUIT, 0 }, + {NULL, 0, 0} + } + }; + ro_gui_iconbar_menu = ro_gui_menu_define_menu(&iconbar_definition); + + /* Create an iconbar icon. */ + + wimp_icon_create icon = { + wimp_ICON_BAR_RIGHT, + { { 0, 0, 68, 68 }, + wimp_ICON_SPRITE | wimp_ICON_HCENTRED | wimp_ICON_VCENTRED | + (wimp_BUTTON_CLICK << wimp_ICON_BUTTON_TYPE_SHIFT), + { "!netsurf" } } }; + error = xwimp_create_icon(&icon, 0); + if (error) { + LOG(("xwimp_create_icon: 0x%x: %s", + error->errnum, error->errmess)); + die(error->errmess); + } + + /* Register handlers to look after clicks and menu actions. */ + + ro_gui_wimp_event_register_mouse_click(wimp_ICON_BAR, + ro_gui_iconbar_click); + + ro_gui_wimp_event_register_menu(wimp_ICON_BAR, ro_gui_iconbar_menu, + true, true); + ro_gui_wimp_event_register_menu_selection(wimp_ICON_BAR, + ro_gui_iconbar_menu_select); + ro_gui_wimp_event_register_menu_warning(wimp_ICON_BAR, + ro_gui_iconbar_menu_warning); +} + + +/** + * Handle Mouse_Click events on the iconbar icon. + * + * \param *pointer The wimp event block to be processed. + * \return true if the event was handled; else false. + */ + +bool ro_gui_iconbar_click(wimp_pointer *pointer) +{ + char url[80]; + int key_down = 0; + + switch (pointer->buttons) { + case wimp_CLICK_SELECT: + if (option_homepage_url && option_homepage_url[0]) { + browser_window_create(option_homepage_url, NULL, 0, + true, false); + } else { + snprintf(url, sizeof url, + "file:////Docs/welcome/index_%s", + option_language); + browser_window_create(url, NULL, 0, true, false); + } + break; + + case wimp_CLICK_ADJUST: + xosbyte1(osbyte_SCAN_KEYBOARD, 0 ^ 0x80, 0, &key_down); + if (key_down == 0) + ro_gui_hotlist_open(); + else + ro_gui_debugwin_open(); + break; + } + + return true; +} + +/** + * Handle submenu warnings for the iconbar menu + * + * \param w The window owning the menu. + * \param i The icon owning the menu. + * \param *menu The menu to which the warning applies. + * \param *selection The wimp menu selection data. + * \param action The selected menu action. + */ + +void ro_gui_iconbar_menu_warning(wimp_w w, wimp_i i, wimp_menu *menu, + wimp_selection *selection, menu_action action) +{ + if (w != wimp_ICON_BAR || i != wimp_ICON_WINDOW) + return; + + switch (action) { + case BROWSER_NAVIGATE_URL: + ro_gui_dialog_prepare_open_url(); + break; + default: + break; + } +} + +/** + * Handle selections from the iconbar menu + * + * \param w The window owning the menu. + * \param i The icon owning the menu. + * \param *selection The wimp menu selection data. + * \param action The selected menu action. + * \return true if action accepted; else false. + */ + +bool ro_gui_iconbar_menu_select(wimp_w w, wimp_i i, wimp_menu *menu, + wimp_selection *selection, menu_action action) +{ + if (w != wimp_ICON_BAR || i != wimp_ICON_WINDOW) + return false; + + switch (action) { + case HELP_OPEN_CONTENTS: + ro_gui_open_help_page("documentation/index"); + return true; + case BROWSER_NAVIGATE_URL: + ro_gui_dialog_prepare_open_url(); + ro_gui_dialog_open_persistent(NULL, dialog_openurl, true); + return true; + case HOTLIST_SHOW: + ro_gui_hotlist_open(); + return true; + case HISTORY_SHOW_GLOBAL: + ro_gui_global_history_open(); + return true; + case COOKIES_SHOW: + ro_gui_cookies_open(); + return true; + case CHOICES_SHOW: + ro_gui_configure_show(); + return true; + case APPLICATION_QUIT: + if (ro_gui_prequit()) { + LOG(("QUIT in response to user request")); + netsurf_quit = true; + } + return true; + default: + return false; + } + + return false; +} + +/** + * Check if a particular menu handle is the iconbar menu + * + * \param *menu The menu in question. + * \return true if this menu is the iconbar menu + */ + +bool ro_gui_iconbar_check_menu(wimp_menu *menu) +{ + return (ro_gui_iconbar_menu == menu) ? true : false; +} + -- cgit v1.2.3