/* client/mainmenu.h This file is part of the Osirion project and is distributed under the terms and conditions of the GNU General Public License version 2 */ #ifndef __INCLUDED_CLIENT_MAINMENU_H__ #define __INCLUDED_CLIENT_MAINMENU_H__ #include "ui/window.h" #include "ui/bitmap.h" namespace client { /** * @brief the client's main menu window * The MainMenu contains a number of child menu windows, * of which only one at a time will be visible * */ class MainMenu : public ui::Window { public: MainMenu(ui::Widget *parent = 0); virtual ~MainMenu(); virtual void show(); virtual void hide(); /** * @brief show the main or game menu, depending on the application state * */ void show_default(); /// show a submenu void show_menu(const char * label); inline void show_menu(const std::string & label) { show_menu(label.c_str()); } /// load menu definitions void load(); protected: virtual void draw(); virtual void draw_background(); virtual void resize(); virtual bool on_keypress(const int key, const unsigned int modifier); private: /// load menu definitions void load_definitions(); /// show the main, game or join menu void show_menu(); void show_menu(const Widget *widget); /// the current active menu ui::Widget *mainmenu_activemenu; /// the menu to show if the application is not connected ui::Widget *mainmenu_mainmenu; /// the menu to show if the application is connected but the player has not joined yet ui::Widget *mainmenu_joinmenu; /// the menu the show if the application is connected and the player has joined ui::Widget *mainmenu_gamemenu; /// the options menu ui::Widget *mainmenu_optionsmenu; /// the load game menu ui::Widget *mainmenu_loadmenu; /// the save game menu ui::Widget *mainmenu_savemenu; /// the connect to server menu ui::Widget *mainmenu_connectmenu; std::string mainmenu_background; }; } #endif // __INCLUDED_CLIENT_MAINMENU_H__