/** ******************************************************************************* @file /gui/contexts/MainMenu.h @brief Obrazovka MainMenu @author Pavel @version 0.1 ******************************************************************************/ #ifndef MAINMENU_H #define MAINMENU_H #include "gui/common/Context.h" #include "gui/common/ActiveObjects_ext.h" #include "common/rm/rminit.h" // #include "net/locator.h" namespace gui{ /** Hlavni okno kontextu MainMenu. */ class TMainWindow : public TWindow { public: TLabel *lcaption; TTextButton *bprofile; TTextButton *blocal; TTextButton *bnetwork; TTextButton *boptions; TTextButton *bcredits; TTextButton *bquit; TLabel *profilenamecaption; TLabel *profilename; TGroupBar *ghighlight; TMainWindow(rm::TRM_txt_i *rmtxti); }; /** Okno, ktere slouzi pro vybrani mapy. */ class TChoseMap : public TWindow { private: rm::TRM_map_i* rmmapi; rm::TRM_txt_i *myrmtxti; public: TLabel *chosemap; TTextButton *bplay; TTextButton *bback; TListBar *listbar; TGroupBar *ginfo; TLabel *linfo; // TLabel *lnewgame; TLabel *lloadgame; TRadioBox *rnewgame; TRadioBox *rloadgame; TGroupBar *gmapsource; /// Typ mapy. enum TChoseMapSource { chosemapsource_newgame, ///< Nova hra. chosemapsource_loadgame ///< Nahrana hra. } chosemapsource; TChoseMap(rm::TRM_txt_i *rmtxti); ~TChoseMap(); /// Updatovaci metody. //@{ /// Updatuje GUI s informaci o mape. void updateMapInfo(); /// Updatuje GUI odpovidajici zdroji map. void changeSource(TChoseMapSource newsource); //@} }; /** Okno pro vyber sitove hry (klient/server). */ class TMultiplayerWindow : public TWindow { public: TTextButton *bdirecthost; TTextButton *bdirectjoin; TTextButton *bback; TMultiplayerWindow(rm::TRM_txt_i *rmtxti); }; /** Okno s nastavenimi pro hry. */ class TOptionsWindow : public TWindow { public: /// Indikator, zda se pri ukonceni okna ma zobrazit hlaska o restartu programu. bool alert; /// GUI ovladaci prvky //@{ TLabel *lsettingcaption; TGroupBar *group; TLabel *lresolution; TListBar *lbresolution; TItem *itres[RESOLUTIONS_COUNT]; TLabel *lfulscreen; TCheckBox *chfulscreen; TLabel *lmusic; TScrollBar *smusicvolume; TLabel *lsound; TScrollBar *ssoundvolume; TLabel *llanguage; TListBar *lblanguage; TLabel *lspeed; TScrollBar *sspeed; TLabel *lbattlenet; TCheckBox *chbattlenet; TLabel *lautosave; TCheckBox *chautosave; TLabel* lBattleNet; TTextButton *bback; TTextButton *bok; //@} /// Puvodni nastaveni pro pripad tlacitka cancel //@{ float fmusicvolume; float fsoundvolume; int ispeed; //@} TOptionsWindow(rm::TRM_txt_i *rmtxti); int workInput(INPUT *input); /// scrollbary a listbary podle soucasneho nastaveni //@{ /// Inicializuje formular s nastavenim. void init(); /// Ulozi & zavre. void ok(); /// Obnovi puvodni & zavre. void cancel(); //@} }; /** Okno s informacemi o vyvojovem tymu :). */ class TCreditsTitles: public TScrollingTitles { public: /// Inicializuje text zobrazovany v credits. TCreditsTitles(); }; /** Okno pro vyber/pridani/smazani profilu. */ class TProfileWindow : public TWindow { public: rm::TRM_conf_i *rmconfi; /// GUI ovladaci prvky //@{ TLabel *lprofilenamecaption; TLabel *lprofilescaption; TLineTextField *tfprofilename; TListBar *listbar; TTextButton *badd; TTextButton *bok; TTextButton *bdelete; //@} TProfileWindow(rm::TRM_txt_i *rmtxti); ~TProfileWindow(); int workInput(INPUT *input); /// Pomocne funkce pro komunikaci s resourcemanagerem. //@{ /// Updatuje seznam profilu. void updateProfileList(int selid = -1); /// Vrati vybrany profil. int getSelectedProfileId(); /// Vrati prvni volne id profilu. int getFirstFreeProfileId(); /// Updatuje GUI podle datovych struktur. void setProfile2GUI(); //@} }; /** Okno pro zadani ip-adresy serveru pri sitove hre typu klient. */ class TGetIPWindow : public TWindow { public: /// GUI ovladaci prvky //@{ TLabel *lIPcaption; TLineTextField *tfIP; TTextButton *bconnect; TTextButton *bback; TLabel* lBattleNet; TLabel* lLocalNet; TListBar* lbLocalNetServers; TListBar* lbBattleNetServers; //@} /// Zaznamy o internetovych hrach. std::vector battlenetdata; /// Zaznamy o hrach na lokalni siti. std::vector localnetdata; /// Funkce pro zjistovani moznych her na siti. //@{ /// Zpracuje zpravu o internetovych hrach. void loadBattleNetGames( DA* p ); /// Uvolni zaznamy o internetovych hrach. void unloadBattleNetGames(); /// Zpracuje zpravu o hrach na lokalni siti. void loadLocalNetGames( DA* p ); /// Uvolni zaznamy o hrach na lokalni siti. void unloadLocalNetGames(); //@} TGetIPWindow(rm::TRM_txt_i *rmtxti); ~TGetIPWindow(); }; /// Mozne stavy kontextu MainMenu. enum TMainMenuStates{ mmsProfileDialog, mmsMainMenu, mmsLocalGameChooseMap, mmsNetworkGameChooseMode, mmsNetworkGameChooseMap, mmsNetworkGameIP, mmsNetworkGameErr, mmsOptions, mmsOptionsAlert, mmsCredists, mmsUndefined, mmsExit }; /** Kontext s hlavni nabidkou programu. */ class TMainMenu: public TContext { private: /// Okna kontextu. //@{ TMainWindow *mainwindow; TChoseMap *networkchosemap; TChoseMap *localchosemap; TMultiplayerWindow *multiplayerwindow; TOptionsWindow *optionswindow; TErrorWindow *optionsalertwindow; TCreditsTitles* credits; TGetIPWindow *getipwindow; TProfileWindow* profilewindow; TErrorWindow *errconnection; //@} TWallpaper *background; rm::TRM_txt_i *rmtxti; public: /// Standartni rozhrani kontextu. //@{ TMainMenu(TContextParameter contextparameter); virtual ~TMainMenu(); static TContext* createContext(...); virtual void activateContext(TContextParameter contextparameter); virtual void deactivateContext(); //@} /// Graficky vstup a vystup. //@{ virtual void drawContext(); virtual int workInput(INPUT *input); //@} /// Komunikace se siti. //@{ /// Prijme zpravu o internetovych hrach. void battleNetGames( DA* p ); /// Prijme zpravu o hrach na lokalni siti void localNetGames( DA* p ); /// Pripojeni selhalo, vrati se zpet. void connectionFailed(); /// Pripojeni uspesne, prepne do multijoin. void connectionSuccessful(); //@} /// Prepinani mezi kontexty. void switchTo(TMainMenuStates c); }; }//namespace #endif /*****************************************************************************/