// 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(); }
// 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(); } }
// Handle mouse clicks in the window // int List_Window::click(window_info *win, int mx, int my, Uint32 flags) { if (my < 0) // don't respond here to title bar being clicked return 0; if (flags & ELW_LEFT_MOUSE) clicked = true; if (!Vars::lists()->valid_active_list()) return 1; // hide and clear any quantity input widow Vars::quantity_input()->close(); size_t last_selected = selected_item_number; size_t num_items = Vars::lists()->get_list().get_num_items(); bool was_dragging = ((storage_item_dragged != -1) || (item_dragged != -1)); size_t over_item_number = Vars::win()->get_item_number(mx, my); // If dragging item and ctrl+left-click on window, add item to list if ((flags & ELW_LEFT_MOUSE) && (flags & ELW_CTRL) && was_dragging) { if (storage_item_dragged != -1) Vars::lists()->add_item(over_item_number, storage_items[storage_item_dragged].image_id, storage_items[storage_item_dragged].id, item_quantity); else if (item_dragged != -1) Vars::lists()->add_item(over_item_number, item_list[item_dragged].image_id, item_list[item_dragged].id, item_quantity); return 1; } // ctrl+right-click on a selected item opens the edit menu if ((flags & ELW_RIGHT_MOUSE) && (flags & ELW_CTRL) && (over_item_number<num_items)) { cm_show_direct(Vars::win()->get_grid_cm(), win->window_id, -1); storage_item_dragged = item_dragged = -1; return 1; } restore_inventory_quantity(); // wheel mouse up/down scrolls if ((flags & ELW_WHEEL_UP ) || (flags & ELW_WHEEL_DOWN )) { // change the active list if (my<get_grid_size()*num_grid_rows) { if (flags & ELW_WHEEL_UP) Vars::lists()->change_active(-1); else if (flags & ELW_WHEEL_DOWN) Vars::lists()->change_active(1); make_active_visable(); } // scroll the names else { if (flags&ELW_WHEEL_UP) vscrollbar_scroll_up(win->window_id, names_scroll_id); else if(flags&ELW_WHEEL_DOWN) vscrollbar_scroll_down(win->window_id, names_scroll_id); } return 1; } // see if we can use the item quantity or take items from storage if ((flags & ELW_RIGHT_MOUSE) || (flags & ELW_LEFT_MOUSE)) { if ((over_item_number!=last_selected) && (over_item_number < num_items)) { selected_item_number = over_item_number; last_quantity_selected = quantities.selected; quantities.selected = ITEM_EDIT_QUANT; item_quantity = quantities.quantity[ITEM_EDIT_QUANT].val = Vars::lists()->get_list().get_quantity(selected_item_number); if (flags & ELW_RIGHT_MOUSE) do_click_sound(); if (flags & ELW_LEFT_MOUSE) { // randomly close the window if (!(SDL_GetTicks() & 63)) { hide_window(Vars::win()->get_id()); set_shown_string(c_red2, item_list_magic_str); return 0; } storage_item_dragged = item_dragged = -1; int image_id = Vars::lists()->get_list().get_image_id(selected_item_number); Uint16 item_id = Vars::lists()->get_list().get_item_id(selected_item_number); int cat_id = Vars::cat_maps()->get_cat(image_id, item_id); if (cat_id != -1) pickup_storage_item(image_id, item_id, cat_id); else { do_alert1_sound(); il_pickup_fail_time = SDL_GetTicks(); static bool first_fail = true; if (first_fail) { first_fail = false; LOG_TO_CONSOLE(c_red1, item_list_learn_cat_str); } } } } else storage_item_dragged = item_dragged = -1; } return 1; }