summaryrefslogtreecommitdiff
path: root/riscos/help.c
diff options
context:
space:
mode:
authorRichard Wilson <rjw@netsurf-browser.org>2004-05-11 23:40:07 +0000
committerRichard Wilson <rjw@netsurf-browser.org>2004-05-11 23:40:07 +0000
commit388e8a8a9010d772cfc0f59592cdaca7869691df (patch)
treef79eee6f9b42aaa0e2c87d022ad4850570c52adb /riscos/help.c
parent09d6f3768bc4cba050a7533576043bb9bcc7e0b9 (diff)
downloadnetsurf-388e8a8a9010d772cfc0f59592cdaca7869691df.tar.gz
netsurf-388e8a8a9010d772cfc0f59592cdaca7869691df.tar.bz2
[project @ 2004-05-11 23:40:07 by rjw]
Interactive help support. svn path=/import/netsurf/; revision=853
Diffstat (limited to 'riscos/help.c')
-rw-r--r--riscos/help.c152
1 files changed, 152 insertions, 0 deletions
diff --git a/riscos/help.c b/riscos/help.c
new file mode 100644
index 000000000..b82455877
--- /dev/null
+++ b/riscos/help.c
@@ -0,0 +1,152 @@
+/*
+ * 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 2004 Richard Wilson <not_ginger_matt@users.sourceforge.net>
+ */
+
+/** \file
+ * Interactive help (implementation).
+ */
+
+#include <assert.h>
+#include <stdio.h>
+#include <string.h>
+#include "oslib/help.h"
+#include "oslib/wimp.h"
+#include "netsurf/riscos/gui.h"
+#include "netsurf/riscos/help.h"
+#include "netsurf/utils/messages.h"
+#include "netsurf/utils/log.h"
+
+
+/* Current prefixes:
+
+ HelpB Browser window
+ HelpI Iconbar menu
+ HelpM Browser window menu
+ HelpT Toolbar window
+ HelpS Status window
+
+ The prefixes are followed by either the icon number (eg 'HelpT7'), or a series
+ of numbers representing the menu structure (eg 'HelpM3-1-2').
+*/
+
+static void ro_gui_interactive_help_broadcast(wimp_message *message, char *token);
+
+
+/**
+ * Attempts to process an interactive help message request
+ *
+ * \param message the request message
+ */
+void ro_gui_interactive_help_request(wimp_message *message) {
+ char message_token[32];
+ char menu_buffer[4];
+ wimp_selection menu_tree;
+ help_full_message_request *message_data;
+ wimp_w window;
+ wimp_i icon;
+ gui_window *g;
+ unsigned int index;
+
+ /* Ensure we have a help request
+ */
+ if ((!message) || (message->action != message_HELP_REQUEST)) return;
+
+ /* Initialise the basic token to a null byte
+ */
+ message_token[0] = 0x00;
+
+ /* Get the message data
+ */
+ message_data = (help_full_message_request *)message;
+ window = message_data->w;
+ icon = message_data->i;
+
+ /* Check if we have a browser window, toolbar window or status window
+ */
+ g = ro_gui_window_lookup(window);
+ if (g) {
+ if (g->window == window) {
+ sprintf(message_token, "HelpB%i", (int)icon);
+ } else if ((g->data.browser.toolbar) &&
+ (g->data.browser.toolbar->toolbar_handle == window)) {
+ sprintf(message_token, "HelpT%i", (int)icon);
+ } else if ((g->data.browser.toolbar) &&
+ (g->data.browser.toolbar->status_handle == window)) {
+ sprintf(message_token, "HelpS%i", (int)icon);
+ }
+ }
+
+ /* If we've managed to find something so far then we broadcast it
+ */
+ if (message_token[0] != 0x00) {
+ ro_gui_interactive_help_broadcast(message, &message_token[0]);
+ return;
+ }
+
+ /* As a last resort, check for menu help.
+ */
+ if (xwimp_get_menu_state((wimp_menu_state_flags)1,
+ &menu_tree,
+ window, icon)) return;
+ if (menu_tree.items[0] == -1) return;
+
+ /* Set the prefix
+ */
+ if (current_menu == iconbar_menu) {
+ sprintf(message_token, "HelpI");
+ } else if (current_menu == browser_menu) {
+ sprintf(message_token, "HelpM");
+ } else {
+ return;
+ }
+
+ /* Decode the menu
+ */
+ index = 0;
+ while (menu_tree.items[index] != -1) {
+ if (index == 0) {
+ sprintf(menu_buffer, "%i", menu_tree.items[index]);
+ } else {
+ sprintf(menu_buffer, "-%i", menu_tree.items[index]);
+ }
+ strcat(message_token, menu_buffer);
+ index++;
+ }
+
+ /* Finally, broadcast the menu help
+ */
+ ro_gui_interactive_help_broadcast(message, &message_token[0]);
+}
+
+
+/**
+ * Broadcasts a help reply
+ *
+ * \param message the original request message
+ * \param token the token to look up
+ */
+static void ro_gui_interactive_help_broadcast(wimp_message *message, char *token) {
+ char *translated_token;
+ help_full_message_reply *reply;
+
+ /* Check if the message exists
+ */
+ translated_token = (char *)messages_get(token);
+ if (translated_token == token) return;
+
+ /* Copy our message string
+ */
+ reply = (help_full_message_reply *)message;
+ reply->reply[235] = 0;
+ strncpy(reply->reply, translated_token, 235);
+
+ /* Broadcast the help reply
+ */
+ reply->size = 256;
+ reply->action = message_HELP_REPLY;
+ reply->your_ref = reply->my_ref;
+ wimp_send_message(wimp_USER_MESSAGE, reply, reply->sender);
+}