diff options
Diffstat (limited to 'frontends/riscos/gui/button_bar.h')
-rw-r--r-- | frontends/riscos/gui/button_bar.h | 309 |
1 files changed, 309 insertions, 0 deletions
diff --git a/frontends/riscos/gui/button_bar.h b/frontends/riscos/gui/button_bar.h new file mode 100644 index 000000000..a1f7e8b9f --- /dev/null +++ b/frontends/riscos/gui/button_bar.h @@ -0,0 +1,309 @@ +/* + * Copyright 2005 Richard Wilson <info@tinct.net> + * Copyright 2011 Stephen Fryatt <stevef@netsurf-browser.org> + * + * 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 <http://www.gnu.org/licenses/>. + */ + +/** \file + * Button bars (interface). + */ + +#ifndef _NETSURF_RISCOS_BUTTONBAR_H_ +#define _NETSURF_RISCOS_BUTTONBAR_H_ + +#include <stdbool.h> +#include "riscos/theme.h" + +/* A list of possible toolbar actions. */ + +typedef enum { + TOOLBAR_BUTTON_NONE = 0, /* Special case: no action */ + TOOLBAR_BUTTON_BACK, + TOOLBAR_BUTTON_BACK_NEW, + TOOLBAR_BUTTON_UP, + TOOLBAR_BUTTON_UP_NEW, + TOOLBAR_BUTTON_FORWARD, + TOOLBAR_BUTTON_FORWARD_NEW, + TOOLBAR_BUTTON_STOP, + TOOLBAR_BUTTON_RELOAD, + TOOLBAR_BUTTON_RELOAD_ALL, + TOOLBAR_BUTTON_HOME, + TOOLBAR_BUTTON_HISTORY_LOCAL, + TOOLBAR_BUTTON_HISTORY_GLOBAL, + TOOLBAR_BUTTON_SAVE_SOURCE, + TOOLBAR_BUTTON_SAVE_COMPLETE, + TOOLBAR_BUTTON_PRINT, + TOOLBAR_BUTTON_BOOKMARK_OPEN, + TOOLBAR_BUTTON_BOOKMARK_ADD, + TOOLBAR_BUTTON_SCALE, + TOOLBAR_BUTTON_SEARCH, + TOOLBAR_BUTTON_DELETE, + TOOLBAR_BUTTON_EXPAND, + TOOLBAR_BUTTON_COLLAPSE, + TOOLBAR_BUTTON_OPEN, + TOOLBAR_BUTTON_CLOSE, + TOOLBAR_BUTTON_LAUNCH, + TOOLBAR_BUTTON_CREATE +} button_bar_action; + +/* Button bar button source definitions. + * + * Help tokens are added to the help prefix for the given toolbar by the + * help system, and correspond to the hard-coded icon numbers that were + * assigned to the different buttons in the original toolbar implementation. + * If the Messages file can be updated, these can change to something more + * meaningful. + */ + +struct button_bar_buttons { + const char *icon; /**< The sprite used for the icon. */ + button_bar_action select; /**< The action for select clicks. */ + button_bar_action adjust; /**< The action for Adjust clicks. */ + const char opt_key; /**< The char used in option strings. */ + const char *help; /**< The interactive help token. */ +}; + +/* \TODO -- Move these to the correct modules. + */ + +static const struct button_bar_buttons brower_toolbar_buttons[] = { + {"back", TOOLBAR_BUTTON_BACK, TOOLBAR_BUTTON_BACK_NEW, '0', "0"}, + {"up", TOOLBAR_BUTTON_UP, TOOLBAR_BUTTON_UP_NEW, 'b', "11"}, + {"forward", TOOLBAR_BUTTON_FORWARD, TOOLBAR_BUTTON_FORWARD_NEW, '1', "1"}, + {"stop", TOOLBAR_BUTTON_STOP, TOOLBAR_BUTTON_NONE, '2', "2"}, + {"reload", TOOLBAR_BUTTON_RELOAD, TOOLBAR_BUTTON_RELOAD_ALL, '3', "3"}, + {"home", TOOLBAR_BUTTON_HOME, TOOLBAR_BUTTON_NONE, '4', "4"}, + {"history", TOOLBAR_BUTTON_HISTORY_LOCAL, TOOLBAR_BUTTON_HISTORY_GLOBAL, '5', "5"}, + {"save", TOOLBAR_BUTTON_SAVE_SOURCE, TOOLBAR_BUTTON_SAVE_COMPLETE, '6', "6"}, + {"print", TOOLBAR_BUTTON_PRINT, TOOLBAR_BUTTON_NONE, '7', "7"}, + {"hotlist", TOOLBAR_BUTTON_BOOKMARK_OPEN, TOOLBAR_BUTTON_BOOKMARK_ADD, '8', "8"}, + {"scale", TOOLBAR_BUTTON_SCALE, TOOLBAR_BUTTON_NONE, '9', "9"}, + {"search", TOOLBAR_BUTTON_SEARCH, TOOLBAR_BUTTON_NONE, 'a', "10"}, + {NULL, TOOLBAR_BUTTON_NONE, TOOLBAR_BUTTON_NONE, '\0', ""} +}; + +static const struct button_bar_buttons cookies_toolbar_buttons[] = { + {"delete", TOOLBAR_BUTTON_DELETE, TOOLBAR_BUTTON_NONE, '0', "0"}, + {"expand", TOOLBAR_BUTTON_EXPAND, TOOLBAR_BUTTON_COLLAPSE, '1', "1"}, + {"open", TOOLBAR_BUTTON_OPEN, TOOLBAR_BUTTON_CLOSE, '2', "2"}, + {NULL, TOOLBAR_BUTTON_NONE, TOOLBAR_BUTTON_NONE, '\0', ""} +}; + +static const struct button_bar_buttons global_history_toolbar_buttons[] = { + {"delete", TOOLBAR_BUTTON_DELETE, TOOLBAR_BUTTON_NONE, '0', "0"}, + {"expand", TOOLBAR_BUTTON_EXPAND, TOOLBAR_BUTTON_COLLAPSE, '1', "1"}, + {"open", TOOLBAR_BUTTON_OPEN, TOOLBAR_BUTTON_CLOSE, '2', "2"}, + {"launch", TOOLBAR_BUTTON_LAUNCH, TOOLBAR_BUTTON_NONE, '3', "3"}, + {NULL, TOOLBAR_BUTTON_NONE, TOOLBAR_BUTTON_NONE, '\0', ""} +}; + +static const struct button_bar_buttons hotlist_toolbar_buttons[] = { + {"delete", TOOLBAR_BUTTON_DELETE, TOOLBAR_BUTTON_NONE, '0', "0"}, + {"expand", TOOLBAR_BUTTON_EXPAND, TOOLBAR_BUTTON_COLLAPSE, '1', "1"}, + {"open", TOOLBAR_BUTTON_OPEN, TOOLBAR_BUTTON_CLOSE, '2', "2"}, + {"launch", TOOLBAR_BUTTON_LAUNCH, TOOLBAR_BUTTON_NONE, '3', "3"}, + {"create", TOOLBAR_BUTTON_CREATE, TOOLBAR_BUTTON_NONE, '4', "4"}, + {NULL, TOOLBAR_BUTTON_NONE, TOOLBAR_BUTTON_NONE, '\0', ""} +}; + +struct button_bar; + + +/** + * Create a new button bar widget. + * + * \param *theme The theme to apply (or NULL for the default). + * \param buttons[] An array of button definitions for the bar. + * \return A button bar handle, or NULL on failure. + */ + +struct button_bar *ro_gui_button_bar_create(struct theme_descriptor *theme, + const struct button_bar_buttons buttons[]); + + +/** + * Link two button bars together + * + * Join two button bars the target being the active bar, and the + * source being the editing bar used to supply valid buttons. The bars are + * checked to ensure that they are not already part of an edit pair, but are + * not checked for button-compatibility. + * + * \param target The target button bar. + * \param source The source button bar. + * \param refresh The refresh callback. + * \param client_data context passed to the refresh callback + * \return true if successful; else false. + */ + +bool ro_gui_button_bar_link_editor(struct button_bar *target, + struct button_bar *source, void (* refresh)(void *), + void *client_data); + +/** + * Place a button bar into a toolbar window and initialise any theme-specific + * settings. Any previous incarnation of the bar will be forgotten: this + * is for use when a new toolbar is being created, or when a toolbar has been + * deleted and rebuilt following a theme change. + * + * \param *button_bar The button bar to rebuild. + * \param *theme The theme to apply (or NULL for current). + * \param style The theme style to apply. + * \param window The window that the bar is in. + * \param edit The edit mode of the button bar. + * \return true on success; else false. + */ + +bool ro_gui_button_bar_rebuild(struct button_bar *button_bar, + struct theme_descriptor *theme, theme_style style, + wimp_w window, bool edit); + + +/** + * Arrange buttons on a button bar, using an order string to specify the + * required button and separator layout. + * + * \param *button_bar The button bar to update. + * \param order[] The button order configuration string. + * \return true if successful; else false. + */ + +bool ro_gui_button_bar_arrange_buttons(struct button_bar *button_bar, + char order[]); + + +/** + * Destroy a button bar widget. + * + * \param *button_bar The button bar to destroy. + */ + +void ro_gui_button_bar_destroy(struct button_bar *button_bar); + + +/** + * Return the MINIMUM dimensions required by the button bar, in RO units, + * allowing for the current theme. + * + * \param *button_bar The button bar of interest. + * \param *width Return the required width. + * \param *height Return the required height. + * \return true if values are returned; else false. + */ + +bool ro_gui_button_bar_get_dims(struct button_bar *button_bar, + int *width, int *height); + + +/** + * Set or update the dimensions to be used by the button bar, in RO units. + * If these are greater than the minimum required, the button bar will fill + * the extended space; if less, the call will fail. + * + * \param *button_bar The button bar to update. + * \param x0 The minimum X window position. + * \param y0 The minimum Y window position. + * \param x1 The maximum X window position. + * \param y1 The maximum Y window position. + * \return true if size updated; else false. + */ + +bool ro_gui_button_bar_set_extent(struct button_bar *button_bar, + int x0, int y0, int x1, int y1); + + +/** + * Show or hide a button bar. + * + * \param *button_bar The button bar to hide. + * \param hide true to hide the bar; false to show it. + * \return true if successful; else false. + */ + +bool ro_gui_button_bar_hide(struct button_bar *button_bar, bool hide); + + +/** + * Shade or unshade a button in a bar corresponding to the given action. + * + * \param *button_bar The button bar to update. + * \param action The action to update. + * \param shaded true to shade the button; false to unshade. + * \return true if successful; else false. + */ + +bool ro_gui_button_bar_shade_button(struct button_bar *button_bar, + button_bar_action action, bool shaded); + + +/** + * Handle redraw event rectangles in a button bar. + * + * \param *button_bar The button bar to use. + * \param *redraw The Wimp redraw rectangle to process. + */ + +void ro_gui_button_bar_redraw(struct button_bar *button_bar, + wimp_draw *redraw); + + +/** + * Handle mouse clicks in a button bar. + * + * \param *button_bar The button bar to use. + * \param *pointer The Wimp mouse click event data. + * \param *state The toolbar window state. + * \param *action Returns the selected action, or + * TOOLBAR_BUTTON_NONE. + * \return true if the event was handled exclusively; + * else false. + */ + +bool ro_gui_button_bar_click(struct button_bar *button_bar, + wimp_pointer *pointer, wimp_window_state *state, + button_bar_action *action); + + +/** + * Translate mouse data into an interactive help message for a button bar. + * + * \param *button_bar The button bar to process. + * \param i The wimp icon under the pointer. + * \param *mouse The mouse position. + * \param *state The toolbar window state. + * \param buttons The mouse button state. + * \param **suffix Return a help token suffix, or "" for none. + * \return true if handled exclusively; else false. + */ + +bool ro_gui_button_bar_help_suffix(struct button_bar *button_bar, wimp_i i, + os_coord *mouse, wimp_window_state *state, + wimp_mouse_state buttons, const char **suffix); + + +/** + * Return a config string reflecting the configured order of buttons + * and spacers. The string is allocated with malloc(), and should be + * free()d after use. + * + * \param *button_bar The button bar of interest. + * \return Pointer to a config string, or NULL on failure. + */ + +char *ro_gui_button_bar_get_config(struct button_bar *button_bar); + +#endif + |