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/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 +++++++++++++ 5 files changed, 378 insertions(+), 1 deletion(-) 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 (limited to 'src/gui/widgets') 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 -- cgit v1.2.3-70-g09d2