[project @ 2004-04-13 19:04:32 by rjw]

Added extra menu options.
Fixed bug in menu creation for values not present in the Messages file.

svn path=/import/netsurf/; revision=774
This commit is contained in:
Richard Wilson 2004-04-13 19:04:32 +00:00
parent f31bd7c468
commit 033e1cda54
1 changed files with 155 additions and 50 deletions

View File

@ -5,6 +5,7 @@
* Copyright 2003 Phil Mellor <monkeyson@users.sourceforge.net> * Copyright 2003 Phil Mellor <monkeyson@users.sourceforge.net>
* Copyright 2004 James Bursa <bursa@users.sourceforge.net> * Copyright 2004 James Bursa <bursa@users.sourceforge.net>
* Copyright 2003 John M Bell <jmb202@ecs.soton.ac.uk> * Copyright 2003 John M Bell <jmb202@ecs.soton.ac.uk>
* Copyright 2004 Richard Wilson <not_ginger_matt@users.sourceforge.net>
*/ */
/** \file /** \file
@ -13,12 +14,12 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include "libxml/encoding.h"
#include "oslib/wimp.h" #include "oslib/wimp.h"
#include "netsurf/desktop/gui.h" #include "netsurf/desktop/gui.h"
#include "netsurf/riscos/constdata.h" #include "netsurf/riscos/constdata.h"
#include "netsurf/riscos/gui.h" #include "netsurf/riscos/gui.h"
#include "netsurf/riscos/theme.h" #include "netsurf/riscos/theme.h"
#include "netsurf/riscos/options.h"
#include "netsurf/utils/log.h" #include "netsurf/utils/log.h"
#include "netsurf/utils/messages.h" #include "netsurf/utils/messages.h"
#include "netsurf/utils/url.h" #include "netsurf/utils/url.h"
@ -26,8 +27,10 @@
static void translate_menu(wimp_menu *menu); static void translate_menu(wimp_menu *menu);
static void ro_gui_menu_prepare_images(void);
static void ro_gui_menu_pageinfo(wimp_message_menu_warning *warning); static void ro_gui_menu_pageinfo(wimp_message_menu_warning *warning);
static wimp_menu *current_menu; static wimp_menu *current_menu;
static int current_menu_x, current_menu_y; static int current_menu_x, current_menu_y;
gui_window *current_gui; gui_window *current_gui;
@ -43,8 +46,8 @@ wimp_menu *iconbar_menu = (wimp_menu *) & (wimp_MENU(4)) {
{ "NetSurf" }, 7,2,7,0, 200, 44, 0, { "NetSurf" }, 7,2,7,0, 200, 44, 0,
{ {
{ 0, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "Info" } }, { 0, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "Info" } },
{ 0, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "AppHelp" } },
{ 0, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "Choices" } }, { 0, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "Choices" } },
{ 0, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "Help" } },
{ wimp_MENU_LAST, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "Quit" } } { wimp_MENU_LAST, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "Quit" } }
} }
}; };
@ -63,7 +66,7 @@ static wimp_menu *browser_export_menu = (wimp_menu *) &export_menu;
static wimp_MENU(5) page_menu = { static wimp_MENU(5) page_menu = {
{ "Page" }, 7,2,7,0, 200, 44, 0, { "Page" }, 7,2,7,0, 200, 44, 0,
{ {
{ wimp_MENU_GIVE_WARNING, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "Info" } }, { wimp_MENU_GIVE_WARNING, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "PageInfo" } },
{ wimp_MENU_GIVE_WARNING, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "Save" } }, { wimp_MENU_GIVE_WARNING, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "Save" } },
{ wimp_MENU_GIVE_WARNING, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "SaveComp" } }, { wimp_MENU_GIVE_WARNING, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "SaveComp" } },
{ 0, (wimp_menu *) &export_menu, DEFAULT_FLAGS, { "Export" } }, { 0, (wimp_menu *) &export_menu, DEFAULT_FLAGS, { "Export" } },
@ -94,21 +97,46 @@ static wimp_MENU(5) navigate_menu = {
}; };
static wimp_menu *browser_navigate_menu = (wimp_menu *) &navigate_menu; static wimp_menu *browser_navigate_menu = (wimp_menu *) &navigate_menu;
static wimp_MENU(1) view_menu = { static wimp_MENU(2) image_menu = {
{ "Images" }, 7,2,7,0, 300, 44, 0,
{
{ 0, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "DitherImg" } },
{ wimp_MENU_LAST, wimp_NO_SUB_MENU, DEFAULT_FLAGS | wimp_ICON_SHADED, { "FilterImg" } }
}
};
static wimp_menu *browser_image_menu = (wimp_menu *) &image_menu;
static wimp_MENU(3) view_menu = {
{ "View" }, 7,2,7,0, 300, 44, 0, { "View" }, 7,2,7,0, 300, 44, 0,
{ {
{ wimp_MENU_LAST, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "ScaleView" } } { 0, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "ScaleView" } },
{ wimp_MENU_SEPARATE | wimp_MENU_GIVE_WARNING, (wimp_menu *) &image_menu, DEFAULT_FLAGS, { "Images" } },
{ wimp_MENU_LAST, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "ViewSrc" } }
} }
}; };
static wimp_menu *browser_view_menu = (wimp_menu *) &view_menu; static wimp_menu *browser_view_menu = (wimp_menu *) &view_menu;
wimp_menu *browser_menu = (wimp_menu *) & (wimp_MENU(4)) {
static wimp_MENU(4) help_menu = {
{ "Help" }, 7,2,7,0, 300, 44, 0,
{
{ 0, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "HelpContent" } },
{ 0, wimp_NO_SUB_MENU, DEFAULT_FLAGS | wimp_ICON_SHADED, { "HelpGuide" } },
{ wimp_MENU_SEPARATE, wimp_NO_SUB_MENU, DEFAULT_FLAGS | wimp_ICON_SHADED, { "HelpInfo" } },
{ wimp_MENU_LAST, wimp_NO_SUB_MENU, DEFAULT_FLAGS | wimp_ICON_SHADED, { "HelpInter" } }
}
};
static wimp_menu *browser_help_menu = (wimp_menu *) &help_menu;
wimp_menu *browser_menu = (wimp_menu *) & (wimp_MENU(5)) {
{ "NetSurf" }, 7,2,7,0, 200, 44, 0, { "NetSurf" }, 7,2,7,0, 200, 44, 0,
{ {
{ 0, (wimp_menu *) &page_menu, DEFAULT_FLAGS, { "Page" } }, { 0, (wimp_menu *) &page_menu, DEFAULT_FLAGS, { "Page" } },
{ 0, (wimp_menu *) &selection_menu, DEFAULT_FLAGS, { "Selection" } }, { wimp_MENU_SUB_MENU_WHEN_SHADED, (wimp_menu *) &selection_menu, DEFAULT_FLAGS | wimp_ICON_SHADED, { "Selection" } },
{ 0, (wimp_menu *) &navigate_menu, DEFAULT_FLAGS, { "Navigate" } }, { 0, (wimp_menu *) &navigate_menu, DEFAULT_FLAGS, { "Navigate" } },
{ wimp_MENU_LAST, (wimp_menu *) &view_menu, DEFAULT_FLAGS, { "View" } } { 0, (wimp_menu *) &view_menu, DEFAULT_FLAGS, { "View" } },
{ wimp_MENU_LAST, (wimp_menu *) &help_menu, DEFAULT_FLAGS, { "Help" } }
} }
}; };
@ -126,6 +154,8 @@ void ro_gui_menus_init(void)
translate_menu(browser_selection_menu); translate_menu(browser_selection_menu);
translate_menu(browser_navigate_menu); translate_menu(browser_navigate_menu);
translate_menu(browser_view_menu); translate_menu(browser_view_menu);
translate_menu(browser_image_menu);
translate_menu(browser_help_menu);
iconbar_menu->entries[0].sub_menu = (wimp_menu *) dialog_info; iconbar_menu->entries[0].sub_menu = (wimp_menu *) dialog_info;
browser_page_menu->entries[0].sub_menu = (wimp_menu*) dialog_pageinfo; browser_page_menu->entries[0].sub_menu = (wimp_menu*) dialog_pageinfo;
@ -144,19 +174,29 @@ void ro_gui_menus_init(void)
void translate_menu(wimp_menu *menu) void translate_menu(wimp_menu *menu)
{ {
unsigned int i = 0; unsigned int i = 0;
char *indirected_text;
/* title */ /* We can't just blindly set something as indirected as if we use
menu->title_data.indirected_text.text = messages_get(menu->title_data.text); the fallback messages text (ie the pointer we gave), we overwrite
this data when setting the pointer to the indirected text we
already had.
*/
indirected_text = (char *)messages_get(menu->title_data.text);
if (indirected_text != menu->title_data.text) {
menu->title_data.indirected_text.text = indirected_text;
menu->entries[0].menu_flags |= wimp_MENU_TITLE_INDIRECTED; menu->entries[0].menu_flags |= wimp_MENU_TITLE_INDIRECTED;
}
/* items */ /* items */
do { do {
indirected_text = (char *)messages_get(menu->entries[i].data.text);
if (indirected_text != menu->entries[i].data.text) {
menu->entries[i].icon_flags |= wimp_ICON_INDIRECTED; menu->entries[i].icon_flags |= wimp_ICON_INDIRECTED;
menu->entries[i].data.indirected_text.text = menu->entries[i].data.indirected_text.text = indirected_text;
messages_get(menu->entries[i].data.text);
menu->entries[i].data.indirected_text.validation = 0; menu->entries[i].data.indirected_text.validation = 0;
menu->entries[i].data.indirected_text.size = menu->entries[i].data.indirected_text.size = strlen(indirected_text) + 1;
strlen(menu->entries[i].data.indirected_text.text) + 1; }
i++; i++;
} while ((menu->entries[i - 1].menu_flags & wimp_MENU_LAST) == 0); } while ((menu->entries[i - 1].menu_flags & wimp_MENU_LAST) == 0);
} }
@ -217,18 +257,19 @@ void ro_gui_menu_selection(wimp_selection *selection)
ro_gui_create_menu((wimp_menu *) dialog_info, ro_gui_create_menu((wimp_menu *) dialog_info,
pointer.pos.x, pointer.pos.y, 0); pointer.pos.x, pointer.pos.y, 0);
break; break;
case 1: /* Choices */ case 1: /* Help */
ro_gui_dialog_open(dialog_config);
break;
case 2: /* Help */
ro_gui_open_help_page(); ro_gui_open_help_page();
break; break;
case 2: /* Choices */
ro_gui_dialog_open(dialog_config);
break;
case 3: /* Quit */ case 3: /* Quit */
netsurf_quit = true; netsurf_quit = true;
break; break;
} }
} else if (current_menu == browser_menu) { } else if (current_menu == browser_menu) {
struct content *c = current_gui->data.browser.bw->current_content;
switch (selection->items[0]) { switch (selection->items[0]) {
case 0: /* Page -> */ case 0: /* Page -> */
switch (selection->items[1]) { switch (selection->items[1]) {
@ -275,6 +316,38 @@ void ro_gui_menu_selection(wimp_selection *selection)
break; break;
} }
break; break;
case 3: /* View -> */
switch (selection->items[1]) {
case 0: /* Scale view */
break;
case 1: /* Images -> */
if (selection->items[2] == 0) option_dither_sprites = !option_dither_sprites;
if (selection->items[2] == 1) option_filter_sprites = !option_filter_sprites;
if (selection->items[2] >= 0) {
ro_gui_menu_prepare_images();
content_broadcast(c, CONTENT_MSG_REDRAW, 0);
}
break;
case 2: /* Page source */
ro_gui_view_source(c);
break;
}
break;
case 4: /* Help -> */
switch (selection->items[1]) {
case -1: /* No sub-item */
case 0: /* Contents */
ro_gui_open_help_page();
break;
case 1: /* User guide -> */
break;
case 2: /* User information */
break;
case 3: /* Interactive help */
break;
}
break;
} }
} else if (current_menu == theme_menu && theme_menu != NULL) { } else if (current_menu == theme_menu && theme_menu != NULL) {
@ -291,17 +364,19 @@ void ro_gui_menu_selection(wimp_selection *selection)
/** /**
* Handle Message_MenuWarning * Handle Message_MenuWarning by opening the save dialog.
*/ */
void ro_gui_menu_warning(wimp_message_menu_warning *warning) void ro_gui_menu_warning(wimp_message_menu_warning *warning)
{ {
struct content *c = current_gui->data.browser.bw->current_content; struct content *c = current_gui->data.browser.bw->current_content;
os_error *error; os_error *error = NULL; // No warnings
if (warning->selection.items[0] != 0) // if ((warning->selection.items[0] != 0) && (warning->selection.items[0] != 3))
return; // return;
switch (warning->selection.items[0]) {
case 0: /* Page -> */
switch (warning->selection.items[1]) { switch (warning->selection.items[1]) {
case 3: /* Export as -> */ case 3: /* Export as -> */
switch (warning->selection.items[2]) { switch (warning->selection.items[2]) {
@ -319,6 +394,7 @@ void ro_gui_menu_warning(wimp_message_menu_warning *warning)
gui_current_save_type = GUI_SAVE_COMPLETE; gui_current_save_type = GUI_SAVE_COMPLETE;
break; break;
case 0: /* Page info */ case 0: /* Page info */
ro_gui_menu_pageinfo(warning); ro_gui_menu_pageinfo(warning);
return; return;
@ -328,11 +404,22 @@ void ro_gui_menu_warning(wimp_message_menu_warning *warning)
gui_current_save_type = GUI_SAVE_SOURCE; gui_current_save_type = GUI_SAVE_SOURCE;
break; break;
} }
ro_gui_menu_prepare_save(c); ro_gui_menu_prepare_save(c);
error = xwimp_create_sub_menu((wimp_menu *) dialog_saveas, error = xwimp_create_sub_menu((wimp_menu *) dialog_saveas,
warning->pos.x, warning->pos.y); warning->pos.x, warning->pos.y);
break;
case 3: /* View -> */
switch (warning->selection.items[1]) {
case 1: /* Images -> */
ro_gui_menu_prepare_images();
error = xwimp_create_sub_menu(browser_image_menu,
warning->pos.x, warning->pos.y);
break;
}
break;
}
if (error) { if (error) {
LOG(("0x%x: %s\n", error->errnum, error->errmess)); LOG(("0x%x: %s\n", error->errnum, error->errmess));
warn_user(error->errmess); warn_user(error->errmess);
@ -385,6 +472,24 @@ void ro_gui_menu_prepare_save(struct content *c)
ro_gui_set_icon_string(dialog_saveas, ICON_SAVE_PATH, name); ro_gui_set_icon_string(dialog_saveas, ICON_SAVE_PATH, name);
} }
/**
* Update image menu status
*/
static void ro_gui_menu_prepare_images(void) {
if (current_menu != browser_menu) return;
/* We don't currently have any local options so we update from the global ones
*/
browser_image_menu->entries[0].menu_flags &= ~wimp_MENU_TICKED;
if (option_dither_sprites) browser_image_menu->entries[0].menu_flags |= wimp_MENU_TICKED;
browser_image_menu->entries[1].menu_flags &= ~wimp_MENU_TICKED;
if (option_filter_sprites) browser_image_menu->entries[1].menu_flags |= wimp_MENU_TICKED;
// content_broadcast(c, CONTENT_MSG_REDRAW, 0);
}
void ro_gui_menu_pageinfo(wimp_message_menu_warning *warning) void ro_gui_menu_pageinfo(wimp_message_menu_warning *warning)
{ {
struct content *c = current_gui->data.browser.bw->current_content; struct content *c = current_gui->data.browser.bw->current_content;