Merge branch 'devel/master' into tizen_6.5
[platform/core/uifw/dali-demo.git] / shared / dali-table-view.h
index beb85dd..c265c09 100644 (file)
@@ -2,7 +2,7 @@
 #define DALI_DEMO_TABLEVIEW_H
 
 /*
- * Copyright (c) 2019 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  *
  */
 
-#include <dali/dali.h>
+// EXTERNAL INCLUDES
 #include <dali-toolkit/dali-toolkit.h>
 #include <dali-toolkit/devel-api/controls/popup/popup.h>
+#include <dali/dali.h>
 
-class Example;
-
-typedef std::vector<Example> ExampleList;
-typedef ExampleList::iterator ExampleListIter;
-typedef ExampleList::const_iterator ExampleListConstIter;
-
-typedef std::vector<Dali::Animation> AnimationList;
-typedef AnimationList::iterator AnimationListIter;
-typedef AnimationList::const_iterator AnimationListConstIter;
-
-/**
- * Example information
- *
- * Represents a single Example.
- */
-struct Example
-{
-  // Constructors
-
-  /**
-   * @param[in] name unique name of example
-   * @param[in] title The caption for the example to appear on a tile button.
-   */
-  Example(std::string name, std::string title)
-  : name(name),
-    title(title)
-  {
-  }
-
-  Example()
-  {
-  }
-
-  // Data
-
-  std::string name;                       ///< unique name of example
-  std::string title;                      ///< title (caption) of example to appear on tile button.
-};
-
-
+// INTERNAL INCLUDES
+#include "bubble-animator.h"
+#include "example.h"
 
 /**
  * Dali-Demo instance
@@ -69,12 +33,19 @@ struct Example
 class DaliTableView : public Dali::ConnectionTracker
 {
 public:
-
+  /**
+   * Constructor
+   *
+   * @param application A reference to the application class
+   */
   DaliTableView(Dali::Application& application);
-  ~DaliTableView();
 
-public:
+  /**
+   * Destructor
+   */
+  ~DaliTableView() = default;
 
+public:
   /**
    * Adds an Example to our demo showcase
    *
@@ -92,27 +63,17 @@ public:
    * @note Should be called before the Application MainLoop is started.
    * @note By default the examples are NOT sorted alphabetically by Title.
    */
-  void SortAlphabetically( bool sortAlphabetically );
-
-private: // Application callbacks & implementation
+  void SortAlphabetically(bool sortAlphabetically);
 
-  static const unsigned int FOCUS_ANIMATION_ACTOR_NUMBER = 2; ///< The number of elements used to form the custom focus effect
-
-  /**
-   * Shape enum for create function
-   */
-  enum ShapeType
-  {
-    CIRCLE,
-    BUBBLE
-  };
+private:                                                          // Application callbacks & implementation
+  static constexpr unsigned int FOCUS_ANIMATION_ACTOR_NUMBER = 2; ///< The number of elements used to form the custom focus effect
 
   /**
    * Initialize application.
    *
    * @param[in] app Application instance
    */
-  void Initialize( Dali::Application& app );
+  void Initialize(Dali::Application& app);
 
   /**
    * Populates the contents (ScrollView) with all the
@@ -122,13 +83,6 @@ private: // Application callbacks & implementation
   void Populate();
 
   /**
-   * Rotates RootActor orientation to that specified.
-   *
-   * @param[in] degrees The requested angle.
-   */
-  void Rotate( unsigned int degrees );
-
-  /**
    * Creates a tile for the main menu.
    *
    * @param[in] name The unique name for this Tile
@@ -138,7 +92,7 @@ private: // Application callbacks & implementation
    *
    * @return The Actor for the created tile.
    */
-  Dali::Actor CreateTile( const std::string& name, const std::string& title, const Dali::Vector3& sizeMultiplier, Dali::Vector2& position );
+  Dali::Actor CreateTile(const std::string& name, const std::string& title, const Dali::Vector3& sizeMultiplier, Dali::Vector2& position);
 
   // Signal handlers
 
@@ -150,7 +104,7 @@ private: // Application callbacks & implementation
    *
    * @return Consume flag
    */
-  bool OnTilePressed( Dali::Actor actor, const Dali::TouchData& event );
+  bool OnTilePressed(Dali::Actor actor, const Dali::TouchEvent& event);
 
   /**
    * Called by OnTilePressed & Accessibility to do the appropriate action.
@@ -160,7 +114,7 @@ private: // Application callbacks & implementation
    *
    * @return Consume flag
    */
-  bool DoTilePress( Dali::Actor actor, Dali::PointState::Type state );
+  bool DoTilePress(Dali::Actor actor, Dali::PointState::Type state);
 
   /**
    * Signal emitted when any tile has been hovered
@@ -170,7 +124,7 @@ private: // Application callbacks & implementation
    *
    * @return Consume flag
    */
