Fork for IVI: mesa fixing
[profile/ivi/uifw.git] / src / ui / scenes / FUiScenes_SceneManagerImpl.h
1 //
2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
4 //
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
8 //
9 //     http://floralicense.org/license/
10 //
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.
16 //
17 /**
18  * @file        FUiScenes_SceneManagerImpl.h
19  * @brief       This is the header file of the _SceneManagerImpl class.
20  *
21  * This header file contains the declarations of the _SceneManagerImpl class.
22  */
23
24 #ifndef _FUI_SCENES_INTERNAL_SCENE_MANAGER_IMPL_H_
25 #define _FUI_SCENES_INTERNAL_SCENE_MANAGER_IMPL_H_
26
27
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"
42
43
44 namespace Tizen { namespace Ui { namespace Scenes
45 {
46
47 class SceneTransition;
48
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
54 {
55 public:
56         _SceneManagerImpl(void);
57         virtual ~_SceneManagerImpl(void);
58         result Construct(void);
59
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;
85
86         //
87         // Gets the implementation.
88         //
89         // @return              The implementation
90         // @param[in]   The interface instance pointer
91         // @since       2.0
92         //
93         static _SceneManagerImpl* GetInstance(SceneManager& pSceneManager);
94
95         //
96         // Gets the implementation.
97         //
98         // @return              The implementation
99         // @param[in]   The interface instance pointer
100         // @since       2.0
101         //
102         static const _SceneManagerImpl* GetInstance(const SceneManager& pSceneManager);
103
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);
115
116         // Internal operations
117         Scene* GetScene(SceneId& sceneId);
118         Tizen::Base::Collection::IListT<Scene*>* GetLiveSceneN(void) const;
119
120 private:
121         _SceneManagerImpl(const Scene& rhs);
122         _SceneManagerImpl& operator =(const Scene& rhs);
123
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);
137
138         void UpdateCurrentScene(Scene* pScene);
139         result AddHistory(const SceneId& sceneId);
140
141         // Panel Scene transition assister
142         void SwitchToPanel(const Tizen::Base::String& formId, Tizen::Ui::Controls::Panel* pPanel, bool useAnimator = false);
143
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);
171
172 private:
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;
180
181         IFormFactory* __pFormFactory;
182         IPanelFactory* __pPanelFactory;
183         ISceneTransitionPolicyProvider* __pPolicyProvider;
184
185         struct _AnimationDescription
186         {
187                 Tizen::Ui::Animations::FrameAnimatorFormTransitionAnimation animationType;
188                 long duration;
189                 Tizen::Ui::Animations::AnimationInterpolatorType interpolatorType;
190         };
191         _AnimationDescription __animationDescriptions[Tizen::Ui::Animations::FRAME_ANIMATOR_FORM_TRANSITION_ANIMATION_MAX];
192
193         class _SceneDescription
194         {
195         public:
196                 _SceneDescription(const Tizen::Base::String& descriptionFormId, const Tizen::Base::String& descriptionPanelId);
197                 const Tizen::Base::String formId;
198                 const Tizen::Base::String panelId;
199         };
200         Tizen::Base::Collection::HashMapT <Tizen::Base::String, _SceneDescription*> __sceneMap;
201         Tizen::Base::Collection::HashMapT <Tizen::Base::String, SceneTransition*> __transitionMap;
202
203         _SceneControlEvent      __sceneControlEvent;
204         SceneId __destroyReservedScene;
205         Tizen::Ui::Controls::Frame* __pCorrespondFrame;
206         Tizen::Ui::_ControlHandle __correspondFrameControlHandle;
207
208 }; // _SceneManagerImpl
209 } } } // Tizen::Ui::Scenes
210
211 #endif // _FUI_SCENES_INTERNAL_SCENE_MANAGER_IMPL_H_