#include <menu.hpp>
Classes | |
class | basic_sorter |
class | imgsel_style |
struct | item |
class | sorter |
class | style |
Public Types | |
enum | ROW_TYPE { NORMAL_ROW , SELECTED_ROW , HEADING_ROW } |
Public Member Functions | |
menu (const std::vector< std::string > &items, bool click_selects=false, int max_height=-1, int max_width=-1, const sorter *sorter_obj=nullptr, style *menu_style=nullptr, const bool auto_join=true) | |
~menu () | |
Default implementation, but defined out-of-line for efficiency reasons. More... | |
int | selection () const |
void | move_selection (std::size_t id) |
void | move_selection_keeping_viewport (std::size_t id) |
void | reset_selection () |
void | change_item (int pos1, int pos2, const std::string &str) |
virtual void | erase_item (std::size_t index) |
void | set_heading (const std::vector< std::string > &heading) |
virtual void | set_items (const std::vector< std::string > &items, bool strip_spaces=true, bool keep_viewport=false) |
Set new items to show and redraw/recalculate everything. More... | |
void | set_max_height (const int new_max_height) |
Set a new max height for this menu. More... | |
void | set_max_width (const int new_max_width) |
int | get_max_height () const |
int | get_max_width () const |
std::size_t | number_of_items () const |
int | process () |
bool | double_clicked () |
void | set_click_selects (bool value) |
void | set_numeric_keypress_selection (bool value) |
void | scroll (unsigned int pos) override |
void | set_sorter (sorter *s) |
void | sort_by (int column) |
int | get_sort_by () const |
bool | get_sort_reversed () const |
![]() | |
scrollarea (bool auto_join=true) | |
Create a zone with automatic handling of scrollbar. More... | |
virtual void | hide (bool value=true) |
![]() | |
const rect & | location () const |
virtual void | set_location (const SDL_Rect &rect) |
void | set_location (int x, int y) |
void | set_width (int w) |
void | set_height (int h) |
void | set_measurements (int w, int h) |
int | width () const |
int | height () const |
bool | focus (const SDL_Event *event) |
void | set_focus (bool focus) |
bool | hidden () const |
virtual void | enable (bool new_val=true) |
bool | enabled () const |
void | set_clip_rect (const SDL_Rect &rect) |
void | queue_redraw () |
Indicate that the widget should be redrawn. More... | |
void | queue_redraw (const rect &) |
Indicate that a specific region of the screen should be redrawn. More... | |
void | set_dirty (bool dirty=true) |
bool | dirty () const |
const std::string & | id () const |
void | set_id (const std::string &id) |
void | set_tooltip_string (const std::string &str) |
virtual void | process_tooltip_string (int mousex, int mousey) override |
virtual void | layout () override |
Called by draw_manager to validate layout. More... | |
virtual bool | expose (const rect ®ion) override |
Called by draw_manager when it believes a redraw is necessary. More... | |
virtual rect | screen_location () override |
The current draw location of the display, on the screen. More... | |
![]() | |
virtual void | handle_window_event (const SDL_Event &) |
virtual void | join () |
virtual void | join (context &c) |
virtual void | join_same (sdl_handler *parent) |
virtual void | leave () |
virtual void | join_global () |
virtual void | leave_global () |
virtual bool | has_joined () |
virtual bool | has_joined_global () |
sdl_handler & | operator= (sdl_handler &&)=delete |
Moving would require two instances' context membership to be handled, it's simpler to delete these and require the two instances to be separately constructed / destructed. More... | |
sdl_handler (sdl_handler &&)=delete | |
![]() | |
virtual void | update () |
Update state and any parameters that may effect layout, or any of the later stages. More... | |
virtual void | render () |
Perform any internal rendering necessary to prepare the drawable. More... | |
Static Public Attributes | |
static style & | default_style = menu::bluebg_style |
static imgsel_style | bluebg_style |
Protected Member Functions | |
bool | item_ends_with_image (const std::string &item) const |
virtual void | handle_event (const SDL_Event &event) override |
void | set_inner_location (const SDL_Rect &rect) override |
bool | requires_event_focus (const SDL_Event *event=nullptr) const override |
const std::vector< int > & | column_widths () const |
virtual void | draw_row (const std::size_t row_index, const SDL_Rect &rect, ROW_TYPE type) |
int | hit (int x, int y) const |
int | hit_column (int x) const |
int | hit_heading (int x, int y) const |
void | invalidate_row (std::size_t id) |
void | invalidate_row_pos (std::size_t pos) |
void | invalidate_heading () |
![]() | |
virtual sdl_handler_vector | handler_members () |
virtual void | update_location (const SDL_Rect &rect) |
virtual void | process_event () |
rect | inner_location () const |
unsigned | scrollbar_width () const |
unsigned | get_position () const |
unsigned | get_max_position () const |
void | set_position (unsigned pos) |
void | adjust_position (unsigned pos) |
void | move_position (int dep) |
void | set_shown_size (unsigned h) |
void | set_full_size (unsigned h) |
void | set_scroll_rate (unsigned r) |
bool | has_scrollbar () const |
![]() | |
widget (const bool auto_join=true) | |
virtual | ~widget () |
bool | mouse_locked () const |
void | aquire_mouse_lock () |
void | free_mouse_lock () |
![]() | |
sdl_handler (const bool auto_join=true) | |
sdl_handler (const sdl_handler &) | |
sdl_handler & | operator= (const sdl_handler &) |
virtual | ~sdl_handler () |
![]() | |
top_level_drawable () | |
virtual | ~top_level_drawable () |
top_level_drawable (const top_level_drawable &) | |
top_level_drawable & | operator= (const top_level_drawable &) |
top_level_drawable (top_level_drawable &&) | |
top_level_drawable & | operator= (top_level_drawable &&) |
Protected Attributes | |
style * | style_ |
bool | silent_ |
![]() | |
bool | focus_ |
Private Types | |
enum | SELECTION_MOVE_VIEWPORT { MOVE_VIEWPORT , NO_MOVE_VIEWPORT } |
Private Member Functions | |
std::size_t | max_items_onscreen () const |
std::size_t | heading_height () const |
void | adjust_viewport_to_selection () |
void | key_press (SDL_Keycode key) |
void | column_widths_item (const std::vector< std::string > &row, std::vector< int > &widths) const |
void | clear_item (int item) |
void | draw_contents () override |
SDL_Rect | get_item_rect (int item) const |
SDL_Rect | get_item_rect_internal (std::size_t pos) const |
std::size_t | get_item_height_internal (const std::vector< std::string > &item) const |
std::size_t | get_item_height (int item) const |
int | items_start () const |
int | items_end () const |
int | items_height () const |
void | update_scrollbar_grip_height () |
void | fill_items (const std::vector< std::string > &items, bool strip_spaces) |
Set new items to show. More... | |
void | do_sort () |
void | recalculate_pos () |
void | assert_pos () |
void | update_size () |
void | set_selection_pos (std::size_t pos, bool silent=false, SELECTION_MOVE_VIEWPORT move_viewport=MOVE_VIEWPORT) |
void | move_selection_to (std::size_t id, bool silent=false, SELECTION_MOVE_VIEWPORT move_viewport=MOVE_VIEWPORT) |
void | move_selection_up (std::size_t dep) |
void | move_selection_down (std::size_t dep) |
Private Attributes | |
int | max_height_ |
int | max_width_ |
int | max_items_ |
int | item_height_ |
std::vector< item > | items_ |
std::vector< std::size_t > | item_pos_ |
std::vector< std::string > | heading_ |
int | heading_height_ |
std::vector< int > | column_widths_ |
std::size_t | selected_ |
bool | click_selects_ |
bool | out_ |
bool | previous_button_ |
bool | show_result_ |
bool | double_clicked_ |
std::map< int, SDL_Rect > | itemRects_ |
bool | num_selects_ |
variable which determines whether a numeric keypress should select an item on the dialog More... | |
bool | ignore_next_doubleclick_ |
bool | last_was_doubleclick_ |
bool | use_ellipsis_ |
const sorter * | sorter_ |
int | sortby_ |
bool | sortreversed_ |
int | highlight_heading_ |
std::set< int > | invalid_ |
Friends | |
class | style |
class | imgsel_style |
enum gui::menu::ROW_TYPE |
|
private |
gui::menu::menu | ( | const std::vector< std::string > & | items, |
bool | click_selects = false , |
||
int | max_height = -1 , |
||
int | max_width = -1 , |
||
const sorter * | sorter_obj = nullptr , |
||
style * | menu_style = nullptr , |
||
const bool | auto_join = true |
||
) |
Definition at line 150 of file menu.cpp.
References default_style, fill_items(), gui::menu::style::init(), mp::ui_alerts::items, and style_.
gui::menu::~menu | ( | ) |
|
private |
Definition at line 444 of file menu.cpp.
References gui::scrollarea::adjust_position(), click_selects_, and selected_.
Referenced by erase_item(), set_items(), and set_selection_pos().
|
private |
Definition at line 259 of file menu.cpp.
References item_pos_, items_, and n.
Referenced by erase_item(), and recalculate_pos().
void gui::menu::change_item | ( | int | pos1, |
int | pos2, | ||
const std::string & | str | ||
) |
Definition at line 316 of file menu.cpp.
References item_pos_, items_, and gui::widget::queue_redraw().
|
private |
Definition at line 840 of file menu.cpp.
References get_item_rect(), and gui::widget::queue_redraw().
Referenced by erase_item().
|
protected |
Definition at line 828 of file menu.cpp.
References column_widths_, column_widths_item(), heading_, and items_.
Referenced by draw_row(), hit_column(), and update_size().
|
private |
Definition at line 807 of file menu.cpp.
References gui::menu::style::get_cell_padding(), item_ends_with_image(), gui::menu::style::item_size(), and style_.
Referenced by column_widths().
|
private |
Definition at line 229 of file menu.cpp.
References gui::menu::sorter::column_sortable(), item_pos_, items_, move_selection_to(), NO_MOVE_VIEWPORT, gui::widget::queue_redraw(), recalculate_pos(), selection(), sortby_, sorter_, and sortreversed_.
Referenced by fill_items(), and sort_by().
bool gui::menu::double_clicked | ( | ) |
Definition at line 673 of file menu.cpp.
References double_clicked_.
|
overrideprivatevirtual |
Reimplemented from gui::widget.
Definition at line 937 of file menu.cpp.
References gui::menu::style::draw_row(), get_item_rect(), heading_height(), HEADING_ROW, i, gui::scrollarea::inner_location(), item_pos_, NORMAL_ROW, out_, selected_, SELECTED_ROW, and style_.
|
protectedvirtual |
Definition at line 848 of file menu.cpp.
References gui::menu::style::adjust_image_bounds(), draw::blit(), column_widths(), current_language_rtl(), draw::fill(), video::game_canvas(), gui::menu::style::get_font_size(), image::get_texture(), gui::menu::style::get_thickness(), texture::h(), heading_, HEADING_ROW, highlight_heading_, i, IMAGE_PREFIX, IMG_TEXT_SEPARATOR, gui::scrollarea::inner_location(), items_, max_width_, font::NORMAL_COLOR, font::pango_draw_text(), font::pango_line_size(), utils::REMOVE_EMPTY, sortby_, sortreversed_, utils::split(), style_, w, texture::w(), gui::scrollarea::x, and gui::scrollarea::y.
Referenced by gui::menu::style::draw_row().
|
virtual |
Definition at line 327 of file menu.cpp.
References adjust_viewport_to_selection(), assert_pos(), clear_item(), i, utf8::index(), item_pos_, itemRects_, items_, gui::widget::queue_redraw(), selected_, and update_scrollbar_grip_height().
|
private |
Set new items to show.
If strip_spaces is false, spaces will remain at the item edges.
Definition at line 174 of file menu.cpp.
References COLUMN_SEPARATOR, DEFAULT_ITEM, do_sort(), heading_, HEADING_PREFIX, gui::widget::id(), item_pos_, mp::ui_alerts::items, items_, utils::quoted_split(), selected_, sortby_, and update_size().
Referenced by menu(), and set_items().
|
private |
Definition at line 1055 of file menu.cpp.
References get_item_height_internal(), item_height_, items_, and n.
Referenced by get_item_rect_internal(), and max_items_onscreen().
|
private |
Definition at line 1035 of file menu.cpp.
References i, gui::menu::style::item_size(), and style_.
Referenced by get_item_height(), and heading_height().
|
private |
Definition at line 986 of file menu.cpp.
References get_item_rect_internal(), and item_pos_.
Referenced by clear_item(), draw_contents(), hit(), invalidate_row(), and update_size().
|
private |
Definition at line 991 of file menu.cpp.
References sdl::empty_rect, video::game_canvas_size(), get_item_height(), gui::scrollarea::get_position(), heading_height(), i, gui::scrollarea::inner_location(), itemRects_, max_items_onscreen(), prev, map_location::y, and gui::scrollarea::y.
Referenced by get_item_rect().
|
inline |
Definition at line 177 of file menu.hpp.
References max_height_.
|
inline |
Definition at line 178 of file menu.hpp.
References max_width_.
|
inline |
|
inline |
Definition at line 197 of file menu.hpp.
References sortreversed_.
|
overrideprotectedvirtual |
Reimplemented from gui::scrollarea.
Definition at line 579 of file menu.cpp.
References game_config::sounds::button_press, click_selects_, gui::menu::sorter::column_sortable(), DOUBLE_CLICK_EVENT, double_clicked_, gui::widget::focus(), gui::scrollarea::handle_event(), gui::widget::height(), gui::widget::hidden(), highlight_heading_, hit(), hit_heading(), ignore_next_doubleclick_, invalidate_heading(), invalidate_row_pos(), key_press(), last_was_doubleclick_, gui::widget::mouse_locked(), move_selection_to(), out_, sound::play_UI_sound(), selected_, gui::widget::set_focus(), show_result_, silent_, sort_by(), sorter_, gui::scrollarea::x, and gui::scrollarea::y.
|
private |
Definition at line 1046 of file menu.cpp.
References get_item_height_internal(), heading_, heading_height_, and max_height_.
Referenced by draw_contents(), get_item_rect_internal(), hit_heading(), invalidate_heading(), max_items_onscreen(), and update_size().
|
protected |
Definition at line 949 of file menu.cpp.
References get_item_rect(), i, gui::scrollarea::inner_location(), items_, gui::scrollarea::x, and gui::scrollarea::y.
Referenced by handle_event().
|
protected |
Definition at line 963 of file menu.cpp.
References column_widths(), gui::widget::location(), and gui::scrollarea::x.
Referenced by hit_heading().
|
protected |
Definition at line 975 of file menu.cpp.
References heading_height(), gui::widget::height(), hit_column(), gui::scrollarea::inner_location(), gui::scrollarea::x, and gui::scrollarea::y.
Referenced by handle_event().
|
protected |
Definition at line 1086 of file menu.cpp.
References heading_height(), gui::scrollarea::inner_location(), and gui::widget::queue_redraw().
Referenced by handle_event().
|
protected |
Definition at line 1068 of file menu.cpp.
References get_item_rect(), items_, and gui::widget::queue_redraw().
Referenced by invalidate_row_pos().
|
protected |
Definition at line 1077 of file menu.cpp.
References invalidate_row(), and items_.
Referenced by handle_event(), and set_selection_pos().
|
protected |
Definition at line 821 of file menu.cpp.
References IMAGE_PREFIX, and IMG_TEXT_SEPARATOR.
Referenced by column_widths_item().
|
private |
|
private |
|
private |
|
private |
Definition at line 512 of file menu.cpp.
References click_selects_, items_, max_items_onscreen(), move_selection_down(), move_selection_up(), num_selects_, and set_selection_pos().
Referenced by handle_event().
|
private |
Definition at line 414 of file menu.cpp.
References video::game_canvas_size(), get_item_height(), heading_height(), items_, max_height_, max_items_, and n.
Referenced by get_item_rect_internal(), key_press(), update_scrollbar_grip_height(), and update_size().
void gui::menu::move_selection | ( | std::size_t | id | ) |
Definition at line 492 of file menu.cpp.
References item_pos_, MOVE_VIEWPORT, and set_selection_pos().
|
private |
Definition at line 477 of file menu.cpp.
References items_, selected_, and set_selection_pos().
Referenced by key_press().
void gui::menu::move_selection_keeping_viewport | ( | std::size_t | id | ) |
Definition at line 500 of file menu.cpp.
References item_pos_, NO_MOVE_VIEWPORT, and set_selection_pos().
|
private |
Definition at line 484 of file menu.cpp.
References item_pos_, and set_selection_pos().
Referenced by do_sort(), and handle_event().
|
private |
Definition at line 472 of file menu.cpp.
References selected_, and set_selection_pos().
Referenced by key_press().
|
inline |
int gui::menu::process | ( | ) |
Definition at line 663 of file menu.cpp.
References selected_, and show_result_.
|
private |
|
overrideprotectedvirtual |
Reimplemented from events::sdl_handler.
Definition at line 546 of file menu.cpp.
References click_selects_, gui::widget::focus_, gui::widget::height(), gui::widget::hidden(), and num_selects_.
void gui::menu::reset_selection | ( | ) |
Definition at line 507 of file menu.cpp.
References set_selection_pos().
|
overridevirtual |
Implements gui::scrollarea.
Definition at line 690 of file menu.cpp.
References itemRects_, and gui::widget::queue_redraw().
int gui::menu::selection | ( | ) | const |
void gui::menu::set_click_selects | ( | bool | value | ) |
Definition at line 680 of file menu.cpp.
References click_selects_.
void gui::menu::set_heading | ( | const std::vector< std::string > & | heading | ) |
Definition at line 356 of file menu.cpp.
References column_widths_, heading_, itemRects_, max_items_, and gui::widget::queue_redraw().
|
overrideprotectedvirtual |
Implements gui::scrollarea.
Definition at line 310 of file menu.cpp.
References itemRects_, and update_scrollbar_grip_height().
|
virtual |
Set new items to show and redraw/recalculate everything.
If strip_spaces is false, spaces will remain at the item edges. If keep_viewport is true, the menu tries to keep the selection at the same position as it were before the items were set.
Definition at line 367 of file menu.cpp.
References adjust_viewport_to_selection(), column_widths_, fill_items(), gui::scrollarea::get_max_position(), gui::scrollarea::get_position(), gui::scrollarea::has_scrollbar(), item_height_, item_pos_, itemRects_, mp::ui_alerts::items, items_, max_items_, gui::widget::queue_redraw(), selected_, gui::scrollarea::set_position(), and update_scrollbar_grip_height().
Referenced by help::help_menu::display_visible_items().
void gui::menu::set_max_height | ( | const int | new_max_height | ) |
Set a new max height for this menu.
Note that this does not take effect immediately, only after certain operations that clear everything, such as set_items().
Definition at line 398 of file menu.cpp.
References itemRects_, max_height_, max_items_, and update_size().
Referenced by help::help_browser::adjust_layout().
void gui::menu::set_max_width | ( | const int | new_max_width | ) |
Definition at line 406 of file menu.cpp.
References column_widths_, itemRects_, max_width_, and update_size().
Referenced by help::help_browser::adjust_layout().
void gui::menu::set_numeric_keypress_selection | ( | bool | value | ) |
Definition at line 685 of file menu.cpp.
References num_selects_.
|
private |
Definition at line 451 of file menu.cpp.
References adjust_viewport_to_selection(), invalidate_row_pos(), items_, game_config::sounds::menu_select, MOVE_VIEWPORT, sound::play_UI_sound(), selected_, and silent_.
Referenced by key_press(), move_selection(), move_selection_down(), move_selection_keeping_viewport(), move_selection_to(), move_selection_up(), and reset_selection().
void gui::menu::set_sorter | ( | sorter * | s | ) |
void gui::menu::sort_by | ( | int | column | ) |
Definition at line 707 of file menu.cpp.
References do_sort(), itemRects_, gui::widget::queue_redraw(), sortby_, and sortreversed_.
Referenced by handle_event(), and set_sorter().
|
private |
Definition at line 268 of file menu.cpp.
References items_, max_items_onscreen(), gui::scrollarea::set_full_size(), and gui::scrollarea::set_shown_size().
Referenced by erase_item(), set_inner_location(), set_items(), and update_size().
|
private |
Definition at line 274 of file menu.cpp.
References column_widths(), get_item_rect(), gui::scrollarea::get_position(), h, heading_height(), gui::widget::height(), i, items_, max_height_, max_items_onscreen(), max_width_, gui::scrollarea::scrollbar_width(), gui::widget::set_measurements(), update_scrollbar_grip_height(), use_ellipsis_, w, and gui::widget::width().
Referenced by fill_items(), set_max_height(), and set_max_width().
|
friend |
|
static |
Definition at line 96 of file menu.hpp.
Referenced by video::deinit().
|
private |
Definition at line 241 of file menu.hpp.
Referenced by adjust_viewport_to_selection(), handle_event(), key_press(), requires_event_focus(), and set_click_selects().
|
mutableprivate |
Definition at line 238 of file menu.hpp.
Referenced by column_widths(), set_heading(), set_items(), and set_max_width().
|
static |
|
private |
Definition at line 248 of file menu.hpp.
Referenced by double_clicked(), and handle_event().
|
private |
Definition at line 235 of file menu.hpp.
Referenced by column_widths(), draw_row(), fill_items(), heading_height(), and set_heading().
|
mutableprivate |
Definition at line 236 of file menu.hpp.
Referenced by heading_height().
|
private |
Definition at line 285 of file menu.hpp.
Referenced by draw_row(), and handle_event().
|
private |
Definition at line 276 of file menu.hpp.
Referenced by handle_event().
|
private |
Definition at line 227 of file menu.hpp.
Referenced by get_item_height(), and set_items().
|
private |
Definition at line 233 of file menu.hpp.
Referenced by assert_pos(), change_item(), do_sort(), draw_contents(), erase_item(), fill_items(), get_item_rect(), move_selection(), move_selection_keeping_viewport(), move_selection_to(), recalculate_pos(), and set_items().
|
mutableprivate |
Definition at line 255 of file menu.hpp.
Referenced by erase_item(), get_item_rect_internal(), scroll(), set_heading(), set_inner_location(), set_items(), set_max_height(), set_max_width(), and sort_by().
|
private |
Definition at line 232 of file menu.hpp.
Referenced by assert_pos(), change_item(), column_widths(), do_sort(), draw_row(), erase_item(), fill_items(), get_item_height(), hit(), invalidate_row(), invalidate_row_pos(), key_press(), max_items_onscreen(), move_selection_down(), number_of_items(), recalculate_pos(), selection(), set_items(), set_selection_pos(), update_scrollbar_grip_height(), and update_size().
|
private |
Definition at line 277 of file menu.hpp.
Referenced by handle_event().
|
private |
Definition at line 226 of file menu.hpp.
Referenced by get_max_height(), heading_height(), max_items_onscreen(), set_max_height(), and update_size().
|
mutableprivate |
Definition at line 227 of file menu.hpp.
Referenced by max_items_onscreen(), set_heading(), set_items(), and set_max_height().
|
private |
Definition at line 226 of file menu.hpp.
Referenced by draw_row(), get_max_width(), set_max_width(), and update_size().
|
private |
variable which determines whether a numeric keypress should select an item on the dialog
Definition at line 272 of file menu.hpp.
Referenced by key_press(), requires_event_focus(), and set_numeric_keypress_selection().
|
private |
Definition at line 242 of file menu.hpp.
Referenced by draw_contents(), and handle_event().
|
private |
Definition at line 240 of file menu.hpp.
Referenced by adjust_viewport_to_selection(), draw_contents(), erase_item(), fill_items(), handle_event(), move_selection_down(), move_selection_up(), process(), selection(), set_items(), and set_selection_pos().
|
private |
Definition at line 246 of file menu.hpp.
Referenced by handle_event(), and process().
|
protected |
Definition at line 209 of file menu.hpp.
Referenced by handle_event(), help::help_menu::help_menu(), and set_selection_pos().
|
private |
Definition at line 283 of file menu.hpp.
Referenced by do_sort(), draw_row(), fill_items(), get_sort_by(), set_sorter(), and sort_by().
|
private |
Definition at line 282 of file menu.hpp.
Referenced by do_sort(), handle_event(), and set_sorter().
|
private |
Definition at line 284 of file menu.hpp.
Referenced by do_sort(), draw_row(), get_sort_reversed(), set_sorter(), and sort_by().
|
protected |
Definition at line 208 of file menu.hpp.
Referenced by column_widths_item(), draw_contents(), draw_row(), get_item_height_internal(), menu(), and help::help_menu::process().
|
private |
Definition at line 280 of file menu.hpp.
Referenced by update_size().