Ember
Loading...
Searching...
No Matches
ForgeSidePanel.h
Go to the documentation of this file.
1#pragma once
2
5#include "Interfaces/ITab.h"
7#include <string>
8#include <vector>
9#include <wx/aui/aui.h>
10#include <wx/aui/auibook.h>
11#include <wx/aui/framemanager.h>
12#include <wx/wx.h>
13
14class MainFrame;
15
16namespace EmberForge {
17enum class TabType;
18}
19
21 public:
22 SidePanel(wxWindow *parent, MainFrame *mainFrame = nullptr, const wxString &panelName = "Side Panel",
24 EmberForge::PanelDescriptor *parentDescriptor = nullptr);
25 virtual ~SidePanel();
26
27 void FinishSetup();
28
29 wxString GetTitle() const override = 0;
30 wxString GetPanelType() const override = 0;
31
32 int AddTab(ITabPtr tab) override;
33 ITabPtr RemoveTab(int index) override;
34 bool SetActiveTab(int index) override;
35 void ClearAllTabs() override;
36
40
41 void ResetToDefaultTab(EmberForge::TabType defaultTabType);
42 void ResetToDefaultTabs(const std::vector<EmberForge::TabType> &defaultTabTypes);
43
44 virtual void ApplyPreferences();
45 virtual void SaveState();
46 virtual void RestoreState();
47
48 void SetTabBarButtonsEnabled(bool enabled);
51
52 void SetPanelName(const wxString &name) { m_panelName = name; }
53
56 m_descriptor = descriptor;
57 m_panelName = descriptor.GetDisplayName();
58 }
59
60 protected:
61 void CreateLayout() override;
62 void CreateNotebook() override;
63 virtual void SetupEventHandlers();
64
65 virtual void OnPanelSpecificSetup();
66
67 virtual bool GetRememberLastTab() const = 0;
68 virtual const std::vector<std::string> &GetLastOpenTabs() const = 0;
69 virtual std::string GetLastActiveTab() const = 0;
70 virtual std::string GetDefaultActiveTab() const = 0;
71
73
74 void DoCreateLayout();
75 void DoCreateNotebook();
77
78 virtual void OnAddTabButtonClicked(wxCommandEvent &event) {}
79 virtual std::vector<EmberForge::TabType> GetSupportedTabTypes() const { return {}; }
80
81 void OnTabChanged(wxAuiNotebookEvent &event);
82 void OnTabClosed(wxAuiNotebookEvent &event);
83 void OnAddTabButtonClickedInternal(wxCommandEvent &event);
84 virtual void OnMenuButtonClicked(wxCommandEvent &event);
85
86 void OnHidePanelClicked(wxCommandEvent &event);
87 void OnPanelPreferencesClicked(wxCommandEvent &event);
88
89 void OnTabBarAddButtonClicked(wxCommandEvent &event);
90 void OnTabBarMenuButtonClicked(wxCommandEvent &event);
91
94
96 wxString m_panelName;
100
109
110 private:
112};
std::unique_ptr< ITab > ITabPtr
Definition ITab.h:54
Custom wxAuiNotebook that integrates Add Tab and Menu buttons into the tab bar.
Descriptor that tracks panel metadata.
wxString GetDisplayName() const
Get a display name for this panel type.
Tabbed side panel using wxAuiNotebook.
Definition SidePanel.h:12
wxAuiNotebook * m_notebook
Definition SidePanel.h:50
Main application window for EmberForge.
Definition MainFrame.h:67
wxString GetPanelType() const override=0
Returns the panel type identifier.
void SetTabBarButtonsEnabled(bool enabled)
@ ID_BASE_PREFERENCES_MENU_ITEM
@ ID_BASE_HIDE_PANEL_MENU_ITEM
void FinishSetup()
Definition SidePanel.cpp:69
virtual void ApplyPreferences()
void DoCreateNotebook()
Definition SidePanel.cpp:83
bool SetActiveTab(int index) override
Sets the active tab by index; returns true on success.
void OnTabChanged(wxAuiNotebookEvent &event)
virtual const std::vector< std::string > & GetLastOpenTabs() const =0
void OnHidePanelClicked(wxCommandEvent &event)
wxString GetTitle() const override=0
Returns the panel title.
void DoCreateLayout()
Definition SidePanel.cpp:54
void ResetToDefaultTab(EmberForge::TabType defaultTabType)
void RestoreAndEnsureTabs()
bool m_tabBarButtonsEnabled
void ClearAllTabs() override
Removes all tabs.
virtual void SetupEventHandlers()
Definition SidePanel.cpp:98
virtual ~SidePanel()
Definition SidePanel.cpp:42
void OnPanelPreferencesClicked(wxCommandEvent &event)
void SetPanelName(const wxString &name)
EmberForge::CustomAuiNotebook * GetCustomNotebook() const
virtual void OnMenuButtonClicked(wxCommandEvent &event)
virtual void OnPanelSpecificSetup()
void DoSetupEventHandlers()
void OnAddTabButtonClickedInternal(wxCommandEvent &event)
MainFrame * m_mainFrame
SidePanel(wxWindow *parent, MainFrame *mainFrame=nullptr, const wxString &panelName="Side Panel", EmberForge::PanelType panelType=EmberForge::PanelType::LeftPanel, EmberForge::PanelDescriptor *parentDescriptor=nullptr)
void OnTabClosed(wxAuiNotebookEvent &event)
virtual std::string GetLastActiveTab() const =0
void SetPanelDescriptor(const EmberForge::PanelDescriptor &descriptor)
void ShowTabCreationMenu()
wxString m_panelName
const EmberForge::PanelDescriptor & GetPanelDescriptor() const
void ToggleTabBarButtons()
bool AreTabBarButtonsEnabled() const
virtual void OnAddTabButtonClicked(wxCommandEvent &event)
virtual void RestoreState()
void OnTabBarMenuButtonClicked(wxCommandEvent &event)
virtual bool GetRememberLastTab() const =0
void CreateAndAddTab(EmberForge::TabType tabType)
virtual void SaveState()
EmberForge::PanelDescriptor m_descriptor
void ResetToDefaultTabs(const std::vector< EmberForge::TabType > &defaultTabTypes)
void CreateNotebook() override
Hook: creates the notebook control. Override to customize.
Definition SidePanel.cpp:81
bool m_isInitializing
wxDECLARE_EVENT_TABLE()
virtual std::vector< EmberForge::TabType > GetSupportedTabTypes() const
void OnTabBarAddButtonClicked(wxCommandEvent &event)
void CreateLayout() override
Creates the side panel layout with the notebook.
Definition SidePanel.cpp:52
int AddTab(ITabPtr tab) override
Adds a tab and returns its index.
virtual std::string GetDefaultActiveTab() const =0
ITabPtr RemoveTab(int index) override
Removes the tab at the given index; returns the removed tab.
PanelType
Defines the type of panel in the UI hierarchy.
TabType
Enumeration of available tab types.
Definition TabFactory.h:17