X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fgui%2Fmenu.hpp;h=0fa35fc6588f39c0b06deb3e666e132db0dee2b0;hb=f6504762d01217fbbba3923b8e7f3b84d30c088c;hp=5e85fa1abd8fbaa109645ac1318035b847c70960;hpb=fea3446f05e1e7673607b835c269d3e8d1929ab3;p=supertux.git diff --git a/src/gui/menu.hpp b/src/gui/menu.hpp index 5e85fa1ab..0fa35fc65 100644 --- a/src/gui/menu.hpp +++ b/src/gui/menu.hpp @@ -21,6 +21,7 @@ #define SUPERTUX_MENU_H #include +#include #include #include #include @@ -51,7 +52,7 @@ enum MenuItemKind { }; class Menu; - + class MenuItem { public: @@ -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); @@ -84,11 +88,16 @@ private: /// keyboard key or joystick button bool input_flickering; }; - + 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(); @@ -99,6 +108,8 @@ public: static void push_current(Menu* pmenu); + static void recalc_pos(); + /** Return the current active menu or NULL if none is active */ static Menu* current() { @@ -131,8 +142,8 @@ private: MenuAction menuaction; /* input implementation variables */ - int delete_character; - char mn_input_char; + int delete_character; + char mn_input_char; float menu_repeat_time; public: @@ -147,15 +158,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_deactive(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); @@ -184,6 +196,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); @@ -193,7 +208,8 @@ protected: private: void check_controlfield_change_event(const SDL_Event& event); void draw_item(DrawingContext& context, int index); - float effect_time; + float effect_progress; + float effect_start_time; int arrange_left; int active_item;