2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 * @file evas_object.cpp
18 * @author Lukasz Wrzosek (l.wrzosel@samsung.com)
20 * @brief This file is the implementation for Evas_Object wrapper from Efl.
23 #include <dpl/popup/evas_object.h>
24 #include <dpl/foreach.h>
29 Evas_Object* EvasObject::IConnection::GetEvasObject()
31 return m_object->GetObject();
34 void EvasObject::IConnection::Disconnect()
36 m_object->DisconnectCallback(this);
39 EvasObject::IConnection::IConnection(EvasObject::EvasObjectShared* object) :
44 void EvasObject::IConnection::SmartCallbackWrapper(void* data,
45 Evas_Object* /*object*/,
49 IConnection* Calle = static_cast<IConnection*>(data);
50 Calle->Call(event_info);
53 void EvasObject::IConnection::EvasCallbackWrapper(void* data,
55 Evas_Object* /*object*/,
59 IConnection* Calle = static_cast<IConnection*>(data);
60 Calle->Call(event_info);
63 Evas_Object* EvasObject::EvasObjectShared::GetObject()
68 EvasObject::EvasObjectShared::SmartConnectionBase::SmartConnectionBase(
69 const std::string& name,
70 EvasObject::EvasObjectShared* object) :
76 void EvasObject::EvasObjectShared::SmartConnectionBase::ConnectPrv()
78 evas_object_smart_callback_add(GetEvasObject(),
79 m_callbackName.c_str(),
80 &IConnection::SmartCallbackWrapper, this);
83 void EvasObject::EvasObjectShared::SmartConnectionBase::DisconnectPrv()
85 evas_object_smart_callback_del(GetEvasObject(),
86 m_callbackName.c_str(),
87 &IConnection::SmartCallbackWrapper);
90 EvasObject::EvasObjectShared::EvasConnectionBase::EvasConnectionBase(
91 Evas_Callback_Type type,
92 EvasObject::EvasObjectShared* object) :
98 void EvasObject::EvasObjectShared::EvasConnectionBase::ConnectPrv()
100 evas_object_event_callback_add(
101 GetEvasObject(), m_callbackType, &IConnection::EvasCallbackWrapper,
105 void EvasObject::EvasObjectShared::EvasConnectionBase::DisconnectPrv()
107 evas_object_event_callback_del_full(
108 GetEvasObject(), m_callbackType, &IConnection::EvasCallbackWrapper,
112 EvasObject::EvasObjectShared::EvasObjectShared() :
117 EvasObject::EvasObjectShared::EvasObjectShared(Evas_Object* object) :
121 evas_object_event_callback_add(m_object,
127 void EvasObject::EvasObjectShared::SetObject(Evas_Object* object)
129 Assert(m_object == NULL);
130 Assert(object != NULL);
132 evas_object_event_callback_add(m_object,
138 EvasObject::EvasObjectShared::~EvasObjectShared()
142 evas_object_event_callback_del(m_object,
149 bool EvasObject::EvasObjectShared::DisconnectCallback(IConnection* connection)
151 IConnectionsSet::iterator it = m_connections.find(connection);
152 if (it != m_connections.end()) {
153 (*it)->DisconnectPrv();
155 m_connections.erase(it);
161 void EvasObject::EvasObjectShared::DisconnectAll()
163 FOREACH(it, m_connections)
165 (*it)->DisconnectPrv();
168 m_connections.clear();
171 void EvasObject::EvasObjectShared::StaticOnDelEvent(void* data,
177 EvasObjectShared* This = static_cast<EvasObjectShared*>(data);
178 if (This->m_object) {
179 evas_object_event_callback_del(This->m_object,
182 This->DisconnectAll();
183 This->m_object = NULL;
187 EvasObject::EvasObject() :
188 m_object(new EvasObjectShared())
192 EvasObject::EvasObject(Evas_Object* object) :
193 m_object(new EvasObjectShared(object))
197 EvasObject::EvasObject(const EvasObject& other) :
198 m_object(other.m_object)
202 //this destructor must be here to let pimpl with shared_ptr work without warning
203 EvasObject::~EvasObject()
207 EvasObject& EvasObject::operator=(const EvasObject& other)
210 m_object = other.m_object;
214 EvasObject* EvasObject::operator=(Evas_Object* object)
217 m_object->SetObject(object);
221 bool EvasObject::DisconnectCallback(IConnection* connection)
224 return m_object->DisconnectCallback(connection);
227 void EvasObject::DisconnectAll()
230 m_object->DisconnectAll();
233 EvasObject::operator Evas_Object *()
236 return m_object->GetObject();