// The size available to the names list has changed so resize/move elements. // void List_Window::resized_name_panel(window_info *win) { calc_num_show_names(); cm_remove_regions(win_id); cm_add_region(cm_names_menu, win_id, 0, get_size_y()-get_names_size_y(), get_size_y(), get_names_size_y()); widget_resize(win_id, names_scroll_id, ELW_BOX_SIZE, get_names_size_y()-ELW_BOX_SIZE); widget_move(win_id, names_scroll_id, win->len_x-ELW_BOX_SIZE, get_grid_size()*num_grid_rows); make_active_visable(); update_scroll_len(); }
// The mouse is over the window // int List_Window::mouseover(window_info *win, int mx, int my) { if ((my < 0) || (cm_window_shown()!=CM_INIT_VALUE)) return 0; if (Vars::lists()->valid_active_list() && mx>=0 && mx<(get_grid_size()*6) && my>=0 && my<(get_grid_size()*num_grid_rows)) { size_t item_number = get_item_number(mx, my); if (item_number < Vars::lists()->get_list().get_num_items()) { Uint16 item_id = Vars::lists()->get_list().get_item_id(item_number); int image_id = Vars::lists()->get_list().get_image_id(item_number); if (show_item_desc_text && item_info_available() && (get_item_count(item_id, image_id) == 1)) desc_str = get_item_description(item_id, image_id); help_str.push_back(item_list_pickup_help_str); help_str.push_back(item_list_use_help_str); help_str.push_back(item_list_edit_help_str); } if ((storage_item_dragged != -1) || (item_dragged != -1)) help_str.push_back(item_list_add_help_str); else help_str.push_back(item_list_drag_help_str); } // check if over the add list button if (my>add_button_y && my<(add_button_y+2*DEFAULT_FONT_Y_LEN) && mx>add_button_x && mx<win->len_x) { help_str.push_back(item_list_create_help_str); mouse_over_add_button = true; } // check if over the list names and get which name int start_names = get_grid_size()*num_grid_rows; if ((my > start_names) && (my < (start_names+get_names_size_y()))) name_under_mouse = vscrollbar_get_pos (win_id, names_scroll_id) + static_cast<int>((my - start_names - get_list_gap()/2) / (get_list_gap() + names_list_height)); // name list context help if ((my > start_names) && (my < (start_names+get_names_size_y()))) { help_str.push_back(cm_help_options_str); if (!strlen(filter)) help_str.push_back(item_list_find_help_str); } return 0; }
// Create the window or just toggle its open/closed state. // void List_Window::show(window_info *win) { if (win_id < 0 ) { ItemLists::Vars::lists()->load(); ItemLists::Vars::cat_maps()->load(); filter[0] = '\0'; calc_num_show_names(get_grid_size()*6+110); add_button_x = static_cast<int>(get_size_x() - DEFAULT_FONT_X_LEN*2); add_button_y = get_grid_size(); win_id = create_window(item_list_preview_title, win->window_id, 0, get_window_pos_x(win), 0, get_size_x(), get_size_y(), ELW_WIN_DEFAULT|ELW_RESIZEABLE); set_window_handler(win_id, ELW_HANDLER_DISPLAY, (int (*)())&display_itemlist_handler ); set_window_handler(win_id, ELW_HANDLER_CLICK, (int (*)())&click_itemlist_handler ); set_window_handler(win_id, ELW_HANDLER_MOUSEOVER, (int (*)())&mouseover_itemlist_handler ); set_window_handler(win_id, ELW_HANDLER_HIDE, (int (*)())&hide_itemlist_handler ); set_window_handler(win_id, ELW_HANDLER_KEYPRESS, (int (*)())&keypress_itemlist_handler ); set_window_handler(win_id, ELW_HANDLER_RESIZE, (int (*)())&resize_itemlist_handler ); set_window_min_size(win_id, get_size_x(), get_size_y()); cm_selected_item_menu = cm_create(cm_item_list_selected_str, cm_selected_item_handler); cm_names_menu = cm_create(cm_item_list_names_str, cm_names_handler); cm_set_pre_show_handler(cm_names_menu, cm_names_pre_show_handler); cm_add_region(cm_names_menu, win_id, 0, get_size_y()-get_names_size_y(), get_size_y(), get_names_size_y()); names_scroll_id = vscrollbar_add_extended(win_id, 1, NULL, get_size_x()-ELW_BOX_SIZE, get_grid_size()*num_grid_rows, ELW_BOX_SIZE, get_names_size_y()-ELW_BOX_SIZE, 0, 1.0, newcol_r, newcol_g, newcol_b, 0, 1, Vars::lists()->size()-num_show_names_list); init_ipu(&ipu_item_list_name, -1, -1, -1, 1, 1, NULL, NULL); make_active_visable(); } else { toggle_window(win_id); make_active_visable(); close_ipu(&ipu_item_list_name); Vars::quantity_input()->close(); } }
int get_size_y(void) const { return get_grid_size()*num_grid_rows + get_names_size_y(); }