#ifndef __FL_CALLBACK_C__ #define __FL_CALLBACK_C__ #ifdef __cplusplus #include "Fl_ExportMacros.h" #include "Fl_Types.h" #include "DerivedText_Editor.h" #include #include "FL/Fl_Window.H" #include #include #include #include #include #include #include #include /** Pass a C callback function to an Fl_Window */ class C_to_Fl_Callback { private: fl_Callback* callback; fl_Text_Buffer_Callback* text_buffer_callback; void* user_data; void runCallback(Fl_Widget* w); void runCallback(); int runCallback(int key, DerivedText_Editor* editor); void runCallback(Fl_File_Chooser* chooser); static void intercept(Fl_Widget* w, void* self) { ((C_to_Fl_Callback*)self)->runCallback(w); } static void intercept(Fl_Text_Buffer* self) { ((C_to_Fl_Callback*)self)->runCallback(); } static void intercept(Fl_File_Chooser* c, void* self){ ((C_to_Fl_Callback*)self)->runCallback(c); } // implementation needs DerivedText_Editor so it is separated public: fl_Key_Func* c_key_func; Fl_Text_Editor::Key_Func* cpp_key_func; static int intercept(int key, DerivedText_Editor* editor){ C_to_Fl_Callback* context = editor->get_curr_callback_context(); if (!context) context = editor->get_default_callback_context(); return context->runCallback(key,editor); }; static int intercept(int key, fl_Text_Editor editor); static int function_pointers_to_free(fl_Widget_Virtual_Funcs* fs, fl_DoNotCall** res); static int function_pointers_to_free(fl_Table_Virtual_Funcs* fs, fl_DoNotCall** res); static int function_pointers_to_free(fl_Window_Virtual_Funcs* fs, fl_DoNotCall** res); static int function_pointers_to_free(fl_Browser_Virtual_Funcs* fs, fl_DoNotCall** res); static int function_pointers_to_free(fl_Image_Virtual_Funcs* fs, fl_DoNotCall** res); static int function_pointers_to_free(fl_Valuator_Virtual_Funcs* fs, fl_DoNotCall** res); static int function_pointers_to_free(fl_Widget_Virtual_Funcs* wfs,fl_Tab_Virtual_Funcs* fs, fl_DoNotCall** res); static int function_pointers_to_free(fl_Widget_Virtual_Funcs* wfs, fl_Color_Chooser_Virtual_Funcs* cfs, fl_DoNotCall** res); static Function_Pointers_To_Free* gather_function_pointers(int total_fps, int num_fps, fl_DoNotCall* fps, ...); C_to_Fl_Callback(Fl_Widget* invoker, fl_Callback* callback, void* user_data); C_to_Fl_Callback(Fl_Widget* invoker, fl_Callback* callback); C_to_Fl_Callback(fl_Callback* callback); C_to_Fl_Callback(fl_Callback* callback, void* user_data); C_to_Fl_Callback(fl_Text_Buffer_Callback* callback, void* invoker); C_to_Fl_Callback(fl_Key_Func* key_func); C_to_Fl_Callback(Fl_Text_Editor::Key_Func* stored_key_func); C_to_Fl_Callback(Fl_File_Chooser* chooser, void* user_data); C_to_Fl_Callback(Fl_File_Chooser* chooser); void* get_user_data(); void set_callback(Fl_Menu_Item* item); void set_callback(Fl_Text_Buffer* b); void set_user_data(void* user_data); void set_callback(Fl_File_Chooser* b); fl_Callback* inner_callback() { return this->callback; } static fl_Callback* get_callback(Fl_Menu_Item* m); static fl_Callback* get_callback(Fl_Widget* w); int menu_insert(Fl_Menu_Item* item, int index, char* name, int shortcut, int flags = 0); int menu_insert(Fl_Menu_* menu_, int index, char* name, int shortcut, int flags = 0); int menu_insert(Fl_Menu_* menu_, int index, char* name, char* shortcut, int flags = 0); int menu_insert(Fl_Sys_Menu_Bar* menu_, int index, char* name, int shortcut, int flags = 0); int menu_insert(Fl_Sys_Menu_Bar* menu_, int index, char* name, char* shortcut, int flags = 0); int menu_add(Fl_Menu_Item* item, char* name, int shortcut, int flags = 0); int menu_add(Fl_Menu_Item* item, char* name, char* shortcut, int flags = 0); int menu_add(Fl_Menu_* menu,char* name, char* shortcut, int flags = 0); int menu_add(Fl_Menu_* menu,char* name, int shortcut, int flags = 0); int menu_add(Fl_Sys_Menu_Bar* menu,char* name, char* shortcut, int flags = 0); int menu_add(Fl_Sys_Menu_Bar* menu,char* name, int shortcut, int flags = 0); }; #endif #endif /* __FL_CALLBACK_C__ */