void ro_gui_save_click(wimp_pointer *pointer) { switch (pointer->i) { case ICON_SAVE_OK: close_menu = (pointer->buttons == wimp_CLICK_SELECT); ro_gui_save(ro_gui_get_icon_string(dialog_saveas, ICON_SAVE_PATH)); if (pointer->buttons == wimp_CLICK_SELECT) { xwimp_create_menu((wimp_menu *)-1, 0, 0); ro_gui_dialog_close(pointer->w); } break; case ICON_SAVE_CANCEL: if (pointer->buttons == wimp_CLICK_SELECT) { xwimp_create_menu((wimp_menu *)-1, 0, 0); ro_gui_dialog_close(pointer->w); } else if (pointer->buttons == wimp_CLICK_ADJUST) { ro_gui_set_icon_string(dialog_saveas, ICON_SAVE_PATH, reset_filename); } break; case ICON_SAVE_ICON: if (pointer->buttons == wimp_DRAG_SELECT) { ro_gui_drag_icon(pointer); } break; } }
void ro_gui_drag_save_link(gui_save_type save_type, const char *url, const char *title, struct gui_window *g) { wimp_pointer pointer; char icon_buf[20]; os_error *error; /* Close the save window because otherwise we need two contexts */ xwimp_create_menu(wimp_CLOSE_MENU, 0, 0); ro_gui_dialog_close(dialog_saveas); gui_save_url = url; gui_save_title = title; gui_save_sourcew = g->window; saving_from_dialog = false; error = xwimp_get_pointer_info(&pointer); if (error) { LOG(("xwimp_get_pointer_info: 0x%x: %s", error->errnum, error->errmess)); warn_user("WimpError", error->errmess); return; } ro_gui_save_set_state(NULL, save_type, url, save_leafname, icon_buf); gui_current_drag_type = GUI_DRAG_SAVE; ro_gui_drag_icon(pointer.pos.x, pointer.pos.y, icon_buf); }
void ro_gui_save_datasave_ack(wimp_message *message) { char *path = message->data.data_xfer.file_name; os_error *error; if (!ro_gui_save(path)) return; ro_gui_set_icon_string(dialog_saveas, ICON_SAVE_PATH, reset_filename); /* Close the save window */ ro_gui_dialog_close(dialog_saveas); /* Ack successful save with message_DATA_LOAD */ message->action = message_DATA_LOAD; message->your_ref = message->my_ref; error = xwimp_send_message_to_window(wimp_USER_MESSAGE, message, message->data.data_xfer.w, message->data.data_xfer.i, 0); if (error) { LOG(("xwimp_send_message_to_window: 0x%x: %s", error->errnum, error->errmess)); warn_user("FileError", error->errmess); } if (close_menu) { error = xwimp_create_menu(wimp_CLOSE_MENU, 0, 0); if (error) { LOG(("xwimp_create_menu: 0x%x: %s", error->errnum, error->errmess)); warn_user("MenuError", error->errmess); } } close_menu = true; }
void ro_gui_menu_refresh(wimp_menu *menu) { int checksum = 0; os_error *error; if (!current_menu_open) return; checksum = ro_gui_menu_get_checksum(); if (!ro_gui_wimp_event_prepare_menu(current_menu_window, current_menu_icon, current_menu)) return; /* \TODO -- Call the menu's event handler here. */ if (checksum != ro_gui_menu_get_checksum()) { error = xwimp_create_menu(current_menu, 0, 0); if (error) { LOG(("xwimp_create_menu: 0x%x: %s", error->errnum, error->errmess)); warn_user("MenuError", error->errmess); } } }
void ro_gui_create_menu(wimp_menu *menu, int x, int y) { os_error *error; current_menu = menu; int colour; if (menu == colour_menu) { colour = ro_gui_get_icon_background_colour(dialog_main, menu_icon - 1); for (int i = 0; i < 16; i++) { if (i == colour) { colour_menu->entries[i].menu_flags |= wimp_MENU_TICKED; } else { colour_menu->entries[i].menu_flags &= ~wimp_MENU_TICKED; } } } else if (menu == main_menu) { if (theme_sprites) { main_menu->entries[1].icon_flags &= ~wimp_ICON_SHADED; } else { main_menu->entries[1].icon_flags |= wimp_ICON_SHADED; } } error = xwimp_create_menu(menu, x - 64, y); if (error) { LOG(("xwimp_create_menu: 0x%x: %s", error->errnum, error->errmess)); warn_user("MenuError", error->errmess); } }
void ro_gui_menu_create(wimp_menu *menu, int x, int y, wimp_w w) { os_error *error; struct menu_definition *definition; /* translate menu, if necessary (this returns quickly * if there's nothing to be done) */ definition = ro_gui_menu_find_menu(menu); if (definition) { if (!ro_gui_menu_translate(definition)) { warn_user("NoMemory", 0); return; } } /* store the menu characteristics */ current_menu = menu; current_menu_window = w; current_menu_icon = wimp_ICON_WINDOW; /* create the menu */ current_menu_open = true; error = xwimp_create_menu(menu, x - 64, y); if (error) { LOG(("xwimp_create_menu: 0x%x: %s", error->errnum, error->errmess)); warn_user("MenuError", error->errmess); ro_gui_menu_closed(); } }
void gui_drag_save_object(gui_save_type save_type, hlcache_handle *c, struct gui_window *g) { wimp_pointer pointer; char icon_buf[20]; os_error *error; /* Close the save window because otherwise we need two contexts */ xwimp_create_menu(wimp_CLOSE_MENU, 0, 0); ro_gui_dialog_close(dialog_saveas); gui_save_sourcew = g->window; saving_from_dialog = false; error = xwimp_get_pointer_info(&pointer); if (error) { LOG(("xwimp_get_pointer_info: 0x%x: %s", error->errnum, error->errmess)); warn_user("WimpError", error->errmess); return; } ro_gui_save_set_state(c, save_type, nsurl_access(hlcache_handle_get_url(c)), save_leafname, LEAFNAME_MAX, icon_buf, sizeof(icon_buf)); gui_current_drag_type = GUI_DRAG_SAVE; ro_gui_drag_icon(pointer.pos.x, pointer.pos.y, icon_buf); }
void ro_gui_menu_destroy(void) { os_error *error; if (current_menu == NULL) return; error = xwimp_create_menu(wimp_CLOSE_MENU, 0, 0); if (error) { LOG(("xwimp_create_menu: 0x%x: %s", error->errnum, error->errmess)); warn_user("MenuError", error->errmess); } ro_gui_menu_closed(); }
/** * Clean up after a menu has been closed, or forcible close an open menu. */ void ro_gui_menu_closed(void) { os_error *error; if (current_menu) { error = xwimp_create_menu(wimp_CLOSE_MENU, 0, 0); if (error) { LOG(("xwimp_create_menu: 0x%x: %s", error->errnum, error->errmess)); warn_user("MenuError", error->errmess); } ro_gui_wimp_event_menus_closed(current_menu_window, current_menu_icon, current_menu); current_menu = NULL; } current_menu_window = NULL; current_menu_icon = 0; current_menu_open = false; }
void gui_drag_save_selection(struct selection *s, struct gui_window *g) { wimp_pointer pointer; char icon_buf[20]; os_error *error; /* Close the save window because otherwise we need two contexts */ xwimp_create_menu(wimp_CLOSE_MENU, 0, 0); ro_gui_dialog_close(dialog_saveas); gui_save_sourcew = g->window; saving_from_dialog = false; error = xwimp_get_pointer_info(&pointer); if (error) { LOG(("xwimp_get_pointer_info: 0x%x: %s", error->errnum, error->errmess)); warn_user("WimpError", error->errmess); return; } if (gui_save_selection == NULL) free(gui_save_selection); gui_save_selection = selection_get_copy(s); ro_gui_save_set_state(NULL, GUI_SAVE_TEXT_SELECTION, NULL, save_leafname, LEAFNAME_MAX, icon_buf, sizeof(icon_buf)); gui_current_drag_type = GUI_DRAG_SAVE; ro_gui_drag_icon(pointer.pos.x, pointer.pos.y, icon_buf); }