X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fgui%2Fmenu.hpp;h=b74e931ad91b88b6760625713a85dd6d276909c1;hb=9ea35748100d9feb67a66f8a6656cc60f41bfa8c;hp=66e5f774c36849dba096f1415a4615a4a2b1e986;hpb=08813a74da6ac1fd045a105e4e8105f1d7f716f0;p=supertux.git diff --git a/src/gui/menu.hpp b/src/gui/menu.hpp index 66e5f774c..b74e931ad 100644 --- a/src/gui/menu.hpp +++ b/src/gui/menu.hpp @@ -21,62 +21,13 @@ #include #include -#include "gui/mousecursor.hpp" -#include "video/font.hpp" +#include "video/color.hpp" -bool confirm_dialog(Surface* background, std::string text); - -/* Kinds of menu items */ -enum MenuItemKind { - MN_ACTION, - MN_GOTO, - MN_TOGGLE, - MN_BACK, - MN_INACTIVE, - MN_TEXTFIELD, - MN_NUMFIELD, - MN_CONTROLFIELD, - MN_STRINGSELECT, - MN_LABEL, - MN_HL /* horizontal line */ -}; - -class Menu; - -class MenuItem -{ -public: - MenuItem(MenuItemKind kind, int id = -1); - MenuItemKind kind; - int id; // item id - 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 +class DrawingContext; +class MenuItem; +class Surface; - 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); - - static MenuItem* create(MenuItemKind kind, const std::string& text, - int init_toggle, Menu* target_menu, int id, int key); - - std::string get_input_with_symbol(bool active_item); // returns the text with an input symbol - -private: - /// keyboard key or joystick button - bool input_flickering; - -private: - MenuItem(const MenuItem&); - MenuItem& operator=(const MenuItem&); -}; +bool confirm_dialog(Surface* background, std::string text); class Menu { @@ -123,27 +74,7 @@ private: MENU_ACTION_BACK }; - /** Number of the item that got 'hit' (ie. pressed) in the last - event()/update() call, -1 if none */ - int hit_item; - - // position of the menu (ie. center of the menu, not top/left) - float pos_x; - float pos_y; - - /** input event for the menu (up, down, left, right, etc.) */ - MenuAction menuaction; - - /* input implementation variables */ - int delete_character; - char mn_input_char; - float menu_repeat_time; - - bool close; - public: - std::vector items; - Menu(); virtual ~Menu(); @@ -173,6 +104,7 @@ public: { return *(items[index]); } + MenuItem& get_item_by_id(int id); const MenuItem& get_item_by_id(int id) const; @@ -197,6 +129,30 @@ protected: private: void check_controlfield_change_event(const SDL_Event& event); void draw_item(DrawingContext& context, int index); + +private: + /** Number of the item that got 'hit' (ie. pressed) in the last + event()/update() call, -1 if none */ + int hit_item; + + // position of the menu (ie. center of the menu, not top/left) + float pos_x; + float pos_y; + + /** input event for the menu (up, down, left, right, etc.) */ + MenuAction menuaction; + + /* input implementation variables */ + int delete_character; + char mn_input_char; + float menu_repeat_time; + + bool close; + +public: + std::vector items; + +private: float effect_progress; float effect_start_time; int arrange_left;