class kryObject; /* Different callback types. Taking 0, 1 or 2 pointers to the ConnectSignal method. */ typedef void (*krySignalFunc0)(void *obj, void *invoke_data); typedef void (*krySignalFunc1)(void *obj, void *invoke_data, void *connect_data); typedef void (*krySignalFunc2)(void *obj, void *invoke_data, void *connect_data, void *connect_data2); enum krySignalFuncType { KRY_SIGNAL_FUNC0, KRY_SIGNAL_FUNC1, KRY_SIGNAL_FUNC2 }; struct krySignalFuncInfo { union { krySignalFunc0 func0; krySignalFunc1 func1; krySignalFunc2 func2; }; /* Data stored when the signal is connected */ void *connect_data1; void *connect_data2; enum krySignalFuncType type; }; class krySignal { public: krySignal(); void operator =(krySignal & signal); ~krySignal(); long Connect(krySignalFunc0 func); long Connect(krySignalFunc1 func, void *connect_data1); long Connect(krySignalFunc2 func, void *connect_data1, void *connect_data2); void Disconnect(void *func); void Disconnect(int id); void Enable(); void Disable(); void Invoke(kryObject *object, void *param); private: kryList m_funcs; gboolean m_disabled; };