Merge "Clean up the code to build successfully on macOS" into devel/master
[platform/core/uifw/dali-core.git] / dali / public-api / object / base-object.cpp
1 /*
2  * Copyright (c) 2020 Samsung Electronics Co., Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  */
17
18 // CLASS HEADER
19 #include <dali/public-api/object/base-object.h>
20
21 // INTERNAL INCLUDES
22 #include <dali/integration-api/debug.h>
23 #include <dali/internal/event/common/base-object-impl.h>
24 #include <dali/internal/event/common/object-registry-impl.h>
25 #include <dali/internal/event/common/stage-impl.h>
26 #include <dali/internal/event/common/thread-local-storage.h>
27 #include <dali/internal/event/common/type-registry-impl.h>
28 #include <dali/public-api/object/type-registry.h>
29
30 namespace Dali
31 {
32 BaseObject::BaseObject()
33 : mImpl(new Impl(*this))
34 {
35 }
36
37 BaseObject::~BaseObject() = default;
38
39 void BaseObject::RegisterObject()
40 {
41   Internal::ThreadLocalStorage* tls = Internal::ThreadLocalStorage::GetInternal();
42   if(tls)
43   {
44     tls->GetEventThreadServices().RegisterObject(this);
45   }
46 }
47
48 void BaseObject::UnregisterObject()
49 {
50   Internal::ThreadLocalStorage* tls = Internal::ThreadLocalStorage::GetInternal();
51
52   // Guard to allow handle destruction after Core has been destroyed
53   if(tls)
54   {
55     tls->GetEventThreadServices().UnregisterObject(this);
56   }
57 }
58
59 bool BaseObject::DoAction(const std::string& actionName, const Property::Map& attributes)
60 {
61   Dali::Internal::TypeRegistry* registry = Dali::Internal::TypeRegistry::Get();
62
63   if(registry)
64   {
65     return registry->DoActionTo(this, actionName, attributes);
66   }
67
68   return false;
69 }
70
71 const std::string& BaseObject::GetTypeName() const
72 {
73   Dali::Internal::TypeRegistry* registry = Dali::Internal::TypeRegistry::Get();
74
75   if(registry)
76   {
77     Internal::TypeRegistry::TypeInfoPointer typeInfo = registry->GetTypeInfo(this);
78     if(typeInfo)
79     {
80       return typeInfo->GetName();
81     }
82   }
83
84   // Return an empty string if type-name not found.
85   DALI_LOG_WARNING("TypeName Not Found\n");
86   static std::string empty;
87   return empty;
88 }
89
90 bool BaseObject::GetTypeInfo(Dali::TypeInfo& typeInfo) const
91 {
92   Dali::Internal::TypeRegistry* registry = Dali::Internal::TypeRegistry::Get();
93
94   Internal::TypeRegistry::TypeInfoPointer info = registry->GetTypeInfo(this);
95   if(info)
96   {
97     typeInfo = Dali::TypeInfo(info.Get());
98     return true;
99   }
100   else
101   {
102     return false;
103   }
104 }
105
106 bool BaseObject::DoConnectSignal(ConnectionTrackerInterface* connectionTracker, const std::string& signalName, FunctorDelegate* functor)
107 {
108   Dali::Internal::TypeRegistry* registry = Dali::Internal::TypeRegistry::Get();
109
110   if(registry)
111   {
112     return registry->ConnectSignal(this, connectionTracker, signalName, functor);
113   }
114
115   return false;
116 }
117
118 } // namespace Dali