13 : wxPanel(parent,
id, pos, size, style), m_maxInactiveScenes(3), m_enableTransitions(true), m_sizer(
nullptr) {
15 m_sizer =
new wxBoxSizer(wxVERTICAL);
22 if (!scene || name.IsEmpty() ||
HasScene(name)) {
27 wxPanel *scenePanel = scene->GetPanel();
36 m_sizer->Add(scenePanel, 1, wxEXPAND);
39 SceneInfo sceneInfo(std::move(scene), name);
41 m_scenes.emplace(name, std::move(sceneInfo));
57 if (it->second.scene) {
58 it->second.scene->OnDeactivated();
67 wxPanel *scenePanel = it->second.scene->GetPanel();
70 scenePanel->Destroy();
82 std::vector<wxString> sceneNames;
84 sceneNames.push_back(pair.first);
88 for (
const auto &name : sceneNames) {
96 return it->second.scene.get();
111 std::vector<wxString> names;
113 names.push_back(pair.first);
123 it->second.description = description;
130 return it->second.description;
132 return wxEmptyString;
138 it->second.state = state;
145 return it->second.state;
153 it->second.persistent = persistent;
160 return it->second.persistent;
173 if (!previousScene.IsEmpty()) {
206 if (pair.second.scene.get() == scene) {
230 if (pair.second.scene) {
231 pair.second.scene->Refresh();
259 it->second.userData = userData;
266 return it->second.userData;
274 wxPanel *scenePanel = scene->
GetPanel();
276 scenePanel->SetSize(size);
284 wxPanel *scenePanel = scene->
GetPanel();
286 return scenePanel->GetSize();
289 return wxDefaultSize;
295 wxPanel *scenePanel = scene->
GetPanel();
297 scenePanel->SetSize(GetClientSize());
361 wxPanel *scenePanel = scene->
GetPanel();
371 wxPanel *scenePanel = scene->
GetPanel();
379 return !name.IsEmpty() && name.Find(
'/') == wxNOT_FOUND;
419 switch (transition) {
BehaviorTreeProjectDialog::OnProjectNameChanged BehaviorTreeProjectDialog::OnRemoveFiles wxEND_EVENT_TABLE() BehaviorTreeProjectDialog
Container for managing multiple scenes.
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 RefreshActiveScene()
void SetSceneDeactivatedCallback(SceneDeactivatedCallback callback)
int GetMaxInactiveScenes() const
void NotifySceneDestroyed(const wxString &name)
void FitSceneToContainer(const wxString &name)
void SetSceneState(const wxString &name, SceneState state)
IScene * GetActiveScene() const
bool SerializeState(wxString &data) const
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
virtual ~SceneContainer()
int GetSceneCount() const
bool SwitchToScene(const wxString &name, TransitionType transition=TransitionType::Immediate)
void SetSceneActivatedCallback(SceneActivatedCallback callback)
void SuspendInactiveScenes()
bool DeserializeState(const wxString &data)
SceneState GetSceneState(const wxString &name) const
bool HasScene(const wxString &name) const
IScene * GetScene(const wxString &name) const
wxString GetActiveSceneName() 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)
void FitActiveSceneToContainer()
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
wxString m_activeSceneName
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).
virtual void OnActivated()
Called when the scene becomes active.
virtual void Refresh()
Refreshes the scene content.
virtual wxPanel * GetPanel()=0
Returns the wxPanel used as the scene content.
virtual void OnDeactivated()
Called when the scene becomes inactive.
wxBEGIN_EVENT_TABLE(SceneContainer, wxPanel) EVT_SIZE(SceneContainer
PerformancePanel::OnUpdateTimer EVT_PAINT(PerformancePanel::OnPaint) EVT_SIZE(PerformancePanel