[dali_2.3.22] Merge branch 'devel/master'
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / public-api / controls / flex-container / flex-container.h
index 375b2ce..17c39e7 100644 (file)
@@ -1,8 +1,8 @@
-#ifndef __DALI_TOOLKIT_FLEX_CONTAINER_H__
-#define __DALI_TOOLKIT_FLEX_CONTAINER_H__
+#ifndef DALI_TOOLKIT_FLEX_CONTAINER_H
+#define DALI_TOOLKIT_FLEX_CONTAINER_H
 
 /*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2020 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.
 
 namespace Dali
 {
-
 namespace Toolkit
 {
-
 namespace Internal DALI_INTERNAL
 {
 class FlexContainer;
@@ -93,103 +91,106 @@ class FlexContainer;
  * "type":"ImageView",
  * "image":"image.png",
  *   "properties": {
- *     "flex":1,                        // property to make the item to receive the specified proportion of the free space in the container.
- *     "alignSelf":"flexStart",         // property to specify how the item will align along the cross axis.
- *     "flexMargin":[10, 10, 10, 10]    // property to specify the space around the item.
+ *     "flex":1,                        // Property to make the item to receive the specified proportion of the free space in the container.
+ *     "alignSelf":"flexStart",         // Property to specify how the item will align along the cross axis.
+ *     "flexMargin":[10, 10, 10, 10]    // Property to specify the space around the item.
  *   }
  * @endcode
  * @SINCE_1_1.35
  */
 
