use modern construct 'override' in the derive class.
[platform/core/uifw/dali-core.git] / dali / public-api / object / base-object.h
index ac0d786..91ca518 100644 (file)
@@ -1,8 +1,8 @@
-#ifndef __DALI_BASE_OBJECT_H__
-#define __DALI_BASE_OBJECT_H__
+#ifndef DALI_BASE_OBJECT_H
+#define DALI_BASE_OBJECT_H
 
 /*
- * Copyright (c) 2014 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.
  *
  */
 
+// EXTERNAL INCLUDES
+#include <memory>
+
 // INTERNAL INCLUDES
 #include <dali/public-api/object/ref-object.h>
 #include <dali/public-api/object/base-handle.h>
 #include <dali/public-api/object/property.h>
 #include <dali/public-api/signals/functor-delegate.h>
 
-namespace Dali DALI_IMPORT_API
+namespace Dali
 {
+/**
+ * @addtogroup dali_core_object
+ * @{
+ */
 
 class BaseHandle;
 
 /**
  * @brief A base class for objects.
+ * @SINCE_1_0.0
  */
-class BaseObject : public Dali::RefObject
+class DALI_CORE_API BaseObject : public Dali::RefObject
 {
 public:
 
   /**
    * @brief Connects a void() functor to a specified signal.
    *
+   * @SINCE_1_0.0
+   * @param[in] connectionTracker A connection tracker which can be used to disconnect
+   * @param[in] signalName Name of the signal to connect to
+   * @param[in] functor The functor to copy
+   * @return True if the signal was available
    * @pre The signal must be available in this object.
-   * @param [in] connectionTracker A connection tracker which can be used to disconnect.
-   * @param [in] signalName Name of the signal to connect to.
-   * @param [in] functor The functor to copy.
-   * @return True if the signal was available.
    */
   template <class T>
   bool ConnectSignal( ConnectionTrackerInterface* connectionTracker, const std::string& signalName, const T& functor )
@@ -54,7 +63,7 @@ public:
   /**
    * @copydoc Dali::BaseHandle::DoAction
    */
-  bool DoAction(const std::string& actionName, const std::vector<Property::Value>& attributes);
+  bool DoAction(const std::string& actionName, const Property::Map& attributes);
 
   /**
    * @copydoc Dali::BaseHandle::GetTypeName
@@ -69,7 +78,13 @@ public:
 public: // Not intended for application developers
 
   /**
-   * @copydoc Dali::BaseHandle::DoConnectSignal
+   * @brief Not intended for application developers.
+   *
+   * @SINCE_1_0.0
+   * @param[in] connectionTracker A connection tracker which can be used to disconnect
+   * @param[in] signalName Name of the signal to connect to
+   * @param[in] functorDelegate A newly allocated functor delegate (takes ownership)
+   * @return True if the signal was available
    */
   bool DoConnectSignal( ConnectionTrackerInterface* connectionTracker, const std::string& signalName, FunctorDelegate* functorDelegate );
 
@@ -77,40 +92,52 @@ protected:
 
   /**
    * @brief Default constructor.
+   * @SINCE_1_0.0
    */
   BaseObject();
 
   /**
    * @brief A reference counted object may only be deleted by calling Unreference().
+   * @SINCE_1_0.0
    */
-  virtual ~BaseObject();
+  ~BaseObject() override;
 
   /**
    * @brief Registers the object as created with the Object registry.
+   * @SINCE_1_0.0
    */
   void RegisterObject();
 
   /**
    * @brief Unregisters the object from Object registry.
+   * @SINCE_1_0.0
    */
   void UnregisterObject();
 
-private:
+  // Not copyable or movable
+
+  BaseObject(const BaseObject& rhs) = delete; ///< Deleted copy constructor
+  BaseObject(BaseObject&& rhs) = delete; ///< Deleted move constructor
+  BaseObject& operator=(const BaseObject& rhs) = delete; ///< Deleted copy assignment operator
+  BaseObject& operator=(BaseObject&& rhs) = delete; ///< Deleted move assignment operator
 
-  // Not implemented
-  DALI_INTERNAL BaseObject(const BaseObject& rhs);
+public:
+
+  class DALI_INTERNAL Impl;
+
+private:
 
-  // Not implemented
-  DALI_INTERNAL BaseObject& operator=(const BaseObject& rhs);
+  std::unique_ptr<Impl> mImpl;
 };
 
 // Helpers for public-api forwarding methods
 
 /**
- * @brief Get the implementation of a handle.
+ * @brief Gets the implementation of a handle.
  *
+ * @SINCE_1_0.0
  * @param[in] handle The handle
- * @return A reference to the object the handle points at.
+ * @return A reference to the object the handle points at
  */
 inline BaseObject& GetImplementation(Dali::BaseHandle& handle)
 {
@@ -120,10 +147,11 @@ inline BaseObject& GetImplementation(Dali::BaseHandle& handle)
 }
 
 /**
- * @brief Get the implementation of a handle.
+ * @brief Gets the implementation of a handle.
  *
+ * @SINCE_1_0.0
  * @param[in] handle The handle
- * @return A reference to the object the handle points at.
+ * @return A reference to the object the handle points at
  */
 inline const BaseObject& GetImplementation(const Dali::BaseHandle& handle)
 {
@@ -132,6 +160,9 @@ inline const BaseObject& GetImplementation(const Dali::BaseHandle& handle)
   return handle.GetBaseObject();
 }
 
+/**
+ * @}
+ */
 } // namespace Dali
 
 # endif // __DALI_BASE_OBJECT_H__