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 "evas_object.h"
24 #include <dpl/foreach.h>
26 Evas_Object* EvasObject::IConnection::GetEvasObject()
28 return m_object->GetObject();
31 void EvasObject::IConnection::Disconnect()
33 m_object->DisconnectCallback(this);
36 EvasObject::IConnection::IConnection(EvasObject::EvasObjectShared* object) :
41 void EvasObject::IConnection::SmartCallbackWrapper(void* data,
42 Evas_Object* /*object*/,
46 IConnection* Calle = static_cast<IConnection*>(data);
47 Calle->Call(event_info);
50 void EvasObject::IConnection::EvasCallbackWrapper(void* data,
52 Evas_Object* /*object*/,
56 IConnection* Calle = static_cast<IConnection*>(data);
57 Calle->Call(event_info);
60 Evas_Object* EvasObject::EvasObjectShared::GetObject()
65 EvasObject::EvasObjectShared::SmartConnectionBase::SmartConnectionBase(
66 const std::string& name,
67 EvasObject::EvasObjectShared* object) :
73 void EvasObject::EvasObjectShared::SmartConnectionBase::ConnectPrv()
75 evas_object_smart_callback_add(GetEvasObject(),
76 m_callbackName.c_str(),
77 &IConnection::SmartCallbackWrapper, this);
80 void EvasObject::EvasObjectShared::SmartConnectionBase::DisconnectPrv()
82 evas_object_smart_callback_del(GetEvasObject(),
83 m_callbackName.c_str(),
84 &IConnection::SmartCallbackWrapper);
87 EvasObject::EvasObjectShared::EvasConnectionBase::EvasConnectionBase(
88 Evas_Callback_Type type,
89 EvasObject::EvasObjectShared* object) :
95 void EvasObject::EvasObjectShared::EvasConnectionBase::ConnectPrv()
97 evas_object_event_callback_add(
98 GetEvasObject(), m_callbackType, &IConnection::EvasCallbackWrapper,
102 void EvasObject::EvasObjectShared::EvasConnectionBase::DisconnectPrv()
104 evas_object_event_callback_del_full(
105 GetEvasObject(), m_callbackType, &IConnection::EvasCallbackWrapper,
109 EvasObject::EvasObjectShared::EvasObjectShared() :
114 EvasObject::EvasObjectShared::EvasObjectShared(Evas_Object* object) :
118 evas_object_event_callback_add(m_object,
124 void EvasObject::EvasObjectShared::SetObject(Evas_Object* object)
126 Assert(m_object == NULL);
127 Assert(object != NULL);
129 evas_object_event_callback_add(m_object,
135 EvasObject::EvasObjectShared::~EvasObjectShared()
139 evas_object_event_callback_del(m_object,
146 bool EvasObject::EvasObjectShared::DisconnectCallback(IConnection* connection)
148 IConnectionsSet::iterator it = m_connections.find(connection);
149 if (it != m_connections.end()) {
150 (*it)->DisconnectPrv();
152 m_connections.erase(it);
158 void EvasObject::EvasObjectShared::DisconnectAll()
160 FOREACH(it, m_connections)
162 (*it)->DisconnectPrv();
165 m_connections.clear();
168 void EvasObject::EvasObjectShared::StaticOnDelEvent(void* data,
174 EvasObjectShared* This = static_cast<EvasObjectShared*>(data);
175 if (This->m_object) {
176 evas_object_event_callback_del(This->m_object,
179 This->DisconnectAll();
180 This->m_object = NULL;
184 EvasObject::EvasObject() :
185 m_object(new EvasObjectShared())
189 EvasObject::EvasObject(Evas_Object* object) :
190 m_object(new EvasObjectShared(object))
194 EvasObject::EvasObject(const EvasObject& other) :
195 m_object(other.m_object)
199 //this destructor must be here to let pimpl with shared_ptr work without warning
200 EvasObject::~EvasObject()
204 EvasObject& EvasObject::operator=(const EvasObject& other)
207 m_object = other.m_object;
211 EvasObject* EvasObject::operator=(Evas_Object* object)
214 m_object->SetObject(object);
218 bool EvasObject::DisconnectCallback(IConnection* connection)
221 return m_object->DisconnectCallback(connection);
224 void EvasObject::DisconnectAll()
227 m_object->DisconnectAll();
230 EvasObject::operator Evas_Object *()
233 return m_object->GetObject();