diff options
author | Andrei Karas <akaras@inbox.ru> | 2012-10-31 01:20:34 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2012-10-31 02:57:08 +0300 |
commit | 3bcb4a9850ac7ae81d5548d40c831f6699cdc866 (patch) | |
tree | 9e6660a7405af777808c864bf3839a5e66efe870 | |
parent | df348716dbdfec7ec7d1c721fb87d637063a10b8 (diff) | |
download | mv-3bcb4a9850ac7ae81d5548d40c831f6699cdc866.tar.gz mv-3bcb4a9850ac7ae81d5548d40c831f6699cdc866.tar.bz2 mv-3bcb4a9850ac7ae81d5548d40c831f6699cdc866.tar.xz mv-3bcb4a9850ac7ae81d5548d40c831f6699cdc866.zip |
Simplify screen buttons handling.
-rw-r--r-- | src/gui/windowmenu.cpp | 138 | ||||
-rw-r--r-- | src/gui/windowmenu.h | 18 |
2 files changed, 63 insertions, 93 deletions
diff --git a/src/gui/windowmenu.cpp b/src/gui/windowmenu.cpp index 7841cd7a1..31389cb71 100644 --- a/src/gui/windowmenu.cpp +++ b/src/gui/windowmenu.cpp @@ -72,43 +72,48 @@ WindowMenu::WindowMenu(const Widget2 *const widget) : setFocusable(false); addButton(N_("ONL"), _("Who is online"), x, h, - Input::KEY_NO_VALUE); + Input::KEY_NO_VALUE, whoIsOnline); addButton(N_("QE"), _("Quests"), x, h, - Input::KEY_WINDOW_QUESTS); + Input::KEY_WINDOW_QUESTS, questsWindow); addButton(N_("BC"), _("Bot checker"), x, h, - Input::KEY_WINDOW_BOT_CHECKER, false); + Input::KEY_WINDOW_BOT_CHECKER, botCheckerWindow, false); addButton(N_("KS"), _("Kill stats"), x, h, - Input::KEY_WINDOW_KILLS); + Input::KEY_WINDOW_KILLS, killStats); addButton(":-)", _("Smilies"), x, h, - Input::KEY_WINDOW_EMOTE_SHORTCUT); - addButton(N_("STA"), _("Status"), x, h, Input::KEY_WINDOW_STATUS); + Input::KEY_WINDOW_EMOTE_SHORTCUT, emoteShortcutWindow); + addButton(N_("STA"), _("Status"), x, h, + Input::KEY_WINDOW_STATUS, statusWindow); addButton(N_("EQU"), _("Equipment"), x, h, - Input::KEY_WINDOW_EQUIPMENT); + Input::KEY_WINDOW_EQUIPMENT, equipmentWindow); addButton(N_("INV"), _("Inventory"), x, h, - Input::KEY_WINDOW_INVENTORY); + Input::KEY_WINDOW_INVENTORY, inventoryWindow); if (skillDialog->hasSkills()) { addButton(N_("SKI"), _("Skills"), x, h, - Input::KEY_WINDOW_SKILL); + Input::KEY_WINDOW_SKILL, skillDialog); } #ifdef MANASERV_SUPPORT if (Net::getNetworkType() == ServerInfo::MANASERV) { addButton(N_("SPE"), _("Specials"), x, h, - Input::KEY_NO_VALUE); + Input::KEY_NO_VALUE, specialsWindow); } #endif - addButton(N_("SOC"), _("Social"), x, h, Input::KEY_WINDOW_SOCIAL); + addButton(N_("SOC"), _("Social"), x, h, + Input::KEY_WINDOW_SOCIAL, socialWindow); addButton(N_("SH"), _("Shortcuts"), x, h, - Input::KEY_WINDOW_SHORTCUT); - addButton(N_("SP"), _("Spells"), x, h, Input::KEY_WINDOW_SPELLS); - addButton(N_("DR"), _("Drop"), x, h, Input::KEY_WINDOW_DROP); + Input::KEY_WINDOW_SHORTCUT, itemShortcutWindow); + addButton(N_("SP"), _("Spells"), x, h, + Input::KEY_WINDOW_SPELLS, spellShortcutWindow); + addButton(N_("DR"), _("Drop"), x, h, + Input::KEY_WINDOW_DROP, dropShortcutWindow); addButton(N_("YK"), _("Did you know"), x, h, - Input::KEY_WINDOW_DIDYOUKNOW); - addButton(N_("SET"), _("Setup"), x, h, Input::KEY_WINDOW_SETUP); + Input::KEY_WINDOW_DIDYOUKNOW, didYouKnowWindow); + addButton(N_("SET"), _("Setup"), x, h, + Input::KEY_WINDOW_SETUP, setupWindow); if (mainGraphics) { @@ -131,6 +136,12 @@ WindowMenu::~WindowMenu() delete mTextPopup; mTextPopup = nullptr; + for (std::map <std::string, ButtonInfo*>::iterator + it = mButtonNames.begin(), + it_end = mButtonNames.end(); it != it_end; ++it) + { + delete (*it).second; + } mButtonNames.clear(); for (std::vector <Button*>::iterator it = mButtons.begin(), it_end = mButtons.end(); it != it_end; ++it) @@ -147,75 +158,17 @@ WindowMenu::~WindowMenu() void WindowMenu::action(const gcn::ActionEvent &event) { - Window *window = nullptr; + const std::string &eventId = event.getId(); - if (event.getId() == ":-)") - { - window = emoteShortcutWindow; - } - else if (event.getId() == "STA") - { - window = statusWindow; - } - else if (event.getId() == "EQU") - { - window = equipmentWindow; - } - else if (event.getId() == "INV") - { - window = inventoryWindow; - } - else if (event.getId() == "SKI") - { - window = skillDialog; - } -#ifdef MANASERV_SUPPORT - else if (event.getId() == "SPE") - { - window = specialsWindow; - } -#endif - else if (event.getId() == "SH") - { - window = itemShortcutWindow; - } - else if (event.getId() == "SOC") - { - window = socialWindow; - } - else if (event.getId() == "DR") - { - window = dropShortcutWindow; - } - else if (event.getId() == "SET") - { - window = setupWindow; - } - else if (event.getId() == "ONL") - { - window = whoIsOnline; - } - else if (event.getId() == "KS") - { - window = killStats; - } - else if (event.getId() == "BC") - { - window = botCheckerWindow; - } - else if (event.getId() == "SP") - { - window = spellShortcutWindow; - } - else if (event.getId() == "YK") - { - window = didYouKnowWindow; - } - else if (event.getId() == "QE") - { - window = questsWindow; - } + std::map <std::string, ButtonInfo*>::iterator + it = mButtonNames.find(eventId); + if (it == mButtonNames.end()) + return; + ButtonInfo *const info = (*it).second; + if (!info) + return; + Window *const window = info->window; if (window) { window->setVisible(!window->isVisible()); @@ -226,7 +179,8 @@ void WindowMenu::action(const gcn::ActionEvent &event) void WindowMenu::addButton(const char *const text, const std::string &description, - int &x, int &h, const int key, const bool visible) + int &x, int &h, const int key, Window *window, + const bool visible) { Button *const btn = new Button(this, gettext(text), text, this); btn->setPosition(x, 0); @@ -244,7 +198,7 @@ void WindowMenu::addButton(const char *const text, h = btn->getHeight(); } mButtons.push_back(btn); - mButtonNames[text] = btn; + mButtonNames[text] = new ButtonInfo(btn, window); } void WindowMenu::mousePressed(gcn::MouseEvent &event) @@ -313,11 +267,12 @@ void WindowMenu::mouseExited(gcn::MouseEvent& mouseEvent A_UNUSED) void WindowMenu::showButton(const std::string &name, const bool visible) { - Button *const btn = dynamic_cast<Button *const>(mButtonNames[name]); - if (!btn) + ButtonInfo *const info = dynamic_cast<ButtonInfo *const>( + mButtonNames[name]); + if (!info || !info->button) return; - btn->setVisible(visible); + info->button->setVisible(visible); updateButtons(); saveButtons(); } @@ -358,10 +313,11 @@ void WindowMenu::loadButtons() std::string str = config.getValue("windowmenu" + toString(f), ""); if (str == "" || str == "SET") continue; - Button *const btn = dynamic_cast<Button *const>(mButtonNames[str]); - if (!btn) + ButtonInfo *const info = dynamic_cast<ButtonInfo *const>( + mButtonNames[str]); + if (!info || !info->button) continue; - btn->setVisible(false); + info->button->setVisible(false); } updateButtons(); } diff --git a/src/gui/windowmenu.h b/src/gui/windowmenu.h index fb5d3af10..1ee485a8d 100644 --- a/src/gui/windowmenu.h +++ b/src/gui/windowmenu.h @@ -37,6 +37,19 @@ #include <vector> class TextPopup; +class Window; + +struct ButtonInfo final +{ + ButtonInfo(Button *button0, Window *window0) : + button(button0), + window(window0) + { + } + + Button *button; + Window *window; +}; /** * The window menu. Allows showing and hiding many of the different windows @@ -65,7 +78,7 @@ class WindowMenu final : public Container, void mouseExited(gcn::MouseEvent& mouseEvent A_UNUSED) override; - std::map <std::string, Button*> &getButtonNames() A_WARN_UNUSED + std::map <std::string, ButtonInfo*> &getButtonNames() A_WARN_UNUSED { return mButtonNames; } std::vector <Button*> &getButtons() A_WARN_UNUSED @@ -86,13 +99,14 @@ class WindowMenu final : public Container, inline void addButton(const char *const text, const std::string &description, int &x, int &h, const int key, + Window *window, const bool visible = true); void updateButtons(); TextPopup *mTextPopup; std::vector <Button*> mButtons; - std::map <std::string, Button*> mButtonNames; + std::map <std::string, ButtonInfo*> mButtonNames; bool mHaveMouse; int mAutoHide; }; |