disconnect () and disconnectAll for signals implemented

SVN revision: 50844
This commit is contained in:
Andreas Volz 2010-08-05 21:36:58 +00:00
parent 8aae0ccb69
commit c597faa97c
2 changed files with 32 additions and 4 deletions

View File

@ -3,6 +3,7 @@
/* STL */
#include <string>
#include <map>
/* EFL++ */
#include <eflxx/Common.h>
@ -77,8 +78,10 @@ public:
Eflxx::CountedPtr <Part> getPart( const std::string &partname );
/* signals and slots */
void connect( const std::string &emission, const std::string &source, const SignalSlot& slot );
void emit( const std::string &emission, const std::string &source );
void connect (const std::string &emission, const std::string &source, const SignalSlot& slot);
void disconnect (const std::string &emission, const std::string &source);
void disconnectAll ();
void emit (const std::string &emission, const std::string &source);
static Object *wrap( Evas_Object* o );
@ -94,6 +97,8 @@ private:
bool operator=( const Object& );
bool operator==( const Object& );
std::map <std::pair <std::string, std::string>, SignalSignal*> mSignalList;
};

View File

@ -67,7 +67,7 @@ Object::Object( Evas_Object* object)
Object::~Object()
{
//FIXME: Remove callbacks?
disconnectAll ();
evas_object_del( o );
}
@ -115,14 +115,37 @@ Eflxx::CountedPtr <Part> Object::getPart( const std::string &partname )
throw PartNotExistingException (partname);
}
void Object::connect( const std::string &emission, const std::string &source, const SignalSlot& slot )
void Object::connect (const std::string &emission, const std::string &source, const SignalSlot& slot)
{
SignalSignal* signal = new SignalSignal();
mSignalList[std::pair <std::string, std::string> (emission, source)] = signal;
AllocTag( signal, emission );
signal->connect( slot );
edje_object_signal_callback_add( o, emission.c_str (), source.c_str (), &_edje_signal_handler_callback, static_cast<void*>( signal ) );
}
void Object::disconnect (const std::string &emission, const std::string &source)
{
SignalSignal *signal = mSignalList[std::pair <std::string, std::string> (emission, source)];
edje_object_signal_callback_del (o, emission.c_str (), source.c_str (), _edje_signal_handler_callback);
delete signal;
}
void Object::disconnectAll ()
{
for (std::map <std::pair <std::string, std::string>, SignalSignal*>::iterator s_it = mSignalList.begin ();
s_it != mSignalList.end ();
++s_it)
{
std::pair <std::string, std::string> emission_source = (*s_it).first;
SignalSignal *signal = (*s_it).second;
edje_object_signal_callback_del (o, emission_source.first.c_str (), emission_source.second.c_str (),
_edje_signal_handler_callback);
delete signal;
}
}
void Object::emit( const std::string &emission, const std::string &source )
{
edje_object_signal_emit( o, emission.c_str (), source.c_str () );