X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fgui%2Fmenu.hpp;h=6aaeb3ff8f8e8d66b98107196a14f0296c56dea9;hb=675a7dc47a1f8efc33d2138b327c62f3cbcb0a79;hp=d6455bd77be227997b8aa49a8dd445bb183013ee;hpb=d830e4655290f25948dd6a80f57e4f6ed1f93add;p=supertux.git diff --git a/src/gui/menu.hpp b/src/gui/menu.hpp index d6455bd77..6aaeb3ff8 100644 --- a/src/gui/menu.hpp +++ b/src/gui/menu.hpp @@ -21,6 +21,7 @@ #define SUPERTUX_MENU_H #include +#include #include #include #include @@ -41,7 +42,7 @@ enum MenuItemKind { MN_GOTO, MN_TOGGLE, MN_BACK, - MN_DEACTIVE, + MN_INACTIVE, MN_TEXTFIELD, MN_NUMFIELD, MN_CONTROLFIELD, @@ -61,12 +62,15 @@ public: bool toggled; std::string text; std::string input; + std::string help; std::vector list; // list of values for a STRINGSELECT item size_t selected; // currently selected item Menu* target_menu; + void set_help(const std::string& help_text); + void change_text (const std::string& text); void change_input(const std::string& text); @@ -89,16 +93,22 @@ class Menu { private: static std::vector last_menus; + + /** Pointers to all currently available menus, used to handle repositioning on window resize */ + static std::list all_menus; + static Menu* previous; static Menu* current_; - static void pop_current(); - public: /** Set the current menu, if pmenu is NULL, hide the current menu */ static void set_current(Menu* pmenu); static void push_current(Menu* pmenu); + static void pop_current(); + + + static void recalc_pos(); /** Return the current active menu or NULL if none is active */ static Menu* current() @@ -132,14 +142,16 @@ private: MenuAction menuaction; /* input implementation variables */ - int delete_character; - char mn_input_char; + int delete_character; + char mn_input_char; float menu_repeat_time; + bool close; + public: static Font* default_font; static Font* active_font; - static Font* deactive_font; + static Font* inactive_font; static Font* label_font; static Font* field_font; @@ -148,15 +160,16 @@ public: Menu(); virtual ~Menu(); - void add_hl(); - void add_label(const std::string& text); - void add_entry(int id, const std::string& text); - void add_toggle(int id, const std::string& text, bool toggled = false); - void add_deactive(int id, const std::string& text); - void add_back(const std::string& text); - void add_submenu(const std::string& text, Menu* submenu, int id = -1); - void add_controlfield(int id, const std::string& text, - const std::string& mapping = ""); + MenuItem* add_hl(); + MenuItem* add_label(const std::string& text); + MenuItem* add_entry(int id, const std::string& text); + MenuItem* add_toggle(int id, const std::string& text, bool toggled = false); + MenuItem* add_inactive(int id, const std::string& text); + MenuItem* add_back(const std::string& text); + MenuItem* add_submenu(const std::string& text, Menu* submenu, int id = -1); + MenuItem* add_controlfield(int id, const std::string& text, + const std::string& mapping = ""); + MenuItem* add_string_select(int id, const std::string& text); virtual void menu_action(MenuItem* item); @@ -185,6 +198,9 @@ public: void event(const SDL_Event& event); bool is_toggled(int id) const; + void set_toggled(int id, bool toggled); + + Menu* get_parent() const; protected: void additem(MenuItem* pmenu_item);