Approximate Progress List (Incomplete) Overall estimate: ???% Polished: FLTK FLTK.Devices FLTK.Devices.Surfaces.Copy FLTK.Devices.Surfaces.Image FLTK.Devices.Surfaces.Paged FLTK.Devices.Surfaces.Paged.Printers FLTK.Dialogs FLTK.Event FLTK.Images FLTK.Images.Bitmaps FLTK.Images.Bitmaps.XBM FLTK.Images.RGB FLTK.Images.RGB.BMP FLTK.Images.RGB.JPEG FLTK.Images.RGB.PNG FLTK.Images.RGB.PNM FLTK.Images.Shared FLTK.Menu_Items FLTK.Screen FLTK.Static FLTK.Text_Buffers FLTK.Tooltips FLTK.Widgets FLTK.Widgets.Boxes FLTK.Widgets.Buttons FLTK.Widgets.Buttons.Enter FLTK.Widgets.Buttons.Light FLTK.Widgets.Buttons.Light.Check FLTK.Widgets.Buttons.Light.Radio FLTK.Widgets.Buttons.Light.Round FLTK.Widgets.Buttons.Light.Round.Radio FLTK.Widgets.Buttons.Radio FLTK.Widgets.Buttons.Repeat FLTK.Widgets.Buttons.Toggle FLTK.Widgets.Charts FLTK.Widgets.Clocks FLTK.Widgets.Clocks.Updated FLTK.Widgets.Clocks.Updated.Round FLTK.Widgets.Groups FLTK.Widgets.Groups.Color_Choosers FLTK.Widgets.Groups.Input_Choices FLTK.Widgets.Groups.Packed FLTK.Widgets.Groups.Scrolls FLTK.Widgets.Groups.Spinners FLTK.Widgets.Groups.Tabbed FLTK.Widgets.Groups.Text_Displays FLTK.Widgets.Groups.Text_Displays.Text_Editors FLTK.Widgets.Groups.Tiled FLTK.Widgets.Groups.Windows FLTK.Widgets.Groups.Windows.Double FLTK.Widgets.Groups.Windows.Single FLTK.Widgets.Groups.Windows.Single.Menu FLTK.Widgets.Groups.Wizards FLTK.Widgets.Inputs FLTK.Widgets.Inputs.File FLTK.Widgets.Inputs.Float FLTK.Widgets.Inputs.Integer FLTK.Widgets.Inputs.Multiline FLTK.Widgets.Inputs.Outputs FLTK.Widgets.Inputs.Outputs.Multiline FLTK.Widgets.Inputs.Secret FLTK.Widgets.Menus FLTK.Widgets.Menus.Menu_Bars FLTK.Widgets.Menus.Menu_Buttons FLTK.Widgets.Progress_Bars FLTK.Widgets.Valuators FLTK.Widgets.Valuators.Adjusters FLTK.Widgets.Valuators.Counters FLTK.Widgets.Valuators.Counters.Simple FLTK.Widgets.Valuators.Dials FLTK.Widgets.Valuators.Dials.Fill FLTK.Widgets.Valuators.Dials.Line FLTK.Widgets.Valuators.Rollers FLTK.Widgets.Valuators.Sliders FLTK.Widgets.Valuators.Sliders.Fill FLTK.Widgets.Valuators.Sliders.Hor_Fill FLTK.Widgets.Valuators.Sliders.Hor_Nice FLTK.Widgets.Valuators.Sliders.Horizontal FLTK.Widgets.Valuators.Sliders.Nice FLTK.Widgets.Valuators.Sliders.Scrollbars FLTK.Widgets.Valuators.Sliders.Value FLTK.Widgets.Valuators.Sliders.Value.Horizontal Done: Partially Done: FLTK.Devices.Graphics (incomplete API, otherwise polished) FLTK.Devices.Surfaces (incomplete API, otherwise polished) FLTK.Environment (incomplete API, otherwise polished) To-Do: FL_Pixmap FL_GIF_Image FL_XPM_Image FL_Tiled_Image FL_Browser FL_Check_Browser FL_File_Browser FL_Hold_Browser FL_Multi_Browser FL_Select_Browser FL_Help_View FL_Table FL_Table_Row FL_Tree FL_Label FL_Postscript_File_Device FL_Postscript_Printer FL_Overlay_Window FL_GL_Window FL_Glut_Window FL_Cairo_Window Fl_Display_Device Fl_File_Chooser? (all these have to be done to put something in the polished category) - mark all methods as inline - make sure all C++ reinterpret_cast for methods is to the Fl object, not the My object, because inheriting - check FLTK library internals to see which char* return values need dealloc - qualify all C++ virtual method calls with the class name to prevent dynamic dispatch on C++ side - provide documentation for how C++ methods map to Ada functions and procedures (delay this until figure out an easier way to expose protected methods) - make all protected methods available Bugs to fix: Fl_Group ABI_VERSION checks Fl_Help_View ABI_VERSION checks Fl_Tooltip ABI_VERSION checks Fl_Text_Editor tab_nav ABI_VERSION checks Fl_Wizard draw() method private/protected GNAT bug with type_invariant combined with derived type and a begin section in a package, eg dialogs.adb Never: Fl_FormsBitmap Fl_FormsPixmap Fl_FormsText Fl_Free Fl_Sys_Menu_Bar Fl_Positioner Fl_Timer Fl_System_Printer Fl_GDI_Graphics_Driver Fl_Postscript_Graphics_Driver Fl_Quartz_Graphics_Driver Fl_Xlib_Graphics_Driver Fl_Plugin Fl_Plugin_Manager Fl_Device_Plugin Fl_Label A note on callbacks and overriding: As part of its normal operation, FLTK calls a Widget's Draw and Handle methods from its main loop to deal with draw and input events. Since it's another part of the program that is invoking them, even if it's a part the programmer has no direct control over, this binding is set up so that if you override Draw or Handle, the behaviour will change. On the other hand, something like the Push method in tabbed groups is usually invoked from within that same tabbed group widget's Handle method. Therefore, keeping consistency with Ada semantics, overriding the Push method will NOT change the behaviour of the corresponding Handle method. You must also override Handle.