diff --git a/dependencies/Common b/dependencies/Common index 98c16a77..51573c65 160000 --- a/dependencies/Common +++ b/dependencies/Common @@ -1 +1 @@ -Subproject commit 98c16a7730fb6b166158cfea4b1a94f29e390716 +Subproject commit 51573c659b1f325458073f4a3a885824da2b5662 diff --git a/sutk/include/sutk/NotebookView.hpp b/sutk/include/sutk/NotebookView.hpp index f819d5c7..60561560 100644 --- a/sutk/include/sutk/NotebookView.hpp +++ b/sutk/include/sutk/NotebookView.hpp @@ -13,20 +13,21 @@ namespace SUTK { - class TabView; + class Tab; class NotebookPage { friend class NotebookView; + friend class Tab; friend u32 getIndexOfPage(const NotebookPage* page) noexcept; private: void* m_data; void (*m_dataDeleter)(void*); std::optional> m_onPageRemove; - TabView* m_tabView; + Tab* m_tab; Container* m_container; - TabView* getTabView() noexcept { return m_tabView; } + Tab* getTab() noexcept { return m_tab; } NotebookPage* getNext() noexcept; const NotebookPage* getNext() const noexcept { return com::cast_away_const(this)->getNext(); } NotebookPage* getPrev() noexcept; @@ -74,33 +75,14 @@ namespace SUTK class SUTK_API TabView : public Button { - friend class NotebookView; - friend class TabAnimGroup; - friend class TabRemoveAnimation; - friend class TabShiftAnimation; - friend u32 getIndexOfPage(const NotebookPage* page) noexcept; private: DefaultButtonGraphic* m_graphic; Button* m_closeButton; ImageButtonGraphic* m_closeButtonGraphic; - NotebookPage* m_page; - TabView* m_next; - TabView* m_prev; - u32 m_index; - public: TabView(UIDriver& driver, Container* parent) noexcept; ~TabView() noexcept; - // Getters - TabView* getNext() noexcept { return m_next; } - const TabView* getNext() const noexcept { return m_next; } - TabView* getPrev() noexcept { return m_prev; } - const TabView* getPrev() const noexcept { return m_prev; } - NotebookPage* getPage() noexcept { return m_page; } - u32 getIndex() const noexcept { return m_index; } - u32 getLinkedListIndex() const noexcept; - void setLabel(const std::string_view str) noexcept; const std::string& getLabel() noexcept; @@ -108,6 +90,29 @@ namespace SUTK void selectedState() noexcept; }; + class NotebookView; + + class SUTK_API Tab : public com::LinkedListNodeBase + { + friend class NotebookView; + friend class TabAnimGroup; + friend class TabRemoveAnimation; + friend class TabShiftAnimation; + private: + TabView* m_tabView; + NotebookPage* m_page; + u32 m_index; + public: + Tab(NotebookView* notebook, const std::string_view labelStr, Tab* after = com::null_pointer()) noexcept; + ~Tab() noexcept; + void setPage(NotebookPage* page) noexcept; + // Getters + TabView* getTabView() noexcept { return m_tabView; } + NotebookPage* getPage() noexcept { return m_page; } + u32 getIndex() const noexcept { return m_index; } + u32 getLinkedListIndex() const noexcept; + }; + class HBoxContainer; class TabRemoveAnimation; @@ -157,7 +162,7 @@ namespace SUTK private: struct TabRearrangeContext { - TabView* grabbedTabView; + Tab* grabbedTab; Vec2Df positionOffset; u32 tabIndex; com::Bool isMoved; @@ -180,9 +185,9 @@ namespace SUTK void abortTabAnim() noexcept; - void dispatchAnimNewTab(TabView* tabView) noexcept; - void dispatchAnimRemoveTab(TabView* tabView) noexcept; - void dispatchAnimTabShift(TabView* tabView, com::Bool isLeft) noexcept; + void dispatchAnimNewTab(Tab* tab) noexcept; + void dispatchAnimRemoveTab(Tab* tab) noexcept; + void dispatchAnimTabShift(Tab* tab, com::Bool isLeft) noexcept; protected: virtual void onMouseMove(Vec2Df pos) noexcept override; @@ -192,6 +197,8 @@ namespace SUTK ~NotebookView() noexcept; void checkForTabSwap() noexcept; + HBoxContainer* getTabContainer() noexcept { return m_tabContainer; } + OnPageSelectEvent& getOnPageSelectEvent() noexcept { return m_onPageSelectEvent; } void setAnimDuration(f32 duration) noexcept { m_animDuration = duration; } diff --git a/sutk/source/NotebookView.cpp b/sutk/source/NotebookView.cpp index fefbd1e8..47ad1576 100644 --- a/sutk/source/NotebookView.cpp +++ b/sutk/source/NotebookView.cpp @@ -25,7 +25,7 @@ namespace SUTK { - NotebookPage::NotebookPage(Container* container) noexcept : m_data(NULL), m_tabView(com::null_pointer()), m_container(container) { } + NotebookPage::NotebookPage(Container* container) noexcept : m_data(NULL), m_tab(com::null_pointer()), m_container(container) { } NotebookPage::~NotebookPage() noexcept { if(m_data != com::null_pointer()) @@ -38,7 +38,7 @@ namespace SUTK NotebookPage* NotebookPage::getNext() noexcept { - auto next = m_tabView->getNext(); + auto next = m_tab->getNext(); if(next) return next->getPage(); return com::null_pointer(); @@ -46,7 +46,7 @@ namespace SUTK NotebookPage* NotebookPage::getPrev() noexcept { - auto prev = m_tabView->getPrev(); + auto prev = m_tab->getPrev(); if(prev) return prev->getPage(); return com::null_pointer(); @@ -54,20 +54,20 @@ namespace SUTK void NotebookPage::setLabel(const std::string_view str) noexcept { - m_tabView->setLabel(str); + m_tab->getTabView()->setLabel(str); } const std::string& NotebookPage::getLabel() const noexcept { - return m_tabView->getLabel(); + return m_tab->getTabView()->getLabel(); } u32 NotebookPage::getIndex() const noexcept { - return m_tabView->getIndex(); + return m_tab->getIndex(); } - TabView::TabView(UIDriver& driver, Container* parent) noexcept : Button(driver, parent, /* isCreateDefaultGraphic: */ true), m_next(com::null_pointer()), m_prev(com::null_pointer()) + TabView::TabView(UIDriver& driver, Container* parent) noexcept : Button(driver, parent, /* isCreateDefaultGraphic: */ true) { m_graphic = getGraphicAs(); Label& label = m_graphic->getLabel(); @@ -95,18 +95,6 @@ namespace SUTK driver.destroyContainer