SOL9 2.0 Class: CallbackList

 SOL9 C++ Class Library  SOL9 Samples  SOL9 Tutorial  SOL9 FAQ  SOL9 ClassTree 

Source code

/*
 * CallbackList.h 
 * Copyright (c) 2011 Antillia.com TOSHIYUKI ARAI. ALL RIGHTS RESERVED. 
 */


// SOL++2000
#pragma once

#include <sol\CallbackEntry.h>
#include <sol\List.h>


namespace SOL {

class CallbackList :public List {
private:
    CallbackEntry* entry;

public:
    CallbackList() 
    { 
        entry = NULL; 
    }

public:

    ~CallbackList()
    {
        CallbackEntry* ptr = entry;
        CallbackEntry* prev;
        while(ptr) {
            prev = ptr;
            ptr  = ptr -> getNext();
            delete prev;
        }
    }

public:
    void add(const TCHAR* name, Key key, Object* object, 
            Callback proc, void* data) 
    {
        CallbackEntry* ent = new CallbackEntry(name, key, 
                object, proc, data);
        ent -> add(entry);
        entry = ent;
    }

public:
    void call(const TCHAR* name, Key key, void* value, Event& event) 
    {
        Action action(value, event);
        CallbackEntry* ptr = entry;
        while(ptr) {
            HWND hwnd = (HWND)key;
            Key id = 0;
            if(::IsWindow(hwnd)) {
                id = (Key)::GetWindowLong(hwnd, GWL_ID);
            }
            if(( key  == ptr->getKey() || id == ptr->getKey() ) && 
                name == ptr->getName() ) {
                Sleep(0);//2009/11/16
                ptr -> call(action);
                // Set callback result to event;
                event.setResult(action.getResult());
                break;
            }

            ptr = ptr -> getNext();
        }
    }

};

}



Last modified: 1 Feb 2012

Copyright (c) 2009-2012 Antillia.com ALL RIGHTS RESERVED.