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
24 #include "evas_object.h"
26 #include <dpl/foreach.h>
31 Evas_Object* EvasObject::IConnection::GetEvasObject()
33 return m_object->GetObject();
36 void EvasObject::IConnection::Disconnect()
38 m_object->DisconnectCallback(this);
41 EvasObject::IConnection::IConnection(EvasObject::EvasObjectShared* object) :
45 void EvasObject::IConnection::SmartCallbackWrapper(void* data,
46 Evas_Object* /*object*/,
50 IConnection* Calle = static_cast<IConnection*>(data);
51 Calle->Call(event_info);
54 void EvasObject::IConnection::EvasCallbackWrapper(void* data,
56 Evas_Object* /*object*/,
60 IConnection* Calle = static_cast<IConnection*>(data);
61 Calle->Call(event_info);
64 Evas_Object* EvasObject::EvasObjectShared::GetObject()
69 EvasObject::EvasObjectShared::SmartConnectionBase::SmartConnectionBase(
70 const std::string& name,
71 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) :
97 void EvasObject::EvasObjectShared::EvasConnectionBase::ConnectPrv()
99 evas_object_event_callback_add(
100 GetEvasObject(), m_callbackType, &IConnection::EvasCallbackWrapper,
104 void EvasObject::EvasObjectShared::EvasConnectionBase::DisconnectPrv()
106 evas_object_event_callback_del_full(
107 GetEvasObject(), m_callbackType, &IConnection::EvasCallbackWrapper,
111 EvasObject::EvasObjectShared::EvasObjectShared() :
115 EvasObject::EvasObjectShared::EvasObjectShared(Evas_Object* object) :
119 evas_object_event_callback_add(m_object,
125 void EvasObject::EvasObjectShared::SetObject(Evas_Object* object)
127 Assert(m_object == NULL);
128 Assert(object != NULL);
130 evas_object_event_callback_add(m_object,
136 EvasObject::EvasObjectShared::~EvasObjectShared()
140 evas_object_event_callback_del(m_object,
147 bool EvasObject::EvasObjectShared::DisconnectCallback(IConnection* connection)
149 IConnectionsSet::iterator it = m_connections.find(connection);
150 if (it != m_connections.end()) {
151 (*it)->DisconnectPrv();
153 m_connections.erase(it);
159 void EvasObject::EvasObjectShared::DisconnectAll()
161 FOREACH(it, m_connections)
163 (*it)->DisconnectPrv();
166 m_connections.clear();
169 void EvasObject::EvasObjectShared::StaticOnDelEvent(void* data,
175 EvasObjectShared* This = static_cast<EvasObjectShared*>(data);
176 if (This->m_object) {
177 evas_object_event_callback_del(This->m_object,
180 This->DisconnectAll();
181 This->m_object = NULL;
185 EvasObject::EvasObject() :
186 m_object(new EvasObjectShared())
189 EvasObject::EvasObject(Evas_Object* object) :
190 m_object(new EvasObjectShared(object))
193 EvasObject::EvasObject(const EvasObject& other) :
194 m_object(other.m_object)
197 //this destructor must be here to let pimpl with shared_ptr work without warning
198 EvasObject::~EvasObject()
201 EvasObject& EvasObject::operator=(const EvasObject& other)
204 m_object = other.m_object;
208 EvasObject* EvasObject::operator=(Evas_Object* object)
211 m_object->SetObject(object);
215 bool EvasObject::DisconnectCallback(IConnection* connection)
218 return m_object->DisconnectCallback(connection);
221 void EvasObject::DisconnectAll()
224 m_object->DisconnectAll();
227 EvasObject::operator Evas_Object *()
230 return m_object->GetObject();