2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
5 // Licensed under the Flora License, Version 1.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
9 // http://floralicense.org/license/
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an AS IS BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
18 * @file FUiScenes_SceneManagerImpl.h
19 * @brief This is the header file of the _SceneManagerImpl class.
21 * This header file contains the declarations of the _SceneManagerImpl class.
24 #ifndef _FUI_SCENES_INTERNAL_SCENE_MANAGER_IMPL_H_
25 #define _FUI_SCENES_INTERNAL_SCENE_MANAGER_IMPL_H_
28 #include <libxml/parser.h>
29 #include <FBaseTypes.h>
30 #include <FBaseColIList.h>
31 #include <FBaseColLinkedListT.h>
32 #include <FBaseColHashMapT.h>
33 #include <FBaseColMultiHashMapT.h>
34 #include <FBaseString.h>
35 #include <FUi_Types.h>
36 #include <FUiAnimIFrameAnimatorEventListener.h>
37 #include <FUiAnimIControlAnimatorEventListener.h>
38 #include <FUiScenesTypes.h>
39 #include <FUiScenesSceneManager.h>
40 #include "FUiScenes_ISceneControlEventListener.h"
41 #include "FUiScenes_SceneControlEvent.h"
44 namespace Tizen { namespace Ui { namespace Scenes
47 class SceneTransition;
49 class _SceneManagerImpl
50 : public Tizen::Base::Object
51 , virtual public Tizen::Ui::Animations::IFrameAnimatorEventListener
52 , virtual public Tizen::Ui::Animations::IControlAnimatorEventListener
53 , virtual public _ISceneControlEventListener
56 _SceneManagerImpl(void);
57 virtual ~_SceneManagerImpl(void);
58 result Construct(void);
60 result RegisterFormFactory(const IFormFactory& formFactory);
61 result RegisterPanelFactory(const IPanelFactory& panelFactory);
62 result RegisterScene(const SceneId& sceneId, const Tizen::Base::String& formId, const Tizen::Base::String& panelId);
63 result RegisterScene(const Tizen::Base::String& resourceId);
64 result UnregisterScene(const SceneId& sceneId);
65 result AddSceneManagerEventListener(ISceneManagerEventListener& sceneManagerEventListener);
66 result RemoveSceneManagerEventListener(ISceneManagerEventListener& sceneManagerEventListener);
67 result AddSceneEventListener(const SceneId& sceneId, ISceneEventListener& sceneEventListener);
68 result RemoveSceneEventListener(const SceneId& sceneId, ISceneEventListener& sceneEventListener);
69 result SetSceneAnimationProvider(const SceneId& sceneId, ISceneAnimationProvider* pSceneAnimationProvider);
70 result SetSceneTransitionPolicyProvider(ISceneTransitionPolicyProvider* pSceneTransitionPolicyProvider);
71 result SetFormTransitionAnimationDefaultValues(SceneTransitionAnimationType animationType, long duration,
72 Tizen::Ui::Animations::AnimationInterpolatorType interpolatorType);
73 result GoForward(const ForwardSceneTransition& sceneTransition, const Tizen::Base::Collection::IList* pArgs = null);
74 result GoForward(const SceneTransitionId& transitionId, const Tizen::Base::Collection::IList* pArgs = null);
75 result GoBackward(const BackwardSceneTransition& sceneTransition, const Tizen::Base::Collection::IList* pArgs = null);
76 result GoBackward(const SceneTransitionId& transitionId, const Tizen::Base::Collection::IList* pArgs = null);
77 Scene* GetCurrentScene(void) const;
78 SceneId GetCurrentSceneId(void) const;
79 bool IsSceneAlive(const SceneId& sceneId) const;
80 result DestroyScene(const SceneId& sceneId);
81 result BringCurrentSceneToTop(void);
82 result ClearSceneHistory(void);
83 result AddToSceneHistory(const SceneId& sceneId);
84 Tizen::Base::Collection::IListT<SceneId>* GetSceneHistoryN(void) const;
87 // Gets the implementation.
89 // @return The implementation
90 // @param[in] The interface instance pointer
93 static _SceneManagerImpl* GetInstance(SceneManager& pSceneManager);
96 // Gets the implementation.
98 // @return The implementation
99 // @param[in] The interface instance pointer
102 static const _SceneManagerImpl* GetInstance(const SceneManager& pSceneManager);
104 // Event handelers to asynchronous destroy the Scene.
105 virtual void OnFormTransitionAnimationFinished(Tizen::Ui::Animations::FrameAnimator &source, Tizen::Ui::Controls::Frame &frame,
106 Tizen::Ui::Controls::Form &form1, Tizen::Ui::Controls::Form &form2);
107 virtual void OnFormTransitionAnimationStarted(Tizen::Ui::Animations::FrameAnimator &source, Tizen::Ui::Controls::Frame &frame,
108 Tizen::Ui::Controls::Form &form1, Tizen::Ui::Controls::Form &form2);
109 virtual void OnFormTransitionAnimationStopped(Tizen::Ui::Animations::FrameAnimator &source, Tizen::Ui::Controls::Frame &frame,
110 Tizen::Ui::Controls::Form &form1, Tizen::Ui::Controls::Form &form2);
111 virtual void OnControlAnimationFinished(Tizen::Ui::Animations::ControlAnimator &source, Tizen::Ui::Control &control);
112 virtual void OnControlAnimationStarted(Tizen::Ui::Animations::ControlAnimator &source, Tizen::Ui::Control &control);
113 virtual void OnControlAnimationStopped(Tizen::Ui::Animations::ControlAnimator &source, Tizen::Ui::Control &control);
114 virtual void OnSceneControlEventReceived(_SceneControlEventArg::SceneControlEventType eventType, const SceneId& sceneId);
116 // Internal operations
117 Scene* GetScene(SceneId& sceneId);
118 Tizen::Base::Collection::IListT<Scene*>* GetLiveSceneN(void) const;
121 _SceneManagerImpl(const Scene& rhs);
122 _SceneManagerImpl& operator =(const Scene& rhs);
124 result GotoScene(bool forward, const SceneId& sceneId, SceneTransitionAnimationType animationType,
125 SceneHistoryOption historyOption, SceneDestroyOption destroyOption,
126 const Tizen::Base::Collection::IList* pArgs);
127 // Container query set
128 Scene* GetSceneFromContainer(const SceneId& sceneId) const;
129 Tizen::Ui::Controls::Form* GetFormFromContainer(const Tizen::Base::String& formId);
130 // Add to container set
131 void AddSceneToContainer(const SceneId& sceneId, Scene* pScene);
132 void RemoveSceneFromContainer(const SceneId& sceneId);
133 void AddFormToContainer(const Tizen::Base::String& formId, Tizen::Ui::Controls::Form* pForm);
134 void RemoveFormFromFormContainer(const Tizen::Base::String& formId);
135 void AddPanelToPanelContainer(Scene* pScene);
136 void RemovePanelFromPanelContainer(Scene* pScene);
138 void UpdateCurrentScene(Scene* pScene);
139 result AddHistory(const SceneId& sceneId);
141 // Panel Scene transition assister
142 void SwitchToPanel(const Tizen::Base::String& formId, Tizen::Ui::Controls::Panel* pPanel, bool useAnimator = false);
144 void AddControlToFrame(Tizen::Ui::Controls::Form& form, bool useAnimator = false);
145 void RemoveControlFromFrame(Tizen::Ui::Controls::Form& form);
146 result SetCurrentForm(Tizen::Ui::Controls::Form& form, bool useAnimator = false);
147 Tizen::Ui::Controls::Form* GetCurrentForm(void);
148 void AddControlToForm(Tizen::Ui::Controls::Form& baseForm, const Tizen::Ui::Controls::Panel& panel);
149 void RemoveControlFromForm(Tizen::Ui::Controls::Form& baseForm, const Tizen::Ui::Controls::Panel& panel);
150 void SetShowState(Tizen::Ui::Controls::Panel& targetPanel, bool state);
151 void DrawForm(Tizen::Ui::Controls::Form& form);
152 // Listener, Strategy - calling sub method.
153 bool CallListenerOnSceneTransitionStarted(const SceneId& currentSceneId, const SceneId& nextSceneId);
154 bool CallListenerOnSceneTransitionCompleted(const SceneId& previousSceneId, const SceneId& currentSceneId);
155 bool CallListenerPrepareAnimation(Tizen::Ui::Scenes::Scene& scene, const SceneId& sceneId, Tizen::Base::Collection::IList* pArgs,
156 SceneTransitionAnimationType type, bool formTransition);
157 bool CallListenerOnSceneActivatedN(Tizen::Ui::Scenes::Scene& scene, const SceneId& previousSceneId,
158 const SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs);
159 bool CallListenerOnSceneDeactivated(Tizen::Ui::Scenes::Scene& scene, const SceneId& currentSceneId,
160 const SceneId& nextSceneId);
161 SceneId CallStretegyGetNextScene(const SceneId& currentSceneId, const Tizen::Base::Collection::IList* pArgs);
162 void DestroySceneAsync(const SceneId& sceneId);
163 void ReserveDestroyingScene(const SceneId& sceneId);
164 void DestroyReservedScene(void);
165 void DestroySiblingPanelScene(const SceneId& sceneId);
166 Tizen::Ui::Controls::Frame* GetFrame(void);
167 bool IsAnimationCompleted(void);
168 result GetSceneTransition(const SceneTransitionId& transitionId, SceneTransition& sceneTransition) const;
169 result RegisterScene(xmlNodePtr pNode);
170 result RegisterSceneTransition(xmlNodePtr pNode);
173 SceneId __currentSceneId;
174 Scene* __pCurrentScene;
175 Tizen::Base::Collection::LinkedListT <ISceneManagerEventListener*> __sceneManagerEventListenerList;
176 Tizen::Base::Collection::HashMapT <SceneId, Scene*> __sceneContainer;
177 Tizen::Base::Collection::HashMapT <Tizen::Base::String, Tizen::Ui::Controls::Form*> __formContainer;
178 Tizen::Base::Collection::MultiHashMapT <Tizen::Base::String, Scene*> __formToPanelMultiMap;
179 Tizen::Base::Collection::LinkedListT<SceneId> __sceneHistory;
181 IFormFactory* __pFormFactory;
182 IPanelFactory* __pPanelFactory;
183 ISceneTransitionPolicyProvider* __pPolicyProvider;
185 struct _AnimationDescription
187 Tizen::Ui::Animations::FrameAnimatorFormTransitionAnimation animationType;
189 Tizen::Ui::Animations::AnimationInterpolatorType interpolatorType;
191 _AnimationDescription __animationDescriptions[Tizen::Ui::Animations::FRAME_ANIMATOR_FORM_TRANSITION_ANIMATION_MAX];
193 class _SceneDescription
196 _SceneDescription(const Tizen::Base::String& descriptionFormId, const Tizen::Base::String& descriptionPanelId);
197 const Tizen::Base::String formId;
198 const Tizen::Base::String panelId;
200 Tizen::Base::Collection::HashMapT <Tizen::Base::String, _SceneDescription*> __sceneMap;
201 Tizen::Base::Collection::HashMapT <Tizen::Base::String, SceneTransition*> __transitionMap;
203 _SceneControlEvent __sceneControlEvent;
204 SceneId __destroyReservedScene;
205 Tizen::Ui::Controls::Frame* __pCorrespondFrame;
206 Tizen::Ui::_ControlHandle __correspondFrameControlHandle;
208 }; // _SceneManagerImpl
209 } } } // Tizen::Ui::Scenes
211 #endif // _FUI_SCENES_INTERNAL_SCENE_MANAGER_IMPL_H_