From 8aa68056aec80c775a3ddb152bea8a90a7097199 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Mon, 1 Dec 2014 23:59:31 +0300 Subject: Add actions for switch to next/prev tab in inventory. Keys not assigned. --- src/gui/widgets/basiccontainer.cpp | 10 ++++++++++ src/gui/widgets/basiccontainer.h | 3 +++ src/gui/widgets/tabstrip.cpp | 38 ++++++++++++++++++++++++++++++++++++++ src/gui/widgets/tabstrip.h | 4 ++++ 4 files changed, 55 insertions(+) (limited to 'src/gui/widgets') diff --git a/src/gui/widgets/basiccontainer.cpp b/src/gui/widgets/basiccontainer.cpp index 4803373f2..a66a244a0 100644 --- a/src/gui/widgets/basiccontainer.cpp +++ b/src/gui/widgets/basiccontainer.cpp @@ -372,3 +372,13 @@ void BasicContainer::setInternalFocusHandler(FocusHandler* focusHandler) (*iter)->setFocusHandler(mInternalFocusHandler); } } + +Widget *BasicContainer::findFirstWidget(const std::set &list) +{ + FOR_EACHR (WidgetListReverseIterator, iter, mWidgets) + { + if (list.find(*iter) != list.end()) + return *iter; + } + return nullptr; +} diff --git a/src/gui/widgets/basiccontainer.h b/src/gui/widgets/basiccontainer.h index 85067daff..47fa2abc1 100644 --- a/src/gui/widgets/basiccontainer.h +++ b/src/gui/widgets/basiccontainer.h @@ -64,6 +64,7 @@ #ifndef GUI_WIDGETS_BASICCONTAINER_H #define GUI_WIDGETS_BASICCONTAINER_H +#include #include #include "gui/widgets/widget.h" @@ -134,6 +135,8 @@ class BasicContainer notfinal : public Widget, virtual void death(const Event& event) override; + Widget *findFirstWidget(const std::set &list); + protected: /** * Adds a widget to the basic container. diff --git a/src/gui/widgets/tabstrip.cpp b/src/gui/widgets/tabstrip.cpp index 7c6627fbf..644fa3d48 100644 --- a/src/gui/widgets/tabstrip.cpp +++ b/src/gui/widgets/tabstrip.cpp @@ -77,3 +77,41 @@ void TabStrip::action(const ActionEvent &event) } } } + +void TabStrip::nextTab() +{ + FOR_EACH (WidgetListConstIterator, iter, mWidgets) + { + Button *button = static_cast(*iter); + if (button->isPressed2()) + { + button->setPressed(false); + ++iter; + if (iter == mWidgets.end()) + iter = mWidgets.begin(); + button = static_cast(*iter); + action(ActionEvent(button, button->getActionEventId())); + return; + } + } +} + +void TabStrip::prevTab() +{ + FOR_EACH (WidgetListConstIterator, iter, mWidgets) + { + Button *button = static_cast(*iter); + if (button->isPressed2()) + { + button->setPressed(false); + if (iter == mWidgets.begin()) + iter = mWidgets.end(); + if (iter == mWidgets.begin()) + return; + --iter; + button = static_cast(*iter); + action(ActionEvent(button, button->getActionEventId())); + return; + } + } +} diff --git a/src/gui/widgets/tabstrip.h b/src/gui/widgets/tabstrip.h index a89dd5144..daadad35c 100644 --- a/src/gui/widgets/tabstrip.h +++ b/src/gui/widgets/tabstrip.h @@ -41,6 +41,10 @@ class TabStrip final : public WidgetGroup const override final A_WARN_UNUSED; void action(const ActionEvent &event) override final; + + void nextTab(); + + void prevTab(); }; #endif // GUI_WIDGETS_TABSTRIP_H -- cgit v1.2.3-70-g09d2