Newer
Older
Import / research / signals-slots / src / core / object.cpp
@John John on 29 Dec 2020 1014 bytes bulk import from macbookpro checkouts
#include <stdio.h>
#include <object.h>


Object::Object()
{
}


Object::~Object()
{
    foreach (Object *sender, senderList) {
        // XXX need to deregister connections to this here
        disconnect(sender, this); 
    }
}


void Object::disconnect(Object *sender, Object *receiver)
{
    foreach (Slot &slot, sender->signalMap) {
        if ( slot.o == receiver ) {
            // XXX need to do something here           
        }
    }
}


void Object::connect(Object *sender, const char *signal, Object *receiver, Function func)
{
    receiver->senderList += sender;
    receiver->slotList += func;
    Slot slot = { receiver, receiver->slotList.count() - 1 };
    sender->signalMap.append(signal, slot);
}


void Object::raise(const char *signal)
{
    List<Slot> slots = signalMap[signal];
    //printf("raising signal C  count = %i\n", sl.count());
    foreach (Slot &slot, slots) {
        //printf("raising signal E  id = %i\n", slot.id);
        (slot.o->*(slot.o->slotList[slot.id]))();
    }
}