Ember
Loading...
Searching...
No Matches
TabContainer.h
Go to the documentation of this file.
1#pragma once
2
3#include "Interfaces/ITab.h"
4#include <functional>
5#include <memory>
6#include <vector>
7#include <wx/notebook.h>
8#include <wx/wx.h>
9
10namespace EmberForge {
11namespace ui {
12
58class TabContainer : public wxNotebook {
59 public:
60 // Tab events
61 using TabActivatedCallback = std::function<void(ITab *tab, int index)>;
62 using TabClosedCallback = std::function<void(ITab *tab, int index)>;
63 using TabCreatedCallback = std::function<void(ITab *tab, int index)>;
64
65 // Tab state
67
68 // Tab info structure
69 struct TabInfo {
70 std::unique_ptr<ITab> tab;
71 wxString title;
72 wxString tooltip;
75 void *userData;
76
77 TabInfo(std::unique_ptr<ITab> t, const wxString &title)
78 : tab(std::move(t)), title(title), state(TabState::Inactive), canClose(true), userData(nullptr) {}
79 };
80
81 public:
82 TabContainer(wxWindow *parent, wxWindowID id = wxID_ANY, const wxPoint &pos = wxDefaultPosition,
83 const wxSize &size = wxDefaultSize, long style = wxNB_TOP);
84 virtual ~TabContainer();
85
86 // Tab management
87 int AddTab(std::unique_ptr<ITab> tab, const wxString &title, const wxString &tooltip = wxEmptyString);
88 bool RemoveTab(int index);
89 bool RemoveTab(ITab *tab);
90 void RemoveAllTabs();
91
92 // Tab access
93 ITab *GetTab(int index) const;
94 ITab *GetActiveTab() const;
95 int GetTabCount() const;
96 int GetTabIndex(ITab *tab) const;
97
98 // Tab properties
99 void SetTabTitle(int index, const wxString &title);
100 wxString GetTabTitle(int index) const;
101 void SetTabTooltip(int index, const wxString &tooltip);
102 wxString GetTabTooltip(int index) const;
103 void SetTabState(int index, TabState state);
104 TabState GetTabState(int index) const;
105 void SetTabClosable(int index, bool closable);
106 bool IsTabClosable(int index) const;
107
108 // Tab navigation
109 void SetActiveTab(int index);
110 void SetActiveTab(ITab *tab);
111 int GetActiveTabIndex() const;
112 void NextTab();
113 void PrevTab();
114
115 // Tab lifecycle
116 void RefreshTab(int index);
117 void RefreshAllTabs();
118 bool CanCloseTab(int index);
119 bool CanCloseAllTabs();
120
121 // Event callbacks
125
126 // Utility
127 void SetTabUserData(int index, void *userData);
128 void *GetTabUserData(int index) const;
129
130 // Serialization
131 bool SerializeState(wxString &data) const;
132 bool DeserializeState(const wxString &data);
133
134 protected:
135 // Event handlers
136 void OnTabChanged(wxBookCtrlEvent &event);
137 void OnTabChanging(wxBookCtrlEvent &event);
138 void OnTabRightClick(wxMouseEvent &event);
139 void OnTabMiddleClick(wxMouseEvent &event);
140
141 // Helper methods
142 void UpdateTabAppearance(int index);
143 void CreateTabContextMenu(int index);
144 bool ValidateTabIndex(int index) const;
145 void NotifyTabActivated(int index);
146 void NotifyTabClosed(int index);
147 void NotifyTabCreated(int index);
148
149 private:
150 std::vector<TabInfo> m_tabs;
151
152 // Event callbacks
156
157 // State
161
162 DECLARE_EVENT_TABLE()
163};
164
165} // namespace ui
166} // namespace EmberForge
void OnTabChanged(wxBookCtrlEvent &event)
TabActivatedCallback m_tabActivatedCallback
void * GetTabUserData(int index) const
void OnTabChanging(wxBookCtrlEvent &event)
TabCreatedCallback m_tabCreatedCallback
void SetTabCreatedCallback(TabCreatedCallback callback)
void OnTabMiddleClick(wxMouseEvent &event)
void SetTabClosable(int index, bool closable)
void SetTabUserData(int index, void *userData)
void SetTabTooltip(int index, const wxString &tooltip)
bool SerializeState(wxString &data) const
ITab * GetTab(int index) const
void SetTabState(int index, TabState state)
std::function< void(ITab *tab, int index)> TabActivatedCallback
TabState GetTabState(int index) const
void OnTabRightClick(wxMouseEvent &event)
bool IsTabClosable(int index) const
std::vector< TabInfo > m_tabs
bool ValidateTabIndex(int index) const
void SetTabTitle(int index, const wxString &title)
void SetTabActivatedCallback(TabActivatedCallback callback)
wxString GetTabTitle(int index) const
bool DeserializeState(const wxString &data)
int GetTabIndex(ITab *tab) const
void UpdateTabAppearance(int index)
TabClosedCallback m_tabClosedCallback
wxString GetTabTooltip(int index) const
std::function< void(ITab *tab, int index)> TabClosedCallback
TabContainer(wxWindow *parent, wxWindowID id=wxID_ANY, const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxDefaultSize, long style=wxNB_TOP)
void CreateTabContextMenu(int index)
std::function< void(ITab *tab, int index)> TabCreatedCallback
void SetTabClosedCallback(TabClosedCallback callback)
Interface for tab-based UI components in the application.
Definition ITab.h:7
TabInfo(std::unique_ptr< ITab > t, const wxString &title)