mirror of
https://github.com/netsurf-browser/netsurf
synced 2025-01-11 13:29:21 +03:00
[project @ 2004-07-05 22:17:59 by rjw]
Minor hotlist GUI fixes. Further hotlist menu development. svn path=/import/netsurf/; revision=1052
This commit is contained in:
parent
f8a1933c15
commit
b9c4038e5f
@ -66,6 +66,14 @@ HelpInfo:User information
|
||||
HelpInter:Interactive help
|
||||
HelpAbout:About NetSurf
|
||||
|
||||
Hotlist:Hotlist
|
||||
New:New
|
||||
Expand:Expand
|
||||
Collapse:Collapse
|
||||
All:All
|
||||
Folders:Folders
|
||||
Links:Links
|
||||
|
||||
Themes:Themes
|
||||
|
||||
# Hotlist window
|
||||
|
@ -66,6 +66,14 @@ HelpInfo:Information utilisateur
|
||||
HelpInter:Aide interactive
|
||||
HelpAbout:À propos de NetSurf
|
||||
|
||||
Hotlist:Hotlist
|
||||
New:New
|
||||
Expand:Expand
|
||||
Collapse:Collapse
|
||||
All:All
|
||||
Folders:Folders
|
||||
Links:Links
|
||||
|
||||
Themes:Thèmes
|
||||
|
||||
# Hotlist window
|
||||
|
@ -43,7 +43,8 @@ typedef enum { GUI_SAVE_SOURCE, GUI_SAVE_DRAW, GUI_SAVE_TEXT,
|
||||
GUI_SAVE_COMPLETE,
|
||||
GUI_SAVE_OBJECT_ORIG, GUI_SAVE_OBJECT_NATIVE,
|
||||
GUI_SAVE_LINK_URI, GUI_SAVE_LINK_URL,
|
||||
GUI_SAVE_LINK_TEXT } gui_save_type;
|
||||
GUI_SAVE_LINK_TEXT,
|
||||
GUI_HOTLIST_EXPORT_HTML} gui_save_type;
|
||||
extern gui_save_type gui_current_save_type;
|
||||
typedef enum { GUI_DRAG_SELECTION, GUI_DRAG_DOWNLOAD_SAVE,
|
||||
GUI_DRAG_SAVE, GUI_DRAG_STATUS_RESIZE,
|
||||
@ -187,6 +188,11 @@ void ro_gui_hotlist_move_drag_end(wimp_dragged *drag);
|
||||
bool ro_gui_hotlist_keypress(int key);
|
||||
void ro_gui_hotlist_menu_closed(void);
|
||||
|
||||
int ro_gui_hotlist_get_selected(bool folders);
|
||||
void ro_gui_hotlist_set_selected(bool selected);
|
||||
void ro_gui_hotlist_set_expanded(bool expand, bool folders, bool links);
|
||||
void ro_gui_hotlist_save_as(const char *file);
|
||||
|
||||
/* in save.c */
|
||||
void ro_gui_save_click(wimp_pointer *pointer);
|
||||
void ro_gui_drag_icon(wimp_pointer *pointer);
|
||||
|
112
riscos/hotlist.c
112
riscos/hotlist.c
@ -175,6 +175,7 @@ wimp_mouse_state drag_buttons;
|
||||
/* Whether the current selection was from a menu click
|
||||
*/
|
||||
bool menu_selection = false;
|
||||
bool menu_open = false;
|
||||
|
||||
/* Hotlist loading buffer
|
||||
*/
|
||||
@ -195,7 +196,7 @@ static int ro_gui_hotlist_selection_state(struct hotlist_entry *entry, bool sele
|
||||
static void ro_gui_hotlist_selection_drag(struct hotlist_entry *entry,
|
||||
int x0, int y0, int x1, int y1,
|
||||
bool toggle, bool redraw);
|
||||
static int ro_gui_hotlist_selection_count(struct hotlist_entry *entry);
|
||||
static int ro_gui_hotlist_selection_count(struct hotlist_entry *entry, bool folders);
|
||||
static void ro_gui_hotlist_update_expansion(struct hotlist_entry *entry, bool only_selected,
|
||||
bool folders, bool links, bool expand, bool contract);
|
||||
static void ro_gui_hotlist_launch_selection(struct hotlist_entry *entry);
|
||||
@ -410,8 +411,11 @@ bool ro_gui_hotlist_load(void) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Perform a save to the default file
|
||||
*/
|
||||
void ro_gui_hotlist_save(void) {
|
||||
FILE *fp;
|
||||
|
||||
/* Don't save if we didn't load
|
||||
*/
|
||||
@ -422,9 +426,23 @@ void ro_gui_hotlist_save(void) {
|
||||
xosfile_create_dir("<Choices$Write>.WWW", 0);
|
||||
xosfile_create_dir("<Choices$Write>.WWW.NetSurf", 0);
|
||||
|
||||
/* Save to our file
|
||||
*/
|
||||
ro_gui_hotlist_save_as("<Choices$Write>.WWW.NetSurf.Hotlist");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Perform a save to a specified file
|
||||
*
|
||||
* /param file the file to save to
|
||||
*/
|
||||
void ro_gui_hotlist_save_as(const char *file) {
|
||||
FILE *fp;
|
||||
|
||||
/* Open our file
|
||||
*/
|
||||
fp = fopen("<Choices$Write>.WWW.NetSurf.Hotlist", "w");
|
||||
fp = fopen(file, "w");
|
||||
if (!fp) {
|
||||
warn_user("HotlistSaveError", 0);
|
||||
return;
|
||||
@ -450,7 +468,7 @@ void ro_gui_hotlist_save(void) {
|
||||
|
||||
/* Set the filetype to HTML
|
||||
*/
|
||||
xosfile_set_type("<Choices$Write>.WWW.NetSurf.Hotlist", 0xfaf);
|
||||
xosfile_set_type(file, 0xfaf);
|
||||
}
|
||||
|
||||
bool ro_gui_hotlist_save_entry(FILE *fp, struct hotlist_entry *entry) {
|
||||
@ -1305,7 +1323,8 @@ void ro_gui_hotlist_click(wimp_pointer *pointer) {
|
||||
*/
|
||||
x_offset = x - entry->x0;
|
||||
y_offset = y - (entry->y0 + entry->height);
|
||||
if (((x_offset < HOTLIST_LEAF_INSET) && (y_offset > -HOTLIST_LINE_HEIGHT)) ||
|
||||
if (((x_offset < HOTLIST_LEAF_INSET) && (y_offset > -HOTLIST_LINE_HEIGHT) &&
|
||||
((buttons == wimp_CLICK_SELECT << 8) || (buttons == wimp_CLICK_ADJUST << 8))) ||
|
||||
((entry->children != -1) &&
|
||||
((buttons == wimp_DOUBLE_SELECT) || (buttons == wimp_DOUBLE_ADJUST)))) {
|
||||
ro_gui_hotlist_update_expansion(entry->child_entry, false, true, true, false, true);
|
||||
@ -1322,7 +1341,7 @@ void ro_gui_hotlist_click(wimp_pointer *pointer) {
|
||||
/* We treat a menu click as a Select click if we have no selections
|
||||
*/
|
||||
if (buttons == wimp_CLICK_MENU) {
|
||||
if (ro_gui_hotlist_selection_count(root.child_entry) == 0) {
|
||||
if (ro_gui_hotlist_selection_count(root.child_entry, true) == 0) {
|
||||
menu_selection = true;
|
||||
buttons = (wimp_CLICK_SELECT << 8);
|
||||
}
|
||||
@ -1363,7 +1382,9 @@ void ro_gui_hotlist_click(wimp_pointer *pointer) {
|
||||
}
|
||||
}
|
||||
} else {
|
||||
no_entry = true;
|
||||
if (!((x_offset < HOTLIST_LEAF_INSET) && (y_offset > -HOTLIST_LINE_HEIGHT))) {
|
||||
no_entry = true;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
no_entry = true;
|
||||
@ -1376,9 +1397,10 @@ void ro_gui_hotlist_click(wimp_pointer *pointer) {
|
||||
/* Create a menu if we should
|
||||
*/
|
||||
if (buttons == wimp_CLICK_MENU) {
|
||||
/* ro_gui_create_menu(hotlist_menu, pointer->pos.x - 64,
|
||||
ro_gui_create_menu(hotlist_menu, pointer->pos.x - 64,
|
||||
pointer->pos.y, NULL);
|
||||
*/ return;
|
||||
menu_open = true;
|
||||
return;
|
||||
}
|
||||
|
||||
/* Handle a click without an entry
|
||||
@ -1517,7 +1539,7 @@ int ro_gui_hotlist_selection_state(struct hotlist_entry *entry, bool selected, b
|
||||
|
||||
/* Continue onwards
|
||||
*/
|
||||
if (entry->child_entry) {
|
||||
if ((entry->child_entry) && ((!selected) || (entry->expanded))) {
|
||||
changes += ro_gui_hotlist_selection_state(entry->child_entry,
|
||||
selected, redraw & (entry->expanded));
|
||||
}
|
||||
@ -1526,7 +1548,13 @@ int ro_gui_hotlist_selection_state(struct hotlist_entry *entry, bool selected, b
|
||||
return changes;
|
||||
}
|
||||
|
||||
int ro_gui_hotlist_selection_count(struct hotlist_entry *entry) {
|
||||
|
||||
/**
|
||||
* Return the current number of selected items (internal interface)
|
||||
*
|
||||
* \param entry the entry to count siblings and children of
|
||||
*/
|
||||
int ro_gui_hotlist_selection_count(struct hotlist_entry *entry, bool folders) {
|
||||
int count = 0;
|
||||
|
||||
/* Check we have an entry (only applies if we have an empty hotlist)
|
||||
@ -1538,12 +1566,12 @@ int ro_gui_hotlist_selection_count(struct hotlist_entry *entry) {
|
||||
while (entry) {
|
||||
/* Check this entry
|
||||
*/
|
||||
if (entry->selected) count++;
|
||||
if ((entry->selected) && (folders || (entry->children == -1))) count++;
|
||||
|
||||
/* Continue onwards
|
||||
*/
|
||||
if (entry->child_entry) {
|
||||
count += ro_gui_hotlist_selection_count(entry->child_entry);
|
||||
count += ro_gui_hotlist_selection_count(entry->child_entry, folders);
|
||||
}
|
||||
entry = entry->next_entry;
|
||||
}
|
||||
@ -1589,6 +1617,11 @@ void ro_gui_hotlist_launch_selection(struct hotlist_entry *entry) {
|
||||
void ro_gui_hotlist_update_expansion(struct hotlist_entry *entry, bool only_selected,
|
||||
bool folders, bool links, bool expand, bool contract) {
|
||||
bool current;
|
||||
|
||||
/* Set a reformat to be pending
|
||||
*/
|
||||
reformat_pending = true;
|
||||
|
||||
/* Check we have an entry (only applies if we have an empty hotlist)
|
||||
*/
|
||||
if (!entry) return;
|
||||
@ -1603,7 +1636,7 @@ void ro_gui_hotlist_update_expansion(struct hotlist_entry *entry, bool only_sele
|
||||
|
||||
/* Only update what we should
|
||||
*/
|
||||
if (((links) && (entry->children != -1)) || ((folders) && (entry->children > 0))) {
|
||||
if (((links) && (entry->children == -1)) || ((folders) && (entry->children > 0))) {
|
||||
/* Update the expansion state
|
||||
*/
|
||||
if (expand) {
|
||||
@ -1793,6 +1826,7 @@ void ro_gui_hotlist_move_drag_end(wimp_dragged *drag) {
|
||||
* Handle a menu being closed
|
||||
*/
|
||||
void ro_gui_hotlist_menu_closed(void) {
|
||||
menu_open = false;
|
||||
if (menu_selection) {
|
||||
ro_gui_hotlist_selection_state(root.child_entry, false, true);
|
||||
menu_selection = false;
|
||||
@ -1814,16 +1848,22 @@ bool ro_gui_hotlist_keypress(int key) {
|
||||
switch (key) {
|
||||
case 1: /* CTRL+A */
|
||||
ro_gui_hotlist_selection_state(root.child_entry, true, true);
|
||||
if (menu_open) ro_gui_create_menu(hotlist_menu, 0, 0, NULL);
|
||||
return true;
|
||||
case 26: /* CTRL+Z */
|
||||
ro_gui_hotlist_selection_state(root.child_entry, false, true);
|
||||
if (menu_open) ro_gui_create_menu(hotlist_menu, 0, 0, NULL);
|
||||
return true;
|
||||
case 32: /* SPACE */
|
||||
ro_gui_hotlist_update_expansion(root.child_entry, true, true, true, false, false);
|
||||
if (menu_open) ro_gui_create_menu(hotlist_menu, 0, 0, NULL);
|
||||
return true;
|
||||
case wimp_KEY_RETURN:
|
||||
ro_gui_hotlist_launch_selection(root.child_entry);
|
||||
return true;
|
||||
case wimp_KEY_F3:
|
||||
ro_gui_hotlist_save();
|
||||
return true;
|
||||
case wimp_KEY_UP:
|
||||
case wimp_KEY_DOWN:
|
||||
case wimp_KEY_PAGE_UP:
|
||||
@ -1867,6 +1907,50 @@ bool ro_gui_hotlist_keypress(int key) {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Set all items to either selected or deselected
|
||||
*
|
||||
* \param selected the state to set all items to
|
||||
*/
|
||||
void ro_gui_hotlist_set_selected(bool selected) {
|
||||
ro_gui_hotlist_selection_state(root.child_entry, selected, true);
|
||||
menu_selection = false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Return the current number of selected items
|
||||
*
|
||||
* \param folders include folders in the selection count
|
||||
* \return the number of selected items
|
||||
*/
|
||||
int ro_gui_hotlist_get_selected(bool folders) {
|
||||
return ro_gui_hotlist_selection_count(root.child_entry, folders);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set all items to either selected or deselected
|
||||
*
|
||||
* \param expand whether to expand (collapse otherwise)
|
||||
* \param folders whether to update folders
|
||||
* \param links whether to update links
|
||||
*/
|
||||
void ro_gui_hotlist_set_expanded(bool expand, bool folders, bool links) {
|
||||
ro_gui_hotlist_update_expansion(root.child_entry, false, folders, links, expand, !expand);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Convert the time of the last visit into a human friendly string
|
||||
*
|
||||
|
215
riscos/menus.c
215
riscos/menus.c
@ -49,6 +49,7 @@ static void ro_gui_menu_pageinfo(wimp_message_menu_warning *warning);
|
||||
static void ro_gui_menu_objectinfo(wimp_message_menu_warning *warning);
|
||||
static struct box *ro_gui_menu_find_object_box(void);
|
||||
static void ro_gui_menu_object_reload(void);
|
||||
static void ro_gui_menu_hotlist_warning(wimp_message_menu_warning *warning);
|
||||
|
||||
wimp_menu *current_menu;
|
||||
static int current_menu_x, current_menu_y;
|
||||
@ -274,40 +275,87 @@ wimp_menu *browser_menu = (wimp_menu *) &menu;
|
||||
|
||||
|
||||
|
||||
/* Hotlist new submenu
|
||||
*/
|
||||
static wimp_MENU(2) hotlist_new = {
|
||||
{ "New" }, 7,2,7,0, 300, 44, 0,
|
||||
{
|
||||
{ 0, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "Folder" } },
|
||||
{ wimp_MENU_LAST, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "Link" } },
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/* Hotlist expand submenu
|
||||
*/
|
||||
static wimp_MENU(3) hotlist_expand = {
|
||||
{ "Expand" }, 7,2,7,0, 300, 44, 0,
|
||||
{
|
||||
{ 0, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "All" } },
|
||||
{ 0, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "Folders" } },
|
||||
{ wimp_MENU_LAST, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "Links" } },
|
||||
}
|
||||
};
|
||||
|
||||
/* Hotlist collapse submenu
|
||||
*/
|
||||
static wimp_MENU(3) hotlist_collapse = {
|
||||
{ "Collapse" }, 7,2,7,0, 300, 44, 0,
|
||||
{
|
||||
{ 0, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "All" } },
|
||||
{ 0, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "Folders" } },
|
||||
{ wimp_MENU_LAST, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "Links" } },
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
static wimp_MENU(4) hotlist_save = {
|
||||
{ "SaveHotlist" }, 7,2,7,0, 200, 44, 0,
|
||||
{
|
||||
{ wimp_MENU_GIVE_WARNING, (wimp_menu*)1, DEFAULT_FLAGS, { "URI" } },
|
||||
{ wimp_MENU_GIVE_WARNING, (wimp_menu*)1, DEFAULT_FLAGS, { "URL" } },
|
||||
{ wimp_MENU_GIVE_WARNING, (wimp_menu*)1, DEFAULT_FLAGS, { "HTML" } },
|
||||
{ wimp_MENU_LAST | wimp_MENU_GIVE_WARNING, (wimp_menu*)1, DEFAULT_FLAGS, { "LinkText" } }
|
||||
}
|
||||
};
|
||||
|
||||
/* Hotlist file submenu
|
||||
*/
|
||||
static wimp_MENU(6) hotlist_file = {
|
||||
static wimp_MENU(5) hotlist_file = {
|
||||
{ "Hotlist" }, 7,2,7,0, 300, 44, 0,
|
||||
{
|
||||
{ 0, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "Save" } },
|
||||
{ wimp_MENU_SEPARATE, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "Export" } },
|
||||
{ 0, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "OpenDir" } },
|
||||
{ 0, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "CloseDir" } },
|
||||
{ 0, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "OpenLinks" } },
|
||||
{ wimp_MENU_LAST, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "CloseLinks" } }
|
||||
{ wimp_MENU_GIVE_WARNING, (wimp_menu *)&hotlist_new, DEFAULT_FLAGS, { "New" } },
|
||||
{ wimp_MENU_GIVE_WARNING, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "Save" } },
|
||||
{ wimp_MENU_GIVE_WARNING | wimp_MENU_SEPARATE, (wimp_menu *)1, DEFAULT_FLAGS, { "Export" } },
|
||||
{ 0, (wimp_menu *)&hotlist_expand, DEFAULT_FLAGS, { "Expand" } },
|
||||
{ wimp_MENU_LAST, (wimp_menu *)&hotlist_collapse, DEFAULT_FLAGS, { "Collapse" } },
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/* Hotlist file submenu
|
||||
*/
|
||||
static wimp_MENU(3) hotlist_select = {
|
||||
static wimp_MENU(5) hotlist_select = {
|
||||
{ "Selection" }, 7,2,7,0, 300, 44, 0,
|
||||
{
|
||||
{ 0, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "Save" } },
|
||||
{ wimp_MENU_SEPARATE, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "Launch" } },
|
||||
{ wimp_MENU_LAST, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "Delete" } },
|
||||
{ wimp_MENU_GIVE_WARNING, (wimp_menu *)&hotlist_save, DEFAULT_FLAGS, { "Save" } },
|
||||
{ wimp_MENU_SEPARATE, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "Launch" } },
|
||||
{ wimp_MENU_GIVE_WARNING, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "EditTitle" } },
|
||||
{ 0, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "Delete" } },
|
||||
{ wimp_MENU_LAST, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "ResetUsage" } },
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/* Hotlist menu
|
||||
*/
|
||||
static wimp_MENU(2) hotlist_root = {
|
||||
static wimp_MENU(4) hotlist_root = {
|
||||
{ "Hotlist" }, 7,2,7,0, 200, 44, 0,
|
||||
{
|
||||
{ 0, (wimp_menu *)&hotlist_file, DEFAULT_FLAGS, { "Hotlist" } },
|
||||
{ wimp_MENU_LAST, (wimp_menu *)&hotlist_select, DEFAULT_FLAGS, { "Selection" } },
|
||||
{ 0, (wimp_menu *)&hotlist_file, DEFAULT_FLAGS, { "Hotlist" } },
|
||||
{ wimp_MENU_GIVE_WARNING, (wimp_menu *)&hotlist_select, DEFAULT_FLAGS, { "Selection" } },
|
||||
{ 0, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "SelectAll" } },
|
||||
{ wimp_MENU_LAST, wimp_NO_SUB_MENU, DEFAULT_FLAGS, { "Clear" } },
|
||||
}
|
||||
};
|
||||
wimp_menu *hotlist_menu = (wimp_menu *)&hotlist_root;
|
||||
@ -328,7 +376,12 @@ static wimp_menu *browser_window_menu = (wimp_menu *)&window_menu;
|
||||
static wimp_menu *browser_utilities_menu = (wimp_menu *)&utilities_menu;
|
||||
static wimp_menu *browser_hotlist_menu = (wimp_menu *)&hotlist_util_menu;
|
||||
static wimp_menu *browser_help_menu = (wimp_menu *)&help_menu;
|
||||
|
||||
static wimp_menu *hotlist_new_menu = (wimp_menu *)&hotlist_new;
|
||||
static wimp_menu *hotlist_expand_menu = (wimp_menu *)&hotlist_expand;
|
||||
static wimp_menu *hotlist_collapse_menu = (wimp_menu *)&hotlist_collapse;
|
||||
static wimp_menu *hotlist_file_menu = (wimp_menu *)&hotlist_file;
|
||||
static wimp_menu *hotlist_save_menu = (wimp_menu *)&hotlist_save;
|
||||
static wimp_menu *hotlist_select_menu = (wimp_menu *)&hotlist_select;
|
||||
|
||||
|
||||
@ -339,8 +392,8 @@ static wimp_menu *hotlist_select_menu = (wimp_menu *)&hotlist_select;
|
||||
void ro_gui_menus_init(void)
|
||||
{
|
||||
translate_menu(iconbar_menu);
|
||||
|
||||
translate_menu(browser_menu);
|
||||
translate_menu(hotlist_menu);
|
||||
translate_menu(browser_page_menu);
|
||||
translate_menu(browser_export_menu);
|
||||
translate_menu(browser_object_menu);
|
||||
@ -355,7 +408,13 @@ void ro_gui_menus_init(void)
|
||||
translate_menu(browser_utilities_menu);
|
||||
translate_menu(browser_hotlist_menu);
|
||||
translate_menu(browser_help_menu);
|
||||
|
||||
translate_menu(hotlist_menu);
|
||||
translate_menu(hotlist_new_menu);
|
||||
translate_menu(hotlist_expand_menu);
|
||||
translate_menu(hotlist_collapse_menu);
|
||||
translate_menu(hotlist_file_menu);
|
||||
translate_menu(hotlist_save_menu);
|
||||
translate_menu(hotlist_select_menu);
|
||||
|
||||
iconbar_menu->entries[0].sub_menu = (wimp_menu *) dialog_info;
|
||||
@ -410,6 +469,8 @@ void translate_menu(wimp_menu *menu)
|
||||
|
||||
void ro_gui_create_menu(wimp_menu *menu, int x, int y, gui_window *g)
|
||||
{
|
||||
int selection;
|
||||
|
||||
current_menu = menu;
|
||||
current_menu_x = x;
|
||||
current_menu_y = y;
|
||||
@ -420,6 +481,16 @@ void ro_gui_create_menu(wimp_menu *menu, int x, int y, gui_window *g)
|
||||
else
|
||||
menu->entries[1].icon_flags |= wimp_ICON_SHADED;
|
||||
}
|
||||
if (menu == hotlist_menu) {
|
||||
selection = ro_gui_hotlist_get_selected(true);
|
||||
if (selection == 0) {
|
||||
hotlist_menu->entries[1].icon_flags |= wimp_ICON_SHADED;
|
||||
hotlist_menu->entries[3].icon_flags |= wimp_ICON_SHADED;
|
||||
} else {
|
||||
hotlist_menu->entries[1].icon_flags &= ~wimp_ICON_SHADED;
|
||||
hotlist_menu->entries[3].icon_flags &= ~wimp_ICON_SHADED;
|
||||
}
|
||||
}
|
||||
wimp_create_menu(menu, x, y);
|
||||
}
|
||||
|
||||
@ -478,6 +549,38 @@ void ro_gui_menu_selection(wimp_selection *selection)
|
||||
break;
|
||||
}
|
||||
|
||||
} else if (current_menu == hotlist_menu) {
|
||||
switch (selection->items[0]) {
|
||||
case 0: /* Hotlist-> */
|
||||
switch (selection->items[1]) {
|
||||
case 0: /* New */
|
||||
break;
|
||||
case 1: /* Save */
|
||||
ro_gui_hotlist_save();
|
||||
break;
|
||||
case 2: /* Export */
|
||||
break;
|
||||
case 3: /* Expand */
|
||||
ro_gui_hotlist_set_expanded(true,
|
||||
(selection->items[2] != 2),
|
||||
(selection->items[2] != 1));
|
||||
break;
|
||||
case 4: /* Collapse */
|
||||
ro_gui_hotlist_set_expanded(false,
|
||||
(selection->items[2] != 2),
|
||||
(selection->items[2] != 1));
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 1: /* Selection-> */
|
||||
break;
|
||||
case 2: /* Select all */
|
||||
ro_gui_hotlist_set_selected(true);
|
||||
break;
|
||||
case 3: /* Clear */
|
||||
ro_gui_hotlist_set_selected(false);
|
||||
break;
|
||||
}
|
||||
} else if (current_menu == browser_menu) {
|
||||
struct content *c = current_gui->data.browser.bw->current_content;
|
||||
switch (selection->items[0]) {
|
||||
@ -653,17 +756,17 @@ void ro_gui_menu_selection(wimp_selection *selection)
|
||||
break;
|
||||
case MENU_UTILITIES:
|
||||
switch (selection->items[1]) {
|
||||
case 0: /* Hotlist -> */
|
||||
switch (selection->items[2]) {
|
||||
case 0: /* Add to hotlist */
|
||||
ro_gui_hotlist_add(current_gui->title,
|
||||
current_gui->data.browser.bw->current_content);
|
||||
break;
|
||||
case 1: /* Show hotlist */
|
||||
ro_gui_hotlist_show();
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 0: /* Hotlist -> */
|
||||
switch (selection->items[2]) {
|
||||
case 0: /* Add to hotlist */
|
||||
ro_gui_hotlist_add(current_gui->title,
|
||||
current_gui->data.browser.bw->current_content);
|
||||
break;
|
||||
case 1: /* Show hotlist */
|
||||
ro_gui_hotlist_show();
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case MENU_HELP:
|
||||
@ -706,14 +809,21 @@ void ro_gui_menu_selection(wimp_selection *selection)
|
||||
|
||||
|
||||
/**
|
||||
* Handle Message_MenuWarning by opening the save dialog.
|
||||
* Handle Message_MenuWarning.
|
||||
*/
|
||||
|
||||
void ro_gui_menu_warning(wimp_message_menu_warning *warning)
|
||||
{
|
||||
struct content *c = current_gui->data.browser.bw->current_content;
|
||||
struct content *c;
|
||||
os_error *error = NULL; // No warnings
|
||||
|
||||
if (current_menu == hotlist_menu) {
|
||||
ro_gui_menu_hotlist_warning(warning);
|
||||
return;
|
||||
} else if (current_menu != browser_menu) {
|
||||
return;
|
||||
}
|
||||
|
||||
c = current_gui->data.browser.bw->current_content;
|
||||
switch (warning->selection.items[0]) {
|
||||
case MENU_PAGE: /* Page -> */
|
||||
switch (warning->selection.items[1]) {
|
||||
@ -845,6 +955,37 @@ void ro_gui_menu_warning(wimp_message_menu_warning *warning)
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Handle Message_MenuWarning for the hotlist menu.
|
||||
*/
|
||||
void ro_gui_menu_hotlist_warning(wimp_message_menu_warning *warning) {
|
||||
os_error *error = NULL; // No warnings
|
||||
|
||||
|
||||
switch (warning->selection.items[0]) {
|
||||
case 0: /* Hotlist-> */
|
||||
switch (warning->selection.items[1]) {
|
||||
case 0: /* New */
|
||||
break;
|
||||
case 2: /* Export */
|
||||
gui_current_save_type = GUI_HOTLIST_EXPORT_HTML;
|
||||
ro_gui_menu_prepare_save(NULL);
|
||||
error = xwimp_create_sub_menu((wimp_menu *) dialog_saveas,
|
||||
warning->pos.x, warning->pos.y);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 1: /* Selection-> */
|
||||
break;
|
||||
}
|
||||
|
||||
if (error) {
|
||||
LOG(("0x%x: %s\n", error->errnum, error->errmess));
|
||||
warn_user("MenuError", error->errmess);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Prepares the save box to reflect gui_current_save_type and a content.
|
||||
*
|
||||
@ -858,7 +999,12 @@ void ro_gui_menu_prepare_save(struct content *c)
|
||||
const char *name = "";
|
||||
const char *nice;
|
||||
|
||||
assert(c);
|
||||
/* We can't assert globally any more as hotlists have no content
|
||||
*/
|
||||
if (gui_current_save_type != GUI_HOTLIST_EXPORT_HTML) {
|
||||
assert(c);
|
||||
}
|
||||
|
||||
|
||||
switch (gui_current_save_type) {
|
||||
case GUI_SAVE_SOURCE:
|
||||
@ -902,11 +1048,16 @@ void ro_gui_menu_prepare_save(struct content *c)
|
||||
icon = "file_fff";
|
||||
name = messages_get("SaveLink");
|
||||
break;
|
||||
case GUI_HOTLIST_EXPORT_HTML:
|
||||
icon = "file_faf";
|
||||
name = "Hotlist";
|
||||
break;
|
||||
}
|
||||
|
||||
save_content = c;
|
||||
if ((nice = url_nice(c->url)))
|
||||
name = nice;
|
||||
if (c) {
|
||||
if ((nice = url_nice(c->url))) name = nice;
|
||||
}
|
||||
|
||||
/* Ensure the correct icon exists
|
||||
*/
|
||||
|
@ -144,7 +144,7 @@ void ro_gui_save_datasave_ack(wimp_message *message)
|
||||
struct content *c = save_content;
|
||||
os_error *error;
|
||||
|
||||
if (!save_content) {
|
||||
if (!save_content && gui_current_save_type != GUI_HOTLIST_EXPORT_HTML) {
|
||||
LOG(("unexpected DataSaveAck: save_content not set"));
|
||||
return;
|
||||
}
|
||||
@ -211,6 +211,9 @@ void ro_gui_save_datasave_ack(wimp_message *message)
|
||||
if (!ro_gui_save_link(c, LINK_TEXT, path))
|
||||
return;
|
||||
break;
|
||||
case GUI_HOTLIST_EXPORT_HTML:
|
||||
ro_gui_hotlist_save_as(path);
|
||||
break;
|
||||
}
|
||||
|
||||
/* Ack successful save with message_DATA_LOAD */
|
||||
|
Loading…
Reference in New Issue
Block a user