guitab.h File Reference

Go to the documentation of this file. Source: include/ffw/gui/guitab.h

/* This file is part of FineFramework project */
#ifndef FFW_GUI_TABS
#define FFW_GUI_TABS
#include "guiwidget.h"
#include "guilayout.h"
#include "guibuttontoggle.h"
namespace ffw {
    class FFW_API GuiTabs : public GuiWidget {
    public:
        class FFW_API Button : public GuiButtonToggle {
        public:
            struct Style {
                GuiButton::Style self;
            };

            Button(GuiWindow* context, const std::string& label, GuiWidget* targetWidget);
            virtual ~Button() = default;
            void setStyle(const Button::Style* style, bool defaults = false);
            inline GuiWidget* getTargetWidget() const {
                return targetWidget;
            }
        private:
            void eventThemeChanged(const GuiTheme* theme, bool defaults) override;
            GuiWidget* targetWidget;
        };
        class FFW_API TopBar : public GuiLayout {
        public:
            struct Style {
                GuiTabs::Button::Style button;
                GuiLayout::Style self;
            };

            TopBar(GuiWindow* context);
            virtual ~TopBar() = default;
            void setStyle(const TopBar::Style* style, bool defaults = false);
        private:
            void eventThemeChanged(const GuiTheme* theme, bool defaults) override;
        };
        class FFW_API Content : public GuiLayout {
        public:
            struct Style {
                GuiLayout::Style self;
            };

            Content(GuiWindow* context);
            virtual ~Content() = default;
            void setStyle(const Content::Style* style, bool defaults = false);
        private:
            void eventThemeChanged(const GuiTheme* theme, bool defaults) override;
        };

        struct Style {
            GuiTabs::TopBar::Style topBar;
            GuiTabs::Content::Style content;
            GuiWidget::Style self;
        };

        GuiTabs(GuiWindow* context);
        virtual ~GuiTabs() = default;
        ffw::Pointf getMinimumWrapSize() override;
        GuiTabs::Button* addTab(GuiTabs::Button* button, GuiWidget* widget);
        GuiTabs::Button* addTab(const std::string& label, GuiWidget* widget);
        void showTabByIndex(size_t index);
        void showTabByWidget(const GuiWidget *widget);
        void setStyle(const GuiTabs::Style* style, bool defaults = false);
    private:
        void widgetEvent(GuiEvent e);
        void hideAllExcept(GuiWidget* widget);
        void addWidgetPair(GuiButtonToggle* button, GuiWidget* widget);
        void eventRender(const ffw::Pointf& contentoffset, const ffw::Pointf& contentsize) override;
        void eventThemeChanged(const GuiTheme* theme, bool defaults) override;
        GuiTabs::TopBar* bar;
        GuiTabs::Content* content;
    };
}
#endif