diff options
Diffstat (limited to 'src/gui/widgets')
-rw-r--r-- | src/gui/widgets/basiccontainer.cpp | 10 | ||||
-rw-r--r-- | src/gui/widgets/basiccontainer.h | 3 | ||||
-rw-r--r-- | src/gui/widgets/tabstrip.cpp | 38 | ||||
-rw-r--r-- | src/gui/widgets/tabstrip.h | 4 |
4 files changed, 55 insertions, 0 deletions
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<Widget*> &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 <set> #include <vector> #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<Widget*> &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<Button*>(*iter); + if (button->isPressed2()) + { + button->setPressed(false); + ++iter; + if (iter == mWidgets.end()) + iter = mWidgets.begin(); + button = static_cast<Button*>(*iter); + action(ActionEvent(button, button->getActionEventId())); + return; + } + } +} + +void TabStrip::prevTab() +{ + FOR_EACH (WidgetListConstIterator, iter, mWidgets) + { + Button *button = static_cast<Button*>(*iter); + if (button->isPressed2()) + { + button->setPressed(false); + if (iter == mWidgets.begin()) + iter = mWidgets.end(); + if (iter == mWidgets.begin()) + return; + --iter; + button = static_cast<Button*>(*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 |