Ember
Loading...
Searching...
No Matches
SceneContainer.h
Go to the documentation of this file.
1#pragma once
2
3#include "Interfaces/IScene.h"
4#include <functional>
5#include <memory>
6#include <unordered_map>
7#include <vector>
8#include <wx/panel.h>
9#include <wx/wx.h>
10
11namespace EmberForge {
12namespace ui {
13
44class SceneContainer : public wxPanel {
45 public:
46 // Scene events
47 using SceneActivatedCallback = std::function<void(IScene *scene, const wxString &sceneName)>;
48 using SceneDeactivatedCallback = std::function<void(IScene *scene, const wxString &sceneName)>;
49 using SceneCreatedCallback = std::function<void(IScene *scene, const wxString &sceneName)>;
50 using SceneDestroyedCallback = std::function<void(IScene *scene, const wxString &sceneName)>;
51
52 // Scene state
54
55 // Scene transition types
57
58 // Scene info structure
59 struct SceneInfo {
60 std::unique_ptr<IScene> scene;
61 wxString name;
62 wxString description;
65 void *userData;
66
67 SceneInfo(std::unique_ptr<IScene> s, const wxString &name)
68 : scene(std::move(s)), name(name), state(SceneState::Inactive), persistent(false), userData(nullptr) {}
69 };
70
71 public:
72 SceneContainer(wxWindow *parent, wxWindowID id = wxID_ANY, const wxPoint &pos = wxDefaultPosition,
73 const wxSize &size = wxDefaultSize, long style = wxTAB_TRAVERSAL);
74 virtual ~SceneContainer();
75
76 // Scene management
77 bool AddScene(std::unique_ptr<IScene> scene, const wxString &name, const wxString &description = wxEmptyString);
78 bool RemoveScene(const wxString &name);
79 void RemoveAllScenes();
80
81 // Scene access
82 IScene *GetScene(const wxString &name) const;
83 IScene *GetActiveScene() const;
84 wxString GetActiveSceneName() const;
85 std::vector<wxString> GetSceneNames() const;
86 int GetSceneCount() const;
87
88 // Scene properties
89 void SetSceneDescription(const wxString &name, const wxString &description);
90 wxString GetSceneDescription(const wxString &name) const;
91 void SetSceneState(const wxString &name, SceneState state);
92 SceneState GetSceneState(const wxString &name) const;
93 void SetScenePersistent(const wxString &name, bool persistent);
94 bool IsScenePersistent(const wxString &name) const;
95
96 // Scene navigation
97 bool SwitchToScene(const wxString &name, TransitionType transition = TransitionType::Immediate);
99 bool HasScene(const wxString &name) const;
100
101 // Scene lifecycle
102 void RefreshScene(const wxString &name);
103 void RefreshActiveScene();
104 void RefreshAllScenes();
105 bool CanSwitchScene(const wxString &name);
106
107 // Event callbacks
112
113 // Utility
114 void SetSceneUserData(const wxString &name, void *userData);
115 void *GetSceneUserData(const wxString &name) const;
116
117 // Layout management
118 void SetSceneSize(const wxString &name, const wxSize &size);
119 wxSize GetSceneSize(const wxString &name) const;
120 void FitSceneToContainer(const wxString &name);
122
123 // Serialization
124 bool SerializeState(wxString &data) const;
125 bool DeserializeState(const wxString &data);
126
127 // Performance
129 void ResumeAllScenes();
130 void SetMaxInactiveScenes(int maxScenes);
131 int GetMaxInactiveScenes() const;
132
133 protected:
134 // Event handlers
135 void OnSize(wxSizeEvent &event);
136 void OnPaint(wxPaintEvent &event);
137
138 // Helper methods
139 void UpdateSceneLayout();
140 void ShowScene(const wxString &name);
141 void HideScene(const wxString &name);
142 bool ValidateSceneName(const wxString &name) const;
143 void NotifySceneActivated(const wxString &name);
144 void NotifySceneDeactivated(const wxString &name);
145 void NotifySceneCreated(const wxString &name);
146 void NotifySceneDestroyed(const wxString &name);
147
148 // Transition effects
149 void PerformTransition(const wxString &fromScene, const wxString &toScene, TransitionType transition);
150 void FadeTransition(const wxString &fromScene, const wxString &toScene);
151 void SlideTransition(const wxString &fromScene, const wxString &toScene);
152
153 private:
154 std::unordered_map<wxString, SceneInfo> m_scenes;
155
156 // Event callbacks
161
162 // State
166
167 // Layout
168 wxBoxSizer *m_sizer;
169
170 DECLARE_EVENT_TABLE()
171};
172
173} // namespace ui
174} // namespace EmberForge
std::function< void(IScene *scene, const wxString &sceneName)> SceneCreatedCallback
void HideScene(const wxString &name)
void OnPaint(wxPaintEvent &event)
wxSize GetSceneSize(const wxString &name) const
void * GetSceneUserData(const wxString &name) const
SceneCreatedCallback m_sceneCreatedCallback
std::function< void(IScene *scene, const wxString &sceneName)> SceneDestroyedCallback
void SetSceneDeactivatedCallback(SceneDeactivatedCallback callback)
void NotifySceneDestroyed(const wxString &name)
void FitSceneToContainer(const wxString &name)
void SetSceneState(const wxString &name, SceneState state)
bool SerializeState(wxString &data) const
SceneContainer(wxWindow *parent, wxWindowID id=wxID_ANY, const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxDefaultSize, long style=wxTAB_TRAVERSAL)
void SetMaxInactiveScenes(int maxScenes)
void SetSceneSize(const wxString &name, const wxSize &size)
SceneDeactivatedCallback m_sceneDeactivatedCallback
void OnSize(wxSizeEvent &event)
void NotifySceneCreated(const wxString &name)
void ShowScene(const wxString &name)
void SetSceneUserData(const wxString &name, void *userData)
SceneDestroyedCallback m_sceneDestroyedCallback
bool SwitchToScene(const wxString &name, TransitionType transition=TransitionType::Immediate)
void SetSceneActivatedCallback(SceneActivatedCallback callback)
bool DeserializeState(const wxString &data)
SceneState GetSceneState(const wxString &name) const
bool HasScene(const wxString &name) const
IScene * GetScene(const wxString &name) const
void SlideTransition(const wxString &fromScene, const wxString &toScene)
bool RemoveScene(const wxString &name)
void FadeTransition(const wxString &fromScene, const wxString &toScene)
wxString GetSceneDescription(const wxString &name) const
bool CanSwitchScene(const wxString &name)
std::unordered_map< wxString, SceneInfo > m_scenes
void NotifySceneDeactivated(const wxString &name)
std::function< void(IScene *scene, const wxString &sceneName)> SceneActivatedCallback
void SetSceneDestroyedCallback(SceneDestroyedCallback callback)
void SetSceneDescription(const wxString &name, const wxString &description)
SceneActivatedCallback m_sceneActivatedCallback
void PerformTransition(const wxString &fromScene, const wxString &toScene, TransitionType transition)
void RefreshScene(const wxString &name)
void SetScenePersistent(const wxString &name, bool persistent)
bool ValidateSceneName(const wxString &name) const
void SetSceneCreatedCallback(SceneCreatedCallback callback)
bool AddScene(std::unique_ptr< IScene > scene, const wxString &name, const wxString &description=wxEmptyString)
bool IsScenePersistent(const wxString &name) const
std::function< void(IScene *scene, const wxString &sceneName)> SceneDeactivatedCallback
std::vector< wxString > GetSceneNames() const
void NotifySceneActivated(const wxString &name)
Interface for scene-based UI components (e.g., views or screens).
Definition IScene.h:7
SceneInfo(std::unique_ptr< IScene > s, const wxString &name)