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 <FUiControl.h>
37 #include <FUiAnimIFrameAnimatorEventListener.h>
38 #include <FUiAnimIAnimationTransactionEventListener.h>
39 #include <FUiScenesTypes.h>
40 #include <FUiScenesSceneManager.h>
41 #include "FUiScenes_ISceneControlEventListener.h"
42 #include "FUiScenes_SceneControlEvent.h"
45 namespace Tizen { namespace Ui { namespace Scenes
48 class SceneTransition;
50 class _SceneManagerImpl
51 : public Tizen::Base::Object
52 , virtual public Tizen::Ui::Animations::IFrameAnimatorEventListener
53 , virtual public Tizen::Ui::Animations::IAnimationTransactionEventListener
54 , virtual public _ISceneControlEventListener
57 _SceneManagerImpl(void);
58 virtual ~_SceneManagerImpl(void);
59 result Construct(void);
61 result RegisterFormFactory(const IFormFactory& formFactory);
62 result RegisterPanelFactory(const IPanelFactory& panelFactory);
63 result RegisterScene(const SceneId& sceneId, const Tizen::Base::String& formId, const Tizen::Base::String& panelId);
64 result RegisterScene(const Tizen::Base::String& resourceId);
65 result UnregisterScene(const SceneId& sceneId);
66 result AddSceneManagerEventListener(ISceneManagerEventListener& sceneManagerEventListener);
67 result RemoveSceneManagerEventListener(ISceneManagerEventListener& sceneManagerEventListener);
68 result AddSceneEventListener(const SceneId& sceneId, ISceneEventListener& sceneEventListener);
69 result RemoveSceneEventListener(const SceneId& sceneId, ISceneEventListener& sceneEventListener);
70 result SetSceneAnimationProvider(const SceneId& sceneId, ISceneAnimationProvider* pSceneAnimationProvider);
71 result SetSceneTransitionPolicyProvider(ISceneTransitionPolicyProvider* pSceneTransitionPolicyProvider);
72 result SetFormTransitionAnimationDefaultValues(SceneTransitionAnimationType animationType, long duration,
73 Tizen::Ui::Animations::AnimationInterpolatorType interpolatorType);
74 result GoForward(const ForwardSceneTransition& sceneTransition, const Tizen::Base::Collection::IList* pArgs = null);
75 result GoForward(const SceneTransitionId& transitionId, const Tizen::Base::Collection::IList* pArgs = null);
76 result GoBackward(const BackwardSceneTransition& sceneTransition, const Tizen::Base::Collection::IList* pArgs = null);
77 result GoBackward(const SceneTransitionId& transitionId, const Tizen::Base::Collection::IList* pArgs = null);
78 Scene* GetCurrentScene(void) const;
79 SceneId GetCurrentSceneId(void) const;
80 bool IsSceneAlive(const SceneId& sceneId) const;
81 result DestroyScene(const SceneId& sceneId);
82 result BringCurrentSceneToTop(void);
83 result ClearSceneHistory(void);
84 result AddToSceneHistory(const SceneId& sceneId);
85 Tizen::Base::Collection::IListT<SceneId>* GetSceneHistoryN(void) const;
88 // Gets the implementation.
90 // @return The implementation
91 // @param[in] The interface instance pointer
94 static _SceneManagerImpl* GetInstance(SceneManager& pSceneManager);
97 // Gets the implementation.
99 // @return The implementation
100 // @param[in] The interface instance pointer
103 static const _SceneManagerImpl* GetInstance(const SceneManager& pSceneManager);
105 // Event handelers to asynchronous destroy the Scene.
106 virtual void OnFormTransitionAnimationFinished(Tizen::Ui::Animations::FrameAnimator &source, Tizen::Ui::Controls::Frame &frame,
107 Tizen::Ui::Controls::Form &form1, Tizen::Ui::Controls::Form &form2);
108 virtual void OnFormTransitionAnimationStarted(Tizen::Ui::Animations::FrameAnimator &source, Tizen::Ui::Controls::Frame &frame,
109 Tizen::Ui::Controls::Form &form1, Tizen::Ui::Controls::Form &form2);
110 virtual void OnFormTransitionAnimationStopped(Tizen::Ui::Animations::FrameAnimator &source, Tizen::Ui::Controls::Frame &frame,
111 Tizen::Ui::Controls::Form &form1, Tizen::Ui::Controls::Form &form2);
112 virtual void OnAnimationTransactionFinished(int transactionId);
113 virtual void OnAnimationTransactionStarted(int transactionId);
114 virtual void OnAnimationTransactionStopped(int transactionId);
115 virtual void OnSceneControlEventReceived(_SceneControlEventArg::SceneControlEventType eventType, const SceneId& sceneId);
117 // Internal operations
118 Scene* GetScene(SceneId& sceneId);
119 Tizen::Base::Collection::IListT<Scene*>* GetLiveSceneN(void) const;
122 _SceneManagerImpl(const Scene& rhs);
123 _SceneManagerImpl& operator =(const Scene& rhs);
125 result GotoScene(bool forward, const SceneId& sceneId, SceneTransitionAnimationType animationType,
126 SceneHistoryOption historyOption, SceneDestroyOption destroyOption,
127 const Tizen::Base::Collection::IList* pArgs);
128 // Container query set
129 Scene* GetSceneFromContainer(const SceneId& sceneId) const;
130 Tizen::Ui::Controls::Form* GetFormFromContainer(const Tizen::Base::String& formId);
131 // Add to container set
132 void AddSceneToContainer(const SceneId& sceneId, Scene* pScene);
133 void RemoveSceneFromContainer(const SceneId& sceneId);
134 void AddFormToContainer(const Tizen::Base::String& formId, Tizen::Ui::Controls::Form* pForm);
135 void RemoveFormFromFormContainer(const Tizen::Base::String& formId);
136 void AddPanelToPanelContainer(Scene* pScene);
137 void RemovePanelFromPanelContainer(Scene* pScene);
139 void UpdateCurrentScene(Scene* pScene);
140 result AddHistory(const SceneId& sceneId);
142 // Panel Scene transition assister
143 void SwitchToPanel(const Tizen::Base::String& formId, Tizen::Ui::Controls::Panel* pPanel, bool useAnimator = false);
145 void AddControlToFrame(Tizen::Ui::Controls::Form& form, bool useAnimator = false);
146 void RemoveControlFromFrame(Tizen::Ui::Controls::Form& form);
147 result SetCurrentForm(Tizen::Ui::Controls::Form& form, bool useAnimator = false);
148 Tizen::Ui::Controls::Form* GetCurrentForm(void);
149 void AddControlToForm(Tizen::Ui::Controls::Form& baseForm, const Tizen::Ui::Controls::Panel& panel);
150 void RemoveControlFromForm(Tizen::Ui::Controls::Form& baseForm, const Tizen::Ui::Controls::Panel& panel);
151 void SetShowState(Tizen::Ui::Controls::Panel& targetPanel, bool state);
152 void DrawForm(Tizen::Ui::Controls::Form& form);
153 // Listener, Strategy - calling sub method.
154 bool CallListenerOnSceneTransitionStarted(const SceneId& currentSceneId, const SceneId& nextSceneId);
155 bool CallListenerOnSceneTransitionCompleted(const SceneId& previousSceneId, const SceneId& currentSceneId);
156 bool CallListenerPrepareAnimation(Tizen::Ui::Scenes::Scene& scene, const SceneId& sceneId, Tizen::Base::Collection::IList* pArgs,
157 SceneTransitionAnimationType type, bool formTransition);
158 bool CallListenerOnSceneActivatedN(Tizen::Ui::Scenes::Scene& scene, const SceneId& previousSceneId,
159 const SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs);
160 bool CallListenerOnSceneDeactivated(Tizen::Ui::Scenes::Scene& scene, const SceneId& currentSceneId,
161 const SceneId& nextSceneId);
162 SceneId CallStretegyGetNextScene(const SceneId& currentSceneId, const Tizen::Base::Collection::IList* pArgs);
163 void DestroySceneAsync(const SceneId& sceneId);
164 void ReserveDestroyingScene(const SceneId& sceneId);
165 void DestroyReservedScene(void);
166 void DestroySiblingPanelScene(const SceneId& sceneId);
167 Tizen::Ui::Controls::Frame* GetFrame(void);
168 bool IsAnimationCompleted(void);
169 result SetInputEventEnableState(Tizen::Ui::Control& control, bool enableState);
170 result GetSceneTransition(const SceneTransitionId& transitionId, SceneTransition& sceneTransition) const;
171 result RegisterScene(xmlNodePtr pNode);
172 result RegisterSceneTransition(xmlNodePtr pNode);
173 result StopAllAnimations(void);
176 SceneId __currentSceneId;
177 Scene* __pCurrentScene;
178 Tizen::Base::Collection::LinkedListT <ISceneManagerEventListener*> __sceneManagerEventListenerList;
179 Tizen::Base::Collection::HashMapT <SceneId, Scene*> __sceneContainer;
180 Tizen::Base::Collection::HashMapT <Tizen::Base::String, Tizen::Ui::Controls::Form*> __formContainer;
181 Tizen::Base::Collection::MultiHashMapT <Tizen::Base::String, Scene*> __formToPanelMultiMap;
182 Tizen::Base::Collection::LinkedListT<SceneId> __sceneHistory;
184 IFormFactory* __pFormFactory;
185 IPanelFactory* __pPanelFactory;
186 ISceneTransitionPolicyProvider* __pPolicyProvider;
188 struct _AnimationDescription
190 Tizen::Ui::Animations::FrameAnimatorFormTransitionAnimation animationType;
192 Tizen::Ui::Animations::AnimationInterpolatorType interpolatorType;
194 _AnimationDescription __animationDescriptions[Tizen::Ui::Animations::FRAME_ANIMATOR_FORM_TRANSITION_ANIMATION_MAX];
196 class _SceneDescription
199 _SceneDescription(const Tizen::Base::String& descriptionFormId, const Tizen::Base::String& descriptionPanelId);
200 const Tizen::Base::String formId;
201 const Tizen::Base::String panelId;
203 Tizen::Base::Collection::HashMapT <Tizen::Base::String, _SceneDescription*> __sceneMap;
204 Tizen::Base::Collection::HashMapT <Tizen::Base::String, SceneTransition*> __transitionMap;
206 _SceneControlEvent __sceneControlEvent;
207 SceneId __destroyReservedScene;
208 Tizen::Ui::Controls::Frame* __pCorrespondFrame;
209 Tizen::Ui::_ControlHandle __correspondFrameControlHandle;
210 bool __sceneTransitionProgressing;
211 Tizen::Base::Runtime::Mutex __sceneTransitionMutex;
212 Tizen::Ui::Controls::Form* __pDisabledForm;
214 }; // _SceneManagerImpl
215 } } } // Tizen::Ui::Scenes
217 #endif // _FUI_SCENES_INTERNAL_SCENE_MANAGER_IMPL_H_