diff options
author | Andrei Karas <akaras@inbox.ru> | 2015-04-19 22:02:33 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2015-04-20 00:26:53 +0300 |
commit | e3009cfe9cc0a824450d3e71a0ce8d6b5cd9ff91 (patch) | |
tree | 2959d64c52fb2d9df7ca30fb5a400e17570c4861 /src/gui | |
parent | ac9d9925b52789abc07795d5ed52dd0de620c757 (diff) | |
download | mv-e3009cfe9cc0a824450d3e71a0ce8d6b5cd9ff91.tar.gz mv-e3009cfe9cc0a824450d3e71a0ce8d6b5cd9ff91.tar.bz2 mv-e3009cfe9cc0a824450d3e71a0ce8d6b5cd9ff91.tar.xz mv-e3009cfe9cc0a824450d3e71a0ce8d6b5cd9ff91.zip |
Add quick settings page for yellow bar options.
Diffstat (limited to 'src/gui')
-rw-r--r-- | src/gui/widgets/setupitem.cpp | 3 | ||||
-rw-r--r-- | src/gui/widgets/setupquickitem.cpp | 116 | ||||
-rw-r--r-- | src/gui/widgets/setupquickitem.h | 79 | ||||
-rw-r--r-- | src/gui/widgets/tabs/setup_quick.cpp | 132 | ||||
-rw-r--r-- | src/gui/widgets/tabs/setup_quick.h | 49 | ||||
-rw-r--r-- | src/gui/windows/setupwindow.cpp | 27 | ||||
-rw-r--r-- | src/gui/windows/setupwindow.h | 5 |
7 files changed, 401 insertions, 10 deletions
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 <http://www.gnu.org/licenses/>. + */ + +#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 <http://www.gnu.org/licenses/>. + */ + +#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 <http://www.gnu.org/licenses/>. + */ + +#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 <http://www.gnu.org/licenses/>. + */ + +#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<SetupTab*>::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<SetupTab*>::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<SetupTab*> mTabs; std::list<Window*> mWindowsToReset; std::vector<Button*> mButtons; SetupTab *mModsTab; + SetupTab *mQuickTab; Button *mResetWindows; TabbedArea *mPanel; Label *mVersion; |