You.i Engine
YiScreenTransitionManager.h
Go to the documentation of this file.
1 // © You i Labs Inc. 2000-2017. All rights reserved.
2 #ifndef _YI_SCREEN_TRANSITION_MANAGER_H_
3 #define _YI_SCREEN_TRANSITION_MANAGER_H_
4 
6 
8 #include "signal/YiSignal.h"
10 #include "utility/YiBundle.h"
11 #include "view/YiViewProperty.h"
12 
15 
20 
59 {
60 public:
61 
68  {
71 
73  ScreenTransitionBundle(CYIAbstractScreenViewController *pScreenController, const CYIBundle &screenBundle);
75 
77  };
78 
83  {
84 
85  public:
88 
94  virtual void onTransitionStart(CYIScreenTransitionManager *pSTM, CYIPersistentStore &fromState);
95 
99  virtual void onTransitionComplete(CYIScreenTransitionManager *pSTM);
100 
106  virtual void onPreloadStart(CYIScreenTransitionManager *pSTM, CYIAbstractScreenViewController *pToScreen, CYIBundle toBundle);
107 
115  virtual void OnLoadingAnimationsStart(CYIScreenTransitionManager *pSTM, CYIAbstractScreenViewController *pToScreen, const CYIPersistentStore &pToState);
116 
122  virtual void onTransitionError(CYIScreenTransitionManager *pSTM, CYIBundle bundle);
123 
131  virtual void onSurfaceChangeRequested(CYIScreenTransitionManager *pSTM, YIViewProperty::Orientation orientation, YIViewProperty::StatusBar statusBarVisibility, YIViewProperty::NavigationBar navigationBarVisibility) = 0;
132 
142  virtual void onSurfaceReady(CYIScreenTransitionManager *pSTM, YIViewProperty::Orientation orientation, YIViewProperty::StatusBar statusBarVisibility, YIViewProperty::NavigationBar navigationBarVisibility) = 0;
143 
147  virtual void OnPopScreen(CYIScreenTransitionManager *pSTM, CYIAbstractScreenViewController *pScreen);
148  };
149 
151  virtual ~CYIScreenTransitionManager();
152 
157 
162 
168  void UseTransition(CYIScreenTransition *pTransition);
169 
175  void SetTransitionDelegate(ScreenTransitionDelegate *pScreenTransitionDelegate);
176 
184  bool IsTransitionActive() const;
185 
192 
196  void SetMaxScreenStackSize(uint32_t uSize);
197 
202 
206  void PushScreen(CYIAbstractScreenViewController *pScreen, const CYIBundle &bundle);
207 
213  void PushScreen(CYIAbstractScreenViewController *pScreen, const CYIBundle &bundle, const std::vector<ScreenTransitionBundle> &historyScreens);
214 
218  bool PopScreen();
219 
223  void PopAllScreens();
224 
229 
236 
241  CYIBundle PeekScreenBundle() const;
242 
245  CYISignal<const CYIBundle &/* bundle */> TransitionFailed;
246 
247 protected:
248  uint32_t GetStackSize() const;
249 
250 private:
251 
252  enum NAVIGATE_BACK_BEHAVIOUR
253  {
254  DONT_ALLOW_NAVIGATE_BACK = 0,
255  ALLOW_NAVIGATE_BACK = 1
256  };
257 
258  class StackData
259  {
260  public:
261  StackData(CYIAbstractScreenViewController *pScreen,
262  CYIScreenTransitionManager::NAVIGATE_BACK_BEHAVIOUR eNavigateBackBehaviour,
263  const CYIString &titleText,
264  bool bIsNavigationHistoryEnabled,
265  CYIBundle bundle
266  );
267  StackData();
268  ~StackData();
269 
270  CYIAbstractScreenViewController *GetScreen() const;
271 
272  CYIBundle GetBundle() const;
273 
274  bool IsBackNavigationAllowed() const;
275 
276  void SetNavigationHistoryEnabled(bool bEnable);
277 
278  bool IsNavigationHistoryEnabled() const;
279 
280  CYIString GetTitleText() const;
281 
282  void SetScreenState(CYIPersistentStore &screenState);
283 
284  CYIPersistentStore GetScreenState() const;
285 
286  private:
288  CYIScreenTransitionManager::NAVIGATE_BACK_BEHAVIOUR m_eNavigateBackBehaviour;
289  bool m_bIsNavigationHistoryEnabled;
290  CYIString m_sTitleText;
291  CYIPersistentStore m_screenState;
293  };
294 
295  enum TRANSITION_STATE
296  {
297  TRANSITION_ACTIVE,
298  TRANSITION_INACTIVE
299  };
300 
301  void _PushScreen(CYIAbstractScreenViewController *pScreen, const CYIBundle *pBundle, const std::vector<ScreenTransitionBundle> &historyScreens);
302 
303  bool IsSurfaceChangeRequired(const CYIAbstractScreenViewController *pFromController, const CYIAbstractScreenViewController *pToController);
304 
305  void OnPreloadValidateSucceeded(CYIAbstractScreenViewController * pController);
306  void OnPreloadValidateFailed(CYIAbstractScreenViewController *pController, CYIBundle bundle);
307  void OnPreloadComplete(CYIAbstractScreenViewController *pController);
308  void OnUnloadComplete(CYIAbstractScreenViewController *pController);
309 
310  CYISignal<> ScreenTransitionCompleted;
311  CYISignal<> ScreenTransitionFailed;
312 
313  void OnPushTransitionComplete();
314  void OnPopTransitionComplete();
315  void OnPushTransitionFail();
316  void OnPopTransitionFail();
317  void OnPopScreenTransitionComplete();
318 
319  void OnLoadAnimationStarted();
320  void OnLoadAnimationComplete();
321 
322  void ClearScreenStack();
323 
324  void DumpScreenStack(const CYIString& sTitle);
325 
326  void StartTransitionState();
327  void StopTransitionState();
328  void ResetTransitionState();
329  void InitiateTransition(CYIAbstractScreenViewController *pFromController, const CYIBundle &fromBundle,
330  CYIAbstractScreenViewController *pToController, const CYIBundle &toBundle, const CYIPersistentStore &toStateData,
331  const std::vector<ScreenTransitionBundle> &historyScreens);
332 
333  void OnScreenTransitionStopped();
334  void CheckForLoad();
335  void Load();
336 
337  TRANSITION_STATE m_eTransitionState;
338 
339  CYIAbstractScreenViewController *m_pNavigateFromScreenController;
340  CYIAbstractScreenViewController *m_pNavigateToScreenController;
341  CYIBundle m_FromBundle;
342  CYIBundle m_ToBundle;
343  CYIBundle m_ErrorBundle;
344  std::vector<ScreenTransitionBundle> m_HistoryScreens;
345 
346  bool m_bUnloadComplete;
347  bool m_bUnloadAnimationComplete;
348  bool m_bLoadingAnimationComplete;
349  bool m_bLoadingUserComplete;
350 
351  CYIPersistentStore m_unloadingScreenState;
352  CYIPersistentStore m_loadingScreenState;
353 
354  std::deque<StackData> m_screenStack;
355  CYIScreenTransition *m_pScreenTransition;
356  ScreenTransitionDelegate *m_pDelegate;
357 
358  uint32_t m_uMaxScreenStackSize;
359 };
360 
363 #endif // _YI_SCREEN_TRANSITION_MANAGER_H_
ScreenTransitionDelegate()
Definition: YiScreenTransitionManager.h:86
CYIBundle PeekScreenBundle() const
Stores a stack of screen view controllers (referred to here for simplicity as "screens") to allow for...
Definition: YiScreenTransitionManager.h:58
The CYIAbstractScreenViewController serves as the base to create application screen view controllers...
Definition: YiAbstractScreenViewController.h:38
Definition: YiPersistentStore.h:60
Contains optional data which can be stored on the screen stack with PushScreen() and retrieved using ...
Definition: YiScreenTransitionManager.h:67
Container class for Unicode strings. Conceptually, a CYIString object is a sequence of Unicode charac...
Definition: YiString.h:35
void SetTransitionDelegate(ScreenTransitionDelegate *pScreenTransitionDelegate)
CYIBundle represents a collection of key-value pairs.
Definition: YiBundle.h:45
The base class for an object accessible from script source code.
Definition: YiScriptableObject.h:28
CYIAbstractScreenViewController * m_pScreenController
Definition: YiScreenTransitionManager.h:69
ScreenTransitionBundle & operator=(const ScreenTransitionBundle &screenBundle)
StatusBar
Definition: YiViewProperty.h:23
void SetMaxScreenStackSize(uint32_t uSize)
NavigationBar
Definition: YiViewProperty.h:29
CYIBundle m_bundle
Definition: YiScreenTransitionManager.h:70
void UseTransition(CYIScreenTransition *pTransition)
uint32_t GetStackSize() const
virtual ~CYIScreenTransitionManager()
CYIAbstractScreenViewController * PeekScreen() const
Performs animated transitions from one application screen to another.
Definition: YiScreenTransition.h:34
CYISignal< const CYIPersistentStore & > TransitionStarted
Definition: YiScreenTransitionManager.h:243
Definition: YiSignalHandler.h:174
bool IsTransitionActive() const
CYISignal< const CYIBundle & > TransitionFailed
ScreenTransitionDelegate::onTransitionError.
Definition: YiScreenTransitionManager.h:245
virtual ~ScreenTransitionDelegate()
Definition: YiScreenTransitionManager.h:87
Signals and slots are a thread-safe and flexible communication framework that will allow various obje...
Definition: YiSignal.h:164
CYISignal TransitionCompleted
Definition: YiScreenTransitionManager.h:244
Orientation
Definition: YiViewProperty.h:12
void PushScreen(CYIAbstractScreenViewController *pScreen)
bool Connect(CYIAbstractScreenViewController *pScreen)
bool Disconnect(CYIAbstractScreenViewController *pScreen)
Listener interface for the CYIScreenTransitionManager events.
Definition: YiScreenTransitionManager.h:82