diff options
author | Andrei Karas <akaras@inbox.ru> | 2016-07-26 18:10:09 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2016-07-26 21:30:20 +0300 |
commit | 8f3d5cce14912a4c955a02f50a13130ca15b585e (patch) | |
tree | 7a3d944c9a8841383b97e1824c2c1335924fd9f0 /src/gui | |
parent | dbe86e8285d4029bb641500849f696118d3d5949 (diff) | |
download | plus-8f3d5cce14912a4c955a02f50a13130ca15b585e.tar.gz plus-8f3d5cce14912a4c955a02f50a13130ca15b585e.tar.bz2 plus-8f3d5cce14912a4c955a02f50a13130ca15b585e.tar.xz plus-8f3d5cce14912a4c955a02f50a13130ca15b585e.zip |
Add tabs for stats in status window.
Diffstat (limited to 'src/gui')
-rw-r--r-- | src/gui/widgets/attrs/attrdisplay.h | 3 | ||||
-rw-r--r-- | src/gui/widgets/statspage.cpp | 77 | ||||
-rw-r--r-- | src/gui/widgets/statspage.h | 54 | ||||
-rw-r--r-- | src/gui/widgets/statspagebasic.cpp | 156 | ||||
-rw-r--r-- | src/gui/widgets/statspagebasic.h | 67 | ||||
-rw-r--r-- | src/gui/windows/statuswindow.cpp | 158 | ||||
-rw-r--r-- | src/gui/windows/statuswindow.h | 29 |
7 files changed, 392 insertions, 152 deletions
diff --git a/src/gui/widgets/attrs/attrdisplay.h b/src/gui/widgets/attrs/attrdisplay.h index 693bbc349..7659ff0cd 100644 --- a/src/gui/widgets/attrs/attrdisplay.h +++ b/src/gui/widgets/attrs/attrdisplay.h @@ -31,6 +31,7 @@ #include "localconsts.h" +class AttrDisplay; class LayoutHelper; class AttrDisplay notfinal : public Container @@ -78,4 +79,6 @@ class AttrDisplay notfinal : public Container Label *mValue; }; +typedef std::map<AttributesT, AttrDisplay*> Attrs; + #endif // GUI_WIDGETS_ATTRS_ATTRDISPLAY_H diff --git a/src/gui/widgets/statspage.cpp b/src/gui/widgets/statspage.cpp new file mode 100644 index 000000000..b41cc6224 --- /dev/null +++ b/src/gui/widgets/statspage.cpp @@ -0,0 +1,77 @@ +/* + * The ManaPlus Client + * Copyright (C) 2011-2016 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/statspage.h" + +#include "being/playerinfo.h" + +#include "gui/widgets/button.h" +#include "gui/widgets/scrollarea.h" +#include "gui/widgets/vertcontainer.h" + +#include "gui/widgets/attrs/derdisplay.h" + +#include "gui/windows/chatwindow.h" + +#include "utils/gettext.h" +#include "utils/stringutils.h" + +#include "resources/db/statdb.h" + +#include "debug.h" + +StatsPage::StatsPage(const Widget2 *const widget) : + Container(widget), + WidgetListener(), + StatListener(), + mAttrs(), + mAttrCont(new VertContainer(this, 32)), + mAttrScroll(new ScrollArea(this, mAttrCont, false)) +{ + addWidgetListener(this); + + mAttrScroll->setHorizontalScrollPolicy(ScrollArea::SHOW_NEVER); + mAttrScroll->setVerticalScrollPolicy(ScrollArea::SHOW_AUTO); + + add(mAttrScroll); + const std::vector<BasicStat> &basicStats = StatDb::getExtendedStats(); + FOR_EACH (std::vector<BasicStat>::const_iterator, it, basicStats) + { + const BasicStat &stat = *it; + AttrDisplay *disp = new DerDisplay(this, stat.attr, stat.name, stat.tag); + disp->update(); + mAttrCont->add2(disp, true); + mAttrs[stat.attr] = disp; + } +} + +void StatsPage::widgetResized(const Event &event A_UNUSED) +{ + mAttrScroll->setSize(getWidth(), getHeight()); +} + +void StatsPage::statChanged(const AttributesT id, + const int oldVal1 A_UNUSED, + const int oldVal2 A_UNUSED) +{ + const Attrs::const_iterator it = mAttrs.find(id); + if (it != mAttrs.end() && it->second) + it->second->update(); +} diff --git a/src/gui/widgets/statspage.h b/src/gui/widgets/statspage.h new file mode 100644 index 000000000..2bfb144d2 --- /dev/null +++ b/src/gui/widgets/statspage.h @@ -0,0 +1,54 @@ +/* + * The ManaPlus Client + * Copyright (C) 2011-2016 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_STATSPAGE_H +#define GUI_WIDGETS_STATSPAGE_H + +#include "gui/widgets/attrs/attrdisplay.h" + +#include "listeners/statlistener.h" + +#include "localconsts.h" + +class ScrollArea; +class VertContainer; + +class StatsPage final : public Container, + public WidgetListener, + public StatListener +{ + public: + StatsPage(const Widget2 *const widget); + + A_DELETE_COPY(StatsPage) + + void widgetResized(const Event &event) override final; + + void statChanged(const AttributesT id, + const int oldVal1, + const int oldVal2) override final; + + private: + Attrs mAttrs; + VertContainer *mAttrCont A_NONNULLPOINTER; + ScrollArea *mAttrScroll A_NONNULLPOINTER; +}; + +#endif // GUI_WIDGETS_STATSPAGE_H diff --git a/src/gui/widgets/statspagebasic.cpp b/src/gui/widgets/statspagebasic.cpp new file mode 100644 index 000000000..04252abf5 --- /dev/null +++ b/src/gui/widgets/statspagebasic.cpp @@ -0,0 +1,156 @@ +/* + * The ManaPlus Client + * Copyright (C) 2011-2016 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/statspagebasic.h" + +#include "being/playerinfo.h" + +#include "gui/widgets/button.h" +#include "gui/widgets/label.h" +#include "gui/widgets/scrollarea.h" +#include "gui/widgets/vertcontainer.h" + +#include "gui/widgets/attrs/changedisplay.h" + +#include "gui/windows/chatwindow.h" + +#include "utils/gettext.h" +#include "utils/stringutils.h" + +#include "resources/db/statdb.h" + +#include "debug.h" + +StatsPageBasic::StatsPageBasic(const Widget2 *const widget) : + Container(widget), + WidgetListener(), + StatListener(), + mAttrs(), + mAttrCont(new VertContainer(this, 32)), + mAttrScroll(new ScrollArea(this, mAttrCont, false)), + mCharacterPointsLabel(new Label(this, "C")) +{ + addWidgetListener(this); + + mAttrScroll->setHorizontalScrollPolicy(ScrollArea::SHOW_NEVER); + mAttrScroll->setVerticalScrollPolicy(ScrollArea::SHOW_AUTO); + + add(mAttrScroll); + const std::vector<BasicStat> &basicStats = StatDb::getBasicStats(); + FOR_EACH (std::vector<BasicStat>::const_iterator, it, basicStats) + { + const BasicStat &stat = *it; + AttrDisplay *disp = new ChangeDisplay(this, stat.attr, stat.name, stat.tag); + disp->update(); + mAttrCont->add2(disp, true); + mAttrs[stat.attr] = disp; + } + + // TRANSLATORS: status window label + mCharacterPointsLabel->setCaption(strprintf(_("Character points: %d"), + PlayerInfo::getAttribute(Attributes::PLAYER_CHAR_POINTS))); + mCharacterPointsLabel->adjustSize(); + mAttrCont->add1(mCharacterPointsLabel); +} + +void StatsPageBasic::widgetResized(const Event &event A_UNUSED) +{ + mAttrScroll->setSize(getWidth(), getHeight()); +} + +void StatsPageBasic::statChanged(const AttributesT id, + const int oldVal1 A_UNUSED, + const int oldVal2 A_UNUSED) +{ + const Attrs::const_iterator it = mAttrs.find(id); + if (it != mAttrs.end() && it->second) + it->second->update(); +} + +void StatsPageBasic::attributeChanged(const AttributesT id, + const int oldVal A_UNUSED, + const int newVal) +{ + PRAGMA45(GCC diagnostic push) + PRAGMA45(GCC diagnostic ignored "-Wswitch-enum") + switch (id) + { + case Attributes::PLAYER_CHAR_POINTS: + mCharacterPointsLabel->setCaption(strprintf( + // TRANSLATORS: status window label + _("Character points: %d"), newVal)); + + mCharacterPointsLabel->adjustSize(); + // Update all attributes + for (Attrs::const_iterator it = mAttrs.begin(); + it != mAttrs.end(); ++it) + { + if (it->second) + it->second->update(); + } + break; + + case Attributes::PLAYER_CORR_POINTS: + // Update all attributes + for (Attrs::const_iterator it = mAttrs.begin(); + it != mAttrs.end(); ++it) + { + if (it->second) + it->second->update(); + } + break; + + default: + break; + } + PRAGMA45(GCC diagnostic pop) +} + +void StatsPageBasic::setPointsNeeded(const AttributesT id, + const int needed) +{ + const Attrs::const_iterator it = mAttrs.find(id); + + if (it != mAttrs.end()) + { + AttrDisplay *const disp = it->second; + if (disp && disp->getType() == AttrDisplay::CHANGEABLE) + static_cast<ChangeDisplay*>(disp)->setPointsNeeded(needed); + } +} + +std::string StatsPageBasic::getStatsStr() const +{ + Attrs::const_iterator it = mAttrs.begin(); + const Attrs::const_iterator it_end = mAttrs.end(); + std::string str; + while (it != it_end) + { + const ChangeDisplay *const attr = dynamic_cast<ChangeDisplay*>( + (*it).second); + if (attr) + { + str.append(strprintf("%s:%s ", attr->getShortName().c_str(), + attr->getValue().c_str())); + } + ++ it; + } + return str; +} diff --git a/src/gui/widgets/statspagebasic.h b/src/gui/widgets/statspagebasic.h new file mode 100644 index 000000000..2f1b24e6f --- /dev/null +++ b/src/gui/widgets/statspagebasic.h @@ -0,0 +1,67 @@ +/* + * The ManaPlus Client + * Copyright (C) 2011-2016 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_STATSPAGEBASIC_H +#define GUI_WIDGETS_STATSPAGEBASIC_H + +#include "gui/widgets/attrs/attrdisplay.h" + +#include "listeners/attributelistener.h" +#include "listeners/statlistener.h" + +#include "localconsts.h" + +class Label; +class ScrollArea; +class VertContainer; + +class StatsPageBasic final : public Container, + public WidgetListener, + public AttributeListener, + public StatListener +{ + public: + StatsPageBasic(const Widget2 *const widget); + + A_DELETE_COPY(StatsPageBasic) + + void widgetResized(const Event &event) override final; + + void attributeChanged(const AttributesT id, + const int oldVal, + const int newVal) override final; + + void statChanged(const AttributesT id, + const int oldVal1, + const int oldVal2) override final; + + void setPointsNeeded(const AttributesT id, + const int needed); + + std::string getStatsStr() const; + + private: + Attrs mAttrs; + VertContainer *mAttrCont A_NONNULLPOINTER; + ScrollArea *mAttrScroll A_NONNULLPOINTER; + Label *mCharacterPointsLabel A_NONNULLPOINTER; +}; + +#endif // GUI_WIDGETS_STATSPAGEBASIC_H diff --git a/src/gui/windows/statuswindow.cpp b/src/gui/windows/statuswindow.cpp index c762084fd..461d5e01d 100644 --- a/src/gui/windows/statuswindow.cpp +++ b/src/gui/windows/statuswindow.cpp @@ -36,21 +36,18 @@ #include "gui/windows/setupwindow.h" #include "gui/widgets/button.h" +#include "gui/widgets/createwidget.h" #include "gui/widgets/layouthelper.h" #include "gui/widgets/layouttype.h" #include "gui/widgets/progressbar.h" -#include "gui/widgets/scrollarea.h" -#include "gui/widgets/vertcontainer.h" +#include "gui/widgets/statspage.h" +#include "gui/widgets/statspagebasic.h" +#include "gui/widgets/tabbedarea.h" #include "gui/widgets/windowcontainer.h" -#include "gui/widgets/attrs/changedisplay.h" -#include "gui/widgets/attrs/derdisplay.h" - #include "net/inventoryhandler.h" #include "net/playerhandler.h" -#include "resources/db/statdb.h" - #include "resources/item/item.h" #include "utils/gettext.h" @@ -65,6 +62,7 @@ StatusWindow::StatusWindow() : ActionListener(), AttributeListener(), StatListener(), + mTabs(CREATEWIDGETR(TabbedArea, this)), // TRANSLATORS: status window label mLvlLabel(new Label(this, strprintf(_("Level: %d"), 0))), // TRANSLATORS: status window label @@ -80,14 +78,9 @@ StatusWindow::StatusWindow() : mJobLvlLabel(nullptr), mJobLabel(nullptr), mJobBar(nullptr), - mAttrCont(new VertContainer(this, 32)), - mAttrScroll(new ScrollArea(this, mAttrCont, false)), - mDAttrCont(new VertContainer(this, 32)), - mDAttrScroll(new ScrollArea(this, mDAttrCont, false)), - mCharacterPointsLabel(new Label(this, "C")), + mBasicStatsPage(new StatsPageBasic(this)), // TRANSLATORS: status window button - mCopyButton(new Button(this, _("Copy to chat"), "copy", this)), - mAttrs() + mCopyButton(new Button(this, _("Copy to chat"), "copy", this)) { setWindowName("Status"); if (setupWindow) @@ -193,21 +186,10 @@ StatusWindow::StatusWindow() : place(3, 0, mMoneyLabel, 3); } - // ---------------------- - // Stats Part - // ---------------------- - - mAttrScroll->setHorizontalScrollPolicy(ScrollArea::SHOW_NEVER); - mAttrScroll->setVerticalScrollPolicy(ScrollArea::SHOW_AUTO); - place(0, 3, mAttrScroll, 5, 3); - - mDAttrScroll->setHorizontalScrollPolicy(ScrollArea::SHOW_NEVER); - mDAttrScroll->setVerticalScrollPolicy(ScrollArea::SHOW_AUTO); - place(6, 3, mDAttrScroll, 5, 3); + place(0, 3, mTabs, 9, 3); getLayout().setRowHeight(3, LayoutType::SET); - place(0, 6, mCharacterPointsLabel, 5); place(0, 5, mCopyButton); loadWindowState(); @@ -222,35 +204,30 @@ StatusWindow::StatusWindow() : mMoneyLabel->setCaption(strprintf(_("Money: %s"), Units::formatCurrency( PlayerInfo::getAttribute(Attributes::MONEY)).c_str())); mMoneyLabel->adjustSize(); - // TRANSLATORS: status window label - mCharacterPointsLabel->setCaption(strprintf(_("Character points: %d"), - PlayerInfo::getAttribute(Attributes::PLAYER_CHAR_POINTS))); - mCharacterPointsLabel->adjustSize(); updateLevelLabel(); + addTabs(); } -void StatusWindow::addAttributes() +void StatusWindow::addTabs() { - clearAttributes(); + // TRANSLATORS: status window tab name + addTabBasic(_("Basic")); + // TRANSLATORS: status window tab name + addTab(_("Extended")); + mTabs->adjustSize(); +} - const std::vector<BasicStat> &basicStats = StatDb::getBasicStats(); - FOR_EACH (std::vector<BasicStat>::const_iterator, it, basicStats) - { - const BasicStat &stat = *it; - addAttribute(stat.attr, - stat.name, - stat.tag, - Modifiable_true); - } +void StatusWindow::addTab(const std::string &name) +{ + mTabs->addTab(name, + new StatsPage(this)); +} - const std::vector<BasicStat> &extendedStats = StatDb::getExtendedStats(); - FOR_EACH (std::vector<BasicStat>::const_iterator, it, extendedStats) - { - const BasicStat &stat = *it; - addAttribute(stat.attr, - stat.name); - } +void StatusWindow::addTabBasic(const std::string &name) +{ + mTabs->addTab(name, + mBasicStatsPage); } void StatusWindow::updateLevelLabel() @@ -325,9 +302,6 @@ void StatusWindow::statChanged(const AttributesT id, else { updateMPBar(mMpBar, true); - const Attrs::const_iterator it = mAttrs.find(id); - if (it != mAttrs.end() && it->second) - it->second->update(); } } @@ -361,32 +335,6 @@ void StatusWindow::attributeChanged(const AttributesT id, mMoneyLabel->adjustSize(); break; - case Attributes::PLAYER_CHAR_POINTS: - mCharacterPointsLabel->setCaption(strprintf( - // TRANSLATORS: status window label - _("Character points: %d"), newVal)); - - mCharacterPointsLabel->adjustSize(); - // Update all attributes - for (Attrs::const_iterator it = mAttrs.begin(); - it != mAttrs.end(); ++it) - { - if (it->second) - it->second->update(); - } - break; - - // ?? - case Attributes::PLAYER_CORR_POINTS: - // Update all attributes - for (Attrs::const_iterator it = mAttrs.begin(); - it != mAttrs.end(); ++it) - { - if (it->second) - it->second->update(); - } - break; - case Attributes::PLAYER_LEVEL: // TRANSLATORS: status window label mLvlLabel->setCaption(strprintf(_("Level: %d"), newVal)); @@ -402,45 +350,7 @@ void StatusWindow::attributeChanged(const AttributesT id, void StatusWindow::setPointsNeeded(const AttributesT id, const int needed) { - const Attrs::const_iterator it = mAttrs.find(id); - - if (it != mAttrs.end()) - { - AttrDisplay *const disp = it->second; - if (disp && disp->getType() == AttrDisplay::CHANGEABLE) - static_cast<ChangeDisplay*>(disp)->setPointsNeeded(needed); - } -} - -void StatusWindow::addAttribute(const AttributesT id, - const std::string &restrict name, - const std::string &restrict shortName, - const Modifiable modifiable) -{ - AttrDisplay *disp; - - if (modifiable == Modifiable_true) - { - disp = new ChangeDisplay(this, id, name, shortName); - disp->update(); - mAttrCont->add1(disp); - } - else - { - disp = new DerDisplay(this, id, name, shortName); - disp->update(); - mDAttrCont->add1(disp); - } - mAttrs[id] = disp; -} - -void StatusWindow::clearAttributes() -{ - mAttrCont->clear(); - mDAttrCont->clear(); - FOR_EACH (Attrs::iterator, it, mAttrs) - delete (*it).second; - mAttrs.clear(); + mBasicStatsPage->setPointsNeeded(id, needed); } void StatusWindow::updateHPBar(ProgressBar *const bar, const bool showMax) @@ -694,20 +604,6 @@ void StatusWindow::action(const ActionEvent &event) if (event.getId() == "copy") { - Attrs::const_iterator it = mAttrs.begin(); - const Attrs::const_iterator it_end = mAttrs.end(); - std::string str; - while (it != it_end) - { - const ChangeDisplay *const attr = dynamic_cast<ChangeDisplay*>( - (*it).second); - if (attr) - { - str.append(strprintf("%s:%s ", attr->getShortName().c_str(), - attr->getValue().c_str())); - } - ++ it; - } - chatWindow->addInputText(str); + chatWindow->addInputText(mBasicStatsPage->getStatsStr()); } } diff --git a/src/gui/windows/statuswindow.h b/src/gui/windows/statuswindow.h index 539c23a39..2bb457acf 100644 --- a/src/gui/windows/statuswindow.h +++ b/src/gui/windows/statuswindow.h @@ -25,8 +25,6 @@ #include "gui/widgets/window.h" -#include "enums/simpletypes/modifiable.h" - #include "listeners/actionlistener.h" #include "listeners/attributelistener.h" #include "listeners/statlistener.h" @@ -36,6 +34,8 @@ class Button; class Label; class ProgressBar; class ScrollArea; +class StatsPageBasic; +class TabbedArea; class VertContainer; /** @@ -59,11 +59,6 @@ class StatusWindow final : public Window, void setPointsNeeded(const AttributesT id, const int needed); - void addAttribute(const AttributesT id, - const std::string &restrict name, - const std::string &restrict shortName = "", - const Modifiable modifiable = Modifiable_false); - static void updateHPBar(ProgressBar *const bar, const bool showMax = false); void updateMPBar(ProgressBar *bar, const bool showMax = false) const; @@ -87,8 +82,6 @@ class StatusWindow final : public Window, void action(const ActionEvent &event) override; - void clearAttributes(); - void attributeChanged(const AttributesT id, const int oldVal, const int newVal) override final; @@ -99,15 +92,15 @@ class StatusWindow final : public Window, void updateLevelLabel(); - void addAttributes(); - private: + void addTabs(); + void addTab(const std::string &name); + void addTabBasic(const std::string &name); + static std::string translateLetter(const char *const letters); static std::string translateLetter2(const std::string &letters); - /** - * Status Part - */ + TabbedArea *mTabs A_NONNULLPOINTER; Label *mLvlLabel A_NONNULLPOINTER; Label *mMoneyLabel A_NONNULLPOINTER; Label *mHpLabel A_NONNULLPOINTER; @@ -121,16 +114,10 @@ class StatusWindow final : public Window, Label *mJobLabel; ProgressBar *mJobBar; - VertContainer *mAttrCont A_NONNULLPOINTER; - ScrollArea *mAttrScroll A_NONNULLPOINTER; - VertContainer *mDAttrCont A_NONNULLPOINTER; - ScrollArea *mDAttrScroll A_NONNULLPOINTER; + StatsPageBasic *mBasicStatsPage; Label *mCharacterPointsLabel A_NONNULLPOINTER; Button *mCopyButton; - - typedef std::map<AttributesT, AttrDisplay*> Attrs; - Attrs mAttrs; }; extern StatusWindow *statusWindow; |