Ember
Loading...
Searching...
No Matches
MainFrame.h
Go to the documentation of this file.
1#pragma once
2
6#include <map>
7#include <string>
8#include <wx/aui/framemanager.h>
9#include <wx/checkbox.h>
10#include <wx/listbox.h>
11#include <wx/notebook.h>
12#include <wx/scrolwin.h>
13#include <wx/spinctrl.h>
14#include <wx/splitter.h>
15#include <wx/srchctrl.h>
16#include <wx/treectrl.h>
17#include <wx/wx.h>
18
19// Forward declarations
20class BottomPanel;
21class LeftSidePanel;
22class RightSidePanel;
23class SimplePositioningFrame;
24class PropertiesTab;
26class MainPanel;
28class BlackboardScene;
29
30namespace EmberCore {
31class ITreeNode;
32class Node;
33class Blackboard;
34class BehaviorTree;
36} // namespace EmberCore
37
67class MainFrame : public wxFrame {
68 public:
76 MainFrame(const wxString &title, const wxPoint &pos, const wxSize &size, long style = wxDEFAULT_FRAME_STYLE);
77
81 virtual ~MainFrame();
82
83 // Helper method to log messages (moved to public so panels can access it)
84 void LogMessage(const wxString &message);
85
86 // Panel communication methods
90
93
94 // Unified selection synchronization
95 void SyncSelection(EmberCore::ITreeNode *selectedNode);
96
97 // Get the shared behavior tree from the active scene
98 std::shared_ptr<EmberCore::Node> GetSharedBehaviorTree() const;
99
100 // Update properties tab reference (called when a new properties tab is created)
101 void UpdatePropertiesTabReference(PropertiesTab *propertiesTab);
102
103 // Navigator tab reference
106
107 // Tab lifecycle notifications
109
110 // AUI management methods
111 wxAuiManager *GetAuiManager() { return m_auiManager; }
112
113 // File loading methods (used by menu and drag-and-drop)
114 void LoadXMLFile(const wxString &filePath, bool confirmOverride = false);
115 void LoadXMLFileInNewScene(const wxString &filePath);
116
117 // Open a tree in a separate scene tab
118 void OpenTreeInNewScene(const std::string &treeId);
119
120 bool IsActiveSceneBehaviorTree() const;
121
122 // Project methods
123 void NewProject();
124 void OpenProject();
125 void OpenProject(const wxString &projectPath);
126 void CloseProject();
127 void SaveProject();
128 void ShowProjectSettings();
129 bool HasActiveProject() const;
130 std::shared_ptr<EmberCore::BehaviorTreeProject> GetActiveProject() const;
131
132 // Preferences refresh (called by PreferencesDialog)
133 void RefreshPreferences(); // Apply preference changes immediately
134
135 // Update panel toggle button icons to match current panel visibility
137
138 // Count how many instances of a tab exist across all panels
139 int CountTabGlobally(const wxString &tabName) const;
140
141 // Canvas refresh (called when tree structure changes)
143
144 // Tree navigation (used by ForgeNavigatorTab)
145 void LoadTreeIntoScene(const std::string &treeId);
146 void UpdateTreeSelector();
147 const std::string &GetCurrentTreeId() const { return m_currentTreeId; }
148 void NavigateToBlackboard(const std::string &bbId);
149
150 private:
151 void OnExit(wxCommandEvent &event);
152 void OnAbout(wxCommandEvent &event);
153 void OnLoadXML(wxCommandEvent &event); // XML loading with libxml2
154 void OnSaveXML(wxCommandEvent &event); // XML saving
155 void OnSaveAsXML(wxCommandEvent &event); // XML save as
156
157 // Project menu event handlers
158 void OnNewProject(wxCommandEvent &event);
159 void OnOpenProject(wxCommandEvent &event);
160 void OnCloseProject(wxCommandEvent &event);
161 void OnSaveProject(wxCommandEvent &event);
162 void OnProjectSettings(wxCommandEvent &event);
163
164 // View menu event handlers
165 void OnToggleMaximize(wxCommandEvent &event);
166 void OnNextScene(wxCommandEvent &event);
167 void OnPreviousScene(wxCommandEvent &event);
168 void OnResetZoom(wxCommandEvent &event);
169 void OnResetUI(wxCommandEvent &event);
170
171 // Settings menu event handlers
172 void OnPreferences(wxCommandEvent &event);
173 void OnParserConfig(wxCommandEvent &event);
174
175 // Tool button event handlers
176 void OnEditorTool(wxCommandEvent &event);
177 void OnMonitorTool(wxCommandEvent &event);
178 void OnLogReplayTool(wxCommandEvent &event);
179
180 // Panel toggle event handlers
181 void OnToggleLeftPanel(wxCommandEvent &event);
182 void OnToggleBottomPanel(wxCommandEvent &event);
183 void OnToggleRightPanel(wxCommandEvent &event);
184
185 // Performance monitoring event handlers
186 void OnPaint(wxPaintEvent &event);
187 void OnIdle(wxIdleEvent &event);
188 void OnFrameResize(wxSizeEvent &event);
189
190 // Setup methods
194 void CreatePanelLayout();
195 void RefreshMenuHotkeys();
196
197 // Save helper method
198 void DoSaveXML(const wxString &filePath);
199
201
202 // Member variables
203 wxAuiManager *m_auiManager; // Unified AUI manager for all panels
210 wxToolBar *m_panelToggleToolbar; // Toolbar for panel visibility toggles
211
212 // File tracking
214 bool m_treeModified = false;
215
216 // Project tracking
217 std::shared_ptr<EmberCore::BehaviorTreeProject> m_activeProject;
218 std::map<std::string, std::shared_ptr<EmberCore::BehaviorTree>> m_projectTrees;
219 std::map<std::string, std::shared_ptr<EmberCore::Blackboard>> m_projectBlackboards;
220 std::map<std::string, std::vector<std::string>> m_blackboardIncludesMap;
222 std::string m_currentTreeId;
223 std::string m_mainTreeName;
224
225 // Proportional panel layout
228
229 // Bidirectional synchronization control
232
234};
235
236enum {
237 ID_LoadXML = 1, // ID for XML loading (libxml2)
238 ID_SaveXML = wxID_HIGHEST + 50, // ID for XML saving
239 ID_SaveAsXML = wxID_HIGHEST + 51, // ID for XML save as
240
241 // Project menu IDs
242 ID_NewProject = wxID_HIGHEST + 60,
247
248 // View menu IDs
254
255 // Settings menu IDs
258
259 // Tool IDs - Updated to new 3-button layout
263
264 // Panel toggle IDs
268};
@ ID_EditorTool
Definition MainFrame.h:260
@ ID_NewProject
Definition MainFrame.h:242
@ ID_ToggleBottomPanel
Definition MainFrame.h:266
@ ID_PreviousScene
Definition MainFrame.h:251
@ ID_ToggleMaximize
Definition MainFrame.h:249
@ ID_SaveProject
Definition MainFrame.h:245
@ ID_ResetZoom
Definition MainFrame.h:252
@ ID_ParserConfig
Definition MainFrame.h:257
@ ID_MonitorTool
Definition MainFrame.h:261
@ ID_ResetUI
Definition MainFrame.h:253
@ ID_NextScene
Definition MainFrame.h:250
@ ID_OpenProject
Definition MainFrame.h:243
@ ID_Preferences
Definition MainFrame.h:256
@ ID_LogReplayTool
Definition MainFrame.h:262
@ ID_LoadXML
Definition MainFrame.h:237
@ ID_SaveAsXML
Definition MainFrame.h:239
@ ID_ToggleRightPanel
Definition MainFrame.h:267
@ ID_ToggleLeftPanel
Definition MainFrame.h:265
@ ID_CloseProject
Definition MainFrame.h:244
@ ID_SaveXML
Definition MainFrame.h:238
@ ID_ProjectSettings
Definition MainFrame.h:246
Scene implementation for behavior tree visualization.
Bottom dockable panel for logs and output.
Definition BottomPanel.h:45
Represents a BehaviorTree project containing multiple XML resources.
Represents a complete behavior tree data structure.
Represents a blackboard containing multiple entries.
Abstract interface for tree nodes that can be visualized.
Definition ITreeNode.h:31
Represents a node in a behavior tree structure.
Definition Node.h:20
Tracks pane proportions and applies them on AUI manager resize.
Left sidebar panel specialized for left-side functionality.
std::string m_currentTreeId
Definition MainFrame.h:222
void SyncSelection(EmberCore::ITreeNode *selectedNode)
virtual ~MainFrame()
Destructor - cleans up AUI manager and panels.
int CountTabGlobally(const wxString &tabName) const
void LogMessage(const wxString &message)
void UpdateTreeSelector()
bool m_isUpdatingFromHierarchy
Definition MainFrame.h:230
void OnSaveProject(wxCommandEvent &event)
void OnPreferences(wxCommandEvent &event)
MainPanel * m_scenePanel
Definition MainFrame.h:209
void OnToggleLeftPanel(wxCommandEvent &event)
bool IsActiveSceneBehaviorTree() const
void UpdatePropertiesTabReference(PropertiesTab *propertiesTab)
void OnPaint(wxPaintEvent &event)
void OnParserConfig(wxCommandEvent &event)
void NavigateToBlackboard(const std::string &bbId)
void OnCloseProject(wxCommandEvent &event)
std::shared_ptr< EmberCore::BehaviorTreeProject > GetActiveProject() const
void OnPreviousScene(wxCommandEvent &event)
wxDECLARE_EVENT_TABLE()
MainFrame(const wxString &title, const wxPoint &pos, const wxSize &size, long style=wxDEFAULT_FRAME_STYLE)
Construct the main frame.
void OnNewProject(wxCommandEvent &event)
void OpenProject()
void OnToggleMaximize(wxCommandEvent &event)
void RefreshPreferences()
BlackboardScene * m_blackboardScene
Definition MainFrame.h:221
void OpenTreeInNewScene(const std::string &treeId)
void CreateProjectOverviewScene()
void UpdateNavigatorTabReference(ForgeNavigatorTab *navigatorTab)
bool m_isUpdatingFromScene
Definition MainFrame.h:231
void OnSaveAsXML(wxCommandEvent &event)
void OnMonitorTool(wxCommandEvent &event)
void OnIdle(wxIdleEvent &event)
void RefreshHierarchyTree()
void OnToggleRightPanel(wxCommandEvent &event)
LeftSidePanel * m_leftPanel
Definition MainFrame.h:204
void CreateMenuAndStatusBar()
void OnHierarchySelectionChanged(EmberCore::ITreeNode *selectedNode)
wxAuiManager * GetAuiManager()
Definition MainFrame.h:111
void CenterOnNode(EmberCore::ITreeNode *node)
void ShowProjectSettings()
void OnOpenProject(wxCommandEvent &event)
RightSidePanel * m_rightPanel
Definition MainFrame.h:205
void OnFrameResize(wxSizeEvent &event)
void DoSaveXML(const wxString &filePath)
void OnPropertiesTabClosed()
void OnLogReplayTool(wxCommandEvent &event)
void OnResetZoom(wxCommandEvent &event)
void OnToggleBottomPanel(wxCommandEvent &event)
void LoadTreeIntoScene(const std::string &treeId)
void LoadXMLFile(const wxString &filePath, bool confirmOverride=false)
void CloseProject()
std::shared_ptr< EmberCore::BehaviorTreeProject > m_activeProject
Definition MainFrame.h:217
void OnNextScene(wxCommandEvent &event)
void OnAbout(wxCommandEvent &event)
wxToolBar * m_panelToggleToolbar
Definition MainFrame.h:210
void OnNavigatorTabClosed()
void OnSaveXML(wxCommandEvent &event)
BottomPanel * m_bottomPanel
Definition MainFrame.h:206
ForgeNavigatorTab * m_navigatorTab
Definition MainFrame.h:208
std::string m_mainTreeName
Definition MainFrame.h:223
void OnLoadXML(wxCommandEvent &event)
void OnSceneSelectionChanged(EmberCore::ITreeNode *selectedNode)
std::map< std::string, std::shared_ptr< EmberCore::BehaviorTree > > m_projectTrees
Definition MainFrame.h:218
void NewProject()
bool HasActiveProject() const
void OnEditorTool(wxCommandEvent &event)
const std::string & GetCurrentTreeId() const
Definition MainFrame.h:147
wxString m_currentFilePath
Definition MainFrame.h:213
bool m_treeModified
Definition MainFrame.h:214
void SaveProject()
void OnResetUI(wxCommandEvent &event)
PropertiesTab * m_propertiesTab
Definition MainFrame.h:207
void OnProjectSettings(wxCommandEvent &event)
void InitializeConfigurationMenu()
void UpdatePanelToggleButtons()
void CreatePanelLayout()
std::map< std::string, std::vector< std::string > > m_blackboardIncludesMap
Definition MainFrame.h:220
void InvalidateCanvasLayout()
std::map< std::string, std::shared_ptr< EmberCore::Blackboard > > m_projectBlackboards
Definition MainFrame.h:219
wxSize m_lastClientSize
Definition MainFrame.h:227
void RefreshMenuHotkeys()
std::shared_ptr< EmberCore::Node > GetSharedBehaviorTree() const
void RefreshCanvasVisualization()
void LoadXMLFileInNewScene(const wxString &filePath)
void OnExit(wxCommandEvent &event)
void CreatePanelToggleToolbar()
EmberUI::ProportionalLayout m_layout
Definition MainFrame.h:226
wxAuiManager * m_auiManager
Definition MainFrame.h:203
Central panel for managing and displaying behavior tree scenes.
Definition MainPanel.h:43
Right sidebar panel specialized for right-side functionality.
Main types header for EmberCore.