00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef _FL_CALLBACK_LIST_H_
00024 #define _FL_CALLBACK_LIST_H_
00025
00026 #include "Fl_Ptr_List.h"
00027 #include "Fl_Widget.h"
00028
00029 typedef Fl_Callback * Fl_Callback_p;
00030
00031 typedef struct CallbackDataStruct {
00032 CallbackDataStruct(Fl_Callback *c, void *a) { cb=c; arg=a; }
00033 Fl_Callback *cb;
00034 void *arg;
00035 } CallbackData;
00036
00038 class Fl_Callback_List : public Fl_Ptr_List {
00039 public:
00040 Fl_Callback_List() : Fl_Ptr_List() { auto_delete(true); }
00041 virtual ~Fl_Callback_List() { clear(); }
00042
00043 void do_callback(Fl_Widget *w);
00044 void do_callback(Fl_Widget *w, void *arg);
00045
00046 void append(Fl_Callback *cb, void *arg) { Fl_Ptr_List::append((void *)new CallbackData(cb, arg)); }
00047 void prepend(Fl_Callback *cb, void *arg) { Fl_Ptr_List::prepend((void *)new CallbackData(cb, arg)); }
00048 void insert(uint pos, Fl_Callback *cb, void *arg) { Fl_Ptr_List::insert(pos, (void *)new CallbackData(cb, arg)); }
00049 void replace(uint pos,Fl_Callback *cb, void *arg) { Fl_Ptr_List::replace(pos, (void *)new CallbackData(cb, arg)); }
00050 void remove(uint pos) { Fl_Ptr_List::remove(pos); }
00051 bool remove(Fl_Callback *cb, void *arg);
00052 int index_of(Fl_Callback *cb, const void *arg) const;
00053
00054 Fl_Callback_p callback(uint index) const { return (Fl_Callback_p)((CallbackData*)Fl_Ptr_List::item(index))->cb; }
00055 void *arg(uint index) const { return (void*)((CallbackData*)Fl_Ptr_List::item(index))->arg; }
00056 CallbackData *item(uint index) const { return (CallbackData*)Fl_Ptr_List::item(index); }
00057
00058 CallbackData **data() { return (CallbackData**)items; }
00059 CallbackData *operator [](uint ind) const { return (CallbackData*)items[ind]; }
00060
00061 protected:
00062 virtual void free_item(Fl_Ptr_List_Item item) { delete (CallbackData*)(item); }
00063 };
00064
00065 #endif