-  bool OnTileHovered( Dali::Actor actor, const Dali::HoverEvent& event );
+  bool OnTileHovered(Dali::Actor actor, const Dali::HoverEvent& event);
 
   /**
    * Signal emitted when the pressed animation has completed.
@@ -180,15 +134,6 @@ private: // Application callbacks & implementation
   void OnPressedAnimationFinished(Dali::Animation& source);
 
   /**
-   * Signal emitted when the button has been clicked
-   *
-   * @param[in] button The Button that is clicked.
-   *
-   * @return Consume flag
-   */
-  bool OnButtonClicked( Dali::Toolkit::Button& button );
-
-  /**
    * Signal emitted when scrolling has started.
    *
    * @param[in] position The current position of the scroll contents.
@@ -211,7 +156,7 @@ private: // Application callbacks & implementation
    *
    * @return Consume flag
    */
-  bool OnScrollTouched( Dali::Actor actor, const Dali::TouchData& event );
+  bool OnScrollTouched(Dali::Actor actor, const Dali::TouchEvent& event);
 
   /**
    * Setup the effect on the scroll view
@@ -224,56 +169,9 @@ private: // Application callbacks & implementation
   void ApplyCubeEffectToPages();
 
   /**
-   * Setup the inner cube effect
-   */
-  void SetupInnerPageCubeEffect();
-
-  /**
-   * Apply a shader effect to a table tile
-   */
-  void ApplyEffectToTile(Dali::Actor tile);
-
-  /**
-   * Apply effect to the content of a tile
-   */
-  void ApplyEffectToTileContent(Dali::Actor tileContent);
-
-  /**
    * Key event handler
    */
-  void OnKeyEvent( const Dali::KeyEvent& event );
-
-  /**
-   * Create a depth field background
-   *
-   * @param[in] bubbleLayer Add the graphics to this layer
-   */
-  void SetupBackground( Dali::Actor bubbleLayer );
-
-  /**
-   * Create background actors for the given layer
-   *
-   * @param[in] layer The layer to add the actors to
-   * @param[in] count The number of actors to generate
-   */
-  void AddBackgroundActors( Dali::Actor layer, int count );
-
-  /**
-   * Timer handler for ending background animation
-   *
-   * @return Return value for timer handler
-   */
-  bool PauseBackgroundAnimation();
-
-  /**
-   * Pause all animations
-   */
-  void PauseAnimation();
-
-  /**
-   * Resume all animations
-   */
-  void PlayAnimation();
+  void OnKeyEvent(const Dali::KeyEvent& event);
 
   /**
    * @brief Creates and sets up the custom effect used for the keyboard (and mouse) focus.
@@ -288,28 +186,28 @@ private: // Application callbacks & implementation
    * @param[in] direction The direction to move the focus
    * @return The actor to move the keyboard focus to.
    */
-  Dali::Actor OnKeyboardPreFocusChange( Dali::Actor current, Dali::Actor proposed, Dali::Toolkit::Control::KeyboardFocus::Direction direction );
+  Dali::Actor OnKeyboardPreFocusChange(Dali::Actor current, Dali::Actor proposed, Dali::Toolkit::Control::KeyboardFocus::Direction direction);
 
   /**
    * Callback when the keyboard focused actor is activated.
    *
    * @param[in] activatedActor The activated actor
    */
-  void OnFocusedActorActivated( Dali::Actor activatedActor );
+  void OnFocusedActorActivated(Dali::Actor activatedActor);
 
   /**
    * Callback when the keyboard focus indicator is enabled.
    *
    * @param[in] actor The keyboard focus indicator.
    */
-  void OnFocusIndicatorEnabled( Dali::Actor actor );
+  void OnFocusIndicatorEnabled(Dali::Actor actor);
 
   /**
    * Callback when the keyboard focus indicator is disabled.
    *
    * @param[in] actor The keyboard focus indicator.
    */
-  void OnFocusIndicatorDisabled( Dali::Actor actor );
+  void OnFocusIndicatorDisabled(Dali::Actor actor);
 
   /**
    * Called when the logo is tapped
@@ -317,69 +215,37 @@ private: // Application callbacks & implementation
    * @param[in]  actor  The tapped actor
    * @param[in]  tap    The tap information.
    */
