15 : wxNotebook(parent,
id, pos, size, style), m_activeTabIndex(-1), m_allowTabReorder(true), m_showCloseButton(true) {
26 wxWindow *tabWindow = tab->GetWidget();
32 int index = GetPageCount();
33 if (!AddPage(tabWindow, title,
true)) {
38 TabInfo tabInfo(std::move(tab), title);
40 m_tabs.push_back(std::move(tabInfo));
43 if (!tooltip.IsEmpty()) {
71 if (!RemovePage(index)) {
104 return m_tabs[index].tab.get();
114 for (
int i = 0; i < static_cast<int>(
m_tabs.size()); ++i) {
115 if (
m_tabs[i].tab.get() == tab) {
124 m_tabs[index].title = title;
125 SetPageText(index, title);
131 return m_tabs[index].title;
133 return wxEmptyString;
138 m_tabs[index].tooltip = tooltip;
146 return m_tabs[index].tooltip;
148 return wxEmptyString;
153 m_tabs[index].state = state;
160 return m_tabs[index].state;
167 m_tabs[index].canClose = closable;
173 return m_tabs[index].canClose;
198 if (next != current) {
206 if (prev != current) {
231 return m_tabs[index].canClose;
235 for (
const auto &tabInfo :
m_tabs) {
236 if (!tabInfo.canClose) {
251 m_tabs[index].userData = userData;
257 return m_tabs[index].userData;
275 int newIndex =
event.GetSelection();
287 wxPoint pos =
event.GetPosition();
288 int hitTab = HitTest(pos);
289 if (hitTab != wxNOT_FOUND) {
296 wxPoint pos =
event.GetPosition();
297 int hitTab = HitTest(pos);
298 if (hitTab != wxNOT_FOUND &&
CanCloseTab(hitTab)) {
312 wxString title =
m_tabs[index].title;
316 SetPageText(index, title +
"*");
319 SetPageText(index, title +
"...");
322 SetPageText(index, title +
"!");
325 SetPageText(index, title);
336 menu.Append(wxID_CLOSE,
"Close");
337 menu.Append(wxID_ANY,
"Close Others");
338 menu.Append(wxID_ANY,
"Close All");
BehaviorTreeProjectDialog::OnProjectNameChanged BehaviorTreeProjectDialog::OnRemoveFiles wxEND_EVENT_TABLE() BehaviorTreeProjectDialog
Generic container for managing tabbed UI components.
void OnTabChanged(wxBookCtrlEvent &event)
TabActivatedCallback m_tabActivatedCallback
void * GetTabUserData(int index) const
void OnTabChanging(wxBookCtrlEvent &event)
TabCreatedCallback m_tabCreatedCallback
int AddTab(std::unique_ptr< ITab > tab, const wxString &title, const wxString &tooltip=wxEmptyString)
void SetTabCreatedCallback(TabCreatedCallback callback)
void NotifyTabActivated(int index)
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
void SetActiveTab(int index)
ITab * GetTab(int index) const
void SetTabState(int index, TabState state)
void NotifyTabCreated(int index)
void RefreshTab(int index)
std::function< void(ITab *tab, int index)> TabActivatedCallback
TabState GetTabState(int index) const
bool RemoveTab(int index)
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 NotifyTabClosed(int index)
void SetTabActivatedCallback(TabActivatedCallback callback)
wxString GetTabTitle(int index) const
ITab * GetActiveTab() const
bool DeserializeState(const wxString &data)
int GetTabIndex(ITab *tab) const
void UpdateTabAppearance(int index)
int GetActiveTabIndex() const
TabClosedCallback m_tabClosedCallback
wxString GetTabTooltip(int index) const
std::function< void(ITab *tab, int index)> TabClosedCallback
bool CanCloseTab(int index)
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.
virtual void Refresh()
Refreshes the tab content.
wxBEGIN_EVENT_TABLE(SceneContainer, wxPanel) EVT_SIZE(SceneContainer
TabContainer::OnTabChanged EVT_NOTEBOOK_PAGE_CHANGING(wxID_ANY, TabContainer::OnTabChanging) EVT_RIGHT_UP(TabContainer