-class DALI_IMPORT_API FlexContainer : public Control
+class DALI_TOOLKIT_API FlexContainer : public Control
 {
 public:
-
   /**
-   * @brief The direction of the main axis in the flex container. This determines
+   * @brief Enumeration for the direction of the main axis in the flex container. This determines
    * the direction that flex items are laid out in the flex container.
    * @SINCE_1_1.35
    */
   enum FlexDirection
   {
-    COLUMN,                  ///< The flexible items are displayed vertically as a column @SINCE_1_1.35
-    COLUMN_REVERSE,          ///< The flexible items are displayed vertically as a column, but in reverse order @SINCE_1_1.35
-    ROW,                     ///< The flexible items are displayed horizontally as a row @SINCE_1_1.35
-    ROW_REVERSE              ///< The flexible items are displayed horizontally as a row, but in reverse order @SINCE_1_1.35
+    COLUMN,         ///< The flexible items are displayed vertically as a column @SINCE_1_1.35
+    COLUMN_REVERSE, ///< The flexible items are displayed vertically as a column, but in reverse order @SINCE_1_1.35
+    ROW,            ///< The flexible items are displayed horizontally as a row @SINCE_1_1.35
+    ROW_REVERSE     ///< The flexible items are displayed horizontally as a row, but in reverse order @SINCE_1_1.35
   };
 
   /**
-   * @brief The primary direction in which content is ordered in the flex container
+   * @brief Enumeration for the primary direction in which content is ordered in the flex container
    * and on which sides the “start” and “end” are.
    * @SINCE_1_1.35
    */
   enum ContentDirection
   {
-    INHERIT,                 ///< Inherits the same direction from the parent @SINCE_1_1.35
-    LTR,                     ///< From left to right @SINCE_1_1.35
-    RTL                      ///< From right to left @SINCE_1_1.35
+    INHERIT, ///< Inherits the same direction from the parent @SINCE_1_1.35
+    LTR,     ///< From left to right @SINCE_1_1.35
+    RTL      ///< From right to left @SINCE_1_1.35
   };
 
   /**
-   * @brief Alignment of the flex items when the items do not use all available
+   * @brief Enumeration for the alignment of the flex items when the items do not use all available
    * space on the main-axis.
    * @SINCE_1_1.35
    */
   enum Justification
   {
-    JUSTIFY_FLEX_START,      ///< Items are positioned at the beginning of the container @SINCE_1_1.35
-    JUSTIFY_CENTER,          ///< Items are positioned at the center of the container @SINCE_1_1.35
-    JUSTIFY_FLEX_END,        ///< Items are positioned at the end of the container @SINCE_1_1.35
-    JUSTIFY_SPACE_BETWEEN,   ///< Items are positioned with equal space between the lines @SINCE_1_1.35
-    JUSTIFY_SPACE_AROUND     ///< Items are positioned with equal space before, between, and after the lines @SINCE_1_1.35
+    JUSTIFY_FLEX_START,    ///< Items are positioned at the beginning of the container @SINCE_1_1.35
+    JUSTIFY_CENTER,        ///< Items are positioned at the center of the container @SINCE_1_1.35
+    JUSTIFY_FLEX_END,      ///< Items are positioned at the end of the container @SINCE_1_1.35
+    JUSTIFY_SPACE_BETWEEN, ///< Items are positioned with equal space between the lines @SINCE_1_1.35
+    JUSTIFY_SPACE_AROUND,  ///< Items are positioned with equal space before, and after the lines @SINCE_1_1.35
+    JUSTIFY_SPACE_EVENLY   ///< Items are positioned with equal space before, between, and after the lines @SINCE_2_0.29
   };
 
   /**
-   * @brief Alignment of the flex items or lines when the items or lines do not
-   * use all available space on the cross-axis.
+   * @brief Enumeration for the alignment of the flex items or lines when the items or lines do not
+   * use all the available space on the cross-axis.
    * @SINCE_1_1.35
    */
   enum Alignment
   {
-    ALIGN_AUTO,              ///< Inherits the same alignment from the parent (only valid for "alignSelf" property) @SINCE_1_1.35
-    ALIGN_FLEX_START,        ///< At the beginning of the container @SINCE_1_1.35
-    ALIGN_CENTER,            ///< At the center of the container @SINCE_1_1.35
-    ALIGN_FLEX_END,          ///< At the end of the container @SINCE_1_1.35
-    ALIGN_STRETCH            ///< Stretch to fit the container @SINCE_1_1.35
+    ALIGN_AUTO,       ///< Inherits the same alignment from the parent (only valid for "alignSelf" property) @SINCE_1_1.35
+    ALIGN_FLEX_START, ///< At the beginning of the container @SINCE_1_1.35
+    ALIGN_CENTER,     ///< At the center of the container @SINCE_1_1.35
+    ALIGN_FLEX_END,   ///< At the end of the container @SINCE_1_1.35
+    ALIGN_STRETCH     ///< Stretch to fit the container @SINCE_1_1.35
   };
 
   /**
-   * @brief The wrap type of the flex container when there is no enough room for
+   * @brief Enumeration for the wrap type of the flex container when there is no enough room for
    * all the items on one flex line.
    * @SINCE_1_1.35
    */
   enum WrapType
   {
-    NO_WRAP,                 ///< Flex items laid out in single line (shrunk to fit the flex container along the main axis) @SINCE_1_1.35
-    WRAP                     ///< Flex items laid out in multiple lines if needed @SINCE_1_1.35
+    NO_WRAP, ///< Flex items laid out in single line (shrunk to fit the flex container along the main axis) @SINCE_1_1.35
+    WRAP     ///< Flex items laid out in multiple lines if needed @SINCE_1_1.35
   };
 
 public:
-
   /**
-   * @brief The start and end property ranges for this control.
+   * @brief Enumeration for the start and end property ranges for this control.
    * @SINCE_1_1.35
    */
   enum PropertyRange
   {
-    PROPERTY_START_INDEX = Control::CONTROL_PROPERTY_END_INDEX + 1,               ///< @SINCE_1_1.35
-    PROPERTY_END_INDEX =   PROPERTY_START_INDEX + 1000,                           ///< Reserve property indices @SINCE_1_1.35
+    PROPERTY_START_INDEX = Control::CONTROL_PROPERTY_END_INDEX + 1, ///< @SINCE_1_1.35
+    PROPERTY_END_INDEX   = PROPERTY_START_INDEX + 1000,             ///< Reserve property indices @SINCE_1_1.35
 
-    CHILD_PROPERTY_START_INDEX = CHILD_PROPERTY_REGISTRATION_START_INDEX,         ///< @SINCE_1_1.35
-    CHILD_PROPERTY_END_INDEX =   CHILD_PROPERTY_REGISTRATION_START_INDEX + 1000   ///< Reserve child property indices @SINCE_1_1.35
+    CHILD_PROPERTY_START_INDEX = CHILD_PROPERTY_REGISTRATION_START_INDEX,       ///< @SINCE_1_1.35
+    CHILD_PROPERTY_END_INDEX   = CHILD_PROPERTY_REGISTRATION_START_INDEX + 1000 ///< Reserve child property indices @SINCE_1_1.35
   };
 
   /**
-   * @brief An enumeration of properties belonging to the FlexContainer class.
+   * @brief Enumeration for the instance of properties belonging to the FlexContainer class.
    * @SINCE_1_1.35
    */
   struct Property
   {
+    /**
+     * @brief Enumeration for the instance of properties belonging to the FlexContainer class.
+     * @SINCE_1_1.35
+     */
     enum
     {
       // Event side properties
@@ -203,45 +204,66 @@ public:
   };
 
   /**
-   * @brief An enumeration of child properties belonging to the FlexContainer class.
+   * @brief Enumeration for the instance of child properties belonging to the FlexContainer class.
    * @SINCE_1_1.35
    */
   struct ChildProperty
   {
+    /**
+     * @brief Enumeration for the instance of child properties belonging to the FlexContainer class.
+     * @SINCE_1_1.35
+     */
     enum
     {
       // Event side child properties
-      FLEX = CHILD_PROPERTY_START_INDEX,        ///< name "flex",               The proportion of the free space in the container the flex item will receive. If all items in the container set this property, their sizes will be proportional to the specified flex factor,  type FLOAT @SINCE_1_1.35
-      ALIGN_SELF,                               ///< name "alignSelf",          The alignment of the flex item along the cross axis, which, if set, overides the default alignment for all items in the container,                          @see FlexContainer::Alignment,     type INTEGER @SINCE_1_1.35
-      FLEX_MARGIN                               ///< name "flexMargin",         The space around the flex item,                                                                                                                                                                type VECTOR4 @SINCE_1_1.35
+      FLEX = CHILD_PROPERTY_START_INDEX, ///< name "flex",               The proportion of the free space in the container the flex item will receive. If all items in the container set this property, their sizes will be proportional to the specified flex factor,  type FLOAT @SINCE_1_1.35
+      ALIGN_SELF,                        ///< name "alignSelf",          The alignment of the flex item along the cross axis, which, if set, overrides the default alignment for all items in the container,                         @see FlexContainer::Alignment,     type INTEGER @SINCE_1_1.35
+      FLEX_MARGIN                        ///< name "flexMargin",         The space around the flex item,                                                                                                                                                                type VECTOR4 @SINCE_1_1.35
     };
   };
 
   /**
-   * @brief Create a FlexContainer handle; this can be initialised with FlexContainer::New()
-   * Calling member functions with an uninitialised handle is not allowed.
+   * @brief Creates a FlexContainer handle; this can be initialized with FlexContainer::New()
+   * Calling member functions with an uninitialized handle is not allowed.
    * @SINCE_1_1.35
    */
   FlexContainer();
 
   /**
-   * @brief Copy constructor. Creates another handle that points to the same real object
+   * @brief Copy constructor. Creates another handle that points to the same real object.
    * @SINCE_1_1.35
    *
    * @param[in] handle The handle to copy from
    */
-  FlexContainer( const FlexContainer& handle );
+  FlexContainer(const FlexContainer& handle);
+
+  /**
+   * @brief Move constructor
+   * @SINCE_1_9.23
+   *
+   * @param[in] rhs A reference to the moved handle
+   */
+  FlexContainer(FlexContainer&& rhs) noexcept;
 
   /**
-   * @brief Assignment operator. Changes this handle to point to another real object
+   * @brief Assignment operator. Changes this handle to point to another real object.
    * @SINCE_1_1.35
    * @param[in] handle Handle to an object
    * @return A reference to this
    */
-  FlexContainer& operator=( const FlexContainer& handle );
+  FlexContainer& operator=(const FlexContainer& handle);
 
   /**
-   * @brief Destructor
+   * @brief Move assignment
+   * @SINCE_1_9.23
+   *
+   * @param[in] rhs A reference to the moved handle
+   * @return A reference to this
+   */
+  FlexContainer& operator=(FlexContainer&& rhs) noexcept;
+
+  /**
+   * @brief Destructor.
    *
    * @details This is non-virtual since derived Handle types must not contain data or virtual methods.
    *
@@ -250,45 +272,43 @@ public:
   ~FlexContainer();
 
   /**
-   * @brief Create the FlexContainer control.
+   * @brief Creates the FlexContainer control.
    * @SINCE_1_1.35
    *
-   * @return A handle to the FlexContainer control.
+   * @return A handle to the FlexContainer control
    */
   static FlexContainer New();
 
   /**
-   * @brief Downcast an Object handle to FlexContainer.
+   * @brief Downcasts an Object handle to FlexContainer.
    *
-   * @details If handle points to a FlexContainer the downcast produces
-   * valid handle. If not the returned handle is left uninitialized.
+   * @details If handle points to a FlexContainer, the downcast produces valid handle.
+   * If not, the returned handle is left uninitialized.
    *
    * @SINCE_1_1.35
    *
    * @param[in] handle Handle to an object
-   * @return handle to a FlexContainer or an uninitialized handle
+   * @return Handle to a FlexContainer or an uninitialized handle
    */
-  static FlexContainer DownCast( BaseHandle handle );
-
+  static FlexContainer DownCast(BaseHandle handle);
 
 public: // Not intended for application developers
-
   /// @cond internal
   /**
    * @brief Creates a handle using the Toolkit::Internal implementation.
    * @SINCE_1_1.35
    *
-   * @param[in] implementation The Control implementation.
+   * @param[in] implementation The Control implementation
    */
-  DALI_INTERNAL FlexContainer( Internal::FlexContainer& implementation );
+  DALI_INTERNAL FlexContainer(Internal::FlexContainer& implementation);
 
   /**
    * @brief Allows the creation of this Control from an Internal::CustomActor pointer.
    * @SINCE_1_1.35
    *
-   * @param[in] internal A pointer to the internal CustomActor.
+   * @param[in] internal A pointer to the internal CustomActor
    */
-  explicit DALI_INTERNAL FlexContainer( Dali::Internal::CustomActor* internal );
+  explicit DALI_INTERNAL FlexContainer(Dali::Internal::CustomActor* internal);
   /// @endcond
 };
 
@@ -299,4 +319,4 @@ public: // Not intended for application developers
 
 } // namespace Dali
 
-#endif // __DALI_TOOLKIT_FLEX_CONTAINER_H__
+#endif // DALI_TOOLKIT_FLEX_CONTAINER_H