-  void OnLogoTapped( Dali::Actor actor, const Dali::TapGesture& tap );
-
-  /**
-   * Hides the popup
-   */
-  void HideVersionPopup();
-
- /*
-  * @brief Callback called when the buttons page actor is relaid out
-  *
-  * @param[in] actor The page actor
-  */
- void OnButtonsPageRelayout( const Dali::Actor& actor );
-
- /**
-  * @brief The is connected to the keyboard focus highlight actor, and called when it is placed on the scene.
-  * @param[in] actor The actor that has been placed on the scene.
-  */
- void OnSceneConnect( Dali::Actor actor );
-
- /**
-  * @brief Callback called to set up background actors
-  *
-  * @param[in] actor The actor raising the callback
-  */
- void InitialiseBackgroundActors( Dali::Actor actor );
+  void OnLogoTapped(Dali::Actor actor, const Dali::TapGesture& tap);
 
 private:
-
-  Dali::Application&              mApplication;              ///< Application instance.
-  Dali::Toolkit::Control          mRootActor;                ///< All content (excluding background is anchored to this Actor)
-  Dali::Animation                 mRotateAnimation;          ///< Animation to rotate and resize mRootActor.
-  Dali::Animation                 mPressedAnimation;         ///< Button press scaling animation.
-  Dali::Toolkit::ScrollView       mScrollView;               ///< ScrollView container (for all Examples)
-  Dali::Toolkit::ScrollViewEffect mScrollViewEffect;         ///< Effect to be applied to the scroll view
-  Dali::Toolkit::RulerPtr         mScrollRulerX;             ///< ScrollView X (horizontal) ruler
-  Dali::Toolkit::RulerPtr         mScrollRulerY;             ///< ScrollView Y (vertical) ruler
-  Dali::Actor                     mPressedActor;             ///< The currently pressed actor.
-  Dali::Timer                     mAnimationTimer;           ///< Timer used to turn off animation after a specific time period
-  Dali::TapGestureDetector        mLogoTapDetector;          ///< To detect taps on the logo
-  Dali::Toolkit::Popup            mVersionPopup;             ///< Displays DALi library version information
+  Dali::Application&              mApplication;      ///< Application instance.
+  Dali::Actor                     mRootActor;        ///< All content (excluding background is anchored to this Actor)
+  Dali::Animation                 mPressedAnimation; ///< Button press scaling animation.
+  Dali::Toolkit::ScrollView       mScrollView;       ///< ScrollView container (for all Examples)
+  Dali::Toolkit::ScrollViewEffect mScrollViewEffect; ///< Effect to be applied to the scroll view
+  Dali::Actor                     mPressedActor;     ///< The currently pressed actor.
+  Dali::TapGestureDetector        mLogoTapDetector;  ///< To detect taps on the logo
+  Dali::Toolkit::Popup            mVersionPopup;     ///< Displays DALi library version information
+  BubbleAnimator                  mBubbleAnimator;   ///< Provides bubble animations.
 
   /**
    * This struct encapsulates all data relevant to each of the elements used within the custom keyboard focus effect.
    */
   struct FocusEffect
   {
-    Dali::Toolkit::ImageView        actor;                   ///< The parent keyboard focus highlight actor
-    Dali::Animation                 animation;               ///< The animation for the parent keyboard focus highlight actor
+    Dali::Toolkit::ImageView actor;     ///< The parent keyboard focus highlight actor
+    Dali::Animation          animation; ///< The animation for the parent keyboard focus highlight actor
   };
-  FocusEffect mFocusEffect[FOCUS_ANIMATION_ACTOR_NUMBER];    ///< The elements used to create the custom focus effect
-
-  std::vector< Dali::Actor >      mPages;                    ///< List of pages.
-  AnimationList                   mBackgroundAnimations;     ///< List of background bubble animations
-  ExampleList                     mExampleList;              ///< List of examples.
+  FocusEffect mFocusEffect[FOCUS_ANIMATION_ACTOR_NUMBER]; ///< The elements used to create the custom focus effect
 
-  float                           mPageWidth;                ///< The width of a page within the scroll-view, used to calculate the domain
-  int                             mTotalPages;               ///< Total pages within scrollview.
+  std::vector<Dali::Actor> mPages;       ///< List of pages.
+  ExampleList              mExampleList; ///< List of examples.
 
-  bool                            mScrolling:1;              ///< Flag indicating whether view is currently being scrolled
-  bool                            mSortAlphabetically:1;     ///< Sort examples alphabetically.
-  bool                            mBackgroundAnimsPlaying:1; ///< Are background animations playing
+  float mPageWidth;  ///< The width of a page within the scroll-view, used to calculate the domain
+  int   mTotalPages; ///< Total pages within scrollview.
 
+  bool mScrolling : 1;          ///< Flag indicating whether view is currently being scrolled
+  bool mSortAlphabetically : 1; ///< Sort examples alphabetically.
 };
 
 #endif // DALI_DEMO_TABLEVIEW_H