Superclass of the help_menu, which displays the left-hand pane of the GUI1 help browser. More...
#include <menu.hpp>
Classes | |
class | imgsel_style |
struct | item |
class | style |
Public Types | |
enum | ROW_TYPE { NORMAL_ROW , SELECTED_ROW } |
Public Member Functions | |
menu (bool click_selects=false, int max_height=-1, int max_width=-1, 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 () |
virtual void | set_items (const std::vector< indented_menu_item > &items, utils::optional< std::size_t > selected) |
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 |
Public Member Functions inherited from gui::scrollarea | |
scrollarea (bool auto_join=true) | |
Create a zone with automatic handling of scrollbar. More... | |
virtual void | hide (bool value=true) |
Public Member Functions inherited from gui::widget | |
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... | |
Public Member Functions inherited from events::sdl_handler | |
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 | |
Public Member Functions inherited from gui2::top_level_drawable | |
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 | |
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 |
int | widest_row_width () 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 |
bool | hit_on_indent_or_icon (std::size_t row_index, int x) const |
Returns true if a mouse-click with the given x-coordinate, and an appropriate y-coordinate would lie within the indent or icon part of the given row. More... | |
void | invalidate_row (std::size_t id) |
void | invalidate_row_pos (std::size_t pos) |
Protected Member Functions inherited from gui::scrollarea | |
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 |
Protected Member Functions inherited from gui::widget | |
widget (const bool auto_join=true) | |
virtual | ~widget () |
bool | mouse_locked () const |
void | aquire_mouse_lock () |
void | free_mouse_lock () |
Protected Member Functions inherited from events::sdl_handler | |
sdl_handler (const bool auto_join=true) | |
sdl_handler (const sdl_handler &) | |
sdl_handler & | operator= (const sdl_handler &) |
virtual | ~sdl_handler () |
Protected Member Functions inherited from gui2::top_level_drawable | |
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_ |
Protected Attributes inherited from gui::widget | |
bool | focus_ |
Private Types | |
enum | SELECTION_MOVE_VIEWPORT { MOVE_VIEWPORT , NO_MOVE_VIEWPORT } |
Private Member Functions | |
std::size_t | max_items_onscreen () const |
void | adjust_viewport_to_selection () |
void | key_press (SDL_Keycode key) |
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 indented_menu_item &imi) 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< indented_menu_item > &imi) |
Set new items to show. More... | |
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_ |
utils::optional< int > | widest_row_width_ |
Cached return value of widest_row_width(), calculated on demand when calling that function. More... | |
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_ |
std::set< int > | invalid_ |
Friends | |
class | style |
class | imgsel_style |
Superclass of the help_menu, which displays the left-hand pane of the GUI1 help browser.
Historically a more generic class, but now only used for that singular purpose.
enum gui::menu::ROW_TYPE |
|
private |
gui::menu::menu | ( | bool | click_selects = false , |
int | max_height = -1 , |
||
int | max_width = -1 , |
||
style * | menu_style = nullptr , |
||
const bool | auto_join = true |
||
) |
Definition at line 43 of file menu.cpp.
References default_style, fill_items(), gui::menu::style::init(), and style_.
gui::menu::~menu | ( | ) |
|
private |
Definition at line 199 of file menu.cpp.
References gui::scrollarea::adjust_position(), click_selects_, and selected_.
Referenced by set_items(), and set_selection_pos().
bool gui::menu::double_clicked | ( | ) |
Definition at line 415 of file menu.cpp.
References double_clicked_.
|
overrideprivatevirtual |
Reimplemented from gui::widget.
Definition at line 578 of file menu.cpp.
References gui::menu::style::draw_row(), get_item_rect(), i, item_pos_, NORMAL_ROW, out_, selected_, SELECTED_ROW, and style_.
|
protectedvirtual |
Definition at line 539 of file menu.cpp.
References draw::blit(), current_language_rtl(), video::game_canvas(), gui::menu::style::get_font_size(), image::get_texture(), gui::menu::style::get_thickness(), texture::h(), items_, max_width_, font::NORMAL_COLOR, font::pango_draw_text(), font::pango_line_size(), style_, texture::w(), gui::scrollarea::x, and gui::scrollarea::y.
Referenced by gui::menu::style::draw_row().
|
private |
Set new items to show.
Definition at line 63 of file menu.cpp.
References item_pos_, items_, and update_size().
Referenced by menu(), and set_items().
|
private |
Definition at line 654 of file menu.cpp.
References gui::menu::item::fields, get_item_height_internal(), item_height_, and items_.
Referenced by get_item_rect_internal(), and max_items_onscreen().
|
private |
Definition at line 649 of file menu.cpp.
References gui::menu::style::item_size(), and style_.
Referenced by get_item_height().
|
private |
Definition at line 600 of file menu.cpp.
References get_item_rect_internal(), and item_pos_.
Referenced by draw_contents(), hit(), invalidate_row(), and update_size().
|
private |
Definition at line 605 of file menu.cpp.
References sdl::empty_rect, video::game_canvas_size(), get_item_height(), gui::scrollarea::get_position(), 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 147 of file menu.hpp.
References max_height_.
|
inline |
Definition at line 148 of file menu.hpp.
References max_width_.
|
overrideprotectedvirtual |
Reimplemented from gui::scrollarea.
Definition at line 334 of file menu.cpp.
References game_config::sounds::button_press, click_selects_, DOUBLE_CLICK_EVENT, double_clicked_, gui::widget::focus(), gui::scrollarea::handle_event(), gui::widget::height(), gui::widget::hidden(), hit(), ignore_next_doubleclick_, 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_, gui::scrollarea::x, and gui::scrollarea::y.
|
protected |
Definition at line 586 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 |
Returns true if a mouse-click with the given x-coordinate, and an appropriate y-coordinate would lie within the indent or icon part of the given row.
The unusual combination of arguments fit with this being called when handling a mouse event, where we already know which row was selected, and are just inquiring a bit more about the details of that row.
Definition at line 519 of file menu.cpp.
References current_language_rtl(), gui::scrollarea::inner_location(), gui::menu::style::item_size(), items_, style_, w, and gui::scrollarea::x.
|
protected |
Definition at line 670 of file menu.cpp.
References get_item_rect(), items_, and gui::widget::queue_redraw().
Referenced by invalidate_row_pos().
|
protected |
Definition at line 679 of file menu.cpp.
References invalidate_row(), and items_.
Referenced by handle_event(), and set_selection_pos().
|
private |
|
private |
|
private |
|
private |
Definition at line 267 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 166 of file menu.cpp.
References video::game_canvas_size(), get_item_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 247 of file menu.cpp.
References item_pos_, MOVE_VIEWPORT, and set_selection_pos().
|
private |
Definition at line 232 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 255 of file menu.cpp.
References item_pos_, NO_MOVE_VIEWPORT, and set_selection_pos().
|
private |
Definition at line 239 of file menu.cpp.
References item_pos_, and set_selection_pos().
Referenced by handle_event().
|
private |
Definition at line 227 of file menu.cpp.
References selected_, and set_selection_pos().
Referenced by key_press().
|
inline |
int gui::menu::process | ( | ) |
Definition at line 405 of file menu.cpp.
References selected_, and show_result_.
|
overrideprotectedvirtual |
Reimplemented from events::sdl_handler.
Definition at line 301 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 262 of file menu.cpp.
References set_selection_pos().
|
overridevirtual |
Implements gui::scrollarea.
Definition at line 432 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 422 of file menu.cpp.
References click_selects_.
|
overrideprotectedvirtual |
Implements gui::scrollarea.
Definition at line 115 of file menu.cpp.
References itemRects_, and update_scrollbar_grip_height().
|
virtual |
Set new items to show and redraw/recalculate everything.
The menu tries to keep the selection at the same position as it were before the items were set.
Definition at line 121 of file menu.cpp.
References adjust_viewport_to_selection(), fill_items(), gui::scrollarea::get_max_position(), gui::scrollarea::get_position(), gui::scrollarea::has_scrollbar(), item_height_, item_pos_, itemRects_, items_, max_items_, gui::widget::queue_redraw(), game_config::images::selected, selected_, gui::scrollarea::set_position(), update_scrollbar_grip_height(), and widest_row_width_.
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 150 of file menu.cpp.
References itemRects_, max_height_, max_items_, and update_size().
void gui::menu::set_max_width | ( | const int | new_max_width | ) |
Definition at line 158 of file menu.cpp.
References itemRects_, max_width_, update_size(), and widest_row_width_.
void gui::menu::set_numeric_keypress_selection | ( | bool | value | ) |
Definition at line 427 of file menu.cpp.
References num_selects_.
|
private |
Definition at line 206 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().
|
private |
Definition at line 74 of file menu.cpp.
References items_, max_items_onscreen(), gui::scrollarea::set_full_size(), and gui::scrollarea::set_shown_size().
Referenced by set_inner_location(), set_items(), and update_size().
|
private |
Definition at line 80 of file menu.cpp.
References get_item_rect(), gui::scrollarea::get_position(), h, 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, widest_row_width(), and gui::widget::width().
Referenced by fill_items(), set_max_height(), and set_max_width().
|
protected |
Definition at line 504 of file menu.cpp.
References gui::menu::style::get_cell_padding(), gui::menu::style::item_size(), items_, utf8::size(), style_, and widest_row_width_.
Referenced by update_size().
|
friend |
|
static |
Definition at line 107 of file menu.hpp.
Referenced by video::deinit().
|
private |
Definition at line 207 of file menu.hpp.
Referenced by adjust_viewport_to_selection(), handle_event(), key_press(), requires_event_focus(), and set_click_selects().
|
static |
|
private |
Definition at line 214 of file menu.hpp.
Referenced by double_clicked(), and handle_event().
|
private |
Definition at line 239 of file menu.hpp.
Referenced by handle_event().
|
private |
Definition at line 193 of file menu.hpp.
Referenced by get_item_height(), and set_items().
|
private |
Definition at line 199 of file menu.hpp.
Referenced by draw_contents(), fill_items(), get_item_rect(), move_selection(), move_selection_keeping_viewport(), move_selection_to(), and set_items().
|
mutableprivate |
Definition at line 218 of file menu.hpp.
Referenced by get_item_rect_internal(), scroll(), set_inner_location(), set_items(), set_max_height(), and set_max_width().
|
private |
Definition at line 198 of file menu.hpp.
Referenced by draw_row(), fill_items(), get_item_height(), hit(), hit_on_indent_or_icon(), invalidate_row(), invalidate_row_pos(), key_press(), max_items_onscreen(), move_selection_down(), number_of_items(), selection(), set_items(), set_selection_pos(), update_scrollbar_grip_height(), update_size(), and widest_row_width().
|
private |
Definition at line 240 of file menu.hpp.
Referenced by handle_event().
|
private |
Definition at line 192 of file menu.hpp.
Referenced by get_max_height(), max_items_onscreen(), set_max_height(), and update_size().
|
mutableprivate |
Definition at line 193 of file menu.hpp.
Referenced by max_items_onscreen(), set_items(), and set_max_height().
|
private |
Definition at line 192 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 235 of file menu.hpp.
Referenced by key_press(), requires_event_focus(), and set_numeric_keypress_selection().
|
private |
Definition at line 208 of file menu.hpp.
Referenced by draw_contents(), and handle_event().
|
private |
Definition at line 206 of file menu.hpp.
Referenced by adjust_viewport_to_selection(), draw_contents(), handle_event(), move_selection_down(), move_selection_up(), process(), selection(), set_items(), and set_selection_pos().
|
private |
Definition at line 212 of file menu.hpp.
Referenced by handle_event(), and process().
|
protected |
Definition at line 171 of file menu.hpp.
Referenced by handle_event(), and set_selection_pos().
|
protected |
Definition at line 170 of file menu.hpp.
Referenced by draw_contents(), draw_row(), get_item_height_internal(), hit_on_indent_or_icon(), menu(), and widest_row_width().
|
private |
Definition at line 243 of file menu.hpp.
Referenced by update_size().
|
mutableprivate |
Cached return value of widest_row_width(), calculated on demand when calling that function.
Definition at line 204 of file menu.hpp.
Referenced by set_items(), set_max_width(), and widest_row_width().