From e3009cfe9cc0a824450d3e71a0ce8d6b5cd9ff91 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Sun, 19 Apr 2015 22:02:33 +0300 Subject: Add quick settings page for yellow bar options. --- src/CMakeLists.txt | 6 ++ src/Makefile.am | 6 ++ src/actions/statusbar.cpp | 4 +- src/being/localplayer.cpp | 2 +- src/game.cpp | 3 +- src/gamemodifiers.cpp | 24 +++++- src/gamemodifiers.h | 38 +++------- src/gui/widgets/setupitem.cpp | 3 +- src/gui/widgets/setupquickitem.cpp | 116 +++++++++++++++++++++++++++++ src/gui/widgets/setupquickitem.h | 79 ++++++++++++++++++++ src/gui/widgets/tabs/setup_quick.cpp | 132 +++++++++++++++++++++++++++++++++ src/gui/widgets/tabs/setup_quick.h | 49 ++++++++++++ src/gui/windows/setupwindow.cpp | 27 +++++-- src/gui/windows/setupwindow.h | 5 +- src/listeners/awaylistener.cpp | 2 +- src/listeners/gamemodifierlistener.cpp | 36 +++++++++ src/listeners/gamemodifierlistener.h | 38 ++++++++++ 17 files changed, 527 insertions(+), 43 deletions(-) create mode 100644 src/gui/widgets/setupquickitem.cpp create mode 100644 src/gui/widgets/setupquickitem.h create mode 100644 src/gui/widgets/tabs/setup_quick.cpp create mode 100644 src/gui/widgets/tabs/setup_quick.h create mode 100644 src/listeners/gamemodifierlistener.cpp create mode 100644 src/listeners/gamemodifierlistener.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 68edd4ded..3033074da 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -248,6 +248,8 @@ SET(SRCS gui/widgets/setupbuttonitem.h gui/widgets/setupitem.cpp gui/widgets/setupitem.h + gui/widgets/setupquickitem.cpp + gui/widgets/setupquickitem.h gui/widgets/tabs/setuptab.cpp gui/widgets/tabs/setuptab.h gui/widgets/tabs/setuptabscroll.cpp @@ -446,6 +448,8 @@ SET(SRCS gui/widgets/tabs/setup_relations.h gui/widgets/tabs/setup_players.cpp gui/widgets/tabs/setup_players.h + gui/widgets/tabs/setup_quick.cpp + gui/widgets/tabs/setup_quick.h gui/widgets/tabs/setup_video.cpp gui/widgets/tabs/setup_video.h gui/widgets/tabs/setup_visual.cpp @@ -1101,6 +1105,8 @@ SET(SRCS listeners/widgetdeathlistener.h events/event.h listeners/focuslistener.h + listeners/gamemodifierlistener.cpp + listeners/gamemodifierlistener.h listeners/guiconfiglistener.h listeners/guitableactionlistener.cpp listeners/guitableactionlistener.h diff --git a/src/Makefile.am b/src/Makefile.am index be74b9256..c9951189e 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -192,6 +192,8 @@ manaplus_SOURCES += events/actionevent.h \ listeners/widgetdeathlistener.h \ events/event.h \ listeners/focuslistener.h \ + listeners/gamemodifierlistener.cpp \ + listeners/gamemodifierlistener.h \ listeners/guiconfiglistener.h \ listeners/debugmessagelistener.cpp \ listeners/debugmessagelistener.h \ @@ -381,6 +383,8 @@ manaplus_SOURCES += gui/widgets/avatarlistbox.cpp \ gui/widgets/setupbuttonitem.h \ gui/widgets/setupitem.cpp \ gui/widgets/setupitem.h \ + gui/widgets/setupquickitem.cpp \ + gui/widgets/setupquickitem.h \ gui/widgets/tabs/setuptab.cpp \ gui/widgets/tabs/setuptab.h \ gui/widgets/tabs/setuptabscroll.cpp \ @@ -575,6 +579,8 @@ manaplus_SOURCES += gui/widgets/avatarlistbox.cpp \ gui/widgets/tabs/setup_perfomance.h \ gui/widgets/tabs/setup_players.cpp \ gui/widgets/tabs/setup_players.h \ + gui/widgets/tabs/setup_quick.cpp \ + gui/widgets/tabs/setup_quick.h \ gui/widgets/tabs/setup_relations.cpp \ gui/widgets/tabs/setup_relations.h \ gui/widgets/tabs/setup_video.cpp \ diff --git a/src/actions/statusbar.cpp b/src/actions/statusbar.cpp index 4d165da6f..a072cb37c 100644 --- a/src/actions/statusbar.cpp +++ b/src/actions/statusbar.cpp @@ -108,7 +108,7 @@ impHandler0(changeGameModifier) { if (localPlayer) { - GameModifiers::changeGameModifiers(); + GameModifiers::changeGameModifiers(false); return true; } return false; @@ -124,7 +124,7 @@ impHandler0(changeAudio) impHandler0(away) { - GameModifiers::changeAwayMode(); + GameModifiers::changeAwayMode(true); if (localPlayer) { localPlayer->updateStatus(); diff --git a/src/being/localplayer.cpp b/src/being/localplayer.cpp index 66d662a8d..e20fa9e02 100644 --- a/src/being/localplayer.cpp +++ b/src/being/localplayer.cpp @@ -1856,7 +1856,7 @@ void LocalPlayer::tryPingRequest() void LocalPlayer::setAway(const std::string &message) const { setAfkMessage(message); - GameModifiers::changeAwayMode(); + GameModifiers::changeAwayMode(true); updateStatus(); } diff --git a/src/game.cpp b/src/game.cpp index f00770c39..1e4d838e3 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -161,7 +161,6 @@ static void initEngines() if (joystick) joystick->update(); - GameModifiers::init(); UpdateStatusListener::distributeEvent(); } @@ -176,6 +175,8 @@ static void createGuiWindows() if (emoteShortcut) emoteShortcut->load(); + GameModifiers::init(); + // Create dialogs emoteWindow = new EmoteWindow; emoteWindow->postInit(); diff --git a/src/gamemodifiers.cpp b/src/gamemodifiers.cpp index a77861370..97e4df286 100644 --- a/src/gamemodifiers.cpp +++ b/src/gamemodifiers.cpp @@ -37,6 +37,8 @@ #include "gui/widgets/tabs/chat/chattab.h" +#include "listeners/gamemodifierlistener.h" + #include "resources/map/map.h" #include "listeners/awaylistener.h" @@ -125,6 +127,7 @@ void GameModifiers::changeMode(unsigned *restrict const var, if (save) config.setValue(conf, *var); UpdateStatusListener::distributeEvent(); + GameModifierListener::distributeEvent(); const std::string str = (*func)(); if (str.size() > 4) debugMsg(str.substr(4)); @@ -291,6 +294,7 @@ void GameModifiers::setQuickDropCounter(const int n) settings.quickDropCounter = n; config.setValue("quickDropCounter", n); UpdateStatusListener::distributeEvent(); + GameModifierListener::distributeEvent(); } addModifier2(PickUpType, pickUpType, "pickUpType", 7, @@ -363,11 +367,12 @@ addModifier(GameModifiers, disableGameModifiers, 2, N_("Game modifiers are unknown") }) -void GameModifiers::changeGameModifiers() +void GameModifiers::changeGameModifiers(const bool forward A_UNUSED) { settings.disableGameModifiers = !settings.disableGameModifiers; config.setValue("disableGameModifiers", settings.disableGameModifiers); UpdateStatusListener::distributeEvent(); + GameModifierListener::distributeEvent(); } addModifier(MapDrawType, mapDrawType, 7, @@ -390,6 +395,12 @@ addModifier(MapDrawType, mapDrawType, 7, N_("(?) map view") }) +void GameModifiers::changeMapDrawType(const bool forward A_UNUSED) +{ + if (viewport) + viewport->toggleMapDrawType(); +} + addModifier(AwayMode, awayMode, 2, { // TRANSLATORS: away type in status bar @@ -400,7 +411,7 @@ addModifier(AwayMode, awayMode, 2, N_("(?) away") }) -void GameModifiers::changeAwayMode() +void GameModifiers::changeAwayMode(const bool forward A_UNUSED) { if (!localPlayer) return; @@ -411,6 +422,7 @@ void GameModifiers::changeAwayMode() localPlayer->updateName(); Game::instance()->updateFrameRate(0); UpdateStatusListener::distributeEvent(); + GameModifierListener::distributeEvent(); if (settings.awayMode) { if (chatWindow) @@ -454,6 +466,13 @@ addModifier(CameraMode, cameraMode, 2, N_("(?) away") }) + +void GameModifiers::changeCameraMode(const bool forward A_UNUSED) +{ + if (viewport) + viewport->toggleCameraMode(); +} + void GameModifiers::resetModifiers() { settings.moveType = 0; @@ -480,4 +499,5 @@ void GameModifiers::resetModifiers() "disableGameModifiers"); UpdateStatusListener::distributeEvent(); + GameModifierListener::distributeEvent(); } diff --git a/src/gamemodifiers.h b/src/gamemodifiers.h index d3ef572e0..6859018cc 100644 --- a/src/gamemodifiers.h +++ b/src/gamemodifiers.h @@ -26,11 +26,6 @@ #include "localconsts.h" #define declModifier(name1) \ - static std::string get##name1##String(); \ - static const unsigned m##name1##Size; \ - static const char *const m##name1##Strings[]; - -#define declModifier2(name1) \ static void change##name1(const bool forward); \ static std::string get##name1##String(); \ static const unsigned m##name1##Size; \ @@ -52,28 +47,20 @@ class GameModifiers final const bool forward); declModifier(MoveType) - declModifier2(CrazyMoveType) - declModifier2(MoveToTargetType) - declModifier2(FollowMode) - declModifier2(AttackWeaponType) - declModifier2(AttackType) - declModifier2(QuickDropCounter) - declModifier2(PickUpType) - declModifier2(MagicAttackType) - declModifier2(PvpAttackType) - declModifier2(ImitationMode) + declModifier(CrazyMoveType) + declModifier(MoveToTargetType) + declModifier(FollowMode) + declModifier(AttackWeaponType) + declModifier(AttackType) + declModifier(QuickDropCounter) + declModifier(PickUpType) + declModifier(MagicAttackType) + declModifier(PvpAttackType) + declModifier(ImitationMode) + declModifier(GameModifiers) declModifier(MapDrawType) declModifier(CameraMode) - declModifier(AwayMode); - - static void changeAwayMode(); - - static void changeMoveType(const bool forward); - - static std::string getGameModifiersString(); - static void changeGameModifiers(); - static const unsigned mGameModifiersSize; - static const char *const mGameModifiersStrings[]; + declModifier(AwayMode) static void setQuickDropCounter(const int n); @@ -86,6 +73,5 @@ class GameModifiers final }; #undef declModifier -#undef declModifier2 #endif // GAMEMODIFIERS_H diff --git a/src/gui/widgets/setupitem.cpp b/src/gui/widgets/setupitem.cpp index 98dadd046..6cb807ab5 100644 --- a/src/gui/widgets/setupitem.cpp +++ b/src/gui/widgets/setupitem.cpp @@ -686,7 +686,8 @@ void SetupItemDropDown::createControls() mDropDown->setSelected(atoi(mValue.c_str())); mWidget = mDropDown; - fixFirstItemSize(mLabel); + if (!mText.empty()) + fixFirstItemSize(mLabel); mHorizont->add(mLabel); mHorizont->add(mDropDown); diff --git a/src/gui/widgets/setupquickitem.cpp b/src/gui/widgets/setupquickitem.cpp new file mode 100644 index 000000000..eab3729f3 --- /dev/null +++ b/src/gui/widgets/setupquickitem.cpp @@ -0,0 +1,116 @@ +/* + * The ManaPlus Client + * Copyright (C) 2011-2015 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "gui/widgets/setupquickitem.h" + +#include "gui/widgets/button.h" +#include "gui/widgets/horizontcontainer.h" +#include "gui/widgets/label.h" +#include "gui/widgets/vertcontainer.h" + +#include "gui/widgets/tabs/setuptabscroll.h" + +#include "debug.h" + +SetupQuickItem::SetupQuickItem(const std::string &restrict description, + SetupTabScroll *restrict const parent, + const std::string &restrict eventName, + ModifierGetFuncPtr getFunc, + ModifierChangeFuncPtr changeFunc) : + SetupItem("", description, "", parent, eventName, false), + mHorizont(nullptr), + mButton(nullptr), + mLabel(nullptr), + mGetFunc(getFunc), + mChangeFunc(changeFunc) +{ + mValueType = VSTR; + createControls(); +} + +SetupQuickItem::~SetupQuickItem() +{ + mHorizont = nullptr; + mWidget = nullptr; + mButton = nullptr; +} + +void SetupQuickItem::save() +{ +} + +void SetupQuickItem::cancel(const std::string &eventName A_UNUSED) +{ +} + +void SetupQuickItem::externalUpdated(const std::string &eventName A_UNUSED) +{ +} + +void SetupQuickItem::rereadValue() +{ +} + +void SetupQuickItem::createControls() +{ + mHorizont = new HorizontContainer(this, 32, 2); + + mWidget = new Button(this, ">", mEventName + "_CHANGE", nullptr); + mLabel = new Label(this, std::string()); + mLabel->setToolTip(mDescription); + mLabel->adjustSize(); + + mHorizont->add(mWidget, 5); + mHorizont->add(mLabel); + + mParent->getContainer()->add2(mHorizont, true, 4); + mParent->addControl(this); + mWidget->addActionListener(this); + toWidget(); +} + +void SetupQuickItem::fromWidget() +{ +} + +void SetupQuickItem::toWidget() +{ + mLabel->setCaption(mGetFunc()); + mLabel->adjustSize(); +} + +void SetupQuickItem::action(const ActionEvent &event) +{ + if (event.getId() == mEventName + "_CHANGE") + { + // need change game modifier + mChangeFunc(true); + toWidget(); + } +} + +void SetupQuickItem::apply(const std::string &eventName A_UNUSED) +{ +} + +void SetupQuickItem::gameModifiersChanged() +{ + toWidget(); +} diff --git a/src/gui/widgets/setupquickitem.h b/src/gui/widgets/setupquickitem.h new file mode 100644 index 000000000..40fba204b --- /dev/null +++ b/src/gui/widgets/setupquickitem.h @@ -0,0 +1,79 @@ +/* + * The ManaPlus Client + * Copyright (C) 2011-2015 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef GUI_WIDGETS_SETUPQUICKITEM_H +#define GUI_WIDGETS_SETUPQUICKITEM_H + +#include "gui/widgets/setupitem.h" + +#include "listeners/gamemodifierlistener.h" + +class Button; +class HorizontContainer; +class Label; +class SetupTabScroll; + +typedef std::string (*ModifierGetFuncPtr)(); +typedef void (*ModifierChangeFuncPtr)(const bool forward); + +class SetupQuickItem final : public SetupItem, + public GameModifierListener +{ + public: + SetupQuickItem(const std::string &restrict description, + SetupTabScroll *restrict const parent, + const std::string &restrict eventName, + ModifierGetFuncPtr getFunc, + ModifierChangeFuncPtr changeFunc); + + A_DELETE_COPY(SetupQuickItem) + + ~SetupQuickItem(); + + void createControls(); + + void fromWidget() override final; + + void toWidget() override final; + + void action(const ActionEvent &event) override final; + + void apply(const std::string &eventName) override final; + + void cancel(const std::string &eventName A_UNUSED) override final; + + void externalUpdated(const std::string &eventName A_UNUSED) + override final; + + void rereadValue() override final; + + void save() override final; + + void gameModifiersChanged() override final; + + protected: + HorizontContainer *mHorizont; + Button *mButton; + Label *mLabel; + ModifierGetFuncPtr mGetFunc; + ModifierChangeFuncPtr mChangeFunc; +}; + +#endif // GUI_WIDGETS_SETUPQUICKITEM_H diff --git a/src/gui/widgets/tabs/setup_quick.cpp b/src/gui/widgets/tabs/setup_quick.cpp new file mode 100644 index 000000000..699f20365 --- /dev/null +++ b/src/gui/widgets/tabs/setup_quick.cpp @@ -0,0 +1,132 @@ +/* + * The ManaPlus Client + * Copyright (C) 2009 The Mana World Development Team + * Copyright (C) 2009-2010 Andrei Karas + * Copyright (C) 2011-2015 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "gui/widgets/tabs/setup_quick.h" + +#include "gamemodifiers.h" + +#include "gui/models/namesmodel.h" + +#include "gui/widgets/containerplacer.h" +#include "gui/widgets/layouthelper.h" +#include "gui/widgets/setupquickitem.h" +#include "gui/widgets/scrollarea.h" + +#include "listeners/uploadlistener.h" + +#include "configuration.h" + +#include "resources/map/mapconsts.h" + +#include "net/net.h" + +#include "utils/delete2.h" +#include "utils/gettext.h" + +#include "debug.h" + +Setup_Quick::Setup_Quick(const Widget2 *const widget) : + SetupTabScroll(widget), + mMoveTypeList(new NamesModel), + mCrazyMoveTypeList(new NamesModel) +{ + // TRANSLATORS: quick tab in settings + setName(_("Quick")); + + LayoutHelper h(this); + ContainerPlacer place = h.getPlacer(0, 0); + place(0, 0, mScroll, 10, 10); + + new SetupQuickItem("", this, "moveTypeEvent", + &GameModifiers::getMoveTypeString, + &GameModifiers::changeMoveType); + + new SetupQuickItem("", this, "crazyMoveTypeEvent", + &GameModifiers::getCrazyMoveTypeString, + &GameModifiers::changeCrazyMoveType); + + new SetupQuickItem("", this, "moveToTargetTypeEvent", + &GameModifiers::getMoveToTargetTypeString, + &GameModifiers::changeMoveToTargetType); + + new SetupQuickItem("", this, "followModeEvent", + &GameModifiers::getFollowModeString, + &GameModifiers::changeFollowMode); + + new SetupQuickItem("", this, "attackWeaponTypeEvent", + &GameModifiers::getAttackWeaponTypeString, + &GameModifiers::changeAttackWeaponType); + + new SetupQuickItem("", this, "attackTypeEvent", + &GameModifiers::getAttackTypeString, + &GameModifiers::changeAttackType); + + new SetupQuickItem("", this, "magicAttackTypeEvent", + &GameModifiers::getMagicAttackTypeString, + &GameModifiers::changeMagicAttackType); + + new SetupQuickItem("", this, "pvpAttackTypeEvent", + &GameModifiers::getPvpAttackTypeString, + &GameModifiers::changePvpAttackType); + + new SetupQuickItem("", this, "quickDropCounterEvent", + &GameModifiers::getQuickDropCounterString, + &GameModifiers::changeQuickDropCounter); + + new SetupQuickItem("", this, "pickUpTypeEvent", + &GameModifiers::getPickUpTypeString, + &GameModifiers::changePickUpType); + + new SetupQuickItem("", this, "mapDrawTypeEvent", + &GameModifiers::getMapDrawTypeString, + &GameModifiers::changeMapDrawType); + + new SetupQuickItem("", this, "imitationModeEvent", + &GameModifiers::getImitationModeString, + &GameModifiers::changeImitationMode); + + new SetupQuickItem("", this, "CameraModeEvent", + &GameModifiers::getCameraModeString, + &GameModifiers::changeCameraMode); + + new SetupQuickItem("", this, "awayModeEvent", + &GameModifiers::getAwayModeString, + &GameModifiers::changeAwayMode); + + setDimension(Rect(0, 0, 550, 350)); +} + +Setup_Quick::~Setup_Quick() +{ + delete2(mMoveTypeList); + delete2(mCrazyMoveTypeList); +} + +void Setup_Quick::apply() +{ + SetupTabScroll::apply(); + +} + +void Setup_Quick::externalUpdated() +{ +} diff --git a/src/gui/widgets/tabs/setup_quick.h b/src/gui/widgets/tabs/setup_quick.h new file mode 100644 index 000000000..307e89025 --- /dev/null +++ b/src/gui/widgets/tabs/setup_quick.h @@ -0,0 +1,49 @@ +/* + * The ManaPlus Client + * Copyright (C) 2009 The Mana World Development Team + * Copyright (C) 2009-2010 Andrei Karas + * Copyright (C) 2011-2015 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef GUI_WIDGETS_TABS_SETUP_QUICK_H +#define GUI_WIDGETS_TABS_SETUP_QUICK_H + +#include "gui/widgets/tabs/setuptabscroll.h" + +class NamesModel; + +class Setup_Quick final : public SetupTabScroll +{ + public: + explicit Setup_Quick(const Widget2 *const widget); + + A_DELETE_COPY(Setup_Quick) + + ~Setup_Quick(); + + void apply() override final; + + void externalUpdated() override final; + + protected: + NamesModel *mMoveTypeList; + + NamesModel *mCrazyMoveTypeList; +}; + +#endif // GUI_WIDGETS_TABS_SETUP_QUICK_H diff --git a/src/gui/windows/setupwindow.cpp b/src/gui/windows/setupwindow.cpp index 3f04d0e69..d92ff0560 100644 --- a/src/gui/windows/setupwindow.cpp +++ b/src/gui/windows/setupwindow.cpp @@ -37,6 +37,7 @@ #include "gui/widgets/tabs/setup_other.h" #include "gui/widgets/tabs/setup_perfomance.h" #include "gui/widgets/tabs/setup_players.h" +#include "gui/widgets/tabs/setup_quick.h" #include "gui/widgets/tabs/setup_relations.h" #include "gui/widgets/tabs/setup_theme.h" #include "gui/widgets/tabs/setup_touch.h" @@ -64,6 +65,7 @@ SetupWindow::SetupWindow() : mWindowsToReset(), mButtons(), mModsTab(nullptr), + mQuickTab(nullptr), mResetWindows(nullptr), mPanel(new TabbedArea(this)), mVersion(new Label(this, FULL_VERSION)) @@ -206,10 +208,13 @@ void SetupWindow::setInGame(const bool inGame) void SetupWindow::externalUpdate() { - unloadModTab(); + unloadAdditionalTabs(); mModsTab = new Setup_Mods(this); mTabs.push_back(mModsTab); mPanel->addTab(mModsTab->getName(), mModsTab); + mQuickTab = new Setup_Quick(this); + mTabs.push_back(mQuickTab); + mPanel->addTab(mQuickTab->getName(), mQuickTab); FOR_EACH (std::list::const_iterator, it, mTabs) { if (*it) @@ -217,17 +222,23 @@ void SetupWindow::externalUpdate() } } -void SetupWindow::unloadModTab() +void SetupWindow::unloadTab(SetupTab *page) { - if (mModsTab) + if (page) { - mTabs.remove(mModsTab); - Tab *const tab = mPanel->getTab(mModsTab->getName()); - mPanel->removeTab(tab); - delete2(mModsTab) + mTabs.remove(page); + mPanel->removeTab(mPanel->getTab(page->getName())); } } +void SetupWindow::unloadAdditionalTabs() +{ + unloadTab(mModsTab); + unloadTab(mQuickTab); + delete2(mModsTab); + delete2(mQuickTab); +} + void SetupWindow::externalUnload() { FOR_EACH (std::list::const_iterator, it, mTabs) @@ -235,7 +246,7 @@ void SetupWindow::externalUnload() if (*it) (*it)->externalUnloaded(); } - unloadModTab(); + unloadAdditionalTabs(); } void SetupWindow::registerWindowForReset(Window *const window) diff --git a/src/gui/windows/setupwindow.h b/src/gui/windows/setupwindow.h index d890f3f02..adf0cca43 100644 --- a/src/gui/windows/setupwindow.h +++ b/src/gui/windows/setupwindow.h @@ -76,12 +76,15 @@ class SetupWindow final : public Window, void widgetResized(const Event &event) override final; private: - void unloadModTab(); + void unloadAdditionalTabs(); + + void unloadTab(SetupTab *page); std::list mTabs; std::list mWindowsToReset; std::vector mButtons; SetupTab *mModsTab; + SetupTab *mQuickTab; Button *mResetWindows; TabbedArea *mPanel; Label *mVersion; diff --git a/src/listeners/awaylistener.cpp b/src/listeners/awaylistener.cpp index 6a8057888..b8b89402f 100644 --- a/src/listeners/awaylistener.cpp +++ b/src/listeners/awaylistener.cpp @@ -37,7 +37,7 @@ void AwayListener::action(const ActionEvent &event) { if (event.getId() == "ok" && localPlayer && settings.awayMode) { - GameModifiers::changeAwayMode(); + GameModifiers::changeAwayMode(true); localPlayer->updateStatus(); if (outfitWindow) outfitWindow->unwearAwayOutfit(); diff --git a/src/listeners/gamemodifierlistener.cpp b/src/listeners/gamemodifierlistener.cpp new file mode 100644 index 000000000..a8f28a2f6 --- /dev/null +++ b/src/listeners/gamemodifierlistener.cpp @@ -0,0 +1,36 @@ +/* + * The ManaPlus Client + * Copyright (C) 2014-2015 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "listeners/gamemodifierlistener.h" + +#include "debug.h" + +defineListener(GameModifierListener) + +void GameModifierListener::distributeEvent() +{ + FOR_EACH (std::vector::iterator, + it, mListeners) + { + GameModifierListener *const listener = *it; + if (listener) + listener->gameModifiersChanged(); + } +} diff --git a/src/listeners/gamemodifierlistener.h b/src/listeners/gamemodifierlistener.h new file mode 100644 index 000000000..0d3966130 --- /dev/null +++ b/src/listeners/gamemodifierlistener.h @@ -0,0 +1,38 @@ +/* + * The ManaPlus Client + * Copyright (C) 2014-2015 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef LISTENERS_GAMEMODIFIERLISTENER_H +#define LISTENERS_GAMEMODIFIERLISTENER_H + +#include "listeners/baselistener.hpp" + +#include "localconsts.h" + +class GameModifierListener notfinal +{ + public: + virtual void gameModifiersChanged() = 0; + + static void distributeEvent(); + + defineListenerHeader(GameModifierListener) +}; + +#endif // LISTENERS_GAMEMODIFIERLISTENER_H -- cgit v1.2.3-60-g2f50