FLTK logo

[Library] r7366 - in branches/branch-3.0: . FL fltk3 ide/Xcode3/FLTK.xcodeproj ide/Xcode3/plists src test

FLTK matrix user chat room
(using Element browser app)   FLTK gitter user chat room   GitHub FLTK Project   FLTK News RSS Feed  
  FLTK Apps      FLTK Library      Forums      Links     Login 
 All Forums  |  Back to fltk.commit  ]
 
Previous Message ]Next Message ]

[Library] r7366 - in branches/branch-3.0: . FL fltk3 ide/Xcode3/FLTK.xcodeproj ide/Xcode3/plists src test fltk-dev Mar 30, 2010  
 
Author: matt
Date: 2010-03-30 10:38:49 -0700 (Tue, 30 Mar 2010)
New Revision: 7366
Log:
Moved include files into fltk3 subdirectory. This is a hge commit - sorry.

Added:
   branches/branch-3.0/fltk3/
   branches/branch-3.0/fltk3/Enumerations.H
   branches/branch-3.0/fltk3/Fl.H
   branches/branch-3.0/fltk3/Fl_Abstract_Printer.H
   branches/branch-3.0/fltk3/Fl_Adjuster.H
   branches/branch-3.0/fltk3/Fl_BMP_Image.H
   branches/branch-3.0/fltk3/Fl_Bitmap.H
   branches/branch-3.0/fltk3/Fl_Box.H
   branches/branch-3.0/fltk3/Fl_Browser.H
   branches/branch-3.0/fltk3/Fl_Browser_.H
   branches/branch-3.0/fltk3/Fl_Button.H
   branches/branch-3.0/fltk3/Fl_Cairo.H
   branches/branch-3.0/fltk3/Fl_Cairo_Window.H
   branches/branch-3.0/fltk3/Fl_Chart.H
   branches/branch-3.0/fltk3/Fl_Check_Browser.H
   branches/branch-3.0/fltk3/Fl_Check_Button.H
   branches/branch-3.0/fltk3/Fl_Choice.H
   branches/branch-3.0/fltk3/Fl_Clock.H
   branches/branch-3.0/fltk3/Fl_Color_Chooser.H
   branches/branch-3.0/fltk3/Fl_Counter.H
   branches/branch-3.0/fltk3/Fl_Device.H
   branches/branch-3.0/fltk3/Fl_Dial.H
   branches/branch-3.0/fltk3/Fl_Double_Window.H
   branches/branch-3.0/fltk3/Fl_Export.H
   branches/branch-3.0/fltk3/Fl_File_Browser.H
   branches/branch-3.0/fltk3/Fl_File_Chooser.H
   branches/branch-3.0/fltk3/Fl_File_Icon.H
   branches/branch-3.0/fltk3/Fl_File_Input.H
   branches/branch-3.0/fltk3/Fl_Fill_Dial.H
   branches/branch-3.0/fltk3/Fl_Fill_Slider.H
   branches/branch-3.0/fltk3/Fl_Float_Input.H
   branches/branch-3.0/fltk3/Fl_FormsBitmap.H
   branches/branch-3.0/fltk3/Fl_FormsPixmap.H
   branches/branch-3.0/fltk3/Fl_Free.H
   branches/branch-3.0/fltk3/Fl_GIF_Image.H
   branches/branch-3.0/fltk3/Fl_Gl_Window.H
   branches/branch-3.0/fltk3/Fl_Group.H
   branches/branch-3.0/fltk3/Fl_Help_Dialog.H
   branches/branch-3.0/fltk3/Fl_Help_View.H
   branches/branch-3.0/fltk3/Fl_Hold_Browser.H
   branches/branch-3.0/fltk3/Fl_Hor_Fill_Slider.H
   branches/branch-3.0/fltk3/Fl_Hor_Nice_Slider.H
   branches/branch-3.0/fltk3/Fl_Hor_Slider.H
   branches/branch-3.0/fltk3/Fl_Hor_Value_Slider.H
   branches/branch-3.0/fltk3/Fl_Image.H
   branches/branch-3.0/fltk3/Fl_Input.H
   branches/branch-3.0/fltk3/Fl_Input_.H
   branches/branch-3.0/fltk3/Fl_Input_Choice.H
   branches/branch-3.0/fltk3/Fl_Int_Input.H
   branches/branch-3.0/fltk3/Fl_JPEG_Image.H
   branches/branch-3.0/fltk3/Fl_Light_Button.H
   branches/branch-3.0/fltk3/Fl_Line_Dial.H
   branches/branch-3.0/fltk3/Fl_Menu.H
   branches/branch-3.0/fltk3/Fl_Menu_.H
   branches/branch-3.0/fltk3/Fl_Menu_Bar.H
   branches/branch-3.0/fltk3/Fl_Menu_Button.H
   branches/branch-3.0/fltk3/Fl_Menu_Item.H
   branches/branch-3.0/fltk3/Fl_Menu_Window.H
   branches/branch-3.0/fltk3/Fl_Multi_Browser.H
   branches/branch-3.0/fltk3/Fl_Multi_Label.H
   branches/branch-3.0/fltk3/Fl_Multiline_Input.H
   branches/branch-3.0/fltk3/Fl_Multiline_Output.H
   branches/branch-3.0/fltk3/Fl_Native_File_Chooser.H
   branches/branch-3.0/fltk3/Fl_Native_File_Chooser_FLTK.H
   branches/branch-3.0/fltk3/Fl_Native_File_Chooser_MAC.H
   branches/branch-3.0/fltk3/Fl_Native_File_Chooser_WIN32.H
   branches/branch-3.0/fltk3/Fl_Nice_Slider.H
   branches/branch-3.0/fltk3/Fl_Object.H
   branches/branch-3.0/fltk3/Fl_Output.H
   branches/branch-3.0/fltk3/Fl_Overlay_Window.H
   branches/branch-3.0/fltk3/Fl_PNG_Image.H
   branches/branch-3.0/fltk3/Fl_PNM_Image.H
   branches/branch-3.0/fltk3/Fl_PSfile_Device.H
   branches/branch-3.0/fltk3/Fl_Pack.H
   branches/branch-3.0/fltk3/Fl_Pixmap.H
   branches/branch-3.0/fltk3/Fl_Plugin.H
   branches/branch-3.0/fltk3/Fl_Positioner.H
   branches/branch-3.0/fltk3/Fl_Preferences.H
   branches/branch-3.0/fltk3/Fl_Printer.H
   branches/branch-3.0/fltk3/Fl_Progress.H
   branches/branch-3.0/fltk3/Fl_RGB_Image.H
   branches/branch-3.0/fltk3/Fl_Radio_Button.H
   branches/branch-3.0/fltk3/Fl_Radio_Light_Button.H
   branches/branch-3.0/fltk3/Fl_Radio_Round_Button.H
   branches/branch-3.0/fltk3/Fl_Repeat_Button.H
   branches/branch-3.0/fltk3/Fl_Return_Button.H
   branches/branch-3.0/fltk3/Fl_Roller.H
   branches/branch-3.0/fltk3/Fl_Round_Button.H
   branches/branch-3.0/fltk3/Fl_Round_Clock.H
   branches/branch-3.0/fltk3/Fl_Scroll.H
   branches/branch-3.0/fltk3/Fl_Scrollbar.H
   branches/branch-3.0/fltk3/Fl_Secret_Input.H
   branches/branch-3.0/fltk3/Fl_Select_Browser.H
   branches/branch-3.0/fltk3/Fl_Shared_Image.H
   branches/branch-3.0/fltk3/Fl_Simple_Counter.H
   branches/branch-3.0/fltk3/Fl_Single_Window.H
   branches/branch-3.0/fltk3/Fl_Slider.H
   branches/branch-3.0/fltk3/Fl_Spinner.H
   branches/branch-3.0/fltk3/Fl_Sys_Menu_Bar.H
   branches/branch-3.0/fltk3/Fl_Table.H
   branches/branch-3.0/fltk3/Fl_Table_Row.H
   branches/branch-3.0/fltk3/Fl_Tabs.H
   branches/branch-3.0/fltk3/Fl_Text_Buffer.H
   branches/branch-3.0/fltk3/Fl_Text_Display.H
   branches/branch-3.0/fltk3/Fl_Text_Editor.H
   branches/branch-3.0/fltk3/Fl_Tile.H
   branches/branch-3.0/fltk3/Fl_Tiled_Image.H
   branches/branch-3.0/fltk3/Fl_Timer.H
   branches/branch-3.0/fltk3/Fl_Toggle_Button.H
   branches/branch-3.0/fltk3/Fl_Toggle_Light_Button.H
   branches/branch-3.0/fltk3/Fl_Toggle_Round_Button.H
   branches/branch-3.0/fltk3/Fl_Tooltip.H
   branches/branch-3.0/fltk3/Fl_Tree.H
   branches/branch-3.0/fltk3/Fl_Tree_Item.H
   branches/branch-3.0/fltk3/Fl_Tree_Item_Array.H
   branches/branch-3.0/fltk3/Fl_Tree_Prefs.H
   branches/branch-3.0/fltk3/Fl_Valuator.H
   branches/branch-3.0/fltk3/Fl_Value_Input.H
   branches/branch-3.0/fltk3/Fl_Value_Output.H
   branches/branch-3.0/fltk3/Fl_Value_Slider.H
   branches/branch-3.0/fltk3/Fl_Widget.H
   branches/branch-3.0/fltk3/Fl_Window.H
   branches/branch-3.0/fltk3/Fl_Wizard.H
   branches/branch-3.0/fltk3/Fl_XBM_Image.H
   branches/branch-3.0/fltk3/Fl_XPM_Image.H
   branches/branch-3.0/fltk3/Makefile.in
   branches/branch-3.0/fltk3/Xutf8.h
   branches/branch-3.0/fltk3/dirent.h
   branches/branch-3.0/fltk3/filename.H
   branches/branch-3.0/fltk3/fl_ask.H
   branches/branch-3.0/fltk3/fl_draw.H
   branches/branch-3.0/fltk3/fl_message.H
   branches/branch-3.0/fltk3/fl_show_colormap.H
   branches/branch-3.0/fltk3/fl_show_input.H
   branches/branch-3.0/fltk3/fl_types.h
   branches/branch-3.0/fltk3/fl_utf8.h
   branches/branch-3.0/fltk3/forms.H
   branches/branch-3.0/fltk3/gl.h
   branches/branch-3.0/fltk3/gl2opengl.h
   branches/branch-3.0/fltk3/gl_draw.H
   branches/branch-3.0/fltk3/glu.h
   branches/branch-3.0/fltk3/glut.H
   branches/branch-3.0/fltk3/mac.H
   branches/branch-3.0/fltk3/math.h
   branches/branch-3.0/fltk3/names.h
   branches/branch-3.0/fltk3/win32.H
   branches/branch-3.0/fltk3/x.H
Modified:
   branches/branch-3.0/FL/Fl.H
   branches/branch-3.0/FL/Fl_Abstract_Printer.H
   branches/branch-3.0/FL/Fl_Box.H
   branches/branch-3.0/FL/Fl_Browser_.H
   branches/branch-3.0/FL/Fl_Cairo.H
   branches/branch-3.0/FL/Fl_Cairo_Window.H
   branches/branch-3.0/FL/Fl_Color_Chooser.H
   branches/branch-3.0/FL/Fl_Device.H
   branches/branch-3.0/FL/Fl_File_Chooser.H
   branches/branch-3.0/FL/Fl_Gl_Window.H
   branches/branch-3.0/FL/Fl_Group.H
   branches/branch-3.0/FL/Fl_Help_Dialog.H
   branches/branch-3.0/FL/Fl_Help_View.H
   branches/branch-3.0/FL/Fl_Image.H
   branches/branch-3.0/FL/Fl_Input_Choice.H
   branches/branch-3.0/FL/Fl_Native_File_Chooser_MAC.H
   branches/branch-3.0/FL/Fl_Pack.H
   branches/branch-3.0/FL/Fl_Printer.H
   branches/branch-3.0/FL/Fl_Scroll.H
   branches/branch-3.0/FL/Fl_Spinner.H
   branches/branch-3.0/FL/Fl_Table.H
   branches/branch-3.0/FL/Fl_Tabs.H
   branches/branch-3.0/FL/Fl_Text_Display.H
   branches/branch-3.0/FL/Fl_Tile.H
   branches/branch-3.0/FL/Fl_Tooltip.H
   branches/branch-3.0/FL/Fl_Tree.H
   branches/branch-3.0/FL/Fl_Tree_Item.H
   branches/branch-3.0/FL/Fl_Widget.H
   branches/branch-3.0/FL/Fl_Window.H
   branches/branch-3.0/FL/Fl_Wizard.H
   branches/branch-3.0/FL/forms.H
   branches/branch-3.0/FL/mac.H
   branches/branch-3.0/FL/names.h
   branches/branch-3.0/FL/win32.H
   branches/branch-3.0/ide/Xcode3/FLTK.xcodeproj/project.pbxproj
   branches/branch-3.0/ide/Xcode3/plists/hello-Info.plist
   branches/branch-3.0/src/Fl.cxx
   branches/branch-3.0/src/Fl_Abstract_Printer.cxx
   branches/branch-3.0/src/Fl_Adjuster.cxx
   branches/branch-3.0/src/Fl_BMP_Image.cxx
   branches/branch-3.0/src/Fl_Bitmap.cxx
   branches/branch-3.0/src/Fl_Box.cxx
   branches/branch-3.0/src/Fl_Browser.cxx
   branches/branch-3.0/src/Fl_Browser_.cxx
   branches/branch-3.0/src/Fl_Browser_load.cxx
   branches/branch-3.0/src/Fl_Button.cxx
   branches/branch-3.0/src/Fl_Chart.cxx
   branches/branch-3.0/src/Fl_Check_Browser.cxx
   branches/branch-3.0/src/Fl_Check_Button.cxx
   branches/branch-3.0/src/Fl_Choice.cxx
   branches/branch-3.0/src/Fl_Clock.cxx
   branches/branch-3.0/src/Fl_Color_Chooser.cxx
   branches/branch-3.0/src/Fl_Counter.cxx
   branches/branch-3.0/src/Fl_Device.cxx
   branches/branch-3.0/src/Fl_Dial.cxx
   branches/branch-3.0/src/Fl_Double_Window.cxx
   branches/branch-3.0/src/Fl_File_Browser.cxx
   branches/branch-3.0/src/Fl_File_Chooser.cxx
   branches/branch-3.0/src/Fl_File_Chooser2.cxx
   branches/branch-3.0/src/Fl_File_Icon.cxx
   branches/branch-3.0/src/Fl_File_Icon2.cxx
   branches/branch-3.0/src/Fl_File_Input.cxx
   branches/branch-3.0/src/Fl_GIF_Image.cxx
   branches/branch-3.0/src/Fl_Gl_Choice.H
   branches/branch-3.0/src/Fl_Gl_Choice.cxx
   branches/branch-3.0/src/Fl_Gl_Device_Plugin.cxx
   branches/branch-3.0/src/Fl_Gl_Overlay.cxx
   branches/branch-3.0/src/Fl_Gl_Window.cxx
   branches/branch-3.0/src/Fl_Group.cxx
   branches/branch-3.0/src/Fl_Help_Dialog.cxx
   branches/branch-3.0/src/Fl_Help_View.cxx
   branches/branch-3.0/src/Fl_Image.cxx
   branches/branch-3.0/src/Fl_Input.cxx
   branches/branch-3.0/src/Fl_Input_.cxx
   branches/branch-3.0/src/Fl_JPEG_Image.cxx
   branches/branch-3.0/src/Fl_Light_Button.cxx
   branches/branch-3.0/src/Fl_Menu.cxx
   branches/branch-3.0/src/Fl_Menu_.cxx
   branches/branch-3.0/src/Fl_Menu_Bar.cxx
   branches/branch-3.0/src/Fl_Menu_Button.cxx
   branches/branch-3.0/src/Fl_Menu_Window.cxx
   branches/branch-3.0/src/Fl_Menu_add.cxx
   branches/branch-3.0/src/Fl_Menu_global.cxx
   branches/branch-3.0/src/Fl_Multi_Label.cxx
   branches/branch-3.0/src/Fl_Native_File_Chooser_FLTK.cxx
   branches/branch-3.0/src/Fl_Native_File_Chooser_MAC.cxx
   branches/branch-3.0/src/Fl_Overlay_Window.cxx
   branches/branch-3.0/src/Fl_PNG_Image.cxx
   branches/branch-3.0/src/Fl_PNM_Image.cxx
   branches/branch-3.0/src/Fl_PS_Printer.cxx
   branches/branch-3.0/src/Fl_Pack.cxx
   branches/branch-3.0/src/Fl_Pixmap.cxx
   branches/branch-3.0/src/Fl_Positioner.cxx
   branches/branch-3.0/src/Fl_Preferences.cxx
   branches/branch-3.0/src/Fl_Printer.cxx
   branches/branch-3.0/src/Fl_Progress.cxx
   branches/branch-3.0/src/Fl_Quartz_Printer.mm
   branches/branch-3.0/src/Fl_Repeat_Button.cxx
   branches/branch-3.0/src/Fl_Return_Button.cxx
   branches/branch-3.0/src/Fl_Roller.cxx
   branches/branch-3.0/src/Fl_Round_Button.cxx
   branches/branch-3.0/src/Fl_Scroll.cxx
   branches/branch-3.0/src/Fl_Scrollbar.cxx
   branches/branch-3.0/src/Fl_Shared_Image.cxx
   branches/branch-3.0/src/Fl_Single_Window.cxx
   branches/branch-3.0/src/Fl_Slider.cxx
   branches/branch-3.0/src/Fl_Sys_Menu_Bar.cxx
   branches/branch-3.0/src/Fl_Table.cxx
   branches/branch-3.0/src/Fl_Table_Row.cxx
   branches/branch-3.0/src/Fl_Tabs.cxx
   branches/branch-3.0/src/Fl_Text_Buffer.cxx
   branches/branch-3.0/src/Fl_Text_Display.cxx
   branches/branch-3.0/src/Fl_Text_Editor.cxx
   branches/branch-3.0/src/Fl_Tile.cxx
   branches/branch-3.0/src/Fl_Tiled_Image.cxx
   branches/branch-3.0/src/Fl_Tooltip.cxx
   branches/branch-3.0/src/Fl_Tree.cxx
   branches/branch-3.0/src/Fl_Tree_Item.cxx
   branches/branch-3.0/src/Fl_Tree_Item_Array.cxx
   branches/branch-3.0/src/Fl_Tree_Prefs.cxx
   branches/branch-3.0/src/Fl_Valuator.cxx
   branches/branch-3.0/src/Fl_Value_Input.cxx
   branches/branch-3.0/src/Fl_Value_Output.cxx
   branches/branch-3.0/src/Fl_Value_Slider.cxx
   branches/branch-3.0/src/Fl_Widget.cxx
   branches/branch-3.0/src/Fl_Window.cxx
   branches/branch-3.0/src/Fl_Window_fullscreen.cxx
   branches/branch-3.0/src/Fl_Window_hotspot.cxx
   branches/branch-3.0/src/Fl_Window_iconize.cxx
   branches/branch-3.0/src/Fl_Wizard.cxx
   branches/branch-3.0/src/Fl_XBM_Image.cxx
   branches/branch-3.0/src/Fl_XPM_Image.cxx
   branches/branch-3.0/src/Fl_abort.cxx
   branches/branch-3.0/src/Fl_add_idle.cxx
   branches/branch-3.0/src/Fl_arg.cxx
   branches/branch-3.0/src/Fl_cocoa.mm
   branches/branch-3.0/src/Fl_compose.cxx
   branches/branch-3.0/src/Fl_display.cxx
   branches/branch-3.0/src/Fl_get_key.cxx
   branches/branch-3.0/src/Fl_get_key_mac.cxx
   branches/branch-3.0/src/Fl_get_key_win32.cxx
   branches/branch-3.0/src/Fl_get_system_colors.cxx
   branches/branch-3.0/src/Fl_grab.cxx
   branches/branch-3.0/src/Fl_lock.cxx
   branches/branch-3.0/src/Fl_mac.cxx
   branches/branch-3.0/src/Fl_own_colormap.cxx
   branches/branch-3.0/src/Fl_visual.cxx
   branches/branch-3.0/src/Fl_win32.cxx
   branches/branch-3.0/src/Fl_x.cxx
   branches/branch-3.0/src/filename_absolute.cxx
   branches/branch-3.0/src/filename_expand.cxx
   branches/branch-3.0/src/filename_ext.cxx
   branches/branch-3.0/src/filename_isdir.cxx
   branches/branch-3.0/src/filename_list.cxx
   branches/branch-3.0/src/filename_match.cxx
   branches/branch-3.0/src/filename_setext.cxx
   branches/branch-3.0/src/fl_arc.cxx
   branches/branch-3.0/src/fl_arci.cxx
   branches/branch-3.0/src/fl_ask.cxx
   branches/branch-3.0/src/fl_boxtype.cxx
   branches/branch-3.0/src/fl_call_main.c
   branches/branch-3.0/src/fl_color.cxx
   branches/branch-3.0/src/fl_color_mac.cxx
   branches/branch-3.0/src/fl_color_win32.cxx
   branches/branch-3.0/src/fl_cursor.cxx
   branches/branch-3.0/src/fl_curve.cxx
   branches/branch-3.0/src/fl_diamond_box.cxx
   branches/branch-3.0/src/fl_dnd_mac.cxx
   branches/branch-3.0/src/fl_dnd_win32.cxx
   branches/branch-3.0/src/fl_dnd_x.cxx
   branches/branch-3.0/src/fl_draw.cxx
   branches/branch-3.0/src/fl_draw_image.cxx
   branches/branch-3.0/src/fl_draw_pixmap.cxx
   branches/branch-3.0/src/fl_encoding_latin1.cxx
   branches/branch-3.0/src/fl_encoding_mac_roman.cxx
   branches/branch-3.0/src/fl_engraved_label.cxx
   branches/branch-3.0/src/fl_file_dir.cxx
   branches/branch-3.0/src/fl_font.cxx
   branches/branch-3.0/src/fl_gtk.cxx
   branches/branch-3.0/src/fl_images_core.cxx
   branches/branch-3.0/src/fl_labeltype.cxx
   branches/branch-3.0/src/fl_line_style.cxx
   branches/branch-3.0/src/fl_open_uri.cxx
   branches/branch-3.0/src/fl_oval_box.cxx
   branches/branch-3.0/src/fl_overlay.cxx
   branches/branch-3.0/src/fl_overlay_visual.cxx
   branches/branch-3.0/src/fl_plastic.cxx
   branches/branch-3.0/src/fl_read_image.cxx
   branches/branch-3.0/src/fl_rect.cxx
   branches/branch-3.0/src/fl_round_box.cxx
   branches/branch-3.0/src/fl_rounded_box.cxx
   branches/branch-3.0/src/fl_scroll_area.cxx
   branches/branch-3.0/src/fl_set_font.cxx
   branches/branch-3.0/src/fl_set_fonts.cxx
   branches/branch-3.0/src/fl_set_fonts_win32.cxx
   branches/branch-3.0/src/fl_shadow_box.cxx
   branches/branch-3.0/src/fl_shortcut.cxx
   branches/branch-3.0/src/fl_show_colormap.cxx
   branches/branch-3.0/src/fl_symbols.cxx
   branches/branch-3.0/src/fl_utf.c
   branches/branch-3.0/src/fl_utf8.cxx
   branches/branch-3.0/src/fl_vertex.cxx
   branches/branch-3.0/src/forms_bitmap.cxx
   branches/branch-3.0/src/forms_compatability.cxx
   branches/branch-3.0/src/forms_free.cxx
   branches/branch-3.0/src/forms_fselect.cxx
   branches/branch-3.0/src/forms_pixmap.cxx
   branches/branch-3.0/src/forms_timer.cxx
   branches/branch-3.0/src/freeglut_geometry.cxx
   branches/branch-3.0/src/freeglut_stroke_mono_roman.cxx
   branches/branch-3.0/src/freeglut_stroke_roman.cxx
   branches/branch-3.0/src/freeglut_teapot.cxx
   branches/branch-3.0/src/gl_draw.cxx
   branches/branch-3.0/src/gl_start.cxx
   branches/branch-3.0/src/glut_compatability.cxx
   branches/branch-3.0/src/glut_font.cxx
   branches/branch-3.0/src/numericsort.c
   branches/branch-3.0/src/print_panel.cxx
   branches/branch-3.0/src/print_panel.h
   branches/branch-3.0/src/ps_image.cxx
   branches/branch-3.0/src/scandir.c
   branches/branch-3.0/src/screen_xywh.cxx
   branches/branch-3.0/test/hello.cxx

Modified: branches/branch-3.0/FL/Fl.H
===================================================================
--- branches/branch-3.0/FL/Fl.H	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/FL/Fl.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -33,7 +33,7 @@
 #  define Fl_H
 
 #ifdef HAVE_CAIRO
-# include <FL/Fl_Cairo.H>
+# include <fltk3/Fl_Cairo.H>
 #endif
 
 #  include "fl_utf8.h"
@@ -914,7 +914,7 @@
     These functions support deletion of widgets inside callbacks.
 
     fltk3::delete_widget() should be called when deleting widgets
-    or complete widget trees (Fl_Group, fltk3::Window, ...) inside
+    or complete widget trees (fltk3::Group, fltk3::Window, ...) inside
     callbacks.
 
     The other functions are intended for internal use. The preferred

Modified: branches/branch-3.0/FL/Fl_Abstract_Printer.H
===================================================================
--- branches/branch-3.0/FL/Fl_Abstract_Printer.H	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/FL/Fl_Abstract_Printer.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -32,7 +32,7 @@
 #ifndef Fl_Abstract_Printer_H
 #define Fl_Abstract_Printer_H
 
-#include <FL/Fl_Device.H>
+#include <fltk3/Fl_Device.H>
 
 /**
  \brief A virtual class for print support with several platform-specific implementations.

Modified: branches/branch-3.0/FL/Fl_Box.H
===================================================================
--- branches/branch-3.0/FL/Fl_Box.H	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/FL/Fl_Box.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -47,7 +47,7 @@
   /**
     - The first constructor sets box() to FL_NO_BOX, which
     means it is invisible. However such widgets are useful as placeholders
-    or Fl_Group::resizable()
+    or fltk3::Group::resizable()
     values.  To change the box to something visible, use box(n).
     - The second form of the constructor sets the box to the specified box
     type.

Modified: branches/branch-3.0/FL/Fl_Browser_.H
===================================================================
--- branches/branch-3.0/FL/Fl_Browser_.H	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/FL/Fl_Browser_.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -37,7 +37,7 @@
 #include "Fl_Group.H"
 #endif
 #include "Fl_Scrollbar.H"
-#include <FL/Fl.H>		// Fl::scrollbar_size()
+#include <fltk3/Fl.H>		// Fl::scrollbar_size()
 
 #define FL_NORMAL_BROWSER	0	/**< type() of Fl_Browser */
 #define FL_SELECT_BROWSER	1	/**< type() of FL_Select_Browser */
@@ -64,7 +64,7 @@
   accessing image data or doing stat() on a file or doing some
   other slow operation.
 */
-class FL_EXPORT Fl_Browser_ : public Fl_Group {
+class FL_EXPORT Fl_Browser_ : public fltk3::Group {
   int position_;	// where user wants it scrolled to
   int real_position_;	// the current vertical scrolling position
   int hposition_;	// where user wants it panned to

Modified: branches/branch-3.0/FL/Fl_Cairo.H
===================================================================
--- branches/branch-3.0/FL/Fl_Cairo.H	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/FL/Fl_Cairo.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -36,7 +36,7 @@
 // Cairo is currently supported for the following platforms:
 // Win32, Apple Quartz, X11
 
-# include <FL/Fl_Export.H>
+# include <fltk3/Fl_Export.H>
 
 # if defined(USE_X11) // X11
 #  include <cairo-xlib.h>

Modified: branches/branch-3.0/FL/Fl_Cairo_Window.H
===================================================================
--- branches/branch-3.0/FL/Fl_Cairo_Window.H	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/FL/Fl_Cairo_Window.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -35,8 +35,8 @@
 
 // Cairo is currently supported for the following platforms:
 // Win32, Apple Quartz, X11
-#  include <FL/Fl.H>
-#  include <FL/Fl_Double_Window.H>
+#  include <fltk3/Fl.H>
+#  include <fltk3/Fl_Double_Window.H>
 
 /** 
    \addtogroup group_cairo

Modified: branches/branch-3.0/FL/Fl_Color_Chooser.H
===================================================================
--- branches/branch-3.0/FL/Fl_Color_Chooser.H	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/FL/Fl_Color_Chooser.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -35,11 +35,11 @@
 #ifndef Fl_Color_Chooser_H
 #define Fl_Color_Chooser_H
 
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Return_Button.H>
-#include <FL/Fl_Choice.H>
-#include <FL/Fl_Value_Input.H>
+#include <fltk3/Fl_Group.H>
+#include <fltk3/Fl_Box.H>
+#include <fltk3/Fl_Return_Button.H>
+#include <fltk3/Fl_Choice.H>
+#include <fltk3/Fl_Value_Input.H>
 
 #ifndef FL_DOXYGEN
 
@@ -113,7 +113,7 @@
   color using dithering.
  */
 /** @} */
-class FL_EXPORT Fl_Color_Chooser : public Fl_Group {
+class FL_EXPORT Fl_Color_Chooser : public fltk3::Group {
   Flcc_HueBox huebox;
   Flcc_ValueBox valuebox;
   Fl_Choice choice;

Modified: branches/branch-3.0/FL/Fl_Device.H
===================================================================
--- branches/branch-3.0/FL/Fl_Device.H	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/FL/Fl_Device.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -32,12 +32,12 @@
 #ifndef Fl_Device_H
 #define Fl_Device_H
 
-#include <FL/x.H>
-#include <FL/Fl_Plugin.H>
-#include <FL/Fl_Image.H>
-#include <FL/Fl_Bitmap.H>
-#include <FL/Fl_Pixmap.H>
-#include <FL/Fl_RGB_Image.H>
+#include <fltk3/x.H>
+#include <fltk3/Fl_Plugin.H>
+#include <fltk3/Fl_Image.H>
+#include <fltk3/Fl_Bitmap.H>
+#include <fltk3/Fl_Pixmap.H>
+#include <fltk3/Fl_RGB_Image.H>
 #ifdef WIN32
 #include <commdlg.h>
 #elif defined(__APPLE__)

Modified: branches/branch-3.0/FL/Fl_File_Chooser.H
===================================================================
--- branches/branch-3.0/FL/Fl_File_Chooser.H	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/FL/Fl_File_Chooser.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -29,23 +29,23 @@
 
 #ifndef Fl_File_Chooser_H
 #define Fl_File_Chooser_H
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Double_Window.H>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Choice.H>
-#include <FL/Fl_Menu_Button.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Preferences.H>
-#include <FL/Fl_Tile.H>
-#include <FL/Fl_File_Browser.H>
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Check_Button.H>
-#include <FL/Fl_File_Input.H>
-#include <FL/Fl_Return_Button.H>
-#include <FL/fl_ask.H>
+#include <fltk3/Fl_Group.H>
+#include <fltk3/Fl_Choice.H>
+#include <fltk3/Fl_Menu_Button.H>
+#include <fltk3/Fl_Button.H>
+#include <fltk3/Fl_Preferences.H>
+#include <fltk3/Fl_Tile.H>
+#include <fltk3/Fl_File_Browser.H>
+#include <fltk3/Fl_Box.H>
+#include <fltk3/Fl_Check_Button.H>
+#include <fltk3/Fl_File_Input.H>
+#include <fltk3/Fl_Return_Button.H>
+#include <fltk3/fl_ask.H>
 
 class FL_EXPORT Fl_File_Chooser {
 public:

Modified: branches/branch-3.0/FL/Fl_Gl_Window.H
===================================================================
--- branches/branch-3.0/FL/Fl_Gl_Window.H	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/FL/Fl_Gl_Window.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -58,7 +58,7 @@
   Please note that the FLTK drawing and clipping functions
   will not work inside an Fl_Gl_Window. All drawing
   should be done using OpenGL calls exclusively.
-  Even though Fl_Gl_Window is derived from Fl_Group, 
+  Even though Fl_Gl_Window is derived from fltk3::Group, 
   it is not useful to add other FLTK Widgets as children,
   unless those widgets are modified to draw using OpenGL calls.
 */

Modified: branches/branch-3.0/FL/Fl_Group.H
===================================================================
--- branches/branch-3.0/FL/Fl_Group.H	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/FL/Fl_Group.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -26,7 +26,7 @@
 //
 
 /* \file
-   Fl_Group, Fl_End classes . */
+   fltk3::Group, Fl_End classes . */
 
 #ifndef Fl_Group_H
 #define Fl_Group_H
@@ -36,13 +36,13 @@
 #endif
 
 /**
-  The Fl_Group class is the FLTK container widget. It maintains
+  The fltk3::Group class is the FLTK container widget. It maintains
   an array of child widgets. These children can themselves be any widget
-  including Fl_Group. The most important subclass of Fl_Group
+  including fltk3::Group. The most important subclass of fltk3::Group
   is fltk3::Window, however groups can also be used to control radio buttons 
   or to enforce resize behavior.
 */
-class FL_EXPORT Fl_Group : public fltk3::Widget {
+class FL_EXPORT fltk3::Group : public fltk3::Widget {
 
   fltk3::Widget** array_;
   fltk3::Widget* savedfocus_;
@@ -51,11 +51,11 @@
   int *sizes_; // remembered initial sizes of children
 
   int navigation(int);
-  static Fl_Group *current_;
+  static fltk3::Group *current_;
  
   // unimplemented copy ctor and assignment operator
-  Fl_Group(const Fl_Group&);
-  Fl_Group& operator=(const Fl_Group&);
+  Group(const fltk3::Group&);
+  fltk3::Group& operator=(const fltk3::Group&);
 
 protected:
   void draw();
@@ -70,8 +70,8 @@
   int handle(int);
   void begin();
   void end();
-  static Fl_Group *current();
-  static void current(Fl_Group *g);
+  static fltk3::Group *current();
+  static void current(fltk3::Group *g);
 
   /**
     Returns how many child widgets the group has.
@@ -83,21 +83,21 @@
   fltk3::Widget* child(int n) const {return array()[n];}
   int find(const fltk3::Widget*) const;
   /**
-    See int Fl_Group::find(const fltk3::Widget *w) const 
+    See int fltk3::Group::find(const fltk3::Widget *w) const 
   */
   int find(const fltk3::Widget& o) const {return find(&o);}
   fltk3::Widget* const* array() const;
 
   void resize(int,int,int,int);
   /**
-    Creates a new Fl_Group widget using the given position, size,
+    Creates a new fltk3::Group widget using the given position, size,
     and label string. The default boxtype is FL_NO_BOX.
   */
-  Fl_Group(int,int,int,int, const char * = 0);
-  virtual ~Fl_Group();
+  Group(int,int,int,int, const char * = 0);
+  virtual ~Group();
   void add(fltk3::Widget&);
   /**
-    See void Fl_Group::add(fltk3::Widget &w) 
+    See void fltk3::Group::add(fltk3::Widget &w) 
   */
   void add(fltk3::Widget* o) {add(*o);}
   void insert(fltk3::Widget&, int i);
@@ -115,7 +115,7 @@
   void clear();
 
   /**
-    See void Fl_Group::resizable(fltk3::Widget *box) 
+    See void fltk3::Group::resizable(fltk3::Widget *box) 
   */
   void resizable(fltk3::Widget& o) {resizable_ = &o;}
   /**
@@ -136,7 +136,7 @@
     \image latex resizebox2.eps "after resize"   width=4cm
 
     The resizable may be set to the group itself, in which case all the
-    contents are resized. This is the default value for Fl_Group,
+    contents are resized. This is the default value for fltk3::Group,
     although NULL is the default for fltk3::Window and Fl_Pack.
 
     If the resizable is NULL then all widgets remain a fixed size
@@ -144,11 +144,11 @@
 
     It is possible to achieve any type of resize behavior by using an
     invisible Fl_Box as the resizable and/or by using a hierarchy
-    of child Fl_Group's.
+    of child fltk3::Group's.
   */
   void resizable(fltk3::Widget* o) {resizable_ = o;}
   /**
-    See void Fl_Group::resizable(fltk3::Widget *box) 
+    See void fltk3::Group::resizable(fltk3::Widget *box) 
   */
   fltk3::Widget* resizable() const {return resizable_;}
   /**
@@ -172,17 +172,17 @@
 
     \return true, if clipping is enabled, false otherwise.
 
-    \see void Fl_Group::clip_children(int c)
+    \see void fltk3::Group::clip_children(int c)
   */
   unsigned int clip_children() { return (flags() & CLIP_CHILDREN) != 0; }
 
-  /** Returns an Fl_Group pointer if this widget is an Fl_Group.
+  /** Returns an fltk3::Group pointer if this widget is an fltk3::Group.
   
-      \retval NULL if this widget is not derived from Fl_Group.
+      \retval NULL if this widget is not derived from fltk3::Group.
       \note This method is provided to avoid dynamic_cast.
       \todo More documentation ...
    */
-  virtual Fl_Group* as_group() { return this; }
+  virtual fltk3::Group* as_group() { return this; }
 
   // back compatibility functions:
 
@@ -201,13 +201,13 @@
 };
 
 // dummy class used to end child groups in constructors for complex
-// subclasses of Fl_Group:
+// subclasses of fltk3::Group:
 /**
-  This is a dummy class that allows you to end a Fl_Group in a constructor list of a
+  This is a dummy class that allows you to end a fltk3::Group in a constructor list of a
   class:
   \code 
    class MyClass {
-   Fl_Group group;
+   fltk3::Group group;
    Fl_Button button_in_group;
    Fl_End end;
    Fl_Button button_outside_group;
@@ -223,8 +223,8 @@
 */
 class FL_EXPORT Fl_End {
 public:
-  /** All it does is calling Fl_Group::current()->end() */
-  Fl_End() {Fl_Group::current()->end();}
+  /** All it does is calling fltk3::Group::current()->end() */
+  Fl_End() {fltk3::Group::current()->end();}
 };
 
 #endif

Modified: branches/branch-3.0/FL/Fl_Help_Dialog.H
===================================================================
--- branches/branch-3.0/FL/Fl_Help_Dialog.H	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/FL/Fl_Help_Dialog.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -32,13 +32,13 @@
 
 #ifndef Fl_Help_Dialog_H
 #define Fl_Help_Dialog_H
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Input.H>
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Help_View.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Double_Window.H>
+#include <fltk3/Fl_Group.H>
+#include <fltk3/Fl_Button.H>
+#include <fltk3/Fl_Input.H>
+#include <fltk3/Fl_Box.H>
+#include <fltk3/Fl_Help_View.H>
 
 class FL_EXPORT Fl_Help_Dialog {
   int index_; 

Modified: branches/branch-3.0/FL/Fl_Help_View.H
===================================================================
--- branches/branch-3.0/FL/Fl_Help_View.H	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/FL/Fl_Help_View.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -208,7 +208,7 @@
      - yen Yuml yuml
 
 */
-class FL_EXPORT Fl_Help_View : public Fl_Group	// Help viewer widget
+class FL_EXPORT Fl_Help_View : public fltk3::Group	// Help viewer widget
 {
   enum { RIGHT = -1, CENTER, LEFT };	///< Alignments
 

Modified: branches/branch-3.0/FL/Fl_Image.H
===================================================================
--- branches/branch-3.0/FL/Fl_Image.H	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/FL/Fl_Image.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -184,8 +184,8 @@
   contents of the screen.</P>
   
   <P>Fl_RGB_Image is defined in
-  &lt;FL/Fl_Image.H&gt;, however for compatibility reasons
-  &lt;FL/Fl_RGB_Image.H&gt; should be included.
+  &lt;fltk3/Fl_Image.H&gt;, however for compatibility reasons
+  &lt;fltk3/Fl_RGB_Image.H&gt; should be included.
 */
 class FL_EXPORT Fl_RGB_Image : public Fl_Image {
   public:

Modified: branches/branch-3.0/FL/Fl_Input_Choice.H
===================================================================
--- branches/branch-3.0/FL/Fl_Input_Choice.H	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/FL/Fl_Input_Choice.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -38,11 +38,11 @@
 #ifndef Fl_Input_Choice_H
 #define Fl_Input_Choice_H
 
-#include <FL/Fl.H>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Input.H>
-#include <FL/Fl_Menu_Button.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Group.H>
+#include <fltk3/Fl_Input.H>
+#include <fltk3/Fl_Menu_Button.H>
+#include <fltk3/fl_draw.H>
 #include <string.h>
 
 /**
@@ -56,7 +56,7 @@
   widgets directly, using the menubutton()
   and input() accessor methods.
 */
-class Fl_Input_Choice : public Fl_Group {
+class Fl_Input_Choice : public fltk3::Group {
   // Private class to handle slightly 'special' behavior of menu button
   class InputMenuButton : public Fl_Menu_Button {
     void draw() {
@@ -139,8 +139,8 @@
     and label string.
   <P> Inherited destructor Destroys the widget and any value associated with it.
   */
-  Fl_Input_Choice (int x,int y,int w,int h,const char*l=0) : Fl_Group(x,y,w,h,l) {
-    Fl_Group::box(FL_DOWN_BOX);
+  Fl_Input_Choice (int x,int y,int w,int h,const char*l=0) : fltk3::Group(x,y,w,h,l) {
+    fltk3::Group::box(FL_DOWN_BOX);
     align(FL_ALIGN_LEFT);				// default like Fl_Input
     inp_ = new Fl_Input(inp_x(), inp_y(),
 			inp_w(), inp_h());
@@ -176,7 +176,7 @@
   /** Sets the Fl_Menu_Item array used for the menu. */
   void menu(const Fl_Menu_Item *m) { menu_->menu(m); }
   void resize(int X, int Y, int W, int H) {
-    Fl_Group::resize(X,Y,W,H);
+    fltk3::Group::resize(X,Y,W,H);
     inp_->resize(inp_x(), inp_y(), inp_w(), inp_h());
     menu_->resize(menu_x(), menu_y(), menu_w(), menu_h());
   }

Modified: branches/branch-3.0/FL/Fl_Native_File_Chooser_MAC.H
===================================================================
--- branches/branch-3.0/FL/Fl_Native_File_Chooser_MAC.H	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/FL/Fl_Native_File_Chooser_MAC.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -34,7 +34,7 @@
 
 #undef check // necessary for use of fltk3::check()
 
-#include <FL/filename.H>
+#include <fltk3/filename.H>
 #define MAXFILTERS	80
 
 class Fl_Native_File_Chooser {

Modified: branches/branch-3.0/FL/Fl_Pack.H
===================================================================
--- branches/branch-3.0/FL/Fl_Pack.H	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/FL/Fl_Pack.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -31,7 +31,7 @@
 #ifndef Fl_Pack_H
 #define Fl_Pack_H
 
-#include <FL/Fl_Group.H>
+#include <fltk3/Fl_Group.H>
 
 /**
   This widget was designed to add the functionality of compressing and
@@ -47,9 +47,9 @@
   Fl_Scroll.
 
   <P>The resizable for Fl_Pack is set to NULL by default.</p>
-  <P>See also: Fl_Group::resizable()
+  <P>See also: fltk3::Group::resizable()
 */
-class FL_EXPORT Fl_Pack : public Fl_Group {
+class FL_EXPORT Fl_Pack : public fltk3::Group {
   int spacing_;
 
 public:
@@ -73,7 +73,7 @@
     between the children.
   */
   void spacing(int i) {spacing_ = i;}
-  /** Same as Fl_Group::type() */
+  /** Same as fltk3::Group::type() */
   uchar horizontal() const {return type();}
 };
 

Modified: branches/branch-3.0/FL/Fl_Printer.H
===================================================================
--- branches/branch-3.0/FL/Fl_Printer.H	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/FL/Fl_Printer.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -31,11 +31,11 @@
 #ifndef Fl_Printer_H
 #define Fl_Printer_H
 
-#include <FL/Fl_Abstract_Printer.H>
-#include <FL/fl_draw.H>
-#include <FL/Fl_Pixmap.H>
-#include <FL/Fl_RGB_Image.H>
-#include <FL/Fl_Bitmap.H>
+#include <fltk3/Fl_Abstract_Printer.H>
+#include <fltk3/fl_draw.H>
+#include <fltk3/Fl_Pixmap.H>
+#include <fltk3/Fl_RGB_Image.H>
+#include <fltk3/Fl_Bitmap.H>
 #include <stdio.h>
 
 #if defined(__APPLE__) || defined(WIN32) || defined(FL_DOXYGEN)
@@ -155,7 +155,7 @@
 
 #else
 
-#include <FL/Fl_PSfile_Device.H>
+#include <fltk3/Fl_PSfile_Device.H>
 
 class Fl_Printer : public Fl_PSfile_Device {
 public:

Modified: branches/branch-3.0/FL/Fl_Scroll.H
===================================================================
--- branches/branch-3.0/FL/Fl_Scroll.H	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/FL/Fl_Scroll.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -93,7 +93,7 @@
   clipping is not conveyed to it when drawn, and it will draw over the
   scrollbars and neighboring objects.</I>
 */
-class FL_EXPORT Fl_Scroll : public Fl_Group {
+class FL_EXPORT Fl_Scroll : public fltk3::Group {
 
   int xposition_, yposition_;
   int oldx, oldy;

Modified: branches/branch-3.0/FL/Fl_Spinner.H
===================================================================
--- branches/branch-3.0/FL/Fl_Spinner.H	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/FL/Fl_Spinner.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -35,10 +35,10 @@
 // Include necessary headers...
 //
 
-#  include <FL/Enumerations.H>
-#  include <FL/Fl_Group.H>
-#  include <FL/Fl_Input.H>
-#  include <FL/Fl_Repeat_Button.H>
+#  include <fltk3/Enumerations.H>
+#  include <fltk3/Fl_Group.H>
+#  include <fltk3/Fl_Input.H>
+#  include <fltk3/Fl_Repeat_Button.H>
 #  include <stdio.h>
 #  include <stdlib.h>
 
@@ -48,7 +48,7 @@
   widget and repeat buttons. The user can either type into the
   input area or use the buttons to change the value.
 */
-class Fl_Spinner : public Fl_Group
+class Fl_Spinner : public fltk3::Group
 {
   double	value_;			// Current value
   double	minimum_;		// Minimum value
@@ -124,7 +124,7 @@
 		  <P>Inherited destructor Destroys the widget and any value associated with it.
 		*/
 		Fl_Spinner(int X, int Y, int W, int H, const char *L = 0)
-		  : Fl_Group(X, Y, W, H, L),
+  : fltk3::Group(X, Y, W, H, L),
 		    input_(X, Y, W - H / 2 - 2, H),
 		    up_button_(X + W - H / 2 - 2, Y, H / 2 + 2, H / 2, "@-42<"),
 		    down_button_(X + W - H / 2 - 2, Y + H - H / 2,
@@ -171,7 +171,7 @@
 		      else return 0;
 		  }
 
-		  return Fl_Group::handle(event);
+    return fltk3::Group::handle(event);
 		}
 
   /** Speling mistakes retained for source compatibility \deprecated */
@@ -189,7 +189,7 @@
   /** Sets the minimum and maximum values for the widget. */
   void		range(double a, double b) { minimum_ = a; maximum_ = b; }
   void		resize(int X, int Y, int W, int H) {
-		  Fl_Group::resize(X,Y,W,H);
+    fltk3::Group::resize(X,Y,W,H);
 
 		  input_.resize(X, Y, W - H / 2 - 2, H);
 		  up_button_.resize(X + W - H / 2 - 2, Y, H / 2 + 2, H / 2);

Modified: branches/branch-3.0/FL/Fl_Table.H
===================================================================
--- branches/branch-3.0/FL/Fl_Table.H	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/FL/Fl_Table.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -39,11 +39,11 @@
 #include <stdlib.h>		// UNIX: malloc/realloc
 #endif /*WIN32*/
 
-#include <FL/Fl.H>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Scroll.H>
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Scrollbar.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Group.H>
+#include <fltk3/Fl_Scroll.H>
+#include <fltk3/Fl_Box.H>
+#include <fltk3/Fl_Scrollbar.H>
 
 /**
  A table of widgets or other content.
@@ -168,7 +168,7 @@
  
  
  */
-class Fl_Table : public Fl_Group {
+class Fl_Table : public fltk3::Group {
 public:
   enum TableContext {
     CONTEXT_NONE       = 0,
@@ -425,7 +425,7 @@
   long col_scroll_position(int col);		// find scroll position of col (in pixels)
   
   int is_fltk_container() { 			// does table contain fltk widgets?
-    return( Fl_Group::children() > 3 );		// (ie. more than box and 2 scrollbars?)
+    return( fltk3::Group::children() > 3 );		// (ie. more than box and 2 scrollbars?)
   }
   
   static void scroll_cb(fltk3::Widget*,void*);	// h/v scrollbar callback
@@ -823,13 +823,13 @@
   
   // This crashes sortapp() during init.
   //  void box(Fl_Boxtype val) {
-  //    Fl_Group::box(val);
+  //    fltk3::Group::box(val);
   //    if ( table ) {
   //      resize(x(), y(), w(), h());
   //    }
   //  }
   //  Fl_Boxtype box(void) const {
-  //    return(Fl_Group::box());
+  //    return(fltk3::Group::box());
   //  }
   
   // Child group
@@ -865,7 +865,7 @@
     } else {
       table->hide();
     } 
-    Fl_Group::current(Fl_Group::parent());
+    fltk3::Group::current(fltk3::Group::parent());
   }
   fltk3::Widget * const *array() {
     return(table->array());

Modified: branches/branch-3.0/FL/Fl_Tabs.H
===================================================================
--- branches/branch-3.0/FL/Fl_Tabs.H	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/FL/Fl_Tabs.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -43,7 +43,7 @@
   
   Clicking the tab makes a child visible() by calling
   show() on it, and all other children are made invisible
-  by calling hide() on them. Usually the children are Fl_Group widgets
+  by calling hide() on them. Usually the children are fltk3::Group widgets
   containing several widgets themselves.
   
   Each child makes a card, and its label() is printed
@@ -59,7 +59,7 @@
   fluid browser to select each child group and resize them until
   the tabs look the way you want them to.
 */
-class FL_EXPORT Fl_Tabs : public Fl_Group {
+class FL_EXPORT Fl_Tabs : public fltk3::Group {
   fltk3::Widget *value_;
   fltk3::Widget *push_;
   int tab_positions(int*, int*);

Modified: branches/branch-3.0/FL/Fl_Text_Display.H
===================================================================
--- branches/branch-3.0/FL/Fl_Text_Display.H	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/FL/Fl_Text_Display.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -46,7 +46,7 @@
   by the Fl_Text_Buffer
   class.
 */
-class FL_EXPORT Fl_Text_Display: public Fl_Group {
+class FL_EXPORT Fl_Text_Display: public fltk3::Group {
   public:
     /** text display cursor shapes enumeration */
     enum {

Modified: branches/branch-3.0/FL/Fl_Tile.H
===================================================================
--- branches/branch-3.0/FL/Fl_Tile.H	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/FL/Fl_Tile.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -73,10 +73,10 @@
   border can be dragged to.  If you don't set it, it will be possible to
   drag the borders right to the edge, and thus resize objects on the edge
   to zero width or height.  The resizable() widget is not
-  resized by dragging any borders. See also void Fl_Group::resizable(fltk3::Widget &w)
+  resized by dragging any borders. See also void fltk3::Group::resizable(fltk3::Widget &w)
 
 */
-class FL_EXPORT Fl_Tile : public Fl_Group {
+class FL_EXPORT Fl_Tile : public fltk3::Group {
 public:
   int handle(int);
   /**
@@ -90,7 +90,7 @@
     variables, but you must declare the Fl_Tile <I>first</I>, so
     that it is destroyed last.
   */
-  Fl_Tile(int X,int Y,int W,int H,const char*l=0) : Fl_Group(X,Y,W,H,l) {}
+  Fl_Tile(int X,int Y,int W,int H,const char*l=0) : fltk3::Group(X,Y,W,H,l) {}
   void resize(int, int, int, int);
   void position(int, int, int, int);
 };

Modified: branches/branch-3.0/FL/Fl_Tooltip.H
===================================================================
--- branches/branch-3.0/FL/Fl_Tooltip.H	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/FL/Fl_Tooltip.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -31,8 +31,8 @@
 #ifndef Fl_Tooltip_H
 #define Fl_Tooltip_H
 
-#include <FL/Fl.H>
-#include <FL/Fl_Widget.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Widget.H>
 
 /**
   The Fl_Tooltip class provides tooltip support for

Modified: branches/branch-3.0/FL/Fl_Tree.H
===================================================================
--- branches/branch-3.0/FL/Fl_Tree.H	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/FL/Fl_Tree.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -5,16 +5,16 @@
 #ifndef FL_TREE_H
 #define FL_TREE_H
 
-#include <FL/Fl.H>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Scrollbar.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Group.H>
+#include <fltk3/Fl_Scrollbar.H>
+#include <fltk3/fl_draw.H>
 
-#include <FL/Fl_Tree_Item.H>
-#include <FL/Fl_Tree_Prefs.H>
+#include <fltk3/Fl_Tree_Item.H>
+#include <fltk3/Fl_Tree_Prefs.H>
 
 //////////////////////
-// FL/Fl_Tree.H
+// fltk3/Fl_Tree.H
 //////////////////////
 //
 // Fl_Tree -- This file is part of the Fl_Tree widget for FLTK
@@ -65,7 +65,7 @@
 ///
 ///     The simple way to define a tree:
 /// \code
-///    #include <FL/Fl_Tree.H>
+///    #include <fltk3/Fl_Tree.H>
 ///    [..]
 ///    Fl_Tree tree(X,Y,W,H);
 ///    tree.begin();
@@ -102,7 +102,7 @@
 ///     \image html tree-elements.png
 ///
 
-class Fl_Tree : public Fl_Group {
+class Fl_Tree : public fltk3::Group {
   Fl_Tree_Item  *_root;					// can be null!
   Fl_Tree_Item  *_item_clicked;
   Fl_Tree_Prefs  _prefs;				// all the tree's settings

Modified: branches/branch-3.0/FL/Fl_Tree_Item.H
===================================================================
--- branches/branch-3.0/FL/Fl_Tree_Item.H	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/FL/Fl_Tree_Item.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -5,16 +5,16 @@
 #ifndef FL_TREE_ITEM_H
 #define FL_TREE_ITEM_H
 
-#include <FL/Fl.H>
-#include <FL/Fl_Widget.H>
-#include <FL/Fl_Image.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Widget.H>
+#include <fltk3/Fl_Image.H>
+#include <fltk3/fl_draw.H>
 
-#include <FL/Fl_Tree_Item_Array.H>
-#include <FL/Fl_Tree_Prefs.H>
+#include <fltk3/Fl_Tree_Item_Array.H>
+#include <fltk3/Fl_Tree_Prefs.H>
 
 //////////////////////
-// FL/Fl_Tree_Item.H
+// fltk3/Fl_Tree_Item.H
 //////////////////////
 //
 // Fl_Tree -- This file is part of the Fl_Tree widget for FLTK

Modified: branches/branch-3.0/FL/Fl_Widget.H
===================================================================
--- branches/branch-3.0/FL/Fl_Widget.H	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/FL/Fl_Widget.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -36,9 +36,9 @@
 namespace fltk3 {
   class Window;
   class Widget;
+  class Group;
 }
 
-class Fl_Group;
 class Fl_Image;
 
 /** Default callback type definition for all fltk widgets (by far the most used) */
@@ -94,9 +94,9 @@
     user code to call redraw() after these.
  */
 class FL_EXPORT fltk3::Widget {
-  friend class ::Fl_Group;
+  friend class Group;
 
-  Fl_Group* parent_;
+  fltk3::Group* parent_;
   Fl_Callback* callback_;
   void* user_data_;
   int x_,y_,w_,h_;
@@ -147,7 +147,7 @@
         OVERRIDE        = 1<<8,   ///< position window on top (fltk3::Window)
         VISIBLE_FOCUS   = 1<<9,   ///< accepts keyboard focus navigation if the widget can have the focus
         COPIED_LABEL    = 1<<10,  ///< the widget label is internally copied, its destruction is handled by the widget
-        CLIP_CHILDREN   = 1<<11,  ///< all drawing within this widget will be clipped (Fl_Group)
+        CLIP_CHILDREN   = 1<<11,  ///< all drawing within this widget will be clipped (fltk3::Group)
         MENU_WINDOW     = 1<<12,  ///< a temporary popup window, dismissed by clicking outside (fltk3::Window)
         TOOLTIP_WINDOW  = 1<<13,  ///< a temporary popup, transparent to events, and dismissed easily (fltk3::Window)
         MODAL           = 1<<14,  ///< a window blocking input to all other winows (fltk3::Window)
@@ -231,21 +231,21 @@
   virtual int handle(int event);
 
   /** Returns a pointer to the parent widget.  
-      Usually this is a Fl_Group or fltk3::Window. 
+      Usually this is a fltk3::Group or fltk3::Window. 
       \retval NULL if the widget has no parent
-      \see Fl_Group::add(fltk3::Widget*)
+      \see fltk3::Group::add(fltk3::Widget*)
    */
-  Fl_Group* parent() const {return parent_;}
+  fltk3::Group* parent() const {return parent_;}
 
   /** Internal use only - "for hacks only".
   
       It is \em \b STRONGLY recommended not to use this method, because it
-      short-circuits Fl_Group's normal widget adding and removing methods,
-      if the widget is already a child widget of another Fl_Group.
+      short-circuits fltk3::Group's normal widget adding and removing methods,
+      if the widget is already a child widget of another fltk3::Group.
 
-      Use Fl_Group::add(fltk3::Widget*) and/or Fl_Group::remove(fltk3::Widget*) instead.
+      Use fltk3::Group::add(fltk3::Widget*) and/or fltk3::Group::remove(fltk3::Widget*) instead.
   */
-  void parent(Fl_Group* p) {parent_ = p;} // for hacks only, use Fl_Group::add()
+  void parent(fltk3::Group* p) {parent_ = p;} // for hacks only, use fltk3::Group::add()
 
   /** Gets the widget type.
       Returns the widget type value, which is used for Forms compatibility
@@ -930,13 +930,13 @@
    */
   fltk3::Window* window() const ;
 
-  /** Returns an Fl_Group pointer if this widget is an Fl_Group.
+  /** Returns an fltk3::Group pointer if this widget is an fltk3::Group.
   
-      \retval NULL if this widget is not derived from Fl_Group.
+      \retval NULL if this widget is not derived from fltk3::Group.
       \note This method is provided to avoid dynamic_cast.
       \todo More documentation ...
    */
-  virtual Fl_Group* as_group() {return 0;}
+  virtual fltk3::Group* as_group() {return 0;}
 
   /** Returns an fltk3::Window pointer if this widget is an fltk3::Window.
    

Modified: branches/branch-3.0/FL/Fl_Window.H
===================================================================
--- branches/branch-3.0/FL/Fl_Window.H	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/FL/Fl_Window.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -46,7 +46,7 @@
 
   Once you create a window, you usually add children fltk3::Widget
   's to it by using window->add(child) for each new widget.
-  See Fl_Group for more information on how to add and remove children.
+  See fltk3::Group for more information on how to add and remove children.
 
   There are several subclasses of fltk3::Window that provide
   double-buffering, overlay, menu, and OpenGL support.
@@ -55,7 +55,7 @@
   using the window manager and fltk3::modal() is zero or equal to the
   window. fltk3::Window has a default callback that calls fltk3::Window::hide().
 */
-class FL_EXPORT fltk3::Window : public Fl_Group {
+class FL_EXPORT fltk3::Window : public fltk3::Group {
 
   friend class ::Fl_X;
   Fl_X *i; // points at the system-specific stuff
@@ -111,7 +111,7 @@
 
   /**
     Creates a window from the given size and title. 
-    If Fl_Group::current() is not NULL, the window is created as a 
+    If fltk3::Group::current() is not NULL, the window is created as a 
     subwindow of the parent window.
     
     The first form of the constructor creates a top-level window
@@ -160,7 +160,7 @@
     these changes are communicated to the window server (which may
     refuse that size and cause a further resize).  If shown() is
     false, the size and position are used when show() is called.
-    See Fl_Group for the effect of resizing on the child widgets.
+    See fltk3::Group for the effect of resizing on the child widgets.
 
     You can also call the fltk3::Widget methods size(x,y) and position(w,h),
     which are inline wrappers for this virtual function.
@@ -405,7 +405,7 @@
 
   static fltk3::Window *current();
   /**
-    Sets things up so that the drawing functions in <FL/fl_draw.H> will go
+    Sets things up so that the drawing functions in <fltk3/fl_draw.H> will go
     into this window. This is useful for incremental update of windows, such
     as in an idle callback, which will make your program behave much better
     if it draws a slow graphic. <B>Danger: incremental update is very hard to
@@ -430,7 +430,7 @@
     you set it in a static variable and call this only if the new cursor
     is different.
 
-    The type Fl_Cursor is an enumeration defined in <FL/Enumerations.H>.
+    The type Fl_Cursor is an enumeration defined in <fltk3/Enumerations.H>.
     (Under X you can get any XC_cursor value by passing 
     Fl_Cursor((XC_foo/2)+1)).  The colors only work on X, they are
     not implemented on WIN32.

Modified: branches/branch-3.0/FL/Fl_Wizard.H
===================================================================
--- branches/branch-3.0/FL/Fl_Wizard.H	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/FL/Fl_Wizard.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -35,7 +35,7 @@
 #ifndef _Fl_Wizard_H_
 #  define _Fl_Wizard_H_
 
-#  include <FL/Fl_Group.H>
+#  include <fltk3/Fl_Group.H>
 
 
 /**
@@ -45,9 +45,9 @@
     step a user through configuration or troubleshooting tasks.
 
     <P>As with Fl_Tabs, wizard panes are composed of child (usually
-    Fl_Group) widgets. Navigation buttons must be added separately.
+    fltk3::Group) widgets. Navigation buttons must be added separately.
 */
-class FL_EXPORT Fl_Wizard : public Fl_Group
+class FL_EXPORT Fl_Wizard : public fltk3::Group
 {
   fltk3::Widget *value_;
 

Modified: branches/branch-3.0/FL/forms.H
===================================================================
--- branches/branch-3.0/FL/forms.H	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/FL/forms.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -270,9 +270,9 @@
 }
 FL_EXPORT void fl_end_form();
 inline void fl_addto_form(fltk3::Window* f) {f->begin();}
-inline Fl_Group* fl_bgn_group() {return new Fl_Group(0,0,0,0,0);}
-inline void fl_end_group() {Fl_Group::current()->forms_end();}
-inline void fl_addto_group(fltk3::Widget* o) {((Fl_Group* )o)->begin();}
+inline fltk3::Group* fl_bgn_group() {return new fltk3::Group(0,0,0,0,0);}
+inline void fl_end_group() {fltk3::Group::current()->forms_end();}
+inline void fl_addto_group(fltk3::Widget* o) {((fltk3::Group* )o)->begin();}
 #define resizebox _ddfdesign_kludge()
 
 inline void fl_scale_form(fltk3::Window* f, double x, double y) {

Modified: branches/branch-3.0/FL/mac.H
===================================================================
--- branches/branch-3.0/FL/mac.H	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/FL/mac.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -25,13 +25,13 @@
 //     http://www.fltk.org/str.php
 //
 
-// Do not directly include this file, instead use <FL/x.H>.  It will
+// Do not directly include this file, instead use <fltk3/x.H>.  It will
 // include this file if "__APPLE__" is defined.  This is to encourage
 // portability of even the system-specific code...
 #ifndef FL_DOXYGEN
 
 #if !defined(Fl_X_H)
-#  error "Never use <FL/mac.H> directly; include <FL/x.H> instead."
+#  error "Never use <fltk3/mac.H> directly; include <fltk3/x.H> instead."
 #endif // !Fl_X_H
 
 // Standard MacOS Carbon API includes...
@@ -176,7 +176,7 @@
 
 /** 
  * \brief Mac OS X: attaches a callback to the "About myprog" item of the system application menu.
- * \note  #include <FL/x.H>
+ * \note  #include <fltk3/x.H>
  *
  * \param cb   a callback that will be called by "About myprog" menu item
  *		   with NULL 1st argument.

Modified: branches/branch-3.0/FL/names.h
===================================================================
--- branches/branch-3.0/FL/names.h	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/FL/names.h	2010-03-30 17:38:49 UTC (rev 7366)
@@ -37,11 +37,11 @@
 /**
   This is an array of event names you can use to convert event numbers into names.
 
-  The array gets defined inline wherever your '\#include <FL/names.h>' appears.
+  The array gets defined inline wherever your '\#include <fltk3/names.h>' appears.
 
   \b Example:
   \code
-  #include <FL/names.h>		// array will be defined here
+  #include <fltk3/names.h>		// array will be defined here
   int MyClass::handle(int e) {
       printf("Event was %s (%d)\n", fl_eventnames[e], e);
       // ..resulting output might be e.g. "Event was FL_PUSH (1)"..
@@ -80,11 +80,11 @@
 /**
   This is an array of font names you can use to convert font numbers into names.
 
-  The array gets defined inline wherever your '\#include <FL/names.h>' appears.
+  The array gets defined inline wherever your '\#include <fltk3/names.h>' appears.
 
   \b Example:
   \code
-  #include <FL/names.h>		// array will be defined here
+  #include <fltk3/names.h>		// array will be defined here
   int MyClass::my_callback(fltk3::Widget *w, void*) {
       int fnum = w->labelfont();
       // Resulting output might be e.g. "Label's font is FL_HELVETICA (0)"

Modified: branches/branch-3.0/FL/win32.H
===================================================================
--- branches/branch-3.0/FL/win32.H	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/FL/win32.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -25,13 +25,13 @@
 //     http://www.fltk.org/str.php
 //
 
-// Do not directly include this file, instead use <FL/x.H>.  It will
+// Do not directly include this file, instead use <fltk3/x.H>.  It will
 // include this file if WIN32 is defined.  This is to encourage
 // portability of even the system-specific code...
 
 #ifndef FL_DOXYGEN
 #ifndef Fl_X_H
-#  error "Never use <FL/win32.H> directly; include <FL/x.H> instead."
+#  error "Never use <fltk3/win32.H> directly; include <fltk3/x.H> instead."
 #endif // !Fl_X_H
 
 #include <windows.h>
@@ -45,7 +45,7 @@
 #define VK_APPS 0x5D
 #endif
 
-#include <FL/Fl_Device.H>
+#include <fltk3/Fl_Device.H>
 
 // some random X equivalents
 typedef HWND NativeWindow;

Added: branches/branch-3.0/fltk3/Enumerations.H
===================================================================
--- branches/branch-3.0/fltk3/Enumerations.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Enumerations.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,890 @@
+//
+// "$Id: Enumerations.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// Enumerations for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/** \file
+ *  This file contains type definitions and general enumerations.
+ */
+
+#ifndef Fl_Enumerations_H
+#define Fl_Enumerations_H
+
+#  include "Fl_Export.H"
+#  include "fl_types.h"
+
+/** \name Version Numbers
+
+    FLTK defines some constants to help the programmer to
+    find out, for which FLTK version a program is compiled.
+    
+    The following constants are defined:
+ */
+/*@{*/
+
+/**
+ * The major release version of this FLTK library.
+   \sa FL_VERSION
+ */
+#define FL_MAJOR_VERSION	1
+
+/**
+ * The minor release version for this library.
+ *
+ * FLTK remains mostly source-code compatible between minor version changes.
+ */
+#define FL_MINOR_VERSION	3
+
+/**
+ * The patch version for this library.
+ *
+ * FLTK remains binary compatible between patches.
+ */
+#define FL_PATCH_VERSION	0
+
+/**
+ *  The FLTK version number as a \em double.
+ *
+ *  This is changed slightly from the beta versions
+ *  because the old "const double" definition would not allow for conditional
+ *  compilation...
+ *
+ *  FL_VERSION is a double that describes the major and minor version numbers.
+ *  Version 1.1 is actually stored as 1.01 to allow for more than 9 minor
+ *  releases.
+ *
+ *  The FL_MAJOR_VERSION, FL_MINOR_VERSION, and FL_PATCH_VERSION constants
+ *  give the integral values for the major, minor, and patch releases
+ *  respectively.
+ */
+#define FL_VERSION		((double)FL_MAJOR_VERSION + \
+				 (double)FL_MINOR_VERSION * 0.01 + \
+				 (double)FL_PATCH_VERSION * 0.0001)
+
+/*@}*/	// group: Version Numbers
+
+/**
+ *  Every time a user moves the mouse pointer, clicks a button,
+ *  or presses a key, an event is generated and sent to your
+ *  application. Events can also come from other programs like the
+ *  window manager.
+ * 
+ *  Events are identified by the integer argument passed to the 
+ *  fltk3::Widget::handle() virtual method. Other information about the 
+ *  most recent event is stored in static locations and acquired  by 
+ *  calling the fltk3::event_*() methods. This static information remains 
+ *  valid until the next event is read from the window system, so it 
+ *  is ok to look at it outside of the handle() method.
+ *
+ *  \sa fltk3::event_text(), fltk3::event_key()
+ */
+enum Fl_Event {	// events
+  /** No event. */
+  FL_NO_EVENT		= 0,
+
+  /** A mouse button has gone down with the mouse pointing at this
+   *  widget. You can find out what button by calling fltk3::event_button(). 
+   *  You find out the mouse position by calling fltk3::event_x() and
+   *  fltk3::event_y().
+   *
+   *  A widget indicates that it "wants" the mouse click by returning non-zero 
+   *  from its fltk3::Widget::handle() method. It will then become the 
+   *  fltk3::pushed() widget and will get FL_DRAG and the matching FL_RELEASE events.  
+   *  If fltk3::Widget::handle() returns zero then FLTK will try sending the FL_PUSH 
+   *  to another widget. 
+   */
+  FL_PUSH		= 1,
+
+  /** A mouse button has been released. You can find out what button by 
+   *  calling fltk3::event_button().
+   *
+   *  In order to receive the FL_RELEASE event, the widget must return 
+   *  non-zero when handling FL_PUSH.
+   */
+  FL_RELEASE		= 2,
+
+  /** The mouse has been moved to point at this widget.  This can
+   *  be used for highlighting feedback.  If a widget wants to
+   *  highlight or otherwise track the mouse, it indicates this by
+   *  returning non-zero from its handle() method. It then
+   *  becomes the fltk3::belowmouse() widget and will receive 
+   *  FL_MOVE and FL_LEAVE events.
+   */
+  FL_ENTER		= 3,
+
+  /** The mouse has moved out of the widget.
+   *  In order to receive the FL_LEAVE event, the widget must 
+   *  return non-zero when handling FL_ENTER.
+   */
+  FL_LEAVE		= 4,
+
+  /** The mouse has moved with a button held down. The current button state 
+   *  is in fltk3::event_state(). The mouse position is in fltk3::event_x() and 
+   *  fltk3::event_y().
+   *
+   *  In order to receive FL_DRAG events, the widget must return non-zero 
+   *  when handling FL_PUSH.
+   */
+  FL_DRAG		= 5,
+
+  /** This indicates an <I>attempt</I> to give a widget the keyboard focus.
+   *
+   *  If a widget wants the focus, it should change itself to display the 
+   *  fact that it has the focus, and return non-zero from its handle() method.
+   *  It then becomes the fltk3::focus() widget and gets FL_KEYDOWN, FL_KEYUP, 
+   *  and FL_UNFOCUS events.
+   *
+   *  The focus will change either because the window manager changed which 
+   *  window gets the focus, or because the user tried to navigate using tab, 
+   *  arrows, or other keys. You can check fltk3::event_key() to figure out why 
+   *  it moved. For navigation it will be the key pressed and interaction 
+   *  with the window manager it will be zero.
+   */
+  FL_FOCUS		= 6,
+  
+  /** This event is sent to the previous fltk3::focus() widget when another 
+   *  widget gets the focus or the window loses focus.
+   */
+  FL_UNFOCUS		= 7,
+
+  /** A key was pressed or released. The key can be found in fltk3::event_key().
+   *  The text that the key should insert can be found with fltk3::event_text() 
+   *  and its length is in fltk3::event_length(). If you use the key handle()
+   *  should return 1. If you return zero then FLTK assumes you ignored the 
+   *  key and will then attempt to send it to a parent widget. If none of 
+   *  them want it, it will change the event into a FL_SHORTCUT event.
+   *
+   *  To receive FL_KEYBOARD events you must also respond to the FL_FOCUS
+   *  and FL_UNFOCUS events.
+   *
+   *  If you are writing a text-editing widget you may also want to call 
+   *  the fltk3::compose() function to translate individual keystrokes into 
+   *  foreign characters.
+   *
+   *  FL_KEYUP events are sent to the widget that currently has focus. This 
+   *  is not necessarily the same widget that received the corresponding 
+   *  FL_KEYDOWN event because focus may have changed between events.
+   */
+  FL_KEYDOWN		= 8,
+
+  /** Equvalent to FL_KEYDOWN.
+   *  \see FL_KEYDOWN
+   */
+  FL_KEYBOARD		= 8,
+ 
+  /** Key release event.
+   *  \see FL_KEYDOWN
+   */
+  FL_KEYUP		= 9,
+
+  /** The user clicked the close button of a window.
+   *  This event is used internally only to trigger the callback of
+   *  fltk3::Window derived classed. The default callback closes the 
+   *  window calling fltk3::Window::hide().
+   */
+  FL_CLOSE		= 10,
+
+  /** The mouse has moved without any mouse buttons held down. 
+   *  This event is sent to the fltk3::belowmouse() widget.
+   *
+   *  In order to receive FL_MOVE events, the widget must return 
+   *  non-zero when handling FL_ENTER.
+   */
+  FL_MOVE		= 11,
+
+  /** If the fltk3::focus() widget is zero or ignores an FL_KEYBOARD
+   *  event then FLTK tries sending this event to every widget it 
+   *  can, until one of them returns non-zero. FL_SHORTCUT is first 
+   *  sent to the fltk3::belowmouse() widget, then its parents and siblings, 
+   *  and eventually to every widget in the window, trying to find an 
+   *  object that returns non-zero. FLTK tries really hard to not to ignore 
+   *  any keystrokes!
+   *
+   *  You can also make "global" shortcuts by using fltk3::add_handler(). A 
+   *  global shortcut will work no matter what windows are displayed or 
+   *  which one has the focus.
+   */
+  FL_SHORTCUT		= 12,
+
+  /** This widget is no longer active, due to fltk3::Widget::deactivate() 
+   *  being called on it or one of its parents. fltk3::Widget::active() may 
+   *  still be true after this, the widget is only active if fltk3::Widget::active()
+   *  is true on it and all its parents (use fltk3::Widget::active_r() to check this).
+   */
+  FL_DEACTIVATE		= 13,
+
+  /** This widget is now active, due to fltk3::Widget::activate() being 
+   *  called on it or one of its parents.
+   */
+  FL_ACTIVATE		= 14,
+
+  /** This widget is no longer visible, due to fltk3::Widget::hide() being 
+   *  called on it or one of its parents, or due to a parent window being 
+   *  minimized.  fltk3::Widget::visible() may still be true after this, but the 
+   *  widget is visible only if visible() is true for it and all its 
+   *  parents (use fltk3::Widget::visible_r() to check this).
+   */
+  FL_HIDE		= 15,
+
+  /** This widget is visible again, due to fltk3::Widget::show() being called on 
+   *  it or one of its parents, or due to a parent window being restored. 
+   *  Child Fl_Windows respond to this by actually creating the window if not 
+   *  done already, so if you subclass a window, be sure to pass FL_SHOW 
+   *  to the base class fltk3::Widget::handle() method!
+   */
+  FL_SHOW		= 16,
+
+  /** You should get this event some time after you call fltk3::paste(). 
+   *  The contents of fltk3::event_text() is the text to insert and the number 
+   *  of characters is in fltk3::event_length().
+   */
+  FL_PASTE		= 17,
+
+  /** The fltk3::selection_owner() will get this event before the selection is 
+   *  moved to another widget. This indicates that some other widget or program 
+   *  has claimed the selection. Motif programs used this to clear the selection 
+   *  indication. Most modern programs ignore this.
+   */
+  FL_SELECTIONCLEAR	= 18,
+
+  /** The user has moved the mouse wheel. The fltk3::event_dx() and fltk3::event_dy()
+   *  methods can be used to find the amount to scroll horizontally and vertically.
+   */
+  FL_MOUSEWHEEL		= 19,
+
+  /** The mouse has been moved to point at this widget. A widget that is 
+   *  interested in receiving drag'n'drop data must return 1 to receive 
+   *  FL_DND_DRAG, FL_DND_LEAVE and FL_DND_RELEASE events.
+   */
+  FL_DND_ENTER		= 20,
+
+  /** The mouse has been moved inside a widget while dragging data.  A 
+   *  widget that is interested in receiving drag'n'drop data should 
+   *  indicate the possible drop position.
+   */
+  FL_DND_DRAG		= 21,
+
+  /** The mouse has moved out of the widget.
+   */
+  FL_DND_LEAVE		= 22,
+
+  /** The user has released the mouse button dropping data into the widget. 
+   *  If the widget returns 1, it will receive the data in the immediately 
+   *  following FL_PASTE event.
+   */
+  FL_DND_RELEASE	= 23
+};
+
+/** \name When Conditions */
+/*@{*/
+/** These constants determine when a callback is performed.
+ *
+ *  \sa fltk3::Widget::when();
+ *  \todo doxygen comments for values are incomplete and maybe wrong or unclear
+ */
+enum Fl_When { // fltk3::Widget::when():
+  FL_WHEN_NEVER		= 0,	///< Never call the callback
+  FL_WHEN_CHANGED	= 1,	///< Do the callback only when the widget value changes
+  FL_WHEN_NOT_CHANGED	= 2,	///< Do the callback whenever the user interacts with the widget
+  FL_WHEN_RELEASE	= 4,	///< Do the callback when the button or key is released and the value changes
+  FL_WHEN_RELEASE_ALWAYS= 6,	///< Do the callback when the button or key is released, even if the value doesn't change
+  FL_WHEN_ENTER_KEY	= 8,	///< Do the callback when the user presses the ENTER key and the value changes
+  FL_WHEN_ENTER_KEY_ALWAYS=10,	///< Do the callback when the user presses the ENTER key, even if the value doesn't change
+  FL_WHEN_ENTER_KEY_CHANGED=11	///< ?
+};
+
+/*@}*/		// group: When Conditions
+
+/** \name Mouse and Keyboard Events
+
+	This and the following constants define the non-ASCII keys on the
+	keyboard for FL_KEYBOARD and FL_SHORTCUT events.
+
+	\todo	FL_Button and FL_key... constants could be structured better
+		(use an enum or some doxygen grouping ?)
+  
+	\sa	fltk3::event_key() and fltk3::get_key(int) (use ascii letters for all other keys):
+ */
+
+/*@{*/
+
+// FIXME: These codes collide with valid Unicode keys
+
+#define FL_Button	0xfee8	///< A mouse button; use Fl_Button + n for mouse button n.
+#define FL_BackSpace	0xff08	///< The backspace key.
+#define FL_Tab		0xff09	///< The tab key.
+#define FL_Enter	0xff0d	///< The enter key. 
+#define FL_Pause	0xff13	///< The pause key.
+#define FL_Scroll_Lock	0xff14	///< The scroll lock key.
+#define FL_Escape	0xff1b	///< The escape key.
+#define FL_Home		0xff50	///< The home key.
+#define FL_Left		0xff51	///< The left arrow key.
+#define FL_Up		0xff52	///< The up arrow key.
+#define FL_Right	0xff53	///< The right arrow key.
+#define FL_Down		0xff54	///< The down arrow key.
+#define FL_Page_Up	0xff55	///< The page-up key.
+#define FL_Page_Down	0xff56	///< The page-down key.
+#define FL_End		0xff57	///< The end key.
+#define FL_Print	0xff61	///< The print (or print-screen) key.
+#define FL_Insert	0xff63	///< The insert key. 
+#define FL_Menu		0xff67	///< The menu key.
+#define FL_Help		0xff68	///< The 'help' key on Mac keyboards
+#define FL_Num_Lock	0xff7f	///< The num lock key.
+#define FL_KP		0xff80	///< One of the keypad numbers; use FL_KP + n for number n.
+#define FL_KP_Enter	0xff8d	///< The enter key on the keypad, same as Fl_KP+'\\r'.
+#define FL_KP_Last	0xffbd	///< The last keypad key; use to range-check keypad.
+#define FL_F		0xffbd	///< One of the function keys; use FL_F + n for function key n.
+#define FL_F_Last	0xffe0	///< The last function key; use to range-check function keys.
+#define FL_Shift_L	0xffe1	///< The lefthand shift key.
+#define FL_Shift_R	0xffe2	///< The righthand shift key.
+#define FL_Control_L	0xffe3	///< The lefthand control key.
+#define FL_Control_R	0xffe4	///< The righthand control key.
+#define FL_Caps_Lock	0xffe5	///< The caps lock key.
+#define FL_Meta_L	0xffe7	///< The left meta/Windows key.
+#define FL_Meta_R	0xffe8	///< The right meta/Windows key.
+#define FL_Alt_L	0xffe9	///< The left alt key.
+#define FL_Alt_R	0xffea	///< The right alt key. 
+#define FL_Delete	0xffff	///< The delete key.
+
+/*@}*/	// group: Mouse and Keyboard Events
+
+/** \name Mouse Buttons
+
+	These constants define the button numbers for FL_PUSH and FL_RELEASE events.
+	
+	\sa fltk3::event_button()
+*/
+
+/*@{*/
+
+#define FL_LEFT_MOUSE	1	///< The left mouse button
+#define FL_MIDDLE_MOUSE	2	///< The middle mouse button
+#define FL_RIGHT_MOUSE	3	///< The right mouse button
+
+/*@}*/		// group: Mouse Buttons
+
+
+/** \name	Event States
+
+	The following constants define bits in the fltk3::event_state() value.
+*/
+
+/*@{*/		// group: Event States
+
+// FIXME: it would be nice to have the modifiers in the upper 8 bit so that
+//        a unicode ke (24bit) can be sent as an unsigned with the modifiers.
+
+#define FL_SHIFT	0x00010000	///< One of the shift keys is down
+#define FL_CAPS_LOCK	0x00020000	///< The caps lock is on
+#define FL_CTRL		0x00040000	///< One of the ctrl keys is down
+#define FL_ALT		0x00080000	///< One of the alt keys is down
+#define FL_NUM_LOCK	0x00100000	///< The num lock is on
+					// most X servers do this?
+#define FL_META		0x00400000	///< One of the meta/Windows keys is down
+					// correct for XFree86
+#define FL_SCROLL_LOCK	0x00800000	///< The scroll lock is on
+					// correct for XFree86
+#define FL_BUTTON1	0x01000000	///< Mouse button 1 is pushed
+#define FL_BUTTON2	0x02000000	///< Mouse button 2 is pushed
+#define FL_BUTTON3	0x04000000	///< Mouse button 3 is pushed
+#define FL_BUTTONS	0x7f000000	///< Any mouse button is pushed
+#define FL_BUTTON(n)	(0x00800000<<(n)) ///< Mouse button n (n > 0) is pushed
+
+#define FL_KEY_MASK 0x0000ffff  ///< All keys are 16 bit for now 
+                                //   FIXME: Unicode needs 24 bits!
+
+#ifdef __APPLE__
+#  define FL_COMMAND	FL_META   ///< An alias for FL_CTRL on WIN32 and X11, or FL_META on MacOS X
+#  define FL_CONTROL  FL_CTRL   ///< An alias for FL_META on WIN32 and X11, or FL_META on MacOS X
+#else
+#  define FL_COMMAND	FL_CTRL		///< An alias for FL_CTRL on WIN32 and X11, or FL_META on MacOS X
+#  define FL_CONTROL  FL_META   ///< An alias for FL_META on WIN32 and X11, or FL_META on MacOS X
+#endif // __APPLE__
+
+/*@}*/		// group: Event States
+
+/** \name Box Types
+    \brief FLTK standard box types
+    
+    This enum defines the standard box types included with FLTK.
+    
+    FL_NO_BOX means nothing is drawn at all, so whatever is already 
+    on the screen remains. The FL_..._FRAME types only draw their edges, 
+    leaving the interior unchanged. The blue color in Figure 1 
+    is the area that is not drawn by the frame types.
+    
+    \image html boxtypes.gif "Figure 1: FLTK standard box types"
+    \image latex boxtypes.eps "FLTK standard box types" width=10cm
+    \todo	Description of boxtypes is incomplete.
+    		See below for the defined enum Fl_Boxtype.
+		\see src/Fl_get_system_colors.cxx
+*/
+/*@{*/
+enum Fl_Boxtype { // boxtypes (if you change these you must fix fl_boxtype.C):
+
+  FL_NO_BOX = 0,		///< nothing is drawn at all, this box is invisible
+  FL_FLAT_BOX,			///< a flat box
+  FL_UP_BOX,			///< see figure 1
+  FL_DOWN_BOX,			///< see figure 1
+  FL_UP_FRAME,			///< see figure 1
+  FL_DOWN_FRAME,		///< see figure 1
+  FL_THIN_UP_BOX,		///< see figure 1
+  FL_THIN_DOWN_BOX,		///< see figure 1
+  FL_THIN_UP_FRAME,		///< see figure 1
+  FL_THIN_DOWN_FRAME,		///< see figure 1
+  FL_ENGRAVED_BOX,		///< see figure 1
+  FL_EMBOSSED_BOX,		///< see figure 1
+  FL_ENGRAVED_FRAME,		///< see figure 1
+  FL_EMBOSSED_FRAME,		///< see figure 1
+  FL_BORDER_BOX,		///< see figure 1
+  _FL_SHADOW_BOX,		///< see figure 1
+  FL_BORDER_FRAME,		///< see figure 1
+  _FL_SHADOW_FRAME,		///< see figure 1
+  _FL_ROUNDED_BOX,		///< see figure 1
+  _FL_RSHADOW_BOX,		///< see figure 1
+  _FL_ROUNDED_FRAME,		///< see figure 1
+  _FL_RFLAT_BOX,		///< see figure 1
+  _FL_ROUND_UP_BOX,		///< see figure 1
+  _FL_ROUND_DOWN_BOX,		///< see figure 1
+  _FL_DIAMOND_UP_BOX,		///< see figure 1
+  _FL_DIAMOND_DOWN_BOX,		///< see figure 1
+  _FL_OVAL_BOX,			///< see figure 1
+  _FL_OSHADOW_BOX,		///< see figure 1
+  _FL_OVAL_FRAME,		///< see figure 1
+  _FL_OFLAT_BOX,		///< see figure 1
+  _FL_PLASTIC_UP_BOX,		///< plastic version of FL_UP_BOX
+  _FL_PLASTIC_DOWN_BOX,		///< plastic version of FL_DOWN_BOX
+  _FL_PLASTIC_UP_FRAME,		///< plastic version of FL_UP_FRAME
+  _FL_PLASTIC_DOWN_FRAME,	///< plastic version of FL_DOWN_FRAME
+  _FL_PLASTIC_THIN_UP_BOX,	///< plastic version of FL_THIN_UP_BOX
+  _FL_PLASTIC_THIN_DOWN_BOX,	///< plastic version of FL_THIN_DOWN_BOX
+  _FL_PLASTIC_ROUND_UP_BOX,	///< plastic version of FL_ROUND_UP_BOX
+  _FL_PLASTIC_ROUND_DOWN_BOX,	///< plastic version of FL_ROUND_DOWN_BOX
+  _FL_GTK_UP_BOX,		///< gtk+ version of FL_UP_BOX
+  _FL_GTK_DOWN_BOX,		///< gtk+ version of FL_DOWN_BOX
+  _FL_GTK_UP_FRAME,		///< gtk+ version of FL_UP_FRAME
+  _FL_GTK_DOWN_FRAME,		///< gtk+ version of FL_DOWN_RAME
+  _FL_GTK_THIN_UP_BOX,		///< gtk+ version of FL_THIN_UP_BOX
+  _FL_GTK_THIN_DOWN_BOX,	///< gtk+ version of FL_THIN_DOWN_BOX
+  _FL_GTK_THIN_UP_FRAME,	///< gtk+ version of FL_UP_FRAME
+  _FL_GTK_THIN_DOWN_FRAME,	///< gtk+ version of FL_THIN_DOWN_FRAME
+  _FL_GTK_ROUND_UP_BOX,		///< gtk+ version of FL_ROUND_UP_BOX
+  _FL_GTK_ROUND_DOWN_BOX,	///< gtk+ version of FL_ROUND_DOWN_BOX
+  FL_FREE_BOXTYPE		///< the first free box type for creation of new box types
+};
+extern FL_EXPORT Fl_Boxtype fl_define_FL_ROUND_UP_BOX();
+#define FL_ROUND_UP_BOX fl_define_FL_ROUND_UP_BOX()
+#define FL_ROUND_DOWN_BOX (Fl_Boxtype)(fl_define_FL_ROUND_UP_BOX()+1)
+extern FL_EXPORT Fl_Boxtype fl_define_FL_SHADOW_BOX();
+#define FL_SHADOW_BOX fl_define_FL_SHADOW_BOX()
+#define FL_SHADOW_FRAME (Fl_Boxtype)(fl_define_FL_SHADOW_BOX()+2)
+extern FL_EXPORT Fl_Boxtype fl_define_FL_ROUNDED_BOX();
+#define FL_ROUNDED_BOX fl_define_FL_ROUNDED_BOX()
+#define FL_ROUNDED_FRAME (Fl_Boxtype)(fl_define_FL_ROUNDED_BOX()+2)
+extern FL_EXPORT Fl_Boxtype fl_define_FL_RFLAT_BOX();
+#define FL_RFLAT_BOX fl_define_FL_RFLAT_BOX()
+extern FL_EXPORT Fl_Boxtype fl_define_FL_RSHADOW_BOX();
+#define FL_RSHADOW_BOX fl_define_FL_RSHADOW_BOX()
+extern FL_EXPORT Fl_Boxtype fl_define_FL_DIAMOND_BOX();
+#define FL_DIAMOND_UP_BOX fl_define_FL_DIAMOND_BOX()
+#define FL_DIAMOND_DOWN_BOX (Fl_Boxtype)(fl_define_FL_DIAMOND_BOX()+1)
+extern FL_EXPORT Fl_Boxtype fl_define_FL_OVAL_BOX();
+#define FL_OVAL_BOX fl_define_FL_OVAL_BOX()
+#define FL_OSHADOW_BOX (Fl_Boxtype)(fl_define_FL_OVAL_BOX()+1)
+#define FL_OVAL_FRAME (Fl_Boxtype)(fl_define_FL_OVAL_BOX()+2)
+#define FL_OFLAT_BOX (Fl_Boxtype)(fl_define_FL_OVAL_BOX()+3)
+
+extern FL_EXPORT Fl_Boxtype fl_define_FL_PLASTIC_UP_BOX();
+#define FL_PLASTIC_UP_BOX fl_define_FL_PLASTIC_UP_BOX()
+#define FL_PLASTIC_DOWN_BOX (Fl_Boxtype)(fl_define_FL_PLASTIC_UP_BOX()+1)
+#define FL_PLASTIC_UP_FRAME (Fl_Boxtype)(fl_define_FL_PLASTIC_UP_BOX()+2)
+#define FL_PLASTIC_DOWN_FRAME (Fl_Boxtype)(fl_define_FL_PLASTIC_UP_BOX()+3)
+#define FL_PLASTIC_THIN_UP_BOX (Fl_Boxtype)(fl_define_FL_PLASTIC_UP_BOX()+4)
+#define FL_PLASTIC_THIN_DOWN_BOX (Fl_Boxtype)(fl_define_FL_PLASTIC_UP_BOX()+5)
+#define FL_PLASTIC_ROUND_UP_BOX (Fl_Boxtype)(fl_define_FL_PLASTIC_UP_BOX()+6)
+#define FL_PLASTIC_ROUND_DOWN_BOX (Fl_Boxtype)(fl_define_FL_PLASTIC_UP_BOX()+7)
+
+extern FL_EXPORT Fl_Boxtype fl_define_FL_GTK_UP_BOX();
+#define FL_GTK_UP_BOX fl_define_FL_GTK_UP_BOX()
+#define FL_GTK_DOWN_BOX (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+1)
+#define FL_GTK_UP_FRAME (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+2)
+#define FL_GTK_DOWN_FRAME (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+3)
+#define FL_GTK_THIN_UP_BOX (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+4)
+#define FL_GTK_THIN_DOWN_BOX (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+5)
+#define FL_GTK_THIN_UP_FRAME (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+6)
+#define FL_GTK_THIN_DOWN_FRAME (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+7)
+#define FL_GTK_ROUND_UP_BOX (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+8)
+#define FL_GTK_ROUND_DOWN_BOX (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+9)
+
+// conversions of box types to other boxtypes:
+/**
+  Get the filled version of a frame.
+  If no filled version of a given frame exists, the behavior of this function
+  is undefined and some random box or frame is returned,
+  */
+inline Fl_Boxtype fl_box(Fl_Boxtype b) {
+  return (Fl_Boxtype)((b<FL_UP_BOX||b%4>1)?b:(b-2));
+}
+/**
+  Get the "pressed" or "down" version of a box.
+  If no "down" version of a given box exists, the behavior of this function
+  is undefined and some random box or frame is returned,
+  */
+inline Fl_Boxtype fl_down(Fl_Boxtype b) {
+  return (Fl_Boxtype)((b<FL_UP_BOX)?b:(b|1));
+}
+/**
+  Get the unfilled, frame only version of a box.
+  If no frame version of a given box exists, the behavior of this function
+  is undefined and some random box or frame is returned,
+  */
+inline Fl_Boxtype fl_frame(Fl_Boxtype b) {
+  return (Fl_Boxtype)((b%4<2)?b:(b+2));
+}
+
+// back-compatibility box types:
+#define FL_FRAME FL_ENGRAVED_FRAME
+#define FL_FRAME_BOX FL_ENGRAVED_BOX
+#define FL_CIRCLE_BOX FL_ROUND_DOWN_BOX
+#define FL_DIAMOND_BOX FL_DIAMOND_DOWN_BOX
+
+/*@}*/	// group: Box Types
+
+/**
+   The labeltype() method sets the type of the label.
+   
+   The following standard label types are included:
+   
+   \todo	The doxygen comments are incomplete, and some labeltypes
+   		are starting with an underscore. Also, there are three
+		external functions undocumented (yet):
+		  - fl_define_FL_SHADOW_LABEL()
+		  - fl_define_FL_ENGRAVED_LABEL()
+		  - fl_define_FL_EMBOSSED_LABEL()
+*/
+enum Fl_Labeltype {	// labeltypes:
+  FL_NORMAL_LABEL	= 0,	///< draws the text (0)
+  FL_NO_LABEL,			///< does nothing
+  _FL_SHADOW_LABEL,		///< draws a drop shadow under the text
+  _FL_ENGRAVED_LABEL,		///< draws edges as though the text is engraved
+  _FL_EMBOSSED_LABEL,		///< draws edges as thought the text is raised
+  _FL_MULTI_LABEL,		///< ?
+  _FL_ICON_LABEL,		///< draws the icon associated with the text
+  _FL_IMAGE_LABEL,		///< ?
+
+  FL_FREE_LABELTYPE		///< first free labeltype to use for creating own labeltypes
+};
+
+/** 
+  Sets the current  label type end return its corresponding Fl_Labeltype value. 
+  @{
+*/
+#define FL_SYMBOL_LABEL FL_NORMAL_LABEL
+extern Fl_Labeltype FL_EXPORT fl_define_FL_SHADOW_LABEL();
+#define FL_SHADOW_LABEL fl_define_FL_SHADOW_LABEL()
+extern Fl_Labeltype FL_EXPORT fl_define_FL_ENGRAVED_LABEL();
+#define FL_ENGRAVED_LABEL fl_define_FL_ENGRAVED_LABEL()
+extern Fl_Labeltype FL_EXPORT fl_define_FL_EMBOSSED_LABEL();
+#define FL_EMBOSSED_LABEL fl_define_FL_EMBOSSED_LABEL()
+/** @} */
+
+/** \name Alignment Flags */
+/*@{*/
+/** Flags to control the label alignment. 
+ *  This controls how the label is displayed next to or inside the widget. 
+ *  The default value is FL_ALIGN_CENTER for most widgets, which centers the label
+ *  inside the widget.
+ *
+ *  Flags can be or'd to achieve a combination of alignments.
+ *  \see #FL_ALIGN_CENTER, etc.
+ */
+typedef unsigned Fl_Align;
+  /** Align the label horizontally in the middle. */
+const Fl_Align FL_ALIGN_CENTER		= (Fl_Align)0;
+  /** Align the label at the top of the widget. Inside labels appear below the top,
+   *  outside labels are drawn on top of the widget. */
+const Fl_Align FL_ALIGN_TOP		= (Fl_Align)1;
+  /** Align the label at the bottom of the widget. */
+const Fl_Align FL_ALIGN_BOTTOM		= (Fl_Align)2;
+  /** Align the label at the left of the widget. Inside labels appear left-justified
+   *  starting at the left side of the widget, outside labels are right-justified and
+   *  drawn to the left of the widget. */
+const Fl_Align FL_ALIGN_LEFT		= (Fl_Align)4;
+  /** Align the label to the right of the widget. */
+const Fl_Align FL_ALIGN_RIGHT		= (Fl_Align)8;
+  /** Draw the label inside of the widget. */
+const Fl_Align FL_ALIGN_INSIDE		= (Fl_Align)16;
+  /** If the label contains an image, draw the text on top of the image. */
+const Fl_Align FL_ALIGN_TEXT_OVER_IMAGE	= (Fl_Align)32;
+  /** If the label contains an image, draw the text below the image. */
+const Fl_Align FL_ALIGN_IMAGE_OVER_TEXT	= (Fl_Align)0;
+  /** All parts of the label that are lager than the widget will not be drawn . */
+const Fl_Align FL_ALIGN_CLIP		= (Fl_Align)64;
+  /** Wrap text that does not fit the width of the widget. */
+const Fl_Align FL_ALIGN_WRAP		= (Fl_Align)128;
+const Fl_Align FL_ALIGN_TOP_LEFT	= FL_ALIGN_TOP | FL_ALIGN_LEFT;
+const Fl_Align FL_ALIGN_TOP_RIGHT	= FL_ALIGN_TOP | FL_ALIGN_RIGHT;
+const Fl_Align FL_ALIGN_BOTTOM_LEFT	= FL_ALIGN_BOTTOM | FL_ALIGN_LEFT;
+const Fl_Align FL_ALIGN_BOTTOM_RIGHT	= FL_ALIGN_BOTTOM | FL_ALIGN_RIGHT;
+const Fl_Align FL_ALIGN_LEFT_TOP	= FL_ALIGN_TOP_LEFT;
+const Fl_Align FL_ALIGN_RIGHT_TOP	= FL_ALIGN_TOP_RIGHT;
+const Fl_Align FL_ALIGN_LEFT_BOTTOM	= FL_ALIGN_BOTTOM_LEFT;
+const Fl_Align FL_ALIGN_RIGHT_BOTTOM	= FL_ALIGN_BOTTOM_RIGHT;
+const Fl_Align FL_ALIGN_NOWRAP		= (Fl_Align)0; // for back compatability
+/*@}*/
+
+/** \name Font Numbers */
+/*@{*/
+/** A font number is an index into the internal font table.
+
+    The following constants define the standard FLTK fonts:
+
+ */
+typedef int Fl_Font;
+
+// standard fonts
+
+const Fl_Font FL_HELVETICA              = 0;	///< Helvetica (or Arial) normal (0)
+const Fl_Font FL_HELVETICA_BOLD         = 1;	///< Helvetica (or Arial) bold
+const Fl_Font FL_HELVETICA_ITALIC       = 2;	///< Helvetica (or Arial) oblique
+const Fl_Font FL_HELVETICA_BOLD_ITALIC  = 3;	///< Helvetica (or Arial) bold-oblique
+const Fl_Font FL_COURIER                = 4;	///< Courier normal
+const Fl_Font FL_COURIER_BOLD           = 5;	///< Courier bold 
+const Fl_Font FL_COURIER_ITALIC         = 6;	///< Courier italic
+const Fl_Font FL_COURIER_BOLD_ITALIC    = 7;	///< Courier bold-italic
+const Fl_Font FL_TIMES                  = 8;	///< Times roman
+const Fl_Font FL_TIMES_BOLD             = 9;	///< Times roman bold
+const Fl_Font FL_TIMES_ITALIC           = 10;	///< Times roman italic
+const Fl_Font FL_TIMES_BOLD_ITALIC      = 11;	///< Times roman bold-italic
+const Fl_Font FL_SYMBOL                 = 12;	///< Standard symbol font
+const Fl_Font FL_SCREEN                 = 13;	///< Default monospaced screen font
+const Fl_Font FL_SCREEN_BOLD            = 14;	///< Default monospaced bold screen font
+const Fl_Font FL_ZAPF_DINGBATS          = 15;	///< Zapf-dingbats font
+
+const Fl_Font FL_FREE_FONT              = 16;	///< first one to allocate
+const Fl_Font FL_BOLD                   = 1;	///< add this to helvetica, courier, or times
+const Fl_Font FL_ITALIC                 = 2;	///< add this to helvetica, courier, or times
+const Fl_Font FL_BOLD_ITALIC            = 3;	///< add this to helvetica, courier, or times
+
+/*@}*/
+
+/** Size of a font in pixels.
+ *  This is the approximate height of a font in pixels.
+ */
+typedef int Fl_Fontsize;
+
+extern FL_EXPORT Fl_Fontsize FL_NORMAL_SIZE;	///< normal font size
+
+/** \name Colors */
+/*@{*/
+/** The Fl_Color type holds an FLTK color value.
+
+    Colors are either 8-bit indexes into a virtual colormap
+    or 24-bit RGB color values.
+    
+    Color indices occupy the lower 8 bits of the value, while
+    RGB colors occupy the upper 24 bits, for a byte organization of RGBI.
+    
+<pre>
+ Fl_Color => 0xrrggbbii
+                | | | |
+                | | | +--- index between 0 and 255
+                | | +----- blue color component (8 bit)
+                | +------- green component (8 bit)
+                +--------- red component (8 bit)
+ </pre>
+ 
+    A color can have either an index or an rgb value. Colors with rgb set 
+    and an index >0 are reserved for special use.
+ 
+ */
+
+typedef unsigned int Fl_Color;
+
+// Standard colors. These are used as default colors in widgets and altered as necessary
+const Fl_Color FL_FOREGROUND_COLOR  = 0;	///< the default foreground color (0) used for labels and text
+const Fl_Color FL_BACKGROUND2_COLOR = 7;	///< the default background color for text, list, and valuator widgets
+const Fl_Color FL_INACTIVE_COLOR    = 8;	///< the inactive foreground color
+const Fl_Color FL_SELECTION_COLOR   = 15;	///< the default selection/highlight color
+
+  // boxtypes generally limit themselves to these colors so
+  // the whole ramp is not allocated:
+
+const Fl_Color FL_GRAY0   = 32;	// 'A'
+const Fl_Color FL_DARK3   = 39;	// 'H'
+const Fl_Color FL_DARK2   = 45; // 'N'
+const Fl_Color FL_DARK1   = 47;	// 'P'
+const Fl_Color FL_BACKGROUND_COLOR  = 49;	// 'R' default background color
+const Fl_Color FL_LIGHT1  = 50;	// 'S'
+const Fl_Color FL_LIGHT2  = 52;	// 'U'
+const Fl_Color FL_LIGHT3  = 54;	// 'W'
+
+  // FLTK provides a 5x8x5 color cube that is used with colormap visuals
+
+const Fl_Color FL_BLACK   = 56;
+const Fl_Color FL_RED     = 88;
+const Fl_Color FL_GREEN   = 63;
+const Fl_Color FL_YELLOW  = 95;
+const Fl_Color FL_BLUE    = 216;
+const Fl_Color FL_MAGENTA = 248;
+const Fl_Color FL_CYAN    = 223;
+const Fl_Color FL_DARK_RED = 72;
+
+const Fl_Color FL_DARK_GREEN    = 60;
+const Fl_Color FL_DARK_YELLOW   = 76;
+const Fl_Color FL_DARK_BLUE     = 136;
+const Fl_Color FL_DARK_MAGENTA  = 152;
+const Fl_Color FL_DARK_CYAN     = 140;
+
+const Fl_Color FL_WHITE         = 255;
+
+
+#define FL_FREE_COLOR     (Fl_Color)16
+#define FL_NUM_FREE_COLOR 16
+#define FL_GRAY_RAMP      (Fl_Color)32
+#define FL_NUM_GRAY       24
+#define FL_GRAY           FL_BACKGROUND_COLOR
+#define FL_COLOR_CUBE     (Fl_Color)56
+#define FL_NUM_RED        5
+#define FL_NUM_GREEN      8
+#define FL_NUM_BLUE       5
+
+FL_EXPORT Fl_Color fl_inactive(Fl_Color c);
+
+FL_EXPORT Fl_Color fl_contrast(Fl_Color fg, Fl_Color bg);
+
+FL_EXPORT Fl_Color fl_color_average(Fl_Color c1, Fl_Color c2, float weight);
+
+inline Fl_Color fl_lighter(Fl_Color c) { return fl_color_average(c, FL_WHITE, .67f); }
+
+inline Fl_Color fl_darker(Fl_Color c) { return fl_color_average(c, FL_BLACK, .67f); }
+
+/** return 24-bit color value closest to \p r, \p g, \p b. */
+inline Fl_Color fl_rgb_color(uchar r, uchar g, uchar b) {
+  if (!r && !g && !b) return FL_BLACK;
+  else return (Fl_Color)(((((r << 8) | g) << 8) | b) << 8);
+}
+
+/** return 24-bit color value closest to \p grayscale */
+inline Fl_Color fl_rgb_color(uchar g) {
+  if (!g) return FL_BLACK;
+  else return (Fl_Color)(((((g << 8) | g) << 8) | g) << 8);
+}
+
+inline Fl_Color fl_gray_ramp(int i) {return (Fl_Color)(i+FL_GRAY_RAMP);}
+
+inline Fl_Color fl_color_cube(int r, int g, int b) {
+  return (Fl_Color)((b*FL_NUM_RED + r) * FL_NUM_GREEN + g + FL_COLOR_CUBE);}
+
+//*@}*/		// group: Colors
+
+/** \name Cursors
+
+    The following constants define the mouse cursors that are available in FLTK.
+    
+    The double-headed arrows are bitmaps provided by FLTK on X, the others
+    are provided by system-defined cursors.
+    
+    \todo	enum Fl_Cursor needs some more comments for values
+    		(and maybe an image), see fltk3/Enumerations.H
+*/
+enum Fl_Cursor {	// standard cursors
+  FL_CURSOR_DEFAULT	= 0,
+  FL_CURSOR_ARROW	= 35,
+  FL_CURSOR_CROSS	= 66,
+  FL_CURSOR_WAIT	= 76,
+  FL_CURSOR_INSERT	= 77,
+  FL_CURSOR_HAND	= 31,
+  FL_CURSOR_HELP	= 47,
+  FL_CURSOR_MOVE	= 27,
+  // fltk provides bitmaps for these:
+  FL_CURSOR_NS		= 78,
+  FL_CURSOR_WE		= 79,
+  FL_CURSOR_NWSE	= 80,
+  FL_CURSOR_NESW	= 81,
+  FL_CURSOR_NONE	= 255,
+  // for back compatability (non MSWindows ones):
+  FL_CURSOR_N		= 70,
+  FL_CURSOR_NE		= 69,
+  FL_CURSOR_E		= 49,
+  FL_CURSOR_SE		= 8,
+  FL_CURSOR_S		= 9,
+  FL_CURSOR_SW		= 7,
+  FL_CURSOR_W		= 36,
+  FL_CURSOR_NW		= 68
+  //FL_CURSOR_NS	= 22,
+  //FL_CURSOR_WE	= 55,
+};
+
+enum { // values for "when" passed to fltk3::add_fd()
+  FL_READ = 1,
+  FL_WRITE = 4,
+  FL_EXCEPT = 8
+};
+
+enum Fl_Mode { // visual types and Fl_Gl_Window::mode() (values match Glut)
+  FL_RGB	= 0,
+  FL_INDEX	= 1,
+  FL_SINGLE	= 0,
+  FL_DOUBLE	= 2,
+  FL_ACCUM	= 4,
+  FL_ALPHA	= 8,
+  FL_DEPTH	= 16,
+  FL_STENCIL	= 32,
+  FL_RGB8	= 64,
+  FL_MULTISAMPLE= 128,
+  FL_STEREO     = 256,
+  FL_FAKE_SINGLE = 512	// Fake single buffered windows using double-buffer
+};
+
+// image alpha blending
+
+#define FL_IMAGE_WITH_ALPHA 0x40000000
+
+// damage masks
+
+enum Fl_Damage {
+  FL_DAMAGE_CHILD    = 0x01,
+  FL_DAMAGE_EXPOSE   = 0x02,
+  FL_DAMAGE_SCROLL   = 0x04,
+  FL_DAMAGE_OVERLAY  = 0x08,
+  FL_DAMAGE_USER1    = 0x10,
+  FL_DAMAGE_USER2    = 0x20,
+  FL_DAMAGE_ALL      = 0x80
+};
+
+// FLTK 1.0.x compatibility definitions...
+#  ifdef FLTK_1_0_COMPAT
+#    define contrast	fl_contrast
+#    define down	fl_down
+#    define frame	fl_frame
+#    define inactive	fl_inactive
+#  endif // FLTK_1_0_COMPAT
+
+#endif
+
+//
+// End of "$Id: Enumerations.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl.H
===================================================================
--- branches/branch-3.0/fltk3/Fl.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,1087 @@
+//
+// "$Id: Fl.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// Main header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+    Fl static class.
+ */
+
+#ifndef Fl_H
+#  define Fl_H
+
+#ifdef HAVE_CAIRO
+# include <fltk3/Fl_Cairo.H>
+#endif
+
+#  include "fl_utf8.h"
+#  include "Enumerations.H"
+#  ifndef Fl_Object
+#    define Fl_Object fltk3::Widget	/**< for back compatibility - use fltk3::Widget! */
+#  endif
+
+#  ifdef check
+#    undef check
+#  endif
+
+namespace fltk3 {
+  class Window;
+  class Widget;
+}
+
+class Fl_Image;
+struct Fl_Label;
+
+
+/** \defgroup  callback_functions Callback function typedefs
+    \brief Typedefs for callback or handler functions passed as function parameters.
+
+    FLTK uses callback functions as parameters for some function calls, e.g. to
+    set up global event handlers (fltk3::add_handler()), to add a timeout handler
+    (fltk3::add_timeout()), and many more.
+
+    The typedefs defined in this group describe the function parameters used to set
+    up or clear the callback functions and should also be referenced to define the
+    callback function to handle such events in the user's code.
+
+    \see fltk3::add_handler(), fltk3::add_timeout(), fltk3::repeat_timeout(),
+	 fltk3::remove_timeout() and others
+  @{ */
+
+/** signature of some label drawing functions passed as parameters */
+typedef void (Fl_Label_Draw_F)(const Fl_Label *label, int x, int y, int w, int h, Fl_Align align);
+
+/** signature of some label measurement functions passed as parameters */
+typedef void (Fl_Label_Measure_F)(const Fl_Label *label, int &width, int &height);
+
+/** signature of some box drawing functions passed as parameters */
+typedef void (Fl_Box_Draw_F)(int x, int y, int w, int h, Fl_Color color);
+
+/** signature of some timeout callback functions passed as parameters */
+typedef void (*Fl_Timeout_Handler)(void *data);
+
+/** signature of some wakeup callback functions passed as parameters */
+typedef void (*Fl_Awake_Handler)(void *data);
+
+/** signature of add_idle callback functions passed as parameters */
+typedef void (*Fl_Idle_Handler)(void *data);
+
+/** signature of set_idle callback functions passed as parameters */
+typedef void (*Fl_Old_Idle_Handler)();
+
+/** signature of add_fd functions passed as parameters */
+typedef void (*Fl_FD_Handler)(int fd, void *data);
+
+/** signature of add_handler functions passed as parameters */
+typedef int (*Fl_Event_Handler)(int event);
+
+/** signature of set_abort functions passed as parameters */
+typedef void (*Fl_Abort_Handler)(const char *format,...);
+
+/** signature of set_atclose functions passed as parameters */
+typedef void (*Fl_Atclose_Handler)(fltk3::Window *window, void *data);
+
+/** signature of args functions passed as parameters */
+typedef int (*Fl_Args_Handler)(int argc, char **argv, int &i);
+
+/** @} */ /* group callback_functions */
+
+/**
+  The fltk3 is the FLTK global (static) containing
+  state information and global methods for the current application.
+*/
+namespace fltk3 {
+  
+#ifndef FL_DOXYGEN
+  extern int e_number;
+  extern int e_x;
+  extern int e_y;
+  extern int e_x_root;
+  extern int e_y_root;
+  extern int e_dx;
+  extern int e_dy;
+  extern int e_state;
+  extern int e_clicks;
+  extern int e_is_click;
+  extern int e_keysym;
+  extern char* e_text;
+  extern int e_length;
+  extern fltk3::Widget* belowmouse_;
+  extern fltk3::Widget* pushed_;
+  extern fltk3::Widget* focus_;
+  extern int damage_;
+  extern fltk3::Widget* selection_owner_;
+  extern fltk3::Window* modal_;
+  extern fltk3::Window* grab_;
+  extern int compose_state;
+  extern int visible_focus_;
+  extern int dnd_text_ops_;
+#endif
+  /**
+    If true then flush() will do something.
+  */
+  inline void damage(int d) {damage_ = d;}
+
+  /**
+    The currently executing idle callback function: DO NOT USE THIS DIRECTLY!
+    
+    This is now used as part of a higher level system allowing multiple
+    idle callback functions to be called.
+    \see add_idle(), remove_idle()
+  */
+  extern void (*idle)();
+
+#ifndef FL_DOXYGEN
+  extern Fl_Awake_Handler *awake_ring_;
+  extern void **awake_data_;
+  extern int awake_ring_size_;
+  extern int awake_ring_head_;
+  extern int awake_ring_tail_;
+  extern const char* scheme_;
+  extern Fl_Image* scheme_bg_;
+
+  extern int e_original_keysym; // late addition
+  extern int scrollbar_size_;
+#endif
+
+
+  extern int add_awake_handler_(Fl_Awake_Handler, void*);
+  extern int get_awake_handler_(Fl_Awake_Handler&, void*&);
+
+/* public: */
+
+  // API version number
+  extern double version();
+
+  // argument parsers:
+  extern int arg(int, char**, int&);
+  extern int args(int, char**, int&, Fl_Args_Handler ah = 0);
+  extern void args(int, char**);
+  /**
+    Usage string displayed if fltk3::args() detects an invalid argument.
+    This may be changed to point to customized text at run-time.
+  */
+  extern const char* const help;
+
+  // things called by initialization:
+  extern void display(const char*);
+  extern int visual(int);
+  /**
+    This does the same thing as fltk3::visual(int) but also requires OpenGL
+    drawing to work. This <I>must</I> be done if you want to draw in
+    normal windows with OpenGL with gl_start() and gl_end().
+    It may be useful to call this so your X windows use the same visual
+    as an Fl_Gl_Window, which on some servers will reduce colormap flashing.
+
+    See Fl_Gl_Window for a list of additional values for the argument.
+  */
+  extern int gl_visual(int, int *alist=0); // platform dependent
+  extern void own_colormap();
+  extern void get_system_colors();
+  extern void foreground(uchar, uchar, uchar);
+  extern void background(uchar, uchar, uchar);
+  extern void background2(uchar, uchar, uchar);
+
+  // schemes:
+  extern int scheme(const char*);
+  /** See void scheme(const char *name) */
+  inline const char* scheme() {return scheme_;}
+  /** 
+    Called by scheme according to scheme name. 
+    Loads or reloads the current scheme selection. 
+    See void scheme(const char *name) 
+  */
+  extern int reload_scheme(); // platform dependent
+  extern int scrollbar_size();
+  extern void scrollbar_size(int W);
+
+  // execution:
+  extern int wait();
+  extern double wait(double time);
+  extern int check();
+  extern int ready();
+  extern int run();
+  extern fltk3::Widget* readqueue();
+  /**
+  Adds a one-shot timeout callback.  The function will be called by
+  fltk3::wait() at <i>t</i> seconds after this function is called.
+  The optional void* argument is passed to the callback.
+  
+  You can have multiple timeout callbacks. To remove a timeout
+  callback use fltk3::remove_timeout().
+  
+  If you need more accurate, repeated timeouts, use fltk3::repeat_timeout() to
+  reschedule the subsequent timeouts.
+  
+  The following code will print "TICK" each second on
+  stdout with a fair degree of accuracy:
+  
+  \code
+     void callback(void*) {
+       puts("TICK");
+       fltk3::repeat_timeout(1.0, callback);
+     }
+  
+     int main() {
+       fltk3::add_timeout(1.0, callback);
+       return fltk3::run();
+     }
+  \endcode
+  */
+  extern void add_timeout(double t, Fl_Timeout_Handler,void* = 0); // platform dependent
+  /**
+  Repeats a timeout callback from the expiration of the
+  previous timeout, allowing for more accurate timing. You may only call
+  this method inside a timeout callback.
+  
+  The following code will print "TICK" each second on
+  stdout with a fair degree of accuracy:
+  
+  \code
+     void callback(void*) {
+       puts("TICK");
+       fltk3::repeat_timeout(1.0, callback);
+     }
+  
+     int main() {
+       fltk3::add_timeout(1.0, callback);
+       return fltk3::run();
+     }
+  \endcode
+  */
+  extern void repeat_timeout(double t, Fl_Timeout_Handler, void* = 0); // platform dependent
+  extern int  has_timeout(Fl_Timeout_Handler, void* = 0);
+  extern void remove_timeout(Fl_Timeout_Handler, void* = 0);
+  extern void add_check(Fl_Timeout_Handler, void* = 0);
+  extern int  has_check(Fl_Timeout_Handler, void* = 0);
+  extern void remove_check(Fl_Timeout_Handler, void* = 0);
+  /**
+    Adds file descriptor fd to listen to.
+    
+    When the fd becomes ready for reading fltk3::wait() will call the
+    callback and then return. The callback is passed the fd and the
+    arbitrary void* argument.
+    
+    The second version takes a when bitfield, with the bits
+    FL_READ, FL_WRITE, and FL_EXCEPT defined,
+    to indicate when the callback should be done.
+    
+    There can only be one callback of each type for a file descriptor. 
+    fltk3::remove_fd() gets rid of <I>all</I> the callbacks for a given
+    file descriptor.
+    
+    Under UNIX <I>any</I> file descriptor can be monitored (files,
+    devices, pipes, sockets, etc.). Due to limitations in Microsoft Windows,
+    WIN32 applications can only monitor sockets.
+  */
+  extern void add_fd(int fd, int when, Fl_FD_Handler cb, void* = 0); // platform dependent
+  /** See void add_fd(int fd, int when, Fl_FD_Handler cb, void* = 0) */
+  extern void add_fd(int fd, Fl_FD_Handler cb, void* = 0); // platform dependent
+  /** Removes a file descriptor handler. */
+  extern void remove_fd(int, int when); // platform dependent
+  /** Removes a file descriptor handler. */
+  extern void remove_fd(int); // platform dependent
+
+  extern void add_idle(Fl_Idle_Handler cb, void* data = 0);
+  extern int  has_idle(Fl_Idle_Handler cb, void* data = 0);
+  extern void remove_idle(Fl_Idle_Handler cb, void* data = 0);
+  /** If true then flush() will do something. */
+  inline int damage() {return damage_;}
+  extern void redraw();
+  extern void flush();
+  /** \addtogroup group_comdlg
+    @{ */
+  /**
+  FLTK calls fltk3::warning() to output a warning message.
+  
+  The default version on Windows returns \e without printing a warning
+  message, because Windows programs normally don't have stderr (a console
+  window) enabled.
+
+  The default version on all other platforms prints the warning message to stderr.
+
+  You can override the behavior by setting the function pointer to your
+  own routine.
+
+  fltk3::warning() means that there was a recoverable problem, the display may
+  be messed up, but the user can probably keep working - all X protocol
+  errors call this, for example. The default implementation returns after
+  displaying the message.
+  */
+  extern void (*warning)(const char*, ...);
+  /**
+  FLTK calls fltk3::error() to output a normal error message.
+  
+  The default version on Windows displays the error message in a MessageBox window.
+
+  The default version on all other platforms prints the error message to stderr.
+
+  You can override the behavior by setting the function pointer to your
+  own routine.
+
+  fltk3::error() means there is a recoverable error such as the inability to read
+  an image file. The default implementation returns after displaying the message.
+  */
+  extern void (*error)(const char*, ...);
+  /**
+  FLTK calls fltk3::fatal() to output a fatal error message.
+  
+  The default version on Windows displays the error message in a MessageBox window.
+
+  The default version on all other platforms prints the error message to stderr.
+  
+  You can override the behavior by setting the function pointer to your
+  own routine.
+
+  fltk3::fatal() must not return, as FLTK is in an unusable state, however your
+  version may be able to use longjmp or an exception to continue, as long as
+  it does not call FLTK again. The default implementation exits with status 1
+  after displaying the message.
+  */
+  extern void (*fatal)(const char*, ...);
+  /** @} */
+
+  /** \defgroup  fl_windows Windows handling functions
+      Windows and standard dialogs handling
+    @{ */
+  extern fltk3::Window* first_window();
+  extern void first_window(fltk3::Window*);
+  extern fltk3::Window* next_window(const fltk3::Window*);
+
+  /**
+    Returns the top-most modal() window currently shown.
+
+    This is the most recently shown() window with modal() true, or NULL
+    if there are no modal() windows shown().
+    The modal() window has its handle() method called
+    for all events, and no other windows will have handle()
+    called (grab() overrides this).
+  */
+  inline fltk3::Window* modal() {return modal_;}
+  /**
+    This is used when pop-up menu systems are active.
+    
+    Send all events to the passed window no matter where the pointer or
+    focus is (including in other programs). The window <I>does not have
+    to be shown()</I> , this lets the handle() method of a
+    "dummy" window override all event handling and allows you to
+    map and unmap a complex set of windows (under both X and WIN32
+    <I>some</I> window must be mapped because the system interface needs a
+    window id).
+    
+    If grab() is on it will also affect show() of windows by doing
+    system-specific operations (on X it turns on override-redirect).
+    These are designed to make menus popup reliably
+    and faster on the system.
+    
+    To turn off grabbing do fltk3::grab(0).
+    
+    <I>Be careful that your program does not enter an infinite loop
+    while grab() is on.  On X this will lock up your screen!</I>
+    To avoid this potential lockup, all newer operating systems seem to 
+    limit mouse pointer grabbing to the time during which a mouse button 
+    is held down. Some OS's may not support grabbing at all.
+  */
+  inline fltk3::Window* grab() {return grab_;}
+  /** Selects the window to grab. See fltk3::Window* fltk3::grab() */
+  extern void grab(fltk3::Window*); // platform dependent
+  /** @} */
+
+  /** \defgroup fl_events Events handling functions
+	fltk3 class events handling API
+	@{
+  */
+  // event information:
+  /**
+    Returns the last event that was processed. This can be used
+    to determine if a callback is being done in response to a
+    keypress, mouse click, etc.
+  */
+  inline int event()		{return e_number;}
+  /**
+    Returns the mouse position of the event relative to the fltk3::Window
+    it was passed to.
+  */
+  inline int event_x()	{return e_x;}
+  /**
+    Returns the mouse position of the event relative to the fltk3::Window
+    it was passed to.
+  */
+  inline int event_y()	{return e_y;}
+  /**
+    Returns the mouse position on the screen of the event.  To find the
+    absolute position of an fltk3::Window on the screen, use the
+    difference between event_x_root(),event_y_root() and 
+    event_x(),event_y().
+  */
+  inline int event_x_root()	{return e_x_root;}
+  /**
+    Returns the mouse position on the screen of the event.  To find the
+    absolute position of an fltk3::Window on the screen, use the
+    difference between event_x_root(),event_y_root() and 
+    event_x(),event_y().
+  */
+  inline int event_y_root()	{return e_y_root;}
+  /**
+    Returns the current horizontal mouse scrolling associated with the
+    FL_MOUSEWHEEL event. Right is positive.
+  */
+  inline int event_dx()	{return e_dx;}
+  /**
+    Returns the current vertical mouse scrolling associated with the
+    FL_MOUSEWHEEL event. Down is positive.
+  */
+  inline int event_dy()	{return e_dy;}
+  /**
+    Return where the mouse is on the screen by doing a round-trip query to
+    the server.  You should use fltk3::event_x_root() and 
+    fltk3::event_y_root() if possible, but this is necessary if you are
+    not sure if a mouse event has been processed recently (such as to
+    position your first window).  If the display is not open, this will
+    open it.
+  */
+  extern void get_mouse(int &,int &); // platform dependent
+  /**
+    Returns non zero if we had a double click event.
+    \retval Non-zero if the most recent FL_PUSH or FL_KEYBOARD was a "double click".  
+    \retval  N-1 for  N clicks. 
+    A double click is counted if the same button is pressed
+    again while event_is_click() is true.
+    
+   */
+  inline int event_clicks()	{return e_clicks;}
+  /**
+    Manually sets the number returned by fltk3::event_clicks().  
+    This can be used to set it to zero so that
+    later code does not think an item was double-clicked.
+    \param[in] i corresponds to no double-click if 0, i+1 mouse clicks otherwise
+    \see int event_clicks()
+  */
+  inline void event_clicks(int i) {e_clicks = i;}
+  /**
+    The first form returns non-zero if the mouse has not moved far enough
+    and not enough time has passed since the last FL_PUSH or 
+    FL_KEYBOARD event for it to be considered a "drag" rather than a
+    "click".  You can test this on FL_DRAG, FL_RELEASE,
+    and FL_MOVE events.  The second form clears the value returned
+    by fltk3::event_is_click().  Useful to prevent the <I>next</I>
+    click from being counted as a double-click or to make a popup menu
+    pick an item with a single click.  Don't pass non-zero to this.
+  */
+  inline int event_is_click()	{return e_is_click;}
+  /**
+    Only i=0 works! See int event_is_click(). 
+  */
+  inline void event_is_click(int i) {e_is_click = i;}
+  /**
+    Gets which particular mouse button caused the current event. 
+    This returns garbage if the most recent event was not a FL_PUSH or FL_RELEASE event.
+    \retval FL_LEFT_MOUSE \retval FL_MIDDLE_MOUSE \retval FL_RIGHT_MOUSE.
+    \see fltk3::event_buttons()
+  */
+  inline int event_button()	{return e_keysym-FL_Button;}
+  /**
+    This is a bitfield of what shift states were on and what mouse buttons
+    were held down during the most recent event. The second version
+    returns non-zero if any of the passed bits are turned on.
+    The legal bits are:
+    
+    \li FL_SHIFT
+    \li FL_CAPS_LOCK
+    \li FL_CTRL
+    \li FL_ALT
+    \li FL_NUM_LOCK
+    \li FL_META
+    \li FL_SCROLL_LOCK
+    \li FL_BUTTON1
+    \li FL_BUTTON2
+    \li FL_BUTTON3
+    
+    X servers do not agree on shift states, and FL_NUM_LOCK, FL_META, and
+    FL_SCROLL_LOCK may not work. The values were selected to match the
+    XFree86 server on Linux. In addition there is a bug in the way X works
+    so that the shift state is not correctly reported until the first event
+    <I>after</I> the shift key is pressed or released.
+  */
+  inline int event_state()	{return e_state;}
+  /** See int event_state() */
+  inline int event_state(int i) {return e_state&i;}
+  /**
+    Gets which key on the keyboard was last pushed.
+
+    The returned integer 'key code' is not necessarily a text
+    equivalent for the keystroke. For instance: if someone presses '5' on the 
+    numeric keypad with numlock on, fltk3::event_key() may return the 'key code'
+    for this key, and NOT the character '5'. To always get the '5', use fltk3::event_text() instead.
+    
+    \returns an integer 'key code', or 0 if the last event was not a key press or release.
+    \see int event_key(int), event_text(), compose(int&).
+  */
+  inline int event_key()	{return e_keysym;}
+  /**
+    Returns the keycode of the last key event, regardless of the NumLock state.
+      
+    If NumLock is deactivated, FLTK translates events from the 
+    numeric keypad into the corresponding arrow key events. 
+    event_key() returns the translated key code, whereas
+    event_original_key() returns the keycode before NumLock translation.
+  */
+  inline int event_original_key(){return e_original_keysym;}
+  /** 
+    Returns true if the given \p key was held
+    down (or pressed) <I>during</I> the last event.  This is constant until
+    the next event is read from the server.
+    
+    fltk3::get_key(int) returns true if the given key is held down <I>now</I>.
+    Under X this requires a round-trip to the server and is <I>much</I>
+    slower than fltk3::event_key(int).
+    
+    Keys are identified by the <I>unshifted</I> values. FLTK defines a
+    set of symbols that should work on most modern machines for every key
+    on the keyboard:
+    
+    \li All keys on the main keyboard producing a printable ASCII
+	character use the value of that ASCII character (as though shift,
+	ctrl, and caps lock were not on). The space bar is 32.
+    \li All keys on the numeric keypad producing a printable ASCII
+	character use the value of that ASCII character plus FL_KP.
+	The highest possible value is FL_KP_Last so you can
+	range-check to see if something is  on the keypad.
+    \li All numbered function keys use the number on the function key plus 
+	FL_F.  The highest possible number is FL_F_Last, so you
+	can range-check a value.
+    \li Buttons on the mouse are considered keys, and use the button
+	number (where the left button is 1) plus FL_Button.
+    \li All other keys on the keypad have a symbol: FL_Escape,
+	FL_BackSpace, FL_Tab, FL_Enter, FL_Print, FL_Scroll_Lock, FL_Pause,
+	FL_Insert, FL_Home, FL_Page_Up, FL_Delete, FL_End, FL_Page_Down,
+	FL_Left, FL_Up, FL_Right, FL_Down, FL_Shift_L, FL_Shift_R,
+	FL_Control_L, FL_Control_R, FL_Caps_Lock, FL_Alt_L, FL_Alt_R,
+	FL_Meta_L, FL_Meta_R, FL_Menu, FL_Num_Lock, FL_KP_Enter.  Be
+	careful not to confuse these with the very similar, but all-caps,
+	symbols used by fltk3::event_state().
+
+    On X fltk3::get_key(FL_Button+n) does not work.
+    
+    On WIN32 fltk3::get_key(FL_KP_Enter) and fltk3::event_key(FL_KP_Enter) do not work.
+  */
+  extern int event_key(int key);
+  /** 
+    Returns true if the given \p key is held down <I>now</I>.  
+    Under X this requires a round-trip to the server and is <I>much</I>
+    slower than fltk3::event_key(int). \see event_key(int)
+  */
+  extern int get_key(int key); // platform dependent
+  /** 
+    Returns the text associated with the current event, including FL_PASTE or FL_DND_RELEASE events.
+    This can be used in response to FL_KEYUP, FL_KEYDOWN, FL_PASTE, FL_DND_RELEASE.
+
+    When responding to FL_KEYUP/FL_KEYDOWN, use this function instead of fltk3::event_key()
+    to get the text equivalent of keystrokes suitable for inserting into strings 
+    and text widgets.
+
+    The returned string is guaranteed to be be NULL terminated.
+    However, see fltk3::event_length() for the actual length of the string,
+    in case the string itself contains NULLs that are part of the text data.
+
+    \returns A NULL terminated text string equivalent of the last keystroke.
+   */
+  inline const char* event_text() {return e_text;}
+  /**
+    Returns the length of the text in fltk3::event_text(). There
+    will always be a nul at this position in the text. However there may
+    be a nul before that if the keystroke translates to a nul character or
+    you paste a nul character.
+  */
+  inline int event_length() {return e_length;}
+
+  extern int compose(int &del);
+  /**
+    If the user moves the cursor, be sure to call fltk3::compose_reset().
+    The next call to fltk3::compose() will start out in an initial state. In
+    particular it will not set "del" to non-zero. This call is very fast
+    so it is ok to call it many times and in many places.
+  */
+  inline void compose_reset() {compose_state = 0;}
+  extern int event_inside(int,int,int,int);
+  extern int event_inside(const fltk3::Widget*);
+  extern int test_shortcut(Fl_Shortcut);
+
+  // event destinations:
+  extern int handle(int, fltk3::Window*);
+  /**  Gets the widget that is below the mouse. 
+       \see  belowmouse(fltk3::Widget*) */
+  inline fltk3::Widget* belowmouse() {return belowmouse_;}
+  extern void belowmouse(fltk3::Widget*);
+  /** Gets the widget that is being pushed.
+      \see void pushed(fltk3::Widget*) */
+  inline fltk3::Widget* pushed()	{return pushed_;}
+  extern void pushed(fltk3::Widget*);
+  /** Gets the current fltk3::focus() widget. \sa fltk3::focus(fltk3::Widget*) */
+  inline fltk3::Widget* focus()	{return focus_;}
+  extern void focus(fltk3::Widget*);
+  extern void add_handler(Fl_Event_Handler h);
+  extern void remove_handler(Fl_Event_Handler h);
+  /** @} */
+
+  /** \defgroup  fl_clipboard  Selection & Clipboard functions
+	fl global copy/cut/paste functions
+   @{ */
+  // cut/paste:
+  /**
+    Copies the data pointed to by \p stuff to the selection (0) or
+    primary (1) clipboard. The selection clipboard is used for
+    middle-mouse pastes and for drag-and-drop selections. The primary
+    clipboard is used for traditional copy/cut/paste operations.
+  */
+  extern void copy(const char* stuff, int len, int clipboard = 0); // platform dependent
+  /**
+    Pastes the data from the selection (0) or primary (1) clipboard into receiver.  
+    The selection clipboard is used for middle-mouse pastes and for 
+    drag-and-drop selections. The primary clipboard is used for 
+    traditional copy/cut/paste operations.
+  */
+  extern void paste(fltk3::Widget &receiver, int clipboard /*=0*/); // platform dependent
+  /**
+    Initiate a Drag And Drop operation. The clipboard should be
+    filled with relevant data before calling this method. FLTK will
+    then initiate the system wide drag and drop handling. Dropped data
+    will be marked as <i>text</i>.
+  */
+  extern int dnd(); // platform dependent
+
+  // These are for back-compatibility only:
+  /**  back-compatibility only: Gets the widget owning the current selection  
+       \see fltk3::Widget* selection_owner(fltk3::Widget*) */
+  inline fltk3::Widget* selection_owner() {return selection_owner_;}
+  extern void selection_owner(fltk3::Widget*);
+  extern void selection(fltk3::Widget &owner, const char*, int len);
+  extern void paste(fltk3::Widget &receiver);
+/** @} */
+/** \defgroup  fl_screen  Screen functions
+	fl global screen functions
+     @{ */
+  // screen size:
+  /** Returns the origin of the current screen, where 0 indicates the left side of the screen. */
+  extern int x(); // platform dependent
+  /** Returns the origin of the current screen, where 0 indicates the top edge of the screen. */
+  extern int y(); // platform dependent
+  /** Returns the width of the screen in pixels. */
+  extern int w(); // platform dependent
+  /** Returns the height of the screen in pixels. */
+  extern int h(); // platform dependent
+
+  // multi-head support:
+  extern int screen_count();
+  /** 
+      Gets the bounding box of a screen that contains the mouse pointer.
+      \param[out]  X,Y,W,H the corresponding screen bounding box
+      \see void screen_xywh(int &x, int &y, int &w, int &h, int mx, int my) 
+  */
+  extern void screen_xywh(int &X, int &Y, int &W, int &H, int mx, int my);
+  extern void screen_xywh(int &X, int &Y, int &W, int &H, int n);
+  inline void screen_xywh(int &X, int &Y, int &W, int &H) {
+    screen_xywh(X, Y, W, H, e_x_root, e_y_root);
+  }
+  
+  /**   @} */
+
+  /** \defgroup  fl_attributes  Color & Font functions
+	fl global color, font functions
+     @{ */
+ 
+  // color map:
+  extern void	set_color(Fl_Color, uchar, uchar, uchar);
+  /**
+    Sets an entry in the fl_color index table. You can set it to any
+    8-bit RGB color. The color is not allocated until fl_color(i) is used.
+  */
+  extern void	set_color(Fl_Color, unsigned); // platform dependent
+  extern Fl_Color get_color(Fl_Color);
+  extern void	get_color(Fl_Color, uchar&, uchar&, uchar&);
+  /**
+    Frees the specified color from the colormap, if applicable.
+    If overlay is non-zero then the color is freed from the
+    overlay colormap.
+  */
+  extern void	free_color(Fl_Color, int overlay = 0); // platform dependent
+
+  // fonts:
+  extern const char* get_font(Fl_Font);
+  /**
+    Get a human-readable string describing the family of this face.  This
+    is useful if you are presenting a choice to the user.  There is no
+    guarantee that each face has a different name.  The return value points
+    to a static buffer that is overwritten each call.
+    
+    The integer pointed to by \p attributes (if the pointer is not
+    zero) is set to zero, FL_BOLD or FL_ITALIC or 
+    FL_BOLD | FL_ITALIC.  To locate a "family" of fonts, search
+    forward and back for a set with non-zero attributes, these faces along
+    with the face with a zero attribute before them constitute a family.
+  */
+  extern const char* get_font_name(Fl_Font, int* attributes = 0);
+  /**
+    Return an array of sizes in \p sizep.  The return value is the
+    length of this array.  The sizes are sorted from smallest to largest
+    and indicate what sizes can be given to fl_font() that will
+    be matched exactly (fl_font() will pick the closest size for
+    other sizes).  A zero in the first location of the array indicates a
+    scalable font, where any size works, although the array may list sizes
+    that work "better" than others.  Warning: the returned array
+    points at a static buffer that is overwritten each call.  Under X this
+    will open the display.
+  */
+  extern int get_font_sizes(Fl_Font, int*& sizep);
+  extern void set_font(Fl_Font, const char*);
+  extern void set_font(Fl_Font, Fl_Font);
+  /**
+    FLTK will open the display, and add every fonts on the server to the
+    face table.  It will attempt to put "families" of faces together, so
+    that the normal one is first, followed by bold, italic, and bold
+    italic.
+    
+    The optional argument is a string to describe the set of fonts to
+    add.  Passing NULL will select only fonts that have the
+    ISO8859-1 character set (and are thus usable by normal text).  Passing
+    "-*" will select all fonts with any encoding as long as they have
+    normal X font names with dashes in them.  Passing "*" will list every
+    font that exists (on X this may produce some strange output).  Other
+    values may be useful but are system dependent.  With WIN32 NULL
+    selects fonts with ISO8859-1 encoding and non-NULL selects
+    all fonts.
+    
+    The return value is how many faces are in the table after this is done.
+  */
+  extern Fl_Font set_fonts(const char* = 0); // platform dependent
+
+  /**   @} */
+ /** \defgroup  fl_drawings  Drawing functions
+	fl global graphics and gui drawing functions
+     @{ */
+  // <Hack to re-order the 'Drawing functions' group>
+ /** @} */
+
+  // labeltypes:
+  extern void set_labeltype(Fl_Labeltype,Fl_Label_Draw_F*,Fl_Label_Measure_F*);
+  /** Sets the functions to call to draw and measure a specific labeltype. */
+  extern void set_labeltype(Fl_Labeltype, Fl_Labeltype from); // is it defined ?
+
+  // boxtypes:
+  extern Fl_Box_Draw_F *get_boxtype(Fl_Boxtype);
+  extern void set_boxtype(Fl_Boxtype, Fl_Box_Draw_F*,uchar,uchar,uchar,uchar);
+  extern void set_boxtype(Fl_Boxtype, Fl_Boxtype from);
+  extern int box_dx(Fl_Boxtype);
+  extern int box_dy(Fl_Boxtype);
+  extern int box_dw(Fl_Boxtype);
+  extern int box_dh(Fl_Boxtype);
+  extern int draw_box_active();
+
+  // back compatibility:
+  /** \addtogroup fl_windows 
+    @{ */
+  /** For back compatibility, sets the void fltk3::fatal handler callback */
+  inline void set_abort(Fl_Abort_Handler f) {fatal = f;}
+  extern void (*atclose)(fltk3::Window*,void*);
+  extern void default_atclose(fltk3::Window*,void*);
+  /** For back compatibility, sets the fltk3::atclose handler callback. You
+      can now simply change the callback for the window instead.
+      \see fltk3::Window::callback(Fl_Callback*) */
+  inline void set_atclose(Fl_Atclose_Handler f) {atclose = f;}
+  /**   @} */
+
+  /** \addtogroup fl_events 
+    @{ */
+  /** Returns non-zero if the Shift key is pressed. */
+  inline int event_shift() {return e_state&FL_SHIFT;}
+  /** Returns non-zero if the Control key is pressed. */
+  inline int event_ctrl() {return e_state&FL_CTRL;}
+  /** Returns non-zero if the FL_COMMAND key is pressed, either FL_CTRL or on OSX FL_META. */
+  inline int event_command() {return e_state&FL_COMMAND;}
+  /** Returns non-zero if the Alt key is pressed. */
+  inline int event_alt() {return e_state&FL_ALT;}
+  /**
+    Returns the mouse buttons state bits; if non-zero, then at least one
+    button is pressed now.  This function returns the button state at the 
+    time of the event. During an FL_RELEASE event, the state 
+    of the released button will be 0. To find out, which button 
+    caused an FL_RELEASE event, you can use fltk3::event_button() instead.
+    \return a bit mask value like { [FL_BUTTON1] | [FL_BUTTON2] | [FL_BUTTON3] }
+  */
+  inline int event_buttons() {return e_state&0x7f000000;}
+  /**
+    Returns non-zero if mouse button 1 is currently held down.
+    For more details, see fltk3::event_buttons().
+  */
+  inline int event_button1() {return e_state&FL_BUTTON1;}
+  /**
+    Returns non-zero if button 2 is currently held down.
+    For more details, see fltk3::event_buttons().
+  */
+  inline int event_button2() {return e_state&FL_BUTTON2;}
+  /**
+    Returns non-zero if button 3 is currently held down.
+    For more details, see fltk3::event_buttons().
+  */
+  inline int event_button3() {return e_state&FL_BUTTON3;}
+  /**   @} */
+
+  /**
+    Sets an idle callback.
+
+    \deprecated This method is obsolete - use the add_idle() method instead.
+  */
+  inline void set_idle(Fl_Old_Idle_Handler cb) {idle = cb;}
+  /** See fltk3::Window* grab() */
+  inline void grab(fltk3::Window&win) {grab(&win);}
+  /** Releases the current grabbed window, equals grab(0).
+  \deprecated Use fltk3::grab(0) instead.
+  \see fltk3::Window* grab() */
+  inline void release() {grab(0);}
+
+  // Visible focus methods...
+  /**
+    Gets or sets the visible keyboard focus on buttons and other
+    non-text widgets. The default mode is to enable keyboard focus
+    for all widgets.
+  */
+  inline void visible_focus(int v) { visible_focus_ = v; }
+  /**
+    Gets or sets the visible keyboard focus on buttons and other
+    non-text widgets. The default mode is to enable keyboard focus
+    for all widgets.
+  */
+  inline int  visible_focus() { return visible_focus_; }
+
+  // Drag-n-drop text operation methods...
+  /**
+    Gets or sets whether drag and drop text operations are supported.
+    This specifically affects whether selected text can
+    be dragged from text fields or dragged within a text field as a
+    cut/paste shortcut.
+  */
+  inline void dnd_text_ops(int v) { dnd_text_ops_ = v; }
+  /**
+    Gets or sets whether drag and drop text operations are
+    supported. This specifically affects whether selected text can
+    be dragged from text fields or dragged within a text field as a
+    cut/paste shortcut.
+  */
+  inline int  dnd_text_ops() { return dnd_text_ops_; }
+  /** \defgroup fl_multithread Multithreading support functions
+	fl multithreading support functions
+   @{ */
+
+  // Multithreading support:
+  extern void lock();
+  extern void unlock();
+  extern void awake(void* message = 0);
+  /** See void awake(void* message=0). */
+  extern int awake(Fl_Awake_Handler cb, void* message = 0);
+  /**
+    The thread_message() method returns the last message
+    that was sent from a child by the awake() method.
+    
+    See also: multithreading
+  */
+  extern void* thread_message(); // platform dependent
+  /** @} */
+
+  /** \defgroup fl_del_widget Safe widget deletion support functions
+
+    These functions support deletion of widgets inside callbacks.
+
+    fltk3::delete_widget() should be called when deleting widgets
+    or complete widget trees (fltk3::Group, fltk3::Window, ...) inside
+    callbacks.
+
+    The other functions are intended for internal use. The preferred
+    way to use them is by using the helper class Fl_Widget_Tracker.
+
+    The following is to show how it works ...
+
+    There are three groups of related methods:
+
+      -# scheduled widget deletion
+	- fltk3::delete_widget() schedules widgets for deletion
+	- fltk3::do_widget_deletion() deletes all scheduled widgets
+      -# widget watch list ("smart pointers")
+	- fltk3::watch_widget_pointer() adds a widget pointer to the watch list
+	- fltk3::release_widget_pointer() removes a widget pointer from the watch list
+	- fltk3::clear_widget_pointer() clears a widget pointer \e in the watch list
+      -# the class Fl_Widget_Tracker:
+	- the constructor calls fltk3::watch_widget_pointer()
+	- the destructor calls fltk3::release_widget_pointer()
+	- the access methods can be used to test, if a widget has been deleted
+	  \see Fl_Widget_Tracker.
+
+   @{ */
+  // Widget deletion:
+  extern void delete_widget(fltk3::Widget *w);
+  extern void do_widget_deletion();
+  extern void watch_widget_pointer(fltk3::Widget *&w);
+  extern void release_widget_pointer(fltk3::Widget *&w);
+  extern void clear_widget_pointer(fltk3::Widget const *w);
+  /** @} */
+
+#ifdef HAVE_CAIRO
+  /** \defgroup group_cairo Cairo support functions and classes 
+      @{ 
+  */
+/* public: */
+  // Cairo support API
+  extern cairo_t * cairo_make_current(fltk3::Window* w);
+   /** when HAVE_CAIRO is defined and cairo_autolink_context() is true, 
+      any current window dc is linked to a current context.
+      This is not the default, because it may not be necessary
+      to add cairo support to all fltk supported windows.
+      When you wish to associate a cairo context in this mode,
+      you need to call explicitly in your draw() overridden method,
+      FL::cairo_make_current(fltk3::Window*). This will create a cairo context
+      but only for this Window. 
+      Still in custom cairo application it is possible to handle 
+      completely this process automatically by setting \p alink to true.
+      In this last case, you don't need anymore to call fltk3::cairo_make_current().
+      You can use fltk3::cairo_cc() to get the current cairo context anytime.
+     \note Only available when configure has the --enable-cairo option
+  */
+  inline void cairo_autolink_context(bool alink) {cairo_state_.autolink(alink);}
+  /** 
+    Gets the current autolink mode for cairo support.
+    \retval false if no cairo context autolink is made for each window. 
+    \retval true if any fltk window is attached a cairo context when it 
+    is current. \see void cairo_autolink_context(bool alink) 
+    \note Only available when configure has the --enable-cairo option
+ */
+  inline bool cairo_autolink_context() {return cairo_state_.autolink();}
+  /** Gets the current cairo context linked with a fltk window. */
+  inline cairo_t * cairo_cc() { return cairo_state_.cc(); }
+  /** Sets the current cairo context to \p c.
+      Set \p own to true if you want fltk to handle this cc deletion.
+     \note Only available when configure has the --enable-cairo option
+*/
+  inline void cairo_cc(cairo_t * c, bool own=false){ cairo_state_.cc(c, own); } 
+
+/* private: */
+  extern cairo_t * cairo_make_current(void* gc);
+  extern cairo_t * cairo_make_current(void* gc, int W, int H);
+  extern Fl_Cairo_State cairo_state_;
+/* public: */
+  /** @} */ 
+
+#endif // HAVE_CAIRO
+
+};
+
+/**
+  This class should be used to control safe widget deletion.
+
+  You can use an Fl_Widget_Tracker object to watch another widget, if you
+  need to know, if this widget has been deleted during a callback.
+
+  This simplifies the use of the "safe widget deletion" methods
+  fltk3::watch_widget_pointer() and fltk3::release_widget_pointer() and
+  makes their use more reliable, because the destructor autmatically
+  releases the widget pointer from the widget watch list.
+
+  It is intended to be used as an automatic (local/stack) variable,
+  such that the automatic destructor is called when the object's
+  scope is left. This ensures that no stale widget pointers are
+  left in the widget watch list (see example below).
+  
+  You can also create Fl_Widget_Tracker objects with \c new, but then it
+  is your responsibility to delete the object (and thus remove the
+  widget pointer from the watch list) when it is not needed any more.
+
+  Example:
+
+  \code
+    int MyClass::handle (int event) {
+
+      if (...) {
+	Fl_Widget_Tracker wp(this);	// watch myself
+	do_callback();			// call the callback
+
+	if (wp.deleted()) return 1;	// exit, if deleted
+
+	// Now we are sure that the widget has not been deleted.
+	// It is safe to access the widget
+
+	clear_changed();		// access the widget
+      }
+    }
+  \endcode
+
+*/
+class FL_EXPORT Fl_Widget_Tracker {
+
+  fltk3::Widget* wp_;
+
+public:
+
+  Fl_Widget_Tracker(fltk3::Widget *wi);
+  ~Fl_Widget_Tracker();
+
+  /**
+    Returns a pointer to the watched widget.
+
+    This pointer is \c NULL, if the widget has been deleted.
+  */
+  fltk3::Widget *widget() {return wp_;}
+
+  /**
+    Returns 1, if the watched widget has been deleted.
+
+    This is a convenience method. You can also use something like
+
+    <tt>  if (wp.widget() == 0) // ...</tt>
+
+    where \p wp is an Fl_Widget_Tracker object.
+  */
+  int deleted() {return wp_ == 0;}
+
+  /**
+    Returns 1, if the watched widget exists (has not been deleted).
+
+    This is a convenience method. You can also use something like
+
+    <tt>  if (wp.widget() != 0) // ...</tt>
+
+    where \p wp is an Fl_Widget_Tracker object.
+  */
+  int exists()  {return wp_ != 0;}
+
+};
+
+ /** \defgroup  fl_unicode  Unicode and UTF-8 functions
+	fl global Unicode and UTF-8 handling functions
+     @{ */
+ /** @} */
+
+#endif // !Fl_H
+
+//
+// End of "$Id: Fl.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Abstract_Printer.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Abstract_Printer.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Abstract_Printer.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,94 @@
+//
+// "$Id: Fl_Abstract_Printer.H 7337 2010-03-25 16:05:00Z manolo $"
+//
+// Printing support for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 2010 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/** \file Fl_Abstract_Printer.H 
+ \brief declaration of class Fl_Abstract_Printer.
+ */
+
+#ifndef Fl_Abstract_Printer_H
+#define Fl_Abstract_Printer_H
+
+#include <fltk3/Fl_Device.H>
+
+/**
+ \brief A virtual class for print support with several platform-specific implementations.
+ *
+ This class has no public constructor: don't instantiate it; use Fl_Printer or Fl_PSfile_Device instead.
+ */
+class Fl_Abstract_Printer : public Fl_Device {
+  friend class Fl_Pixmap;
+  friend class Fl_RGB_Image;
+  friend class Fl_Bitmap;
+private:
+#ifdef __APPLE__
+  struct chain_elt {
+    Fl_Image *image;
+    const uchar *data;
+    struct chain_elt *next;
+  };
+  void add_image(Fl_Image *image, const uchar *data); // adds an image to the page image list
+#endif
+  void traverse(fltk3::Widget *widget); // finds subwindows of widget and prints them
+protected:
+  /** \brief horizontal offset to the origin of graphics coordinates */
+  int x_offset;
+  /** \brief vertical offset to the origin of graphics coordinates */
+  int y_offset;
+  /** \brief chained list of Fl_Image's used in this page */
+  struct chain_elt *image_list_; 
+  /** \brief the printer's graphics context, if there's one, NULL otherwise */
+  void *gc; 
+  /** \brief the constructor */
+  Fl_Abstract_Printer(void) { gc = NULL; bg_r_ = bg_g_ = bg_b_ = 0; };
+#ifdef __APPLE__
+  /** \brief deletes the page image list */
+  void delete_image_list(); 
+#endif
+public:
+  Fl_Device *set_current(void);
+  virtual int start_job(int pagecount, int *frompage = NULL, int *topage = NULL);
+  virtual int start_page(void);
+  virtual int printable_rect(int *w, int *h);
+  virtual void margins(int *left, int *top, int *right, int *bottom);
+  virtual void origin(int x, int y);
+  void origin(int *x, int *y);
+  virtual void scale(float scale_x, float scale_y);
+  virtual void rotate(float angle);
+  virtual void translate(int x, int y);
+  virtual void untranslate(void);
+  void print_widget(fltk3::Widget* widget, int delta_x = 0, int delta_y = 0);
+  void print_window_part(fltk3::Window *win, int x, int y, int w, int h, int delta_x = 0, int delta_y = 0);
+  virtual int end_page (void);
+  virtual void end_job (void);
+};
+
+#endif // Fl_Abstract_Printer_H
+
+//
+// End of "$Id: Fl_Abstract_Printer.H 7337 2010-03-25 16:05:00Z manolo $"
+//
+

Added: branches/branch-3.0/fltk3/Fl_Adjuster.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Adjuster.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Adjuster.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,82 @@
+//
+// "$Id: Fl_Adjuster.H 6614 2009-01-01 16:11:32Z matt $"
+//
+// Adjuster widget header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Adjuster widget . */
+
+// 3-button "slider", made for Nuke
+
+#ifndef Fl_Adjuster_H
+#define Fl_Adjuster_H
+
+#ifndef Fl_Valuator_H
+#include "Fl_Valuator.H"
+#endif
+
+/**
+  The Fl_Adjuster widget was stolen from Prisms, and has proven
+  to be very useful for values that need a large dynamic range.
+  \image html adjuster1.gif 
+  \image latex adjuster1.eps "Fl_Adjuster" width=4cm
+  <P>When you  press a button and drag to the right the value increases.
+  When you drag  to the left it decreases.  The largest button adjusts by
+  100 *  step(), the next by 10 * step() and that
+  smallest button  by step().  Clicking on the buttons
+  increments by 10 times the  amount dragging by a pixel does. Shift +
+  click decrements by 10 times  the amount.
+*/
+class FL_EXPORT Fl_Adjuster : public Fl_Valuator {
+  int drag;
+  int ix;
+  int soft_;
+protected:
+  void draw();
+  int handle(int);
+  void value_damage();
+public:
+  Fl_Adjuster(int X,int Y,int W,int H,const char *l=0);
+  /**
+    If "soft" is turned on, the user is allowed to drag the value outside
+    the range.  If they drag the value to one of the ends, let go, then
+    grab again and continue to drag, they can get to any value.  Default is
+    one.
+  */
+  void soft(int s) {soft_ = s;}
+  /**
+    If "soft" is turned on, the user is allowed to drag the value outside
+    the range.  If they drag the value to one of the ends, let go, then
+    grab again and continue to drag, they can get to any value.  Default is
+    one.
+  */
+  int soft() const {return soft_;}
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Adjuster.H 6614 2009-01-01 16:11:32Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_BMP_Image.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_BMP_Image.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_BMP_Image.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,50 @@
+//
+// "$Id: Fl_BMP_Image.H 6614 2009-01-01 16:11:32Z matt $"
+//
+// BMP image header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_BMP_Image widget . */
+
+#ifndef Fl_BMP_Image_H
+#define Fl_BMP_Image_H
+#  include "Fl_Image.H"
+
+/**
+  The Fl_BMP_Image class supports loading, caching,
+  and drawing of Windows Bitmap (BMP) image files.
+*/
+class FL_EXPORT Fl_BMP_Image : public Fl_RGB_Image {
+
+  public:
+
+  Fl_BMP_Image(const char* filename);
+};
+
+#endif
+
+//
+// End of "$Id: Fl_BMP_Image.H 6614 2009-01-01 16:11:32Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Bitmap.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Bitmap.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Bitmap.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,82 @@
+//
+// "$Id: Fl_Bitmap.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// Bitmap header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Bitmap widget . */
+
+#ifndef Fl_Bitmap_H
+#define Fl_Bitmap_H
+#  include "Fl_Image.H"
+
+class fltk3::Widget;
+struct Fl_Menu_Item;
+
+/**
+  The Fl_Bitmap class supports caching and drawing of mono-color
+  (bitmap) images. Images are drawn using the current color.
+*/
+class FL_EXPORT Fl_Bitmap : public Fl_Image {
+  public:
+
+  /** pointer to raw bitmap data */
+  const uchar *array;
+  /** Non-zero if array points to bitmap data allocated internally */
+  int alloc_array;
+  
+  private:
+
+#if defined(__APPLE__) || defined(WIN32)
+  /** for internal use */
+  void *id_;
+#else
+  /** for internal use */
+  unsigned id_;
+#endif // __APPLE__ || WIN32
+
+  public:
+
+  /** The constructors create a new bitmap from the specified bitmap data */
+  Fl_Bitmap(const uchar *bits, int W, int H) :
+    Fl_Image(W,H,0), array(bits), alloc_array(0), id_(0) {data((const char **)&array, 1);}
+  /** The constructors create a new bitmap from the specified bitmap data */
+  Fl_Bitmap(const char *bits, int W, int H) :
+    Fl_Image(W,H,0), array((const uchar *)bits), alloc_array(0), id_(0) {data((const char **)&array, 1);}
+  virtual ~Fl_Bitmap();
+  virtual Fl_Image *copy(int W, int H);
+  Fl_Image *copy() { return copy(w(), h()); }
+  virtual void draw(int X, int Y, int W, int H, int cx=0, int cy=0);
+  void draw(int X, int Y) {draw(X, Y, w(), h(), 0, 0);}
+  virtual void label(fltk3::Widget*w);
+  virtual void label(Fl_Menu_Item*m);
+  virtual void uncache();
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Bitmap.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Box.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Box.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Box.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,69 @@
+//
+// "$Id: Fl_Box.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// Box header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Box widget . */
+
+#ifndef Fl_Box_H
+#define Fl_Box_H
+
+#ifndef Fl_Widget_H
+#include "Fl_Widget.H"
+#endif
+
+/**
+  This widget simply draws its box, and possibly it's label.  Putting it
+  before some other widgets and making it big enough to surround them
+  will let you draw a frame around them.
+*/
+class FL_EXPORT Fl_Box : public fltk3::Widget {
+protected:
+  void draw();
+public:
+  /**
+    - The first constructor sets box() to FL_NO_BOX, which
+    means it is invisible. However such widgets are useful as placeholders
+    or fltk3::Group::resizable()
+    values.  To change the box to something visible, use box(n).
+    - The second form of the constructor sets the box to the specified box
+    type.
+    <P>The destructor removes the box.
+  */
+    Fl_Box(int X, int Y, int W, int H, const char *l=0)
+  : fltk3::Widget(X,Y,W,H,l) {}
+  /**    See Fl_Box::Fl_Box(int x, int y, int w, int h, const char * = 0)   */
+    Fl_Box(Fl_Boxtype b, int X, int Y, int W, int H, const char *l)
+  : fltk3::Widget(X,Y,W,H,l) {box(b);}
+
+  virtual int handle(int);
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Box.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Browser.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Browser.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Browser.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,324 @@
+//
+// "$Id: Fl_Browser.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// Browser header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Browser widget . */
+
+// Forms-compatable browser.  Probably useful for other
+// lists of textual data.  Notice that the line numbers
+// start from 1, and 0 means "no line".
+
+#ifndef Fl_Browser_H
+#define Fl_Browser_H
+
+#include "Fl_Browser_.H"
+#include "Fl_Image.H"
+
+struct FL_BLINE;
+
+/**
+  The Fl_Browser widget displays a scrolling list of text
+  lines, and manages all the storage for the text.  This is not a text
+  editor or spreadsheet!  But it is useful for showing a vertical list of
+  named objects to the user.
+  
+  Each line in the browser is identified by number. <I>The numbers
+  start at one</I> (this is so that zero can be reserved for "no line" in
+  the selective browsers). <I>Unless otherwise noted, the methods do not
+  check to see if the passed line number is in range and legal.  It must
+  always be greater than zero and &lt;= size().</I>
+
+  Each line contains a null-terminated string of text and a void *
+  data pointer.  The text string is displayed, the void *
+  pointer can be used by the callbacks to reference the object the text
+  describes.
+
+  The base class does nothing when the user clicks on it.  The
+  subclasses 
+  Fl_Select_Browser, 
+  Fl_Hold_Browser, and 
+  Fl_Multi_Browser react to user clicks to select lines in
+  the browser and do callbacks.
+
+  The base class
+  Fl_Browser_ provides the scrolling and selection mechanisms of
+  this and all the subclasses, but the dimensions and appearance of each
+  item are determined by the subclass. You can use Fl_Browser_
+  to display information other than text, or text that is dynamically
+  produced from your own data structures. If you find that loading the
+  browser is a lot of work or is inefficient, you may want to make a
+  subclass of Fl_Browser_.
+
+  Some common coding patterns used for working with Fl_Browser:
+  \code
+      // How to loop through all the items in the browser
+      for ( int t=1; t<=browser->size(); t++ ) {       // index 1 based..!
+	  printf("item #%d, label='%s'\n", t, browser->text(t));
+      }
+  \endcode
+
+  Note: If you are <I>subclassing</I> Fl_Browser, it's more efficient
+  to use the protected methods item_first() and item_next(), since
+  Fl_Browser internally uses linked lists to manage the browser's items.
+  For more info, see find_item(int).
+*/
+class FL_EXPORT Fl_Browser : public Fl_Browser_ {
+
+  FL_BLINE *first;		// the array of lines
+  FL_BLINE *last;
+  FL_BLINE *cache;
+  int cacheline;		// line number of cache
+  int lines;                	// Number of lines
+  int full_height_;
+  const int* column_widths_;
+  char format_char_;		// alternative to @-sign
+  char column_char_;		// alternative to tab
+
+protected:
+
+  // required routines for Fl_Browser_ subclass:
+  void* item_first() const ;
+  void* item_next(void* item) const ;
+  void* item_prev(void* item) const ;
+  void* item_last()const ;
+  int item_selected(void* item) const ;
+  void item_select(void* item, int val);
+  int item_height(void* item) const ;
+  int item_width(void* item) const ;
+  void item_draw(void* item, int X, int Y, int W, int H) const ;
+  int full_height() const ;
+  int incr_height() const ;
+  const char *item_text(void *item) const;
+  /** Swap the items \p a and \p b.
+      You must call redraw() to make any changes visible.
+      \param[in] a,b the items to be swapped.
+      \see swap(int,int), item_swap()
+   */
+  void item_swap(void *a, void *b) { swap((FL_BLINE*)a, (FL_BLINE*)b); }
+  /** Return the item at specified \p line.
+      \param[in] line The line of the item to return. (1 based)
+      \returns The item, or NULL if line out of range.
+      \see item_at(), find_line(), lineno()
+   */
+  void *item_at(int line) const { return (void*)find_line(line); }
+
+  FL_BLINE* find_line(int line) const ;
+  FL_BLINE* _remove(int line) ;
+  void insert(int line, FL_BLINE* item);
+  int lineno(void *item) const ;
+  void swap(FL_BLINE *a, FL_BLINE *b);
+
+public:
+
+  void remove(int line);
+  void add(const char* newtext, void* d = 0);
+  void insert(int line, const char* newtext, void* d = 0);
+  void move(int to, int from);
+  int  load(const char* filename);
+  void swap(int a, int b);
+  void clear();
+
+  /**
+    Returns how many lines are in the browser.
+    The last line number is equal to this.
+    Returns 0 if browser is empty.
+  */
+  int size() const { return lines; }
+  void size(int W, int H) { fltk3::Widget::size(W, H); }
+
+  int topline() const ;
+  /** For internal use only? */
+  enum Fl_Line_Position { TOP, BOTTOM, MIDDLE };
+  void lineposition(int line, Fl_Line_Position pos);
+  /**
+    Scrolls the browser so the top item in the browser
+    is showing the specified \p line.
+    \param[in] line The line to be displayed at the top.
+    \see topline(), middleline(), bottomline(), displayed(), lineposition()
+   */
+  void topline(int line) { lineposition(line, TOP); }
+  /**
+    Scrolls the browser so the bottom item in the browser
+    is showing the specified \p line.
+    \param[in] line The line to be displayed at the bottom.
+    \see topline(), middleline(), bottomline(), displayed(), lineposition()
+   */
+  void bottomline(int line) { lineposition(line, BOTTOM); }
+  /**
+    Scrolls the browser so the middle item in the browser
+    is showing the specified \p line.
+    \param[in] line The line to be displayed in the middle.
+    \see topline(), middleline(), bottomline(), displayed(), lineposition()
+   */
+  void middleline(int line) { lineposition(line, MIDDLE); }
+
+  int select(int line, int val=1);
+  int selected(int line) const ;
+  void show(int line);
+  /** Shows the entire Fl_Browser widget -- opposite of hide(). */
+  void show() { fltk3::Widget::show(); }
+  void hide(int line);
+  /** Hides the entire Fl_Browser widget -- opposite of show(). */
+  void hide() { fltk3::Widget::hide(); }
+  int visible(int line) const ;
+
+  int value() const ;
+  /**
+    Sets the browser's value(), which selects the specified \p line.
+    This is the same as calling select(line).
+    \see select(), selected(), value(), item_select(), item_selected()
+   */
+  void value(int line) { select(line); }
+  const char* text(int line) const ;
+  void text(int line, const char* newtext);
+  void* data(int line) const ;
+  void data(int line, void* d);
+
+  Fl_Browser(int X, int Y, int W, int H, const char *L = 0);
+  /**
+    The destructor deletes all list items and destroys the browser.
+   */
+  ~Fl_Browser() { clear(); }
+
+  /**
+    Gets the current format code prefix character, which by default is '\@'.
+    A string of formatting codes at the start of each column are stripped off
+    and used to modify how the rest of the line is printed:
+    
+    \li <tt>'\@.'</tt> Print rest of line, don't look for more '\@' signs
+    \li <tt>'\@\@'</tt> Print rest of line starting with '\@'
+    \li <tt>'\@l'</tt> Use a LARGE (24 point) font
+    \li <tt>'\@m'</tt> Use a medium large (18 point) font
+    \li <tt>'\@s'</tt> Use a <SMALL>small</SMALL> (11 point) font
+    \li <tt>'\@b'</tt> Use a <B>bold</B> font (adds FL_BOLD to font)
+    \li <tt>'\@i'</tt> Use an <I>italic</I> font (adds FL_ITALIC to font)
+    \li <tt>'\@f' or '\@t'</tt> Use a fixed-pitch
+    font (sets font to FL_COURIER)
+    \li <tt>'\@c'</tt> Center the line horizontally
+    \li <tt>'\@r'</tt> Right-justify the text
+    \li <tt>'\@B0', '\@B1', ... '\@B255'</tt> Fill the backgound with
+    fl_color(n)
+    \li <tt>'\@C0', '\@C1', ... '\@C255'</tt> Use fl_color(n) to draw the text
+    \li <tt>'\@F0', '\@F1', ...</tt> Use fl_font(n) to draw the text
+    \li <tt>'\@S1', '\@S2', ...</tt> Use point size n to draw the text
+    \li <tt>'\@u' or '\@_'</tt> Underline the text.
+    \li <tt>'\@-'</tt> draw an engraved line through the middle.
+
+    Notice that the '\@.' command can be used to reliably
+    terminate the parsing.  To print a random string in a random color, use 
+    <tt>sprintf("@C%d@.%s", color, string)</tt> and it will work even if the
+    string starts with a digit or has the format character in it.
+  */
+  char format_char() const { return format_char_; }
+  /**
+    Sets the current format code prefix character to \p c.
+    The default prefix is '\@'.  Set the prefix to 0 to disable formatting.
+    \see format_char() for list of '\@' codes
+  */
+  void format_char(char c) { format_char_ = c; }
+  /**
+    Gets the current column separator character.
+    The default is '\\t' (tab).
+    \see column_char(), column_widths()
+  */
+  char column_char() const { return column_char_; }
+  /**
+    Sets the column separator to c.
+    This will only have an effect if you also set column_widths().
+    The default is '\\t' (tab).
+    \see column_char(), column_widths()
+  */
+  void column_char(char c) { column_char_ = c; }
+  /**
+    Gets the current column width array.
+    This array is zero-terminated and specifies the widths in pixels of
+    each column. The text is split at each column_char() and each part is
+    formatted into it's own column.  After the last column any remaining
+    text is formatted into the space between the last column and the
+    right edge of the browser, even if the text contains instances of
+    column_char() .  The default value is a one-element array of just
+    a zero, which means there are no columns.
+
+    Example:
+    \code
+  Fl_Browser *b = new Fl_Browser(..);
+  int widths[] = { 50, 50, 50, 70, 70, 40, 40, 70, 70, 50, 0 };  // widths for each column
+  b->column_widths(widths); // assign array to widget
+  b->column_char('\t');     // use tab as the column character
+  b->add("USER\tPID\tCPU\tMEM\tVSZ\tRSS\tTTY\tSTAT\tSTART\tTIME\tCOMMAND");
+  b->add("root\t2888\t0.0\t0.0\t1352\t0\ttty3\tSW\tAug15\t0:00\t@b@f/sbin/mingetty tty3");
+  b->add("root\t13115\t0.0\t0.0\t1352\t0\ttty2\tSW\tAug30\t0:00\t@b@f/sbin/mingetty tty2");
+  [..]
+    \endcode
+    \see column_char(), column_widths()
+  */
+  const int* column_widths() const { return column_widths_; }
+  /**
+    Sets the current array to \p arr.  Make sure the last entry is zero.
+    \see column_char(), column_widths()
+  */
+  void column_widths(const int* arr) { column_widths_ = arr; }
+
+  /**
+    Returns non-zero if \p line has been scrolled to a position where it is being displayed.
+    Checks to see if the item's vertical position is within the top and bottom
+    edges of the display window. This does NOT take into account the hide()/show()
+    status of the widget or item.
+    \param[in] line The line to be checked
+    \returns 1 if visible, 0 if not visible.
+    \see topline(), middleline(), bottomline(), displayed(), lineposition()
+  */
+  int displayed(int line) const { return Fl_Browser_::displayed(find_line(line)); }
+
+  /**
+    Make the item at the specified \p line visible().
+    Functionally similar to show(int line).
+    If \p line is out of range, redisplay top or bottom of list as appropriate.
+    \param[in] line The line to be made visible.
+    \see show(int), hide(int), display(), visible(), make_visible()
+  */
+  void make_visible(int line) {
+    if (line < 1) Fl_Browser_::display(find_line(1));
+    else if (line > lines) Fl_Browser_::display(find_line(lines));
+    else Fl_Browser_::display(find_line(line));
+  }
+
+  // icon support
+  void icon(int line, Fl_Image* icon);
+  Fl_Image* icon(int line) const;
+  void remove_icon(int line);
+
+  /** For back compatibility only. */
+  void replace(int a, const char* b) { text(a, b); }
+  void display(int line, int val=1);
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Browser.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Browser_.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Browser_.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Browser_.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,378 @@
+//
+// "$Id: Fl_Browser_.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// Common browser header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Browser_ widget . */
+
+// Yes, I know this should be a template...
+
+#ifndef Fl_Browser__H
+#define Fl_Browser__H
+
+#ifndef Fl_Group_H
+#include "Fl_Group.H"
+#endif
+#include "Fl_Scrollbar.H"
+#include <fltk3/Fl.H>		// Fl::scrollbar_size()
+
+#define FL_NORMAL_BROWSER	0	/**< type() of Fl_Browser */
+#define FL_SELECT_BROWSER	1	/**< type() of FL_Select_Browser */
+#define FL_HOLD_BROWSER		2	/**< type() of Fl_Hold_Browser */
+#define FL_MULTI_BROWSER	3	/**< type() of Fl_Multi_Browser */
+
+#define FL_SORT_ASCENDING	0	/**< sort browser items in ascending alphabetic order. */
+#define FL_SORT_DESCENDING	1	/**< sort in descending order */
+
+/**
+  This is the base class for browsers.  To be useful it must be
+  subclassed and several virtual functions defined.  The Forms-compatible
+  browser and the file chooser's browser are subclassed off of this.
+
+  This has been designed so that the subclass has complete control
+  over the storage of the data, although because next() and 
+  prev() functions are used to index, it works best as a linked list
+  or as a large block of characters in which the line breaks must be
+  searched for.
+
+  A great deal of work has been done so that the "height" of a data
+  object does not need to be determined until it is drawn.  This is
+  useful if actually figuring out the size of an object requires
+  accessing image data or doing stat() on a file or doing some
+  other slow operation.
+*/
+class FL_EXPORT Fl_Browser_ : public fltk3::Group {
+  int position_;	// where user wants it scrolled to
+  int real_position_;	// the current vertical scrolling position
+  int hposition_;	// where user wants it panned to
+  int real_hposition_;	// the current horizontal scrolling position
+  int offset_;		// how far down top_ item the real_position is
+  int max_width;	// widest object seen so far
+  uchar has_scrollbar_;	// which scrollbars are enabled
+  Fl_Font textfont_;
+  Fl_Fontsize textsize_;
+  Fl_Color textcolor_;
+  void* top_;		// which item scrolling position is in
+  void* selection_;	// which is selected (except for FL_MULTI_BROWSER)
+  void *redraw1,*redraw2; // minimal update pointers
+  void* max_width_item;	// which item has max_width_
+  int scrollbar_size_;	// size of scrollbar trough
+
+  void update_top();
+
+protected:
+
+  // All of the following must be supplied by the subclass:
+  /**
+    This method must be provided by the subclass 
+    to return the first item in the list.
+    \see item_first(), item_next(), item_last(), item_prev()
+   */
+  virtual void *item_first() const = 0;
+  /**
+    This method must be provided by the subclass
+    to return the item in the list after \p item.
+    \see item_first(), item_next(), item_last(), item_prev()
+   */
+  virtual void *item_next(void *item) const = 0;
+  /**
+    This method must be provided by the subclass
+    to return the item in the list before \p item.
+    \see item_first(), item_next(), item_last(), item_prev()
+   */
+  virtual void *item_prev(void *item) const = 0;
+  /**
+    This method must be provided by the subclass
+    to return the last item in the list.
+    \see item_first(), item_next(), item_last(), item_prev()
+   */
+  virtual void *item_last() const { return 0L; }
+  /** 
+    This method must be provided by the subclass to return 
+    the height of \p item in pixels.
+    Allow for two additional pixels for the list selection box.
+    \param[in] item The item whose height is returned.
+    \returns The height of the specified \p item in pixels.
+    \see item_height(), item_width(), item_quick_height()
+  */
+  virtual int item_height(void *item) const = 0;
+  /**
+    This method must be provided by the subclass to return the width of the
+    \p item in pixels.  Allow for two additional pixels for the list
+    selection box.
+    \param[in] item The item whose width is returned.
+    \returns The width of the item in pixels.
+  */
+  virtual int item_width(void *item) const = 0;
+  virtual int item_quick_height(void *item) const ;
+  /**
+    This method must be provided by the subclass to draw the \p item
+    in the area indicated by \p X, \p Y, \p W, \p H.
+  */
+  virtual void item_draw(void *item,int X,int Y,int W,int H) const = 0;
+  /**
+    This optional method returns a string (label) that may be used for sorting. 
+    \param[in] item The item whose label text is returned.
+    \returns The item's text label. (Can be NULL if blank)
+   */
+  virtual const char *item_text(void *item) const { return 0L; }
+  /**
+    This optional method should be provided by the subclass 
+    to efficiently swap browser items \p a and \p b, such as for sorting.
+    \param[in] a,b The two items to be swapped.
+   */
+  virtual void item_swap(void *a,void *b) { }
+  /**
+    This method must be provided by the subclass 
+    to return the item for the specified \p index. 
+    \param[in] index The \p index of the item to be returned
+    \returns The item at the specified \p index.
+   */
+  virtual void *item_at(int index) const { return 0L; }
+  // you don't have to provide these but it may help speed it up:
+  virtual int full_width() const ;	// current width of all items
+  virtual int full_height() const ;	// current height of all items
+  virtual int incr_height() const ;	// average height of an item
+  // These only need to be done by subclass if you want a multi-browser:
+  virtual void item_select(void *item,int val=1);
+  virtual int item_selected(void *item) const ;
+
+  // things the subclass may want to call:
+  /**
+    Returns the item that appears at the top of the list.
+   */
+  void *top() const { return top_; }
+  /**
+    Returns the item currently selected, or NULL if there is no selection.
+    
+    For multiple selection browsers this call returns the currently focused item,
+    even if it is not selected. To find all selected items, call 
+    Fl_Multi_Browser::selected() for every item in question.
+  */
+  void *selection() const { return selection_; }
+  void new_list(); // completely clobber all data, as though list replaced
+  void deleting(void *item); // get rid of any pointers to item
+  void replacing(void *a,void *b); // change a pointers to b
+  void swapping(void *a,void *b); // exchange pointers a and b
+  void inserting(void *a,void *b); // insert b near a
+  int displayed(void *item) const ; // true if this item is visible
+  void redraw_line(void *item); // minimal update, no change in size
+  /**
+    This method will cause the entire list to be redrawn.
+    \see redraw_lines(), redraw_line()
+   */
+  void redraw_lines() { damage(FL_DAMAGE_SCROLL); } // redraw all of them
+  void bbox(int &X,int &Y,int &W,int &H) const;
+  int leftedge() const;	// x position after scrollbar & border
+  void *find_item(int ypos); // item under mouse
+  
+  void draw();
+  Fl_Browser_(int X,int Y,int W,int H,const char *L=0);
+
+public:
+
+  /**
+    Vertical scrollbar. Public, so that it can be accessed directly.
+   */
+  Fl_Scrollbar scrollbar;
+  /**
+    Horizontal scrollbar. Public, so that it can be accessed directly.
+   */
+  Fl_Scrollbar hscrollbar;
+
+  int handle(int event);
+  void resize(int X,int Y,int W,int H);
+
+  int select(void *item,int val=1,int docallbacks=0);
+  int select_only(void *item,int docallbacks=0);
+  int deselect(int docallbacks=0);
+  /**
+    Gets the vertical scroll position of the list as a pixel position \p pos.
+    The position returned is how many pixels of the list are scrolled off the top edge
+    of the screen.  Example: A position of '3' indicates the top 3 pixels of 
+    the list are scrolled off the top edge of the screen.
+    \see position(), hposition()
+  */
+  int position() const { return position_; }
+  void position(int pos); // scroll to here
+  /**
+    Gets the horizontal scroll position of the list as a pixel position \p pos.
+    The position returned is how many pixels of the list are scrolled off the left edge
+    of the screen. Example: A position of '18' indicates the left 18 pixels of
+    the list are scrolled off the left edge of the screen.
+    \see position(), hposition()
+  */
+  int hposition() const { return hposition_; }
+  void hposition(int); // pan to here
+  void display(void *item); // scroll so this item is shown
+
+  /**
+    Values for has_scrollbar().
+   */
+  /** Anonymous enum bit flags for has_scrollbar().
+     -  bit 0: horizontal
+     -  bit 1: vertical
+     -  bit 2: 'always' (to be combined with bits 0 and 1)
+     -  bit 3-31: reserved for future use
+   */
+  enum { // values for has_scrollbar()
+    HORIZONTAL = 1,		///< Only show horizontal scrollbar.
+    VERTICAL = 2,		///< Only show vertical scrollbar.
+    BOTH = 3,			///< Show both scrollbars. (default)
+    ALWAYS_ON = 4,		///< Specified scrollbar(s) should 'always' be shown (to be used with HORIZONTAL/VERTICAL)
+    HORIZONTAL_ALWAYS = 5,	///< Horizontal scrollbar always on.
+    VERTICAL_ALWAYS = 6,	///< Vertical scrollbar always on.
+    BOTH_ALWAYS = 7		///< Both scrollbars always on.
+  };
+  /**
+    Returns the current scrollbar mode, see Fl_Browser_::has_scrollbar(uchar)
+   */
+  uchar has_scrollbar() const { return has_scrollbar_; }
+  /**
+    Sets whether the widget should have scrollbars or not (default Fl_Browser_::BOTH).
+    By default you can scroll in both directions, and the scrollbars
+    disappear if the data will fit in the widget.  
+    has_scrollbar() changes this based on the value of \p mode:
+  
+    - 0 - No scrollbars.
+
+    - Fl_Browser_::HORIZONTAL - Only a horizontal scrollbar.
+
+    - Fl_Browser_::VERTICAL - Only a vertical scrollbar.
+
+    - Fl_Browser_::BOTH - The default is both scrollbars.
+
+    - Fl_Browser_::HORIZONTAL_ALWAYS - Horizontal scrollbar always on,
+      vertical always off.
+
+    - Fl_Browser_::VERTICAL_ALWAYS - Vertical scrollbar always on,
+      horizontal always off.
+
+    - Fl_Browser_::BOTH_ALWAYS - Both always on.
+  */
+  void has_scrollbar(uchar mode) { has_scrollbar_ = mode; }
+
+  /**
+    Gets the default text font for the lines in the browser.
+    \see textfont(), textsize(), textcolor()
+  */
+  Fl_Font textfont() const { return textfont_; }
+  /**
+    Sets the default text font for the lines in the browser to \p font.
+  */
+  void textfont(Fl_Font font) { textfont_ = font; }
+
+  /**
+    Gets the default text size (in pixels) for the lines in the browser.
+  */
+  Fl_Fontsize textsize() const { return textsize_; }
+  /**
+    Sets the default text size (in pixels) for the lines in the browser to \p size.
+  */
+  void textsize(Fl_Fontsize size) { textsize_ = size; }
+
+  /**
+    Gets the default text color for the lines in the browser.
+  */
+  Fl_Color textcolor() const { return textcolor_; }
+  /**
+    Sets the default text color for the lines in the browser to color \p col.
+  */
+  void textcolor(Fl_Color col) { textcolor_ = col; }
+
+  /**
+    Gets the current size of the scrollbars' troughs, in pixels.
+
+    If this value is zero (default), this widget will use the 
+    fltk3::scrollbar_size() value as the scrollbar's width.
+  
+    \returns Scrollbar size in pixels, or 0 if the global fltk3::scrollsize() is being used.
+    \see fltk3::scrollbar_size(int)
+  */
+  int scrollbar_size() const {
+      return(scrollbar_size_);
+  }
+  /**
+    Sets the pixel size of the scrollbars' troughs to the \p size, in pixels.
+
+    Normally you should not need this method, and should use
+    fltk3::scrollbar_size(int) instead to manage the size of ALL 
+    your widgets' scrollbars. This ensures your application 
+    has a consistent UI, is the default behavior, and is normally
+    what you want.
+
+    Only use THIS method if you really need to override the global
+    scrollbar size. The need for this should be rare.
+    
+    Setting \p size to the special value of 0 causes the widget to
+    track the global fltk3::scrollbar_size(), which is the default.
+    
+    \param[in] size Sets the scrollbar size in pixels.\n
+                    If 0 (default), scrollbar size tracks the global fltk3::scrollbar_size()
+    \see fltk3::scrollbar_size()
+  */
+  void scrollbar_size(int size) {
+      scrollbar_size_ = size;
+  }   
+  /**
+    This method has been deprecated, existing for backwards compatibility only.
+    Use scrollbar_size() instead.
+    This method always returns the global value fltk3::scrollbar_size().
+    \returns Always returns the global value fltk3::scrollbar_size().
+    \todo This method should eventually be removed in 1.4+
+  */
+  int scrollbar_width() const {
+      return(fltk3::scrollbar_size());
+  }
+  /**
+    This method has been deprecated, existing for backwards compatibility only.
+    Use scrollbar_size(int) instead.
+    This method sets the global fltk3::scrollbar_size(), and forces this
+    instance of the widget to use it.
+    \todo This method should eventually be removed in 1.4+
+  */
+  void scrollbar_width(int width) {
+      fltk3::scrollbar_size(width);
+      scrollbar_size_ = 0;
+  }
+  /**
+    Moves the vertical scrollbar to the righthand side of the list.
+    For back compatibility.
+  */
+  void scrollbar_right() { scrollbar.align(FL_ALIGN_RIGHT); }
+  /**
+    Moves the vertical scrollbar to the lefthand side of the list.
+    For back compatibility.
+  */
+  void scrollbar_left() { scrollbar.align(FL_ALIGN_LEFT); }
+  void sort(int flags=0);
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Browser_.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Button.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Button.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Button.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,176 @@
+//
+// "$Id: Fl_Button.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// Button header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Button widget . */
+
+#ifndef Fl_Button_H
+#define Fl_Button_H
+
+#ifndef Fl_Widget_H
+#include "Fl_Widget.H"
+#endif
+
+// values for type()
+#define FL_NORMAL_BUTTON	0   /**< value() will be set to 1 during the press of the button and 
+                                         reverts back to 0 when the button is released */
+#define FL_TOGGLE_BUTTON	1   ///< value() toggles between 0 and 1 at every click of the button
+#define FL_RADIO_BUTTON		(FL_RESERVED_TYPE+2) /**< is set to 1 at button press, and all other
+				         buttons in the same group with <tt>type() == FL_RADIO_BUTTON</tt>
+				         are set to zero.*/
+#define FL_HIDDEN_BUTTON	3   ///< for Forms compatibility
+
+#ifndef FL_DOXYGEN
+extern FL_EXPORT Fl_Shortcut fl_old_shortcut(const char*);
+#endif
+
+/**
+  \class Fl_Button
+  \brief Buttons generate callbacks when they are clicked by the user.
+  
+  You control exactly when and how by changing the values for type() and
+  when().  Buttons can also generate callbacks in response to \c FL_SHORTCUT
+  events.  The button can either have an explicit shortcut(int s) value or a
+  letter shortcut can be indicated in the label() with an '\&' character
+  before it.  For the label shortcut it does not matter if \e Alt is held
+  down, but if you have an input field in the same window, the user will have
+  to hold down the \e Alt key so that the input field does not eat the event
+  first as an \c FL_KEYBOARD event.
+
+  \todo Refactor the doxygen comments for Fl_Button type() documentation.
+
+  For an Fl_Button object, the type() call returns one of:
+  \li \c FL_NORMAL_BUTTON (0): value() remains unchanged after button press.
+  \li \c FL_TOGGLE_BUTTON: value() is inverted after button press.
+  \li \c FL_RADIO_BUTTON: value() is set to 1 after button press, and all other
+         buttons in the current group with <tt>type() == FL_RADIO_BUTTON</tt>
+	 are set to zero.
+
+  \todo Refactor the doxygen comments for Fl_Button when() documentation.
+
+  For an Fl_Button object, the following when() values are useful, the default
+  being \c FL_WHEN_RELEASE:
+  \li \c 0: The callback is not done, instead changed() is turned on.
+  \li \c FL_WHEN_RELEASE: The callback is done after the user successfully
+         clicks the button, or when a shortcut is typed.
+  \li \c FL_WHEN_CHANGED: The callback is done each time the value() changes
+         (when the user pushes and releases the button, and as the mouse is
+	 dragged around in and out of the button).
+*/
+class FL_EXPORT Fl_Button : public fltk3::Widget {
+
+  int shortcut_;
+  char value_;
+  char oldval;
+  uchar down_box_;
+
+protected:
+
+  virtual void draw();
+
+public:
+
+  virtual int handle(int);
+
+  Fl_Button(int X, int Y, int W, int H, const char *L = 0);
+
+  int value(int v);
+
+  /**
+    Returns the current value of the button (0 or 1).
+   */
+  char value() const {return value_;}
+
+  /**
+    Same as \c value(1).
+    \see value(int v)
+   */
+  int set() {return value(1);}
+
+  /**
+    Same as \c value(0).
+    \see value(int v)
+   */
+  int clear() {return value(0);}
+
+  void setonly(); // this should only be called on FL_RADIO_BUTTONs
+
+  /**
+    Returns the current shortcut key for the button.
+    \retval int
+   */
+  int shortcut() const {return shortcut_;}
+
+  /**
+    Sets the shortcut key to \c s.
+    Setting this overrides the use of '\&' in the label().
+    The value is a bitwise OR of a key and a set of shift flags, for example:
+    <tt>FL_ALT | 'a'</tt>, or
+    <tt>FL_ALT | (FL_F + 10)</tt>, or just
+    <tt>'a'</tt>.
+    A value of 0 disables the shortcut.
+
+    The key can be any value returned by fltk3::event_key(), but will usually be
+    an ASCII letter.  Use a lower-case letter unless you require the shift key
+    to be held down.
+
+    The shift flags can be any set of values accepted by fltk3::event_state().
+    If the bit is on, that shift key must be pushed.  Meta, Alt, Ctrl, and
+    Shift must be off if they are not in the shift flags (zero for the other
+    bits indicates a "don't care" setting).
+    \param[in] s bitwise OR of key and shift flags
+   */
+  void shortcut(int s) {shortcut_ = s;}
+
+  /**
+    Returns the current down box type, which is drawn when value() is non-zero.
+    \retval Fl_Boxtype
+   */
+  Fl_Boxtype down_box() const {return (Fl_Boxtype)down_box_;}
+
+  /**
+    Sets the down box type. The default value of 0 causes FLTK to figure out
+    the correct matching down version of box().
+    \param[in] b down box type
+   */
+  void down_box(Fl_Boxtype b) {down_box_ = b;}
+
+  /// (for backwards compatibility)
+  void shortcut(const char *s) {shortcut(fl_old_shortcut(s));}
+
+  /// (for backwards compatibility)
+  Fl_Color down_color() const {return selection_color();}
+
+  /// (for backwards compatibility)
+  void down_color(unsigned c) {selection_color(c);}
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Button.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Cairo.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Cairo.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Cairo.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,97 @@
+//
+// "$Id: Fl_Cairo.H 6716 2009-03-24 01:40:44Z fabien $"
+//
+// Main header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+    Handling transparently platform dependent cairo include files 
+*/
+
+#ifndef FL_CAIRO_H
+# define FL_CAIRO_H
+# ifdef HAVE_CAIRO
+
+// Cairo is currently supported for the following platforms:
+// Win32, Apple Quartz, X11
+
+# include <fltk3/Fl_Export.H>
+
+# if defined(USE_X11) // X11
+#  include <cairo-xlib.h>
+# elif defined(WIN32)
+#  include <cairo-win32.h>
+# elif defined(__APPLE_QUARTZ__)
+#  include <cairo-quartz.h>
+# else
+#  error Cairo is not supported on that platform.
+# endif
+
+/** 
+   \addtogroup group_cairo
+   @{
+*/
+
+/** 
+   Contains all the necessary info on the current cairo context.
+   A private internal & unique corresponding object is created to
+   permit cairo context state handling while keeping it opaque.
+   For internal use only.
+   \note Only available when configure has the --enable-cairo option
+*/
+class FL_EXPORT Fl_Cairo_State {
+public:
+  Fl_Cairo_State() : cc_(0), own_cc_(false), autolink_(false), window_(0), gc_(0) {}
+
+    // access attributes
+    cairo_t* cc() const {return cc_;}		 ///< Gets the current cairo context
+    bool autolink() const {return autolink_;}	 ///< Gets the autolink option. See fltk3::cairo_autolink_context(bool)
+    /** Sets the current cairo context, \p own indicates cc deletion is handle externally by user */
+    void cc(cairo_t* c, bool own=true)  {	 
+	if (cc_ && own_cc_) cairo_destroy(cc_); 
+	cc_=c;
+	if (!cc_) window_=0;
+	own_cc_=own;
+    }
+    void  autolink(bool b);                     ///< Sets the autolink option, only available with --enable-cairoext
+    void  window(void* w)  {window_=w;}		///< Sets the window \p w to keep track on
+    void* window() const {return window_;}	///< Gets the last window attached to a cc
+    void  gc(void* c)  {gc_=c;}		        ///< Sets the gc \p c to keep track on
+    void* gc() const {return gc_;}		///< Gets the last gc attached to a cc
+
+private:
+    cairo_t * cc_;	 // contains the unique autoupdated cairo context
+    bool own_cc_;	 // indicates whether we must delete the cc, useful for internal cleanup
+    bool autolink_;	 // true by default, permits to prevent the automatic cairo mapping on fltk windows for custom cairo implementations
+    void* window_, *gc_; // for keeping track internally of last win+gc treated
+};
+
+/** @} */
+
+# endif // HAVE_CAIRO
+#endif // FL_CAIRO_H
+
+//
+// End of "$Id: Fl_Cairo.H 6716 2009-03-24 01:40:44Z fabien $" .
+//

Added: branches/branch-3.0/fltk3/Fl_Cairo_Window.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Cairo_Window.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Cairo_Window.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,92 @@
+//
+// "$Id: Fl_Cairo_Window.H 6716 2009-03-24 01:40:44Z fabien $"
+//
+// Main header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+    Fl_Cairo_Window Handling transparently a fltk window incorporte a cairo draw callback.
+*/
+
+#ifndef FL_CAIRO_WINDOW_H
+# define FL_CAIRO_WINDOW_H
+# ifdef HAVE_CAIRO
+
+// Cairo is currently supported for the following platforms:
+// Win32, Apple Quartz, X11
+#  include <fltk3/Fl.H>
+#  include <fltk3/Fl_Double_Window.H>
+
+/** 
+   \addtogroup group_cairo
+   @{
+*/
+
+/**
+   This defines a pre-configured cairo fltk window.
+   This class overloads the virtual draw() method for you,
+   so that the only thing you have to do is to provide your cairo code.
+   All cairo context handling is achieved transparently.
+   \note You can alternatively define your custom cairo fltk window,
+   and thus at least override the draw() method to provide custom cairo
+   support. In this case you will probably use fltk3::cairo_make_current(fltk3::Window*)
+   to attach a context to your window. You should do it only when your window is 
+   the current window. \see fltk3::Window::current()
+*/
+class FL_EXPORT Fl_Cairo_Window : public Fl_Double_Window {
+
+public:
+  Fl_Cairo_Window(int w, int h) : Fl_Double_Window(w,h),draw_cb_(0) {}
+
+protected:
+  /** Overloaded to provide cairo callback support */
+  void draw() {
+    Fl_Double_Window::draw();
+    // manual method ? if yes explicitly get a cairo_context here
+    if (!fltk3::cairo_autolink_context()) 
+      fltk3::cairo_make_current(this); 
+    if (draw_cb_) draw_cb_(this, fltk3::cairo_cc());
+  }
+
+public:
+  /** This defines the cairo draw callback prototype that you must further */
+  typedef void (*cairo_draw_cb) (Fl_Cairo_Window* self, cairo_t* def);
+  /** 
+    You must provide a draw callback which will implement your cairo rendering.
+    This method will permit you to set your cairo callback to \p cb.
+  */
+  void set_draw_cb(cairo_draw_cb  cb){draw_cb_=cb;}
+private:
+    cairo_draw_cb draw_cb_;
+};
+
+
+/** @} */
+
+# endif // HAVE_CAIRO
+#endif // FL_CAIRO_WINDOW_H
+
+//
+// End of "$Id: Fl_Cairo_Window.H 6716 2009-03-24 01:40:44Z fabien $" .
+//

Added: branches/branch-3.0/fltk3/Fl_Chart.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Chart.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Chart.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,160 @@
+//
+// "$Id: Fl_Chart.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// Forms chart header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Chart widget . */
+
+#ifndef Fl_Chart_H
+#define Fl_Chart_H
+
+#ifndef Fl_Widget_H
+#include "Fl_Widget.H"
+#endif
+
+// values for type()
+#define FL_BAR_CHART		0	/**< type() for Bar Chart variant */
+#define FL_HORBAR_CHART		1	/**< type() for Horizontal Bar Chart variant */
+#define FL_LINE_CHART		2	/**< type() for Line Chart variant */
+#define FL_FILL_CHART		3	/**< type() for Fill Line Chart variant */
+#define FL_SPIKE_CHART		4	/**< type() for Spike Chart variant */
+#define FL_PIE_CHART		5	/**< type() for Pie Chart variant */
+#define FL_SPECIALPIE_CHART	6	/**< type() for Special Pie Chart variant */
+
+#define FL_FILLED_CHART  FL_FILL_CHART	/**< for compatibility */
+
+#define FL_CHART_MAX		128	/**< max entries per chart */
+#define FL_CHART_LABEL_MAX	18	/**< max label length for entry */
+
+/** For internal use only */
+struct FL_CHART_ENTRY {
+   float val;				/**< For internal use only. */
+   unsigned col;			/**< For internal use only. */
+   char str[FL_CHART_LABEL_MAX+1];	/**< For internal use only. */
+};
+
+/**
+  \class Fl_Chart
+  \brief Fl_Chart displays simple charts.
+  It is provided for Forms compatibility.
+
+  \image html charts.gif  
+  \image latex charts.eps  "Fl_Chart" width=10cm
+  \todo Refactor Fl_Chart::type() information.
+
+  The type of an Fl_Chart object can be set using type(uchar t) to:
+  \li \c FL_BAR_CHART: Each sample value is drawn as a vertical bar.
+  \li \c FL_FILLED_CHART: The chart is filled from the bottom of the graph
+         to the sample values.
+  \li \c FL_HORBAR_CHART: Each sample value is drawn as a horizontal bar.
+  \li \c FL_LINE_CHART: The chart is drawn as a polyline with vertices at
+         each sample value.
+  \li \c FL_PIE_CHART: A pie chart is drawn with each sample value being
+         drawn as a proportionate slice in the circle.
+  \li \c FL_SPECIALPIE_CHART: Like \c FL_PIE_CHART, but the first slice is
+         separated from the pie.
+  \li \c FL_SPIKE_CHART: Each sample value is drawn as a vertical line.
+ */
+class FL_EXPORT Fl_Chart : public fltk3::Widget {
+    int numb;
+    int maxnumb;
+    int sizenumb;
+    FL_CHART_ENTRY *entries;
+    double min,max;
+    uchar autosize_;
+    Fl_Font textfont_;
+    Fl_Fontsize textsize_;
+    Fl_Color textcolor_;
+protected:
+    void draw();
+public:
+    Fl_Chart(int X, int Y, int W, int H, const char *L = 0);
+
+    ~Fl_Chart();
+
+    void clear();
+
+    void add(double val, const char *str = 0, unsigned col = 0);
+
+    void insert(int ind, double val, const char *str = 0, unsigned col = 0);
+
+    void replace(int ind, double val, const char *str = 0, unsigned col = 0);
+
+    /**
+      Gets the lower and upper bounds of the chart values.
+      \param[out] a, b are set to lower, upper
+     */
+    void bounds(double *a,double *b) const {*a = min; *b = max;}
+
+    void bounds(double a,double b);
+
+    /**
+      Returns the number of data values in the chart.
+     */
+    int size() const {return numb;}
+
+  void size(int W, int H) { fltk3::Widget::size(W, H); }
+
+    /**
+      Gets the maximum number of data values for a chart.
+     */
+    int maxsize() const {return maxnumb;}
+
+    void maxsize(int m);
+
+    /** Gets the chart's text font */
+    Fl_Font textfont() const {return textfont_;}
+    /** Sets the chart's text font to \p s. */
+    void textfont(Fl_Font s) {textfont_ = s;}
+
+    /** Gets the chart's text size */
+    Fl_Fontsize textsize() const {return textsize_;}
+    /** gets the chart's text size to \p s. */
+    void textsize(Fl_Fontsize s) {textsize_ = s;}
+
+    /** Gets the chart's text color */
+    Fl_Color textcolor() const {return textcolor_;}
+    /** gets the chart's text color to \p n. */
+    void textcolor(Fl_Color n) {textcolor_ = n;}
+
+    /**
+      Get whether the chart will automatically adjust the bounds of the chart.
+      \returns non-zero if auto-sizing is enabled and zero if disabled.
+     */
+    uchar autosize() const {return autosize_;}
+
+    /**
+      Set whether the chart will automatically adjust the bounds of the chart.
+      \param[in] n non-zero to enable automatic resizing, zero to disable.
+     */
+    void autosize(uchar n) {autosize_ = n;}
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Chart.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Check_Browser.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Check_Browser.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Check_Browser.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,122 @@
+//
+// "$Id: Fl_Check_Browser.H 6614 2009-01-01 16:11:32Z matt $"
+//
+// Fl_Check_Browser header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Check_Browser widget . */
+
+#ifndef Fl_Check_Browser_H
+#define Fl_Check_Browser_H
+
+#include "Fl.H"
+#include "Fl_Browser_.H"
+
+/**
+  The Fl_Check_Browser widget displays a scrolling list of text
+  lines that may be selected and/or checked by the user.
+*/
+class FL_EXPORT Fl_Check_Browser : public Fl_Browser_ {
+  /* required routines for Fl_Browser_ subclass: */
+
+  void *item_first() const;
+  void *item_next(void *) const;
+  void *item_prev(void *) const;
+  int item_height(void *) const;
+  int item_width(void *) const;
+  void item_draw(void *, int, int, int, int) const;
+  void item_select(void *, int);
+  int item_selected(void *) const;
+
+  /* private data */
+
+  public: // IRIX 5.3 C++ compiler doesn't support private structures...
+
+#ifndef FL_DOXYGEN
+  /** For internal use only. */
+  struct cb_item {
+	  cb_item *next;	/**< For internal use only. */
+	  cb_item *prev;	/**< For internal use only. */
+	  char checked;		/**< For internal use only. */
+	  char selected;	/**< For internal use only. */
+	  char *text;		/**< For internal use only. */
+  };
+#endif // !FL_DOXYGEN
+
+  private:
+
+  cb_item *first;
+  cb_item *last;
+  cb_item *cache;
+  int cached_item;
+  int nitems_;
+  int nchecked_;
+  cb_item *find_item(int) const;
+  int lineno(cb_item *) const;
+
+  public:
+
+  Fl_Check_Browser(int x, int y, int w, int h, const char *l = 0);
+   /** The destructor deletes all list items and destroys the browser. */
+  ~Fl_Check_Browser() { clear(); }
+  int add(char *s);               // add an (unchecked) item
+  int add(char *s, int b);        // add an item and set checked
+				  // both return the new nitems()
+  int remove(int item);           // delete an item. Returns nitems()
+
+  // inline const char * methods to avoid breaking binary compatibility...
+   /** See int Fl_Check_Browser::add(char *s) */
+  int add(const char *s) { return add((char *)s); }
+  /** See int Fl_Check_Browser::add(char *s) */
+  int add(const char *s, int b) { return add((char *)s, b); }
+
+  void clear();                   // delete all items
+  /**
+    Returns how many lines are in the browser.  The last line number is equal to
+    this.
+  */
+  int nitems() const { return nitems_; }
+  /**    Returns how many items are currently checked.  */
+  int nchecked() const { return nchecked_; }
+  int checked(int item) const;
+  void checked(int item, int b);
+  /**    Equivalent to Fl_Check_Browser::checked(item, 1).  */
+  void set_checked(int item) { checked(item, 1); }
+  void check_all();
+  void check_none();
+  int value() const;              // currently selected item
+  char *text(int item) const;     // returns pointer to internal buffer
+
+  protected:
+
+  int handle(int);
+};
+
+#endif // Fl_Check_Browser_H
+
+//
+// End of "$Id: Fl_Check_Browser.H 6614 2009-01-01 16:11:32Z matt $".
+//
+

Added: branches/branch-3.0/fltk3/Fl_Check_Button.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Check_Button.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Check_Button.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,60 @@
+//
+// "$Id: Fl_Check_Button.H 6614 2009-01-01 16:11:32Z matt $"
+//
+// Check button header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Check_Button widget . */
+
+#ifndef Fl_Check_Button_H
+#define Fl_Check_Button_H
+
+#include "Fl_Light_Button.H"
+
+/**
+  \class Fl_Check_Button
+  \brief A button with an "checkmark" to show its status.
+
+  \image html Fl_Check_Button.gif
+  \image latex Fl_Check_Button.eps  "Fl_Check_Button" width=4cm
+  Buttons generate callbacks when they are clicked by the user. You control
+  exactly when and how by changing the values for type() and when().
+
+  The Fl_Check_Button subclass displays its "ON" state by showing a "checkmark"
+  rather than drawing itself pushed in.
+  
+  \todo Refactor Fl_Check_Button doxygen comments (add color() info etc?)
+  \todo Generate Fl_Check_Button.gif with visible checkmark.
+ */
+class FL_EXPORT Fl_Check_Button : public Fl_Light_Button {
+public:
+  Fl_Check_Button(int X, int Y, int W, int H, const char *L = 0);
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Check_Button.H 6614 2009-01-01 16:11:32Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Choice.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Choice.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Choice.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,108 @@
+//
+// "$Id: Fl_Choice.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// Choice header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Choice widget . */
+
+#ifndef Fl_Choice_H
+#define Fl_Choice_H
+
+#include "Fl_Menu_.H"
+
+/**
+  \class Fl_Choice
+  \brief A button that is used to pop up a menu.
+
+  This is a button that, when pushed, pops up a menu (or hierarchy of menus)
+  defined by an array of Fl_Menu_Item objects.
+  Motif calls this an OptionButton.
+
+  The only difference between this and a Fl_Menu_Button is that the name of
+  the most recent chosen menu item is displayed inside the box, while the
+  label is displayed outside the box. However, since the use of this is most
+  often to control a single variable rather than do individual callbacks,
+  some of the Fl_Menu_Button methods are redescribed here in those terms.
+
+  When the user picks an item off the menu the value() is set to that item
+  and then the item's callback is done with the menu_button as the
+  \c fltk3::Widget* argument. If the item does not have a callback the
+  menu_button's callback is done instead.
+
+  All three mouse buttons pop up the menu. The Forms behavior of the first
+  two buttons to increment/decrement the choice is not implemented.  This
+  could be added with a subclass, however.
+
+  The menu will also pop up in response to shortcuts indicated by putting
+  a '\&' character in the label().  See Fl_Button::shortcut(int s) for a
+  description of this.
+
+  Typing the shortcut() of any of the items will do exactly the same as when
+  you pick the item with the mouse.  The '\&' character in item names are
+  only looked at when the menu is popped up, however.
+
+  \image html choice.gif
+  \image latex choice.eps  "Fl_Choice" width=4cm
+  \todo Refactor the doxygen comments for Fl_Choice changed() documentation.
+
+  \li <tt>int fltk3::Widget::changed() const</tt>
+      This value is true the user picks a different value. <em>It is turned
+      off by value() and just before doing a callback (the callback can turn
+      it back on if desired).</em>
+  \li <tt>void fltk3::Widget::set_changed()</tt>
+      This method sets the changed() flag.
+  \li <tt>void fltk3::Widget::clear_changed()</tt>
+      This method clears the changed() flag.
+  \li <tt>Fl_Boxtype Fl_Choice::down_box() const</tt>
+      Gets the current down box, which is used when the menu is popped up.
+      The default down box type is \c FL_DOWN_BOX.
+  \li <tt>void Fl_Choice::down_box(Fl_Boxtype b)</tt>
+      Sets the current down box type to \p b.
+ */
+class FL_EXPORT Fl_Choice : public Fl_Menu_ {
+protected:
+  void draw();
+public:
+  int handle(int);
+
+  Fl_Choice(int X, int Y, int W, int H, const char *L = 0);
+
+  /**
+    Gets the index of the last item chosen by the user.
+    The index is zero initially.
+   */
+  int value() const {return Fl_Menu_::value();}
+
+  int value(int v);
+
+  int value(const Fl_Menu_Item* v);
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Choice.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Clock.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Clock.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Clock.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,137 @@
+//
+// "$Id: Fl_Clock.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// Clock header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Clock, Fl_Clock_Output widgets . */
+
+#ifndef Fl_Clock_H
+#define Fl_Clock_H
+
+#ifndef Fl_Widget_H
+#include "Fl_Widget.H"
+#endif
+
+// values for type:
+#define FL_SQUARE_CLOCK		0	/**< type() of Square Clock variant */
+#define FL_ROUND_CLOCK		1	/**< type() of Round Clock variant */
+#define FL_ANALOG_CLOCK FL_SQUARE_CLOCK	/**< An analog clock is square */
+#define FL_DIGITAL_CLOCK FL_SQUARE_CLOCK /**< Not yet implemented */
+
+// fabien: Please keep the horizontal formatting of both images in class desc, 
+// don't lose vert. space for nothing!
+
+/**
+  \class Fl_Clock_Output
+  \brief This widget can be used to display a program-supplied time.
+  
+  The time shown on the clock is not updated. To display the current time,
+  use Fl_Clock instead.
+
+  \htmlonly <BR>  <table align=CENTER border=1 cellpadding=5 >  
+  <caption align=bottom>type() FL_SQUARE_CLOCK and FL_ROUND_CLOCK </caption> <TR><TD> \endhtmlonly
+  \image html clock.gif  
+  \htmlonly </TD> <TD> \endhtmlonly
+  \image html round_clock.gif 
+  \htmlonly </TD> </TR> </table> \endhtmlonly
+  \image latex clock.eps "FL_SQUARE_CLOCK type" width=4cm
+  \image latex round_clock.eps "FL_ROUND_CLOCK type" width=4cm
+ */
+class FL_EXPORT Fl_Clock_Output : public fltk3::Widget {
+  int hour_, minute_, second_;
+  ulong value_;
+  void drawhands(Fl_Color,Fl_Color); // part of draw
+protected:
+  void draw();
+  void draw(int X, int Y, int W, int H);
+public:
+
+  Fl_Clock_Output(int X, int Y, int W, int H, const char *L = 0);
+
+  void value(ulong v);	// set to this Unix time
+  
+  void value(int H, int m, int s);
+
+  /**
+    Returns the displayed time.
+    Returns the time in seconds since the UNIX epoch (January 1, 1970).
+    \see value(ulong)
+   */
+  ulong value() const {return value_;}
+
+  /**
+    Returns the displayed hour (0 to 23).
+    \see value(), minute(), second()
+   */
+  int hour() const {return hour_;}
+
+  /**
+    Returns the displayed minute (0 to 59).
+    \see value(), hour(), second()
+   */
+  int minute() const {return minute_;}
+
+  /**
+    Returns the displayed second (0 to 60, 60=leap second).
+    \see value(), hour(), minute()
+   */
+  int second() const {return second_;}
+};
+
+// a Fl_Clock displays the current time always by using a timeout:
+
+/**
+  \class Fl_Clock
+  \brief This widget provides a round analog clock display.
+
+  Fl_Clock is provided for Forms compatibility. 
+  It installs a 1-second timeout callback using fltk3::add_timeout().
+  You can choose the rounded or square type of the clock with type(), see below.
+  \htmlonly <BR>  <table align=CENTER border=1 cellpadding=5 >  
+  <caption align=bottom>type() FL_SQUARE_CLOCK and FL_ROUND_CLOCK </caption> <TR><TD> \endhtmlonly
+  \image html clock.gif  
+  \htmlonly </TD> <TD> \endhtmlonly
+  \image html round_clock.gif 
+  \htmlonly </TD> </TR> </table> \endhtmlonly
+  \image latex clock.eps "FL_SQUARE_CLOCK type" width=4cm  
+  \image latex round_clock.eps "FL_ROUND_CLOCK type" width=4cm
+ */
+class FL_EXPORT Fl_Clock : public Fl_Clock_Output {
+public:
+  int handle(int);
+
+  Fl_Clock(int X, int Y, int W, int H,  const char *L = 0);
+  
+  Fl_Clock(uchar t, int X, int Y, int W, int H, const char *L);
+  
+  ~Fl_Clock();
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Clock.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Color_Chooser.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Color_Chooser.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Color_Chooser.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,189 @@
+//
+// "$Id: Fl_Color_Chooser.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// Color chooser header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/** \file
+   Fl_Color_Chooser widget . */
+
+// The color chooser object and the color chooser popup.  The popup
+// is just a window containing a single color chooser and some boxes
+// to indicate the current and cancelled color.
+
+#ifndef Fl_Color_Chooser_H
+#define Fl_Color_Chooser_H
+
+#include <fltk3/Fl_Group.H>
+#include <fltk3/Fl_Box.H>
+#include <fltk3/Fl_Return_Button.H>
+#include <fltk3/Fl_Choice.H>
+#include <fltk3/Fl_Value_Input.H>
+
+#ifndef FL_DOXYGEN
+
+/** For internal use only */
+class FL_EXPORT Flcc_HueBox : public fltk3::Widget {
+  int px, py;
+protected:
+  void draw();
+  int handle_key(int);
+public:
+  int handle(int);
+  Flcc_HueBox(int X, int Y, int W, int H) : fltk3::Widget(X,Y,W,H) {
+  px = py = 0;}
+};
+
+/** For internal use only */
+class FL_EXPORT Flcc_ValueBox : public fltk3::Widget {
+  int py;
+protected:
+  void draw();
+  int handle_key(int);
+public:
+  int handle(int);
+  Flcc_ValueBox(int X, int Y, int W, int H) : fltk3::Widget(X,Y,W,H) {
+  py = 0;}
+};
+
+/** For internal use only */
+class FL_EXPORT Flcc_Value_Input : public Fl_Value_Input {
+public:
+  int format(char*);
+  Flcc_Value_Input(int X, int Y, int W, int H) : Fl_Value_Input(X,Y,W,H) {}
+};
+
+#endif // !FL_DOXYGEN
+
+/** \addtogroup group_comdlg 
+    @{ */
+
+/**
+  \class Fl_Color_Chooser
+  \brief The Fl_Color_Chooser widget provides a standard RGB color chooser.
+
+  \image html fl_color_chooser.jpg
+  \image latex fl_color_chooser.eps "fl_color_chooser()" width=5cm
+
+  You can place any number of the widgets into a panel of your own design.
+  The diagram shows the widget as part of a color chooser dialog created by
+  the fl_color_chooser() function. The Fl_Color_Chooser widget contains the
+  hue box, value slider, and rgb input fields from the above diagram (it
+  does not have the color chips or the Cancel or OK buttons).
+  The callback is done every time the user changes the rgb value. It is not
+  done if they move the hue control in a way that produces the \e same rgb
+  value, such as when saturation or value is zero.
+
+  The fl_color_chooser() function pops up a window to let the user pick an
+  arbitrary RGB color. They can pick the hue and saturation in the "hue box"
+  on the left (hold down CTRL to just change the saturation), and the
+  brightness using the vertical slider. Or they can type the 8-bit numbers
+  into the RGB Fl_Value_Input fields, or drag the mouse across them to adjust
+  them.  The pull-down menu lets the user set the input fields to show RGB,
+  HSV, or 8-bit RGB (0 to 255).
+
+  fl_color_chooser() returns non-zero if the user picks ok, and updates the
+  RGB values.  If the user picks cancel or closes the window this returns
+  zero and leaves RGB unchanged.
+
+  If you use the color chooser on an 8-bit screen, it will allocate all the
+  available colors, leaving you no space to exactly represent the color the
+  user picks! You can however use fl_rectf() to fill a region with a simulated
+  color using dithering.
+ */
+/** @} */
+class FL_EXPORT Fl_Color_Chooser : public fltk3::Group {
+  Flcc_HueBox huebox;
+  Flcc_ValueBox valuebox;
+  Fl_Choice choice;
+  Flcc_Value_Input rvalue;
+  Flcc_Value_Input gvalue;
+  Flcc_Value_Input bvalue;
+  Fl_Box resize_box;
+  double hue_, saturation_, value_;
+  double r_, g_, b_;
+  void set_valuators();
+  static void rgb_cb(fltk3::Widget*, void*);
+  static void mode_cb(fltk3::Widget*, void*);
+public:
+  /** Returns which Fl_Color_Chooser variant is currently active */
+  int mode() {return choice.value();}
+
+  /**
+    Returns the current hue.
+    0 <= hue < 6. Zero is red, one is yellow, two is green, etc.
+    <em>This value is convenient for the internal calculations - some other
+    systems consider hue to run from zero to one, or from 0 to 360.</em>
+   */
+  double hue() const {return hue_;}
+
+  /**
+    Returns the saturation.
+    0 <= saturation <= 1.
+   */
+  double saturation() const {return saturation_;}
+
+  /**
+    Returns the value/brightness.
+    0 <= value <= 1.
+   */
+  double value() const {return value_;}
+
+  /**
+    Returns the current red value.
+    0 <= r <= 1.
+   */
+  double r() const {return r_;}
+
+  /**
+    Returns the current green value.
+    0 <= g <= 1.
+   */
+  double g() const {return g_;}
+
+  /**
+    Returns the current blue value.
+    0 <= b <= 1.
+   */
+  double b() const {return b_;}
+
+  int hsv(double H, double S, double V);
+
+  int rgb(double R, double G, double B);
+
+  static void hsv2rgb(double H, double S, double V, double& R, double& G, double& B);
+
+  static void rgb2hsv(double R, double G, double B, double& H, double& S, double& V);
+
+  Fl_Color_Chooser(int X, int Y, int W, int H, const char *L = 0);
+};
+
+FL_EXPORT int fl_color_chooser(const char* name, double& r, double& g, double& b);
+FL_EXPORT int fl_color_chooser(const char* name, uchar& r, uchar& g, uchar& b);
+
+#endif
+
+//
+// End of "$Id: Fl_Color_Chooser.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Counter.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Counter.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Counter.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,124 @@
+//
+// "$Id: Fl_Counter.H 6939 2009-11-17 14:45:36Z matt $"
+//
+// Counter header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Counter widget . */
+
+// A numerical value with up/down step buttons.  From Forms.
+
+#ifndef Fl_Counter_H
+#define Fl_Counter_H
+
+#ifndef Fl_Valuator_H
+#include "Fl_Valuator.H"
+#endif
+
+// values for type():
+#define FL_NORMAL_COUNTER	0	/**< type() for counter with fast buttons */
+#define FL_SIMPLE_COUNTER	1	/**< type() for counter without fast buttons */
+
+/**
+  Controls a single floating point value with button (or keyboard) arrows.
+  Double arrows buttons achieve larger steps than simple arrows.
+  \see Fl_Spinner for value input with vertical step arrows.
+  <P align=center>\image html counter.gif</P>
+  \image latex counter.eps "Fl_Counter" width=4cm
+
+  \todo Refactor the doxygen comments for Fl_Counter type() documentation.
+
+  The type of an Fl_Counter object can be set using type(uchar t) to:
+  \li \c FL_NORMAL_COUNTER: Displays a counter with 4 arrow buttons.
+  \li \c FL_SIMPLE_COUNTER: Displays a counter with only 2 arrow buttons.
+*/
+class FL_EXPORT Fl_Counter : public Fl_Valuator {
+
+  Fl_Font textfont_;
+  Fl_Fontsize textsize_;
+  Fl_Color textcolor_;
+  double lstep_;
+  uchar mouseobj;
+  static void repeat_callback(void *);
+  int calc_mouseobj();
+  void increment_cb();
+
+protected:
+
+  void draw();
+
+public:
+
+  int handle(int);
+
+  Fl_Counter(int X, int Y, int W, int H, const char* L = 0);
+  ~Fl_Counter();
+
+  /**
+    Sets the increment for the large step buttons.
+    The default value is 1.0.
+    \param[in] a large step increment.
+  */
+  void lstep(double a) {lstep_ = a;}
+
+  /**
+    Sets the increments for the normal and large step buttons.
+    \param[in] a, b normal and large step increments.
+  */
+  void step(double a,double b) {Fl_Valuator::step(a); lstep_ = b;}
+
+  /**
+    Sets the increment for the normal step buttons.
+    \param[in] a normal step increment.
+  */
+  void step(double a) {Fl_Valuator::step(a);}
+
+  /**
+    Returns the increment for normal step buttons.
+   */
+  double step() const {return Fl_Valuator::step();}
+
+  /** Gets the text font */
+  Fl_Font textfont() const {return textfont_;}
+  /** Sets the text font to \p s */
+  void textfont(Fl_Font s) {textfont_ = s;}
+
+  /** Gets the font size */
+  Fl_Fontsize textsize() const {return textsize_;}
+  /** Sets the font size to \p s */
+  void textsize(Fl_Fontsize s) {textsize_ = s;}
+
+  /** Gets the font color */
+  Fl_Color textcolor() const {return textcolor_;}
+  /** Sets the font color to \p s */
+  void textcolor(Fl_Color s) {textcolor_ = s;}
+
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Counter.H 6939 2009-11-17 14:45:36Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Device.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Device.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Device.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,314 @@
+//
+// "$Id: Fl_Device.H 7330 2010-03-25 13:59:00Z manolo $"
+//
+// Definition of classes Fl_Device, Fl_Display, Fl_Quartz_Display, Fl_GDI_Display,
+// and Fl_Xlib_Display for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 2010 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+/** \file Fl_Device.H 
+ \brief declaration of classes Fl_Device, Fl_Display.
+*/
+
+#ifndef Fl_Device_H
+#define Fl_Device_H
+
+#include <fltk3/x.H>
+#include <fltk3/Fl_Plugin.H>
+#include <fltk3/Fl_Image.H>
+#include <fltk3/Fl_Bitmap.H>
+#include <fltk3/Fl_Pixmap.H>
+#include <fltk3/Fl_RGB_Image.H>
+#ifdef WIN32
+#include <commdlg.h>
+#elif defined(__APPLE__)
+#else
+#include <stdio.h>
+#endif
+
+class fltk3::Widget;
+class Fl_Device;
+class Fl_Display;
+class Fl_Abstract_Printer;
+/** \brief Points to the device that currently receives all graphics requests */
+FL_EXPORT extern Fl_Device *fl_device;
+/** \brief Points to the platform's display device */
+FL_EXPORT extern Fl_Display *fl_display_device;
+
+/**
+ signature of image generation callback function.
+ \param[in]  data  user data passed to function
+ \param[in]  x,y,w position and width of scan line in image
+ \param[out] buf   buffer for generated image data. You must copy \p w
+ pixels from scanline \p y, starting at pixel \p x
+ to this buffer.
+ */
+typedef void (*Fl_Draw_Image_Cb)(void* data,int x,int y,int w,uchar* buf);
+
+/**
+ \brief A pure virtual class subclassed to send the output of drawing functions to display, printers, or local files.
+ *
+ The protected virtual methods of this class are those that a device should implement to
+ support all of FLTK drawing functions.
+ <br> The preferred FLTK API for drawing operations is the function collection of the 
+ \ref fl_drawings and \ref fl_attributes modules. 
+ <br> Alternatively, member functions of the Fl_Device class can be called
+ using the global variable Fl_Device * \ref fl_device that points at all time to the single device 
+ (an instance of an Fl_Device subclass) that's currently receiving graphics requests:
+ \code fl_device->rect(x, y, w, h); \endcode
+ <br>Each member function of the Fl_Device class has the same effect and parameter list as the
+ function of the \ref fl_drawings and \ref fl_attributes modules which bears the same name
+ prefixed with fl_ .
+  */
+class Fl_Device {
+protected:
+  /** \brief The device type */
+  int type_; 
+  /** \brief red color for background and/or mixing if device does not support masking or alpha */
+  uchar bg_r_; 
+  /** \brief green color for background and/or mixing if device does not support masking or alpha */
+  uchar bg_g_; 
+  /** \brief blue color for background and/or mixing if device does not support masking or alpha */
+  uchar bg_b_; 
+  friend class Fl_Pixmap;
+  friend class Fl_Bitmap;
+  friend class Fl_RGB_Image;
+  friend void fl_rect(int x, int y, int w, int h);
+  friend void fl_rectf(int x, int y, int w, int h);
+  friend void fl_line_style(int style, int width, char* dashes);
+  friend void fl_xyline(int x, int y, int x1);
+  friend void fl_xyline(int x, int y, int x1, int y2);
+  friend void fl_xyline(int x, int y, int x1, int y2, int x3);
+  friend void fl_yxline(int x, int y, int y1);
+  friend void fl_yxline(int x, int y, int y1, int x2);
+  friend void fl_yxline(int x, int y, int y1, int x2, int y3);
+  friend void fl_line(int x, int y, int x1, int y1);
+  friend void fl_line(int x, int y, int x1, int y1, int x2, int y2);
+  friend void fl_draw(const char *str, int n, int x, int y);
+  friend void fl_draw(int angle, const char *str, int n, int x, int y);
+  friend void fl_font(Fl_Font face, Fl_Fontsize size);
+  friend void fl_color(Fl_Color c);
+  friend void fl_color(uchar r, uchar g, uchar b);
+  friend void fl_point(int x, int y);
+  friend void fl_loop(int x0, int y0, int x1, int y1, int x2, int y2);
+  friend void fl_loop(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
+  friend void fl_polygon(int x0, int y0, int x1, int y1, int x2, int y2);
+  friend void fl_polygon(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
+  friend void fl_begin_points();
+  friend void fl_begin_line();
+  friend void fl_begin_loop();
+  friend void fl_begin_polygon();
+  friend void fl_vertex(double x, double y);
+  friend void fl_curve(double X0, double Y0, double X1, double Y1, double X2, double Y2, double X3, double Y3);
+  friend void fl_circle(double x, double y, double r);
+  friend void fl_arc(double x, double y, double r, double start, double end);
+  friend void fl_arc(int x, int y, int w, int h, double a1, double a2);
+  friend void fl_pie(int x, int y, int w, int h, double a1, double a2);
+  friend void fl_end_points();
+  friend void fl_end_line();
+  friend void fl_end_loop();
+  friend void fl_end_polygon();
+  friend void fl_transformed_vertex(double xf, double yf);
+  friend void fl_push_clip(int x, int y, int w, int h);
+  friend int fl_clip_box(int x, int y, int w, int h, int &X, int &Y, int &W, int &H);
+  friend int fl_not_clipped(int x, int y, int w, int h);
+  friend void fl_push_no_clip();
+  friend void fl_pop_clip();
+  friend void fl_begin_complex_polygon();
+  friend void fl_gap();
+  friend void fl_end_complex_polygon();
+  friend void fl_draw_image(const uchar* buf, int X,int Y,int W,int H, int D, int L);
+  friend void fl_draw_image_mono(const uchar* buf, int X,int Y,int W,int H, int D, int L);
+  friend void fl_draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D);
+  friend FL_EXPORT void fl_draw_image_mono(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D);
+  
+  /** \brief see fl_rect(int x, int y, int w, int h). */
+  virtual void rect(int x, int y, int w, int h);
+  /** \brief see fl_rectf(int x, int y, int w, int h). */
+  virtual void rectf(int x, int y, int w, int h);
+  /** \brief see fl_line_style(int style, int width, char* dashes). */
+  virtual void line_style(int style, int width=0, char* dashes=0);
+  /** \brief see fl_xyline(int x, int y, int x1). */
+  virtual void xyline(int x, int y, int x1);
+  /** \brief see fl_xyline(int x, int y, int x1, int y2). */
+  virtual void xyline(int x, int y, int x1, int y2);
+  /** \brief see fl_xyline(int x, int y, int x1, int y2, int x3). */
+  virtual void xyline(int x, int y, int x1, int y2, int x3);
+  /** \brief see fl_yxline(int x, int y, int y1). */
+  virtual void yxline(int x, int y, int y1);
+  /** \brief see fl_yxline(int x, int y, int y1, int x2). */
+  virtual void yxline(int x, int y, int y1, int x2);
+  /** \brief see fl_yxline(int x, int y, int y1, int x2, int y3). */
+  virtual void yxline(int x, int y, int y1, int x2, int y3);
+  /** \brief see fl_line(int x, int y, int x1, int y1). */
+  virtual void line(int x, int y, int x1, int y1);
+  /** \brief see fl_line(int x, int y, int x1, int y1, int x2, int y2). */
+  virtual void line(int x, int y, int x1, int y1, int x2, int y2);
+  /** \brief see fl_draw(const char *str, int n, int x, int y). */
+  virtual void draw(const char *str, int n, int x, int y);
+  /** \brief see fl_draw(int angle, const char *str, int n, int x, int y). */
+  virtual void draw(int angle, const char *str, int n, int x, int y);
+  /** \brief see fl_font(Fl_Font face, Fl_Fontsize size). */
+  virtual void font(Fl_Font face, Fl_Fontsize size);
+  /** \brief see fl_color(Fl_Color c). */
+  virtual void color(Fl_Color c);
+  /** \brief see fl_color(uchar r, uchar g, uchar b). */
+  virtual void color(uchar r, uchar g, uchar b);
+  /** \brief see fl_point(int x, int y). */
+  virtual void point(int x, int y);
+  /** \brief see fl_loop(int x0, int y0, int x1, int y1, int x2, int y2). */
+  virtual void loop(int x0, int y0, int x1, int y1, int x2, int y2);
+  /** \brief see fl_loop(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3). */
+  virtual void loop(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
+  /** \brief see fl_polygon(int x0, int y0, int x1, int y1, int x2, int y2). */
+  virtual void polygon(int x0, int y0, int x1, int y1, int x2, int y2);
+  /** \brief see fl_polygon(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3). */
+  virtual void polygon(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
+  /** \brief see fl_begin_points(). */
+  virtual void begin_points();
+  /** \brief see fl_begin_line(). */
+  virtual void begin_line();
+  /** \brief see fl_begin_loop(). */
+  virtual void begin_loop();
+  /** \brief see fl_begin_polygon(). */
+  virtual void begin_polygon();
+  /** \brief see fl_vertex(double x, double y). */
+  virtual void vertex(double x, double y);
+  /** \brief see fl_curve(double X0, double Y0, double X1, double Y1, double X2, double Y2, double X3, double Y3). */
+  virtual void curve(double X0, double Y0, double X1, double Y1, double X2, double Y2, double X3, double Y3);
+  /** \brief see fl_circle(double x, double y, double r). */
+  virtual void circle(double x, double y, double r);
+  /** \brief see fl_arc(double x, double y, double r, double start, double end). */
+  virtual void arc(double x, double y, double r, double start, double end);
+  /** \brief see fl_arc(int x, int y, int w, int h, double a1, double a2). */
+  virtual void arc(int x, int y, int w, int h, double a1, double a2);
+  /** \brief see fl_pie(int x, int y, int w, int h, double a1, double a2). */
+  virtual void pie(int x, int y, int w, int h, double a1, double a2);
+  /** \brief see fl_end_points(). */
+  virtual void end_points();
+  /** \brief see fl_end_line(). */
+  virtual void end_line();
+  /** \brief see fl_end_loop(). */
+  virtual void end_loop();
+  /** \brief see fl_end_polygon(). */
+  virtual void end_polygon();
+  /** \brief see fl_begin_complex_polygon(). */
+  virtual void begin_complex_polygon();
+  /** \brief see fl_gap(). */
+  virtual void gap();
+  /** \brief see fl_end_complex_polygon(). */
+  virtual void end_complex_polygon();
+  /** \brief see fl_transformed_vertex(double xf, double yf). */
+  virtual void transformed_vertex(double xf, double yf);
+  /** \brief see fl_push_clip(int x, int y, int w, int h). */
+  virtual void push_clip(int x, int y, int w, int h);
+  /** \brief see fl_clip_box(int x, int y, int w, int h, int &X, int &Y, int &W, int &H). */
+  virtual int clip_box(int x, int y, int w, int h, int &X, int &Y, int &W, int &H);
+  /** \brief see fl_not_clipped(int x, int y, int w, int h). */
+  virtual int not_clipped(int x, int y, int w, int h);
+  /** \brief see fl_push_no_clip(). */
+  virtual void push_no_clip();
+  /** \brief see fl_pop_clip(). */
+  virtual void pop_clip();
+  // Images
+  /** \brief see fl_draw_image(const uchar* buf, int X,int Y,int W,int H, int D, int L). */
+  virtual   void draw_image(const uchar* buf, int X,int Y,int W,int H, int D=3, int L=0);
+  /** \brief see fl_draw_image_mono(const uchar* buf, int X,int Y,int W,int H, int D, int L). */
+  virtual   void draw_image_mono(const uchar* buf, int X,int Y,int W,int H, int D=1, int L=0);
+  /** \brief see fl_draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D). */
+  virtual   void draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=3);
+  /** \brief see fl_draw_image_mono(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D). */
+  virtual   void draw_image_mono(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=1);
+  // Image classes
+  virtual   void draw(Fl_RGB_Image * rgb,int XP, int YP, int WP, int HP, int cx, int cy);
+  virtual   void draw(Fl_Bitmap * bmp,int XP, int YP, int WP, int HP, int cx, int cy);  
+  virtual   void draw(Fl_Pixmap * pxm,int XP, int YP, int WP, int HP, int cx, int cy);
+  
+public:
+  /** 
+   @brief All implemented graphics output devices.
+   */
+  enum device_types { 
+    xlib_display = 0, /**< The X11 display. */
+    quartz_display,  /**< The Mac OS X display. */
+    gdi_display,  /**< The MSWindows display. */
+    gdi_printer = 256,  /**< The MSWindows printer. */
+    quartz_printer,  /**< The Mac OS X printer. */
+    postscript_device  /**< The PostScript device. */
+  };
+  /** 
+   @brief An RTTI emulation of device classes. It returns values < 256 if it is a display device 
+   */
+  inline int type() {return type_;};
+  virtual Fl_Device *set_current(void);
+  
+  virtual ~Fl_Device() {};
+  static Fl_Device *current();
+  
+  /**
+   @brief    Returns the platform's display device.
+   */
+  static Fl_Display *display_device() { return fl_display_device; };
+  
+};
+extern FL_EXPORT Fl_Device *fl_device;
+
+/**
+ @brief A virtual class subclassed for OS-specific display graphics.
+ */
+class Fl_Display : public Fl_Device {
+  friend class Fl_PSfile_Device;
+};
+
+#if defined(__APPLE__) || defined(FL_DOXYGEN)
+/**
+ @brief The Mac OS X-specific display graphics class.
+ */
+class Fl_Quartz_Display : public Fl_Display {
+public:
+  Fl_Quartz_Display() { type_ = quartz_display; };
+};
+#endif
+#if defined(WIN32) || defined(FL_DOXYGEN)
+/**
+ @brief The MSWindows-specific display graphics class.
+ */
+class Fl_GDI_Display : public Fl_Display {
+public:
+  Fl_GDI_Display() { type_ = gdi_display; };
+};
+#endif
+#if !( defined(__APPLE__) || defined(WIN32)) || defined(FL_DOXYGEN)
+/**
+ @brief The X11-specific display graphics class.
+ */
+class Fl_Xlib_Display : public Fl_Display {
+public:
+  Fl_Xlib_Display() { type_ = xlib_display; };
+};
+#endif
+
+#endif // Fl_Device_H
+
+//
+// End of "$Id: Fl_Device.H 7330 2010-03-25 13:59:00Z manolo $".
+//

Added: branches/branch-3.0/fltk3/Fl_Dial.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Dial.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Dial.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,97 @@
+//
+// "$Id: Fl_Dial.H 6614 2009-01-01 16:11:32Z matt $"
+//
+// Dial header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Dial widget . */
+
+#ifndef Fl_Dial_H
+#define Fl_Dial_H
+
+#ifndef Fl_Valuator_H
+#include "Fl_Valuator.H"
+#endif
+
+// values for type():
+#define FL_NORMAL_DIAL	0	/**< type() for dial variant with dot */
+#define FL_LINE_DIAL	1	/**< type() for dial variant with line */
+#define FL_FILL_DIAL	2	/**< type() for dial variant with filled arc */
+
+/**
+  The Fl_Dial widget provides a circular dial to control a
+  single floating point value.
+  <P ALIGN=CENTER>\image html dial.gif 
+  \image latex dial.eps "Fl_Dial" width=4cm
+  Use type() to set the type of the dial to:
+  <UL>
+  <LI>FL_NORMAL_DIAL - Draws a normal dial with a knob. </LI>
+  <LI>FL_LINE_DIAL - Draws a dial with a line. </LI>
+  <LI>FL_FILL_DIAL - Draws a dial with a filled arc. </LI>
+  </UL>
+
+*/
+class FL_EXPORT Fl_Dial : public Fl_Valuator {
+
+  short a1,a2;
+
+protected:
+
+  // these allow subclasses to put the dial in a smaller area:
+  void draw(int X, int Y, int W, int H);
+  int handle(int event, int X, int Y, int W, int H);
+  void draw();
+
+public:
+
+  int handle(int);
+  /**
+    Creates a new Fl_Dial widget using the given position, size,
+    and label string. The default type is FL_NORMAL_DIAL.
+  */
+  Fl_Dial(int x,int y,int w,int h, const char *l = 0);
+  /** 
+     Sets Or gets the angles used for the minimum and maximum values.  The default
+     values are 45 and 315 (0 degrees is straight down and the angles
+     progress clockwise).  Normally angle1 is less than angle2, but if you
+     reverse them the dial moves counter-clockwise.
+  */
+  short angle1() const {return a1;}
+  /** See short angle1() const */
+  void angle1(short a) {a1 = a;}
+  /** See short angle1() const */
+  short angle2() const {return a2;}
+  /** See short angle1() const */
+  void angle2(short a) {a2 = a;}
+  /** See short angle1() const */
+  void angles(short a, short b) {a1 = a; a2 = b;}
+
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Dial.H 6614 2009-01-01 16:11:32Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Double_Window.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Double_Window.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Double_Window.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,81 @@
+//
+// "$Id: Fl_Double_Window.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// Double-buffered window header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Double_Window widget . */
+
+#ifndef Fl_Double_Window_H
+#define Fl_Double_Window_H
+
+#include "Fl_Window.H"
+
+/**
+  The Fl_Double_Window provides a double-buffered window.
+  If possible this will use the X double buffering extension (Xdbe).  If
+  not, it will draw the window data into an off-screen pixmap, and then
+  copy it to the on-screen window.
+  <P>It is highly recommended that you put the following code before the
+  first show() of <I>any</I> window in your program: </P>
+  \code
+  fltk3::visual(FL_DOUBLE|FL_INDEX)
+  \endcode
+  This makes sure you can use Xdbe on servers where double buffering
+  does not exist for every visual.
+*/
+class FL_EXPORT Fl_Double_Window : public fltk3::Window {
+protected:
+  void flush(int eraseoverlay);
+  /**
+    Force double buffering, even if the OS already buffers windows
+    (overlays need that on MacOS and Windows2000)
+  */
+  char force_doublebuffering_;
+public:
+  void show();
+  void show(int a, char **b) {fltk3::Window::show(a,b);}
+  void flush();
+  void resize(int,int,int,int);
+  void hide();
+  ~Fl_Double_Window();
+  /**
+    Creates a new Fl_Double_Window widget using the given
+    position, size, and label (title) string.
+  */
+  Fl_Double_Window(int W, int H, const char *l = 0) 
+  : fltk3::Window(W,H,l), force_doublebuffering_(0) { type(FL_DOUBLE_WINDOW); }
+   /**
+    See  Fl_Double_Window::Fl_Double_Window(int w, int h, const char *label = 0)
+  */
+  Fl_Double_Window(int X, int Y, int W, int H, const char *l = 0)
+  : fltk3::Window(X,Y,W,H,l), force_doublebuffering_(0) { type(FL_DOUBLE_WINDOW); }
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Double_Window.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Export.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Export.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Export.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,49 @@
+/*
+ * "$Id: Fl_Export.H 6614 2009-01-01 16:11:32Z matt $"
+ *
+ * WIN32 DLL export .
+ *
+ * Copyright 1998-2009 by Bill Spitzak and others.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ * USA.
+ *
+ * Please report all bugs and problems on the following page:
+ *
+ *     http://www.fltk.org/str.php
+ */
+
+#ifndef Fl_Export_H
+#  define Fl_Export_H
+
+/*
+ * The following is only used when building DLLs under WIN32...
+ */
+
+#  if defined(FL_DLL) && (defined(_MSC_VER) || defined(__MWERKS__) || defined(__BORLANDC__) || __GNUC__ >= 3)
+#    ifdef FL_LIBRARY
+#      define FL_EXPORT	__declspec(dllexport)
+#    else
+#      define FL_EXPORT	__declspec(dllimport)
+#    endif /* FL_LIBRARY */
+#  else
+#    define FL_EXPORT
+#  endif /* FL_DLL */
+
+#endif /* !Fl_Export_H */
+
+/*
+ * End of "$Id: Fl_Export.H 6614 2009-01-01 16:11:32Z matt $".
+ */

Added: branches/branch-3.0/fltk3/Fl_File_Browser.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_File_Browser.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_File_Browser.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,120 @@
+//
+// "$Id: Fl_File_Browser.H 6614 2009-01-01 16:11:32Z matt $"
+//
+// FileBrowser definitions.
+//
+// Copyright 1999-2009 by Michael Sweet.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_File_Browser widget . */
+
+//
+// Include necessary header files...
+//
+
+#ifndef _Fl_File_Browser_H_
+#  define _Fl_File_Browser_H_
+
+#  include "Fl_Browser.H"
+#  include "Fl_File_Icon.H"
+#  include "filename.H"
+
+
+//
+// Fl_File_Browser class...
+//
+
+/** The Fl_File_Browser widget displays a list of filenames, optionally with file-specific icons. */
+class FL_EXPORT Fl_File_Browser : public Fl_Browser
+{
+  int		filetype_;
+  const char	*directory_;
+  uchar		iconsize_;
+  const char	*pattern_;
+
+  int		full_height() const;
+  int		item_height(void *) const;
+  int		item_width(void *) const;
+  void		item_draw(void *, int, int, int, int) const;
+  int		incr_height() const { return (item_height(0)); }
+
+public:
+  enum { FILES, DIRECTORIES };
+
+  /**
+    The constructor creates the Fl_File_Browser widget at the specified position and size.
+    The destructor destroys the widget and frees all memory that has been allocated.
+  */
+  Fl_File_Browser(int, int, int, int, const char * = 0);
+
+  /**    Sets or gets the size of the icons. The default size is 20 pixels.  */
+  uchar		iconsize() const { return (iconsize_); };
+  /**    Sets or gets the size of the icons. The default size is 20 pixels.  */
+  void		iconsize(uchar s) { iconsize_ = s; redraw(); };
+
+  /**
+    Sets or gets the filename filter. The pattern matching uses
+    the fl_filename_match()
+    function in FLTK.
+  */
+  void	filter(const char *pattern);
+  /**
+    Sets or gets the filename filter. The pattern matching uses
+    the fl_filename_match()
+    function in FLTK.
+  */
+  const char	*filter() const { return (pattern_); };
+
+  /**
+    Loads the specified directory into the browser. If icons have been
+    loaded then the correct icon is associated with each file in the list.
+    
+    <P>The sort argument specifies a sort function to be used with
+    fl_filename_list().
+  */
+  int		load(const char *directory, Fl_File_Sort_F *sort = fl_numericsort);
+
+  Fl_Fontsize  textsize() const { return Fl_Browser::textsize(); };
+  void		textsize(Fl_Fontsize s) { Fl_Browser::textsize(s); iconsize_ = (uchar)(3 * s / 2); };
+
+  /**
+    Sets or gets the file browser type, FILES or
+    DIRECTORIES. When set to FILES, both
+    files and directories are shown. Otherwise only directories are
+    shown.
+  */
+  int		filetype() const { return (filetype_); };
+  /**
+    Sets or gets the file browser type, FILES or
+    DIRECTORIES. When set to FILES, both
+    files and directories are shown. Otherwise only directories are
+    shown.
+  */
+  void		filetype(int t) { filetype_ = t; };
+};
+
+#endif // !_Fl_File_Browser_H_
+
+//
+// End of "$Id: Fl_File_Browser.H 6614 2009-01-01 16:11:32Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_File_Chooser.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_File_Chooser.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_File_Chooser.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,235 @@
+//
+// "$Id: Fl_File_Chooser.H 7007 2010-01-14 23:08:06Z greg.ercolano $"
+//
+// Fl_File_Chooser dialog for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+// generated by Fast Light User Interface Designer (fluid) version 1.0300
+
+#ifndef Fl_File_Chooser_H
+#define Fl_File_Chooser_H
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Double_Window.H>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <fltk3/Fl_Group.H>
+#include <fltk3/Fl_Choice.H>
+#include <fltk3/Fl_Menu_Button.H>
+#include <fltk3/Fl_Button.H>
+#include <fltk3/Fl_Preferences.H>
+#include <fltk3/Fl_Tile.H>
+#include <fltk3/Fl_File_Browser.H>
+#include <fltk3/Fl_Box.H>
+#include <fltk3/Fl_Check_Button.H>
+#include <fltk3/Fl_File_Input.H>
+#include <fltk3/Fl_Return_Button.H>
+#include <fltk3/fl_ask.H>
+
+class FL_EXPORT Fl_File_Chooser {
+public:
+  enum { SINGLE = 0, MULTI = 1, CREATE = 2, DIRECTORY = 4 }; 
+private:
+  static Fl_Preferences prefs_; 
+  void (*callback_)(Fl_File_Chooser*, void *); 
+  void *data_; 
+  char directory_[1024]; 
+  char pattern_[1024]; 
+  char preview_text_[2048]; 
+  int type_; 
+  void favoritesButtonCB(); 
+  void favoritesCB(fltk3::Widget *w); 
+  void fileListCB(); 
+  void fileNameCB(); 
+  void newdir(); 
+  static void previewCB(Fl_File_Chooser *fc); 
+  void showChoiceCB(); 
+  void update_favorites(); 
+  void update_preview(); 
+public:
+  Fl_File_Chooser(const char *d, const char *p, int t, const char *title);
+private:
+  Fl_Double_Window *window;
+  void cb_window_i(Fl_Double_Window*, void*);
+  static void cb_window(Fl_Double_Window*, void*);
+  Fl_Choice *showChoice;
+  void cb_showChoice_i(Fl_Choice*, void*);
+  static void cb_showChoice(Fl_Choice*, void*);
+  Fl_Menu_Button *favoritesButton;
+  void cb_favoritesButton_i(Fl_Menu_Button*, void*);
+  static void cb_favoritesButton(Fl_Menu_Button*, void*);
+public:
+  Fl_Button *newButton;
+private:
+  void cb_newButton_i(Fl_Button*, void*);
+  static void cb_newButton(Fl_Button*, void*);
+  void cb__i(Fl_Tile*, void*);
+  static void cb_(Fl_Tile*, void*);
+  Fl_File_Browser *fileList;
+  void cb_fileList_i(Fl_File_Browser*, void*);
+  static void cb_fileList(Fl_File_Browser*, void*);
+  Fl_Box *previewBox;
+public:
+  Fl_Check_Button *previewButton;
+private:
+  void cb_previewButton_i(Fl_Check_Button*, void*);
+  static void cb_previewButton(Fl_Check_Button*, void*);
+  Fl_File_Input *fileName;
+  void cb_fileName_i(Fl_File_Input*, void*);
+  static void cb_fileName(Fl_File_Input*, void*);
+  Fl_Return_Button *okButton;
+  void cb_okButton_i(Fl_Return_Button*, void*);
+  static void cb_okButton(Fl_Return_Button*, void*);
+  Fl_Button *cancelButton;
+  void cb_cancelButton_i(Fl_Button*, void*);
+  static void cb_cancelButton(Fl_Button*, void*);
+  Fl_Double_Window *favWindow;
+  Fl_File_Browser *favList;
+  void cb_favList_i(Fl_File_Browser*, void*);
+  static void cb_favList(Fl_File_Browser*, void*);
+  Fl_Button *favUpButton;
+  void cb_favUpButton_i(Fl_Button*, void*);
+  static void cb_favUpButton(Fl_Button*, void*);
+  Fl_Button *favDeleteButton;
+  void cb_favDeleteButton_i(Fl_Button*, void*);
+  static void cb_favDeleteButton(Fl_Button*, void*);
+  Fl_Button *favDownButton;
+  void cb_favDownButton_i(Fl_Button*, void*);
+  static void cb_favDownButton(Fl_Button*, void*);
+  Fl_Button *favCancelButton;
+  void cb_favCancelButton_i(Fl_Button*, void*);
+  static void cb_favCancelButton(Fl_Button*, void*);
+  Fl_Return_Button *favOkButton;
+  void cb_favOkButton_i(Fl_Return_Button*, void*);
+  static void cb_favOkButton(Fl_Return_Button*, void*);
+public:
+  ~Fl_File_Chooser();
+  void callback(void (*cb)(Fl_File_Chooser *, void *), void *d = 0);
+  void color(Fl_Color c);
+  Fl_Color color();
+  int count(); 
+  void directory(const char *d); 
+  char * directory();
+  void filter(const char *p); 
+  const char * filter();
+  int filter_value();
+  void filter_value(int f);
+  void hide();
+  void iconsize(uchar s);
+  uchar iconsize();
+  void label(const char *l);
+  const char * label();
+  void ok_label(const char *l);
+  const char * ok_label();
+  void preview(int e); 
+  int preview() const { return previewButton->value(); }; 
+  void rescan(); 
+  void rescan_keep_filename(); 
+  void show();
+  int shown();
+  void textcolor(Fl_Color c);
+  Fl_Color textcolor();
+  void textfont(Fl_Font f);
+  Fl_Font textfont();
+  void textsize(Fl_Fontsize s);
+  Fl_Fontsize textsize();
+  void type(int t);
+  int type();
+  void * user_data() const;
+  void user_data(void *d);
+  const char *value(int f = 1); 
+  void value(const char *filename); 
+  int visible();
+  /**
+     [standard text may be customized at run-time]
+  */
+  static const char *add_favorites_label; 
+  /**
+     [standard text may be customized at run-time]
+  */
+  static const char *all_files_label; 
+  /**
+     [standard text may be customized at run-time]
+  */
+  static const char *custom_filter_label; 
+  /**
+     [standard text may be customized at run-time]
+  */
+  static const char *existing_file_label; 
+  /**
+     [standard text may be customized at run-time]
+  */
+  static const char *favorites_label; 
+  /**
+     [standard text may be customized at run-time]
+  */
+  static const char *filename_label; 
+  /**
+     [standard text may be customized at run-time]
+  */
+  static const char *filesystems_label; 
+  /**
+     [standard text may be customized at run-time]
+  */
+  static const char *manage_favorites_label; 
+  /**
+     [standard text may be customized at run-time]
+  */
+  static const char *new_directory_label; 
+  /**
+     [standard text may be customized at run-time]
+  */
+  static const char *new_directory_tooltip; 
+  /**
+     [standard text may be customized at run-time]
+  */
+  static const char *preview_label; 
+  /**
+     [standard text may be customized at run-time]
+  */
+  static const char *save_label; 
+  /**
+     [standard text may be customized at run-time]
+  */
+  static const char *show_label; 
+  /**
+     the sort function that is used when loading
+     the contents of a directory.
+  */
+  static Fl_File_Sort_F *sort; 
+private:
+  fltk3::Widget* ext_group; 
+public:
+  fltk3::Widget* add_extra(fltk3::Widget* gr);
+  Fl_File_Browser *browser(void) {return fileList; };
+};
+FL_EXPORT char *fl_dir_chooser(const char *message,const char *fname,int relative=0);
+FL_EXPORT char *fl_file_chooser(const char *message,const char *pat,const char *fname,int relative=0);
+FL_EXPORT void fl_file_chooser_callback(void (*cb)(const char*));
+FL_EXPORT void fl_file_chooser_ok_label(const char*l);
+#endif
+
+//
+// End of "$Id: Fl_File_Chooser.H 7007 2010-01-14 23:08:06Z greg.ercolano $".
+//

Added: branches/branch-3.0/fltk3/Fl_File_Icon.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_File_Icon.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_File_Icon.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,168 @@
+//
+// "$Id: Fl_File_Icon.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// Fl_File_Icon definitions.
+//
+// Copyright 1999-2009 by Michael Sweet.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_File_Icon widget . */
+
+//
+// Include necessary header files...
+//
+
+#ifndef _Fl_Fl_File_Icon_H_
+#  define _Fl_Fl_File_Icon_H_
+
+#  include "Fl.H"
+
+
+//
+// Special color value for the icon color.
+//
+
+#  define FL_ICON_COLOR (Fl_Color)0xffffffff	/**< icon color [background?]*/
+
+
+//
+// Fl_File_Icon class...
+//
+
+/** 
+  The Fl_File_Icon class manages icon images that can be used 
+  as labels in other widgets and as icons in the FileBrowser widget.
+*/
+class FL_EXPORT Fl_File_Icon			//// Icon data
+{
+  static Fl_File_Icon *first_;	// Pointer to first icon/filetype
+  Fl_File_Icon	*next_;		// Pointer to next icon/filetype
+  const char	*pattern_;	// Pattern string
+  int		type_;		// Match only if directory or file?
+  int		num_data_;	// Number of data elements
+  int		alloc_data_;	// Number of allocated elements
+  short		*data_;		// Icon data
+
+  public:
+
+  enum				// File types
+  {
+    ANY,			// Any kind of file
+    PLAIN,			// Only plain files
+    FIFO,			// Only named pipes
+    DEVICE,			// Only character and block devices
+    LINK,			// Only symbolic links
+    DIRECTORY			// Only directories
+  };
+
+  enum				// Data opcodes
+  {
+    END,			// End of primitive/icon
+    COLOR,			// Followed by color value (2 shorts)
+    LINE,			// Start of line
+    CLOSEDLINE,			// Start of closed line
+    POLYGON,			// Start of polygon
+    OUTLINEPOLYGON,		// Followed by outline color (2 shorts)
+    VERTEX			// Followed by scaled X,Y
+  };
+
+  Fl_File_Icon(const char *p, int t, int nd = 0, short *d = 0);
+  ~Fl_File_Icon();
+
+  short		*add(short d);
+
+  /**
+    Adds a color value to the icon array, returning a pointer to it.
+    \param[in] c color value
+  */
+  short		*add_color(Fl_Color c)
+		{ short *d = add((short)COLOR); add((short)(c >> 16)); add((short)c); return (d); }
+
+  /**
+    Adds a vertex value to the icon array, returning a pointer to it.
+    The integer version accepts coordinates from 0 to 10000.
+    The origin (0.0) is in the lower-lefthand corner of the icon.
+    \param[in] x, y vertex coordinates
+  */
+  short		*add_vertex(int x, int y)
+		{ short *d = add((short)VERTEX); add((short)x); add((short)y); return (d); }
+
+  /**
+    Adds a vertex value to the icon array, returning a pointer to it.
+    The floating point version goes from 0.0 to 1.0.
+    The origin (0.0) is in the lower-lefthand corner of the icon.
+    \param[in] x, y vertex coordinates
+  */
+  short		*add_vertex(float x, float y)
+		{ short *d = add((short)VERTEX); add((short)(x * 10000.0));
+		  add((short)(y * 10000.0)); return (d); }
+
+  /** Clears all icon data from the icon.*/
+  void		clear() { num_data_ = 0; }
+
+  void		draw(int x, int y, int w, int h, Fl_Color ic, int active = 1);
+
+  void		label(fltk3::Widget *w);
+
+  static void	labeltype(const Fl_Label *o, int x, int y, int w, int h, Fl_Align a);
+  void		load(const char *f);
+  int		load_fti(const char *fti);
+  int		load_image(const char *i);
+
+  /** Returns next file icon object. See Fl_File_Icon::first() */
+  Fl_File_Icon	*next() { return (next_); }
+
+  /** Returns the filename matching pattern for the icon.*/
+  const char	*pattern() { return (pattern_); }
+
+  /**  Returns the number of words of data used by the icon.*/
+  int		size() { return (num_data_); }
+
+  /**
+    Returns the filetype associated with the icon, which can be one of the
+    following:
+  
+    \li Fl_File_Icon::ANY, any kind of file.
+    \li Fl_File_Icon::PLAIN, plain files.
+    \li Fl_File_Icon::FIFO, named pipes.
+    \li Fl_File_Icon::DEVICE, character and block devices.
+    \li Fl_File_Icon::LINK, symbolic links.
+    \li Fl_File_Icon::DIRECTORY, directories.
+  */
+  int		type() { return (type_); }
+
+  /**  Returns the data array for the icon.*/
+  short		*value() { return (data_); }
+
+  static Fl_File_Icon *find(const char *filename, int filetype = ANY);
+
+  /** Returns a pointer to the first icon in the list.*/
+  static Fl_File_Icon *first() { return (first_); }
+  static void	load_system_icons(void);
+};
+
+#endif // !_Fl_Fl_File_Icon_H_
+
+//
+// End of "$Id: Fl_File_Icon.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_File_Input.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_File_Input.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_File_Input.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,104 @@
+//
+// "$Id: Fl_File_Input.H 6716 2009-03-24 01:40:44Z fabien $"
+//
+// File_Input header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+// Original version Copyright 1998 by Curtis Edwards.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_File_Input widget . */
+
+#ifndef Fl_File_Input_H
+#  define Fl_File_Input_H
+
+#  include <FL/Fl_Input.H>
+
+/**
+  \class Fl_File_Input
+  \brief This widget displays a pathname in a text input field.
+
+  A navigation bar located above the input field allows the user to
+  navigate upward in the directory tree.
+  You may want to handle FL_WHEN_CHANGED events for tracking text changes
+  and also FL_WHEN_RELEASE for button release when changing to parent dir.
+  FL_WHEN_RELEASE callback won't be called if the directory clicked 
+  is the same that the current one.
+  <P align=CENTER> \image html Fl_File_Input.gif </P> 
+  \image latex Fl_File_Input.eps "Fl_File_Input"  width=6cm
+  \note As all Fl_Input derived objects, Fl_File_Input may call its callback
+  when loosing focus (see FL_UNFOCUS) to update its state like its cursor shape.
+  One resulting side effect is that you should call clear_changed() early in your callback
+  to avoid reentrant calls if you plan to show another window or dialog box in the callback.
+*/
+class FL_EXPORT Fl_File_Input : public Fl_Input
+{
+  Fl_Color	errorcolor_;
+  char		ok_entry_;
+  uchar		down_box_;
+  short		buttons_[200];
+  short		pressed_;
+
+  void		draw_buttons();
+  int		handle_button(int event);
+  void		update_buttons();
+
+public:
+
+  Fl_File_Input(int X, int Y, int W, int H, const char *L=0);
+
+  virtual int handle(int event);
+
+protected:
+  virtual void draw();
+
+public:
+  /** Gets the box type used for the navigation bar. */
+  Fl_Boxtype	down_box() const { return (Fl_Boxtype)down_box_; }
+  /** Sets the box type to use for the navigation bar.  */
+  void		down_box(Fl_Boxtype b) { down_box_ = b; }
+
+  /**
+    Gets the current error color.
+    \todo Better docs for Fl_File_Input::errorcolor() - is it even used?
+  */
+  Fl_Color	errorcolor() const { return errorcolor_; }
+  /** Sets the current error color to \p c */
+  void		errorcolor(Fl_Color c) { errorcolor_ = c; }
+
+  int	value(const char *str);
+  int	value(const char *str, int len);
+
+  /**
+    Returns the current value, which is a pointer to an internal buffer
+    and is valid only until the next event is handled.
+  */
+  const char	*value() { return Fl_Input_::value(); }
+};
+
+#endif // !Fl_File_Input_H
+
+
+//
+// End of "$Id: Fl_File_Input.H 6716 2009-03-24 01:40:44Z fabien $".
+//

Added: branches/branch-3.0/fltk3/Fl_Fill_Dial.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Fill_Dial.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Fill_Dial.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,48 @@
+//
+// "$Id: Fl_Fill_Dial.H 6614 2009-01-01 16:11:32Z matt $"
+//
+// Filled dial header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Fill_Dial widget . */
+
+#ifndef Fl_Fill_Dial_H
+#define Fl_Fill_Dial_H
+
+#include "Fl_Dial.H"
+
+/** Draws a dial with a filled arc */
+class Fl_Fill_Dial : public Fl_Dial {
+public:
+    /** Creates a filled dial, also setting its type to FL_FILL_DIAL. */
+    Fl_Fill_Dial(int x,int y,int w,int h, const char *l = 0)
+	: Fl_Dial(x,y,w,h,l) {type(FL_FILL_DIAL);}
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Fill_Dial.H 6614 2009-01-01 16:11:32Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Fill_Slider.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Fill_Slider.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Fill_Slider.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,47 @@
+//
+// "$Id: Fl_Fill_Slider.H 6614 2009-01-01 16:11:32Z matt $"
+//
+// Filled slider header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Fill_Slider widget . */
+
+#ifndef Fl_Fill_Slider_H
+#define Fl_Fill_Slider_H
+
+#include "Fl_Slider.H"
+/** Widget that draws a filled horizontal  slider,  useful as a progress or value meter*/
+class Fl_Fill_Slider : public Fl_Slider {
+public:
+    /** Creates the slider from its position,size and optional title. */
+    Fl_Fill_Slider(int x,int y,int w,int h,const char *l=0)
+	: Fl_Slider(x,y,w,h,l) {type(FL_VERT_FILL_SLIDER);}
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Fill_Slider.H 6614 2009-01-01 16:11:32Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Float_Input.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Float_Input.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Float_Input.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,57 @@
+//
+// "$Id: Fl_Float_Input.H 6614 2009-01-01 16:11:32Z matt $"
+//
+// Floating point input header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Float_Input widget . */
+
+
+#ifndef Fl_Float_Input_H
+#define Fl_Float_Input_H
+
+#include "Fl_Input.H"
+
+/**
+  The Fl_Float_Input class is a subclass of Fl_Input
+  that only allows the user to type floating point numbers (sign,
+  digits, decimal point, more digits, 'E' or 'e', sign, digits).
+*/
+class Fl_Float_Input : public Fl_Input {
+public:
+  /**
+      Creates a new Fl_Float_Input widget using the given position,
+    size, and label string. The default boxtype is FL_DOWN_BOX.
+  <P> Inherited destructor destroys the widget and any value associated with it
+  */
+  Fl_Float_Input(int X,int Y,int W,int H,const char *l = 0)
+    : Fl_Input(X,Y,W,H,l) {type(FL_FLOAT_INPUT);}
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Float_Input.H 6614 2009-01-01 16:11:32Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_FormsBitmap.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_FormsBitmap.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_FormsBitmap.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,56 @@
+//
+// "$Id: Fl_FormsBitmap.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// Forms bitmap header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_FormsBitmap widget . */
+
+#ifndef Fl_FormsBitmap_H
+#define Fl_FormsBitmap_H
+
+#include "Fl_Bitmap.H"
+
+/** 
+    Forms compatibility Bitmap Image Widget
+*/
+class FL_EXPORT Fl_FormsBitmap : public fltk3::Widget {
+    Fl_Bitmap *b;
+protected:
+    void draw();
+public:
+    Fl_FormsBitmap(Fl_Boxtype, int, int, int, int, const char * = 0);
+    void set(int W, int H, const uchar *bits);
+    /** Sets a new bitmap. */
+    void bitmap(Fl_Bitmap *B) {b = B;}
+    /** Gets a the current associated Fl_Bitmap objects. */
+    Fl_Bitmap *bitmap() const {return b;}
+};
+
+#endif
+
+//
+// End of "$Id: Fl_FormsBitmap.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_FormsPixmap.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_FormsPixmap.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_FormsPixmap.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,63 @@
+//
+// "$Id: Fl_FormsPixmap.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// Forms pixmap header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_FormsPixmap widget . */
+
+#ifndef Fl_FormsPixmap_H
+#define Fl_FormsPixmap_H
+
+#include "Fl_Pixmap.H"
+
+/**
+  \class Fl_FormsPixmap
+  \brief Forms pixmap drawing routines
+*/
+class FL_EXPORT Fl_FormsPixmap : public fltk3::Widget {
+    Fl_Pixmap *b;
+protected:
+    void draw();
+public:
+    Fl_FormsPixmap(Fl_Boxtype t, int X, int Y, int W, int H, const char *L= 0);
+
+    void set(/*const*/char * const * bits);
+
+    /**
+      Set the internal pixmap pointer to an existing pixmap.
+      \param[in] B existing pixmap
+    */
+    void Pixmap(Fl_Pixmap *B) {b = B;}
+
+    /** Get the internal pixmap pointer. */
+    Fl_Pixmap *Pixmap() const {return b;}
+};
+
+#endif
+
+//
+// End of "$Id: Fl_FormsPixmap.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Free.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Free.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Free.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,89 @@
+//
+// "$Id: Fl_Free.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// Forms free header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Free widget . */
+
+#ifndef Fl_Free_H
+#define Fl_Free_H
+
+#ifndef Fl_Widget_H
+#include "Fl_Widget.H"
+#endif
+
+#define FL_NORMAL_FREE		1 /**< normal event handling */
+#define FL_SLEEPING_FREE	2 /**< deactivate event handling */
+#define FL_INPUT_FREE		3 /**< accepts FL_FOCUS events */
+#define FL_CONTINUOUS_FREE	4 /**< repeated timeout handling */
+#define FL_ALL_FREE		5 /**< FL_INPUT_FREE and FL_CONTINOUS_FREE */
+
+/** appropriate signature for handle function */
+typedef int (*FL_HANDLEPTR)(fltk3::Widget *, int , float, float, char);
+
+/**
+  Emulation of the Forms "free" widget.
+  
+  This emulation allows the free demo to run, and appears to be useful for
+  porting programs written in Forms which use the free widget or make
+  subclasses of the Forms widgets.
+
+  There are five types of free, which determine when the handle function
+  is called:
+  
+  \li \c FL_NORMAL_FREE      normal event handling.
+  \li \c FL_SLEEPING_FREE    deactivates event handling (widget is inactive).
+  \li \c FL_INPUT_FREE       accepts FL_FOCUS events.
+  \li \c FL_CONTINUOUS_FREE  sets a timeout callback 100 times a second and
+                             provides an FL_STEP event. This has obvious
+			     detrimental effects on machine performance.
+  \li \c FL_ALL_FREE         same as FL_INPUT_FREE and FL_CONTINUOUS_FREE.
+ 
+*/
+class FL_EXPORT Fl_Free : public fltk3::Widget {
+    FL_HANDLEPTR hfunc;
+    static void step(void *);
+protected:
+    void draw();
+public:
+    int handle(int e);
+  Fl_Free(uchar t,int X,int Y,int W,int H,const char *L,FL_HANDLEPTR hdl);
+  ~Fl_Free();
+};
+
+// old event names for compatibility:
+#define FL_MOUSE	FL_DRAG /**< for backward compatibility */
+#define FL_DRAW		100     /**< for backward compatibility [UNUSED]*/
+#define FL_STEP		101     /**< for backward compatibility */
+#define FL_FREEMEM	102     /**< for backward compatibility [UNUSED]*/
+#define FL_FREEZE	103     /**< for backward compatibility [UNUSED]*/
+#define FL_THAW		104     /**< for backward compatibility [UNUSED]*/
+
+#endif
+
+//
+// End of "$Id: Fl_Free.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_GIF_Image.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_GIF_Image.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_GIF_Image.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,51 @@
+//
+// "$Id: Fl_GIF_Image.H 6614 2009-01-01 16:11:32Z matt $"
+//
+// GIF image header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_GIF_Image widget . */
+
+#ifndef Fl_GIF_Image_H
+#define Fl_GIF_Image_H
+#  include "Fl_Pixmap.H"
+
+/**
+  The Fl_GIF_Image class supports loading, caching,
+  and drawing of Compuserve GIF<SUP>SM</SUP> images. The class
+  loads the first image and supports transparency.
+*/
+class FL_EXPORT Fl_GIF_Image : public Fl_Pixmap {
+
+  public:
+
+  Fl_GIF_Image(const char* filename);
+};
+
+#endif
+
+//
+// End of "$Id: Fl_GIF_Image.H 6614 2009-01-01 16:11:32Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Gl_Window.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Gl_Window.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Gl_Window.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,243 @@
+//
+// "$Id: Fl_Gl_Window.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// OpenGL header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Gl_Window widget . */
+
+#ifndef Fl_Gl_Window_H
+#define Fl_Gl_Window_H
+
+#include "Fl_Window.H"
+
+#ifndef GLContext
+/**
+  Opaque pointer type to hide system specific implementation.
+*/
+typedef void* GLContext; // actually a GLXContext or HGLDC
+#endif
+
+class Fl_Gl_Choice; // structure to hold result of glXChooseVisual
+
+/**
+  The Fl_Gl_Window widget sets things up so OpenGL works.
+  
+  It also keeps an OpenGL "context" for that window, so that changes to the
+  lighting and projection may be reused between redraws. Fl_Gl_Window
+  also flushes the OpenGL streams and swaps buffers after draw() returns.
+
+  OpenGL hardware typically provides some overlay bit planes, which
+  are very useful for drawing UI controls atop your 3D graphics.  If the
+  overlay hardware is not provided, FLTK tries to simulate the overlay.
+  This works pretty well if your graphics are double buffered, but not
+  very well for single-buffered.
+
+  Please note that the FLTK drawing and clipping functions
+  will not work inside an Fl_Gl_Window. All drawing
+  should be done using OpenGL calls exclusively.
+  Even though Fl_Gl_Window is derived from fltk3::Group, 
+  it is not useful to add other FLTK Widgets as children,
+  unless those widgets are modified to draw using OpenGL calls.
+*/
+class FL_EXPORT Fl_Gl_Window : public fltk3::Window {
+
+  int mode_;
+  const int *alist;
+  Fl_Gl_Choice *g;
+  GLContext context_;
+  char valid_f_;
+  char damage1_; // damage() of back buffer
+  virtual void draw_overlay();
+  void init();
+
+  void *overlay;
+  void make_overlay();
+  friend class _Fl_Gl_Overlay;
+
+  static int can_do(int, const int *);
+  int mode(int, const int *);
+
+public:
+
+  void show();
+  void show(int a, char **b) {fltk3::Window::show(a,b);}
+  void flush();
+  void hide();
+  void resize(int,int,int,int);
+
+  /**
+    Is turned off when FLTK creates a new context for this window or 
+    when the window resizes, and is turned on \e after draw() is called.
+    You can use this inside your draw() method to avoid unnecessarily
+    initializing the OpenGL context. Just do this:
+    \code
+    void mywindow::draw() {
+     if (!valid()) {
+       glViewport(0,0,w(),h());
+       glFrustum(...);
+       ...other initialization...
+     }
+     if (!context_valid()) {
+       ...load textures, etc. ...
+     }
+     ... draw your geometry here ...
+    }
+    \endcode
+    
+    You can turn valid() on by calling valid(1).  You
+    should only do this after fixing the transformation inside a draw()
+    or after make_current().  This is done automatically after 
+    draw() returns.
+  */
+  char valid() const {return valid_f_ & 1;}
+  /**
+    See char Fl_Gl_Window::valid() const 
+  */
+  void valid(char v) {if (v) valid_f_ |= 1; else valid_f_ &= 0xfe;}
+  void invalidate();
+
+  /**
+    Will only be set if the 
+    OpenGL context is created or recreated. It differs from
+    Fl_Gl_Window::valid() which is also set whenever the context
+    changes size.
+  */
+  char context_valid() const {return valid_f_ & 2;}
+  /**
+    See char Fl_Gl_Window::context_valid() const 
+  */
+  void context_valid(char v) {if (v) valid_f_ |= 2; else valid_f_ &= 0xfd;}
+
+  /**  Returns non-zero if the hardware supports the given or current OpenGL mode. */
+  static int can_do(int m) {return can_do(m,0);}
+  /**  Returns non-zero if the hardware supports the given or current OpenGL mode. */
+  static int can_do(const int *m) {return can_do(0, m);}
+  /**  Returns non-zero if the hardware supports the given or current OpenGL mode. */
+  int can_do() {return can_do(mode_,alist);}
+  /**
+    Set or change the OpenGL capabilites of the window.  The value can be
+    any of the following OR'd together:
+
+    - \c FL_RGB - RGB color (not indexed)
+    - \c FL_RGB8 - RGB color with at least 8 bits of each color
+    - \c FL_INDEX - Indexed mode
+    - \c FL_SINGLE - not double buffered
+    - \c FL_DOUBLE - double buffered
+    - \c FL_ACCUM - accumulation buffer
+    - \c FL_ALPHA - alpha channel in color
+    - \c FL_DEPTH - depth buffer
+    - \c FL_STENCIL - stencil buffer
+    - \c FL_MULTISAMPLE - multisample antialiasing
+
+    FL_RGB and FL_SINGLE have a value of zero, so they
+    are "on" unless you give FL_INDEX or FL_DOUBLE.
+
+    If the desired combination cannot be done, FLTK will try turning off 
+    FL_MULTISAMPLE.  If this also fails the show() will call 
+    fltk3::error() and not show the window.
+
+    You can change the mode while the window is displayed.  This is most
+    useful for turning double-buffering on and off.  Under X this will
+    cause the old X window to be destroyed and a new one to be created.  If
+    this is a top-level window this will unfortunately also cause the
+    window to blink, raise to the top, and be de-iconized, and the xid()
+    will change, possibly breaking other code.  It is best to make the GL
+    window a child of another window if you wish to do this!
+
+    mode() must not be called within draw() since it
+    changes the current context.
+  */
+  Fl_Mode mode() const {return (Fl_Mode)mode_;}
+  /** See Fl_Mode mode() const */
+  int mode(int a) {return mode(a,0);}
+  /** See Fl_Mode mode() const */
+  int mode(const int *a) {return mode(0, a);}
+  /** void See void context(void* v, int destroy_flag) */
+  void* context() const {return context_;}
+  void context(void*, int destroy_flag = 0);
+  void make_current();
+  void swap_buffers();
+  void ortho();
+
+  /**
+    Returns true if the hardware overlay is possible.  If this is false,
+    FLTK will try to simulate the overlay, with significant loss of update
+    speed.  Calling this will cause FLTK to open the display.
+  */
+  int can_do_overlay();
+  /**
+    This method causes draw_overlay() to be called at a later time.
+    Initially the overlay is clear. If you want the window to display
+    something in the overlay when it first appears, you must call this
+    immediately after you show() your window.
+  */
+  void redraw_overlay();
+  void hide_overlay();
+  /**
+    The make_overlay_current() method selects the OpenGL context
+    for the widget's overlay.  It is called automatically prior to the 
+    draw_overlay() method being called and can also be used to
+    implement feedback and/or selection within the handle()
+    method.
+  */
+  void make_overlay_current();
+
+  /** Returns an Fl_Gl_Window pointer if this widget is an Fl_Gl_Window.   
+   \retval NULL if this widget is not derived from Fl_Gl_Window.
+   \note This method is provided to avoid dynamic_cast.
+   \todo More documentation ...
+   */
+  virtual Fl_Gl_Window* as_gl_window() {return this;}
+  
+  ~Fl_Gl_Window();
+  /**
+    Creates a new Fl_Gl_Window widget using the given size, and label string. 
+    The default boxtype is FL_NO_BOX. The default mode is FL_RGB|FL_DOUBLE|FL_DEPTH.
+  */
+  Fl_Gl_Window(int W, int H, const char *l=0) : fltk3::Window(W,H,l) {init();}
+  /**
+    Creates a new Fl_Gl_Window widget using the given position,
+    size, and label string. The default boxtype is FL_NO_BOX. The
+    default mode is FL_RGB|FL_DOUBLE|FL_DEPTH.
+  */
+
+  Fl_Gl_Window(int X, int Y, int W, int H, const char *l=0)
+  : fltk3::Window(X,Y,W,H,l) {init();}
+
+protected:
+  /**
+    Draws the Fl_Gl_Window.
+
+    You \e \b must override the draw() method.
+  */
+  virtual void draw();
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Gl_Window.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Group.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Group.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Group.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,234 @@
+//
+// "$Id: Fl_Group.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// Group header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   fltk3::Group, Fl_End classes . */
+
+#ifndef Fl_Group_H
+#define Fl_Group_H
+
+#ifndef Fl_Widget_H
+#include "Fl_Widget.H"
+#endif
+
+/**
+  The fltk3::Group class is the FLTK container widget. It maintains
+  an array of child widgets. These children can themselves be any widget
+  including fltk3::Group. The most important subclass of fltk3::Group
+  is fltk3::Window, however groups can also be used to control radio buttons 
+  or to enforce resize behavior.
+*/
+class FL_EXPORT fltk3::Group : public fltk3::Widget {
+
+  fltk3::Widget** array_;
+  fltk3::Widget* savedfocus_;
+  fltk3::Widget* resizable_;
+  int children_;
+  int *sizes_; // remembered initial sizes of children
+
+  int navigation(int);
+  static fltk3::Group *current_;
+ 
+  // unimplemented copy ctor and assignment operator
+  Group(const fltk3::Group&);
+  fltk3::Group& operator=(const fltk3::Group&);
+
+protected:
+  void draw();
+  void draw_child(fltk3::Widget& widget) const;
+  void draw_children();
+  void draw_outside_label(const fltk3::Widget& widget) const ;
+  void update_child(fltk3::Widget& widget) const;
+  int  *sizes();
+
+public:
+
+  int handle(int);
+  void begin();
+  void end();
+  static fltk3::Group *current();
+  static void current(fltk3::Group *g);
+
+  /**
+    Returns how many child widgets the group has.
+  */
+  int children() const {return children_;}
+  /**
+    Returns array()[n].  <i>No range checking is done!</i>
+  */
+  fltk3::Widget* child(int n) const {return array()[n];}
+  int find(const fltk3::Widget*) const;
+  /**
+    See int fltk3::Group::find(const fltk3::Widget *w) const 
+  */
+  int find(const fltk3::Widget& o) const {return find(&o);}
+  fltk3::Widget* const* array() const;
+
+  void resize(int,int,int,int);
+  /**
+    Creates a new fltk3::Group widget using the given position, size,
+    and label string. The default boxtype is FL_NO_BOX.
+  */
+  Group(int,int,int,int, const char * = 0);
+  virtual ~Group();
+  void add(fltk3::Widget&);
+  /**
+    See void fltk3::Group::add(fltk3::Widget &w) 
+  */
+  void add(fltk3::Widget* o) {add(*o);}
+  void insert(fltk3::Widget&, int i);
+  /**
+    This does insert(w, find(before)).  This will append the
+    widget if \p before is not in the group.
+  */
+  void insert(fltk3::Widget& o, fltk3::Widget* before) {insert(o,find(before));}
+  void remove(fltk3::Widget&);
+  /**
+    Removes the widget \p o from the group.
+    \sa void remove(fltk3::Widget&)
+  */
+  void remove(fltk3::Widget* o) {remove(*o);}
+  void clear();
+
+  /**
+    See void fltk3::Group::resizable(fltk3::Widget *box) 
+  */
+  void resizable(fltk3::Widget& o) {resizable_ = &o;}
+  /**
+    The resizable widget defines the resizing box for the group. When the
+    group is resized it calculates a new size and position for all of its
+    children. Widgets that are horizontally or vertically inside the
+    dimensions of the box are scaled to the new size. Widgets outside the
+    box are moved.
+
+    In these examples the gray area is the resizable:
+
+    \image html resizebox1.gif
+    
+    \image html resizebox2.gif
+    
+    \image latex resizebox1.eps "before resize"  width=4cm
+    
+    \image latex resizebox2.eps "after resize"   width=4cm
+
+    The resizable may be set to the group itself, in which case all the
+    contents are resized. This is the default value for fltk3::Group,
+    although NULL is the default for fltk3::Window and Fl_Pack.
+
+    If the resizable is NULL then all widgets remain a fixed size
+    and distance from the top-left corner.
+
+    It is possible to achieve any type of resize behavior by using an
+    invisible Fl_Box as the resizable and/or by using a hierarchy
+    of child fltk3::Group's.
+  */
+  void resizable(fltk3::Widget* o) {resizable_ = o;}
+  /**
+    See void fltk3::Group::resizable(fltk3::Widget *box) 
+  */
+  fltk3::Widget* resizable() const {return resizable_;}
+  /**
+    Adds a widget to the group and makes it the resizable widget.
+  */
+  void add_resizable(fltk3::Widget& o) {resizable_ = &o; add(o);}
+  void init_sizes();
+
+  /**
+    Controls whether the group widget clips the drawing of
+    child widgets to its bounding box.
+    
+    Set \p c to 1 if you want to clip the child widgets to the
+    bounding box.
+
+    The default is to not clip (0) the drawing of child widgets.
+  */
+  void clip_children(int c) { if (c) set_flag(CLIP_CHILDREN); else clear_flag(CLIP_CHILDREN); }
+  /**
+    Returns the current clipping mode.
+
+    \return true, if clipping is enabled, false otherwise.
+
+    \see void fltk3::Group::clip_children(int c)
+  */
+  unsigned int clip_children() { return (flags() & CLIP_CHILDREN) != 0; }
+
+  /** Returns an fltk3::Group pointer if this widget is an fltk3::Group.
+  
+      \retval NULL if this widget is not derived from fltk3::Group.
+      \note This method is provided to avoid dynamic_cast.
+      \todo More documentation ...
+   */
+  virtual fltk3::Group* as_group() { return this; }
+
+  // back compatibility functions:
+
+  /**
+    \deprecated This is for backwards compatibility only. You should use
+    \e W->%take_focus() instead.
+    \sa fltk3::Widget::take_focus();
+  */
+  void focus(fltk3::Widget* W) {W->take_focus();}
+
+  /** This is for forms compatibility only */
+  fltk3::Widget* & _ddfdesign_kludge() {return resizable_;}
+
+  /** This is for forms compatibility only */
+  void forms_end();
+};
+
+// dummy class used to end child groups in constructors for complex
+// subclasses of fltk3::Group:
+/**
+  This is a dummy class that allows you to end a fltk3::Group in a constructor list of a
+  class:
+  \code 
+   class MyClass {
+   fltk3::Group group;
+   Fl_Button button_in_group;
+   Fl_End end;
+   Fl_Button button_outside_group;
+   MyClass();
+  };
+  MyClass::MyClass() :
+   group(10,10,100,100),
+   button_in_group(20,20,60,30),
+   end(),
+   button_outside_group(10,120,60,30)
+  {} 
+  \endcode
+*/
+class FL_EXPORT Fl_End {
+public:
+  /** All it does is calling fltk3::Group::current()->end() */
+  Fl_End() {fltk3::Group::current()->end();}
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Group.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Help_Dialog.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Help_Dialog.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Help_Dialog.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,95 @@
+//
+// "$Id: Fl_Help_Dialog.H 6614 2009-01-01 16:11:32Z matt $"
+//
+// Fl_Help_Dialog dialog for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Help_Dialog widget . */
+
+// generated by Fast Light User Interface Designer (fluid) version 1.0108
+
+#ifndef Fl_Help_Dialog_H
+#define Fl_Help_Dialog_H
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Double_Window.H>
+#include <fltk3/Fl_Group.H>
+#include <fltk3/Fl_Button.H>
+#include <fltk3/Fl_Input.H>
+#include <fltk3/Fl_Box.H>
+#include <fltk3/Fl_Help_View.H>
+
+class FL_EXPORT Fl_Help_Dialog {
+  int index_; 
+  int max_; 
+  int line_[100]; 
+  char file_[100][256]; 
+  int find_pos_; 
+public:
+  Fl_Help_Dialog();
+private:
+  Fl_Double_Window *window_;
+  Fl_Button *back_;
+  void cb_back__i(Fl_Button*, void*);
+  static void cb_back_(Fl_Button*, void*);
+  Fl_Button *forward_;
+  void cb_forward__i(Fl_Button*, void*);
+  static void cb_forward_(Fl_Button*, void*);
+  Fl_Button *smaller_;
+  void cb_smaller__i(Fl_Button*, void*);
+  static void cb_smaller_(Fl_Button*, void*);
+  Fl_Button *larger_;
+  void cb_larger__i(Fl_Button*, void*);
+  static void cb_larger_(Fl_Button*, void*);
+  Fl_Input *find_;
+  void cb_find__i(Fl_Input*, void*);
+  static void cb_find_(Fl_Input*, void*);
+  Fl_Help_View *view_;
+  void cb_view__i(Fl_Help_View*, void*);
+  static void cb_view_(Fl_Help_View*, void*);
+public:
+  ~Fl_Help_Dialog();
+  int h();
+  void hide();
+  void load(const char *f);
+  void position(int xx, int yy);
+  void resize(int xx, int yy, int ww, int hh);
+  void show();
+  void show(int argc, char **argv);
+  void textsize(Fl_Fontsize s);
+  Fl_Fontsize textsize();
+  void topline(const char *n);
+  void topline(int n);
+  void value(const char *f);
+  const char * value() const;
+  int visible();
+  int w();
+  int x();
+  int y();
+};
+#endif
+
+//
+// End of "$Id: Fl_Help_Dialog.H 6614 2009-01-01 16:11:32Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Help_View.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Help_View.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Help_View.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,398 @@
+//
+// "$Id: Fl_Help_View.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// Help Viewer widget definitions.
+//
+// Copyright 1997-2009 by Easy Software Products.
+// Image support by Matthias Melcher, Copyright 2000-2009.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Help_View widget . */
+
+#ifndef Fl_Help_View_H
+#  define Fl_Help_View_H
+
+//
+// Include necessary header files...
+//
+
+#  include <stdio.h>
+#  include "Fl.H"
+#  include "Fl_Group.H"
+#  include "Fl_Scrollbar.H"
+#  include "fl_draw.H"
+#  include "Fl_Shared_Image.H"
+
+
+//
+// Fl_Help_Func type - link callback function for files...
+//
+
+
+typedef const char *(Fl_Help_Func)(fltk3::Widget *, const char *);
+
+
+//
+// Fl_Help_Block structure...
+//
+
+struct Fl_Help_Block
+{
+  const char	*start,		// Start of text
+		*end;		// End of text
+  uchar		border;		// Draw border?
+  Fl_Color	bgcolor;	// Background color
+  int		x,		// Indentation/starting X coordinate
+		y,		// Starting Y coordinate
+		w,		// Width
+		h;		// Height
+  int		line[32];	// Left starting position for each line
+};
+
+//
+// Fl_Help_Link structure...
+//
+/** Definition of a link for the html viewer. */
+struct Fl_Help_Link
+{
+  char		filename[192],	///< Reference filename
+		name[32];	///< Link target (blank if none)
+  int		x,		///< X offset of link text
+		y,		///< Y offset of link text
+		w,		///< Width of link text
+		h;		///< Height of link text
+};
+
+/*
+ * Fl_Help_View font stack opaque implementation
+ */
+
+/** Fl_Help_View font stack element definition. */
+struct Fl_Help_Font_Style {
+  Fl_Font      f;  ///< Font
+  Fl_Fontsize  s;  ///< Font Size
+  Fl_Color     c;  ///< Font Color
+  void get(Fl_Font &afont, Fl_Fontsize &asize, Fl_Color &acolor) {afont=f; asize=s; acolor=c;} ///< Gets current font attributes
+  void set(Fl_Font afont, Fl_Fontsize asize, Fl_Color acolor) {f=afont; s=asize; c=acolor;} ///< Sets current font attributes
+  Fl_Help_Font_Style(Fl_Font afont, Fl_Fontsize asize, Fl_Color acolor) {set(afont, asize, acolor);}
+  Fl_Help_Font_Style(){} // For in table use
+};
+
+/** Fl_Help_View font stack definition. */
+const size_t MAX_FL_HELP_FS_ELTS = 100;
+
+struct Fl_Help_Font_Stack {
+  /** font stack construction, initialize attributes. */
+  Fl_Help_Font_Stack() {
+    nfonts_ = 0;
+  }
+
+  void init(Fl_Font f, Fl_Fontsize s, Fl_Color c) { 
+    nfonts_ = 0;
+    elts_[nfonts_].set(f, s, c);
+    fl_font(f, s); 
+    fl_color(c);
+  }
+  /** Gets the top (current) element on the stack. */
+  void top(Fl_Font &f, Fl_Fontsize &s, Fl_Color &c) { elts_[nfonts_].get(f, s, c); }
+  /** Pushes the font style triplet on the stack, also calls fl_font() & fl_color() adequately */
+  void push(Fl_Font f, Fl_Fontsize s, Fl_Color c) { 
+    if (nfonts_ <  MAX_FL_HELP_FS_ELTS-1) nfonts_ ++;
+    elts_[nfonts_].set(f, s, c);
+    fl_font(f, s); fl_color(c); 
+  }
+  /** Pops from the stack the font style triplet and calls fl_font() & fl_color() adequately */
+  void pop(Fl_Font &f, Fl_Fontsize &s, Fl_Color &c) { 
+    if (nfonts_ > 0) nfonts_ --;
+    top(f, s, c);
+    fl_font(f, s); fl_color(c);
+  }
+  /** Gets the current count of font style elements in the stack. */
+  size_t count() const {return nfonts_;} // Gets the current number of fonts in the stack
+
+protected:
+  size_t nfonts_;		///< current number of fonts in stack
+  Fl_Help_Font_Style elts_[100]; ///< font elements
+};
+
+/** Fl_Help_Target structure */
+
+struct Fl_Help_Target
+{
+  char		name[32];	///< Target name
+  int		y;		///< Y offset of target
+};
+
+/**
+  The Fl_Help_View widget displays HTML text. Most HTML 2.0
+  elements are supported, as well as a primitive implementation of tables.
+  GIF, JPEG, and PNG images are displayed inline.
+
+  Supported HTML tags:
+     - A: HREF/NAME
+     - B
+     - BODY: BGCOLOR/TEXT/LINK
+     - BR
+     - CENTER
+     - CODE
+     - DD
+     - DL
+     - DT
+     - EM
+     - FONT: COLOR/SIZE/FACE=(helvetica/arial/sans/times/serif/symbol/courier)
+     - H1/H2/H3/H4/H5/H6
+     - HEAD
+     - HR
+     - I
+     - IMG: SRC/WIDTH/HEIGHT/ALT
+     - KBD
+     - LI
+     - OL
+     - P
+     - PRE
+     - STRONG
+     - TABLE: TH/TD/TR/BORDER/BGCOLOR/COLSPAN/ALIGN=CENTER|RIGHT|LEFT
+     - TITLE
+     - TT
+     - U
+     - UL
+     - VAR
+
+  Supported color names:
+     - black,red,green,yellow,blue,magenta,fuchsia,cyan,aqua,white,gray,grey,lime,maroon,navy,olive,purple,silver,teal.
+
+  Supported urls:
+     - Internal: file:
+     - External: http: ftp: https: ipp: mailto: news:
+
+  Quoted char names:
+     - Aacute aacute Acirc acirc acute AElig aelig Agrave agrave amp Aring aring Atilde atilde Auml auml
+     - brvbar bull
+     - Ccedil ccedil cedil cent copy curren
+     - deg divide
+     - Eacute eacute Ecirc ecirc Egrave egrave ETH eth Euml euml euro
+     - frac12 frac14 frac34
+     - gt
+     - Iacute iacute Icirc icirc iexcl Igrave igrave iquest Iuml iuml
+     - laquo lt
+     - macr micro middot
+     - nbsp not Ntilde ntilde
+     - Oacute oacute Ocirc ocirc Ograve ograve ordf ordm Oslash oslash Otilde otilde Ouml ouml
+     - para premil plusmn pound
+     - quot
+     - raquo reg
+     - sect shy sup1 sup2 sup3 szlig
+     - THORN thorn times trade
+     - Uacute uacute Ucirc ucirc Ugrave ugrave uml Uuml uuml
+     - Yacute yacute
+     - yen Yuml yuml
+
+*/
+class FL_EXPORT Fl_Help_View : public fltk3::Group	// Help viewer widget
+{
+  enum { RIGHT = -1, CENTER, LEFT };	///< Alignments
+
+  char		title_[1024];		///< Title string
+  Fl_Color	defcolor_,		///< Default text color
+		bgcolor_,		///< Background color
+		textcolor_,		///< Text color
+		linkcolor_;		///< Link color
+  Fl_Font       textfont_;		///< Default font for text
+  Fl_Fontsize  textsize_;		///< Default font size
+  const char	*value_;		///< HTML text value
+  Fl_Help_Font_Stack fstack_;           ///< font stack management
+  int		nblocks_,		///< Number of blocks/paragraphs
+		ablocks_;		///< Allocated blocks
+  Fl_Help_Block	*blocks_;		///< Blocks
+
+  Fl_Help_Func	*link_;			///< Link transform function
+
+  int		nlinks_,		///< Number of links
+		alinks_;		///< Allocated links
+  Fl_Help_Link	*links_;		///< Links
+
+  int		ntargets_,		///< Number of targets
+		atargets_;		///< Allocated targets
+  Fl_Help_Target *targets_;		///< Targets
+
+  char		directory_[1024];	///< Directory for current file
+  char		filename_[1024];	///< Current filename
+  int		topline_,		///< Top line in document
+		leftline_,		///< Lefthand position
+		size_,			///< Total document length
+		hsize_,			///< Maximum document width
+  		scrollbar_size_;	///< Size for both scrollbars
+  Fl_Scrollbar	scrollbar_,		///< Vertical scrollbar for document
+		hscrollbar_;		///< Horizontal scrollbar
+
+  static int    selection_first;
+  static int    selection_last;
+  static int    selection_push_first;
+  static int    selection_push_last;
+  static int    selection_drag_first;
+  static int    selection_drag_last;
+  static int    selected;
+  static int    draw_mode;
+  static int    mouse_x;
+  static int    mouse_y;
+  static int    current_pos;
+  static Fl_Help_View *current_view;
+  static Fl_Color hv_selection_color;
+  static Fl_Color hv_selection_text_color;
+
+
+  void initfont(Fl_Font &f, Fl_Fontsize &s, Fl_Color &c) { f = textfont_; s = textsize_; c = textcolor_; fstack_.init(f, s, c); }
+  void pushfont(Fl_Font f, Fl_Fontsize s) {fstack_.push(f, s, textcolor_);}
+  void pushfont(Fl_Font f, Fl_Fontsize s, Fl_Color c) {fstack_.push(f, s, c);}
+  void popfont(Fl_Font &f, Fl_Fontsize &s, Fl_Color &c) {fstack_.pop(f, s, c);}
+
+  Fl_Help_Block	*add_block(const char *s, int xx, int yy, int ww, int hh, uchar border = 0);
+  void		add_link(const char *n, int xx, int yy, int ww, int hh);
+  void		add_target(const char *n, int yy);
+  static int	compare_targets(const Fl_Help_Target *t0, const Fl_Help_Target *t1);
+  int		do_align(Fl_Help_Block *block, int line, int xx, int a, int &l);
+  void		draw();
+  void		format();
+  void		format_table(int *table_width, int *columns, const char *table);
+  void		free_data();
+  int		get_align(const char *p, int a);
+  const char	*get_attr(const char *p, const char *n, char *buf, int bufsize);
+  Fl_Color	get_color(const char *n, Fl_Color c);
+  Fl_Shared_Image *get_image(const char *name, int W, int H);
+  int		get_length(const char *l);
+  int		handle(int);
+
+  void          hv_draw(const char *t, int x, int y);
+  char          begin_selection();
+  char          extend_selection();
+  void          end_selection(int c=0);
+  void          clear_global_selection();
+  Fl_Help_Link  *find_link(int, int);
+  void          follow_link(Fl_Help_Link*);
+
+public:
+
+  Fl_Help_View(int xx, int yy, int ww, int hh, const char *l = 0);
+  ~Fl_Help_View();
+  /** Returns the current directory for the text in the buffer. */
+  const char	*directory() const { if (directory_[0]) return (directory_);
+  					else return ((const char *)0); }
+  /** Returns the current filename for the text in the buffer. */
+  const char	*filename() const { if (filename_[0]) return (filename_);
+  					else return ((const char *)0); }
+  int		find(const char *s, int p = 0);
+  /**
+    This method assigns a callback function to use when a link is
+    followed or a file is loaded (via Fl_Help_View::load()) that
+    requires a different file or path.
+    
+    The callback function receives a pointer to the Fl_Help_View
+    widget and the URI or full pathname for the file in question.
+    It must return a pathname that can be opened as a local file or NULL:
+    
+    \code
+    const char *fn(fltk3::Widget *w, const char *uri);
+    \endcode
+    
+    The link function can be used to retrieve remote or virtual
+    documents, returning a temporary file that contains the actual
+    data. If the link function returns NULL, the value of
+    the Fl_Help_View widget will remain unchanged.
+    
+    If the link callback cannot handle the URI scheme, it should
+    return the uri value unchanged or set the value() of the widget
+    before returning NULL.
+  */
+  void		link(Fl_Help_Func *fn) { link_ = fn; }
+  int		load(const char *f);
+  void		resize(int,int,int,int);
+  /** Gets the size of the help view. */
+  int		size() const { return (size_); }
+  void		size(int W, int H) { fltk3::Widget::size(W, H); }
+  /** Sets the default text color. */
+  void		textcolor(Fl_Color c) { if (textcolor_ == defcolor_) textcolor_ = c; defcolor_ = c; }
+  /** Returns the current default text color. */
+  Fl_Color	textcolor() const { return (defcolor_); }
+  /** Sets the default text font. */
+  void		textfont(Fl_Font f) { textfont_ = f; format(); }
+  /** Returns the current default text font. */
+  Fl_Font       textfont() const { return (textfont_); }
+  /** Sets the default text size. */
+  void		textsize(Fl_Fontsize s) { textsize_ = s; format(); }
+  /** Gets the default text size. */
+  Fl_Fontsize  textsize() const { return (textsize_); }
+  /** Returns the current document title, or NULL if there is no title. */
+  const char	*title() { return (title_); }
+  void		topline(const char *n);
+  void		topline(int);
+  /** Returns the current top line in pixels. */
+  int		topline() const { return (topline_); }
+  void		leftline(int);
+  /** Gets the left position in pixels. */
+  int		leftline() const { return (leftline_); }
+  void		value(const char *val);
+  /** Returns the current buffer contents. */
+  const char	*value() const { return (value_); }
+  void          clear_selection();
+  void          select_all();
+  /**
+    Gets the current size of the scrollbars' troughs, in pixels.
+
+    If this value is zero (default), this widget will use the 
+    fltk3::scrollbar_size() value as the scrollbar's width.
+  
+    \returns Scrollbar size in pixels, or 0 if the global fltk3::scrollbar_size() is being used.
+    \see fltk3::scrollbar_size(int)
+  */
+  int scrollbar_size() const {
+      return(scrollbar_size_);
+  }
+  /**
+    Sets the pixel size of the scrollbars' troughs to the \p size, in pixels.
+
+    Normally you should not need this method, and should use
+    fltk3::scrollbar_size(int) instead to manage the size of ALL 
+    your widgets' scrollbars. This ensures your application 
+    has a consistent UI, is the default behavior, and is normally
+    what you want.
+
+    Only use THIS method if you really need to override the global
+    scrollbar size. The need for this should be rare.
+    
+    Setting \p size to the special value of 0 causes the widget to
+    track the global fltk3::scrollbar_size(), which is the default.
+    
+    \param[in] size Sets the scrollbar size in pixels.\n
+                    If 0 (default), scrollbar size tracks the global fltk3::scrollbar_size()
+    \see fltk3::scrollbar_size()
+  */
+  void scrollbar_size(int size) {
+      scrollbar_size_ = size;
+  }   
+};
+
+#endif // !Fl_Help_View_H
+
+//
+// End of "$Id: Fl_Help_View.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Hold_Browser.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Hold_Browser.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Hold_Browser.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,61 @@
+//
+// "$Id: Fl_Hold_Browser.H 6614 2009-01-01 16:11:32Z matt $"
+//
+// Hold browser header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Hold_Browser widget . */
+
+#ifndef Fl_Hold_Browser_H
+#define Fl_Hold_Browser_H
+
+#include "Fl_Browser.H"
+
+/**
+  The Fl_Hold_Browser is a subclass of Fl_Browser
+  which lets the user select a single item, or no items by clicking on
+  the empty space.  As long as the mouse button is held down the item
+  pointed to by it is highlighted, and this highlighting remains on when
+  the mouse button is released. Normally the callback is done when the
+  user releases the mouse, but you can change this with when().
+  <P>See Fl_Browser for methods to add and remove lines from the browser.
+*/
+class Fl_Hold_Browser : public Fl_Browser {
+public:
+  /**
+    Creates a new Fl_Hold_Browser widget using the given
+    position, size, and label string. The default boxtype is FL_DOWN_BOX.
+    The constructor specializes Fl_Browser() by setting the type to FL_HOLD_BROWSER.
+    The destructor destroys the widget and frees all memory that has been allocated.
+ */
+  Fl_Hold_Browser(int X,int Y,int W,int H,const char *l=0)
+	: Fl_Browser(X,Y,W,H,l) {type(FL_HOLD_BROWSER);}
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Hold_Browser.H 6614 2009-01-01 16:11:32Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Hor_Fill_Slider.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Hor_Fill_Slider.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Hor_Fill_Slider.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,46 @@
+//
+// "$Id: Fl_Hor_Fill_Slider.H 6614 2009-01-01 16:11:32Z matt $"
+//
+// Horizontal fill slider header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Hor_Fill_Slider widget . */
+
+#ifndef Fl_Hor_Fill_Slider_H
+#define Fl_Hor_Fill_Slider_H
+
+#include "Fl_Slider.H"
+
+class Fl_Hor_Fill_Slider : public Fl_Slider {
+public:
+    Fl_Hor_Fill_Slider(int x,int y,int w,int h,const char *l=0)
+	: Fl_Slider(x,y,w,h,l) {type(FL_HOR_FILL_SLIDER);}
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Hor_Fill_Slider.H 6614 2009-01-01 16:11:32Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Hor_Nice_Slider.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Hor_Nice_Slider.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Hor_Nice_Slider.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,46 @@
+//
+// "$Id: Fl_Hor_Nice_Slider.H 6614 2009-01-01 16:11:32Z matt $"
+//
+// Horizontal "nice" slider header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Hor_Nice_Slider widget . */
+
+#ifndef Fl_Hor_Nice_Slider_H
+#define Fl_Hor_Nice_Slider_H
+
+#include "Fl_Slider.H"
+
+class Fl_Hor_Nice_Slider : public Fl_Slider {
+public:
+    Fl_Hor_Nice_Slider(int x,int y,int w,int h,const char *l=0)
+	: Fl_Slider(x,y,w,h,l) {type(FL_HOR_NICE_SLIDER); box(FL_FLAT_BOX);}
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Hor_Nice_Slider.H 6614 2009-01-01 16:11:32Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Hor_Slider.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Hor_Slider.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Hor_Slider.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,46 @@
+//
+// "$Id: Fl_Hor_Slider.H 6614 2009-01-01 16:11:32Z matt $"
+//
+// Horizontal slider header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Hor_Slider widget . */
+
+#ifndef Fl_Hor_Slider_H
+#define Fl_Hor_Slider_H
+
+#include "Fl_Slider.H"
+
+class Fl_Hor_Slider : public Fl_Slider {
+public:
+    Fl_Hor_Slider(int X,int Y,int W,int H,const char *l=0)
+	: Fl_Slider(X,Y,W,H,l) {type(FL_HOR_SLIDER);}
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Hor_Slider.H 6614 2009-01-01 16:11:32Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Hor_Value_Slider.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Hor_Value_Slider.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Hor_Value_Slider.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,46 @@
+//
+// "$Id: Fl_Hor_Value_Slider.H 6614 2009-01-01 16:11:32Z matt $"
+//
+// Horizontal value slider header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Hor_Value_Slider widget . */
+
+#ifndef Fl_Hor_Value_Slider_H
+#define Fl_Hor_Value_Slider_H
+
+#include "Fl_Value_Slider.H"
+
+class Fl_Hor_Value_Slider : public Fl_Value_Slider {
+public:
+    Fl_Hor_Value_Slider(int X,int Y,int W,int H,const char *l=0)
+	: Fl_Value_Slider(X,Y,W,H,l) {type(FL_HOR_SLIDER);}
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Hor_Value_Slider.H 6614 2009-01-01 16:11:32Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Image.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Image.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Image.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,227 @@
+//
+// "$Id: Fl_Image.H 7273 2010-03-15 23:47:47Z AlbrechtS $"
+//
+// Image header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Image, Fl_RGB_Image classes . */
+
+#ifndef Fl_Image_H
+#  define Fl_Image_H
+
+#  include "Enumerations.H"
+
+class fltk3::Widget;
+struct Fl_Menu_Item;
+struct Fl_Label;
+
+/**
+  Fl_Image is the base class used for caching and
+  drawing all kinds of images in FLTK. This class keeps track of
+  common image data such as the pixels, colormap, width, height,
+  and depth. Virtual methods are used to provide type-specific
+  image handling.</P>
+  
+  <P>Since the Fl_Image class does not support image
+  drawing by itself, calling the draw() method results in
+  a box with an X in it being drawn instead.
+*/
+class FL_EXPORT Fl_Image {
+  int w_, h_, d_, ld_, count_;
+  const char * const *data_;
+
+  // Forbid use of copy contructor and assign operator
+  Fl_Image & operator=(const Fl_Image &);
+  Fl_Image(const Fl_Image &);
+
+  protected:
+
+  /**
+    The first form of the w() method returns the current
+    image width in pixels.</P>
+    
+    <P>The second form is a protected method that sets the current
+    image width.
+  */
+  void w(int W) {w_ = W;}
+  /**
+    The first form of the h() method returns the current
+    image height in pixels.</P>
+    
+    <P>The second form is a protected method that sets the current
+    image height.
+  */
+  void h(int H) {h_ = H;}
+  /**
+    The first form of the d() method returns the current
+    image depth. The return value will be 0 for bitmaps, 1 for
+    pixmaps, and 1 to 4 for color images.</P>
+    
+    <P>The second form is a protected method that sets the current
+    image depth.
+  */
+  void d(int D) {d_ = D;}
+  /**    See int ld()  */
+  void ld(int LD) {ld_ = LD;}
+  /**    See const char * const *data()  */
+  void data(const char * const *p, int c) {data_ = p; count_ = c;}
+  void draw_empty(int X, int Y);
+
+  static void labeltype(const Fl_Label *lo, int lx, int ly, int lw, int lh, Fl_Align la);
+  static void measure(const Fl_Label *lo, int &lw, int &lh);
+
+  public:
+
+  /** See void Fl_Image::w(int) */
+  int w() const {return w_;}
+  /** See void Fl_Image::h(int) */
+  int h() const {return h_;}
+  /**
+    The first form of the d() method returns the current
+    image depth. The return value will be 0 for bitmaps, 1 for
+    pixmaps, and 1 to 4 for color images.</P>
+    
+    <P>The second form is a protected method that sets the current
+    image depth.
+  */
+  int d() const {return d_;}
+  /**
+    The first form of the ld() method returns the current
+    line data size in bytes. Line data is extra data that is included
+    after each line of color image data and is normally not present.</P>
+    
+    <P>The second form is a protected method that sets the current
+    line data size in bytes.
+  */
+  int ld() const {return ld_;}
+  /**
+    The count() method returns the number of data values
+    associated with the image. The value will be 0 for images with
+    no associated data, 1 for bitmap and color images, and greater
+    than 2 for pixmap images.
+  */
+  int count() const {return count_;}
+  /**
+    The first form of the data() method returns a
+    pointer to the current image data array. Use the
+    count() method to find the size of the data array.</P>
+    
+    <P>The second form is a protected method that sets the current
+    array pointer and count of pointers in the array.
+  */
+  const char * const *data() const {return data_;}
+  
+  /**
+    The constructor creates an empty image with the specified
+    width, height, and depth. The width and height are in pixels.
+    The depth is 0 for bitmaps, 1 for pixmap (colormap) images, and
+    1 to 4 for color images.
+  */
+  Fl_Image(int W, int H, int D) {w_ = W; h_ = H; d_ = D; ld_ = 0; count_ = 0; data_ = 0;}
+  virtual ~Fl_Image();
+  virtual Fl_Image *copy(int W, int H);
+  /**
+    The copy() method creates a copy of the specified
+    image. If the width and height are provided, the image is
+    resized to the specified size. The image should be deleted (or in
+    the case of Fl_Shared_Image, released) when you are done
+    with it.
+  */
+  Fl_Image *copy() { return copy(w(), h()); }
+  virtual void color_average(Fl_Color c, float i);
+  /**
+    The inactive() method calls
+    color_average(FL_BACKGROUND_COLOR, 0.33f) to produce 
+    an image that appears grayed out. <I>This method does not 
+    alter the original image data.</I>
+  */
+  void inactive() { color_average(FL_GRAY, .33f); }
+  virtual void desaturate();
+  virtual void label(fltk3::Widget*w);
+  virtual void label(Fl_Menu_Item*m);
+  /**
+    The draw() methods draw the image. This form specifies
+    a bounding box for the image, with the origin
+    (upper-lefthand corner) of the image offset by the cx
+    and cy arguments.
+  */
+  virtual void draw(int X, int Y, int W, int H, int cx=0, int cy=0); // platform dependent
+  /**
+    The draw() methods draw the image. This form
+    specifies the upper-lefthand corner of the image
+  */
+  void draw(int X, int Y) {draw(X, Y, w(), h(), 0, 0);} // platform dependent
+  virtual void uncache();
+};
+
+/**
+  The Fl_RGB_Image class supports caching and drawing
+  of full-color images with 1 to 4 channels of color information.
+  Images with an even number of channels are assumed to contain
+  alpha information, which is used to blend the image with the
+  contents of the screen.</P>
+  
+  <P>Fl_RGB_Image is defined in
+  &lt;fltk3/Fl_Image.H&gt;, however for compatibility reasons
+  &lt;fltk3/Fl_RGB_Image.H&gt; should be included.
+*/
+class FL_EXPORT Fl_RGB_Image : public Fl_Image {
+  public:
+
+  const uchar *array;
+  int alloc_array; // Non-zero if array was allocated
+
+  private:
+
+#if defined(__APPLE__) || defined(WIN32)
+  void *id_; // for internal use
+  void *mask_; // for internal use (mask bitmap)
+#else
+  unsigned id_; // for internal use
+  unsigned mask_; // for internal use (mask bitmap)
+#endif // __APPLE__ || WIN32
+
+  public:
+
+/**  The constructor creates a new image from the specified data. */
+  Fl_RGB_Image(const uchar *bits, int W, int H, int D=3, int LD=0) :
+    Fl_Image(W,H,D), array(bits), alloc_array(0), id_(0), mask_(0) {data((const char **)&array, 1); ld(LD);}
+  virtual ~Fl_RGB_Image();
+  virtual Fl_Image *copy(int W, int H);
+  Fl_Image *copy() { return copy(w(), h()); }
+  virtual void color_average(Fl_Color c, float i);
+  virtual void desaturate();
+  virtual void draw(int X, int Y, int W, int H, int cx=0, int cy=0);
+  void draw(int X, int Y) {draw(X, Y, w(), h(), 0, 0);}
+  virtual void label(fltk3::Widget*w);
+  virtual void label(Fl_Menu_Item*m);
+  virtual void uncache();
+};
+
+#endif // !Fl_Image_H
+
+//
+// End of "$Id: Fl_Image.H 7273 2010-03-15 23:47:47Z AlbrechtS $".
+//

Added: branches/branch-3.0/fltk3/Fl_Input.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Input.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Input.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,262 @@
+//
+// "$Id: Fl_Input.H 6699 2009-03-18 22:58:12Z engelsman $"
+//
+// Input header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Input widget . */
+
+#ifndef Fl_Input_H
+#define Fl_Input_H
+
+#include "Fl_Input_.H"
+
+/**
+  This is the FLTK text input widget. It displays a single line
+  of text and lets the user edit it. Normally it is drawn with an
+  inset box and a white background. The text may contain any
+  characters (even 0), and will correctly display anything, using
+  ^X notation for unprintable control characters and \\nnn notation
+  for unprintable characters with the high bit set. It assumes the
+  font can draw any characters in the ISO-8859-1 character set.</P>
+  
+  <CENTER><TABLE border=1 WIDTH=90% summary="Fl_Input keyboard and mouse bindings.">
+  
+  <TR><TD WIDTH=200><B>Mouse button 1</B></TD><TD>Moves the cursor to
+  this point. Drag selects characters.  Double click selects words.
+  Triple click selects all text.  Shift+click extends the selection.
+  When you select text it is automatically copied to the clipboard.
+  </TD></TR>
+  
+  <TR><TD><B>Mouse button 2</B></TD><TD>Insert the clipboard at
+  the point clicked.  You can also select a region and replace it with the
+  clipboard by selecting the region with mouse button 2.
+  </TD></TR>
+  
+  <TR><TD><B>Mouse button 3</B></TD><TD>Currently acts like button 1.</TD></TR>
+  
+  <TR><TD><B>Backspace</B></TD><TD>Deletes one character to the left, or
+  deletes the selected region.</TD></TR>
+  <TR><TD><B>Enter</B></TD><TD>May cause the callback, see when().</TD></TR>
+  <TR><TD><B>^A or Home</B></TD><TD>Go to start of line.</TD></TR>
+  <TR><TD><B>^B or Left</B></TD><TD>Move left</TD></TR>
+  <TR><TD><B>^C</B></TD><TD>Copy the selection to the clipboard</TD></TR>
+  <TR><TD><B>^D or Delete</B></TD><TD>Deletes one character to the right
+  or deletes the selected region.</TD></TR>
+  <TR><TD><B>^E or End</B></TD><TD>Go to the end of line.</TD></TR>
+  <TR><TD><B>^F or Right</B></TD><TD>Move right</TD></TR>
+  <TR><TD><B>^K</B></TD><TD>Delete to the end of line (next \\n character)
+  or deletes a single \\n character.  These deletions are all concatenated
+  into the clipboard.</TD></TR>
+  <TR><TD><B>^N or Down</B></TD><TD>Move down (for Fl_Multiline_Input
+  only, otherwise it moves to the next input field).</TD></TR>
+  <TR><TD><B>^P or Up</B></TD><TD>Move up (for Fl_Multiline_Input only,
+  otherwise it moves to the previous input field).</TD></TR>
+  <TR><TD><B>^U</B></TD><TD>Delete everything.</TD></TR>
+  <TR><TD><B>^V or ^Y</B></TD><TD>Paste the clipboard</TD></TR>
+  <TR><TD><B>^X or ^W</B></TD><TD>Copy the region to the clipboard and
+  delete it.</TD></TR>
+  <TR><TD><B>^Z or ^_</B></TD><TD>Undo.  This is a single-level undo
+  mechanism, but all adjacent deletions and insertions are concatenated
+  into a single "undo".  Often this will undo a lot more than you
+  expected.</TD></TR>
+  <TR><TD><B>Shift+move</B></TD><TD>Move the cursor but also extend the
+  selection.</TD></TR>
+  
+  <TR><TD><B>RightCtrl or
+  <BR>Compose</B></TD><TD>
+  \anchor Fl_Input_Compose_Character
+  Start a compose-character
+  sequence.  The next one or two keys typed define the character to
+  insert (see table that follows.)
+  
+  <p>For instance, to type "�type [compose][a]['] or [compose]['][a].
+  
+  <P>The character "nbsp" (non-breaking space) is typed by using
+  [compose][space].
+  
+  <P>The single-character sequences may be followed by a space if
+  necessary to remove ambiguity.  For instance, if you really want to
+  type "�~" rather than "�you must type [compose][a][space][~].
+  
+  <p>The same key may be used to "quote" control characters into the
+  text.  If you need a ^Q character you can get one by typing
+  [compose][Control+Q].
+  
+  <p>X may have a key on the keyboard
+  defined as XK_Multi_key.  If so this key may be used as well
+  as the right-hand control key.  You can set this up with the program
+  xmodmap.
+  
+  <p>If your keyboard is set to support a foreign language you should
+  also be able to type "dead key" prefix characters.  On X you will
+  actually be able to see what dead key you typed, and if you then move
+  the cursor without completing the sequence the accent will remain
+  inserted.</TD></TR>
+  </TABLE></CENTER>
+  
+  <!-- NEW PAGE -->
+  <center><table border=1 summary="Character Composition Table">
+  <caption align="top">Character Composition Table</caption>
+  <tr>
+  	<th>Keys</th><th>Char</th>
+  	<th>Keys</th><th>Char</th>
+  	<th>Keys</th><th>Char</th>
+  	<th>Keys</th><th>Char</th>
+  	<th>Keys</th><th>Char</th>
+  	<th>Keys</th><th>Char</th>
+  
+  </tr><tr>
+  	<td align=center>sp</td><td align=center><small>nbsp</small></td>
+  	<td align=center>*</td><td align=center>�</td>
+  	<td align=center>` A</td><td align=center>�/td>
+  	<td align=center>D -</td><td align=center>�/td>
+  	<td align=center>` a</td><td align=center>�td>
+  	<td align=center>d -</td><td align=center>�d>
+  </tr><tr>
+  	<td align=center>!</td><td align=center>�</td>
+  	<td align=center>+ -</td><td align=center>�</td>
+  	<td align=center>' A</td><td align=center>�/td>
+  	<td align=center>~ N</td><td align=center>�/td>
+  	<td align=center>' a</td><td align=center>�td>
+  	<td align=center>~ n</td><td align=center>�d>
+  </tr><tr>
+  	<td align=center>%</td><td align=center>�</td>
+  	<td align=center>2</td><td align=center>�</td>
+  	<td align=center>A ^</td><td align=center>�/td>
+  	<td align=center>` O</td><td align=center>�/td>
+  	<td align=center>^ a</td><td align=center>�td>
+  	<td align=center>` o</td><td align=center>�d>
+  </tr><tr>
+  	<td align=center>#</td><td align=center>�</td>
+  	<td align=center>3</td><td align=center>�</td>
+  	<td align=center>~ A</td><td align=center>�/td>
+  	<td align=center>' O</td><td align=center>�/td>
+  	<td align=center>~ a</td><td align=center>�td>
+  	<td align=center>' o</td><td align=center>�d>
+  </tr><tr>
+  	<td align=center>$</td><td align=center>�</td>
+  	<td align=center>'</td><td align=center>�</td>
+  	<td align=center>: A</td><td align=center>�/td>
+  	<td align=center>^ O</td><td align=center>�/td>
+  	<td align=center>: a</td><td align=center>�td>
+  	<td align=center>^ o</td><td align=center>�d>
+  </tr><tr>
+  	<td align=center>y =</td><td align=center>�</td>
+  	<td align=center>u</td><td align=center>�</td>
+  	<td align=center>* A</td><td align=center>�/td>
+  	<td align=center>~ O</td><td align=center>�/td>
+  	<td align=center>* a</td><td align=center>�td>
+  	<td align=center>~ o</td><td align=center>�d>
+  </tr><tr>
+  	<td align=center>|</td><td align=center>�</td>
+  	<td align=center>p</td><td align=center>�</td>
+  	<td align=center>A E</td><td align=center>�/td>
+  	<td align=center>: O</td><td align=center>�/td>
+  	<td align=center>a e</td><td align=center>�td>
+  	<td align=center>: o</td><td align=center>�d>
+  </tr><tr>
+  	<td align=center>&</td><td align=center>�</td>
+  	<td align=center>.</td><td align=center>�</td>
+  	<td align=center>, C</td><td align=center>�/td>
+  	<td align=center>x</td><td align=center>�/td>
+  	<td align=center>, c</td><td align=center>�td>
+  	<td align=center>- :</td><td align=center>�d>
+  </tr><tr>
+  	<td align=center>:</td><td align=center>�</td>
+  	<td align=center>,</td><td align=center>�</td>
+  	<td align=center>E `</td><td align=center>�/td>
+  	<td align=center>O /</td><td align=center>�/td>
+  	<td align=center>` e</td><td align=center>�td>
+  	<td align=center>o /</td><td align=center>�>
+  </tr><tr>
+  	<td align=center>c</td><td align=center>�</td>
+  	<td align=center>1</td><td align=center>�</td>
+  	<td align=center>' E</td><td align=center>�/td>
+  	<td align=center>` U</td><td align=center>�/td>
+  	<td align=center>' e</td><td align=center>�td>
+  	<td align=center>` u</td><td align=center>�>
+  </tr><tr>
+  	<td align=center>a</td><td align=center>�</td>
+  	<td align=center>o</td><td align=center>�</td>
+  	<td align=center>^ E</td><td align=center>�/td>
+  	<td align=center>' U</td><td align=center>�/td>
+  	<td align=center>^ e</td><td align=center>�td>
+  	<td align=center>' u</td><td align=center>�>
+  </tr><tr>
+  	<td align=center>&lt; &lt;</td><td align=center>�</td>
+  	<td align=center>&gt; &gt;</td><td align=center>�</td>
+  	<td align=center>: E</td><td align=center>�/td>
+  	<td align=center>^ U</td><td align=center>�/td>
+  	<td align=center>: e</td><td align=center>�td>
+  	<td align=center>^ u</td><td align=center>�>
+  </tr><tr>
+  	<td align=center>~</td><td align=center>�</td>
+  	<td align=center>1 4</td><td align=center>�</td>
+  	<td align=center>` I</td><td align=center>�/td>
+  	<td align=center>: U</td><td align=center>�/td>
+  	<td align=center>` i</td><td align=center>�td>
+  	<td align=center>: u</td><td align=center>�
+  </tr><tr>
+  	<td align=center>-</td><td align=center>�</td>
+  	<td align=center>1 2</td><td align=center>�</td>
+  	<td align=center>' I</td><td align=center>�/td>
+  	<td align=center>' Y</td><td align=center>�/td>
+  	<td align=center>' i</td><td align=center>�td>
+  	<td align=center>' y</td><td align=center>�
+  </tr><tr>
+  	<td align=center>r</td><td align=center>�</td>
+  	<td align=center>3 4</td><td align=center>�</td>
+  	<td align=center>^ I</td><td align=center>�/td>
+  	<td align=center>T H</td><td align=center>�/td>
+  	<td align=center>^ i</td><td align=center>�td>
+  	<td align=center>t h</td><td align=center>�</td>
+  </tr><tr>
+  	<td align=center>_</td><td align=center>�</td>
+  	<td align=center>?</td><td align=center>�</td>
+  	<td align=center>: I</td><td align=center>�/td>
+  	<td align=center>s s</td><td align=center>�/td>
+  	<td align=center>: i</td><td align=center>�td>
+  	<td align=center>: y</td><td align=center>�</td>
+  </tr>
+  </table></center>
+*/
+class FL_EXPORT Fl_Input : public Fl_Input_ {
+  int handle_key();
+  int shift_position(int p);
+  int shift_up_down_position(int p);
+  void handle_mouse(int keepmark=0);
+protected:
+  void draw();
+public:
+  int handle(int);
+  Fl_Input(int,int,int,int,const char * = 0);
+};
+
+#endif 
+
+//
+// End of "$Id: Fl_Input.H 6699 2009-03-18 22:58:12Z engelsman $".
+//

Added: branches/branch-3.0/fltk3/Fl_Input_.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Input_.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Input_.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,455 @@
+//
+// "$Id: Fl_Input_.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// Input base class header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Input_ widget . */
+
+#ifndef Fl_Input__H
+#define Fl_Input__H
+
+#ifndef Fl_Widget_H
+#include "Fl_Widget.H"
+#endif
+
+#define FL_NORMAL_INPUT		0
+#define FL_FLOAT_INPUT		1
+#define FL_INT_INPUT		2
+#define FL_HIDDEN_INPUT		3
+#define FL_MULTILINE_INPUT	4
+#define FL_SECRET_INPUT		5
+#define FL_INPUT_TYPE		7
+#define FL_INPUT_READONLY	8
+#define FL_NORMAL_OUTPUT	(FL_NORMAL_INPUT | FL_INPUT_READONLY)
+#define FL_MULTILINE_OUTPUT	(FL_MULTILINE_INPUT | FL_INPUT_READONLY)
+#define FL_INPUT_WRAP		16
+#define FL_MULTILINE_INPUT_WRAP	(FL_MULTILINE_INPUT | FL_INPUT_WRAP)
+#define FL_MULTILINE_OUTPUT_WRAP (FL_MULTILINE_INPUT | FL_INPUT_READONLY | FL_INPUT_WRAP)
+
+/**
+  This class provides a low-overhead text input field.
+
+  This is a virtual base class below Fl_Input. It has all
+  the same interfaces, but lacks the handle() and
+  draw() method. You may want to subclass it if you are
+  one of those people who likes to change how the editing keys
+  work. It may also be useful for adding scrollbars
+  to the input field.
+  
+  This can act like any of the subclasses of Fl_Input, by
+  setting type() to one of the following values:
+  
+  \code
+  #define FL_NORMAL_INPUT	   0
+  #define FL_FLOAT_INPUT	   1
+  #define FL_INT_INPUT		   2
+  #define FL_MULTILINE_INPUT	   4
+  #define FL_SECRET_INPUT	   5
+  #define FL_INPUT_TYPE		   7
+  #define FL_INPUT_READONLY	   8
+  #define FL_NORMAL_OUTPUT	   (FL_NORMAL_INPUT | FL_INPUT_READONLY)
+  #define FL_MULTILINE_OUTPUT	   (FL_MULTILINE_INPUT | FL_INPUT_READONLY)
+  #define FL_INPUT_WRAP		   16
+  #define FL_MULTILINE_INPUT_WRAP  (FL_MULTILINE_INPUT | FL_INPUT_WRAP)
+  #define FL_MULTILINE_OUTPUT_WRAP (FL_MULTILINE_INPUT | FL_INPUT_READONLY | FL_INPUT_WRAP)
+  \endcode
+
+  All variables that represent an index into a text buffer are byte-oriented,
+  not character oriented. Since utf8 characters can be up to six bytes long, 
+  simply incrementing such an index will not reliably advance to the next character
+  in the text buffer. 
+
+  Indices and pointers into the text buffer should always point at a 7 bit ASCII 
+  character or the beginning of a utf8 character sequence. Behavior for false
+  utf8 sequences and pointers into the middle of a seqeunce are undefined.
+
+  \see Fl_Text_Display, Fl_Text_Editor for more powerful text handling widgets
+
+  \internal
+  When porting this widget from ASCII to UTF8, previously legal pointers into 
+  the text of this widget can become illegal by pointing into the middle of
+  a UTF8 seuence. This is not a big problem for Fl_Input_ because all code
+  in this module is quite tolerant. It could be problematic though when deriving
+  from this class because no feedback for illegal pointers is given. Additionaly,
+  a careless "copy" call can put partial UTF8 sequnces into the clipboard.
+
+  None of these issues should be desasterous. Nevertheless, we should 
+  discuss how FLTK should handle false UTF8 suequences and pointers.
+*/
+class FL_EXPORT Fl_Input_ : public fltk3::Widget {
+
+  /** \internal Storage for the text field. */
+  const char* value_;
+
+  /** \internal Buffer memory for expanded text. \see expand() */
+  char* buffer;
+
+  /** \internal Size of text in bytes in the \p value_ field. */
+  int size_;
+
+  /** \internal \todo Please document me! */
+  int bufsize;
+  
+  /** \internal Positin of the cursor in the document */
+  int position_;
+
+  /** \internal Position of the other end of the selected text. If \p position_ equals 
+      \p mark_, no text is selected */
+  int mark_;
+
+  /** \internal Offset to text origin within widget bounds */
+  int xscroll_, yscroll_;
+
+  /** \internal Minimal update pointer. Display requirs redraw from here to the end
+      of the buffer. */
+  int mu_p;
+
+  /** \internal Maximum size of buffer. \todo Is this really needed? */
+  int maximum_size_;
+
+  /** \internal Shortcut key that will fetch focus for this widget. */
+  int shortcut_;
+
+  /** \internal This is set if no text but only the cursor needs updating. */
+  uchar erase_cursor_only;
+
+  /** \internal The font used for the entire text. */
+  Fl_Font textfont_;
+
+  /** \internal Height of the font used for the entire text. */
+  Fl_Fontsize textsize_;
+
+  /** \internal color of the entire text */
+  Fl_Color textcolor_;
+
+  /** \internal color of the text cursor */
+  Fl_Color cursor_color_;
+
+  /** \internal Horizontal cursor position in pixels while movin up or down.  */
+  static double up_down_pos;
+
+  /** \internal Flag to remeber last cursor move. */
+  static int was_up_down;
+
+  /* Convert a given text segment into the text that will be rendered on screen. */
+  const char* expand(const char*, char*) const;
+
+  /* Calculates the width in pixels of part of a text buffer. */
+  double expandpos(const char*, const char*, const char*, int*) const;
+
+  /* Mark a range of characters for update. */
+  void minimal_update(int, int);
+
+  /* Mark a range of characters for update. */
+  void minimal_update(int p);
+
+  /* Copy the value from a possibly static entry into the internal buffer. */
+  void put_in_buffer(int newsize);
+
+  /* Set the current font and font size. */
+  void setfont() const;
+
+protected:
+
+  /* Find the start of a word. */
+  int word_start(int i) const;
+
+  /* Find the end of a word. */
+  int word_end(int i) const;
+
+  /* Find the start of a line. */
+  int line_start(int i) const;
+  
+  /* Find the end of a line. */
+  int line_end(int i) const;
+
+  /* Draw the text in the passed bounding box. */
+  void drawtext(int, int, int, int);
+
+  /* Move the cursor to the column given by up_down_pos. */
+  int up_down_position(int, int keepmark=0);
+
+  /* Handle mouse clicks and mose moves. */
+  void handle_mouse(int, int, int, int, int keepmark=0);
+
+  /* Handle all kinds of text field related events. */
+  int handletext(int e, int, int, int, int);
+
+  /* Check the when() field and do a callback if indicated. */
+  void maybe_do_callback();
+
+  /** \internal Horizontal offset of text to left edge of widget. */
+  int xscroll() const {return xscroll_;}
+
+  /** \internal Vertical offset of text to top edge of widget. */
+  int yscroll() const {return yscroll_;}
+  void yscroll(int y) { yscroll_ = y; damage(FL_DAMAGE_EXPOSE);}
+
+  /* Return the number of lines displayed on a single page.  */
+  int linesPerPage();
+
+public:
+
+  /* Change the size of the widget. */
+  void resize(int, int, int, int);
+
+  /* Constructor */
+  Fl_Input_(int, int, int, int, const char* = 0);
+
+  /* Destructor */
+  ~Fl_Input_();
+
+  /* Changes the widget text. */
+  int value(const char*);
+
+  /* Changes the widget text. */
+  int value(const char*, int);
+
+  /* Changes the widget text. */
+  int static_value(const char*);
+
+  /* Changes the widget text. */
+  int static_value(const char*, int);
+
+  /**
+      Returns the text displayed in the widget.
+
+      This function returns the current value, which is a pointer
+      to the internal buffer and is valid only until the next event is
+      handled.
+  
+      \return pointer to an internal buffer - do not free() this    
+      \see Fl_Input_::value(const char*)
+  */
+  const char* value() const {return value_;}
+
+  /* Returns the character at index \p i. */
+  Fl_Char index(int i) const;
+
+  /**
+    Returns the number of bytes in value(). 
+  
+    This may be greater than <tt>strlen(value())</tt> if there are 
+    \c nul characters in the text.
+
+    \return number of bytes in the text
+  */
+  int size() const {return size_;}
+
+  /** Sets the width and height of this widget.
+    \param [in] W, H new width and height
+    \see fltk3::Widget::size(int, int) */
+  void size(int W, int H) { fltk3::Widget::size(W, H); }
+
+  /** Gets the maximum length of the input field.  
+    \todo It is not clear if this function is actually required */
+  int maximum_size() const {return maximum_size_;}
+
+  /** Sets the maximum length of the input field. 
+    \todo It is not clear if this function is actually required */
+  void maximum_size(int m) {maximum_size_ = m;}
+
+  /** Gets the position of the text cursor.
+    \return the cursor position as an index
+    \see position(int, int)
+  */
+  int position() const {return position_;}
+
+  /** Gets the current selection mark. 
+    \return index into the text */
+  int mark() const {return mark_;}
+
+  /* Sets the index for the cursor and mark. */
+  int position(int p, int m);
+
+  /** Set the cursor position and mark.
+    position(n) is the same as <tt>position(n, n)</tt>.
+    \param p new index for cursor and mark
+    \return 0 if no positions changed
+    \see position(int, int), position(), mark(int)
+  */
+  int position(int p) {return position(p, p);}
+
+  /** Sets the current selection mark. 
+    mark(n) is  the same as <tt>position(position(),n)</tt>.
+    \param m new index of the mark 
+    \return 0 if the mark did not change
+    \see position(), position(int, int) */
+  int mark(int m) {return position(position(), m);}
+
+  /* Deletes text from b to e and inserts the new string text. */
+  int replace(int, int, const char*, int=0);
+
+  /**
+    Deletes the current selection.
+
+    This function deletes the currently selected text
+    \e without storing it in the clipboard. To use the clipboard,
+    you may call copy() first or copy_cuts() after
+    this call.
+
+    \return 0 if no data was copied
+  */
+  int cut() {return replace(position(), mark(), 0);}
+
+  /**
+    Deletes the next \p n bytes rounded to characters before or after the cursor.
+
+    This function deletes the currently selected text
+    \e without storing it in the clipboard. To use the clipboard,
+    you may call copy() first or copy_cuts() after
+    this call.
+
+    \param n number of bytes rounded to full characters and clamped to the buffer.
+           A negative number will cut characters to the left of the cursor.
+    \return 0 if no data was copied
+  */
+  int cut(int n) {return replace(position(), position()+n, 0);}
+
+  /**
+    Deletes all characters between index \p a and \p b.
+
+    This function deletes the currently selected text
+    \e without storing it in the clipboard. To use the clipboard,
+    you may call copy() first or copy_cuts() after
+    this call.
+
+    \param a, b range of bytes rounded to full characters and clamped to the buffer
+    \return 0 if no data was copied
+  */
+  int cut(int a, int b) {return replace(a, b, 0);}
+
+  /**
+    Inserts text at the cursor position.
+
+    This function inserts the string in \p t at the cursor
+    position() and moves the new position and mark to
+    the end of the inserted text.
+
+    \param [in] t text that will be inserted
+    \param [in] l length of text, or 0 if the string is terminated by \c nul.
+    \return 0 if no text was inserted
+  */
+  int insert(const char* t, int l=0){return replace(position_, mark_, t, l);}
+
+  /* Put the current selection into the clipboard. */
+  int copy(int clipboard);
+
+  /* Undo previous changes to the text buffer. */
+  int undo();
+
+  /* Copy the yank buffer to the clipboard. */
+  int copy_cuts();
+
+  /** Return the shortcut key associtaed with this widget.
+    \return shortcut keystroke
+    \see Fl_Button::shortcut() */
+  int shortcut() const {return shortcut_;}
+
+  /** 
+    Sets the shortcut key associtaed with this widget.
+    Pressing the shortcut key gives text editing focus to this widget.
+    \param [in] s new shortcut keystroke 
+    \see Fl_Button::shortcut() 
+  */
+  void shortcut(int s) {shortcut_ = s;}
+
+  /** Gets the font of the text in the input field.
+    \return the current Fl_Font index */
+  Fl_Font textfont() const {return textfont_;}
+
+  /** Sets the font of the text in the input field.
+    The text font defaults to \c FL_HELVETICA.
+    \param [in] s the new text font */
+  void textfont(Fl_Font s) {textfont_ = s;}
+
+  /** Gets the size of the text in the input field.
+    \return the text height in pixels */
+  Fl_Fontsize textsize() const {return textsize_;}
+
+  /** Sets the size of the text in the input field.
+    The text height defaults to \c FL_NORMAL_SIZE.
+    \param [in] s the new font height in pixel units */
+  void textsize(Fl_Fontsize s) {textsize_ = s;}
+
+  /** Gets the color of the text in the input field.
+    \return the text color
+    \see textcolor(Fl_Color) */
+  Fl_Color textcolor() const {return textcolor_;}
+
+  /** Sets the color of the text in the input field.
+    The text color defaults to \c FL_FOREGROUND_COLOR.
+    \param [in] n new text color
+    \see textcolor() */
+  void textcolor(Fl_Color n) {textcolor_ = n;}
+
+  /** Gets the color of the cursor.  
+    \return the current cursor color */
+  Fl_Color cursor_color() const {return cursor_color_;}
+
+  /** Sets the color of the cursor.  
+    The default color for the cursor is \c FL_BLACK.
+    \param [in] n the new cursor color */
+  void cursor_color(Fl_Color n) {cursor_color_ = n;}
+
+  /** Gets the input field type. 
+    \return the current input type */
+  int input_type() const {return type() & FL_INPUT_TYPE; }
+
+  /** Sets the input field type. 
+    A redraw() is required to reformat the input field.
+    \param [in] t new input type */
+  void input_type(int t) { type((uchar)(t | readonly())); }
+
+  /** Gets the read-only state of the input field.  
+    \return non-zero if this widget is read-only */
+  int readonly() const { return type() & FL_INPUT_READONLY; }
+
+  /** Sets the read-only state of the input field.  
+    \param [in] b if \p b is 0, the text in this widget can be edited by the user */
+  void readonly(int b) { if (b) type((uchar)(type() | FL_INPUT_READONLY));
+                         else type((uchar)(type() & ~FL_INPUT_READONLY)); }
+
+  /**
+    Gets  the word wrapping state of the input field. 
+    Word wrap is only functional with multi-line input fields.
+  */
+  int wrap() const { return type() & FL_INPUT_WRAP; }
+
+  /**
+    Sets the word wrapping state of the input field. 
+    Word wrap is only functional with multi-line input fields.
+  */
+  void wrap(int b) { if (b) type((uchar)(type() | FL_INPUT_WRAP));
+                         else type((uchar)(type() & ~FL_INPUT_WRAP)); }
+
+};
+
+#endif 
+
+//
+// End of "$Id: Fl_Input_.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Input_Choice.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Input_Choice.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Input_Choice.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,222 @@
+//
+// "$Id: Fl_Input_Choice.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// An input/chooser widget.
+//            ______________  ____
+//           |              || __ |
+//           | input area   || \/ |
+//           |______________||____|
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+// Copyright 2004 by Greg Ercolano.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Input_Choice widget . */
+
+
+
+#ifndef Fl_Input_Choice_H
+#define Fl_Input_Choice_H
+
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Group.H>
+#include <fltk3/Fl_Input.H>
+#include <fltk3/Fl_Menu_Button.H>
+#include <fltk3/fl_draw.H>
+#include <string.h>
+
+/**
+  A combination of the input widget and a menu button.
+  The user can either type into the input area, or use the
+  menu button chooser on the right, which loads the input area
+  with predefined text.  Normally it is drawn with an inset box 
+  and a white background. 
+  <P>
+  The application can directly access both the input and menu
+  widgets directly, using the menubutton()
+  and input() accessor methods.
+*/
+class Fl_Input_Choice : public fltk3::Group {
+  // Private class to handle slightly 'special' behavior of menu button
+  class InputMenuButton : public Fl_Menu_Button {
+    void draw() {
+      draw_box(FL_UP_BOX, color());
+      fl_color(active_r() ? labelcolor() : fl_inactive(labelcolor()));
+      int xc = x()+w()/2, yc=y()+h()/2;
+      fl_polygon(xc-5,yc-3,xc+5,yc-3,xc,yc+3);
+      if (fltk3::focus() == this) draw_focus();
+    }
+  public:
+    InputMenuButton(int x,int y,int w,int h,const char*l=0) : 
+	Fl_Menu_Button(x,y,w,h,l) { box(FL_UP_BOX); }
+  };
+
+  Fl_Input *inp_;
+  InputMenuButton *menu_;
+
+  static void menu_cb(fltk3::Widget*, void *data) { 
+    Fl_Input_Choice *o=(Fl_Input_Choice *)data;
+    Fl_Widget_Tracker wp(o);
+    const Fl_Menu_Item *item = o->menubutton()->mvalue();
+    if (item && item->flags & (FL_SUBMENU|FL_SUBMENU_POINTER)) return;	// ignore submenus
+    if (!strcmp(o->inp_->value(), o->menu_->text()))
+    {
+      o->fltk3::Widget::clear_changed();
+      if (o->when() & FL_WHEN_NOT_CHANGED)
+	o->do_callback();
+    }
+    else
+    {
+      o->inp_->value(o->menu_->text());
+      o->inp_->set_changed();
+      o->fltk3::Widget::set_changed();
+      if (o->when() & (FL_WHEN_CHANGED|FL_WHEN_RELEASE))
+	o->do_callback();
+    }
+    
+    if (wp.deleted()) return;
+
+    if (o->callback() != default_callback)
+    {
+      o->fltk3::Widget::clear_changed();
+      o->inp_->clear_changed();
+    }
+  }
+
+  static void inp_cb(fltk3::Widget*, void *data) { 
+    Fl_Input_Choice *o=(Fl_Input_Choice *)data;
+    Fl_Widget_Tracker wp(o);
+    if (o->inp_->changed()) {
+      o->fltk3::Widget::set_changed();
+      if (o->when() & (FL_WHEN_CHANGED|FL_WHEN_RELEASE))
+	o->do_callback();
+    } else {
+      o->fltk3::Widget::clear_changed();
+      if (o->when() & FL_WHEN_NOT_CHANGED)
+	o->do_callback();
+    }
+    
+    if (wp.deleted()) return;
+
+    if (o->callback() != default_callback)
+      o->fltk3::Widget::clear_changed();
+  }
+
+  // Custom resize behavior -- input stretches, menu button doesn't
+  inline int inp_x() { return(x() + fltk3::box_dx(box())); }
+  inline int inp_y() { return(y() + fltk3::box_dy(box())); }
+  inline int inp_w() { return(w() - fltk3::box_dw(box()) - 20); }
+  inline int inp_h() { return(h() - fltk3::box_dh(box())); }
+
+  inline int menu_x() { return(x() + w() - 20 - fltk3::box_dx(box())); }
+  inline int menu_y() { return(y() + fltk3::box_dy(box())); }
+  inline int menu_w() { return(20); }
+  inline int menu_h() { return(h() - fltk3::box_dh(box())); }
+
+public:
+  /**
+    Creates a new Fl_Input_Choice widget using the given position, size,
+    and label string.
+  <P> Inherited destructor Destroys the widget and any value associated with it.
+  */
+  Fl_Input_Choice (int x,int y,int w,int h,const char*l=0) : fltk3::Group(x,y,w,h,l) {
+    fltk3::Group::box(FL_DOWN_BOX);
+    align(FL_ALIGN_LEFT);				// default like Fl_Input
+    inp_ = new Fl_Input(inp_x(), inp_y(),
+			inp_w(), inp_h());
+    inp_->callback(inp_cb, (void*)this);
+    inp_->box(FL_FLAT_BOX);		// cosmetic
+    inp_->when(FL_WHEN_CHANGED|FL_WHEN_NOT_CHANGED);
+    menu_ = new InputMenuButton(menu_x(), menu_y(),
+				menu_w(), menu_h());
+    menu_->callback(menu_cb, (void*)this);
+    menu_->box(FL_FLAT_BOX);				// cosmetic
+    end();
+  }
+  
+  /** Adds an item to the menu.*/
+  void add(const char *s) { menu_->add(s);  }
+  int changed() const { return inp_->changed() | fltk3::Widget::changed();}
+  void clear_changed() { 
+    inp_->clear_changed();
+    fltk3::Widget::clear_changed();
+  }
+  void set_changed() { 
+    inp_->set_changed();
+    // no need to call fltk3::Widget::set_changed()
+  }
+  /** Removes all items from the menu. */
+  void clear() { menu_->clear(); }
+  /** Gets the box type of the menu button */
+  Fl_Boxtype down_box() const { return (menu_->down_box()); }
+  /** Sets the box type of the menu button */
+  void down_box(Fl_Boxtype b) { menu_->down_box(b); }
+  /** Gets the Fl_Menu_Item array used for the menu. */
+  const Fl_Menu_Item *menu() { return (menu_->menu()); }
+  /** Sets the Fl_Menu_Item array used for the menu. */
+  void menu(const Fl_Menu_Item *m) { menu_->menu(m); }
+  void resize(int X, int Y, int W, int H) {
+    fltk3::Group::resize(X,Y,W,H);
+    inp_->resize(inp_x(), inp_y(), inp_w(), inp_h());
+    menu_->resize(menu_x(), menu_y(), menu_w(), menu_h());
+  }
+  /** Gets the encapsulated input text color attributes */
+  Fl_Color textcolor() const { return (inp_->textcolor());}
+  /** Sets the encapsulated input text color attributes */
+  void textcolor(Fl_Color c) { inp_->textcolor(c);}
+  /** Gets the encapsulated input text font  attributes */
+  Fl_Font textfont() const { return (inp_->textfont());}
+  /** Sets the encapsulated input text font attributes */
+  void textfont(Fl_Font f) { inp_->textfont(f);}
+  /** Gets the encapsulated input size attributes */
+  Fl_Fontsize textsize() const { return (inp_->textsize()); }
+  /** Sets the encapsulated input size attributes */
+  void textsize(Fl_Fontsize s) { inp_->textsize(s); }
+  /** See void Fl_Input_Choice::value(const char *s)  */
+  const char* value() const { return (inp_->value()); }
+  /**
+    Sets or returns the input widget's current contents. The
+    second form sets the contents using the index into the menu
+    which you can set as an integer.  Setting the value effectively
+    'chooses' this menu item, and sets it as the new input text,
+    deleting the previous text.
+  */
+  void value(const char *val) { inp_->value(val); }
+  /**    See void Fl_Input_Choice::value(const char *s)  */
+  void value(int val) {
+    menu_->value(val);
+    inp_->value(menu_->text(val));
+  }
+  /**    Returns a reference to the internal Fl_Menu_Button widget.  */
+  Fl_Menu_Button *menubutton() { return menu_; }
+  /**
+    Returns a reference to the internal Fl_Input widget.</p>
+  */
+  Fl_Input *input() { return inp_; }
+};
+
+#endif // !Fl_Input_Choice_H
+
+//
+// End of "$Id: Fl_Input_Choice.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Int_Input.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Int_Input.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Int_Input.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,55 @@
+//
+// "$Id: Fl_Int_Input.H 6614 2009-01-01 16:11:32Z matt $"
+//
+// Integer input header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Int_Input widget . */
+
+#ifndef Fl_Int_Input_H
+#define Fl_Int_Input_H
+
+#include "Fl_Input.H"
+
+/**
+  The Fl_Int_Input class is a subclass of Fl_Input
+  that only allows the user to type decimal digits (or hex numbers of the form 0xaef).
+*/
+class Fl_Int_Input : public Fl_Input {
+public:
+  /**
+    Creates a new Fl_Int_Input widget using the given position,
+    size, and label string. The default boxtype is FL_DOWN_BOX.
+    <P>Inherited destructor Destroys the widget and any value associated with it.
+  */
+  Fl_Int_Input(int X,int Y,int W,int H,const char *l = 0)
+      : Fl_Input(X,Y,W,H,l) {type(FL_INT_INPUT);}
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Int_Input.H 6614 2009-01-01 16:11:32Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_JPEG_Image.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_JPEG_Image.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_JPEG_Image.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,53 @@
+//
+// "$Id: Fl_JPEG_Image.H 7092 2010-02-18 11:38:42Z matt $"
+//
+// JPEG image header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_JPEG_Image class . */
+
+#ifndef Fl_JPEG_Image_H
+#define Fl_JPEG_Image_H
+#  include "Fl_Image.H"
+
+/**
+  The Fl_JPEG_Image class supports loading, caching,
+  and drawing of Joint Photographic Experts Group (JPEG) File
+  Interchange Format (JFIF) images. The class supports grayscale
+  and color (RGB) JPEG image files.
+*/
+class FL_EXPORT Fl_JPEG_Image : public Fl_RGB_Image {
+
+public:
+
+  Fl_JPEG_Image(const char *filename);
+  Fl_JPEG_Image(const char *name, const unsigned char *data);
+};
+
+#endif
+
+//
+// End of "$Id: Fl_JPEG_Image.H 7092 2010-02-18 11:38:42Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Light_Button.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Light_Button.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Light_Button.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,59 @@
+//
+// "$Id: Fl_Light_Button.H 6614 2009-01-01 16:11:32Z matt $"
+//
+// Lighted button header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Light_Button widget . */
+
+#ifndef Fl_Light_Button_H
+#define Fl_Light_Button_H
+
+#include "Fl_Button.H"
+
+/**
+  <P>This subclass displays the "on" state by turning on a light, 
+  rather than drawing pushed in.  The shape of the  "light" 
+  is initially set to FL_DOWN_BOX.  The color of the light when
+  on is controlled with selection_color(), which defaults to FL_YELLOW.
+
+  Buttons generate callbacks when they are clicked by the user.  You
+  control exactly when and how by changing the values for type() and when().
+  <P ALIGN=CENTER>\image html Fl_Light_Button.gif</P> 
+  \image latex Fl_Light_Button.eps "Fl_Light_Button" width=4cm
+*/
+class FL_EXPORT Fl_Light_Button : public Fl_Button {
+protected:
+    virtual void draw();
+public:
+    virtual int handle(int);
+    Fl_Light_Button(int x,int y,int w,int h,const char *l = 0);
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Light_Button.H 6614 2009-01-01 16:11:32Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Line_Dial.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Line_Dial.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Line_Dial.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,46 @@
+//
+// "$Id: Fl_Line_Dial.H 6614 2009-01-01 16:11:32Z matt $"
+//
+// Line dial header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Line_Dial widget . */
+
+#ifndef Fl_Line_Dial_H
+#define Fl_Line_Dial_H
+
+#include "Fl_Dial.H"
+
+class Fl_Line_Dial : public Fl_Dial {
+public:
+    Fl_Line_Dial(int x,int y,int w,int h, const char *l = 0)
+	: Fl_Dial(x,y,w,h,l) {type(FL_LINE_DIAL);}
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Line_Dial.H 6614 2009-01-01 16:11:32Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Menu.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Menu.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Menu.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,33 @@
+//
+// "$Id: Fl_Menu.H 6614 2009-01-01 16:11:32Z matt $"
+//
+// Old menu header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+// this include file is for back compatibility only
+#include "Fl_Menu_Item.H"
+
+//
+// End of "$Id: Fl_Menu.H 6614 2009-01-01 16:11:32Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Menu_.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Menu_.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Menu_.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,147 @@
+//
+// "$Id: Fl_Menu_.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// Menu base class header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Menu_ widget . */
+
+#ifndef Fl_Menu__H
+#define Fl_Menu__H
+
+#ifndef Fl_Widget_H
+#include "Fl_Widget.H"
+#endif
+#include "Fl_Menu_Item.H"
+
+/**
+  Base class of all widgets that have a menu in FLTK.
+  Currently FLTK provides you with 
+  Fl_Menu_Button, Fl_Menu_Bar, and Fl_Choice.
+  
+  <P>The class contains a pointer to an array of structures of type  Fl_Menu_Item.  The
+  array may either be supplied directly by the user program, or it may
+  be "private": a dynamically allocated array managed by the Fl_Menu_.
+*/
+class FL_EXPORT Fl_Menu_ : public fltk3::Widget {
+
+  Fl_Menu_Item *menu_;
+  const Fl_Menu_Item *value_;
+
+protected:
+
+  uchar alloc;
+  uchar down_box_;
+  Fl_Font textfont_;
+  Fl_Fontsize textsize_;
+  Fl_Color textcolor_;
+
+public:
+  Fl_Menu_(int,int,int,int,const char * =0);
+  ~Fl_Menu_();
+
+  int item_pathname(char *name, int namelen, const Fl_Menu_Item *finditem=0) const;
+  const Fl_Menu_Item* picked(const Fl_Menu_Item*);
+  const Fl_Menu_Item* find_item(const char *name);
+  const Fl_Menu_Item* find_item(Fl_Callback*);
+
+  const Fl_Menu_Item* test_shortcut() {return picked(menu()->test_shortcut());}
+  void global();
+
+  /**
+    Returns a pointer to the array of Fl_Menu_Items.  This will either be
+    the value passed to menu(value) or the private copy.
+  */  
+  const Fl_Menu_Item *menu() const {return menu_;}
+  void menu(const Fl_Menu_Item *m);
+  void copy(const Fl_Menu_Item *m, void* user_data = 0);
+  int  add(const char*, int shortcut, Fl_Callback*, void* = 0, int = 0);
+  /** See int Fl_Menu_::add(const char* label, int shortcut, Fl_Callback*, void *user_data=0, int flags=0)*/
+  int  add(const char* a, const char* b, Fl_Callback* c, void* d = 0, int e = 0) {
+      return add(a,fl_old_shortcut(b),c,d,e);}
+  int  add(const char *);
+  int  size() const ;
+  void size(int W, int H) { fltk3::Widget::size(W, H); }
+  void clear();
+  void replace(int,const char *);
+  void remove(int);
+ /** Changes the shortcut of item i to n.  */
+  void shortcut(int i, int s) {menu_[i].shortcut(s);}
+  /** Sets the flags of item i.  For a list of the flags, see Fl_Menu_Item.  */
+  void mode(int i,int fl) {menu_[i].flags = fl;}
+  /** Gets the flags of item i.  For a list of the flags, see Fl_Menu_Item.  */
+  int  mode(int i) const {return menu_[i].flags;}
+
+  /** Returns a pointer to the last menu item that was picked.  */
+  const Fl_Menu_Item *mvalue() const {return value_;}
+  /** Returns the index into menu() of the last item chosen by the user.  It is zero initially. */
+  int value() const {return value_ ? (int)(value_-menu_) : -1;}
+  int value(const Fl_Menu_Item*);
+  /**
+    The value is the index into menu() of the last item chosen by
+    the user.  It is zero initially.  You can set it as an integer, or set
+    it with a pointer to a menu item.  The set routines return non-zero if
+    the new value is different than the old one.
+  */
+  int value(int i) {return value(menu_+i);}
+  /** Returns the title of the last item chosen, or of item i.  */
+  const char *text() const {return value_ ? value_->text : 0;}
+  /** Returns the title of the last item chosen, or of item i.  */
+  const char *text(int i) const {return menu_[i].text;}
+
+  /** Gets the current font of menu item labels.  */
+  Fl_Font textfont() const {return textfont_;}
+  /**  Sets the current font of menu item labels.  */
+  void textfont(Fl_Font c) {textfont_=c;}
+  /**  Gets the font size of menu item labels.  */
+  Fl_Fontsize textsize() const {return textsize_;}
+  /**  Sets the font size of menu item labels.  */
+  void textsize(Fl_Fontsize c) {textsize_=c;}
+  /** Get the current color of menu item labels.  */
+  Fl_Color textcolor() const {return textcolor_;}
+  /** Sets the current color of menu item labels. */
+  void textcolor(Fl_Color c) {textcolor_=c;}
+
+  /**
+    This box type is used to surround the currently-selected items in the
+    menus.  If this is FL_NO_BOX then it acts like 
+    FL_THIN_UP_BOX and selection_color() acts like 
+    FL_WHITE, for back compatibility.    
+  */
+  Fl_Boxtype down_box() const {return (Fl_Boxtype)down_box_;}
+  /**    See Fl_Boxtype Fl_Menu_::down_box() const   */
+  void down_box(Fl_Boxtype b) {down_box_ = b;}
+
+  /** For back compatibility, same as selection_color() */
+  Fl_Color down_color() const {return selection_color();}
+  /** For back compatibility, same as selection_color() */
+  void down_color(unsigned c) {selection_color(c);}
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Menu_.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Menu_Bar.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Menu_Bar.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Menu_Bar.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,89 @@
+//
+// "$Id: Fl_Menu_Bar.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// Menu bar header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Menu_Bar widget . */
+
+#ifndef Fl_Menu_Bar_H
+#define Fl_Menu_Bar_H
+
+#include "Fl_Menu_.H"
+
+/**
+  This widget provides a standard menubar interface.  Usually you will
+  put this widget along the top edge of your window.  The height of the
+  widget should be 30 for the menu titles to draw correctly with the
+  default font.
+  <P>The items on the bar and the menus they bring up are defined by a
+  single Fl_Menu_Item
+  array.  Because a Fl_Menu_Item array defines a hierarchy, the
+  top level menu defines the items in the menubar, while the submenus
+  define the pull-down menus. Sub-sub menus and lower pop up to the right
+  of the submenus. </P>
+  <P ALIGN=CENTER>\image html  menubar.gif</P>
+  \image latex  menubar.eps " menubar" width=12cm
+  <P>If there is an item in the top menu that is not a title of a
+  submenu, then it acts like a "button" in the menubar.  Clicking on it
+  will pick it. </P>
+  <P>When the user picks an item off the menu, the item's callback is
+  done with the menubar as the fltk3::Widget* argument.  If the item
+  does not have a callback the menubar's callback is done instead. </P>
+  <P>Submenus will also pop up in response to shortcuts indicated by
+  putting a '&' character in the name field of the menu item. If you put a
+  '&' character in a top-level "button" then the shortcut picks it.  The
+  '&' character in submenus is ignored until the menu is popped up. </P>
+  <P>Typing the shortcut() of any of the menu items will cause
+  callbacks exactly the same as when you pick the item with the mouse.
+*/
+class FL_EXPORT Fl_Menu_Bar : public Fl_Menu_ {
+protected:
+    void draw();
+public:
+    int handle(int);
+  /**
+      Creates a new Fl_Menu_Bar widget using the given position,
+    size, and label string. The default boxtype is FL_UP_BOX.
+    <P>The constructor sets menu() to NULL.  See 
+    Fl_Menu_ for the methods to set or change the menu. </P>
+    <P>labelsize(), labelfont(), and labelcolor()
+    are used to control how the menubar items are drawn.  They are
+    initialized from the Fl_Menu static variables, but you can
+    change them if desired. </P>
+    <P>label() is ignored unless you change align() to
+    put it outside the menubar.
+    <P>The destructor removes the Fl_Menu_Bar widget and all of its
+    menu items.
+  */
+    Fl_Menu_Bar(int X, int Y, int W, int H,const char *l=0)
+      : Fl_Menu_(X,Y,W,H,l) {}
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Menu_Bar.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Menu_Button.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Menu_Button.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Menu_Button.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,72 @@
+//
+// "$Id: Fl_Menu_Button.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// Menu button header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Menu_Button widget . */
+
+#ifndef Fl_Menu_Button_H
+#define Fl_Menu_Button_H
+
+#include "Fl_Menu_.H"
+
+/**
+  This is a button that when pushed pops up a menu (or hierarchy of
+  menus) defined by an array of 
+  Fl_Menu_Item objects.
+  <P ALIGN=CENTER>\image html  menu_button.gif</P>
+  \image latex  menu_button.eps " menu_button" width=5cm
+  <P>Normally any mouse button will pop up a menu and it is lined up
+  below the button as shown in the picture.  However an Fl_Menu_Button
+  may also control a pop-up menu.  This is done by setting the type()
+  , see below. </P>
+  <P>The menu will also pop up in response to shortcuts indicated by
+  putting a '&' character in the label(). </P>
+  <P>Typing the shortcut() of any of the menu items will cause
+  callbacks exactly the same as when you pick the item with the mouse.
+  The '&' character in menu item names are only looked at when the menu is
+  popped up, however. </P>
+  <P>When the user picks an item off the menu, the item's callback is
+  done with the menu_button as the fltk3::Widget* argument.  If the
+  item does not have a callback the menu_button's callback is done
+  instead.
+*/
+class FL_EXPORT Fl_Menu_Button : public Fl_Menu_ {
+protected:
+  void draw();
+public:
+  // values for type:
+  enum {POPUP1 = 1, POPUP2, POPUP12, POPUP3, POPUP13, POPUP23, POPUP123};
+  int handle(int);
+  const Fl_Menu_Item* popup();
+  Fl_Menu_Button(int,int,int,int,const char * =0);
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Menu_Button.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Menu_Item.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Menu_Item.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Menu_Item.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,418 @@
+//
+// "$Id: Fl_Menu_Item.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// Menu item header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+#ifndef Fl_Menu_Item_H
+#define Fl_Menu_Item_H
+
+#  include "Fl_Widget.H"
+#  include "Fl_Image.H"
+
+#  if defined(__APPLE__) && defined(check)
+#    undef check
+#  endif
+
+enum { // values for flags:
+  FL_MENU_INACTIVE = 1,		///< Deactivate menu item (gray out)
+  FL_MENU_TOGGLE= 2,		///< Item is a checkbox toggle (shows checkbox for on/off state)
+  FL_MENU_VALUE = 4,		///< The on/off state for checkbox/radio buttons (if set, state is 'on')
+  FL_MENU_RADIO = 8,		///< Item is a radio button (one checkbox of many can be on)
+  FL_MENU_INVISIBLE = 0x10,	///< Item will not show up (shortcut will work)
+  FL_SUBMENU_POINTER = 0x20,	///< Indicates user_data() is a pointer to another menu array
+  FL_SUBMENU = 0x40,		///< This item is a submenu to other items
+  FL_MENU_DIVIDER = 0x80,	///< Creates divider line below this item. Also ends a group of radio buttons.
+  FL_MENU_HORIZONTAL = 0x100	///< ??? -- reserved
+};
+
+extern FL_EXPORT Fl_Shortcut fl_old_shortcut(const char*);
+
+class Fl_Menu_;
+
+/**
+  The Fl_Menu_Item structure defines a single menu item that
+  is used by the Fl_Menu_ class.  
+  \code
+  struct Fl_Menu_Item {
+   const char*	        text; // label()
+   ulong		shortcut_;
+   Fl_Callback*	        callback_;
+   void*		user_data_;
+   int		        flags;
+   uchar		labeltype_;
+   uchar		labelfont_;
+   uchar		labelsize_;
+   uchar		labelcolor_;
+  };
+  
+  enum { // values for flags:
+   FL_MENU_INACTIVE	= 1,      // Deactivate menu item (gray out)
+   FL_MENU_TOGGLE	= 2,      // Item is a checkbox toggle (shows checkbox for on/off state)
+   FL_MENU_VALUE	= 4,      // The on/off state for checkbox/radio buttons (if set, state is 'on')
+   FL_MENU_RADIO	= 8,      // Item is a radio button (one checkbox of many can be on)
+   FL_MENU_INVISIBLE	= 0x10,   // Item will not show up (shortcut will work)
+   FL_SUBMENU_POINTER	= 0x20,   // Indicates user_data() is a pointer to another menu array
+   FL_SUBMENU		= 0x40,   // This item is a submenu to other items
+   FL_MENU_DIVIDER	= 0x80,   // Creates divider line below this item. Also ends a group of radio buttons.
+   FL_MENU_HORIZONTAL	= 0x100   // ??? -- reserved
+  };
+  \endcode
+  Typically menu items are statically defined; for example:
+  \code
+  Fl_Menu_Item popup[] = {
+   {"&alpha",   FL_ALT+'a', the_cb, (void*)1},
+   {"&beta",    FL_ALT+'b', the_cb, (void*)2},
+   {"gamma",    FL_ALT+'c', the_cb, (void*)3, FL_MENU_DIVIDER},
+   {"&strange",  0,   strange_cb},
+   {"&charm",    0,   charm_cb},
+   {"&truth",    0,   truth_cb},
+   {"b&eauty",   0,   beauty_cb},
+   {"sub&menu",  0,   0, 0, FL_SUBMENU},
+   {"one"},
+   {"two"},
+   {"three"},
+   {0},
+   {"inactive", FL_ALT+'i', 0, 0, FL_MENU_INACTIVE|FL_MENU_DIVIDER},
+   {"invisible",FL_ALT+'i', 0, 0, FL_MENU_INVISIBLE},
+   {"check",    FL_ALT+'i', 0, 0, FL_MENU_TOGGLE|FL_MENU_VALUE},
+   {"box",      FL_ALT+'i', 0, 0, FL_MENU_TOGGLE},
+   {0}};
+  \endcode
+  produces:
+
+  \image html   menu.gif
+  \image latex  menu.eps "menu" width=10cm
+
+  A submenu title is identified by the bit FL_SUBMENU in the 
+  flags field, and ends with a label() that is NULL.
+  You can nest menus to any depth.  A pointer to the first item in the
+  submenu can be treated as an Fl_Menu array itself.  It is also
+  possible to make separate submenu arrays with FL_SUBMENU_POINTER flags.
+
+  You should use the method functions to access structure members and
+  not access them directly to avoid compatibility problems with future
+  releases of FLTK.
+*/
+struct FL_EXPORT Fl_Menu_Item {
+  const char *text;	    ///< menu item text, returned by label()
+  int shortcut_;	    ///< menu item shortcut
+  Fl_Callback *callback_;   ///< menu item callback
+  void *user_data_;	    ///< menu item user_data for 3rd party apps
+  int flags;		    ///< menu item flags like FL_MENU_TOGGLE, FL_MENU_RADIO
+  uchar labeltype_;	    ///< how the menu item text looks like
+  Fl_Font labelfont_;	    ///< which font for this menu item text
+  Fl_Fontsize labelsize_;   ///< size of menu item text
+  Fl_Color labelcolor_;	    ///< menu item text color 
+
+  // advance N items, skipping submenus:
+  const Fl_Menu_Item *next(int=1) const;
+
+  /**
+    Advances a pointer by n items through a menu array, skipping
+    the contents of submenus and invisible items. There are two calls so
+    that you can advance through const and non-const data.
+  */
+  Fl_Menu_Item *next(int i=1) {
+    return (Fl_Menu_Item*)(((const Fl_Menu_Item*)this)->next(i));}
+
+  /** Returns the first menu item, same as next(0). */
+  const Fl_Menu_Item *first() const { return next(0); }
+
+  /** Returns the first menu item, same as next(0). */
+  Fl_Menu_Item *first() { return next(0); }
+
+  // methods on menu items:
+  /**
+    Returns the title of the item.
+    A NULL here indicates the end of the menu (or of a submenu).
+    A '&' in the item will print an underscore under the next letter,
+    and if the menu is popped up that letter will be a "shortcut" to pick 
+    that item.  To get a real '&' put two in a row.
+  */
+  const char* label() const {return text;}
+
+  /**    See const char* Fl_Menu_Item::label() const   */
+  void label(const char* a) {text=a;}
+
+  /**    See const char* Fl_Menu_Item::label() const   */
+  void label(Fl_Labeltype a,const char* b) {labeltype_ = a; text = b;}
+
+  /**
+    A labeltype identifies a routine that draws the label of the
+    widget.  This can be used for special effects such as emboss, or to use
+    the label() pointer as another form of data such as a bitmap.
+    The value FL_NORMAL_LABEL prints the label as text.
+  */
+  Fl_Labeltype labeltype() const {return (Fl_Labeltype)labeltype_;}
+
+  /**
+    A labeltype identifies a routine that draws the label of the
+    widget.  This can be used for special effects such as emboss, or to use
+    the label() pointer as another form of data such as a bitmap.
+    The value FL_NORMAL_LABEL prints the label as text.
+  */
+  void labeltype(Fl_Labeltype a) {labeltype_ = a;}
+
+  /**
+    This color is passed to the labeltype routine, and is typically the
+    color of the label text.  This defaults to FL_BLACK.  If this
+    color is not black fltk will <I>not</I> use overlay bitplanes to draw
+    the menu - this is so that images put in the menu draw correctly.
+  */
+  Fl_Color labelcolor() const {return labelcolor_;}
+
+  /** See Fl_Color Fl_Menu_Item::labelcolor() const */
+  void labelcolor(Fl_Color a) {labelcolor_ = a;}
+  /**
+    Fonts are identified by small 8-bit indexes into a table. See the 
+    enumeration list for predefined fonts. The default value is a
+    Helvetica font. The function fltk3::set_font() can define new fonts.
+  */
+  Fl_Font labelfont() const {return labelfont_;}
+
+  /**
+    Fonts are identified by small 8-bit indexes into a table. See the 
+    enumeration list for predefined fonts. The default value is a
+    Helvetica font.  The function fltk3::set_font() can define new fonts.
+  */
+  void labelfont(Fl_Font a) {labelfont_ = a;}
+
+  /** Gets the label font pixel size/height.*/
+  Fl_Fontsize labelsize() const {return labelsize_;}
+
+  /** Sets the label font pixel size/height.*/
+  void labelsize(Fl_Fontsize a) {labelsize_ = a;}
+
+  /**
+     Each item has space for a callback function and an argument for that
+     function. Due to back compatibility, the Fl_Menu_Item itself
+     is not passed to the callback, instead you have to get it by calling 
+     ((Fl_Menu_*)w)->mvalue() where w is the widget argument.
+  */
+  Fl_Callback_p callback() const {return callback_;}
+
+  /** See Fl_Callback_p Fl_MenuItem::callback() const */
+  void callback(Fl_Callback* c, void* p) {callback_=c; user_data_=p;}
+
+  /** See Fl_Callback_p Fl_MenuItem::callback() const */
+  void callback(Fl_Callback* c) {callback_=c;}
+
+  /** See Fl_Callback_p Fl_MenuItem::callback() const */
+  void callback(Fl_Callback0*c) {callback_=(Fl_Callback*)c;}
+
+  /** See Fl_Callback_p Fl_MenuItem::callback() const */
+  void callback(Fl_Callback1*c, long p=0) {callback_=(Fl_Callback*)c; user_data_=(void*)p;}
+
+  /**
+    Get or set the user_data argument that is sent to the
+    callback function.
+  */
+  void* user_data() const {return user_data_;}
+  /**
+    Get or set the user_data argument that is sent to the
+    callback function.
+  */
+  void user_data(void* v) {user_data_ = v;}
+  /**
+    For convenience you can also define the callback as taking a long
+    argument.  This is implemented by casting this to a Fl_Callback
+    and casting the long to a void* and may not be
+    portable to some machines.
+  */
+  long argument() const {return (long)user_data_;}
+  /**
+    For convenience you can also define the callback as taking a long
+    argument.  This is implemented by casting this to a Fl_Callback
+    and casting the long to a void* and may not be
+    portable to some machines.
+  */
+  void argument(long v) {user_data_ = (void*)v;}
+
+  /** Gets what key combination shortcut will trigger the menu item. */
+  int shortcut() const {return shortcut_;}
+
+  /**
+    Sets exactly what key combination will trigger the menu item.  The
+    value is a logical 'or' of a key and a set of shift flags, for instance 
+    FL_ALT+'a' or FL_ALT+FL_F+10 or just 'a'.  A value of
+    zero disables the shortcut.
+
+    The key can be any value returned by fltk3::event_key(), but will usually 
+    be an ASCII letter. Use a lower-case letter unless you require the shift 
+    key to be held down.
+
+    The shift flags can be any set of values accepted by fltk3::event_state().
+    If the bit is on that shift key must be pushed.  Meta, Alt, Ctrl, 
+    and Shift must be off if they are not in the shift flags (zero for the 
+    other bits indicates a "don't care" setting).
+  */
+  void shortcut(int s) {shortcut_ = s;}
+  /**
+    Returns true if either FL_SUBMENU or FL_SUBMENU_POINTER
+    is on in the flags. FL_SUBMENU indicates an embedded submenu
+    that goes from the next item through the next one with a NULL
+    label(). FL_SUBMENU_POINTER indicates that user_data()
+    is a pointer to another menu array.
+  */
+  int submenu() const {return flags&(FL_SUBMENU|FL_SUBMENU_POINTER);}
+  /**
+    Returns true if a checkbox will be drawn next to this item.  This is
+    true if FL_MENU_TOGGLE or FL_MENU_RADIO is set in the flags.
+  */
+  int checkbox() const {return flags&FL_MENU_TOGGLE;}
+  /**
+    Returns true if this item is a radio item.  When a radio button is
+    selected all "adjacent" radio buttons are turned off.  A set of radio
+    items is delimited by an item that has radio() false, or by an
+    item with FL_MENU_DIVIDER turned on.
+  */
+  int radio() const {return flags&FL_MENU_RADIO;}
+  /** Returns the current value of the check or radio item. */
+  int value() const {return flags&FL_MENU_VALUE;}
+  /**
+    Turns the check or radio item "on" for the menu item. Note that this
+    does not turn off any adjacent radio items like set_only() does.
+  */
+  void set() {flags |= FL_MENU_VALUE;}
+
+  /** Turns the check or radio item "off" for the menu item. */
+  void clear() {flags &= ~FL_MENU_VALUE;}
+
+  void setonly();
+
+  /** Gets the visibility of an item. */
+  int visible() const {return !(flags&FL_MENU_INVISIBLE);}
+
+  /** Makes an item visible in the menu. */
+  void show() {flags &= ~FL_MENU_INVISIBLE;}
+
+  /** Hides an item in the menu. */
+  void hide() {flags |= FL_MENU_INVISIBLE;}
+
+  /** Gets whether or not the item can be picked. */
+  int active() const {return !(flags&FL_MENU_INACTIVE);}
+
+  /** Allows a menu item to be picked. */
+  void activate() {flags &= ~FL_MENU_INACTIVE;}
+  /**
+    Prevents a menu item from being picked. Note that this will also cause
+    the menu item to appear grayed-out.
+  */
+  void deactivate() {flags |= FL_MENU_INACTIVE;}
+  /** Returns non 0 if FL_INACTIVE and FL_INVISIBLE are cleared, 0 otherwise. */
+  int activevisible() const {return !(flags & (FL_MENU_INACTIVE|FL_MENU_INVISIBLE));}
+
+  // compatibility for FLUID so it can set the image of a menu item...
+
+  /** compatibility api for FLUID, same as a->label(this) */
+  void image(Fl_Image* a) {a->label(this);}
+
+  /** compatibility api for FLUID, same as a.label(this) */
+  void image(Fl_Image& a) {a.label(this);}
+
+  // used by menubar:
+  int measure(int* h, const Fl_Menu_*) const;
+  void draw(int x, int y, int w, int h, const Fl_Menu_*, int t=0) const;
+
+  // popup menus without using an Fl_Menu_ widget:
+  const Fl_Menu_Item* popup(
+    int X, int Y,
+    const char *title = 0,
+    const Fl_Menu_Item* picked=0,
+    const Fl_Menu_* = 0) const;
+  const Fl_Menu_Item* pulldown(
+    int X, int Y, int W, int H,
+    const Fl_Menu_Item* picked = 0,
+    const Fl_Menu_* = 0,
+    const Fl_Menu_Item* title = 0,
+    int menubar=0) const;
+  const Fl_Menu_Item* test_shortcut() const;
+  const Fl_Menu_Item* find_shortcut(int *ip=0) const;
+
+  /**
+    Calls the Fl_Menu_Item item's callback, and provides the 
+    fltk3::Widget argument (and optionally overrides the user_data()
+    argument). You must first check that callback() is non-zero
+    before calling this.
+  */
+  void do_callback(fltk3::Widget* o) const {callback_(o, user_data_);}
+
+  /**
+    Calls the Fl_Menu_Item item's callback, and provides the 
+    fltk3::Widget argument (and optionally overrides the user_data()
+    argument). You must first check that callback() is non-zero
+    before calling this.
+  */
+  void do_callback(fltk3::Widget* o,void* arg) const {callback_(o, arg);}
+
+  /**
+    Calls the Fl_Menu_Item item's callback, and provides the 
+    fltk3::Widget argument (and optionally overrides the user_data()
+    argument).  You must first check that callback() is non-zero
+    before calling this.
+  */
+  void do_callback(fltk3::Widget* o,long arg) const {callback_(o, (void*)arg);}
+
+  // back-compatibility, do not use:
+
+  /** back compatibility only \deprecated. */
+  int checked() const {return flags&FL_MENU_VALUE;}
+
+  /** back compatibility only \deprecated. */
+  void check() {flags |= FL_MENU_VALUE;}
+
+  /** back compatibility only \deprecated. */
+  void uncheck() {flags &= ~FL_MENU_VALUE;}
+
+  int add(const char*, int shortcut, Fl_Callback*, void* =0, int = 0);
+
+  /** See int add(const char*, int shortcut, Fl_Callback*, void*, int) */
+  int add(const char*a, const char* b, Fl_Callback* c,
+	  void* d = 0, int e = 0) {
+    return add(a,fl_old_shortcut(b),c,d,e);}
+
+  int size() const ;
+};
+
+typedef Fl_Menu_Item Fl_Menu; // back compatibility
+
+enum {	// back-compatibility enum:
+  FL_PUP_NONE	= 0,
+  FL_PUP_GREY	= FL_MENU_INACTIVE,
+  FL_PUP_GRAY	= FL_MENU_INACTIVE,
+  FL_MENU_BOX	= FL_MENU_TOGGLE,
+  FL_PUP_BOX	= FL_MENU_TOGGLE,
+  FL_MENU_CHECK	= FL_MENU_VALUE,
+  FL_PUP_CHECK	= FL_MENU_VALUE,
+  FL_PUP_RADIO	= FL_MENU_RADIO,
+  FL_PUP_INVISIBLE = FL_MENU_INVISIBLE,
+  FL_PUP_SUBMENU = FL_SUBMENU_POINTER
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Menu_Item.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Menu_Window.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Menu_Window.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Menu_Window.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,68 @@
+//
+// "$Id: Fl_Menu_Window.H 6909 2009-09-28 14:41:43Z matt $"
+//
+// Menu window header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Menu_Window widget . */
+
+#ifndef Fl_Menu_Window_H
+#define Fl_Menu_Window_H
+
+#include "Fl_Single_Window.H"
+
+/**
+  The Fl_Menu_Window widget is a window type used for menus. By
+  default the window is drawn in the hardware overlay planes if they are
+  available so that the menu don't force the rest of the window to
+  redraw.
+*/
+class FL_EXPORT Fl_Menu_Window : public Fl_Single_Window {
+public:
+  void show();
+  void erase();
+  void flush();
+  void hide();
+  /** Tells if hardware overlay mode is set */
+  unsigned int overlay() {return !(flags()&NO_OVERLAY);}
+  /** Tells FLTK to use hardware overlay planes if they are available.  */
+  void set_overlay() {clear_flag(NO_OVERLAY);}
+  /** Tells FLTK to use normal drawing planes instead of overlay planes.
+      This is usually necessary if your menu contains multi-color pixmaps. */
+  void clear_overlay() {set_flag(NO_OVERLAY);}
+  ~Fl_Menu_Window();
+  /** Creates a new Fl_Menu_Window widget using the given size, and label string. */
+  Fl_Menu_Window(int W, int H, const char *l = 0)
+    : Fl_Single_Window(W,H,l) { image(0); }
+  /** Creates a new Fl_Menu_Window widget using the given position, size, and label string. */
+  Fl_Menu_Window(int X, int Y, int W, int H, const char *l = 0)
+    : Fl_Single_Window(X,Y,W,H,l) { image(0); }
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Menu_Window.H 6909 2009-09-28 14:41:43Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Multi_Browser.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Multi_Browser.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Multi_Browser.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,62 @@
+//
+// "$Id: Fl_Multi_Browser.H 6614 2009-01-01 16:11:32Z matt $"
+//
+// Multi browser header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Multi_Browser widget . */
+
+#ifndef Fl_Multi_Browser_H
+#define Fl_Multi_Browser_H
+
+#include "Fl_Browser.H"
+
+/**
+  The Fl_Multi_Browser class is a subclass of Fl_Browser
+  which lets the user select any set of the lines.  The user interface
+  is Macintosh style: clicking an item turns off all the others and
+  selects that one, dragging selects all the items the mouse moves over,
+  and shift + click toggles the items. This is different then how forms
+  did it.  Normally the callback is done when the user releases the
+  mouse, but you can change this with when().
+  <P>See Fl_Browser for methods to add and remove lines from the browser.
+*/
+class Fl_Multi_Browser : public Fl_Browser {
+public:
+  /**
+      Creates a new Fl_Multi_Browser widget using the given
+    position, size, and label string. The default boxtype is FL_DOWN_BOX.
+    The constructor specializes Fl_Browser() by setting the type to FL_MULTI_BROWSER.
+    The destructor destroys the widget and frees all memory that has been allocated.
+  */
+    Fl_Multi_Browser(int X,int Y,int W,int H,const char *L=0)
+	: Fl_Browser(X,Y,W,H,L) {type(FL_MULTI_BROWSER);}
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Multi_Browser.H 6614 2009-01-01 16:11:32Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Multi_Label.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Multi_Label.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Multi_Label.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,47 @@
+//
+// "$Id: Fl_Multi_Label.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// Multi-label header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+#ifndef Fl_Multi_Label_H
+#define Fl_Multi_Label_H
+
+class fltk3::Widget;
+struct Fl_Menu_Item;
+
+struct FL_EXPORT Fl_Multi_Label {
+  const char* labela;
+  const char* labelb;
+  uchar typea;
+  uchar typeb;
+  void label(fltk3::Widget*);
+  void label(Fl_Menu_Item*);
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Multi_Label.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Multiline_Input.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Multiline_Input.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Multiline_Input.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,66 @@
+//
+// "$Id: Fl_Multiline_Input.H 6889 2009-09-19 22:09:00Z greg.ercolano $"
+//
+// Multiline input header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Multiline_Input widget . */
+
+
+#ifndef Fl_Multiline_Input_H
+#define Fl_Multiline_Input_H
+
+#include "Fl_Input.H"
+
+/**
+  This input field displays '\n' characters as new lines rather than ^J,
+  and accepts the Return, Tab, and up and down arrow keys.  This is for
+  editing multiline text.
+  <P>
+  This is far from the nirvana of text editors, and is probably only
+  good for small bits of text, 10 lines at most. Note that this widget
+  does not support scrollbars or per-character color control.
+  <P>
+  If you are presenting large amounts of text and need scrollbars
+  or full color control of characters, you probably want Fl_Text_Editor
+  instead.
+  <P>
+*/
+class Fl_Multiline_Input : public Fl_Input {
+public:
+  /**
+    Creates a new Fl_Multiline_Input widget using the given
+    position, size, and label string. The default boxtype is FL_DOWN_BOX.
+    <P>Inherited destructor destroys the widget and any value associated with it.
+  */
+  Fl_Multiline_Input(int X,int Y,int W,int H,const char *l = 0)
+    : Fl_Input(X,Y,W,H,l) {type(FL_MULTILINE_INPUT);}
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Multiline_Input.H 6889 2009-09-19 22:09:00Z greg.ercolano $".
+//

Added: branches/branch-3.0/fltk3/Fl_Multiline_Output.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Multiline_Output.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Multiline_Output.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,64 @@
+//
+// "$Id: Fl_Multiline_Output.H 6889 2009-09-19 22:09:00Z greg.ercolano $"
+//
+// Multi line output header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Multiline_Output widget . */
+
+#ifndef Fl_Multiline_Output_H
+#define Fl_Multiline_Output_H
+
+#include "Fl_Output.H"
+
+/**
+  This widget is a subclass of Fl_Output that displays multiple
+  lines of text. It also displays tab characters as whitespace to the
+  next column.
+  <P>
+  Note that this widget does not support scrollbars, or per-character
+  color control.
+  <P>
+  If you are presenting large amounts of read-only text 
+  and need scrollbars, or full color control of characters,
+  then use Fl_Text_Display. If you want to display HTML text,
+  use Fl_Help_View.
+*/
+class Fl_Multiline_Output : public Fl_Output {
+public:
+  /**
+    Creates a new Fl_Multiline_Output widget using the given
+    position, size, and label string. The default boxtype is FL_DOWN_BOX
+    <P> Inherited destructor destroys the widget and any value associated with it.
+  */
+  Fl_Multiline_Output(int X,int Y,int W,int H,const char *l = 0)
+    : Fl_Output(X,Y,W,H,l) {type(FL_MULTILINE_OUTPUT);}
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Multiline_Output.H 6889 2009-09-19 22:09:00Z greg.ercolano $".
+//

Added: branches/branch-3.0/fltk3/Fl_Native_File_Chooser.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Native_File_Chooser.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Native_File_Chooser.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,51 @@
+//
+// "$Id: Fl_Native_File_Chooser.H 7003 2010-01-14 20:47:59Z greg.ercolano $"
+//
+// FLTK native OS file chooser widget
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+// Copyright 2004 Greg Ercolano.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+#ifndef FL_NATIVE_FILE_CHOOSER_H
+#define FL_NATIVE_FILE_CHOOSER_H
+
+// Use Windows' chooser
+#ifdef WIN32
+#include <FL/Fl_Native_File_Chooser_WIN32.H>
+#endif
+
+// Use Apple's chooser
+#ifdef __APPLE__
+#include <FL/Fl_Native_File_Chooser_MAC.H>
+#endif
+
+// All else falls back to FLTK's own chooser
+#if ! defined(__APPLE__) && !defined(WIN32)
+#include <FL/Fl_Native_File_Chooser_FLTK.H>
+#endif
+
+#endif /*FL_NATIVE_FILE_CHOOSER_H*/
+
+//
+// End of "$Id: Fl_Native_File_Chooser.H 7003 2010-01-14 20:47:59Z greg.ercolano $".
+//

Added: branches/branch-3.0/fltk3/Fl_Native_File_Chooser_FLTK.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Native_File_Chooser_FLTK.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Native_File_Chooser_FLTK.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,142 @@
+//
+// "$Id: Fl_Native_File_Chooser_FLTK.H 7007 2010-01-14 23:08:06Z greg.ercolano $"
+//
+// FLTK native OS file chooser widget
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+// Copyright 2005 by Nathan Vander Wilt.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Native_File_Chooser widget. */
+
+#include <FL/Fl_File_Chooser.H>
+#include <unistd.h>		// _POSIX_NAME_MAX
+
+/**
+  This class lets an FLTK application easily and consistently access 
+  the operating system's native file chooser. Some operating systems 
+  have very complex and specific file choosers that many users want 
+  access to specifically, instead of FLTK's default file chooser(s). 
+  <P>
+  In cases where there is no native file browser, FLTK's own file browser
+  is used instead.
+  <P>
+  \code
+  // Create and post the local native file chooser
+  #include <FL/Fl_Native_File_Chooser.H>
+  [..]
+  Fl_Native_File_Chooser fnfc;
+  fnfc.title("Pick a file");
+  fnfc.type(Fl_Native_File_Chooser::BROWSE_FILE);
+  fnfc.filter("Text\t*.txt\n"
+              "C Files\t*.{cxx,h,c}");
+  fnfc.directory("/var/tmp");
+  // Show native chooser
+  switch ( fnfc.show() ) {
+    case -1: printf("ERROR: %s\n", fnfc.errmsg());    break;  // ERROR
+    case  1: printf("CANCEL\n");                      break;  // CANCEL
+    default: printf("PICKED: %s\n", fnfc.filename()); break;  // FILE CHOSEN
+  }
+  \endcode
+  <P>
+  <B>Platform Specific Caveats</B>
+  <P>
+  - Under X windows, it's best if you call Fl_File_Icon::load_system_icons()
+    at the start of main(), to enable the nicer looking file browser widgets.
+  - Some operating systems support certain OS specific options; see 
+    Fl_Native_File_Chooser::options() for a list.
+*/
+class Fl_Native_File_Chooser {
+public:
+  enum Type {
+    BROWSE_FILE = 0,			///< browse files (lets user choose one file)
+    BROWSE_DIRECTORY,			///< browse directories (lets user choose one directory)
+    BROWSE_MULTI_FILE,			///< browse files (lets user choose multiple files)
+    BROWSE_MULTI_DIRECTORY,		///< browse directories (lets user choose multiple directories)
+    BROWSE_SAVE_FILE,			///< browse to save a file
+    BROWSE_SAVE_DIRECTORY		///< browse to save a directory
+  };
+  enum Option {
+    NO_OPTIONS     = 0x0000,		///< no options enabled
+    SAVEAS_CONFIRM = 0x0001,		///< Show native 'Save As' overwrite confirm dialog (if supported)
+    NEW_FOLDER     = 0x0002,		///< Show 'New Folder' icon (if supported)
+    PREVIEW        = 0x0004,		///< enable preview mode
+  };
+private:
+  int   _btype;			// kind-of browser to show()
+  int   _options;		// general options
+  int   _nfilters;
+  char *_filter;		// user supplied filter
+  char *_parsedfilt;		// parsed filter
+  int   _filtvalue;		// selected filter
+  char *_preset_file;
+  char *_prevvalue;		// Returned filename
+  char *_directory;
+  char *_errmsg;		// error message
+  char *_old_dir;
+  Fl_File_Chooser *_file_chooser;
+
+  // added by MG
+  Fl_File_Browser *my_fileList;
+  Fl_Check_Button *show_hidden;
+  int prev_filtervalue;
+  static void show_hidden_cb(Fl_Check_Button *o, void *data);
+  static void remove_hidden_files(Fl_File_Browser *my_fileList);
+
+  // Private methods
+  void errmsg(const char *msg);
+  int type_fl_file(int);
+  void parse_filter();
+  void keeplocation();
+  int exist_dialog();
+
+public:
+  Fl_Native_File_Chooser(int val=BROWSE_FILE);
+  ~Fl_Native_File_Chooser();
+
+  // Public methods
+  void type(int);
+  int type() const;
+  void options(int);
+  int options() const;
+  int count() const;
+  const char *filename() const;
+  const char *filename(int i) const;
+  void directory(const char *val);
+  const char *directory() const;
+  void title(const char *);
+  const char* title() const;
+  const char *filter() const;
+  void filter(const char *);
+  int filters() const;
+  void filter_value(int i);
+  int filter_value() const;
+  void preset_file(const char*);
+  const char* preset_file() const;
+  const char *errmsg() const;
+  int show();
+};
+
+//
+// End of "$Id: Fl_Native_File_Chooser_FLTK.H 7007 2010-01-14 23:08:06Z greg.ercolano $".
+//

Added: branches/branch-3.0/fltk3/Fl_Native_File_Chooser_MAC.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Native_File_Chooser_MAC.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Native_File_Chooser_MAC.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,122 @@
+//
+// "$Id: Fl_Native_File_Chooser_MAC.H 7354 2010-03-29 11:07:29Z matt $"
+//
+// FLTK native OS file chooser widget
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+// Copyright 2004 Greg Ercolano.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+#ifndef FL_DOXYGEN		// PREVENT DOXYGEN'S USE OF THIS FILE
+
+// OSX-SPECIFIC NATIVE BROWSER
+#include <Carbon/Carbon.h>
+#include <config.h>
+
+#undef check // necessary for use of fltk3::check()
+
+#include <fltk3/filename.H>
+#define MAXFILTERS	80
+
+class Fl_Native_File_Chooser {
+public:
+  enum Type {
+    BROWSE_FILE = 0,
+    BROWSE_DIRECTORY,
+    BROWSE_MULTI_FILE,
+    BROWSE_MULTI_DIRECTORY,
+    BROWSE_SAVE_FILE,
+    BROWSE_SAVE_DIRECTORY
+  };
+  enum Option {
+    NO_OPTIONS     = 0x0000,		// no options enabled
+    SAVEAS_CONFIRM = 0x0001,		// Show native 'Save As' overwrite confirm dialog (if supported)
+    NEW_FOLDER     = 0x0002,		// Show 'New Folder' icon (if supported)
+    PREVIEW        = 0x0004,		// enable preview mode
+  };
+private:
+  int             _btype;		// kind-of browser to show()
+  int             _options;		// general options
+  void 	         *_panel;
+  char          **_pathnames;		// array of pathnames
+  int             _tpathnames;	        // total pathnames
+  char           *_directory;		// default pathname to use
+  char           *_title;		// title for window
+  char           *_preset_file;	        // the 'save as' filename
+
+  char           *_filter;		// user-side search filter, eg:
+					// C Files\t*.[ch]\nText Files\t*.txt"
+
+  char           *_filt_names;		// filter names (tab delimited)
+					// eg. "C Files\tText Files"
+
+  char           *_filt_patt[MAXFILTERS];
+					// array of filter patterns, eg:
+					//     _filt_patt[0]="*.{cxx,h}"
+					//     _filt_patt[1]="*.txt"
+
+  int             _filt_total;		// parse_filter() # of filters loaded
+  int             _filt_value;		// index of the selected filter
+  char           *_errmsg;		// error message
+
+  // Private methods
+  void errmsg(const char *msg);
+  void clear_pathnames();
+  void set_single_pathname(const char *s);
+  int get_saveas_basename(void);
+  void clear_filters();
+  void add_filter(const char *, const char *);
+  void parse_filter(const char *from);
+  int post();
+
+public:
+  Fl_Native_File_Chooser(int val = BROWSE_FILE);
+  ~Fl_Native_File_Chooser();
+
+  // Public methods
+  void type(int);
+  int type() const;
+  void options(int);
+  int options() const;
+  int count() const;
+  const char *filename() const;
+  const char *filename(int i) const;
+  void directory(const char *);
+  const char *directory() const;
+  void title(const char *);
+  const char *title() const;
+  const char *filter() const;
+  void filter(const char *);
+  void filter_value(int i) { _filt_value = i; }
+  int filter_value() { return(_filt_value); }
+  int filters() { return(_filt_total); }
+  void preset_file(const char *);
+  const char *preset_file();
+  const char *errmsg() const;
+  int show();
+};
+
+#endif /*!FL_DOXYGEN*/
+
+//
+// End of "$Id: Fl_Native_File_Chooser_MAC.H 7354 2010-03-29 11:07:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Native_File_Chooser_WIN32.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Native_File_Chooser_WIN32.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Native_File_Chooser_WIN32.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,120 @@
+//
+// "$Id: Fl_Native_File_Chooser_WIN32.H 7003 2010-01-14 20:47:59Z greg.ercolano $"
+//
+// FLTK native OS file chooser widget
+//
+// Copyright 1998-2005 by Bill Spitzak and others.
+// Copyright 2004 by Greg Ercolano.
+// April 2005 - API changes, improved filter processing by Nathan Vander Wilt
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to:
+//
+//     http://www.fltk.org/str.php
+//
+
+#ifndef FL_DOXYGEN		// PREVENT DOXYGEN'S USE OF THIS FILE
+
+// #define _WIN32_WINNT	0x0501	// needed for OPENFILENAME's 'FlagsEx'
+#include <stdio.h>
+#include <stdlib.h>		// malloc
+#include <windows.h>
+#include <commdlg.h>		// OPENFILENAME, GetOpenFileName()
+#include <shlobj.h>		// BROWSEINFO, SHBrowseForFolder()
+
+class Fl_Native_File_Chooser {
+public:
+  enum Type {
+    BROWSE_FILE = 0,
+    BROWSE_DIRECTORY,
+    BROWSE_MULTI_FILE,
+    BROWSE_MULTI_DIRECTORY,
+    BROWSE_SAVE_FILE,
+    BROWSE_SAVE_DIRECTORY
+  };
+  enum Option {
+    NO_OPTIONS     = 0x0000,	// no options enabled
+    SAVEAS_CONFIRM = 0x0001,	// Show native 'Save As' overwrite confirm dialog (if supported)
+    NEW_FOLDER     = 0x0002,	// Show 'New Folder' icon (if supported)
+    PREVIEW        = 0x0004,	// enable preview mode
+  };
+private:
+  int  _btype;			// kind-of browser to show()
+  int  _options;		// general options
+  OPENFILENAMEW _ofn;		// GetOpenFileName() & GetSaveFileName() struct
+  BROWSEINFO   _binf;		// SHBrowseForFolder() struct
+  char  **_pathnames;		// array of pathnames
+  int     _tpathnames;		// total pathnames
+  char   *_directory;		// default pathname to use
+  char   *_title;		// title for window
+  char   *_filter;		// user-side search filter
+  char   *_parsedfilt;		// filter parsed for Windows dialog
+  int     _nfilters;		// number of filters parse_filter counted
+  char   *_preset_file;		// the file to preselect
+  char   *_errmsg;		// error message
+
+  // Private methods
+  void errmsg(const char *msg);
+
+  void clear_pathnames();
+  void set_single_pathname(const char *s);
+  void add_pathname(const char *s);
+
+  void FreePIDL(ITEMIDLIST *pidl);
+  void ClearOFN();
+  void ClearBINF();
+  void Win2Unix(char *s);
+  void Unix2Win(char *s);
+  int showfile();
+  static int CALLBACK Dir_CB(HWND win, UINT msg, LPARAM param, LPARAM data);
+  int showdir();
+
+  void parse_filter(const char *);
+  void clear_filters();
+  void add_filter(const char *, const char *);
+
+public:
+  Fl_Native_File_Chooser(int val = BROWSE_FILE);
+  ~Fl_Native_File_Chooser();
+
+  // Public methods
+  void type(int val);
+  int type() const;
+  void options(int);
+  int options() const;
+  int count() const;
+  const char *filename() const;
+  const char *filename(int i) const;
+  void directory(const char *val);
+  const char *directory() const;
+  void title(const char *val);
+  const char *title() const;
+  const char *filter() const;
+  void filter(const char *val);
+  int filters() const { return _nfilters; }
+  void filter_value(int i);
+  int filter_value() const;
+  void preset_file(const char *);
+  const char *preset_file() const;
+  const char *errmsg() const;
+  int show();
+};
+#endif /*!FL_DOXYGEN*/
+
+//
+// End of "$Id: Fl_Native_File_Chooser_WIN32.H 7003 2010-01-14 20:47:59Z greg.ercolano $".
+//

Added: branches/branch-3.0/fltk3/Fl_Nice_Slider.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Nice_Slider.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Nice_Slider.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,46 @@
+//
+// "$Id: Fl_Nice_Slider.H 6614 2009-01-01 16:11:32Z matt $"
+//
+// "Nice" slider header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Nice_Slider widget . */
+
+#ifndef Fl_Nice_Slider_H
+#define Fl_Nice_Slider_H
+
+#include "Fl_Slider.H"
+
+class Fl_Nice_Slider : public Fl_Slider {
+public:
+    Fl_Nice_Slider(int x,int y,int w,int h,const char *l=0)
+	: Fl_Slider(x,y,w,h,l) {type(FL_VERT_NICE_SLIDER); box(FL_FLAT_BOX);}
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Nice_Slider.H 6614 2009-01-01 16:11:32Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Object.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Object.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Object.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,36 @@
+//
+// "$Id: Fl_Object.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// Old Fl_Object header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+// This file is provided for back compatibility only.  Please use fltk3::Widget
+#ifndef Fl_Object
+#define Fl_Object fltk3::Widget
+#endif
+#include "Fl_Widget.H"
+
+//
+// End of "$Id: Fl_Object.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Output.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Output.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Output.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,68 @@
+//
+// "$Id: Fl_Output.H 6898 2009-09-23 20:43:27Z matt $"
+//
+// Output header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Output widget . */
+
+#ifndef Fl_Output_H
+#define Fl_Output_H
+
+#include "Fl_Input.H"
+/**
+  This widget displays a piece of text.  When you set the value()
+  , Fl_Output does a strcpy() to it's own storage,
+  which is useful for program-generated values.  The user may select
+  portions of the text using the mouse and paste the contents into other
+  fields or programs.
+  <P align=CENTER>\image html text.gif</P> 
+  \image latex text.eps "Fl_Output" width=8cm
+  <P>There is a single subclass, 
+  Fl_Multiline_Output, which allows you to display multiple lines of
+  text. Fl_Multiline_Output does not provide scroll bars. If a more 
+  complete text editing widget is needed, use Fl_Text_Display instead.</P>
+  <P>The text may contain any characters except \\0, and will correctly
+  display anything, using ^X notation for unprintable control characters
+  and \\nnn notation for unprintable characters with the high bit set. It
+  assumes the font can draw any characters in the ISO-Latin1 character
+  set.
+*/
+class Fl_Output : public Fl_Input {
+public:
+  /**
+    Creates a new Fl_Output widget using the given position,
+    size, and label string. The default boxtype is FL_DOWN_BOX.
+    <P>Inherited destrucor destroys the widget and any value associated with it.
+  */
+    Fl_Output(int X,int Y,int W,int H, const char *l = 0)
+    : Fl_Input(X, Y, W, H, l) {type(FL_NORMAL_OUTPUT);}
+};
+
+#endif 
+
+//
+// End of "$Id: Fl_Output.H 6898 2009-09-23 20:43:27Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Overlay_Window.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Overlay_Window.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Overlay_Window.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,79 @@
+//
+// "$Id: Fl_Overlay_Window.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// Overlay window header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Overlay_Window class . */
+
+#ifndef Fl_Overlay_Window_H
+#define Fl_Overlay_Window_H
+
+#include "Fl_Double_Window.H"
+
+/**
+  This window provides double buffering and also the ability to draw the
+  "overlay" which is another picture placed on top of the main image. The
+  overlay is designed to be a rapidly-changing but simple graphic such as
+  a mouse selection box. Fl_Overlay_Window uses the overlay
+  planes provided by your graphics hardware if they are available.
+  <P>If no hardware support is found the overlay is simulated by drawing
+  directly into the on-screen copy of the double-buffered window, and
+  "erased" by copying the backbuffer over it again.  This means the
+  overlay will blink if you change the image in the window.
+*/
+class FL_EXPORT Fl_Overlay_Window : public Fl_Double_Window {
+  friend class _Fl_Overlay;
+  virtual void draw_overlay() = 0;
+  fltk3::Window *overlay_;
+public:
+  void show();
+  void flush();
+  void hide();
+  void resize(int,int,int,int);
+  ~Fl_Overlay_Window();
+  int can_do_overlay();
+  void redraw_overlay();
+  /**
+    Creates a new Fl_Overlay_Window widget using the given
+    position, size, and label (title) string. If the 
+    positions (x,y) are not given, then the window manager
+    will choose them.
+  */
+  Fl_Overlay_Window(int W, int H, const char *l=0)
+    : Fl_Double_Window(W,H,l) {overlay_ = 0; force_doublebuffering_=1; image(0); }
+   /**
+    See Fl_Overlay_Window::Fl_Overlay_Window(int W, int H, const char *l=0)
+  */
+ Fl_Overlay_Window(int X, int Y, int W, int H, const char *l=0)
+    : Fl_Double_Window(X,Y,W,H,l) {overlay_ = 0; force_doublebuffering_=1; image(0); }
+  void show(int a, char **b) {Fl_Double_Window::show(a,b);}
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Overlay_Window.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_PNG_Image.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_PNG_Image.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_PNG_Image.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,52 @@
+//
+// "$Id: Fl_PNG_Image.H 6614 2009-01-01 16:11:32Z matt $"
+//
+// PNG image header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_PNG_Image class . */
+
+#ifndef Fl_PNG_Image_H
+#define Fl_PNG_Image_H
+#  include "Fl_Image.H"
+
+/**
+  The Fl_PNG_Image class supports loading, caching,
+  and drawing of Portable Network Graphics (PNG) image files. The
+  class loads colormapped and full-color images and handles color-
+  and alpha-based transparency.
+*/
+class FL_EXPORT Fl_PNG_Image : public Fl_RGB_Image {
+
+  public:
+
+  Fl_PNG_Image(const char* filename);
+};
+
+#endif
+
+//
+// End of "$Id: Fl_PNG_Image.H 6614 2009-01-01 16:11:32Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_PNM_Image.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_PNM_Image.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_PNM_Image.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,52 @@
+//
+// "$Id: Fl_PNM_Image.H 6614 2009-01-01 16:11:32Z matt $"
+//
+// PNM image header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_PNM_Image class . */
+
+#ifndef Fl_PNM_Image_H
+#define Fl_PNM_Image_H
+#  include "Fl_Image.H"
+
+/**
+  The Fl_PNM_Image class supports loading, caching,
+  and drawing of Portable Anymap (PNM, PBM, PGM, PPM) image files. The class
+  loads bitmap, grayscale, and full-color images in both ASCII and
+  binary formats.
+*/
+class FL_EXPORT Fl_PNM_Image : public Fl_RGB_Image {
+
+  public:
+
+  Fl_PNM_Image(const char* filename);
+};
+
+#endif
+
+//
+// End of "$Id: Fl_PNM_Image.H 6614 2009-01-01 16:11:32Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_PSfile_Device.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_PSfile_Device.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_PSfile_Device.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,269 @@
+//
+// "$Id: Fl_PSfile_Device.H 7356 2010-03-29 12:52:28Z manolo $"
+//
+// Support for graphics output to PostScript file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 2010 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+#include <FL/Fl_Printer.H> // must stay here
+
+#ifndef Fl_PSfile_Device_H
+#define Fl_PSfile_Device_H
+
+#define NO_PAGE_FORMATS 30 /* MSVC6 compilation fix */
+
+/**
+ \brief Sends all graphics to a local PostScript file; same API as Fl_Printer class.
+ *
+ This class has the same API as class Fl_Printer except for start_job() member function.
+ <p>PostScript text output is presently implemented only for the latin character set.
+ FLTK's standard fonts are output using PostScript's standard fonts: Helvetica, Courier, 
+ Times (and their bold, oblique, italic variants), Symbol, ZapfDingbats.
+ */
+FL_EXPORT class Fl_PSfile_Device : public  Fl_Abstract_Printer {
+  public: 
+    /**
+     \brief Possible page formats.
+     */
+    enum Page_Format {
+      A0 = 0,
+      A1,
+      A2,
+      A3,
+      A4,
+      A5,
+      A6,
+      A7,
+      A8,
+      A9,
+      B0,
+      B1,
+      B2,
+      B3,
+      B4,
+      B5,
+      B6,
+      B7,
+      B8,
+      B9,
+      B10,
+      C5E,
+      DLE,
+      EXECUTIVE,
+      FOLIO,
+      LEDGER,
+      LEGAL,
+      LETTER,
+      TABLOID,
+      ENVELOPE,
+      MEDIA = 0x1000
+    };
+    
+    /**
+     \brief Possible page layouts.
+     */
+    enum Page_Layout {PORTRAIT = 0, LANDSCAPE = 0x100, REVERSED = 0x200, ORIENTATION = 0x300};
+    
+#ifndef FL_DOXYGEN
+  private:
+    enum SHAPE{NONE=0, LINE, LOOP, POLYGON, POINTS};
+    
+    class Clip{
+    public:
+      int x, y, w, h;
+      Clip *prev;
+    };
+    Clip * clip_;
+    
+    int lang_level_;
+    int font_;
+    int size_;
+    Fl_Color color_;
+    int gap_;
+    int pages_;
+    
+    double width_;
+    double height_;
+    
+    int shape_;
+    int linewidth_;// need for clipping, lang level 1-2
+    int linestyle_;//
+    int interpolate_; //interpolation of images
+    unsigned char cr_,cg_,cb_;
+    char  linedash_[256];//should be enought
+    void concat();  // transform ror scalable dradings...
+    void reconcat(); //invert
+    void recover(); //recovers the state afrer grestore (such as line styles...)
+    void reset();
+    
+    uchar * mask;
+    int mx; // width of mask;
+    int my; // mask lines
+    //Fl_Color bg_;
+    int (*close_cmd_)(FILE *);
+    int page_policy_;
+    int nPages;
+    int orientation_;
+    
+    float scale_x;
+    float scale_y;
+    float angle;
+    int left_margin;
+    int top_margin;
+  protected:
+    typedef struct page_format {
+      int width;
+      int height;
+      const char *name;
+    } page_format;
+   
+    FILE *output;
+    double pw_, ph_;
+    static const page_format page_formats[NO_PAGE_FORMATS];
+    
+    uchar bg_r, bg_g, bg_b;
+    int start_postscript (int pagecount, enum Page_Format format, enum Page_Layout layout);
+    /*  int alpha_mask(const uchar * data, int w, int h, int D, int LD=0);
+     */
+    void draw(const char* s, int n, int x, int y) {transformed_draw(s,n,x,y); };
+    void draw(int angle, const char *str, int n, int x, int y);
+    void transformed_draw(const char* s, int n, double x, double y); //precise text placing
+    void transformed_draw(const char* s, double x, double y);
+    int alpha_mask(const uchar * data, int w, int h, int D, int LD=0);
+    void draw_scaled_image(const uchar *data, double x, double y, double w, double h, int iw, int ih, int D=3, int LD=0);
+    void draw_scaled_image_mono(const uchar *data, double x, double y, double w, double h, int iw, int ih, int D=3, int LD=0);
+    void draw_scaled_image(Fl_Draw_Image_Cb call, void *data, double x, double y, double w, double h, int iw, int ih, int D);
+    void draw_scaled_image_mono(Fl_Draw_Image_Cb call, void *data, double x, double y, double w, double h, int iw, int ih, int D);
+    
+    enum Page_Format page_format_;
+    char *ps_filename_;
+    // implementation of drawing methods
+    void color(Fl_Color c);
+    //void bg_color(Fl_Color bg);
+    void color(uchar r, uchar g, uchar b);
+    Fl_Color color(){return color_;};
+    
+    void push_clip(int x, int y, int w, int h);
+    int clip_box(int x, int y, int w, int h, int &X, int &Y, int &W, int &H);
+    int not_clipped(int x, int y, int w, int h);
+    void push_no_clip();
+    void pop_clip();
+    
+    void line_style(int style, int width=0, char* dashes=0);
+    
+    void rect(int x, int y, int w, int h);
+    void rectf(int x, int y, int w, int h);
+    
+    void xyline(int x, int y, int x1);
+    void xyline(int x, int y, int x1, int y2);
+    void xyline(int x, int y, int x1, int y2, int x3);
+    
+    void yxline(int x, int y, int y1);
+    void yxline(int x, int y, int y1, int x2);
+    void yxline(int x, int y, int y1, int x2, int y3);
+    
+    void line(int x1, int y1, int x2, int y2);
+    void line(int x1, int y1, int x2, int y2, int x3, int y3);  
+    
+    void loop(int x0, int y0, int x1, int y1, int x2, int y2);
+    void loop(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
+    void polygon(int x0, int y0, int x1, int y1, int x2, int y2);
+    void polygon(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
+    void point(int x, int y);
+    
+    void begin_points();
+    void begin_line();
+    void begin_loop();
+    void begin_polygon();
+    void vertex(double x, double y);
+    void curve(double x, double y, double x1, double y1, double x2, double y2, double x3, double y3);
+    void circle(double x, double y, double r);
+    void arc(double x, double y, double r, double start, double a);
+    void arc(int x, int y, int w, int h, double a1, double a2);
+    void pie(int x, int y, int w, int h, double a1, double a2);
+    void end_points();
+    void end_line();
+    void end_loop();
+    void end_polygon();
+    void begin_complex_polygon(){begin_polygon();};
+    void gap(){gap_=1;};
+    void end_complex_polygon(){end_polygon();};
+    void transformed_vertex(double x, double y);
+    
+    void font(int face, int size);
+    int font(){return font_;};
+    int size(){return size_;};
+    double width(unsigned c);
+    double width(const char* s, int n);
+    int descent();
+    int height();
+    
+    void draw_image(const uchar* d, int x,int y,int w,int h, int delta=3, int ldelta=0){draw_scaled_image(d,x,y,w,h,w,h,delta,ldelta);};
+    void draw_image_mono(const uchar* d, int x,int y,int w,int h, int delta=1, int ld=0){draw_scaled_image_mono(d,x,y,w,h,w,h,delta,ld);};
+    void draw_image(Fl_Draw_Image_Cb call, void* data, int x,int y, int w, int h, int delta=3){draw_scaled_image(call,data, x, y, w, h, w, h, delta);};
+    void draw_image_mono(Fl_Draw_Image_Cb call, void* data, int x,int y, int w, int h, int delta=1){draw_scaled_image_mono(call, data, x, y, w, h, w, h, delta);};
+    
+    void draw(Fl_Pixmap * pxm,int XP, int YP, int WP, int HP, int cx, int cy);
+    void draw(Fl_RGB_Image * rgb,int XP, int YP, int WP, int HP, int cx, int cy);
+    void draw(Fl_Bitmap * bitmap,int XP, int YP, int WP, int HP, int cx, int cy);
+    
+  public:
+    void page_policy(int p);
+    int page_policy(){return page_policy_;};
+    void close_command( int (*cmd)(FILE *)){close_cmd_=cmd;};
+    FILE * file() {return output;};
+    //void orientation (int o);
+    //Fl_PSfile_Device(FILE *o, int lang_level, int pages = 0); // ps (also multi-page) constructor
+    //Fl_PSfile_Device(FILE *o, int lang_level, int x, int y, int w, int h); //eps constructor
+    void interpolate(int i){interpolate_=i;};
+    int interpolate(){return interpolate_;}
+    
+    void page(double pw, double ph, int media = 0);
+    void page(int format);
+    
+    void place(double x, double y, double tx, double ty, double scale = 1);
+    int start_page (void);
+    int printable_rect(int *w, int *h);
+    void margins(int *left, int *top, int *right, int *bottom);
+    void origin(int x, int y);
+    void scale (float scale_x, float scale_y);
+    void rotate(float angle);
+    void translate(int x, int y);
+    void untranslate(void);
+    int end_page (void);    
+    void end_job(void);
+#endif // FL_DOXYGEN
+  Fl_PSfile_Device(void);
+  int start_job(int pagecount, enum Page_Format format = A4, enum Page_Layout layout = PORTRAIT);
+  int start_job(FILE *ps_output, int pagecount, enum Page_Format format = A4, enum Page_Layout layout = PORTRAIT);
+  virtual ~Fl_PSfile_Device();
+  
+  /** [this text may be customized at run-time] */
+  static const char *file_chooser_title; 
+};
+
+#endif // Fl_PSfile_Device_H
+
+//
+// End of "$Id: Fl_PSfile_Device.H 7356 2010-03-29 12:52:28Z manolo $"
+//

Added: branches/branch-3.0/fltk3/Fl_Pack.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Pack.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Pack.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,84 @@
+//
+// "$Id: Fl_Pack.H 6664 2009-02-18 09:27:54Z AlbrechtS $"
+//
+// Pack header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Pack widget . */
+
+#ifndef Fl_Pack_H
+#define Fl_Pack_H
+
+#include <FL/Fl_Group.H>
+
+/**
+  This widget was designed to add the functionality of compressing and
+  aligning widgets.
+  <P>If type() is Fl_Pack::HORIZONTAL all the children are
+  resized to the height of the Fl_Pack, and are moved next to
+  each other horizontally. If type() is not Fl_Pack::HORIZONTAL
+  then the children are resized to the width and are stacked below each
+  other.  Then the Fl_Pack resizes itself to surround the child
+  widgets.
+  <P>This widget is needed for the Fl_Tabs.
+  In addition you may want to put the Fl_Pack inside an 
+  Fl_Scroll.
+
+  <P>The resizable for Fl_Pack is set to NULL by default.</p>
+  <P>See also: fltk3::Group::resizable()
+*/
+class FL_EXPORT Fl_Pack : public fltk3::Group {
+  int spacing_;
+
+public:
+  enum { // values for type(int)
+    VERTICAL = 0,
+    HORIZONTAL = 1
+  };
+
+protected:
+  void draw();
+
+public:
+  Fl_Pack(int x,int y,int w ,int h,const char *l = 0);
+  /**
+    Gets the number of extra pixels of blank space that are added
+    between the children.
+  */
+  int spacing() const {return spacing_;}
+  /**
+    Sets the number of extra pixels of blank space that are added
+    between the children.
+  */
+  void spacing(int i) {spacing_ = i;}
+  /** Same as fltk3::Group::type() */
+  uchar horizontal() const {return type();}
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Pack.H 6664 2009-02-18 09:27:54Z AlbrechtS $".
+//

Added: branches/branch-3.0/fltk3/Fl_Pixmap.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Pixmap.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Pixmap.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,96 @@
+//
+// "$Id: Fl_Pixmap.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// Pixmap header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Pixmap widget . */
+
+#ifndef Fl_Pixmap_H
+#define Fl_Pixmap_H
+#  include "Fl_Image.H"
+
+class fltk3::Widget;
+struct Fl_Menu_Item;
+
+// Older C++ compilers don't support the explicit keyword... :(
+#  if defined(__sgi) && !defined(_COMPILER_VERSION)
+#    define explicit
+#  endif // __sgi && !_COMPILER_VERSION
+
+/**
+  The Fl_Pixmap class supports caching and drawing of colormap
+  (pixmap) images, including transparency.
+*/
+class FL_EXPORT Fl_Pixmap : public Fl_Image {
+  void copy_data();
+  void delete_data();
+  void set_data(const char * const *p);
+
+  protected:
+
+  void measure();
+
+  public:
+
+  int alloc_data; // Non-zero if data was allocated
+  
+  private:
+
+#if defined(__APPLE__) || defined(WIN32)
+  void *id_; // for internal use
+  void *mask_; // for internal use (mask bitmap)
+#else
+  unsigned id_; // for internal use
+  unsigned mask_; // for internal use (mask bitmap)
+#endif // __APPLE__ || WIN32
+  
+  public:
+
+  /**    The constructors create a new pixmap from the specified XPM data.  */
+  explicit Fl_Pixmap(char * const * D) : Fl_Image(-1,0,1), alloc_data(0), id_(0), mask_(0) {set_data((const char*const*)D); measure();}
+  /**    The constructors create a new pixmap from the specified XPM data.  */
+  explicit Fl_Pixmap(uchar* const * D) : Fl_Image(-1,0,1), alloc_data(0), id_(0), mask_(0) {set_data((const char*const*)D); measure();}
+  /**    The constructors create a new pixmap from the specified XPM data.  */
+  explicit Fl_Pixmap(const char * const * D) : Fl_Image(-1,0,1), alloc_data(0), id_(0), mask_(0) {set_data((const char*const*)D); measure();}
+  /**    The constructors create a new pixmap from the specified XPM data.  */
+  explicit Fl_Pixmap(const uchar* const * D) : Fl_Image(-1,0,1), alloc_data(0), id_(0), mask_(0) {set_data((const char*const*)D); measure();}
+  virtual ~Fl_Pixmap();
+  virtual Fl_Image *copy(int W, int H);
+  Fl_Image *copy() { return copy(w(), h()); }
+  virtual void color_average(Fl_Color c, float i);
+  virtual void desaturate();
+  virtual void draw(int X, int Y, int W, int H, int cx=0, int cy=0);
+  void draw(int X, int Y) {draw(X, Y, w(), h(), 0, 0);}
+  virtual void label(fltk3::Widget*w);
+  virtual void label(Fl_Menu_Item*m);
+  virtual void uncache();
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Pixmap.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Plugin.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Plugin.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Plugin.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,106 @@
+//
+// "$Id: Fl_Plugin.H 6995 2010-01-12 08:48:55Z matt $"
+//
+// A Plugin system for FLTK, implemented in Fl_Preferences.cxx.
+//
+// Copyright 2002-2010 by Matthias Melcher.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Plugin class . */
+
+#ifndef Fl_Plugin_H
+#  define Fl_Plugin_H
+
+#  include "Fl_Preferences.H"
+
+
+/**
+ \brief Fl_Plugin allows link-time and run-time integration of binary modules.
+ 
+ Fl_Plugin and Fl_Plugin_Manager provide a small and simple solution for
+ linking C++ classes at run-time, or optionally linking modules at compile
+ time without the need to change the main application.
+
+ Fl_Plugin_Manager uses static initialisation to create the plugin interface
+ early during startup. Plugins are stored in a temporary database, organized
+ in classes.
+ 
+ Plugins should derive a new class from Fl_Plugin as a base:
+ \code
+ class My_Plugin : public Fl_Plugin {
+ public:
+   My_Plugin() : Fl_Plugin("effects", "blur") { }
+   void do_something(...);
+ };
+ My_Plugin blur_plugin();
+ \endcode
+ 
+ Plugins can be put into modules and either linked befor distribution, or loaded
+ from dynamically linkable files. An Fl_Plugin_Manager is used to list and 
+ access all currently loaded plugins.
+ \code
+ Fl_Plugin_Manager mgr("effects");
+ int i, n = mgr.plugins();
+ for (i=0; i<n; i++) {
+   My_Plugin *pin = (My_Plugin*)mgr.plugin(i);
+   pin->do_something();
+ }
+ \endcode
+ */
+class FL_EXPORT Fl_Plugin 
+{
+  Fl_Preferences::ID id;
+public:
+  Fl_Plugin(const char *klass, const char *name);
+  virtual ~Fl_Plugin();
+};
+
+
+/**
+ \brief Fl_Plugin_Manager manages link-time and run-time plugin binaries.
+ \see Fl_Plugin
+ */
+class FL_EXPORT Fl_Plugin_Manager : public Fl_Preferences
+{
+public:
+  Fl_Plugin_Manager(const char *klass);
+  ~Fl_Plugin_Manager();
+  
+  /** \brief Return the number of plugins in the klass.
+   */
+  int plugins() { return groups(); }
+  Fl_Plugin *plugin(int index);
+  Fl_Plugin *plugin(const char *name);
+  Fl_Preferences::ID addPlugin(const char *name, Fl_Plugin *plugin);
+  
+  static void removePlugin(Fl_Preferences::ID id);
+  static int load(const char *filename);
+  static int loadAll(const char *filepath, const char *pattern=0);
+};
+
+
+#endif // !Fl_Preferences_H
+
+//
+// End of "$Id: Fl_Preferences.H 6995 2010-01-12 08:48:55Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Positioner.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Positioner.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Positioner.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,103 @@
+//
+// "$Id: Fl_Positioner.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// Positioner header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Positioner widget . */
+
+#ifndef Fl_Positioner_H
+#define Fl_Positioner_H
+
+#ifndef Fl_Widget_H
+#include "Fl_Widget.H"
+#endif
+
+/**
+  This class is provided for Forms compatibility.  It provides 2D input.
+  It would be useful if this could be put atop another widget so that the
+  crosshairs are on top, but this is not implemented.  The color of the
+  crosshairs is selection_color().
+  <P ALIGN=CENTER>\image html  positioner.gif </P> 
+  \image latex  positioner.eps " Fl_Positioner" width=4cm
+*/
+class FL_EXPORT Fl_Positioner : public fltk3::Widget {
+
+  double xmin, ymin;
+  double xmax, ymax;
+  double xvalue_, yvalue_;
+  double xstep_, ystep_;
+
+protected:
+
+  // these allow subclasses to put the dial in a smaller area:
+  void draw(int, int, int, int);
+  int handle(int, int, int, int, int);
+  void draw();
+
+public:
+
+  int handle(int);
+  /**
+    Creates a new Fl_Positioner widget using the given position,
+    size, and label string. The default boxtype is FL_NO_BOX.
+  */
+  Fl_Positioner(int x,int y,int w,int h, const char *l=0);
+  /** Gets the X axis coordinate.*/
+  double xvalue() const {return xvalue_;}
+  /** Gets the Y axis coordinate.*/
+  double yvalue() const {return yvalue_;}
+  int xvalue(double);
+  int yvalue(double);
+  int value(double,double);
+  void xbounds(double, double);
+  /** Gets the X axis minimum */
+  double xminimum() const {return xmin;}
+  /** Same as xbounds(a, xmaximum()) */
+  void xminimum(double a) {xbounds(a,xmax);}
+  /** Gets the X axis maximum */
+  double xmaximum() const {return xmax;}
+  /** Same as xbounds(xminimum(), a) */
+  void xmaximum(double a) {xbounds(xmin,a);}
+  void ybounds(double, double);
+  /** Gets the Y axis minimum */
+  double yminimum() const {return ymin;}
+  /** Same as ybounds(a, ymaximum()) */
+  void yminimum(double a) {ybounds(a, ymax);}
+  /** Gets the Y axis maximum */
+  double ymaximum() const {return ymax;}
+  /** Same as ybounds(ymininimum(), a) */
+  void ymaximum(double a) {ybounds(ymin, a);}
+  /** Sets the stepping value for the X axis.*/
+  void xstep(double a) {xstep_ = a;}
+  /** Sets the stepping value for the Y axis.*/
+  void ystep(double a) {ystep_ = a;}
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Positioner.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Preferences.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Preferences.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Preferences.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,288 @@
+//
+// "$Id: Fl_Preferences.H 7117 2010-02-20 21:14:47Z matt $"
+//
+// Preferences .
+//
+// Copyright 2002-2009 by Matthias Melcher.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Preferences class . */
+
+#ifndef Fl_Preferences_H
+#  define Fl_Preferences_H
+
+#  include <stdio.h>
+#  include "Fl_Export.H"
+
+
+/**
+   \brief Fl_Preferences provides methods to store user
+   settings between application starts. 
+
+   It is similar to the
+   Registry on WIN32 and Preferences on MacOS, and provides a
+   simple configuration mechanism for UNIX.
+   
+   Fl_Preferences uses a hierarchy to store data. It
+   bundles similar data into groups and manages entries into those
+   groups as name/value pairs.
+   
+   Preferences are stored in text files that can be edited
+   manually. The file format is easy to read and relatively
+   forgiving. Preferences files are the same on all platforms. User
+   comments in preference files are preserved. Filenames are unique
+   for each application by using a vendor/application naming
+   scheme. The user must provide default values for all entries to
+   ensure proper operation should preferences be corrupted or not
+   yet exist.
+   
+   Entries can be of any length. However, the size of each
+   preferences file should be kept small for performance
+   reasons. One application can have multiple preferences files.
+   Extensive binary data however should be stored in separate
+   files: see getUserdataPath().
+ 
+   \note Starting with FLTK 1.3, preference databases are expected to 
+   be in utf8 encoding. Previous databases were stored in the 
+   current chracter set or code page which renders them incompatible
+   for text entries using international characters.
+ */
+class FL_EXPORT Fl_Preferences 
+{
+
+public:
+
+  /**
+     Define the scope of the preferences.
+   */
+  enum Root { 
+    SYSTEM=0,   ///< Preferences are used system-wide
+    USER        ///< Preferences apply only to the current user
+  };
+  
+  /**
+   Every Fl_Preferences-Group has a uniqe ID.
+   
+   ID's can be retrieved from an Fl_Preferences-Group and can then be used
+   to create more Fl_Preference references to the same data set, as long as the 
+   databse remains open.
+   */
+  typedef void *ID;
+  
+  static const char *newUUID();
+
+  Fl_Preferences( Root root, const char *vendor, const char *application );
+  Fl_Preferences( const char *path, const char *vendor, const char *application );
+  Fl_Preferences( Fl_Preferences &parent, const char *group );
+  Fl_Preferences( Fl_Preferences *parent, const char *group );
+  Fl_Preferences( Fl_Preferences &parent, int groupIndex );
+  Fl_Preferences( Fl_Preferences *parent, int groupIndex );
+  Fl_Preferences(const Fl_Preferences&);
+  Fl_Preferences( ID id );
+  ~Fl_Preferences();
+  
+  /** Return an ID that can later be reused to open more references to this dataset.
+   */
+  ID id() { return (ID)node; }
+  
+  /** Remove the group with this ID from a databse.
+   */
+  static char remove(ID id) { return ((Node*)id)->remove(); }
+
+  /** Return the name of this entry.
+   */
+  const char *name() { return node->name(); }
+  
+  /** Return the the full path to this entry.
+   */
+  const char *path() { return node->path(); }
+  
+  int groups();
+  const char *group( int num_group );
+  char groupExists( const char *key );
+  char deleteGroup( const char *group );
+  char deleteAllGroups();
+
+  int entries();
+  const char *entry( int index );
+  char entryExists( const char *key );
+  char deleteEntry( const char *entry );
+  char deleteAllEntries();
+  
+  char clear();
+
+  char set( const char *entry, int value );
+  char set( const char *entry, float value );
+  char set( const char *entry, float value, int precision );
+  char set( const char *entry, double value );
+  char set( const char *entry, double value, int precision );
+  char set( const char *entry, const char *value );
+  char set( const char *entry, const void *value, int size ); 
+  
+  char get( const char *entry, int &value, int defaultValue );
+  char get( const char *entry, float &value,  float defaultValue );
+  char get( const char *entry, double &value, double defaultValue );
+  char get( const char *entry, char *&value,  const char *defaultValue );
+  char get( const char *entry, char *value,   const char *defaultValue, int maxSize );
+  char get( const char *entry, void *&value,  const void *defaultValue, int defaultSize );
+  char get( const char *entry, void *value,   const void *defaultValue, int defaultSize, int maxSize );
+
+  int size( const char *entry );
+
+  char getUserdataPath( char *path, int pathlen );
+
+  void flush();
+
+  // char export( const char *filename, Type fileFormat );
+  // char import( const char *filename );
+  
+  char copyTo(class Fl_Tree*);
+
+  /**
+     'Name' provides a simple method to create numerical or more complex 
+     procedural names for entries and groups on the fly.
+     
+     Example: prefs.set(Fl_Preferences::Name("File%d",i),file[i]);. 
+    
+     See test/preferences.cxx as a sample for writing arrays into preferences.<p>
+     'Name' is actually implemented as a class inside Fl_Preferences. It casts
+     into const char* and gets automatically destroyed after the enclosing call
+     ends.
+   */
+  class FL_EXPORT Name {
+
+    char *data_;
+
+  public:
+
+    Name( unsigned int n );
+    Name( const char *format, ... );
+
+    /**
+       Return the Name as a "C" string.
+       \internal
+     */
+    operator const char *() { return data_; }
+    ~Name();
+  };
+
+  /** \internal An entry associates a preference name to its corresponding value */
+  struct Entry
+  {
+    char *name, *value;
+  };
+
+private:
+
+  Fl_Preferences() : node(0), rootNode(0) { }
+  Fl_Preferences &operator=(const Fl_Preferences&);
+
+  static char nameBuffer[128];
+  static char uuidBuffer[40];
+  static Fl_Preferences *runtimePrefs;
+
+  class RootNode;
+  
+  class FL_EXPORT Node // a node contains a list to all its entries 
+  {          // and all means to manage the tree structure
+    Node *child_, *next_;
+    union { // these two are mutually exclusive
+      Node *parent_;    // top_ bit clear
+      RootNode *root_;  // top_ bit set
+    };
+    char *path_;
+    Entry *entry_;
+    int nEntry_, NEntry_;
+    unsigned char dirty_:1;
+    unsigned char top_:1;
+    unsigned char indexed_:1;
+    // indexing routines
+    Node **index_;
+    int nIndex_, NIndex_;
+    void createIndex();
+    void updateIndex();
+    void deleteIndex();
+  public:
+    static int lastEntrySet;
+  public:
+    Node( const char *path );
+    ~Node();
+    char copyTo(class Fl_Tree*, class Fl_Tree_Item*);
+    // node methods
+    int write( FILE *f );
+    const char *name();
+    const char *path() { return path_; }
+    Node *find( const char *path );
+    Node *search( const char *path, int offset=0 );
+    Node *childNode( int ix );
+    Node *addChild( const char *path );
+    void setParent( Node *parent );
+    Node *parent() { return top_?0L:parent_; }
+    void setRoot(RootNode *r) { root_ = r; top_ = 1; }
+    RootNode *findRoot();
+    char remove();
+    char dirty();
+    void deleteAllChildren();
+    // entry methods
+    int nChildren();
+    const char *child( int ix );
+    void set( const char *name, const char *value );
+    void set( const char *line );
+    void add( const char *line );
+    const char *get( const char *name );
+    int getEntry( const char *name );
+    char deleteEntry( const char *name );
+    void deleteAllEntries();
+    int nEntry() { return nEntry_; }
+    Entry &entry(int i) { return entry_[i]; }
+  };
+  friend class Node;
+
+  class FL_EXPORT RootNode  // the root node manages file paths and basic reading and writing
+  {
+    Fl_Preferences *prefs_;
+    char *filename_;
+    char *vendor_, *application_;
+  public:
+    RootNode( Fl_Preferences *, Root root, const char *vendor, const char *application );
+    RootNode( Fl_Preferences *, const char *path, const char *vendor, const char *application );
+    RootNode( Fl_Preferences * );
+    ~RootNode();
+    int read();
+    int write();
+    char getPath( char *path, int pathlen );
+  };
+  friend class RootNode;
+
+protected:
+  
+  Node *node;
+  RootNode *rootNode;
+};
+
+
+#endif // !Fl_Preferences_H
+
+//
+// End of "$Id: Fl_Preferences.H 7117 2010-02-20 21:14:47Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Printer.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Printer.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Printer.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,214 @@
+//
+// "$Id: Fl_Printer.H 7356 2010-03-29 12:52:28Z manolo $"
+//
+// Printing support for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 2010 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+/** \file Fl_Printer.H 
+ \brief declaration of classes Fl_Printer,  Fl_Device_Plugin.
+ */
+
+#ifndef Fl_Printer_H
+#define Fl_Printer_H
+
+#include <fltk3/Fl_Abstract_Printer.H>
+#include <fltk3/fl_draw.H>
+#include <fltk3/Fl_Pixmap.H>
+#include <fltk3/Fl_RGB_Image.H>
+#include <fltk3/Fl_Bitmap.H>
+#include <stdio.h>
+
+#if defined(__APPLE__) || defined(WIN32) || defined(FL_DOXYGEN)
+/**
+ * @brief Provides an OS-independent interface to printing.
+ *
+ It allows to use all FLTK drawing, color, text, and clip functions, and to have them operate
+ on printed page(s). There are two main, non exclusive, ways to use it.
+ <ul><li>Print any widget (standard, custom, fltk3::Window, Fl_Gl_Window) as it appears 
+ on screen, with optional translation and scaling. This is done by calling print_widget() 
+ or print_window_part().
+ <li>Use a series of FLTK graphics commands (e.g., font, text, lines, colors, clip) to
+ compose a page appropriately shaped for printing. 
+ </ul>
+ In both cases, begin by start_job(), start_page(), printable_rect() and origin() calls
+ and finish by end_page() and end_job() calls.
+ <p>On Xlib-based platforms (<i>e.g.</i>, Linux, Unix), this class is implemented as
+ a subclass of Fl_PSfile_Device.
+ <p>On Xlib-based platforms, the static public attributes of this class
+ can be used to set the print dialog to other languages than English. For example, the "Printer:"
+ dialog item Fl_Printer::dialog_printer can be set to French with:
+ \code
+ Fl_Printer::dialog_printer = "Imprimante:";
+ Fl_Printer myprinter;
+ myprinter.start_job();
+ \endcode
+ Use Fl_PSfile_Device::file_chooser_title to customize the title of the file chooser dialog that opens
+ when using the "Print To File" option of the print dialog.
+ \see Fl_PSfile_Device.
+ */
+class Fl_Printer : public Fl_Abstract_Printer {
+private:
+#ifdef __APPLE__
+  float scale_x;
+  float scale_y;
+  float angle; // rotation angle in radians
+  PMPrintSession  printSession;
+  PMPageFormat    pageFormat;
+  PMPrintSettings printSettings;
+#elif defined(WIN32)
+  int   abortPrint;
+  PRINTDLG      pd;
+  HDC           hPr;
+  int           prerr;
+  int left_margin;
+  int top_margin;
+  void absolute_printable_rect(int *x, int *y, int *w, int *h);
+#endif
+public:
+  /** 
+   @brief The constructor.
+   */
+  Fl_Printer(void);
+  int start_job(int pagecount, int *frompage = NULL, int *topage = NULL);
+  int start_page (void);
+  int printable_rect(int *w, int *h);
+  void margins(int *left, int *top, int *right, int *bottom);
+  void origin(int x, int y);
+#ifdef FL_DOXYGEN  
+  void origin(int *x, int *y);
+#endif
+  void scale (float scale_x, float scale_y);
+  void rotate(float angle);
+  void translate(int x, int y);
+  void untranslate(void);
+#ifdef FL_DOXYGEN  
+  void print_widget(fltk3::Widget* widget, int delta_x = 0, int delta_y = 0);
+  void print_window_part(fltk3::Window *win, int x, int y, int w, int h, int delta_x = 0, int delta_y = 0);
+#endif  
+  int end_page (void);
+  void end_job (void);
+#ifdef FL_DOXYGEN
+  /** \name These attributes apply to the Xlib platform only.
+   \{
+   */  
+  /** [this text may be customized at run-time] */
+  static const char *dialog_title; 
+  /** [this text may be customized at run-time] */
+  static const char *dialog_printer; 
+  /** [this text may be customized at run-time] */
+  static const char *dialog_range; 
+  /** [this text may be customized at run-time] */
+  static const char *dialog_copies; 
+  /** [this text may be customized at run-time] */
+  static const char *dialog_all; 
+  /** [this text may be customized at run-time] */
+  static const char *dialog_pages;
+  /** [this text may be customized at run-time] */
+  static const char *dialog_from;
+  /** [this text may be customized at run-time] */
+  static const char *dialog_to;
+  /** "Properties..." [this text may be customized at run-time] */
+  static const char *dialog_properties;
+  /** [this text may be customized at run-time] */
+  static const char *dialog_copyNo;
+  /** [this text may be customized at run-time] */
+  static const char *dialog_print_button;
+  /** [this text may be customized at run-time] */
+  static const char *dialog_cancel_button;
+  /** [this text may be customized at run-time] */
+  static const char *dialog_print_to_file;
+  /** [this text may be customized at run-time] */
+  static const char *property_title;
+  /** [this text may be customized at run-time] */
+  static const char *property_pagesize;
+  /** [this text may be customized at run-time] */
+  static const char *property_mode;
+  /** [this text may be customized at run-time] */
+  static const char *property_use;
+  /** [this text may be customized at run-time] */
+  static const char *property_save;
+  /** [this text may be customized at run-time] */
+  static const char *property_cancel;
+  /** \} */
+#endif
+};
+
+#else
+
+#include <fltk3/Fl_PSfile_Device.H>
+
+class Fl_Printer : public Fl_PSfile_Device {
+public:
+  static const char *dialog_title; // all of this must be duplicated above for correct documentation
+  static const char *dialog_printer; 
+  static const char *dialog_range; 
+  static const char *dialog_copies; 
+  static const char *dialog_all; 
+  static const char *dialog_pages;
+  static const char *dialog_from;
+  static const char *dialog_to;
+  static const char *dialog_properties;
+  static const char *dialog_copyNo;
+  static const char *dialog_print_button;
+  static const char *dialog_cancel_button;
+  static const char *dialog_print_to_file;
+  static const char *property_title;
+  static const char *property_pagesize;
+  static const char *property_mode;
+  static const char *property_use;
+  static const char *property_save;
+  static const char *property_cancel;
+
+  Fl_Printer(void) {};
+  ~Fl_Printer(void) {};
+  int start_job(int pages, int *firstpage = NULL, int *lastpage = NULL);
+};
+#endif  
+
+/**
+ This plugin socket allows the integration of new device drivers for special
+ window or screen types. It is currently used to provide an automated printing
+ service for OpenGL windows, if linked with fltk_gl.
+ */
+class Fl_Device_Plugin : public Fl_Plugin {
+public:
+  /** \brief The constructor */
+  Fl_Device_Plugin(const char *name)
+  : Fl_Plugin(klass(), name) { }
+  /** \brief Returns the class name */
+  virtual const char *klass() { return "fltk:device"; }
+  /** \brief Returns the plugin name */
+  virtual const char *name() = 0;
+  /** \brief Prints a widget 
+   \param p the printer
+   \param w the widget
+   \param x,y offsets where to print relatively to coordinates origin
+   */
+  virtual int print(Fl_Abstract_Printer* p, fltk3::Widget* w, int x, int y) { return 0; }
+};
+
+#endif // Fl_Printer_H
+
+//
+// End of "$Id: Fl_Printer.H 7356 2010-03-29 12:52:28Z manolo $"
+//

Added: branches/branch-3.0/fltk3/Fl_Progress.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Progress.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Progress.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,81 @@
+//
+// "$Id: Fl_Progress.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// Progress bar widget definitions.
+//
+// Copyright 2000-2009 by Michael Sweet.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Progress widget . */
+
+#ifndef _Fl_Progress_H_
+#  define _Fl_Progress_H_
+
+//
+// Include necessary headers.
+//
+
+#include "Fl_Widget.H"
+
+
+//
+// Progress class...
+//
+/**
+    Displays a progress bar for the user.
+*/
+class FL_EXPORT Fl_Progress : public fltk3::Widget
+{
+  float	value_,
+	minimum_,
+	maximum_;
+
+  protected:
+
+  virtual void draw();
+
+  public:
+
+  Fl_Progress(int x, int y, int w, int h, const char *l = 0);
+
+  /** Sets the maximum value in the progress widget.  */
+  void	maximum(float v) { maximum_ = v; redraw(); }
+  /** Gets the maximum value in the progress widget.  */
+  float	maximum() const { return (maximum_); }
+
+  /** Sets the minimum value in the progress widget.  */
+  void	minimum(float v) { minimum_ = v; redraw(); }
+  /** Gets the minimum value in the progress widget.  */
+  float	minimum() const { return (minimum_); }
+
+  /** Sets the current value in the progress widget.  */
+  void	value(float v) { value_ = v; redraw(); }
+  /** Gets the current value in the progress widget.  */
+  float	value() const { return (value_); }
+};
+
+#endif // !_Fl_Progress_H_
+
+//
+// End of "$Id: Fl_Progress.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_RGB_Image.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_RGB_Image.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_RGB_Image.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,35 @@
+//
+// "$Id: Fl_RGB_Image.H 6942 2009-11-18 12:22:51Z AlbrechtS $"
+//
+// RGB Image header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+#ifndef Fl_RGB_Image_H
+# define Fl_RGB_Image_H
+# include "Fl_Image.H"
+#endif // !Fl_RGB_Image_H
+
+//
+// End of "$Id: Fl_RGB_Image.H 6942 2009-11-18 12:22:51Z AlbrechtS $".
+//

Added: branches/branch-3.0/fltk3/Fl_Radio_Button.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Radio_Button.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Radio_Button.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,46 @@
+//
+// "$Id: Fl_Radio_Button.H 6614 2009-01-01 16:11:32Z matt $"
+//
+// Radio button header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Radio_Button widget . */
+
+#ifndef Fl_Radio_Button_H
+#define Fl_Radio_Button_H
+
+#include "Fl_Button.H"
+
+class Fl_Radio_Button : public Fl_Button {
+public:
+    Fl_Radio_Button(int x,int y,int w,int h,const char *l=0)
+	: Fl_Button(x,y,w,h,l) {type(FL_RADIO_BUTTON);}
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Radio_Button.H 6614 2009-01-01 16:11:32Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Radio_Light_Button.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Radio_Light_Button.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Radio_Light_Button.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,46 @@
+//
+// "$Id: Fl_Radio_Light_Button.H 6614 2009-01-01 16:11:32Z matt $"
+//
+// Radio light button header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Radio_Light_Button widget . */
+
+#ifndef Fl_Radio_Light_Button_H
+#define Fl_Radio_Light_Button_H
+
+#include "Fl_Light_Button.H"
+
+class Fl_Radio_Light_Button : public Fl_Light_Button {
+public:
+    Fl_Radio_Light_Button(int X,int Y,int W,int H,const char *l=0)
+	: Fl_Light_Button(X,Y,W,H,l) {type(FL_RADIO_BUTTON);}
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Radio_Light_Button.H 6614 2009-01-01 16:11:32Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Radio_Round_Button.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Radio_Round_Button.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Radio_Round_Button.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,46 @@
+//
+// "$Id: Fl_Radio_Round_Button.H 6614 2009-01-01 16:11:32Z matt $"
+//
+// Radio round button header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Radio_Round_Button widget . */
+
+#ifndef Fl_Radio_Round_Button_H
+#define Fl_Radio_Round_Button_H
+
+#include "Fl_Round_Button.H"
+
+class Fl_Radio_Round_Button : public Fl_Round_Button {
+public:
+    Fl_Radio_Round_Button(int x,int y,int w,int h,const char *l=0)
+	: Fl_Round_Button(x,y,w,h,l) {type(FL_RADIO_BUTTON);}
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Radio_Round_Button.H 6614 2009-01-01 16:11:32Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Repeat_Button.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Repeat_Button.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Repeat_Button.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,63 @@
+//
+// "$Id: Fl_Repeat_Button.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// Repeat button header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Repeat_Button widget . */
+
+#ifndef Fl_Repeat_Button_H
+#define Fl_Repeat_Button_H
+#include "Fl.H"
+#include "Fl_Button.H"
+
+/**
+  The Fl_Repeat_Button is a subclass of Fl_Button that
+  generates a callback when it is pressed and then repeatedly generates
+  callbacks as long as it is held down.  The speed of the repeat is fixed
+  and depends on the implementation.
+*/
+class FL_EXPORT Fl_Repeat_Button : public Fl_Button {
+  static void repeat_callback(void *);
+public:
+  int handle(int);
+  /**
+    Creates a new Fl_Repeat_Button widget using the given
+    position, size, and label string. The default boxtype is FL_UP_BOX.
+    Deletes the button.
+  */
+  Fl_Repeat_Button(int X,int Y,int W,int H,const char *l=0)
+    : Fl_Button(X,Y,W,H,l) {}
+  void deactivate() {
+    fltk3::remove_timeout(repeat_callback,this);
+    Fl_Button::deactivate();
+  }
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Repeat_Button.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Return_Button.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Return_Button.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Return_Button.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,60 @@
+//
+// "$Id: Fl_Return_Button.H 6614 2009-01-01 16:11:32Z matt $"
+//
+// Return button header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Return_Button widget . */
+
+#ifndef Fl_Return_Button_H
+#define Fl_Return_Button_H
+#include "Fl_Button.H"
+
+/**
+  The Fl_Return_Button is a subclass of Fl_Button that
+  generates a callback when it is pressed or when the user presses the
+  Enter key.  A carriage-return symbol is drawn next to the button label.
+  <P ALIGN=CENTER>\image html Fl_Return_Button.gif 
+  \image latex Fl_Return_Button.eps "Fl_Return_Button" width=4cm
+*/
+class FL_EXPORT Fl_Return_Button : public Fl_Button {
+protected:
+  void draw();
+public:
+  int handle(int);
+  /**
+    Creates a new Fl_Return_Button widget using the given
+    position, size, and label string. The default boxtype is FL_UP_BOX.
+    <P> The inherited destructor deletes the button.
+  */
+  Fl_Return_Button(int X, int Y, int W, int H,const char *l=0)
+    : Fl_Button(X,Y,W,H,l) {}
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Return_Button.H 6614 2009-01-01 16:11:32Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Roller.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Roller.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Roller.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,56 @@
+//
+// "$Id: Fl_Roller.H 6614 2009-01-01 16:11:32Z matt $"
+//
+// Roller header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Roller widget . */
+
+#ifndef Fl_Roller_H
+#define Fl_Roller_H
+
+#ifndef Fl_Valuator_H
+#include "Fl_Valuator.H"
+#endif
+
+/**
+  The Fl_Roller widget is a "dolly" control commonly used to
+  move 3D objects.
+  <P ALIGN=CENTER>\image html Fl_Roller.gif 
+  \image latex Fl_Roller.eps "Fl_Roller" width=4cm
+*/
+class FL_EXPORT Fl_Roller : public Fl_Valuator {
+protected:
+  void draw();
+public:
+  int handle(int);
+  Fl_Roller(int X,int Y,int W,int H,const char* L=0);
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Roller.H 6614 2009-01-01 16:11:32Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Round_Button.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Round_Button.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Round_Button.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,57 @@
+//
+// "$Id: Fl_Round_Button.H 6614 2009-01-01 16:11:32Z matt $"
+//
+// Round button header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Round_Button widget . */
+
+#ifndef Fl_Round_Button_H
+#define Fl_Round_Button_H
+
+#include "Fl_Light_Button.H"
+
+/**
+  Buttons generate callbacks when they are clicked by the user.  You
+  control exactly when and how by changing the values for type()
+  and when().
+  <P ALIGN=CENTER>\image html Fl_Round_Button.gif</P> 
+  \image latex  Fl_Round_Button.eps " Fl_Round_Button" width=4cm
+  <P>The Fl_Round_Button subclass display the "on" state by
+  turning on a light, rather than drawing pushed in.  The shape of the
+  "light" is initially set to FL_ROUND_DOWN_BOX.  The color of the light
+  when on is controlled with selection_color(), which defaults to
+  FL_RED.
+*/
+class FL_EXPORT Fl_Round_Button : public Fl_Light_Button {
+public:
+  Fl_Round_Button(int x,int y,int w,int h,const char *l = 0);
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Round_Button.H 6614 2009-01-01 16:11:32Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Round_Clock.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Round_Clock.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Round_Clock.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,48 @@
+//
+// "$Id: Fl_Round_Clock.H 6614 2009-01-01 16:11:32Z matt $"
+//
+// Round clock header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Round_Clock widget . */
+
+#ifndef Fl_Round_Clock_H
+#define Fl_Round_Clock_H
+
+#include "Fl_Clock.H"
+
+/** A clock widget of type FL_ROUND_CLOCK. Has no box. */
+class Fl_Round_Clock : public Fl_Clock {
+public:
+    /** Creates the clock widget, setting his type and box. */
+    Fl_Round_Clock(int x,int y,int w,int h, const char *l = 0)
+	: Fl_Clock(x,y,w,h,l) {type(FL_ROUND_CLOCK); box(FL_NO_BOX);}
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Round_Clock.H 6614 2009-01-01 16:11:32Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Scroll.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Scroll.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Scroll.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,199 @@
+//
+// "$Id: Fl_Scroll.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// Scroll header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Scroll widget . */
+
+#ifndef Fl_Scroll_H
+#define Fl_Scroll_H
+
+#include "Fl_Group.H"
+#include "Fl_Scrollbar.H"
+
+/**
+  This container widget lets you maneuver around a set of widgets much
+  larger than your window.  If the child widgets are larger than the size
+  of this object then scrollbars will appear so that you can scroll over
+  to them:
+  \image html Fl_Scroll.gif
+  \image latex  Fl_Scroll.eps "Fl_Scroll" width=4cm
+
+  If all of the child widgets are packed together into a solid
+  rectangle then you want to set box() to FL_NO_BOX or
+  one of the _FRAME types. This will result in the best output.
+  However, if the child widgets are a sparse arrangement you must
+  set box() to a real _BOX type. This can result in some
+  blinking during redrawing, but that can be solved by using a 
+  Fl_Double_Window.
+
+  By default you can scroll in both directions, and the scrollbars
+  disappear if the data will fit in the area of the scroll. 
+
+  Use Fl_Scroll::type() to change this as follows :
+  <UL>
+  <LI>0                            - No scrollbars </LI>
+  <LI>Fl_Scroll::HORIZONTAL        - Only a horizontal scrollbar. </LI>
+  <LI>Fl_Scroll::VERTICAL          - Only a vertical scrollbar. </LI>
+  <LI>Fl_Scroll::BOTH              - The default is both scrollbars. </LI>
+  <LI>Fl_Scroll::HORIZONTAL_ALWAYS - Horizontal scrollbar always on, vertical always off. </LI>
+  <LI>Fl_Scroll::VERTICAL_ALWAYS   - Vertical scrollbar always on, horizontal always off. </LI>
+  <LI>Fl_Scroll::BOTH_ALWAYS       - Both always on. </LI>
+  </UL>
+
+  Use <B> scrollbar.align(int) ( see void fltk3::Widget::align(Fl_Align) ) :</B>
+  to change what side the scrollbars are drawn on.
+
+  If the FL_ALIGN_LEFT bit is on, the vertical scrollbar is on the left.
+  If the FL_ALIGN_TOP bit is on, the horizontal scrollbar is on
+  the top. Note that only the alignment flags in scrollbar are 
+  considered. The flags in hscrollbar however are ignored.
+
+  This widget can also be used to pan around a single child widget
+  "canvas".  This child widget should be of your own class, with a 
+  draw() method that draws the contents.  The scrolling is done by
+  changing the x() and y() of the widget, so this child
+  must use the x() and y() to position its drawing.
+  To speed up drawing it should test fl_push_clip().
+
+  Another very useful child is a single Fl_Pack, which is itself a group
+  that packs its children together and changes size to surround them.
+  Filling the Fl_Pack with Fl_Tabs groups (and then putting
+  normal widgets inside those) gives you a very powerful scrolling list
+  of individually-openable panels.
+
+  Fluid lets you create these, but you can only lay out objects that
+  fit inside the Fl_Scroll without scrolling.  Be sure to leave
+  space for the scrollbars, as Fluid won't show these either.
+
+  <I>You cannot use fltk3::Window as a child of this since the
+  clipping is not conveyed to it when drawn, and it will draw over the
+  scrollbars and neighboring objects.</I>
+*/
+class FL_EXPORT Fl_Scroll : public fltk3::Group {
+
+  int xposition_, yposition_;
+  int oldx, oldy;
+  int scrollbar_size_;
+  static void hscrollbar_cb(fltk3::Widget*, void*);
+  static void scrollbar_cb(fltk3::Widget*, void*);
+  void fix_scrollbar_order();
+  static void draw_clip(void*,int,int,int,int);
+
+private:
+
+  //
+  //  Structure to manage scrollbar and widget interior sizes.
+  //
+  //  Private for now -- we'd like to expose some of this at 
+  //  some point to solve STR#1895.)
+  //
+  typedef struct {
+      int scrollsize;							// the scrollsize (global|local)
+      int innerbox_x, innerbox_y, innerbox_w, innerbox_h;		// widget's inner box (excludes scrollbars)
+      int innerchild_x, innerchild_y, innerchild_w, innerchild_h;	// widget's inner box including scrollbars
+      int child_l, child_r, child_b, child_t;				// child bounding box: left/right/bottom/top
+      int hneeded, vneeded;						// hor + ver scrollbar visibility
+      int hscroll_x, hscroll_y, hscroll_w, hscroll_h;			// hor scrollbar size/position
+      int vscroll_x, vscroll_y, vscroll_w, vscroll_h;			// ver scrollbar size/position
+      int hpos, hsize, hfirst, htotal;					// hor scrollbar values (pos/size/first/total)
+      int vpos, vsize, vfirst, vtotal;					// ver scrollbar values (pos/size/first/total)
+  } ScrollInfo;
+  void recalc_scrollbars(ScrollInfo &si);
+
+protected:
+
+  void bbox(int&,int&,int&,int&);
+  void draw();
+
+public:
+
+  Fl_Scrollbar scrollbar;
+  Fl_Scrollbar hscrollbar;
+
+  void resize(int,int,int,int);
+  int handle(int);
+
+  Fl_Scroll(int X,int Y,int W,int H,const char*l=0);
+
+  enum { // values for type()
+    HORIZONTAL = 1,
+    VERTICAL = 2,
+    BOTH = 3,
+    ALWAYS_ON = 4,
+    HORIZONTAL_ALWAYS = 5,
+    VERTICAL_ALWAYS = 6,
+    BOTH_ALWAYS = 7
+  };
+
+  /**    Gets the current horizontal scrolling position.  */
+  int xposition() const {return xposition_;}
+  /**    Gets the current vertical scrolling position.  */
+  int yposition() const {return yposition_;}
+  void scroll_to(int, int);
+  void clear();
+  /**
+    Gets the current size of the scrollbars' troughs, in pixels.
+
+    If this value is zero (default), this widget will use the 
+    fltk3::scrollbar_size() value as the scrollbar's width.
+  
+    \returns Scrollbar size in pixels, or 0 if the global fltk3::scrollsize() is being used.
+    \see fltk3::scrollbar_size(int)
+  */
+  int scrollbar_size() const {
+      return(scrollbar_size_);
+  }
+  /**
+    Sets the pixel size of the scrollbars' troughs to the \p size, in pixels.
+
+    Normally you should not need this method, and should use
+    fltk3::scrollbar_size(int) instead to manage the size of ALL 
+    your widgets' scrollbars. This ensures your application 
+    has a consistent UI, is the default behavior, and is normally
+    what you want.
+
+    Only use THIS method if you really need to override the global
+    scrollbar size. The need for this should be rare.
+    
+    Setting \p size to the special value of 0 causes the widget to
+    track the global fltk3::scrollbar_size(), which is the default.
+    
+    \param[in] size Sets the scrollbar size in pixels.\n
+                    If 0 (default), scrollbar size tracks the global fltk3::scrollbar_size()
+    \see fltk3::scrollbar_size()
+  */
+  void scrollbar_size(int size) {
+      if ( size != scrollbar_size_ ) redraw();
+      scrollbar_size_ = size;
+  }   
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Scroll.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Scrollbar.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Scrollbar.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Scrollbar.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,120 @@
+//
+// "$Id: Fl_Scrollbar.H 6683 2009-03-14 11:46:43Z engelsman $"
+//
+// Scroll bar header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Scrollbar widget . */
+
+#ifndef Fl_Scrollbar_H
+#define Fl_Scrollbar_H
+
+#include "Fl_Slider.H"
+
+/**
+  The Fl_Scrollbar widget displays a slider with arrow buttons at
+  the ends of the scrollbar. Clicking on the arrows move up/left and
+  down/right by linesize(). Scrollbars also accept FL_SHORTCUT events:
+  the arrows move by linesize(), and vertical scrollbars take Page
+  Up/Down (they move by the page size minus linesize()) and Home/End
+  (they jump to the top or bottom).
+
+  Scrollbars have step(1) preset (they always return integers). If
+  desired you can set the step() to non-integer values. You will then
+  have to use casts to get at the floating-point versions of value()
+  from Fl_Slider.
+
+  \image html  scrollbar.gif 
+  \image latex scrollbar.eps "Fl_Scrollbar" width=4cm
+*/
+class FL_EXPORT Fl_Scrollbar : public Fl_Slider {
+
+  int linesize_;
+  int pushed_;
+  static void timeout_cb(void*);
+  void increment_cb();
+protected:
+  void draw();
+
+public:
+
+  Fl_Scrollbar(int X,int Y,int W,int H, const char *L = 0);
+  ~Fl_Scrollbar();
+  int handle(int);
+
+  /**
+    Gets the integer value (position) of the slider in the scrollbar.
+    You can get the floating point value with Fl_Slider::value().
+
+    \see Fl_Scrollbar::value(int p)
+    \see Fl_Scrollbar::value(int pos, int size, int first, int total)
+  */
+  int value() const {return int(Fl_Slider::value());}
+
+  /**
+    Sets the value (position) of the slider in the scrollbar.
+
+    \see Fl_Scrollbar::value()
+    \see Fl_Scrollbar::value(int pos, int size, int first, int total)
+  */
+  int value(int p) {return int(Fl_Slider::value((double)p));}
+
+  /**
+    Sets the position, size and range of the slider in the scrollbar.
+    \param[in] pos   position, first line displayed
+    \param[in] size  window size, number of lines displayed
+    \param[in] first number of first line
+    \param[in] total total number of lines
+
+    You should call this every time your window changes size, your data
+    changes size, or your scroll position changes (even if in response
+    to a callback from this scrollbar).
+    All necessary calls to redraw() are done.
+
+    Calls Fl_Slider::scrollvalue(int pos, int size, int first, int total).
+  */
+  int value(int pos, int size, int first, int total) {
+    return scrollvalue(pos, size, first, total);
+  }
+
+  /**
+    Get the size of step, in lines, that the arror keys move.
+  */
+  int linesize() const {return linesize_;}
+
+  /**
+    This number controls how big the steps are that the arrow keys do.
+    In addition page up/down move by the size last sent to value()
+    minus one linesize().  The default is 16.
+  */
+  void linesize(int i) {linesize_ = i;}
+
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Scrollbar.H 6683 2009-03-14 11:46:43Z engelsman $".
+//

Added: branches/branch-3.0/fltk3/Fl_Secret_Input.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Secret_Input.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Secret_Input.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,56 @@
+//
+// "$Id: Fl_Secret_Input.H 6614 2009-01-01 16:11:32Z matt $"
+//
+// Secret input header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Secret_Input widget . */
+
+#ifndef Fl_Secret_Input_H
+#define Fl_Secret_Input_H
+
+#include "Fl_Input.H"
+
+/**
+  The Fl_Secret_Input class is a subclass of Fl_Input
+  that displays its input as a string of asterisks.  This subclass is
+  usually used to receive passwords and other "secret" information.
+*/
+class Fl_Secret_Input : public Fl_Input {
+public:
+  /**
+    Creates a new Fl_Secret_Input widget using the given
+    position, size, and label string. The default boxtype is FL_DOWN_BOX.
+    <P>Inherited destructor destroys the widget and any value associated with it.
+  */
+  Fl_Secret_Input(int X,int Y,int W,int H,const char *l = 0)
+    : Fl_Input(X,Y,W,H,l) {type(FL_SECRET_INPUT);}
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Secret_Input.H 6614 2009-01-01 16:11:32Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Select_Browser.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Select_Browser.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Select_Browser.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,60 @@
+//
+// "$Id: Fl_Select_Browser.H 6614 2009-01-01 16:11:32Z matt $"
+//
+// Select browser header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Select_Browser widget . */
+
+#ifndef Fl_Select_Browser_H
+#define Fl_Select_Browser_H
+
+#include "Fl_Browser.H"
+
+/**
+  The class is a subclass of Fl_Browser
+  which lets the user select a single item, or no items by clicking on
+  the empty space.  As long as the mouse button is held down on an 
+  unselected item it is highlighted. Normally the callback is done when the
+  user presses the mouse, but you can change this with when().
+  <P>See Fl_Browser for  methods to add and remove lines from the browser.
+*/
+class Fl_Select_Browser : public Fl_Browser {
+public:
+  /** 
+    Creates a new Fl_Select_Browser widget using the given
+    position, size, and label string. The default boxtype is FL_DOWN_BOX.
+    The constructor specializes Fl_Browser() by setting the type to FL_SELECT_BROWSER.
+    The destructor destroys the widget and frees all memory that has been allocated.
+  */
+  Fl_Select_Browser(int X,int Y,int W,int H,const char *l=0)
+	: Fl_Browser(X,Y,W,H,l) {type(FL_SELECT_BROWSER);}
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Select_Browser.H 6614 2009-01-01 16:11:32Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Shared_Image.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Shared_Image.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Shared_Image.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,110 @@
+//
+// "$Id: Fl_Shared_Image.H 6614 2009-01-01 16:11:32Z matt $"
+//
+// Shared image header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Shared_Image class . */
+
+#ifndef Fl_Shared_Image_H
+#  define Fl_Shared_Image_H
+
+#  include "Fl_Image.H"
+
+
+// Test function for adding new formats
+typedef Fl_Image *(*Fl_Shared_Handler)(const char *name, uchar *header,
+                                       int headerlen);
+
+// Shared images class. 
+/**
+  This class supports caching, loading,
+  and drawing of image files. Most applications will also want to
+  link against the fltk_images library and call the
+  fl_register_images()
+  function to support standard image formats such as BMP, GIF, JPEG, and PNG.
+*/
+class FL_EXPORT Fl_Shared_Image : public Fl_Image {
+  protected:
+
+  static Fl_Shared_Image **images_;	// Shared images
+  static int	num_images_;		// Number of shared images
+  static int	alloc_images_;		// Allocated shared images
+  static Fl_Shared_Handler *handlers_;	// Additional format handlers
+  static int	num_handlers_;		// Number of format handlers
+  static int	alloc_handlers_;	// Allocated format handlers
+
+  const char	*name_;			// Name of image file
+  int		original_;		// Original image?
+  int		refcount_;		// Number of times this image has been used
+  Fl_Image	*image_;		// The image that is shared
+  int		alloc_image_;		// Was the image allocated?
+
+  static int	compare(Fl_Shared_Image **i0, Fl_Shared_Image **i1);
+
+  // Use get() and release() to load/delete images in memory...
+  Fl_Shared_Image();
+  Fl_Shared_Image(const char *n, Fl_Image *img = 0);
+  virtual ~Fl_Shared_Image();
+  void add();
+  void update();
+
+  public:
+  /** Returns the filename of the shared image */
+  const char	*name() { return name_; }
+  /** Returns the number of references of this shared image. When reference is below 1, the image is deleted. */
+  int		refcount() { return refcount_; }
+  void		release();
+  void		reload();
+
+  virtual Fl_Image *copy(int W, int H);
+  Fl_Image *copy() { return copy(w(), h()); }
+  virtual void color_average(Fl_Color c, float i);
+  virtual void desaturate();
+  virtual void draw(int X, int Y, int W, int H, int cx, int cy);
+  void draw(int X, int Y) { draw(X, Y, w(), h(), 0, 0); }
+  virtual void uncache();
+
+  static Fl_Shared_Image *find(const char *n, int W = 0, int H = 0);
+  static Fl_Shared_Image *get(const char *n, int W = 0, int H = 0);
+  static Fl_Shared_Image **images();
+  static int		num_images();
+  static void		add_handler(Fl_Shared_Handler f);
+  static void		remove_handler(Fl_Shared_Handler f);
+};
+
+//
+// The following function is provided in the fltk_images library and
+// registers all of the "extra" image file formats that are not part
+// of the core FLTK library...
+//
+
+FL_EXPORT extern void fl_register_images();
+
+#endif // !Fl_Shared_Image_H
+
+//
+// End of "$Id: Fl_Shared_Image.H 6614 2009-01-01 16:11:32Z matt $"
+//

Added: branches/branch-3.0/fltk3/Fl_Simple_Counter.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Simple_Counter.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Simple_Counter.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,50 @@
+//
+// "$Id: Fl_Simple_Counter.H 6614 2009-01-01 16:11:32Z matt $"
+//
+// Simple counter header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Simple_Counter widget . */
+
+#ifndef Fl_Simple_Counter_H
+#define Fl_Simple_Counter_H
+
+#include "Fl_Counter.H"
+/** 
+  This widget creates a counter with only 2 arrow buttons 
+  <P align=center>\image html counter.gif</P> 
+  \image latex  counter.eps "Fl_Simple_Counter" width=4cm
+*/
+class Fl_Simple_Counter : public Fl_Counter {
+public:
+    Fl_Simple_Counter(int x,int y,int w,int h, const char *l = 0)
+	: Fl_Counter(x,y,w,h,l) {type(FL_SIMPLE_COUNTER);}
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Simple_Counter.H 6614 2009-01-01 16:11:32Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Single_Window.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Single_Window.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Single_Window.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,67 @@
+//
+// "$Id: Fl_Single_Window.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// Single-buffered window header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Single_Window class . */
+
+#ifndef Fl_Single_Window_H
+#define Fl_Single_Window_H
+
+#include "Fl_Window.H"
+
+/**
+  This is the same as fltk3::Window.  However, it is possible that
+  some implementations will provide double-buffered windows by default.
+  This subcan be used to force single-buffering.  This may be
+  useful for modifying existing programs that use incremental update, or
+  for some types of image data, such as a movie flipbook.
+*/
+class FL_EXPORT Fl_Single_Window : public fltk3::Window {
+public:
+  void show();
+  void show(int a, char **b) {fltk3::Window::show(a,b);}
+  void flush();
+   /**
+    Creates a new Fl_Single_Window widget using the given
+    size, and label (title) string.
+  */
+  Fl_Single_Window(int W, int H, const char *l=0)
+  : fltk3::Window(W,H,l) {}
+  /**
+    Creates a new Fl_Single_Window widget using the given
+    position, size, and label (title) string.
+  */
+  Fl_Single_Window(int X, int Y, int W, int H, const char *l=0)
+  : fltk3::Window(X,Y,W,H,l) {}
+  int make_current();
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Single_Window.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Slider.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Slider.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Slider.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,120 @@
+//
+// "$Id: Fl_Slider.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// Slider header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Slider widget . */
+
+#ifndef Fl_Slider_H
+#define Fl_Slider_H
+
+#ifndef Fl_Valuator_H
+#include "Fl_Valuator.H"
+#endif
+
+// values for type(), lowest bit indicate horizontal:
+#define FL_VERT_SLIDER		0
+#define FL_HOR_SLIDER		1
+#define FL_VERT_FILL_SLIDER	2
+#define FL_HOR_FILL_SLIDER	3
+#define FL_VERT_NICE_SLIDER	4
+#define FL_HOR_NICE_SLIDER	5
+
+/**
+  The Fl_Slider widget contains a sliding knob inside a box. It if
+  often used as a scrollbar.  Moving the box all the way to the
+  top/left sets it to the minimum(), and to the bottom/right to the
+  maximum().  The minimum() may be greater than the maximum() to
+  reverse the slider direction.
+
+  Use void fltk3::Widget::type(int) to set how the slider is drawn, 
+  which can be one of the following:
+  
+  \li FL_VERTICAL - Draws a vertical slider (this is the default).
+  \li FL_HORIZONTAL - Draws a horizontal slider.
+  \li FL_VERT_FILL_SLIDER - Draws a filled vertical slider,
+      useful as a progress or value meter.
+  \li FL_HOR_FILL_SLIDER - Draws a filled horizontal  slider,
+      useful as a progress or value meter.
+  \li FL_VERT_NICE_SLIDER - Draws a vertical slider with  a nice
+      looking control knob.
+  \li FL_HOR_NICE_SLIDER - Draws a horizontal slider with  a
+      nice looking control knob.
+
+  \image html  slider.gif 
+  \image latex slider.eps "Fl_Slider" width=4cm
+*/
+class FL_EXPORT Fl_Slider : public Fl_Valuator {
+
+  float slider_size_;
+  uchar slider_;
+  void _Fl_Slider();
+  void draw_bg(int, int, int, int);
+
+protected:
+
+  // these allow subclasses to put the slider in a smaller area:
+  void draw(int, int, int, int);
+  int handle(int, int, int, int, int);
+  void draw();
+
+public:
+
+  int handle(int);
+  Fl_Slider(int X,int Y,int W,int H, const char *L = 0);
+  Fl_Slider(uchar t,int X,int Y,int W,int H, const char *L);
+
+  int scrollvalue(int pos,int size,int first,int total);
+  void bounds(double a, double b);
+
+  /**
+    Get the dimensions of the moving piece of slider.
+  */
+  float slider_size() const {return slider_size_;}
+
+  /**
+    Set the dimensions of the moving piece of slider. This is
+    the fraction of the size of the entire widget. If you set this
+    to 1 then the slider cannot move.  The default value is .08.
+
+    For the "fill" sliders this is the size of the area around the
+    end that causes a drag effect rather than causing the slider to
+    jump to the mouse.
+  */
+  void slider_size(double v);
+
+  /** Gets the slider box type. */
+  Fl_Boxtype slider() const {return (Fl_Boxtype)slider_;}
+
+  /** Sets the slider box type. */
+  void slider(Fl_Boxtype c) {slider_ = c;}
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Slider.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Spinner.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Spinner.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Spinner.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,266 @@
+//
+// "$Id: Fl_Spinner.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// Spinner widget for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Spinner widget . */
+
+#ifndef Fl_Spinner_H
+#  define Fl_Spinner_H
+
+//
+// Include necessary headers...
+//
+
+#  include <fltk3/Enumerations.H>
+#  include <fltk3/Fl_Group.H>
+#  include <fltk3/Fl_Input.H>
+#  include <fltk3/Fl_Repeat_Button.H>
+#  include <stdio.h>
+#  include <stdlib.h>
+
+
+/**
+  This widget is a combination of the input
+  widget and repeat buttons. The user can either type into the
+  input area or use the buttons to change the value.
+*/
+class Fl_Spinner : public fltk3::Group
+{
+  double	value_;			// Current value
+  double	minimum_;		// Minimum value
+  double	maximum_;		// Maximum value
+  double	step_;			// Amount to add/subtract for up/down
+  const char	*format_;		// Format string
+
+  Fl_Input	input_;			// Input field for the value
+  Fl_Repeat_Button
+		up_button_,		// Up button
+		down_button_;		// Down button
+
+
+  static void	sb_cb(fltk3::Widget *w, Fl_Spinner *sb) {
+		  double v;		// New value
+
+		  if (w == &(sb->input_)) {
+		    // Something changed in the input field...
+		    v = atof(sb->input_.value());
+
+		    if (v < sb->minimum_) {
+		      sb->value_ = sb->minimum_;
+		      sb->update();
+		    } else if (v > sb->maximum_) {
+		      sb->value_ = sb->maximum_;
+		      sb->update();
+		    } else sb->value_ = v;
+		  } else if (w == &(sb->up_button_)) {
+		    // Up button pressed...
+		    v = sb->value_ + sb->step_;
+
+		    if (v > sb->maximum_) sb->value_ = sb->minimum_;
+		    else sb->value_ = v;
+
+		    sb->update();
+		  } else if (w == &(sb->down_button_)) {
+		    // Down button pressed...
+		    v = sb->value_ - sb->step_;
+
+		    if (v < sb->minimum_) sb->value_ = sb->maximum_;
+		    else sb->value_ = v;
+
+		    sb->update();
+		  }
+
+		  sb->do_callback();
+		}
+  void		update() {
+		  char s[255];		// Value string
+
+                  if (format_[0]=='%'&&format_[1]=='.'&&format_[2]=='*') {  // precision argument
+                    // this code block is a simplified version of
+                    // Fl_Valuator::format() and works well (but looks ugly)
+                    int c = 0;
+                    char temp[64], *sp = temp;
+                    sprintf(temp, "%.12f", step_);
+                    while (*sp) sp++;
+                    sp--;
+                    while (sp>temp && *sp=='0') sp--;
+                    while (sp>temp && (*sp>='0' && *sp<='9')) { sp--; c++; }
+		    sprintf(s, format_, c, value_);
+                  } else {
+		    sprintf(s, format_, value_);
+                  }
+		  input_.value(s);
+		}
+
+  public:
+
+		/**
+		  Creates a new Fl_Spinner widget using the given position, size,
+		  and label string.
+		  <P>Inherited destructor Destroys the widget and any value associated with it.
+		*/
+		Fl_Spinner(int X, int Y, int W, int H, const char *L = 0)
+  : fltk3::Group(X, Y, W, H, L),
+		    input_(X, Y, W - H / 2 - 2, H),
+		    up_button_(X + W - H / 2 - 2, Y, H / 2 + 2, H / 2, "@-42<"),
+		    down_button_(X + W - H / 2 - 2, Y + H - H / 2,
+		                 H / 2 + 2, H / 2, "@-42>") {
+		  end();
+
+		  value_   = 1.0;
+		  minimum_ = 1.0;
+		  maximum_ = 100.0;
+		  step_    = 1.0;
+		  format_  = "%g";
+
+		  align(FL_ALIGN_LEFT);
+
+		  input_.value("1");
+		  input_.type(FL_INT_INPUT);
+		  input_.when(FL_WHEN_ENTER_KEY | FL_WHEN_RELEASE);
+		  input_.callback((Fl_Callback *)sb_cb, this);
+
+		  up_button_.callback((Fl_Callback *)sb_cb, this);
+
+		  down_button_.callback((Fl_Callback *)sb_cb, this);
+		}
+
+  /** Sets or returns the format string for the value. */
+  const char	*format() { return (format_); }
+  /** Sets or returns the format string for the value. */
+  void		format(const char *f) { format_ = f; update(); }
+
+  int		handle(int event) {
+		  switch (event) {
+		    case FL_KEYDOWN :
+		    case FL_SHORTCUT :
+		      if (fltk3::event_key() == FL_Up) {
+			up_button_.do_callback();
+			return 1;
+		      } else if (fltk3::event_key() == FL_Down) {
+			down_button_.do_callback();
+			return 1;
+		      } else return 0;
+
+		    case FL_FOCUS :
+		      if (input_.take_focus()) return 1;
+		      else return 0;
+		  }
+
+    return fltk3::Group::handle(event);
+		}
+
+  /** Speling mistakes retained for source compatibility \deprecated */
+  double	maxinum() const { return (maximum_); }
+  /** Gets the maximum value of the widget. */
+  double	maximum() const { return (maximum_); }
+  /** Sets the maximum value of the widget. */
+  void		maximum(double m) { maximum_ = m; }
+  /** Speling mistakes retained for source compatibility \deprecated */
+  double	mininum() const { return (minimum_); }
+  /** Gets the minimum value of the widget. */
+  double	minimum() const { return (minimum_); }
+  /** Sets the minimum value of the widget. */
+  void		minimum(double m) { minimum_ = m; }
+  /** Sets the minimum and maximum values for the widget. */
+  void		range(double a, double b) { minimum_ = a; maximum_ = b; }
+  void		resize(int X, int Y, int W, int H) {
+    fltk3::Group::resize(X,Y,W,H);
+
+		  input_.resize(X, Y, W - H / 2 - 2, H);
+		  up_button_.resize(X + W - H / 2 - 2, Y, H / 2 + 2, H / 2);
+		  down_button_.resize(X + W - H / 2 - 2, Y + H - H / 2,
+		                      H / 2 + 2, H / 2);
+		}
+  /**
+    Sets or returns the amount to change the value when the user clicks a button. 
+    Before setting step to a non-integer value, the spinner 
+    type() should be changed to floating point. 
+  */
+  double	step() const { return (step_); }
+  /** See double Fl_Spinner::step() const */
+  void		step(double s) {
+		  step_ = s;
+		  if (step_ != (int)step_) input_.type(FL_FLOAT_INPUT);
+		  else input_.type(FL_INT_INPUT);
+		  update();
+		}
+  /** Gets the color of the text in the input field. */
+  Fl_Color	textcolor() const {
+		  return (input_.textcolor());
+		}
+  /** Sets the color of the text in the input field. */
+  void		textcolor(Fl_Color c) {
+		  input_.textcolor(c);
+		}
+  /** Gets the font of the text in the input field. */
+  Fl_Font       textfont() const {
+		  return (input_.textfont());
+		}
+  /** Sets the font of the text in the input field. */
+  void		textfont(Fl_Font f) {
+		  input_.textfont(f);
+		}
+  /** Gets the size of the text in the input field. */
+  Fl_Fontsize  textsize() const {
+		  return (input_.textsize());
+		}
+  /** Sets the size of the text in the input field. */
+  void		textsize(Fl_Fontsize s) {
+		  input_.textsize(s);
+		}
+  /** Sets or Gets the numeric representation in the input field.
+    Valid values are FL_INT_INPUT and FL_FLOAT_INPUT.
+    The first form also changes the format() template.
+    Setting a new spinner type via a superclass pointer will not work.
+    \note  type is not a virtual function. 
+  */
+  uchar		type() const { return (input_.type()); }
+  /** See uchar	Fl_Spinner::type() const */
+  void		type(uchar v) { 
+                  if (v==FL_FLOAT_INPUT) {
+                    format("%.*f");
+                  } else {
+                    format("%.0f");
+                  }
+                  input_.type(v); 
+                }
+  /** Gets the current value of the widget. */
+  double	value() const { return (value_); }
+  /**
+    Sets the current value of the widget.
+    Before setting value to a non-integer value, the spinner 
+    type() should be changed to floating point. 
+  */
+  void		value(double v) { value_ = v; update(); }
+};
+
+#endif // !Fl_Spinner_H
+
+//
+// End of "$Id: Fl_Spinner.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Sys_Menu_Bar.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Sys_Menu_Bar.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Sys_Menu_Bar.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,77 @@
+//
+// "$Id: Fl_Sys_Menu_Bar.H 7351 2010-03-29 10:35:00Z matt $"
+//
+// MacOS system menu bar header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+#ifndef Fl_Sys_Menu_Bar_H
+#define Fl_Sys_Menu_Bar_H
+
+#include "Fl_Menu_Bar.H"
+#include "x.H"
+
+#if defined(__APPLE__) || defined(FL_DOXYGEN)
+
+/**
+ @brief A class to create, modify and delete menus that appear on Mac OS X in the menu bar at the top of the screen.
+ *
+ * On other than Mac OS X platforms, Fl_Sys_Menu_Bar is a synonym of class Fl_Menu_Bar.
+ */
+class FL_EXPORT Fl_Sys_Menu_Bar : public Fl_Menu_Bar {
+protected:
+  void draw();
+public:
+  /**
+   @brief The constructor.
+   *
+   * On Mac OS X, all arguments are unused. On other platforms they are used as by Fl_Menu_Bar::Fl_Menu_Bar().
+   */
+  Fl_Sys_Menu_Bar(int x,int y,int w,int h,const char *l=0)
+      : Fl_Menu_Bar(x,y,w,h,l) {
+    deactivate();			// don't let the old area take events
+    fl_sys_menu_bar = this;
+  }
+  void menu(const Fl_Menu_Item *m);
+  int add(const char* label, int shortcut, Fl_Callback*, void *user_data=0, int flags=0);
+  void remove(int n);
+  void replace(int rank, const char *name);
+#if ! defined(FL_DOXYGEN)
+  enum menuOrItemOperation { itemAtIndex, setKeyEquivalent, setKeyEquivalentModifierMask, setState, initWithTitle,
+    numberOfItems, setSubmenu, setEnabled, addSeparatorItem, setTitle, removeItem, addNewItem, renameItem };
+  // function doMenuOrItemOperation is in file Fl_cocoa.mm because it contains objective-c code
+  static void *doMenuOrItemOperation( menuOrItemOperation operation, ...);
+#endif
+};
+
+#else
+
+typedef Fl_Menu_Bar Fl_Sys_Menu_Bar;
+
+#endif // defined(__APPLE__) || defined(FL_DOXYGEN)
+
+#endif // Fl_Sys_Menu_Bar_H
+
+//
+// End of "$Id: Fl_Sys_Menu_Bar.H 7351 2010-03-29 10:35:00Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Table.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Table.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Table.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,1067 @@
+//
+// "$Id: Fl_Table.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// Fl_Table -- A table widget
+//
+// Copyright 2002 by Greg Ercolano.
+// Copyright (c) 2004 O'ksi'D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "erco at seriss dot com".
+//
+// TODO:
+//    o Auto scroll during dragged selection
+//    o Keyboard navigation (up/down/left/right arrow)
+//
+
+#ifndef _FL_TABLE_H
+#define _FL_TABLE_H
+
+#include <sys/types.h>
+#include <string.h>		// memcpy
+#ifdef WIN32
+#include <malloc.h>		// WINDOWS: malloc/realloc
+#else /*WIN32*/
+#include <stdlib.h>		// UNIX: malloc/realloc
+#endif /*WIN32*/
+
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Group.H>
+#include <fltk3/Fl_Scroll.H>
+#include <fltk3/Fl_Box.H>
+#include <fltk3/Fl_Scrollbar.H>
+
+/**
+ A table of widgets or other content.
+ 
+ This is the base class for table widgets.
+ 
+ To be useful it must be subclassed and several virtual functions defined.
+ Normally applications use widgets derived from this widget, and do not use this 
+ widget directly; this widget is usually too low level to be used directly by 
+ applications.
+ 
+ This widget does \em not handle the data in the table. The draw_cell()
+ method must be overridden by a subclass to manage drawing the contents of 
+ the cells.
+ 
+ This widget can be used in several ways:
+ 
+ - As a custom widget; see test/testtablerow.cxx. Very optimal for even 
+ extremely large tables.
+ - As a table made up of a single FLTK widget instanced all over the table;
+ see test/singleinput.cxx. Very optimal for even extremely large tables;
+ - As a regular container of FLTK widgets, one widget per cell.
+ See test/widgettable.cxx. \em Not recommended for large tables.
+ 
+ When acting as part of a custom widget, events on the cells and/or headings
+ generate callbacks when they are clicked by the user. You control when events 
+ are generated based on the setting for Fl_Table::when().
+ 
+ When acting as a container for FLTK widgets, the FLTK widgets maintain 
+ themselves. Although the draw_cell() method must be overridden, its contents 
+ can be very simple. See the draw_cell() code in test/widgettable.cxx.
+ 
+ The following variables are available to classes deriving from Fl_Table:
+ 
+ \image html table-dimensions.gif
+ 
+ <table border=0>
+ <tr><td>x()/y()/w()/h()</td>
+ <td>Fl_Table widget's outer dimension. The outer edge of the border of the 
+ Fl_Table. (Red in the diagram above)</td></tr>
+ 
+ <tr><td>wix/wiy/wiw/wih</td>
+ <td>Fl_Table widget's inner dimension. The inner edge of the border of the 
+ Fl_Table. eg. if the Fl_Table's box() is FL_NO_BOX, these values are the same 
+ as x()/y()/w()/h(). (Yellow in the diagram above)</td></tr>
+ 
+ <tr><td>tox/toy/tow/toh</td>
+ <td>The table's outer dimension. The outer edge of the border around the cells,
+ but inside the row/col headings and scrollbars. (Green in the diagram above)
+ </td></tr>
+ 
+ <tr><td>tix/tiy/tiw/tih</td>
+ <td>The table's inner dimension. The inner edge of the border around the cells,
+ but inside the row/col headings and scrollbars. AKA the table's clip region. 
+ eg. if the table_box() is FL_NO_BOX, these values are the same as
+ tox/toyy/tow/toh. (Blue in the diagram above)
+ </td></tr></table>
+ 
+ CORE DEVELOPERS
+ 
+ - Greg Ercolano : 12/16/2002 - initial implementation 12/16/02. Fl_Table, Fl_Table_Row, docs.
+ - Jean-Marc Lienher : 02/22/2004 - added keyboard nav + mouse selection, and ported Fl_Table into fltk-utf8-1.1.4
+ 
+ OTHER CONTRIBUTORS
+ 
+ - Inspired by the Feb 2000 version of FLVW's Flvw_Table widget. Mucho thanks to those folks.
+ - Mister Satan : 04/07/2003 - MinGW porting mods, and singleinput.cxx; a cool Fl_Input oriented spreadsheet example
+ - Marek Paliwoda : 01/08/2003 - Porting mods for Borland
+ - Ori Berger : 03/16/2006 - Optimizations for >500k rows/cols
+ 
+ LICENSE
+ 
+ Greg added the following license to the original distribution of Fl_Table. He 
+ kindly gave his permission to integrate Fl_Table and Fl_Table_row into FLTK,
+ allowing FLTK license to apply while his widgets are part of the library.
+ 
+ If used on its own, this is the license that applies:
+ 
+ Fl_Table License
+ December 16, 2002
+ 
+ The Fl_Table library and included programs are provided under the terms
+ of the GNU Library General Public License (LGPL) with the following
+ exceptions:
+ 
+ 1. Modifications to the Fl_Table configure script, config
+ header file, and makefiles by themselves to support
+ a specific platform do not constitute a modified or
+ derivative work.
+ 
+ The authors do request that such modifications be
+ contributed to the Fl_Table project - send all
+ contributions to "erco at seriss dot com".
+ 
+ 2. Widgets that are subclassed from Fl_Table widgets do not
+ constitute a derivative work.
+ 
+ 3. Static linking of applications and widgets to the
+ Fl_Table library does not constitute a derivative work
+ and does not require the author to provide source
+ code for the application or widget, use the shared
+ Fl_Table libraries, or link their applications or
+ widgets against a user-supplied version of Fl_Table.
+ 
+ If you link the application or widget to a modified
+ version of Fl_Table, then the changes to Fl_Table must be
+ provided under the terms of the LGPL in sections
+ 1, 2, and 4.
+ 
+ 4. You do not have to provide a copy of the Fl_Table license
+ with programs that are linked to the Fl_Table library, nor
+ do you have to identify the Fl_Table license in your
+ program or documentation as required by section 6
+ of the LGPL.
+ 
+ However, programs must still identify their use of Fl_Table.
+ The following example statement can be included in user
+ documentation to satisfy this requirement:
+ 
+ [program/widget] is based in part on the work of
+ the Fl_Table project http://seriss.com/people/erco/fltk/Fl_Table/
+ 
+ 
+ */
+class Fl_Table : public fltk3::Group {
+public:
+  enum TableContext {
+    CONTEXT_NONE       = 0,
+    CONTEXT_STARTPAGE  = 0x01,	// before a page is redrawn
+    CONTEXT_ENDPAGE    = 0x02,	// after a page is redrawn
+    CONTEXT_ROW_HEADER = 0x04,	// in the row header
+    CONTEXT_COL_HEADER = 0x08,	// in the col header
+    CONTEXT_CELL       = 0x10,	// in one of the cells
+    CONTEXT_TABLE      = 0x20,	// in the table
+    CONTEXT_RC_RESIZE  = 0x40 	// column or row being resized
+  };
+  
+private:
+  int _rows, _cols;	// total rows/cols
+  int _row_header_w;	// width of row header
+  int _col_header_h;	// height of column header
+  int _row_position;	// last row_position set (not necessarily == toprow!)
+  int _col_position;	// last col_position set (not necessarily == leftcol!)
+  
+  char _row_header;	// row header enabled?
+  char _col_header;	// col header enabled?
+  char _row_resize;	// row resizing enabled?
+  char _col_resize;	// col resizing enabled?
+  int _row_resize_min;	// row minimum resizing height (default=1)
+  int _col_resize_min;	// col minimum resizing width (default=1)
+  
+  // OPTIMIZATION: partial row/column redraw variables
+  int _redraw_toprow;
+  int _redraw_botrow;
+  int _redraw_leftcol;
+  int _redraw_rightcol;
+  Fl_Color _row_header_color;
+  Fl_Color _col_header_color;
+  
+  int _auto_drag;
+  int _selecting;
+  
+  // An STL-ish vector without templates
+  class IntVector {
+    int *arr;
+    unsigned int _size;
+    void init() {
+      arr = NULL;
+      _size = 0;
+    }
+    void copy(int *newarr, unsigned int newsize) {
+      size(newsize);
+      memcpy(arr, newarr, newsize * sizeof(int));
+    }
+  public:
+    IntVector() { init(); }					// CTOR
+    ~IntVector() { if ( arr ) free(arr); arr = NULL; }		// DTOR
+    IntVector(IntVector&o) { init(); copy(o.arr, o._size); }	// COPY CTOR
+    IntVector& operator=(IntVector&o) {				// ASSIGN
+      init();
+      copy(o.arr, o._size);
+      return(*this);
+    }
+    int operator[](int x) const { return(arr[x]); }
+    int& operator[](int x) { return(arr[x]); }
+    unsigned int size() { return(_size); }
+    void size(unsigned int count) {
+      if ( count != _size ) {
+        arr = (int*)realloc(arr, count * sizeof(int));
+        _size = count;
+      }
+    }
+    int pop_back() { int tmp = arr[_size-1]; _size--; return(tmp); }
+    void push_back(int val) { unsigned int x = _size; size(_size+1); arr[x] = val; }
+    int back() { return(arr[_size-1]); }
+  };
+  
+  IntVector _colwidths;			// column widths in pixels
+  IntVector _rowheights;		// row heights in pixels
+  
+  Fl_Cursor _last_cursor;		// last mouse cursor before changed to 'resize' cursor
+  
+  // EVENT CALLBACK DATA
+  TableContext _callback_context;	// event context
+  int _callback_row, _callback_col;	// event row/col
+  
+  // handle() state variables.
+  //    Put here instead of local statics in handle(), so more
+  //    than one Fl_Table can exist without crosstalk between them.
+  //
+  int _resizing_col;			// column being dragged
+  int _resizing_row;			// row being dragged
+  int _dragging_x;			// starting x position for horiz drag
+  int _dragging_y;			// starting y position for vert drag
+  int _last_row;			// last row we FL_PUSH'ed
+  
+  // Redraw single cell
+  void _redraw_cell(TableContext context, int R, int C);
+  
+  void _start_auto_drag();
+  void _stop_auto_drag();
+  void _auto_drag_cb();
+  static void _auto_drag_cb2(void *d);
+  
+protected:
+  enum ResizeFlag {
+    RESIZE_NONE      = 0,
+    RESIZE_COL_LEFT  = 1,
+    RESIZE_COL_RIGHT = 2,
+    RESIZE_ROW_ABOVE = 3,
+    RESIZE_ROW_BELOW = 4
+  };
+  
+  int table_w, table_h;				// table's virtual size (in pixels)
+  int toprow, botrow, leftcol, rightcol;	// four corners of viewable table
+  
+  // selection
+  int current_row, current_col;
+  int select_row, select_col;
+  
+  // OPTIMIZATION: Precomputed scroll positions for the toprow/leftcol
+  int toprow_scrollpos;
+  int leftcol_scrollpos;
+  
+  // Dimensions
+  int tix, tiy, tiw, tih;			// data table inner dimension xywh
+  int tox, toy, tow, toh;			// data table outer dimension xywh
+  int wix, wiy, wiw, wih;			// widget inner dimension xywh
+  
+  Fl_Scroll *table;				// container for child fltk widgets (if any)
+  Fl_Scrollbar *vscrollbar; 			// vertical scrollbar
+  Fl_Scrollbar *hscrollbar;			// horizontal scrollbar
+  
+  // Fltk
+  int handle(int e);				// fltk handle() override
+  
+  // Class maintenance
+  void recalc_dimensions();
+  void table_resized();				// table resized; recalc
+  void table_scrolled();			// table scrolled; recalc
+  void get_bounds(TableContext context,		// return x/y/w/h bounds for context
+                  int &X, int &Y, int &W, int &H);
+  void change_cursor(Fl_Cursor newcursor);	// change mouse cursor to some other shape
+  TableContext cursor2rowcol(int &R, int &C, ResizeFlag &resizeflag);
+  // find r/c given current x/y event
+  int find_cell(TableContext context,		// find cell's x/y/w/h given r/c
+                int R, int C, int &X, int &Y, int &W, int &H);
+  int row_col_clamp(TableContext context, int &R, int &C);
+  // clamp r/c to known universe
+  
+  /**
+   Subclass should override this method to handle drawing the cells.
+   
+   This method will be called whenever the table is redrawn, once per cell.
+   
+   Only cells that are completely (or partially) visible will be told to draw.
+   
+   \p context will be one of the following:
+   
+   <table border=1>
+   <tr>
+   <td>\p Fl_Table::CONTEXT_STARTPAGE</td>
+   <td> When table, or parts of the table, are about to be redrawn.
+   Use to initialize static data, such as font selections.
+   r/c will be zero, x/y/w/h will be the dimensions of the
+   table's entire data area.
+   (Useful for locking a database before accessing; see
+   also visible_cells())</td>
+   </tr><tr>
+   <td>\p Fl_Table::CONTEXT_ENDPAGE</td>
+   <td>When table has completed being redrawn.
+   r/c will be zero, x/y/w/h dimensions of table's data area.
+   (Useful for unlocking a database after accessing)</td>
+   </tr><tr>
+   <td>\p Fl_Table::CONTEXT_ROW_HEADER</td>
+   <td>Whenever a row header cell needs to be drawn.</td>
+   </tr><tr>
+   <td>\p Fl_Table::CONTEXT_COL_HEADER</td>
+   <td>Whenever a column header cell needs to be drawn.</td>
+   </tr><tr>
+   <td>\p Fl_Table::CONTEXT_CELL</td>
+   <td>Whenever a data cell in the table needs to be drawn.</td>
+   </tr><tr>
+   <td>\p Fl_Table::CONTEXT_RC_RESIZE</td>
+   <td>Whenever table or row/column is resized or scrolled,
+   either interactively or via col_width() or row_height().
+   
+   Useful for fltk containers that need to resize or move
+   the child fltk widgets.</td>
+   </tr>
+   </table>
+   
+   \p row and \p col will be set to the row and column number
+   the user clicked on. In the case of row headers, \p col will be \a 0.
+   In the case of column headers, \p row will be \a 0.
+   
+   <tt>x/y/w/h</tt> will be the position and dimensions of where the cell
+   should be drawn.
+   
+   In the case of custom widgets, a minimal draw_cell() override might
+   look like the following. With custom widgets it is up to the caller to handle
+   drawing everything within the dimensions of the cell, including handling the
+   selection color.  Note all clipping must be handled as well; this allows drawing
+   outside the dimensions of the cell if so desired for 'custom effects'.
+   
+   \code
+   // This is called whenever Fl_Table wants you to draw a cell
+   void MyTable::draw_cell(TableContext context, int R=0, int C=0, int X=0, int Y=0, int W=0, int H=0)
+   {
+   static char s[40];
+   sprintf(s, "%d/%d", R, C);              // text for each cell
+   switch ( context )
+   {
+   case CONTEXT_STARTPAGE:             // Fl_Table telling us its starting to draw page
+   fl_font(FL_HELVETICA, 16);
+   return;
+   
+   case CONTEXT_ROW_HEADER:            // Fl_Table telling us it's draw row/col headers
+   case CONTEXT_COL_HEADER:
+   fl_push_clip(X, Y, W, H);
+   {
+   fl_draw_box(FL_THIN_UP_BOX, X, Y, W, H, color());
+   fl_color(FL_BLACK);
+   fl_draw(s, X, Y, W, H, FL_ALIGN_CENTER);
+   }
+   fl_pop_clip();
+   return;
+   
+   case CONTEXT_CELL:                  // Fl_Table telling us to draw cells
+   fl_push_clip(X, Y, W, H);
+   {
+   // BG COLOR
+   fl_color( row_selected(R) ? selection_color() : FL_WHITE);
+   fl_rectf(X, Y, W, H);
+   
+   // TEXT
+   fl_color(FL_BLACK);
+   fl_draw(s, X, Y, W, H, FL_ALIGN_CENTER);
+   
+   // BORDER
+   fl_color(FL_LIGHT2);
+   fl_rect(X, Y, W, H);
+   }
+   fl_pop_clip();
+   return;
+   
+   default:
+   return;
+   }
+   //NOTREACHED
+   }
+   \endcode
+   */
+  virtual void draw_cell(TableContext context, int R=0, int C=0, 
+                         int X=0, int Y=0, int W=0, int H=0)
+  { }					// overridden by deriving class
+  
+  long row_scroll_position(int row);		// find scroll position of row (in pixels)
+  long col_scroll_position(int col);		// find scroll position of col (in pixels)
+  
+  int is_fltk_container() { 			// does table contain fltk widgets?
+    return( fltk3::Group::children() > 3 );		// (ie. more than box and 2 scrollbars?)
+  }
+  
+  static void scroll_cb(fltk3::Widget*,void*);	// h/v scrollbar callback
+  
+  void damage_zone(int r1, int c1, int r2, int c2, int r3 = 0, int c3 = 0);
+  
+  void redraw_range(int toprow, int botrow, int leftcol, int rightcol) {
+    if ( _redraw_toprow == -1 ) {
+      // Initialize redraw range
+      _redraw_toprow = toprow;
+      _redraw_botrow = botrow;
+      _redraw_leftcol = leftcol;
+      _redraw_rightcol = rightcol;
+    } else {
+      // Extend redraw range
+      if ( toprow < _redraw_toprow ) _redraw_toprow = toprow;
+      if ( botrow > _redraw_botrow ) _redraw_botrow = botrow;
+      if ( leftcol < _redraw_leftcol ) _redraw_leftcol = leftcol;
+      if ( rightcol > _redraw_rightcol ) _redraw_rightcol = rightcol;
+    }
+    
+    // Indicate partial redraw needed of some cells
+    damage(FL_DAMAGE_CHILD);
+  }
+  
+public:
+  /**
+   The constructor for the Fl_Table.
+   This creates an empty table with no rows or columns,
+   with headers and row/column resize behavior disabled.
+   */
+  Fl_Table(int X, int Y, int W, int H, const char *l=0);
+  
+  /**
+   The destructor for the Fl_Table.
+   Destroys the table and its associated widgets.
+   */
+  ~Fl_Table();
+  
+  /**
+   Clears the table to zero rows, zero columns.
+   Same as rows(0); cols(0);
+   \see rows(int), cols(int)
+   */
+  virtual void clear() { rows(0); cols(0); }
+  
+  // topline()
+  // middleline()
+  // bottomline()
+  
+  /**
+   Sets the kind of box drawn around the data table,
+   the default being FL_NO_BOX. Changing this value will cause the table
+   to redraw.
+   */
+  inline void table_box(Fl_Boxtype val) {
+    table->box(val);
+    table_resized();
+  }
+  
+  /**
+   Returns the current box type used for the data table.
+   */
+  inline Fl_Boxtype table_box( void ) {
+    return(table->box());
+  }
+  
+  /**
+   Sets the number of rows in the table, and the table is redrawn.
+   */
+  virtual void rows(int val);			// set/get number of rows
+  
+  /**
+   Returns the number of rows in the table.
+   */
+  inline int rows() {
+    return(_rows);
+  }
+  
+  /**
+   Set the number of columns in the table and redraw.
+   */
+  virtual void cols(int val);			// set/get number of columns
+  
+  /** 
+   Get the number of columns in the table.
+   */
+  inline int cols() {
+    return(_cols);
+  }
+  
+  /**
+   Returns the range of row and column numbers for all the
+   visible (and partially visible) cells in the table.
+   
+   These values can be used e.g. by your draw_cell() routine during
+   CONTEXT_STARTPAGE to figure out what cells are about to be redrawn,
+   for the purposes of locking the data from a database before it's drawn.
+   
+   \code
+   leftcol             rightcol
+   :                   :
+   toprow .. .-------------------.
+   |                   |
+   |  V I S I B L E    |
+   |                   |
+   |    T A B L E      |
+   |                   |
+   botrow .. '-------------------`
+   \endcode
+   
+   e.g. in a table where the visible rows are 5-20, and the
+   visible columns are 100-120, then those variables would be:
+   
+   - toprow = 5
+   - botrow = 20
+   - leftcol = 100
+   - rightcol = 120
+   */
+  inline void visible_cells(int& r1, int& r2, int& c1, int& c2) {
+    r1 = toprow;
+    r2 = botrow;
+    c1 = leftcol;
+    c2 = rightcol;
+  } 
+  
+  /**
+   Returns 1 if someone is interactively resizing a row or column.
+   You can currently call this only from within your callback().
+   */
+  int is_interactive_resize() {
+    return(_resizing_row != -1 || _resizing_col != -1);
+  } 
+  
+  /**
+   Returns the current value of this flag.
+   */
+  inline int row_resize() {
+    return(_row_resize);
+  }
+  
+  /**
+   Allows/disallows row resizing by the user.
+   1=allow interactive resizing, 0=disallow interactive resizing.
+   Since interactive resizing is done via the row headers,
+   row_header() must also be enabled to allow resizing.
+   */   
+  void row_resize(int flag) {			// enable row resizing
+    _row_resize = flag;
+  }
+  
+  /**
+   Returns the current value of this flag.
+   */
+  inline int col_resize() {
+    return(_col_resize);
+  }
+  /**
+   Allows/disallows column resizing by the user.
+   1=allow interactive resizing, 0=disallow interactive resizing.
+   Since interactive resizing is done via the column headers,
+   \p col_header() must also be enabled to allow resizing.
+   */
+  void col_resize(int flag) {			// enable col resizing
+    _col_resize = flag;
+  }
+  
+  /**
+   Sets the current column minimum resize value.
+   This is used to prevent the user from interactively resizing
+   any column to be smaller than 'pixels'. Must be a value >=1.
+   */
+  inline int col_resize_min() {			// column minimum resizing width
+    return(_col_resize_min);
+  }
+  
+  /**
+   Returns the current column minimum resize value.
+   */
+  void col_resize_min(int val) {
+    _col_resize_min = ( val < 1 ) ? 1 : val;
+  } 
+  
+  /**
+   Returns the current row minimum resize value.
+   */
+  inline int row_resize_min() {			// column minimum resizing width
+    return(_row_resize_min);
+  }
+  
+  /**
+   Sets the current row minimum resize value.
+   This is used to prevent the user from interactively resizing
+   any row to be smaller than 'pixels'. Must be a value >=1.
+   */
+  void row_resize_min(int val) {
+    _row_resize_min = ( val < 1 ) ? 1 : val;
+  }
+  
+  /**
+   Returns the value of this flag.
+   */
+  inline int row_header() {			// set/get row header enable flag
+    return(_row_header);
+  }
+  
+  /**
+   Enables/disables showing the row headers. 1=enabled, 0=disabled.
+   If changed, the table is redrawn.
+   */
+  void row_header(int flag) {
+    _row_header = flag;
+    table_resized();
+    redraw();
+  }
+  
+  /**
+   Returns if column headers are enabled or not.
+   */
+  inline int col_header() {			// set/get col header enable flag
+    return(_col_header);
+  }
+  
+  /**
+   Enable or disable column headers.
+   If changed, the table is redrawn.
+   */
+  void col_header(int flag) {
+    _col_header = flag;
+    table_resized();
+    redraw();
+  }
+  
+  /**
+   Sets the height in pixels for column headers and redraws the table.
+   */
+  inline void col_header_height(int height) {	// set/get col header height
+    _col_header_h = height;
+    table_resized();
+    redraw();
+  }
+  
+  /**
+   Gets the column header height.
+   */
+  inline int col_header_height() {
+    return(_col_header_h);
+  }
+  
+  /**
+   Sets the row header width to n and causes the screen to redraw.
+   */
+  inline void row_header_width(int width) {	// set/get row header width
+    _row_header_w = width;
+    table_resized();
+    redraw();
+  }
+  
+  /**
+   Returns the current row header width (in pixels).
+   */
+  inline int row_header_width() {
+    return(_row_header_w);
+  }
+  
+  /**
+   Sets the row header color and causes the screen to redraw.
+   */
+  inline void row_header_color(Fl_Color val) {	// set/get row header color
+    _row_header_color = val;
+    redraw();
+  }
+  
+  /**
+   Returns the current row header color.
+   */
+  inline Fl_Color row_header_color() {
+    return(_row_header_color);
+  } 
+  
+  /**
+   Sets the color for column headers and redraws the table.
+   */
+  inline void col_header_color(Fl_Color val) {	// set/get col header color
+    _col_header_color = val;
+    redraw();
+  }
+  
+  /**
+   Gets the color for column headers.
+   */
+  inline Fl_Color col_header_color() {
+    return(_col_header_color);
+  }
+  
+  /**
+   Sets the height of the specified row in pixels,
+   and the table is redrawn.
+   callback() will be invoked with CONTEXT_RC_RESIZE
+   if the row's height was actually changed, and when() is FL_WHEN_CHANGED.
+   */
+  void row_height(int row, int height);		// set/get row height
+  
+  /**
+   Returns the current height of the specified row as a value in pixels.
+   */
+  inline int row_height(int row) {
+    return((row<0 || row>=(int)_rowheights.size()) ? 0 : _rowheights[row]);
+  }
+  
+  /**
+   Sets the width of the specified column in pixels, and the table is redrawn.
+   callback() will be invoked with CONTEXT_RC_RESIZE
+   if the column's width was actually changed, and when() is FL_WHEN_CHANGED.
+   */   
+  void col_width(int col, int width);		// set/get a column's width
+  
+  /**
+   Returns the current width of the specified column in pixels.
+   */
+  inline int col_width(int col) {
+    return((col<0 || col>=(int)_colwidths.size()) ? 0 : _colwidths[col]);
+  }
+  
+  /**
+   Convenience method to set the height of all rows to the
+   same value, in pixels. The screen is redrawn.
+   */
+  void row_height_all(int height) {		// set all row/col heights
+    for ( int r=0; r<rows(); r++ ) {
+      row_height(r, height);
+    }
+  }
+  
+  /**
+   Convenience method to set the width of all columns to the
+   same value, in pixels. The screen is redrawn.
+   */
+  void col_width_all(int width) {
+    for ( int c=0; c<cols(); c++ ) {
+      col_width(c, width);
+    }
+  }
+  
+  /**
+   Sets the row scroll position to 'row', and causes the screen to redraw.
+   */
+  void row_position(int row);			// set/get table's current scroll position
+  
+  /** 
+   Sets the column scroll position to column 'col', and causes the screen to redraw.
+   */
+  void col_position(int col);
+  
+  /**
+   Returns the current row scroll position as a row number.
+   */
+  int row_position() {				// current row position
+    return(_row_position);
+  }
+  
+  /**
+   Returns the current column scroll position as a column number.
+   */
+  int col_position() {				// current col position
+    return(_col_position);
+  }
+  
+  /**
+   Sets which row should be at the top of the table,
+   scrolling as necessary, and the table is redrawn. If the table
+   cannot be scrolled that far, it is scrolled as far as possible.
+   */
+  inline void top_row(int row) {		// set/get top row (deprecated)
+    row_position(row);
+  }
+  
+  /**
+   Returns the current top row shown in the table.
+   This row may be partially obscured.
+   */
+  inline int top_row() {
+    return(row_position());
+  }
+  int is_selected(int r, int c);		// selected cell
+  void get_selection(int& s_top, int& s_left, int& s_bottom, int& s_right);
+  void set_selection(int s_top, int s_left, int s_bottom, int s_right);
+  int move_cursor(int R, int C);
+  
+  /**
+   Changes the size of the Fl_Table, causing it to redraw.
+   */
+  void resize(int X, int Y, int W, int H);	// fltk resize() override
+  void draw(void);				// fltk draw() override
+  
+  // This crashes sortapp() during init.
+  //  void box(Fl_Boxtype val) {
+  //    fltk3::Group::box(val);
+  //    if ( table ) {
+  //      resize(x(), y(), w(), h());
+  //    }
+  //  }
+  //  Fl_Boxtype box(void) const {
+  //    return(fltk3::Group::box());
+  //  }
+  
+  // Child group
+  void init_sizes() {
+    table->init_sizes();
+    table->redraw();
+  }
+  void add(fltk3::Widget& w) {
+    table->add(w);
+  }
+  void add(fltk3::Widget* w) {
+    table->add(w);
+  }
+  void insert(fltk3::Widget& w, int n) {
+    table->insert(w,n);
+  }
+  void insert(fltk3::Widget& w, fltk3::Widget* w2) {
+    table->insert(w,w2);
+  }
+  void remove(fltk3::Widget& w) {
+    table->remove(w);
+  }
+  void begin() {
+    table->begin();
+  }
+  void end() {
+    table->end();
+    // HACK: Avoid showing Fl_Scroll; seems to erase screen
+    //       causing unnecessary flicker, even if its box() is FL_NO_BOX.
+    //
+    if ( table->children() > 2 ) {
+      table->show();
+    } else {
+      table->hide();
+    } 
+    fltk3::Group::current(fltk3::Group::parent());
+  }
+  fltk3::Widget * const *array() {
+    return(table->array());
+  }
+  
+  /**
+   Returns the child widget by an index.
+   
+   When using the Fl_Table as a container for FLTK widgets, this method returns 
+   the widget pointer from the internal array of widgets in the container.
+   
+   Typically used in loops, eg:
+   \code
+   for ( int i=0; i<children(); i++ )
+   {
+   fltk3::Widget *w = child(i);
+   [..]
+   }
+   \endcode
+   */
+  fltk3::Widget *child(int n) const {
+    return(table->child(n));
+  }
+  
+  /**
+   Returns the number of children in the table.
+   
+   When using the Fl_Table as a container for FLTK widgets, this method returns 
+   how many child widgets the table has.
+   
+   \see child(int)
+   */
+  int children() const {
+    return(table->children()-2);    // -2: skip Fl_Scroll's h/v scrollbar widgets
+  }
+  int find(const fltk3::Widget *w) const {
+    return(table->find(w));
+  }
+  int find(const fltk3::Widget &w) const {
+    return(table->find(w));
+  } 
+  // CALLBACKS
+  
+  /**
+   * Returns the current row the event occurred on.
+   *
+   * This function should only be used from within the user's callback function
+   */
+  int callback_row() {
+    return(_callback_row);
+  }
+  
+  /**
+   * Returns the current column the event occurred on.
+   *
+   * This function should only be used from within the user's callback function
+   */
+  int callback_col() {
+    return(_callback_col);
+  }
+  
+  /**
+   * Returns the current 'table context'.
+   *
+   * This function should only be used from within the user's callback function
+   */
+  TableContext callback_context() {
+    return(_callback_context);
+  }
+  
+  void do_callback(TableContext context, int row, int col) {
+    _callback_context = context;
+    _callback_row = row;
+    _callback_col = col;
+    fltk3::Widget::do_callback();
+  }
+  
+#if DOXYGEN
+  /**
+   The fltk3::Widget::when() function is used to set a group of flags, determining
+   when the widget callback is called:
+   
+   <table border=1>
+   <tr>
+   <td>\p FL_WHEN_CHANGED</td>
+   <td>
+   callback() will be called when rows or columns are resized (interactively or 
+   via col_width() or row_height()), passing CONTEXT_RC_RESIZE via 
+   callback_context().
+   </td>
+   </tr><tr>
+   <td>\p FL_WHEN_RELEASE</td>
+   <td>
+   callback() will be called during FL_RELEASE events, such as when someone 
+   releases a mouse button somewhere on the table.
+   </td>
+   </tr>
+   </table>
+   
+   The callback() routine is sent a TableContext that indicates the context the 
+   event occurred in, such as in a cell, in a header, or elsewhere on the table.  
+   When an event occurs in a cell or header, callback_row() and 
+   callback_col() can be used to determine the row and column. The callback can 
+   also look at the regular fltk event values (ie. fltk3::event() and fltk3::button()) 
+   to determine what kind of event is occurring.
+   */
+  void when(Fl_When flags);
+#endif
+  
+#if DOXYGEN
+  /**
+   Callbacks will be called depending on the setting of fltk3::Widget::when().
+   
+   Callback functions should use the following functions to determine the 
+   context/row/column:
+   
+   * Fl_Table::callback_row() returns current row
+   * Fl_Table::callback_col() returns current column
+   * Fl_Table::callback_context() returns current table context
+   
+   callback_row() and callback_col() will be set to the row and column number the 
+   event occurred on. If someone clicked on a row header, \p col will be \a 0.  
+   If someone clicked on a column header, \p row will be \a 0.
+   
+   callback_context() will return one of the following:
+   
+   <table border=1>
+   <tr><td><tt>Fl_Table::CONTEXT_ROW_HEADER</tt></td>
+   <td>Someone clicked on a row header. Excludes resizing.</td>
+   </tr><tr>
+   <td><tt>Fl_Table::CONTEXT_COL_HEADER</tt></td>
+   <td>Someone clicked on a column header. Excludes resizing.</td>
+   </tr><tr>
+   <td><tt>Fl_Table::CONTEXT_CELL</tt></td>
+   <td>
+   Someone clicked on a cell.
+   
+   To receive callbacks for FL_RELEASE events, you must set
+   when(FL_WHEN_RELEASE).
+   </td>
+   </tr><tr>
+   <td><tt>Fl_Table::CONTEXT_RC_RESIZE</tt></td>
+   <td>
+   Someone is resizing rows/columns either interactively,
+   or via the col_width() or row_height() API.
+   
+   Use is_interactive_resize()
+   to determine interactive resizing.
+   
+   If resizing a column, R=0 and C=column being resized.
+   
+   If resizing a row, C=0 and R=row being resized.
+   
+   NOTE: To receive resize events, you must set when(FL_WHEN_CHANGED).
+   </td>
+   </tr>
+   </table>
+   
+   \code
+   class MyTable
+   {
+   [..]
+   private:
+   // Handle events that happen on the table
+   void event_callback2()
+   {
+   int R = callback_row(),                     // row where event occurred
+   C = callback_col();                         // column where event occurred
+   TableContext context = callback_context();  // which part of table
+   fprintf(stderr, "callback: Row=%d Col=%d Context=%d Event=%d\n",
+   R, C, (int)context, (int)fltk3::event());
+   }
+   
+   // Actual static callback
+   static void event_callback(fltk3::Widget*, void* data)
+   {
+   MyTable *o = (MyTable*)data;
+   o-&gt;event_callback2();
+   }
+   
+   public:
+   MyTable()                      // Constructor
+   {
+   [..]
+   table.callback(&event_callback, (void*)this);       // setup callback
+   table.when(FL_WHEN_CHANGED|FL_WHEN_RELEASE);        // when to call it
+   }
+   };
+   \endcode
+   */
+  void callback(fltk3::Widget*, void*);
+#endif
+};
+
+#endif /*_FL_TABLE_H*/
+
+//
+// End of "$Id: Fl_Table.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Table_Row.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Table_Row.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Table_Row.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,213 @@
+//
+// "$Id: Fl_Table_Row.H 6942 2009-11-18 12:22:51Z AlbrechtS $"
+//
+
+#ifndef _FL_TABLE_ROW_H
+#define _FL_TABLE_ROW_H
+
+//
+// Fl_Table_Row -- A row oriented table widget
+//
+//    A class specializing in a table of rows.
+//    Handles row-specific selection behavior.
+//
+// Copyright 2002 by Greg Ercolano.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "erco at seriss dot com".
+//
+//
+
+#include "Fl_Table.H"
+
+/**
+ A table with row selection capabilities.
+ 
+ This class implements a simple table of rows and columns that specializes in 
+ the selection of rows. This widget is similar in behavior to a "mail subject 
+ browser", similar to that found in mozilla, netscape and outlook mail browsers.
+ 
+ Most methods of importance will be found in the Fl_Table widget, such as 
+ Fl_Table::rows() and Fl_Table::cols().
+ 
+ To be useful it must be subclassed and at minimum the draw_cell()
+ method must be overridden to provide the content of the cells. This widget
+ does \em not manage the cell's data content; it is up to the parent
+ class's draw_cell() method override to provide this.
+ 
+ Events on the cells and/or headings generate callbacks when they are 
+ clicked by the user.  You control when events are generated based on
+ the values you supply for Fl_Table::when().
+ */
+class Fl_Table_Row : public Fl_Table {
+public:
+  enum TableRowSelectMode {
+    SELECT_NONE,		// no selection allowed
+    SELECT_SINGLE,		// single row selection
+    SELECT_MULTI		// multiple row selection (default)
+  }; 
+private:
+  // An STL-ish vector without templates
+  class CharVector {
+    char *arr;
+    int _size;
+    void init() {
+      arr = NULL;
+      _size = 0;
+    }
+    void copy(char *newarr, int newsize) {
+      size(newsize);
+      memcpy(arr, newarr, newsize * sizeof(char));
+    }
+  public:
+    CharVector() {				// CTOR
+      init();
+    }
+    ~CharVector() {				// DTOR
+      if ( arr ) free(arr);
+      arr = NULL;
+    }
+    CharVector(CharVector&o) {			// COPY CTOR
+      init();
+      copy(o.arr, o._size);
+    }
+    CharVector& operator=(CharVector&o) {	// ASSIGN
+      init();
+      copy(o.arr, o._size);
+      return(*this);
+    }
+    char operator[](int x) const {
+      return(arr[x]);
+    }
+    char& operator[](int x) {
+      return(arr[x]);
+    }
+    int size() {
+      return(_size);
+    }
+    void size(int count) {
+      if ( count != _size ) {
+        arr = (char*)realloc(arr, count * sizeof(char));
+        _size = count;
+      }
+    }
+    char pop_back() {
+      char tmp = arr[_size-1];
+      _size--;
+      return(tmp);
+    }
+    void push_back(char val) {
+      int x = _size;
+      size(_size+1);
+      arr[x] = val;
+    }
+    char back() {
+      return(arr[_size-1]);
+    }
+  };
+  CharVector _rowselect;		// selection flag for each row
+  
+  // handle() state variables.
+  //    Put here instead of local statics in handle(), so more
+  //    than one instance can exist without crosstalk between.
+  //
+  int _dragging_select;		// dragging out a selection?
+  int _last_row;
+  int _last_y;			// last event's Y position
+  int _last_push_x;		// last PUSH event's X position
+  int _last_push_y;		// last PUSH event's Y position
+  
+  TableRowSelectMode _selectmode;
+  
+protected:
+  int handle(int event);
+  int find_cell(TableContext context,		// find cell's x/y/w/h given r/c
+                int R, int C, int &X, int &Y, int &W, int &H) {
+    return(Fl_Table::find_cell(context, R, C, X, Y, W, H));
+  }
+  
+public:
+  /**
+   The constructor for the Fl_Table_Row.
+   This creates an empty table with no rows or columns,
+   with headers and row/column resize behavior disabled.
+   */   
+  Fl_Table_Row(int X, int Y, int W, int H, const char *l=0) : Fl_Table(X,Y,W,H,l) {
+    _dragging_select = 0;
+    _last_row        = -1;
+    _last_y          = -1;
+    _last_push_x     = -1;
+    _last_push_y     = -1;
+    _selectmode      = SELECT_MULTI;
+  }
+  
+  /**
+   The destructor for the Fl_Table_Row.
+   Destroys the table and its associated widgets.
+   */
+  ~Fl_Table_Row() { }
+  
+  void rows(int val);			// set number of rows
+  int rows() {				// get number of rows
+    return(Fl_Table::rows());
+  }
+  
+  /**
+   Sets the table selection mode.
+   
+   - \p Fl_Table_Row::SELECT_NONE - No selection allowed
+   - \p Fl_Table_Row::SELECT_SINGLE - Only single rows can be selected
+   - \p Fl_Table_Row::SELECT_MULTI - Multiple rows can be selected
+   */
+  void type(TableRowSelectMode val);	// set selection mode
+  
+  TableRowSelectMode type() const {	// get selection mode
+    return(_selectmode);
+  }
+  
+  /**
+   Checks to see if 'row' is selected. Returns 1 if selected, 0 if not. You can
+   change the selection of a row by clicking on it, or by using
+   select_row(row, flag)
+   */
+  int row_selected(int row);		// is row selected? (0=no, 1=yes, -1=range err)
+  
+  /**
+   Changes the selection state for 'row', depending on the value
+   of 'flag'.  0=deselected, 1=select, 2=toggle existing state.
+   */
+  int select_row(int row, int flag=1);	// select state for row: flag:0=off, 1=on, 2=toggle
+  // returns: 0=no change, 1=changed, -1=range err
+  
+  /**
+   This convenience function changes the selection state 
+   for \em all rows based on 'flag'. 0=deselect, 1=select, 2=toggle existing state.
+   */
+  void select_all_rows(int flag=1);	// all rows to a known state
+  
+  void clear() {
+    rows(0);		// implies clearing selection
+    cols(0);
+    Fl_Table::clear();	// clear the table
+  }
+};
+
+#endif /*_FL_TABLE_ROW_H*/
+
+//
+// End of "$Id: Fl_Table_Row.H 6942 2009-11-18 12:22:51Z AlbrechtS $".
+//

Added: branches/branch-3.0/fltk3/Fl_Tabs.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Tabs.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Tabs.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,86 @@
+//
+// "$Id: Fl_Tabs.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// Tab header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Tabs widget . */
+
+#ifndef Fl_Tabs_H
+#define Fl_Tabs_H
+
+#include "Fl_Group.H"
+
+/**
+  The Fl_Tabs widget is the "file card tabs"
+  interface that allows you to put lots and lots of buttons and
+  switches in a panel, as popularized by many toolkits.
+  
+  \image html  tabs.gif
+  \image latex tabs.eps "Fl_Tabs" width=8cm
+  
+  Clicking the tab makes a child visible() by calling
+  show() on it, and all other children are made invisible
+  by calling hide() on them. Usually the children are fltk3::Group widgets
+  containing several widgets themselves.
+  
+  Each child makes a card, and its label() is printed
+  on the card tab, including the label font and style.  The
+  selection color of that child is used to color the tab, while
+  the color of the child determines the background color of the pane.
+  
+  The size of the tabs is controlled by the bounding box of the
+  children (there should be some space between the children and
+  the edge of the Fl_Tabs), and the tabs may be placed
+  "inverted" on the bottom - this is determined by which
+  gap is larger. It is easiest to lay this out in fluid, using the
+  fluid browser to select each child group and resize them until
+  the tabs look the way you want them to.
+*/
+class FL_EXPORT Fl_Tabs : public fltk3::Group {
+  fltk3::Widget *value_;
+  fltk3::Widget *push_;
+  int tab_positions(int*, int*);
+  int tab_height();
+  void draw_tab(int x1, int x2, int W, int H, fltk3::Widget* o, int sel=0);
+protected:
+  void redraw_tabs();
+  void draw();
+
+public:
+  int handle(int);
+  fltk3::Widget *value();
+  int value(fltk3::Widget *);
+  fltk3::Widget *push() const {return push_;}
+  int push(fltk3::Widget *);
+  Fl_Tabs(int,int,int,int,const char * = 0);
+  fltk3::Widget *which(int event_x, int event_y);
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Tabs.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Text_Buffer.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Text_Buffer.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Text_Buffer.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,326 @@
+//
+// "$Id: Fl_Text_Buffer.H 6822 2009-07-04 00:24:26Z fabien $"
+//
+// Header file for Fl_Text_Buffer class.
+//
+// Copyright 2001-2009 by Bill Spitzak and others.
+// Original code Copyright Mark Edel.  Permission to distribute under
+// the LGPL for the FLTK library granted by Mark Edel.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Text_Buffer, Fl_Text_Selection widget . */
+
+#ifndef FL_TEXT_BUFFER_H
+#define FL_TEXT_BUFFER_H
+
+/* Maximum length in characters of a tab or control character expansion
+   of a single buffer character */
+#define FL_TEXT_MAX_EXP_CHAR_LEN 20
+
+#include "Fl_Export.H"
+
+/** \class Fl_Text_Selection
+    This is an internal class for Fl_Text_Buffer to manage text selections.
+    
+    \todo	members must be documented
+ */
+class FL_EXPORT Fl_Text_Selection {
+  friend class Fl_Text_Buffer;
+
+  public:
+    void set(int start, int end);
+    void set_rectangular(int start, int end, int rectStart, int rectEnd);
+    void update(int pos, int nDeleted, int nInserted);
+    char rectangular() const { return mRectangular; }
+    int start() const { return mStart; }
+    int end() const { return mEnd; }
+    int rect_start() const { return mRectStart; }
+    int rect_end() const { return mRectEnd; }
+    /**
+       Returns a non-zero number if any text has been selected, or 0
+       if no text is selected.
+    */
+    char selected() const { return mSelected; }
+    void selected(char b) { mSelected = b; }
+    int includes(int pos, int lineStartPos, int dispIndex) const;
+    int position(int* start, int* end) const;
+    int position(int* start, int* end, int* isRect, int* rectStart, int* rectEnd) const;
+
+
+  protected:
+    char mSelected;
+    char mRectangular;
+    int mStart;
+    int mEnd;
+    int mRectStart;
+    int mRectEnd;
+};
+
+typedef void (*Fl_Text_Modify_Cb)(int pos, int nInserted, int nDeleted,
+                                  int nRestyled, const char* deletedText,
+                                  void* cbArg);
+typedef void (*Fl_Text_Predelete_Cb)(int pos, int nDeleted, void* cbArg);
+
+/**
+  The Fl_Text_Buffer class is used by the Fl_Text_Display
+  and Fl_Text_Editor to manage complex text data and is based upon the
+  excellent NEdit text editor engine - see http://www.nedit.org/.
+*/
+/**
+  The Fl_Text_Buffer class is used by the 
+  Fl_Text_Display
+  and 
+  Fl_Text_Editor
+  to manage complex text data and is based upon the
+  excellent NEdit text editor engine - see
+  http://www.nedit.org/.
+*/
+class FL_EXPORT Fl_Text_Buffer {
+  public:
+    Fl_Text_Buffer(int requestedSize = 0, int preferredGapSize = 1024);
+    ~Fl_Text_Buffer();
+
+  /**    Returns the number of characters in the buffer.  */
+    int length() const { return mLength; }
+    char* text() const;
+    void text(const char* text);
+    char* text_range(int start, int end) const;
+    char character(int pos) const;
+    char* text_in_rectangle(int start, int end, int rectStart, int rectEnd) const;
+    void insert(int pos, const char* text);
+  /**    Appends the text string to the end of the buffer.  */
+    void append(const char* t) { insert(length(), t); }
+    void remove(int start, int end);
+    void replace(int start, int end, const char *text);
+    void copy(Fl_Text_Buffer* fromBuf, int fromStart, int fromEnd, int toPos);
+    int undo(int *cp=0);
+    void canUndo(char flag=1);
+    int insertfile(const char *file, int pos, int buflen = 128*1024);
+    /**
+      Appends the named file to the end of the buffer. Returns 0 on 
+      success, non-zero on error (strerror() contains reason).  1 indicates 
+      open for read failed (no data loaded). 2 indicates error occurred 
+      while reading data (data was partially loaded).
+    */
+    int appendfile(const char *file, int buflen = 128*1024)
+      { return insertfile(file, length(), buflen); }
+    /** Loads a text file into the buffer */
+    int loadfile(const char *file, int buflen = 128*1024)
+      { select(0, length()); remove_selection(); return appendfile(file, buflen); }
+    int outputfile(const char *file, int start, int end, int buflen = 128*1024);
+    /** Saves a text file from the current buffer */
+    int savefile(const char *file, int buflen = 128*1024)
+      { return outputfile(file, 0, length(), buflen); }
+
+    void insert_column(int column, int startPos, const char* text,
+                       int* charsInserted, int* charsDeleted);
+
+    void replace_rectangular(int start, int end, int rectStart, int rectEnd,
+                             const char* text);
+
+    void overlay_rectangular(int startPos, int rectStart, int rectEnd,
+                             const char* text, int* charsInserted,
+                             int* charsDeleted);
+
+    void remove_rectangular(int start, int end, int rectStart, int rectEnd);
+    void clear_rectangular(int start, int end, int rectStart, int rectEnd);
+    /** Gets the tab width.  */
+    int tab_distance() const { return mTabDist; }
+    void tab_distance(int tabDist);
+    void select(int start, int end);
+    /** Returns a non 0 value if text has been selected, 0 otherwise */
+    int selected() const { return mPrimary.selected(); }
+    void unselect();
+    void select_rectangular(int start, int end, int rectStart, int rectEnd);
+    int selection_position(int* start, int* end);
+
+    int selection_position(int* start, int* end, int* isRect, int* rectStart,
+                           int* rectEnd);
+
+    char* selection_text();
+    void remove_selection();
+    void replace_selection(const char* text);
+    void secondary_select(int start, int end);
+     /** Returns a non 0 value if text has been selected in the secondary
+       text selection, 0 otherwise */
+    int secondary_selected() { return mSecondary.selected(); }
+     /** Clears any selection in the secondary text selection object. */
+    void secondary_unselect();
+
+    void secondary_select_rectangular(int start, int end, int rectStart,
+                                      int rectEnd);
+
+    int secondary_selection_position(int* start, int* end);
+    int secondary_selection_position(int* start, int* end, int* isRect,
+                                     int* rectStart, int* rectEnd);
+
+    char* secondary_selection_text();
+    void remove_secondary_selection();
+    void replace_secondary_selection(const char* text);
+    void highlight(int start, int end);
+    /**
+      Returns the highlighted text. When you are done with the
+      text, free it using the free() function.
+    */
+    int highlight() { return mHighlight.selected(); }
+    void unhighlight();
+    void highlight_rectangular(int start, int end, int rectStart, int rectEnd);
+
+    int highlight_position(int* start, int* end);
+    int highlight_position(int* start, int* end, int* isRect, int* rectStart,
+                           int* rectEnd);
+
+    char* highlight_text();
+    void add_modify_callback(Fl_Text_Modify_Cb bufModifiedCB, void* cbArg);
+    void remove_modify_callback(Fl_Text_Modify_Cb bufModifiedCB, void* cbArg);
+
+    /**
+       Calls all modify callbacks that have been registered using
+       the add_modify_callback()
+       method.
+    */
+    void call_modify_callbacks() { call_modify_callbacks(0, 0, 0, 0, 0); }
+
+    void add_predelete_callback(Fl_Text_Predelete_Cb bufPredelCB, void* cbArg);
+    void remove_predelete_callback(Fl_Text_Predelete_Cb predelCB, void* cbArg);
+
+   /**
+     Calls the stored pre-delete callback procedure(s) for this buffer to update 
+     the changed area(s) on the screen and any other listeners.
+   */
+   void call_predelete_callbacks() { call_predelete_callbacks(0, 0); }
+
+    char* line_text(int pos) const;
+    int line_start(int pos) const;
+    int line_end(int pos) const;
+    int word_start(int pos) const;
+    int word_end(int pos) const;
+    int expand_character(int pos, int indent, char *outStr) const;
+
+    static int expand_character(char c, int indent, char* outStr, int tabDist,
+                                char nullSubsChar);
+
+    static int character_width(char c, int indent, int tabDist, char nullSubsChar);
+    int count_displayed_characters(int lineStartPos, int targetPos) const;
+    int skip_displayed_characters(int lineStartPos, int nChars);
+    int count_lines(int startPos, int endPos) const;
+    int skip_lines(int startPos, int nLines);
+    int rewind_lines(int startPos, int nLines);
+    int findchar_forward(int startPos, char searchChar, int* foundPos) const;
+    int findchar_backward(int startPos, char searchChar, int* foundPos) const;
+    int findchars_forward(int startPos, const char* searchChars, int* foundPos) const;
+    int findchars_backward(int startPos, const char* searchChars, int* foundPos) const;
+
+    int search_forward(int startPos, const char* searchString, int* foundPos,
+                       int matchCase = 0) const;
+
+    int search_backward(int startPos, const char* searchString, int* foundPos,
+                        int matchCase = 0) const;
+
+    int substitute_null_characters(char* string, int length);
+    void unsubstitute_null_characters(char* string);
+    /**    Returns the current nul substitution character.  */
+    char null_substitution_character() const { return mNullSubsChar; }
+    /**    Returns the primary selection.  */
+    const Fl_Text_Selection* primary_selection() const { return &mPrimary; }
+    /**    Returns the primary selection.  */
+    Fl_Text_Selection* primary_selection() { return &mPrimary; }
+    /**    Returns the secondary selection.  */
+    const Fl_Text_Selection* secondary_selection() const { return &mSecondary; }
+    /**    Returns the current highlight selection.  */
+    const Fl_Text_Selection* highlight_selection() const { return &mHighlight; }
+
+  protected:
+    void call_modify_callbacks(int pos, int nDeleted, int nInserted,
+                               int nRestyled, const char* deletedText) const;
+    void call_predelete_callbacks(int pos, int nDeleted) const;
+
+    int insert_(int pos, const char* text);
+    void remove_(int start, int end);
+
+    void remove_rectangular_(int start, int end, int rectStart, int rectEnd,
+                             int* replaceLen, int* endPos);
+
+    void insert_column_(int column, int startPos, const char* insText,
+                        int* nDeleted, int* nInserted, int* endPos);
+
+    void overlay_rectangular_(int startPos, int rectStart, int rectEnd,
+                              const char* insText, int* nDeleted,
+                              int* nInserted, int* endPos);
+
+    void redisplay_selection(Fl_Text_Selection* oldSelection,
+                             Fl_Text_Selection* newSelection) const;
+
+    void move_gap(int pos);
+    void reallocate_with_gap(int newGapStart, int newGapLen);
+    char* selection_text_(Fl_Text_Selection* sel) const;
+    void remove_selection_(Fl_Text_Selection* sel);
+    void replace_selection_(Fl_Text_Selection* sel, const char* text);
+
+    void rectangular_selection_boundaries(int lineStartPos, int rectStart,
+                                          int rectEnd, int* selStart,
+                                          int* selEnd) const;
+
+    void update_selections(int pos, int nDeleted, int nInserted);
+
+    Fl_Text_Selection mPrimary;   /**< highlighted areas */
+    Fl_Text_Selection mSecondary; /**< highlighted areas */
+    Fl_Text_Selection mHighlight; /**< highlighted areas */
+    int mLength;                /**< length of the text in the buffer (the length
+                                   of the buffer itself must be calculated:
+                                   gapEnd - gapStart + length) */
+    char* mBuf;                 /**< allocated memory where the text is stored */
+    int mGapStart;              /**< points to the first character of the gap */
+    int mGapEnd;                /**< points to the first char after the gap */
+    // The hardware tab distance used by all displays for this buffer,
+    // and used in computing offsets for rectangular selection operations.
+    int mTabDist;               /**< equiv. number of characters in a tab */
+    int mUseTabs;               /**< True if buffer routines are allowed to use
+                                   tabs for padding in rectangular operations */
+    int mNModifyProcs;          /**< number of modify-redisplay procs attached */
+    Fl_Text_Modify_Cb*          /**< procedures to call when buffer is */
+    mModifyProcs;               /**< modified to redisplay contents */
+    void** mCbArgs;             /**< caller arguments for modifyProcs above */
+    int mNPredeleteProcs;	/**< number of pre-delete procs attached */
+    Fl_Text_Predelete_Cb*	/**< procedure to call before text is deleted */
+	 mPredeleteProcs;	/**< from the buffer; at most one is supported. */
+    void **mPredeleteCbArgs;	/**< caller argument for pre-delete proc above */
+    int mCursorPosHint;         /**< hint for reasonable cursor position after
+                                   a buffer modification operation */
+    char mNullSubsChar;         /**< NEdit is based on C null-terminated strings,
+                                   so ascii-nul characters must be substituted
+                                   with something else.  This is the else, but
+                                   of course, things get quite messy when you
+                                   use it */
+    char mCanUndo;		/**< if this buffer is used for attributes, it must
+				   not do any undo calls */
+    int mPreferredGapSize;	/**< the default allocation for the text gap is 1024
+                                   bytes and should only be increased if frequent
+                                   and large changes in buffer size are expected */
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Text_Buffer.H 6822 2009-07-04 00:24:26Z fabien $".
+//

Added: branches/branch-3.0/fltk3/Fl_Text_Display.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Text_Display.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Text_Display.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,344 @@
+//
+// "$Id: Fl_Text_Display.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// Header file for Fl_Text_Display class.
+//
+// Copyright 2001-2009 by Bill Spitzak and others.
+// Original code Copyright Mark Edel.  Permission to distribute under
+// the LGPL for the FLTK library granted by Mark Edel.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Text_Display widget . */
+
+#ifndef FL_TEXT_DISPLAY_H
+#define FL_TEXT_DISPLAY_H
+
+#include "fl_draw.H"
+#include "Fl_Group.H"
+#include "Fl_Widget.H"
+#include "Fl_Scrollbar.H"
+#include "Fl_Text_Buffer.H"
+
+/**
+  This is the FLTK text display widget. It allows the user to
+  view multiple lines of text and supports highlighting and
+  scrolling. The buffer that is displayed in the widget is managed
+  by the Fl_Text_Buffer
+  class.
+*/
+class FL_EXPORT Fl_Text_Display: public fltk3::Group {
+  public:
+    /** text display cursor shapes enumeration */
+    enum {
+      NORMAL_CURSOR, CARET_CURSOR, DIM_CURSOR,
+      BLOCK_CURSOR, HEAVY_CURSOR
+    };
+
+    enum {
+      CURSOR_POS, CHARACTER_POS
+    };
+
+    /** drag types- they match fltk3::event_clicks() so that single clicking to
+        start a collection selects by character, double clicking selects by
+        word and triple clicking selects by line.
+    */
+    enum {
+      DRAG_CHAR = 0, DRAG_WORD = 1, DRAG_LINE = 2
+    };
+    friend void fl_text_drag_me(int pos, Fl_Text_Display* d);
+
+    typedef void (*Unfinished_Style_Cb)(int, void *);
+
+    /** style attributes - currently not implemented! */
+    enum {
+      ATTR_NONE = 0,
+      ATTR_UNDERLINE = 1,
+      ATTR_HIDDEN = 2
+    };
+    /** This structure associates the color,font,size of a string to draw
+        with an attribute mask matching attr */
+    struct Style_Table_Entry {
+      Fl_Color	color;
+      Fl_Font	font;
+      int	size;
+      unsigned	attr;
+    };
+
+    Fl_Text_Display(int X, int Y, int W, int H, const char *l = 0);
+    ~Fl_Text_Display();
+
+    virtual int handle(int e);
+    void buffer(Fl_Text_Buffer* buf);
+  /**
+      Sets or gets the current text buffer associated with the text widget.
+    Multiple text widgets can be associated with the same text buffer.
+  */
+    void buffer(Fl_Text_Buffer& buf) { buffer(&buf); }
+    /**
+      Gets the current text buffer associated with the text widget.
+      Multiple text widgets can be associated with the same text buffer.
+    */
+    Fl_Text_Buffer* buffer() const { return mBuffer; }
+    void redisplay_range(int start, int end);
+    void scroll(int topLineNum, int horizOffset);
+    void insert(const char* text);
+    void overstrike(const char* text);
+    void insert_position(int newPos);
+    /** Gets the position of the text insertion cursor for text display */
+    int insert_position() const { return mCursorPos; }
+    int in_selection(int x, int y) const;
+    void show_insert_position();
+    int move_right();
+    int move_left();
+    int move_up();
+    int move_down();
+    int count_lines(int start, int end, bool start_pos_is_line_start) const;
+    int line_start(int pos) const;
+    int line_end(int pos, bool start_pos_is_line_start) const;
+    int skip_lines(int startPos, int nLines, bool startPosIsLineStart);
+    int rewind_lines(int startPos, int nLines);
+    void next_word(void);
+    void previous_word(void);
+    void show_cursor(int b = 1);
+    /**    Hides the text cursor */
+    void hide_cursor() { show_cursor(0); }
+    void cursor_style(int style);
+    /**    Sets or gets the text cursor color.  */
+    Fl_Color cursor_color() const {return mCursor_color;}
+    /**    Sets or gets the text cursor color.  */
+    void cursor_color(Fl_Color n) {mCursor_color = n;}
+    /**    Sets or gets the width/height of the scrollbars.  */
+    int scrollbar_width() const { return scrollbar_width_; }
+    /**    Sets or gets the width/height of the scrollbars.  */
+    void scrollbar_width(int W) { scrollbar_width_ = W; }
+    /**    Gets the scrollbar alignment type */
+    Fl_Align scrollbar_align() const { return scrollbar_align_; }
+    /**    Sets the scrollbar alignment type */
+    void scrollbar_align(Fl_Align a) { scrollbar_align_ = a; }
+    /**    Moves the insert position to the beginning of the current word.  */
+    int word_start(int pos) const { return buffer()->word_start(pos); }
+    /**    Moves the insert position to the end of the current word.  */
+    int word_end(int pos) const { return buffer()->word_end(pos); }
+
+    
+    void highlight_data(Fl_Text_Buffer *styleBuffer,
+                        const Style_Table_Entry *styleTable,
+                        int nStyles, char unfinishedStyle,
+                        Unfinished_Style_Cb unfinishedHighlightCB,
+                        void *cbArg);
+
+    int position_style(int lineStartPos, int lineLen, int lineIndex,
+                       int dispIndex) const;
+    /** \todo FIXME : get set methods pointing on shortcut_ 
+     have no effects as shortcut_ is unused in this class and derived! */
+    int shortcut() const {return shortcut_;}
+    /** \todo FIXME : get set methods pointing on shortcut_ 
+     have no effects as shortcut_ is unused in this class and derived! */
+    void shortcut(int s) {shortcut_ = s;}
+
+    /**    Gets the default font used when drawing text in the widget.  */
+    Fl_Font textfont() const {return textfont_;}
+    /**    Sets the default font used when drawing text in the widget.  */
+    void textfont(Fl_Font s) {textfont_ = s;}
+    /**    Gets the default size of text in the widget.  */
+    Fl_Fontsize textsize() const {return textsize_;}
+    /**    Sets the default size of text in the widget.  */
+    void textsize(Fl_Fontsize s) {textsize_ = s;}
+    /**    Gets the default color of text in the widget.  */
+    Fl_Color textcolor() const {return textcolor_;}
+    /**    Sets the default color of text in the widget.  */
+    void textcolor(Fl_Color n) {textcolor_ = n;}
+
+    int wrapped_column(int row, int column) const;
+    int wrapped_row(int row) const;
+    void wrap_mode(int wrap, int wrap_margin);
+
+    virtual void resize(int X, int Y, int W, int H);
+
+  protected:
+    // Most (all?) of this stuff should only be called from resize() or
+    // draw().
+    // Anything with "vline" indicates thats it deals with currently
+    // visible lines.
+
+    virtual void draw();
+    void draw_text(int X, int Y, int W, int H);
+    void draw_range(int start, int end);
+    void draw_cursor(int, int);
+
+    void draw_string(int style, int x, int y, int toX, const char *string,
+                     int nChars);
+
+    void draw_vline(int visLineNum, int leftClip, int rightClip,
+                    int leftCharIndex, int rightCharIndex);
+
+    void draw_line_numbers(bool clearAll);
+
+    void clear_rect(int style, int x, int y, int width, int height);
+    void display_insert();
+
+    void offset_line_starts(int newTopLineNum);
+
+    void calc_line_starts(int startLine, int endLine);
+
+    void update_line_starts(int pos, int charsInserted, int charsDeleted,
+                            int linesInserted, int linesDeleted, int *scrolled);
+
+    void calc_last_char();
+
+    int position_to_line( int pos, int* lineNum ) const;
+    int string_width(const char* string, int length, int style) const;
+
+    static void scroll_timer_cb(void*);
+
+    static void buffer_predelete_cb(int pos, int nDeleted, void* cbArg);
+    static void buffer_modified_cb(int pos, int nInserted, int nDeleted,
+                                   int nRestyled, const char* deletedText,
+                                   void* cbArg);
+
+    static void h_scrollbar_cb(Fl_Scrollbar* w, Fl_Text_Display* d);
+    static void v_scrollbar_cb( Fl_Scrollbar* w, Fl_Text_Display* d);
+    void update_v_scrollbar();
+    void update_h_scrollbar();
+    int measure_vline(int visLineNum) const;
+    int longest_vline() const;
+    int empty_vlines() const;
+    int vline_length(int visLineNum) const;
+    int xy_to_position(int x, int y, int PosType = CHARACTER_POS) const;
+
+    void xy_to_rowcol(int x, int y, int* row, int* column,
+                      int PosType = CHARACTER_POS) const;
+
+    int position_to_xy(int pos, int* x, int* y) const;
+    void maintain_absolute_top_line_number(int state);
+    int get_absolute_top_line_number() const;
+    void absolute_top_line_number(int oldFirstChar);
+    int maintaining_absolute_top_line_number() const;
+    void reset_absolute_top_line_number();
+    int position_to_linecol(int pos, int* lineNum, int* column) const;
+    void scroll_(int topLineNum, int horizOffset);
+
+    void extend_range_for_styles(int* start, int* end);
+
+    void find_wrap_range(const char *deletedText, int pos, int nInserted,
+                           int nDeleted, int *modRangeStart, int *modRangeEnd,
+                           int *linesInserted, int *linesDeleted);
+    void measure_deleted_lines(int pos, int nDeleted);
+    void wrapped_line_counter(Fl_Text_Buffer *buf, int startPos, int maxPos,
+                               int maxLines, bool startPosIsLineStart,
+                               int styleBufOffset, int *retPos, int *retLines,
+                               int *retLineStart, int *retLineEnd,
+                               bool countLastLineMissingNewLine = true) const;
+    void find_line_end(int pos, bool start_pos_is_line_start, int *lineEnd,
+                         int *nextLineStart) const;
+    int measure_proportional_character(char c, int colNum, int pos) const;
+    int wrap_uses_character(int lineEndPos) const;
+    int range_touches_selection(const Fl_Text_Selection *sel, int rangeStart,
+                                 int rangeEnd) const;
+#ifndef FL_DOXYGEN
+    int damage_range1_start, damage_range1_end;
+    int damage_range2_start, damage_range2_end;
+    int mCursorPos;
+    int mCursorOn;
+    int mCursorOldY;		/* Y pos. of cursor for blanking */
+    int mCursorToHint;		/* Tells the buffer modified callback
+                                   where to move the cursor, to reduce
+                                   the number of redraw calls */
+    int mCursorStyle;           /* One of enum cursorStyles above */
+    int mCursorPreferredCol;    /* Column for vert. cursor movement */
+    int mNVisibleLines;         /* # of visible (displayed) lines */
+    int mNBufferLines;          /* # of newlines in the buffer */
+    Fl_Text_Buffer* mBuffer;    /* Contains text to be displayed */
+    Fl_Text_Buffer* mStyleBuffer; /* Optional parallel buffer containing
+                                     color and font information */
+    int mFirstChar, mLastChar;  /* Buffer positions of first and last
+                                   displayed character (lastChar points
+                                   either to a newline or one character
+                                   beyond the end of the buffer) */
+    int mContinuousWrap;     	  /* Wrap long lines when displaying */
+    int mWrapMargin; 	    	  /* Margin in # of char positions for
+    	    	    	    	    	   wrapping in continuousWrap mode */
+    int* mLineStarts;
+    int mTopLineNum;            /* Line number of top displayed line
+                                   of file (first line of file is 1) */
+    int mAbsTopLineNum;			/* In continuous wrap mode, the line
+    					   number of the top line if the text
+					   were not wrapped (note that this is
+					   only maintained as needed). */
+    int mNeedAbsTopLineNum;	/* Externally settable flag to continue
+    					   maintaining absTopLineNum even if
+					   it isn't needed for line # display */
+    int mHorizOffset;           /* Horizontal scroll pos. in pixels */
+    int mTopLineNumHint;        /* Line number of top displayed line
+                                   of file (first line of file is 1) */
+    int mHorizOffsetHint;       /* Horizontal scroll pos. in pixels */
+    int mNStyles;               /* Number of entries in styleTable */
+    const Style_Table_Entry *mStyleTable; /* Table of fonts and colors for
+                                   coloring/syntax-highlighting */
+    char mUnfinishedStyle;      /* Style buffer entry which triggers
+                                   on-the-fly reparsing of region */
+    Unfinished_Style_Cb mUnfinishedHighlightCB; /* Callback to parse "unfinished" */
+                                /* regions */
+    void* mHighlightCBArg;      /* Arg to unfinishedHighlightCB */
+
+    int mMaxsize;
+
+    int mFixedFontWidth;        /* Font width if all current fonts are
+                                   fixed and match in width, else -1 */
+    int mSuppressResync;		/* Suppress resynchronization of line
+                                           starts during buffer updates */
+    int mNLinesDeleted;			/* Number of lines deleted during
+					   buffer modification (only used
+				           when resynchronization is suppressed) */
+    int mModifyingTabDistance;	/* Whether tab distance is being
+    					   modified */
+
+    Fl_Color mCursor_color;
+
+    Fl_Scrollbar* mHScrollBar;
+    Fl_Scrollbar* mVScrollBar;
+    int scrollbar_width_;
+    Fl_Align scrollbar_align_;
+    int dragPos, dragType, dragging;
+    int display_insert_position_hint;
+    struct { int x, y, w, h; } text_area;
+
+    int shortcut_;
+
+    Fl_Font textfont_;
+    Fl_Fontsize textsize_;
+    Fl_Color textcolor_;
+
+	 // The following are not presently used from the original NEdit code,
+	 // but are being put here so that future versions of Fl_Text_Display
+	 // can implement line numbers without breaking binary compatibility.
+    int mLineNumLeft, mLineNumWidth;
+				/* Line number margin and width */
+#endif
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Text_Display.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Text_Editor.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Text_Editor.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Text_Editor.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,141 @@
+//
+// "$Id: Fl_Text_Editor.H 6893 2009-09-20 19:24:24Z greg.ercolano $"
+//
+// Header file for Fl_Text_Editor class.
+//
+// Copyright 2001-2009 by Bill Spitzak and others.
+// Original code Copyright Mark Edel.  Permission to distribute under
+// the LGPL for the FLTK library granted by Mark Edel.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Text_Editor widget . */
+
+
+#ifndef FL_TEXT_EDITOR_H
+#define FL_TEXT_EDITOR_H
+
+#include "Fl_Text_Display.H"
+
+// key will match in any state
+#define FL_TEXT_EDITOR_ANY_STATE  (-1L)
+
+/**
+  This is the FLTK text editor widget. It allows the user to
+  edit multiple lines of text and supports highlighting and
+  scrolling. The buffer that is displayed in the widget is managed
+  by the Fl_Text_Buffer
+  class.
+*/
+class FL_EXPORT Fl_Text_Editor : public Fl_Text_Display {
+  public:
+    /** Key function binding callback type */
+    typedef int (*Key_Func)(int key, Fl_Text_Editor* editor);
+
+    /** Simple linked list associating a key/state to a function */
+    struct Key_Binding {
+      int          key;		///< the key pressed
+      int          state;	///< the state of key modifiers
+      Key_Func     function;	///< associated function
+      Key_Binding* next;	///< next key binding in the list
+    };
+
+    Fl_Text_Editor(int X, int Y, int W, int H, const char* l = 0);
+    ~Fl_Text_Editor() { remove_all_key_bindings(); }
+    virtual int handle(int e);
+    /**
+	Sets the current insert mode; if non-zero, new text
+	is inserted before the current cursor position. Otherwise, new
+	text replaces text at the current cursor position.
+    */
+    void insert_mode(int b) { insert_mode_ = b; }
+    /**
+	Gets the current insert mode; if non-zero, new text
+	is inserted before the current cursor position. Otherwise, new
+	text replaces text at the current cursor position.
+    */
+    int insert_mode() { return insert_mode_; }
+
+    void add_key_binding(int key, int state, Key_Func f, Key_Binding** list);
+    /** Adds a key of state "state" with the function "function" */
+    void add_key_binding(int key, int state, Key_Func f)
+      { add_key_binding(key, state, f, &key_bindings); }
+    void remove_key_binding(int key, int state, Key_Binding** list);
+    /** Removes the key binding associated with the key "key" of state "state". */
+    void remove_key_binding(int key, int state)
+      { remove_key_binding(key, state, &key_bindings); }
+    void remove_all_key_bindings(Key_Binding** list);
+    /** Removes all of the key bindings associated with the text editor or list. */
+    void remove_all_key_bindings() { remove_all_key_bindings(&key_bindings); }
+    void add_default_key_bindings(Key_Binding** list);
+    Key_Func bound_key_function(int key, int state, Key_Binding* list);
+    /**  Returns the function associated with a key binding. */
+    Key_Func bound_key_function(int key, int state)
+      { return bound_key_function(key, state, key_bindings); }
+    /**  Sets the default key function for unassigned keys. */
+    void default_key_function(Key_Func f) { default_key_function_ = f; }
+
+    // functions for the built in default bindings
+    static int kf_default(int c, Fl_Text_Editor* e);
+    static int kf_ignore(int c, Fl_Text_Editor* e);
+    static int kf_backspace(int c, Fl_Text_Editor* e);
+    static int kf_enter(int c, Fl_Text_Editor* e);
+    static int kf_move(int c, Fl_Text_Editor* e);
+    static int kf_shift_move(int c, Fl_Text_Editor* e);
+    static int kf_ctrl_move(int c, Fl_Text_Editor* e);
+    static int kf_c_s_move(int c, Fl_Text_Editor* e);
+    static int kf_meta_move(int c, Fl_Text_Editor* e);
+    static int kf_m_s_move(int c, Fl_Text_Editor* e);
+    static int kf_home(int, Fl_Text_Editor* e);
+    static int kf_end(int c, Fl_Text_Editor* e);
+    static int kf_left(int c, Fl_Text_Editor* e);
+    static int kf_up(int c, Fl_Text_Editor* e);
+    static int kf_right(int c, Fl_Text_Editor* e);
+    static int kf_down(int c, Fl_Text_Editor* e);
+    static int kf_page_up(int c, Fl_Text_Editor* e);
+    static int kf_page_down(int c, Fl_Text_Editor* e);
+    static int kf_insert(int c, Fl_Text_Editor* e);
+    static int kf_delete(int c, Fl_Text_Editor* e);
+    static int kf_copy(int c, Fl_Text_Editor* e);
+    static int kf_cut(int c, Fl_Text_Editor* e);
+    static int kf_paste(int c, Fl_Text_Editor* e);
+    static int kf_select_all(int c, Fl_Text_Editor* e);
+    static int kf_undo(int c, Fl_Text_Editor* e);
+
+  protected:
+    int handle_key();
+    void maybe_do_callback();
+
+#ifndef FL_DOXYGEN
+    int insert_mode_;
+    Key_Binding* key_bindings;
+    static Key_Binding* global_key_bindings;
+    Key_Func default_key_function_;
+#endif
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Text_Editor.H 6893 2009-09-20 19:24:24Z greg.ercolano $".
+//
+

Added: branches/branch-3.0/fltk3/Fl_Tile.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Tile.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Tile.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,102 @@
+//
+// "$Id: Fl_Tile.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// Tile header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Tile widget . */
+
+#ifndef Fl_Tile_H
+#define Fl_Tile_H
+
+#include "Fl_Group.H"
+
+/**
+  The Fl_Tile class lets you resize the children by dragging
+  the border between them:
+  
+  <P ALIGN=CENTER>\image html Fl_Tile.gif </P> 
+  \image latex  Fl_Tile.eps "Fl_Tile" width=4cm
+  
+  <P>For the tiling to work correctly, the children of an 
+  Fl_Tile must cover the entire area of the widget, but not
+  overlap. This means that all children must touch each 
+  other at their edges, and no gaps can't be left inside the 
+  Fl_Tile.
+  
+  <P>Fl_Tile does not normailly draw any graphics of its own.
+  The "borders" which can be seen in the snapshot above
+  are actually part of the children. Their boxtypes have been set
+  to FL_DOWN_BOX creating the impression of 
+  "ridges" where the boxes touch. What you see are 
+  actually two adjacent FL_DOWN_BOX's drawn next to each 
+  other. All neighboring widgets share the same edge - the widget's 
+  thick borders make it appear as though the widgets aren't actually
+  touching, but they are. If the edges of adjacent widgets do not
+  touch, then it will be impossible to drag the corresponding
+  edges.</P>
+  
+  <P>Fl_Tile allows objects to be resized to zero dimensions.
+  To prevent this you can use the resizable() to limit where
+  corners can be dragged to.</P>
+  
+  <P>Even though objects can be resized to zero sizes, they must
+  initially have non-zero sizes so the Fl_Tile can figure out
+  their layout. If desired, call position() after creating the
+  children but before displaying the window to set the borders where you
+  want.
+
+  <P>Note on resizable(fltk3::Widget &w) :
+  The "resizable" child widget (which should be invisible) limits where the
+  border can be dragged to.  If you don't set it, it will be possible to
+  drag the borders right to the edge, and thus resize objects on the edge
+  to zero width or height.  The resizable() widget is not
+  resized by dragging any borders. See also void fltk3::Group::resizable(fltk3::Widget &w)
+
+*/
+class FL_EXPORT Fl_Tile : public fltk3::Group {
+public:
+  int handle(int);
+  /**
+    Creates a new Fl_Tile widget using the given position, size,
+    and label string. The default boxtype is FL_NO_BOX.
+    
+    <P>The destructor <I>also deletes all the children</I>. This allows a
+    whole tree to be deleted at once, without having to keep a pointer to
+    all the children in the user code. A kludge has been done so the 
+    Fl_Tile and all of it's children can be automatic (local)
+    variables, but you must declare the Fl_Tile <I>first</I>, so
+    that it is destroyed last.
+  */
+  Fl_Tile(int X,int Y,int W,int H,const char*l=0) : fltk3::Group(X,Y,W,H,l) {}
+  void resize(int, int, int, int);
+  void position(int, int, int, int);
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Tile.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Tiled_Image.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Tiled_Image.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Tiled_Image.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,70 @@
+//
+// "$Id: Fl_Tiled_Image.H 6614 2009-01-01 16:11:32Z matt $"
+//
+// Tiled image header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Tiled_Image widget . */
+
+#ifndef Fl_Tiled_Image_H
+#  define Fl_Tiled_Image_H
+
+#  include "Fl_Image.H"
+
+
+/**
+  This class supports tiling of images
+  over a specified area. The source (tile) image is <B>not</B>
+  copied unless you call the color_average(),
+  desaturate(),
+  or inactive()
+  methods.
+*/
+class FL_EXPORT Fl_Tiled_Image : public Fl_Image {
+  protected:
+
+  Fl_Image	*image_;		// The image that is shared
+  int		alloc_image_;		// Did we allocate this image?
+
+  public:
+
+  Fl_Tiled_Image(Fl_Image *i, int W = 0, int H = 0);
+  virtual ~Fl_Tiled_Image();
+
+  virtual Fl_Image *copy(int W, int H);
+  Fl_Image *copy() { return copy(w(), h()); }
+  virtual void color_average(Fl_Color c, float i);
+  virtual void desaturate();
+  virtual void draw(int X, int Y, int W, int H, int cx, int cy);
+  void draw(int X, int Y) { draw(X, Y, w(), h(), 0, 0); }
+  /** Gets The image that is shared */ 
+  Fl_Image *image() { return image_; }
+};
+
+#endif // !Fl_Tiled_Image_H
+
+//
+// End of "$Id: Fl_Tiled_Image.H 6614 2009-01-01 16:11:32Z matt $"
+//

Added: branches/branch-3.0/fltk3/Fl_Timer.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Timer.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Timer.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,87 @@
+//
+// "$Id: Fl_Timer.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// Timer header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Timer widget . */
+
+#ifndef Fl_Timer_H
+#define Fl_Timer_H
+
+#ifndef Fl_Widget_H
+#include "Fl_Widget.H"
+#endif
+
+// values for type():
+#define FL_NORMAL_TIMER		0
+#define FL_VALUE_TIMER		1
+#define FL_HIDDEN_TIMER		2
+
+/**
+  This is provided only to emulate the Forms Timer widget.  It works by
+  making a timeout callback every 1/5 second.  This is wasteful and
+  inaccurate if you just want something to happen a fixed time in the
+  future.  You should directly call 
+  fltk3::add_timeout() instead.
+*/
+class FL_EXPORT Fl_Timer : public fltk3::Widget {
+  static void stepcb(void *);
+  void step();
+  char on, direction_;
+  double delay, total;
+  long lastsec,lastusec;
+protected:
+  void draw();
+public:
+  int handle(int);
+  Fl_Timer(uchar t,int x,int y,int w,int h, const char *l);
+  ~Fl_Timer();
+  void value(double);
+  /** See void Fl_Timer::value(double)  */
+  double value() const {return delay>0.0?delay:0.0;}
+  /**
+    Gets or sets the direction of the timer.  If the direction is zero
+    then the timer will count up, otherwise it will count down from the
+    initial value().
+  */
+  char direction() const {return direction_;}
+  /**
+    Gets or sets the direction of the timer.  If the direction is zero
+    then the timer will count up, otherwise it will count down from the
+    initial value().
+  */
+  void direction(char d) {direction_ = d;}
+  /**    Gets or sets whether the timer is suspended.  */
+  char suspended() const {return !on;}
+  void suspended(char d);
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Timer.H 7365 2010-03-30 15:18:29Z matt $".
+//
+

Added: branches/branch-3.0/fltk3/Fl_Toggle_Button.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Toggle_Button.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Toggle_Button.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,60 @@
+//
+// "$Id: Fl_Toggle_Button.H 6614 2009-01-01 16:11:32Z matt $"
+//
+// Toggle button header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Toggle_Button widget . */
+
+#ifndef Fl_Toggle_Button_H
+#define Fl_Toggle_Button_H
+
+#include "Fl_Button.H"
+
+/**
+  The toggle button is a push button that needs to be clicked once 
+  to toggle on, and one more time to toggle off.
+  The Fl_Toggle_Button subclass displays the "on" state by
+  drawing a pushed-in button.</P>
+  <P>Buttons generate callbacks when they are clicked by the user.  You
+  control exactly when and how by changing the values for type()
+  and when().
+*/
+class Fl_Toggle_Button : public Fl_Button {
+public:
+  /**
+    Creates a new Fl_Toggle_Button widget using the given
+    position, size, and label string.
+    <P>The inherited destructor deletes the toggle button.
+  */
+    Fl_Toggle_Button(int X,int Y,int W,int H,const char *l=0)
+	: Fl_Button(X,Y,W,H,l) {type(FL_TOGGLE_BUTTON);}
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Toggle_Button.H 6614 2009-01-01 16:11:32Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Toggle_Light_Button.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Toggle_Light_Button.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Toggle_Light_Button.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,37 @@
+//
+// "$Id: Fl_Toggle_Light_Button.H 6614 2009-01-01 16:11:32Z matt $"
+//
+// Toggle light button header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+// provided for back-compatibility only
+
+#ifndef Fl_Toggle_Light_Button
+#include "Fl_Light_Button.H"
+#define Fl_Toggle_Light_Button Fl_Light_Button
+#endif
+
+//
+// End of "$Id: Fl_Toggle_Light_Button.H 6614 2009-01-01 16:11:32Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Toggle_Round_Button.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Toggle_Round_Button.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Toggle_Round_Button.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,37 @@
+//
+// "$Id: Fl_Toggle_Round_Button.H 6614 2009-01-01 16:11:32Z matt $"
+//
+// Toggle round button header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+// provided for back-compatibility only
+
+#ifndef Fl_Toggle_Round_Button
+#include "Fl_Round_Button.H"
+#define Fl_Toggle_Round_Button Fl_Round_Button
+#endif
+
+//
+// End of "$Id: Fl_Toggle_Round_Button.H 6614 2009-01-01 16:11:32Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Tooltip.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Tooltip.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Tooltip.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,109 @@
+//
+// "$Id: Fl_Tooltip.H 6902 2009-09-27 11:06:56Z matt $"
+//
+// Tooltip header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Tooltip widget . */
+
+#ifndef Fl_Tooltip_H
+#define Fl_Tooltip_H
+
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Widget.H>
+
+/**
+  The Fl_Tooltip class provides tooltip support for
+  all FLTK widgets. It contains only static methods.
+*/
+class FL_EXPORT Fl_Tooltip {
+public:
+  /**    Gets the tooltip delay. The default delay is 1.0 seconds.  */
+  static float delay() { return delay_; }
+  /**    Sets the tooltip delay. The default delay is 1.0 seconds.  */
+  static void delay(float f) { delay_ = f; }
+  /**
+    Gets the tooltip hover delay, the delay between tooltips.
+    The default delay is 0.2 seconds.
+  */
+  static float hoverdelay() { return hoverdelay_; }
+  /**
+    Sets the tooltip hover delay, the delay between tooltips.
+    The default delay is 0.2 seconds.
+  */
+  static void hoverdelay(float f) { hoverdelay_ = f; }
+  /**    Returns non-zero if tooltips are enabled.  */
+  static int enabled() { return enabled_; }
+  /**    Enables tooltips on all widgets (or disables if <i>b</i> is false).  */
+  static void enable(int b = 1) { enabled_ = b;}
+  /**    Same as enable(0), disables tooltips on all widgets.  */
+  static void disable() { enabled_ = 0; }
+  static void (*enter)(fltk3::Widget* w);
+  static void enter_area(fltk3::Widget* w, int X, int Y, int W, int H, const char* tip);
+  static void (*exit)(fltk3::Widget *w);
+  /** Gets the current widget target */
+  static fltk3::Widget* current() {return widget_;}
+  static void current(fltk3::Widget*);
+
+  /**    Gets the typeface for the tooltip text.  */
+  static Fl_Font font() { return font_; }
+  /**    Sets the typeface for the tooltip text.  */
+  static void font(Fl_Font i) { font_ = i; }
+  /**    Gets the size of the tooltip text.  */
+  static Fl_Fontsize size() { return size_; }
+  /**    Sets the size of the tooltip text.  */
+  static void size(Fl_Fontsize s) { size_ = s; }
+  /** Gets the background color for tooltips. The default background color is a pale yellow.  */
+  static Fl_Color color() { return color_; }
+  /** Sets the background color for tooltips. The default background color is a pale yellow.  */
+  static void color(Fl_Color c) { color_ = c; }
+  /** Gets the color of the text in the tooltip. The default is  black. */
+  static Fl_Color textcolor() { return textcolor_; }
+  /** Sets the color of the text in the tooltip. The default is  black. */
+  static void textcolor(Fl_Color c) { textcolor_ = c; }
+
+  // These should not be public, but fltk3::Widget::tooltip() needs them...
+  // fabien: made it private with only a friend function access
+private:
+  friend void fltk3::Widget::tooltip(const char *);
+  static void enter_(fltk3::Widget* w);
+  static void exit_(fltk3::Widget *w);
+
+private:
+  static float delay_; //!< delay before a tooltip is shown
+  static float hoverdelay_; //!< delay between tooltips
+  static int enabled_;
+  static Fl_Color color_;
+  static Fl_Color textcolor_;
+  static Fl_Font font_;
+  static Fl_Fontsize size_;
+  static fltk3::Widget* widget_; //!< Keeps track of the current target widget
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Tooltip.H 6902 2009-09-27 11:06:56Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Tree.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Tree.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Tree.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,661 @@
+//
+// "$Id: Fl_Tree.H 7365 2010-03-30 15:18:29Z matt $"
+//
+
+#ifndef FL_TREE_H
+#define FL_TREE_H
+
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Group.H>
+#include <fltk3/Fl_Scrollbar.H>
+#include <fltk3/fl_draw.H>
+
+#include <fltk3/Fl_Tree_Item.H>
+#include <fltk3/Fl_Tree_Prefs.H>
+
+//////////////////////
+// fltk3/Fl_Tree.H
+//////////////////////
+//
+// Fl_Tree -- This file is part of the Fl_Tree widget for FLTK
+// Copyright (C) 2009 by Greg Ercolano.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+
+///
+/// \file
+/// \brief This file contains the definitions of the Fl_Tree class
+///
+
+/// \class Fl_Tree
+///
+/// \brief Tree widget.
+///
+/// \code
+///     Fl_Tree                                         // Top level widget
+///        |--- Fl_Tree_Item                            // Items in the tree
+///        |--- Fl_Tree_Prefs                           // Preferences for the tree
+///                  |--- Fl_Tree_Connector (enum)      // Connection modes
+///                  |--- Fl_Tree_Select (enum)         // Selection modes
+///                  |--- Fl_Tree_Sort (enum)           // Sort behavior
+/// \endcode
+///
+///     An expandable tree widget.
+///
+///     Similar to Fl_Browser, Fl_Tree is browser of Fl_Tree_Item's, which can be
+///     in a parented hierarchy. Subtrees can be expanded or closed. Items can be
+///     added, deleted, inserted, sorted and re-ordered.
+///
+///     The tree items may also contain other FLTK widgets, like buttons, input fields,
+///     or even "custom" widgets.
+///
+///     The simple way to define a tree:
+/// \code
+///    #include <fltk3/Fl_Tree.H>
+///    [..]
+///    Fl_Tree tree(X,Y,W,H);
+///    tree.begin();
+///      tree.add("Flintstones/Fred");
+///      tree.add("Flintstones/Wilma");
+///      tree.add("Flintstones/Pebbles");
+///      tree.add("Simpsons/Homer");
+///      tree.add("Simpsons/Marge");
+///      tree.add("Simpsons/Bart");
+///      tree.add("Simpsons/Lisa");
+///    tree.end();
+/// \endcode
+///     
+///     Items can be added with Fl_Tree::add(),
+///     removed with Fl_Tree::remove(),
+///     inserted with Fl_Tree::insert_above(),
+///     selected/deselected with Fl_Tree::select() and Fl_Tree::deselect().
+///     Items can be swapped with Fl_Tree_Item::swap_children(), sorting control via
+///     Fl_Tree::sortorder().
+///
+///     The tree can have different selection behaviors controlled by Fl_Tree::selectmode().
+///
+///     FLTK and custom FLTK widgets can be assigned to tree items via Fl_Tree_Item::widget().
+///
+///     Parent nodes can be open/closed with open() and close(), icons can be assigned
+///     or redefined with some or all items via 
+///     Fl_Tree_Item::openicon(), 
+///     Fl_Tree_Item::closeicon(),
+///     Fl_Tree_Item::usericon().
+///
+///     Various default preferences can be manipulated via Fl_Tree_Prefs, including
+///     colors, margins, connection lines. 
+///
+///     \image html tree-elements.png
+///
+
+class Fl_Tree : public fltk3::Group {
+  Fl_Tree_Item  *_root;					// can be null!
+  Fl_Tree_Item  *_item_clicked;
+  Fl_Tree_Prefs  _prefs;				// all the tree's settings
+  Fl_Scrollbar  *_vscroll;
+  
+public:
+  /// Find the item that was clicked.
+  /// You probably want to use item_clicked() instead, which is fast.
+  ///
+  /// This method walks the entire tree looking for the first item that is
+  /// under the mouse (ie. at fltk3::event_x()/fltk3:event_y().
+  ///
+  /// Use this method /only/ if you've subclassed Fl_Tree, and are receiving
+  /// events before Fl_Tree has been able to process and update item_clicked().
+  /// 
+  /// \returns the item clicked, or 0 if no item was under the current event.
+  ///
+  const Fl_Tree_Item *find_clicked() const {
+    if ( ! _root ) return(0);
+    return(_root->find_clicked(_prefs));
+  }
+protected:
+  /// Set the item that was last clicked.
+  /// Should only be used by subclasses needing to change this value.
+  /// Normally Fl_Tree manages this value.
+  ///
+  void item_clicked(Fl_Tree_Item* val) {
+    _item_clicked = val;
+  }
+  
+public:
+  Fl_Tree(int X, int Y, int W, int H, const char *L=0);
+  ~Fl_Tree();
+  int handle(int e);
+  void draw();
+  
+  ///////////////////////
+  // root methods
+  ///////////////////////
+  
+  /// Set the label for the root item. 
+  ///
+  /// Makes an internally managed copy of 'new_label'.
+  ///
+  void root_label(const char *new_label) {
+    if ( ! _root ) return;
+    _root->label(new_label);
+  }
+  /// Returns the root item.
+  Fl_Tree_Item* root() {
+    return(_root);
+  }
+  
+  ////////////////////////////////
+  // Item creation/removal methods
+  ////////////////////////////////
+  Fl_Tree_Item *add(const char *path);
+  Fl_Tree_Item* add(Fl_Tree_Item *item, const char *name);
+  Fl_Tree_Item *insert_above(Fl_Tree_Item *above, const char *name);
+  Fl_Tree_Item* insert(Fl_Tree_Item *item, const char *name, int pos);
+  
+  /// Remove the specified 'item' from the tree.
+  /// If it has children, all those are removed too.
+  /// \returns 0 if done, -1 if 'item' not found.
+  ///
+  int remove(Fl_Tree_Item *item) {
+    if ( !item ) return(0);
+    if ( item == _root ) {
+      clear();
+    } else {
+      Fl_Tree_Item *parent = item->parent();		// find item's parent
+      if ( ! parent ) return(-1);
+      parent->remove_child(item);			// remove child + children
+    }
+    return(0);
+  } 
+  /// Clear all children from the tree.
+  /// The tree will be left completely empty.
+  ///
+  void clear() {
+    if ( ! _root ) return;
+    _root->clear_children();
+    delete _root; _root = 0;
+  } 
+  /// Clear all the children of a particular node in the tree.
+  void clear_children(Fl_Tree_Item *item) {
+    if ( item->has_children() ) {
+      item->clear_children();
+      redraw();						// redraw only if there were children to clear
+    }
+  } 
+  
+  ////////////////////////
+  // Item lookup methods
+  ////////////////////////
+  Fl_Tree_Item *find_item(const char *path);
+  const Fl_Tree_Item *find_item(const char *path) const;
+  
+  /// Return the parent for specified 'item'.
+  ///
+  /// \returns item's parent, or 0 if none (root).
+  ///
+  Fl_Tree_Item *parent(Fl_Tree_Item *item) {
+    return(item->parent());
+  }
+  /// Return the item that was last clicked.
+  ///
+  /// Valid only from within an Fl_Tree::callback().
+  ///
+  /// \returns the item clicked, or 0 if none.
+  ///
+  Fl_Tree_Item *item_clicked() {
+    return(_item_clicked);
+  }
+  /// Returns the first item in the tree.
+  ///
+  /// Use this to walk the tree in the forward direction, eg:
+  /// \code
+  /// for ( Fl_Tree_Item *item = tree->first(); item; item = item->next() ) {
+  ///     printf("Item: %s\n", item->label());
+  /// }
+  /// \endcode
+  ///
+  /// \returns first item in tree, or 0 if none (tree empty).
+  ///
+  Fl_Tree_Item *first() {
+    return(_root);					// first item always root
+  }
+  /// Returns the last item in the tree.
+  ///
+  /// Use this to walk the tree in reverse, eg:
+  ///
+  /// \code
+  /// for ( Fl_Tree_Item *item = tree->last(); item; item = item->prev() ) {
+  ///     printf("Item: %s\n", item->label());
+  /// }
+  /// \endcode
+  ///
+  /// \returns last item in the tree, or 0 if none (tree empty).
+  ///
+  Fl_Tree_Item *last() {
+    if ( ! _root ) return(0);
+    Fl_Tree_Item *item = _root;
+    while ( item->has_children() ) {
+      item = item->child(item->children()-1);
+    }
+    return(item);
+  }
+  
+  //////////////////////////
+  // Item open/close methods
+  //////////////////////////
+  
+  /// Open the specified 'item'.
+  /// This causes the item's children (if any) to be shown.
+  /// Handles redrawing if anything was actually changed.
+  ///
+  void open(Fl_Tree_Item *item) {
+    if ( ! item->is_open() ) {
+      item->open();
+      redraw();
+    }
+  }
+  /// Opens the item specified by a 'menu item' style pathname (eg: "Parent/child/item").
+  /// This causes the item's children (if any) to be shown.
+  /// Handles redrawing if anything was actually changed.
+  ///
+  /// \returns
+  ///     -   0 : OK
+  ///     -  -1 : item was not found
+  ///         
+  int open(const char *path) {
+    Fl_Tree_Item *item = find_item(path);
+    if ( item ) {
+      open(item);
+      return(0);
+    }
+    return(-1);
+  }
+  /// Closes the 'item'.
+  /// Handles redrawing if anything was actually changed.
+  ///
+  void close(Fl_Tree_Item *item) {
+    if ( ! item->is_close() ) {
+      item->close();
+      redraw();
+    }
+  }
+  /// Closes the item specified by 'path', eg: "Parent/child/item".
+  ///
+  /// Handles redrawing if anything was actually changed.
+  ///
+  /// \returns
+  ///     -   0 -- OK
+  ///     -  -1 -- item was not found
+  ///         
+  int close(const char *path) {
+    Fl_Tree_Item *item = find_item(path);
+    if ( item ) {
+      close(item);
+      return(0);
+    }
+    return(-1);
+  }
+  /// See if item is open.
+  ///
+  /// Items that are 'open' are themselves not necessarily visible;
+  /// one of the item's parents might be closed.
+  ///
+  /// \returns
+  ///     -  1 : item is open
+  ///     -  0 : item is closed
+  ///
+  int is_open(Fl_Tree_Item *item) const {
+    return(item->is_open()?1:0);
+  }
+  /// See if item specified by 'path' (eg: "Parent/child/item") is open.
+  ///
+  /// Items that are 'open' are themselves not necessarily visible;
+  /// one of the item's parents might be closed.
+  ///
+  /// \returns
+  ///     -    1 : item is open
+  ///     -    0 : item is closed
+  ///     -   -1 : item was not found
+  ///
+  int is_open(const char *path) const {
+    const Fl_Tree_Item *item = find_item(path);
+    if ( item ) return(item->is_open()?1:0);
+    return(-1);
+  }
+  /// See if item is closed.
+  /// \returns
+  ///     -   1 : item is open
+  ///     -   0 : item is closed
+  ///
+  int is_close(Fl_Tree_Item *item) const {
+    return(item->is_close());
+  }
+  /// See if item specified by 'path' (eg: "Parent/child/item") is closed.
+  ///
+  /// \returns
+  ///     -   1 : item is closed
+  ///     -   0 : item is open
+  ///     -  -1 : item was not found
+  ///
+  int is_close(const char *path) const {
+    const Fl_Tree_Item *item = find_item(path);
+    if ( item ) return(item->is_close()?1:0);
+    return(-1);
+  }
+  
+  /////////////////////////
+  // Item selection methods
+  /////////////////////////
+  
+  /// Select the specified item. Use 'deselect()' to de-select it.
+  /// Handles redrawing if anything was actually changed.
+  ///
+  void select(Fl_Tree_Item *item) {
+    if ( ! item->is_selected() ) {
+      item->select();
+      redraw();
+    }
+  }
+  /// Select an item specified by 'path' (eg: "Parent/child/item").
+  /// Handles redrawing if anything was actually changed.
+  ///
+  /// \returns
+  ///     -   0 : OK
+  ///     -  -1 : item was not found
+  ///
+  int select(const char *path) {
+    Fl_Tree_Item *item = find_item(path);
+    if ( item ) {
+      select(item);
+      return(0);
+    }
+    return(-1);
+  }
+  /// Toggle item's select state.
+  /// Handles redrawing.
+  ///
+  void select_toggle(Fl_Tree_Item *item) {
+    item->select_toggle();
+    redraw();
+  }
+  /// De-select the specified item.
+  /// Handles redrawing if anything was actually changed.
+  ///
+  void deselect(Fl_Tree_Item *item) {
+    if ( item->is_selected() ) {
+      item->deselect();
+      redraw();
+    }
+  }
+  /// De-select an item specified by 'path' (eg: "Parent/child/item").
+  /// Handles redrawing if anything was actually changed.
+  ///
+  ///  \returns
+  ///     -   0 : OK
+  ///     -  -1 : item was not found
+  ///
+  int deselect(const char *path) {
+    Fl_Tree_Item *item = find_item(path);
+    if ( item ) {
+      deselect(item);
+      return(0);
+    }
+    return(-1);
+  }
+  
+  int deselect_all(Fl_Tree_Item *item=0);
+  int select_only(Fl_Tree_Item *selitem);
+    int select_all(Fl_Tree_Item *item=0);
+  
+  /// See if the specified item is selected.
+  /// \return
+  ///     -   1 : item selected
+  ///     -   0 : item deselected
+  ///
+  int is_selected(Fl_Tree_Item *item) const {
+    return(item->is_selected()?1:0);
+  }
+  /// See if item specified by 'path' (eg: "Parent/child/item") is selected.
+  ///
+  /// \returns
+  ///     -   1 : item selected
+  ///     -   0 : item deselected
+  ///     -  -1 : item was not found
+  ///
+  int is_selected(const char *path) {
+    Fl_Tree_Item *item = find_item(path);
+    if ( item ) return(is_selected(item));
+    return(-1);
+  }
+  /// Print the tree as 'ascii art' to stdout.
+  /// Used mainly for debugging.
+  ///
+  void show_self() {
+    if ( ! _root ) return;
+    _root->show_self();
+  }
+  
+  /////////////////////////////////
+  // Item attribute related methods
+  /////////////////////////////////
+  
+  /// Get the default label fontsize used for creating new items.
+  int labelsize() const {
+    return(_prefs.labelsize());
+  }
+  /// Set the default label font size used for creating new items.
+  /// To change the font size on a per-item basis, use Fl_Tree_Item::labelsize(int)
+  ///
+  void labelsize(int val) {
+    _prefs.labelsize(val);
+  }
+  
+  /// Get the default font face used for item's labels when new items are created.
+  ///
+  /// Don't use this if you want to change an existing label() size; use
+  /// item->labelfont() instead.
+  ///
+  int labelfont() const {
+    return(_prefs.labelfont());
+  }
+  /// Set the default font face used for item's labels when new items are created.
+  ///
+  /// Don't use this if you want to change an existing label() size; use
+  /// item->labelfont(int) instead.
+  ///
+  void labelfont(int val) {
+    _prefs.labelfont(val);
+  }
+  /// Get the amount of white space (in pixels) that should appear
+  /// between the widget's left border and the tree's contents.
+  ///
+  int  marginleft() const {
+    return(_prefs.marginleft());
+  }
+  /// Set the amount of white space (in pixels) that should appear
+  /// between the widget's left border and the left side of the tree's contents.
+  ///
+  void marginleft(int val) {
+    _prefs.marginleft(val);
+    redraw();
+  }
+  /// Get the amount of white space (in pixels) that should appear
+  /// between the widget's top border and the top of the tree's contents.
+  ///
+  int  margintop() const {
+    return(_prefs.margintop());
+  }
+  /// Sets the amount of white space (in pixels) that should appear
+  /// between the widget's top border and the top of the tree's contents.
+  ///
+  void margintop(int val) {
+    _prefs.margintop(val);
+    redraw();
+  }
+  /// Get the amount of white space (in pixels) that should appear
+  /// below an open child tree's contents.
+  ///
+  int  openchild_marginbottom() const {
+    return(_prefs.openchild_marginbottom());
+  }
+  /// Set the amount of white space (in pixels) that should appear
+  /// below an open child tree's contents.
+  ///
+  void openchild_marginbottom(int val) {
+    _prefs.openchild_marginbottom(val);
+    redraw();
+  }
+  /// Gets the width of the horizontal connection lines (in pixels) 
+  /// that appear to the left of each tree item's label.
+  ///
+  int  connectorwidth() const {
+    return(_prefs.connectorwidth());
+  }
+  /// Sets the width of the horizontal connection lines (in pixels) 
+  /// that appear to the left of each tree item's label.
+  ///
+  void connectorwidth(int val) {
+    _prefs.connectorwidth(val);
+    redraw();
+  }
+  /// Returns the Fl_Image being used as the default user icon for newly created items.
+  /// Returns zero if no icon has been set, which is the default.
+  ///
+  Fl_Image *usericon() const {
+    return(_prefs.usericon());
+  }
+  /// Sets the Fl_Image to be used as the default user icon for all
+  /// newly created items.
+  ///
+  /// If you want to specify user icons on a per-item basis,
+  /// use Fl_Tree_Item::usericon() instead.
+  ///
+  /// \param[in] val -- The new image to be used, or
+  ///                   zero to disable user icons.
+  ///
+  void usericon(Fl_Image *val) {
+    _prefs.usericon(val);
+    redraw();
+  }
+  /// Returns the icon to be used as the 'open' icon.
+  /// If none was set, the internal default is returned,
+  /// a simple '[+]' icon.
+  ///
+  Fl_Image *openicon() const {
+    return(_prefs.openicon());
+  }
+  /// Sets the icon to be used as the 'open' icon.
+  /// This overrides the built in default '[+]' icon.
+  ///
+  /// \param[in] val -- The new image, or zero to use the default [+] icon.
+  ///
+  void openicon(Fl_Image *val) {
+    _prefs.openicon(val);
+    redraw();
+  }
+  /// Returns the icon to be used as the 'close' icon.
+  /// If none was set, the internal default is returned,
+  /// a simple '[-]' icon.
+  ///
+  Fl_Image *closeicon() const {
+    return(_prefs.closeicon());
+  }
+  /// Sets the icon to be used as the 'close' icon.
+  /// This overrides the built in default '[-]' icon.
+  ///
+  /// \param[in] val -- The new image, or zero to use the default [-] icon.
+  ///
+  void closeicon(Fl_Image *val) {
+    _prefs.closeicon(val);
+    redraw();
+  }
+  /// Returns 1 if the collapse icon is enabled, 0 if not.
+  int showcollapse() const {
+    return(_prefs.showcollapse());
+  }
+  /// Set if we should show the collapse icon or not.
+  /// If collapse icons are disabled, the user will not be able
+  /// to interactively collapse items in the tree, unless the application
+  /// provides some other means via open() and close().
+  ///
+  /// \param[in] val 1: shows collapse icons (default),\n
+  ///                0: hides collapse icons.
+  ///
+  void showcollapse(int val) {
+    _prefs.showcollapse(val);
+    redraw();
+  }
+  /// Returns 1 if the root item is to be shown, or 0 if not.
+  int showroot() const {
+    return(_prefs.showroot());
+  }
+  /// Set if the root item should be shown or not.
+  /// \param[in] val 1 -- show the root item (default)\n
+  ///                0 -- hide the root item.
+  ///
+  void showroot(int val) {
+    _prefs.showroot(val);
+    redraw();
+  }
+  /// Returns the line drawing style for inter-connecting items.
+  Fl_Tree_Connector connectorstyle() const {
+    return(_prefs.connectorstyle());
+  }
+  /// Sets the line drawing style for inter-connecting items.
+  void connectorstyle(Fl_Tree_Connector val) {
+    _prefs.connectorstyle(val);
+    redraw();
+  }
+  /// Set the default sort order used when items are added to the tree.
+  ///     See Fl_Tree_Sort for possible values.
+  ///
+  Fl_Tree_Sort sortorder() const {
+    return(_prefs.sortorder());
+  }
+  /// Gets the sort order used to add items to the tree.
+  void sortorder(Fl_Tree_Sort val) {
+    _prefs.sortorder(val);
+    // no redraw().. only affects new add()itions
+  }
+  /// Sets the style of box used to draw selected items.
+  /// This is an fltk Fl_Boxtype.
+  /// The default is influenced by FLTK's current fltk3::scheme()
+  ///
+  Fl_Boxtype selectbox() const {
+    return(_prefs.selectbox());
+  }
+  /// Gets the style of box used to draw selected items.
+  /// This is an fltk Fl_Boxtype.
+  /// The default is influenced by FLTK's current fltk3::scheme()
+  ///
+  void selectbox(Fl_Boxtype val) {
+    _prefs.selectbox(val);
+    redraw();
+  }
+  /// Gets the tree's current selection mode.
+  Fl_Tree_Select selectmode() const {
+    return(_prefs.selectmode());
+  }
+  /// Sets the tree's selection mode.
+  void selectmode(Fl_Tree_Select val) {
+    _prefs.selectmode(val);
+  }
+};
+
+#endif /*FL_TREE_H*/
+
+//
+// End of "$Id: Fl_Tree.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Tree_Item.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Tree_Item.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Tree_Item.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,321 @@
+//
+// "$Id: Fl_Tree_Item.H 6957 2009-12-08 08:39:31Z greg.ercolano $"
+//
+
+#ifndef FL_TREE_ITEM_H
+#define FL_TREE_ITEM_H
+
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Widget.H>
+#include <fltk3/Fl_Image.H>
+#include <fltk3/fl_draw.H>
+
+#include <fltk3/Fl_Tree_Item_Array.H>
+#include <fltk3/Fl_Tree_Prefs.H>
+
+//////////////////////
+// fltk3/Fl_Tree_Item.H
+//////////////////////
+//
+// Fl_Tree -- This file is part of the Fl_Tree widget for FLTK
+// Copyright (C) 2009 by Greg Ercolano.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+
+///
+/// \file
+/// \brief This file contains the definitions for Fl_Tree_Item
+///
+
+/// \brief Tree item
+///
+/// This class is a single tree item, and manages all of the item's attributes.
+/// Fl_Tree_Item is used by Fl_Tree, which is comprised of many instances of Fl_Tree_Item.
+///
+/// Fl_Tree_Item is hierarchical; it dynamically manages an Fl_Tree_Item_Array of children
+/// that are themselves instances of Fl_Tree_Item. Each item can have zero or more children.
+/// When an item has children, close() and open() can be used to hide or show them.
+///
+/// Items have their own attributes; font size, face, color.
+/// Items maintain their own hierarchy of children.
+///
+/// When you make changes to items, you'll need to tell the tree to redraw()
+/// for the changes to show up.
+///
+class Fl_Tree_Item {
+  const char             *_label;		// label (memory managed)
+  int                     _labelfont;		// label's font face
+  int                     _labelsize;		// label's font size
+  Fl_Color                _labelfgcolor;	// label's fg color
+  Fl_Color                _labelbgcolor;	// label's bg color
+  char                    _open;		// item is open?
+  char                    _visible;		// item is visible?
+  char                    _active;		// item activated?
+  char                    _selected;		// item selected?
+  int                     _xywh[4];		// xywh of this widget (if visible)
+  int                     _collapse_xywh[4];	// xywh of collapse icon (if any)
+  int                     _label_xywh[4];	// xywh of label
+  fltk3::Widget              *_widget;		// item's label widget (optional)
+  Fl_Image               *_usericon;		// item's user-specific icon (optional)
+  Fl_Tree_Item_Array      _children;		// array of child items
+  Fl_Tree_Item           *_parent;		// parent item (=0 if root)
+  void                   *_userdata;    	// user data that can be associated with an item
+protected:
+  void show_widgets();
+  void hide_widgets();
+  void draw_vertical_connector(int x, int y1, int y2, const Fl_Tree_Prefs &prefs);
+  void draw_horizontal_connector(int x1, int x2, int y, const Fl_Tree_Prefs &prefs);
+public:
+  Fl_Tree_Item(const Fl_Tree_Prefs &prefs);	// CTOR
+  ~Fl_Tree_Item();				// DTOR
+  Fl_Tree_Item(const Fl_Tree_Item *o);		// COPY CTOR
+  void draw(int X, int &Y, int W, fltk3::Widget *tree, const Fl_Tree_Prefs &prefs, int lastchild=1);
+  void show_self(const char *indent = "") const;
+  void label(const char *val);
+  const char *label() const;
+
+  /// Set a user-data value for the item.
+  inline void user_data( void* data ) { _userdata = data; }
+
+  /// Retrieve the user-data value that has been assigned to the item.
+  inline void* user_data() const { return _userdata; }
+  
+  /// Set item's label font face.
+  void labelfont(int val) {
+    _labelfont = val; 
+  }
+  /// Get item's label font face.
+  int labelfont() const {
+    return(_labelfont);
+  }
+  /// Set item's label font size.
+  void labelsize(int val) {
+    _labelsize = val; 
+  }
+  /// Get item's label font size.
+  int labelsize() const {
+    return(_labelsize);
+  }
+  /// Set item's label foreground text color.
+  void labelfgcolor(Fl_Color val) {
+    _labelfgcolor = val; 
+  }
+  /// Set item's label text color.
+  void labelcolor(Fl_Color val) {
+    _labelfgcolor = val; 
+  }
+  /// Return item's label text color.
+  Fl_Color labelcolor() const {
+    return(_labelfgcolor); 
+  }
+  /// Return item's label foreground text color.
+  Fl_Color labelfgcolor() const {
+    return(_labelfgcolor); 
+  }
+  /// Set item's label background color.
+  void labelbgcolor(Fl_Color val) {
+    _labelbgcolor = val; 
+  }
+  /// Return item's background text color.
+  Fl_Color labelbgcolor() const {
+    return(_labelbgcolor); 
+  }
+  /// Assign an FLTK widget to this item.
+  void widget(fltk3::Widget *val) {
+    _widget = val; 
+  }
+  /// Return FLTK widget assigned to this item.
+  fltk3::Widget *widget() const {
+    return(_widget); 
+  }
+  /// Return the number of children this item has.
+  int children() const {
+    return(_children.total()); 
+  }
+  /// Return the child item for the given 'index'.
+  Fl_Tree_Item *child(int index) {
+    return(_children[index]); 
+  }
+  /// Return the const child item for the given 'index'.
+  const Fl_Tree_Item *child(int t) const;
+  /// See if this item has children.
+  int has_children() const {
+    return(children()); 
+  }
+  int find_child(const char *name);
+  int find_child(Fl_Tree_Item *item);
+  int remove_child(Fl_Tree_Item *item);
+  int remove_child(const char *new_label);
+  void clear_children();
+  void swap_children(int ax, int bx);
+  int swap_children(Fl_Tree_Item *a, Fl_Tree_Item *b);
+  const Fl_Tree_Item *find_item(char **arr) const;
+  Fl_Tree_Item *find_item(char **arr);
+  //////////////////
+  // Adding items
+  //////////////////
+  Fl_Tree_Item *add(const Fl_Tree_Prefs &prefs, const char *new_label);
+  Fl_Tree_Item *add(const Fl_Tree_Prefs &prefs, char **arr);
+  Fl_Tree_Item *insert(const Fl_Tree_Prefs &prefs, const char *new_label, int pos=0);
+  Fl_Tree_Item *insert_above(const Fl_Tree_Prefs &prefs, const char *new_label);
+  int depth() const;
+  Fl_Tree_Item *prev();
+  Fl_Tree_Item *next();
+  
+  /// Return the parent for this item.
+  Fl_Tree_Item *parent() {
+    return(_parent);
+  }
+  /// Return the const parent for this item.
+  const Fl_Tree_Item *parent() const {
+    return(_parent);
+  }
+  /// Set the parent for this item.
+  /// Should only be used by Fl_Tree's internals.
+  ///
+  void parent(Fl_Tree_Item *val) {
+    _parent = val;
+  }
+  //////////////////
+  // State
+  //////////////////
+  void open();
+  void close();
+  /// See if the item is 'open'.
+  int is_open() const {
+    return(_open?1:0);
+  }
+  /// See if the item is 'closed'.
+  int is_close() const {
+    return(_open?0:1);
+  }
+  /// Toggle the item's open/closed state.
+  void open_toggle() {
+    _open?close():open();
+  }
+  /// Change the item's selection state to the optionally specified 'val'.
+  /// If 'val' is not specified, the item will be selected.
+  ///
+  void select(int val=1) {
+    _selected = val;
+  }
+  /// Toggle the item's selection state.
+  void select_toggle() {
+    if ( is_selected() ) {
+      deselect();		// deselect if selected
+    } else {
+      select();		// select if deselected
+    }
+  }
+  /// Select self and all children
+  ///     Returns count of how many items were in the 'deselected' state,
+  ///     ie. how many items were "changed".
+  ///
+  int select_all() {
+    int count = 0;
+    if ( ! is_selected() ) {
+      select();
+      ++count;
+    }
+    for ( int t=0; t<children(); t++ ) {
+      count += child(t)->select_all();
+    }
+    return(count);
+  }
+  /// Disable the item's selection state.
+  void deselect() {
+    _selected = 0;
+  }
+  /// Deselect self and all children
+  ///     Returns count of how many items were in the 'selected' state,
+  ///     ie. how many items were "changed".
+  ///
+  int deselect_all() {
+    int count = 0;
+    if ( is_selected() ) {
+      deselect();
+      ++count;
+    }
+    for ( int t=0; t<children(); t++ ) {
+      count += child(t)->deselect_all();
+    }
+    return(count);
+  }
+  /// See if the item is selected.
+  char is_selected() const {
+    return(_selected);
+  }
+  /// Change the item's activation state to the optionally specified 'val'.
+  ///
+  /// When deactivated, the item will be 'grayed out'; the callback() 
+  /// won't be invoked if the user clicks on the label. If the item
+  /// has a widget() associated with the item, its activation state
+  /// will be changed as well.
+  ///
+  /// If 'val' is not specified, the item will be activated.
+  ///
+  void activate(int val=1) {
+    _active = val;
+    if ( _widget && val != (int)_widget->active() ) {
+      if ( val ) {
+	_widget->activate();
+      } else {
+	_widget->deactivate();
+      }
+      _widget->redraw();
+    }
+  }
+  /// Deactivate the item; the callback() won't be invoked when clicked.
+  /// Same as activate(0)
+  ///
+  void deactivate() {
+    activate(0);
+  }
+  /// See if the item is activated.
+  char is_activated() const {
+    return(_active);
+  }
+  /// See if the item is activated.
+  char is_active() const {
+    return(_active);
+  }
+  /// Set the user icon's image. '0' will disable.
+  void usericon(Fl_Image *val) {
+    _usericon = val;
+  }
+  /// Get the user icon. Returns '0' if disabled.
+  Fl_Image *usericon() const {
+    return(_usericon);
+  }
+  //////////////////
+  // Events
+  //////////////////
+  const Fl_Tree_Item *find_clicked(const Fl_Tree_Prefs &prefs) const;
+  Fl_Tree_Item *find_clicked(const Fl_Tree_Prefs &prefs);
+  int event_on_collapse_icon(const Fl_Tree_Prefs &prefs) const;
+  int event_on_label(const Fl_Tree_Prefs &prefs) const;
+  /// Is this item the root of the tree?
+  int is_root() const {
+    return(_parent==0?1:0);
+  }
+};
+
+#endif /*FL_TREE_ITEM_H*/
+
+//
+// End of "$Id: Fl_Tree_Item.H 6957 2009-12-08 08:39:31Z greg.ercolano $".
+//

Added: branches/branch-3.0/fltk3/Fl_Tree_Item_Array.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Tree_Item_Array.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Tree_Item_Array.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,88 @@
+//
+// "$Id: Fl_Tree_Item_Array.H 6956 2009-12-08 08:06:44Z greg.ercolano $"
+//
+
+#ifndef _FL_TREE_ITEM_ARRAY_H
+#define _FL_TREE_ITEM_ARRAY_H
+
+class Fl_Tree_Item;		// forward decl must *precede* first doxygen comment block
+				// or doxygen will not document our class..
+
+//////////////////////////
+// FL/Fl_Tree_Item_Array.H
+//////////////////////////
+//
+// Fl_Tree -- This file is part of the Fl_Tree widget for FLTK
+// Copyright (C) 2009 by Greg Ercolano.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+
+///
+/// \file
+/// \brief This file defines a class that manages an array of Fl_Tree_Item pointers.
+///
+
+/// \brief Manages an array of Fl_Tree_Item pointers.
+///
+/// Because FLTK 1.x.x. has mandated that templates and STL not be used,
+/// we use this class to dynamically manage the arrays.
+///
+/// None of the methods do range checking on index values; the caller
+/// must be sure that index values are within the range 0<index<total()
+/// (unless otherwise noted).
+///
+
+class Fl_Tree_Item_Array {
+  Fl_Tree_Item **_items;	// items array
+  int _total;			// #items in array
+  int _size;			// #items *allocated* for array
+  int _chunksize;		// #items to enlarge mem allocation
+  void enlarge(int count);
+public:
+  Fl_Tree_Item_Array(int new_chunksize = 10);		// CTOR
+  ~Fl_Tree_Item_Array();				// DTOR
+  Fl_Tree_Item_Array(const Fl_Tree_Item_Array *o);	// COPY CTOR
+  /// Return the item and index \p i.
+  Fl_Tree_Item *operator[](int i) {
+    return(_items[i]);
+  }
+  /// Const version of operator[](int i)
+  const Fl_Tree_Item *operator[](int i) const {
+    return(_items[i]);
+  }
+  /// Return the total items in the array, or 0 if empty.
+  int total() const {
+    return(_total);
+  }
+  /// Swap the two items at index positions \p ax and \p bx.
+  void swap(int ax, int bx) {
+    Fl_Tree_Item *asave = _items[ax];
+    _items[ax] = _items[bx];
+    _items[bx] = asave;
+  }
+  void clear();
+  void add(Fl_Tree_Item *val);
+  void insert(int pos, Fl_Tree_Item *new_item);
+  void remove(int index);
+  int  remove(Fl_Tree_Item *item);
+};
+
+#endif /*_FL_TREE_ITEM_ARRAY_H*/
+
+//
+// End of "$Id: Fl_Tree_Item_Array.H 6956 2009-12-08 08:06:44Z greg.ercolano $".
+//

Added: branches/branch-3.0/fltk3/Fl_Tree_Prefs.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Tree_Prefs.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Tree_Prefs.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,361 @@
+//
+// "$Id: Fl_Tree_Prefs.H 6956 2009-12-08 08:06:44Z greg.ercolano $"
+//
+
+#ifndef FL_TREE_PREFS_H
+#define FL_TREE_PREFS_H
+
+//////////////////////
+// FL/Fl_Tree_Prefs.H
+//////////////////////
+//
+// Fl_Tree -- This file is part of the Fl_Tree widget for FLTK
+// Copyright (C) 2009 by Greg Ercolano.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+
+///
+/// \file
+/// \brief This file contains the definitions for Fl_Tree's preferences.
+///
+/// \code
+///                  Fl_Tree_Prefs
+///                       :
+///                  .....:.......
+///                  :           :
+///               Fl_Tree        :
+///                  |_____ Fl_Tree_Item
+///
+/// \endcode
+///
+
+/// \class Fl_Tree_Prefs
+/// \brief Tree widget's preferences.
+
+/// \enum Fl_Tree_Sort
+/// Sort order options for items added to the tree
+///
+enum Fl_Tree_Sort {
+  FL_TREE_SORT_NONE=0,	///< No sorting; items are added in the order defined (default).
+  FL_TREE_SORT_ASCENDING=1,	///< Add items in ascending sort order.
+  FL_TREE_SORT_DESCENDING=2	///< Add items in descending sort order.
+};
+
+/// \enum Fl_Tree_Connector
+/// Defines the style of connection lines between items.
+///
+enum Fl_Tree_Connector {
+  FL_TREE_CONNECTOR_NONE=0,	///< Use no lines connecting items
+  FL_TREE_CONNECTOR_DOTTED=1,	///< Use dotted lines connecting items (default)
+  FL_TREE_CONNECTOR_SOLID=2	///< Use solid lines connecting items
+};
+
+/// \enum Fl_Tree_Select
+/// Tree selection style.
+///
+enum Fl_Tree_Select {
+  FL_TREE_SELECT_NONE=0,	///< Nothing selected when items are clicked
+  FL_TREE_SELECT_SINGLE,	///< Single item selected when item is clicked (default)
+  FL_TREE_SELECT_MULTI	///< Multiple items can be selected by clicking with
+  ///< SHIFT or CTRL or mouse drags.
+};
+
+/// \class Fl_Tree_Prefs
+///
+/// \brief Fl_Tree's Preferences class.
+///
+/// This class manages the Fl_Tree's defaults.
+/// You should probably be using the methods in Fl_Tree
+/// instead of trying to accessing tree's preferences settings directly.
+///
+class Fl_Tree_Prefs {
+  int _labelfont;			// label's font face
+  int _labelsize;			// label's font size
+  int _margintop;			// -- 
+  int _marginleft;			//   |- tree's margins
+  //int _marginright;			//   |
+  //int _marginbottom;			// --
+  int _openchild_marginbottom;		// extra space below an open child tree
+  int _usericonmarginleft;		// space to left of user icon (if any)
+  int _labelmarginleft;			// space to left of label
+  int _connectorwidth;			// connector width (right of open/close icon)
+  int _linespacing;			// vertical space between lines
+  // Colors
+  Fl_Color _fgcolor;			// label's foreground color
+  Fl_Color _bgcolor;			// background color
+  Fl_Color _selectcolor;		// selection color
+  Fl_Color _inactivecolor;		// inactive color
+  Fl_Color _connectorcolor;		// connector dotted line color
+  Fl_Tree_Connector _connectorstyle;	// connector line style
+  Fl_Image *_openimage;			// the 'open' icon [+]
+  Fl_Image *_closeimage;		// the 'close' icon [-]
+  Fl_Image *_userimage;			// user's own icon
+  char _showcollapse;			// 1=show collapse icons, 0=don't
+  char _showroot;			// show the root item as part of the tree
+  Fl_Tree_Sort   _sortorder;		// none, ascening, descending, etc.
+  Fl_Boxtype     _selectbox;		// selection box type
+  Fl_Tree_Select _selectmode;		// selection mode
+public:
+  Fl_Tree_Prefs();
+  
+  ////////////////////////////
+  // Labels
+  ////////////////////////////
+  /// Return the label's font.
+  inline int labelfont() const {
+    return(_labelfont);
+  }
+  /// Set the label's font to \p val.
+  inline void labelfont(int val) {
+    _labelfont = val;
+  }
+  /// Return the label's size in pixels.
+  inline int labelsize() const {
+    return(_labelsize);
+  }
+  /// Set the label's size in pixels to \p val.
+  inline void labelsize(int val) {
+    _labelsize = val;
+  }
+  
+  ////////////////////////////
+  // Margins
+  ////////////////////////////
+  /// Get the left margin's value in pixels
+  inline int marginleft() const {
+    return(_marginleft);
+  }
+  /// Set the left margin's value in pixels
+  inline void marginleft(int val) {
+    _marginleft = val;
+  }
+  /// Get the top margin's value in pixels
+  inline int margintop() const {
+    return(_margintop);
+  }
+  /// Set the top margin's value in pixels
+  inline void margintop(int val) {
+    _margintop = val;
+  }
+  /// Get the margin below an open child in pixels
+  inline int openchild_marginbottom() const {
+    return(_openchild_marginbottom);
+  }
+  /// Set the margin below an open child in pixels
+  inline void openchild_marginbottom(int val) {
+    _openchild_marginbottom = val;
+  }
+  
+  /****** NOT IMPLEMENTED
+   inline int marginright() const {
+   return(_marginright);
+   }
+   inline void marginright(int val) {
+   _marginright = val;
+   }
+   inline int marginbottom() const {
+   return(_marginbottom);
+   }
+   inline void marginbottom(int val) {
+   _marginbottom = val;
+   }
+   *******/
+  
+  /// Get the user icon's left margin value in pixels
+  inline int usericonmarginleft() const {
+    return(_usericonmarginleft);
+  }
+  /// Set the user icon's left margin value in pixels
+  inline void usericonmarginleft(int val) {
+    _usericonmarginleft = val;
+  }
+  /// Get the label's left margin value in pixels
+  inline int labelmarginleft() const {
+    return(_labelmarginleft);
+  }
+  /// Set the label's left margin value in pixels
+  inline void labelmarginleft(int val) {
+    _labelmarginleft = val;
+  }
+  /// Get the line spacing value in pixels
+  inline int linespacing() const {
+    return(_linespacing);
+  }
+  /// Set the line spacing value in pixels
+  inline void linespacing(int val) {
+    _linespacing = val;
+  }
+  
+  ////////////////////////////
+  // Colors and Styles
+  ////////////////////////////
+  /// Get the default label foreground color
+  inline Fl_Color fgcolor() const {
+    return(_fgcolor);
+  }
+  /// Set the default label foreground color
+  inline void fgcolor(Fl_Color val) {
+    _fgcolor = val;
+  }
+  /// Get the default label background color
+  inline Fl_Color bgcolor() const {
+    return(_bgcolor);
+  }
+  /// Set the default label background color
+  inline void bgcolor(Fl_Color val) {
+    _bgcolor = val;
+  }
+  /// Get the default selection color
+  inline Fl_Color selectcolor() const {
+    return(_selectcolor);
+  }
+  /// Set the default selection color
+  inline void selectcolor(Fl_Color val) {
+    _selectcolor = val;
+  }
+  /// Get the default inactive color
+  inline Fl_Color inactivecolor() const {
+    return(_inactivecolor);
+  }
+  /// Set the default inactive color
+  inline void inactivecolor(Fl_Color val) {
+    _inactivecolor = val;
+  }
+  /// Get the connector color; the color used for tree connection lines
+  inline Fl_Color connectorcolor() const {
+    return(_connectorcolor);
+  }
+  /// Set the connector color; the color used for tree connection lines
+  inline void connectorcolor(Fl_Color val) {
+    _connectorcolor = val;
+  }
+  /// Get the connector style
+  inline Fl_Tree_Connector connectorstyle() const {
+    return(_connectorstyle);
+  }
+  /// Set the connector style
+  inline void connectorstyle(Fl_Tree_Connector val) {
+    _connectorstyle = val;
+  }
+  /// Set the connector style [integer].
+  inline void connectorstyle(int val) {
+    _connectorstyle = Fl_Tree_Connector(val);
+  }
+  /// Get the tree connection line's width
+  inline int connectorwidth() const {
+    return(_connectorwidth);
+  }
+  /// Set the tree connection line's width
+  inline void connectorwidth(int val) {
+    _connectorwidth = val;
+  }
+  
+  ////////////////////////////
+  // Icons
+  ////////////////////////////
+  /// Get the current default 'open' icon.
+  ///     Returns the Fl_Image* of the icon, or 0 if none.
+  ///
+  inline Fl_Image *openicon() const {
+    return(_openimage);
+  }
+  void openicon(Fl_Image *val);
+  /// Gets the default 'close' icon
+  ///     Returns the Fl_Image* of the icon, or 0 if none.
+  ///
+  inline Fl_Image *closeicon() const {
+    return(_closeimage);
+  }
+  void closeicon(Fl_Image *val);
+  /// Gets the default 'user icon' (default is 0)
+  inline Fl_Image *usericon() const {
+    return(_userimage);
+  }
+  /// Sets the default 'user icon'
+  ///     Returns the Fl_Image* of the icon, or 0 if none (default).
+  ///
+  inline void usericon(Fl_Image *val) {
+    _userimage = val;
+  }
+  
+  ////////////////////////////
+  // Options
+  ////////////////////////////
+  /// Returns 1 if the collapse icon is enabled, 0 if not.
+  inline char showcollapse() const {
+    return(_showcollapse);
+  }
+  /// Set if we should show the collapse icon or not.
+  /// If collapse icons are disabled, the user will not be able
+  /// to interactively collapse items in the tree, unless the application
+  /// provides some other means via open() and close().
+  ///
+  /// \param[in] val 1: shows collapse icons (default),\n
+  ///                0: hides collapse icons.
+  ///
+  inline void showcollapse(int val) {
+    _showcollapse = val;
+  }
+  /// Get the default sort order value
+  inline Fl_Tree_Sort sortorder() const {
+    return(_sortorder);
+  }
+  /// Set the default sort order value.
+  ///     Defines the order new items appear when add()ed to the tree.
+  ///     See Fl_Tree_Sort for possible values.
+  ///
+  inline void sortorder(Fl_Tree_Sort val) {
+    _sortorder = val;
+  }
+  /// Get the default selection box's box drawing style as an Fl_Boxtype.
+  inline Fl_Boxtype selectbox() const {
+    return(_selectbox);
+  }
+  /// Set the default selection box's box drawing style to \p val.
+  inline void selectbox(Fl_Boxtype val) {
+    _selectbox = val;
+  }
+  /// Returns 1 if the root item is to be shown, or 0 if not.
+  inline int showroot() const {
+    return(int(_showroot));
+  }
+  /// Set if the root item should be shown or not.
+  /// \param[in] val 1 -- show the root item (default)\n
+  ///                0 -- hide the root item.
+  ///
+  inline void showroot(int val) {
+    _showroot = char(val);
+  }
+  /// Get the selection mode used for the tree
+  inline Fl_Tree_Select selectmode() const {
+    return(_selectmode);
+  }
+  /// Set the selection mode used for the tree to \p val.
+  ///     This affects how items in the tree are selected
+  ///     when clicked on and dragged over by the mouse.
+  ///     See Fl_Tree_Select for possible values.
+  ///
+  inline void selectmode(Fl_Tree_Select val) {
+    _selectmode = val;
+  }
+};
+
+#endif /*FL_TREE_PREFS_H*/
+
+//
+// End of "$Id: Fl_Tree_Prefs.H 6956 2009-12-08 08:06:44Z greg.ercolano $".
+//

Added: branches/branch-3.0/fltk3/Fl_Valuator.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Valuator.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Valuator.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,144 @@
+//
+// "$Id: Fl_Valuator.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// Valuator header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Valuator widget . */
+
+#ifndef Fl_Valuator_H
+#define Fl_Valuator_H
+
+#ifndef Fl_Widget_H
+#include "Fl_Widget.H"
+#endif
+
+// shared type() values for classes that work in both directions:
+#define FL_VERTICAL		0 ///< The valuator can work vertically
+#define FL_HORIZONTAL		1 ///< The valuator can work horizontally
+
+/**
+  The Fl_Valuator class controls a single floating-point value
+  and provides a consistent interface to set the value, range, and step,
+  and insures that callbacks are done the same for every object.
+  <P>There are probably more of these classes in FLTK than any others:
+  <P ALIGN=CENTER>\image html  valuators.gif</P> 
+  \image latex   valuators.eps "Valuators derived from Fl_Valuators" width=10cm
+  <P>In the above diagram each box surrounds an actual subclass.  These
+  are further differentiated by setting the type() of the widget t
+  o the symbolic value labeling the widget.  
+  The ones labelled "0" are the default versions with a type(0).  
+  For consistency the symbol FL_VERTICAL is defined as zero.
+*/
+class FL_EXPORT Fl_Valuator : public fltk3::Widget {
+
+  double value_;
+  double previous_value_;
+  double min, max; // truncates to this range *after* rounding
+  double A; int B; // rounds to multiples of A/B, or no rounding if A is zero
+
+protected:
+  /** Tells if the valuator is an FL_HORIZONTAL one */
+  int horizontal() const {return type()& FL_HORIZONTAL;}
+  Fl_Valuator(int X, int Y, int W, int H, const char* L);
+
+  /** Gets the previous floating point value before an event changed it */
+  double previous_value() const {return previous_value_;}
+  /** Stores the current value in the previous value */
+  void handle_push() {previous_value_ = value_;}
+  double softclamp(double);
+  void handle_drag(double newvalue);
+  void handle_release(); // use drag() value
+  virtual void value_damage(); // cause damage() due to value() changing
+  /** Sets the current floating point value. */
+  void set_value(double v) {value_ = v;}
+
+public:
+
+    /**    Sets the minimum (a) and maximum (b) values for the valuator widget. */
+    void bounds(double a, double b) {min=a; max=b;}
+    /**    Gets the minimum value for the valuator.  */
+    double minimum() const {return min;}
+    /**    Sets the minimum value for the valuator.  */
+    void minimum(double a) {min = a;}
+    /**    Gets the maximum value for the valuator.  */
+    double maximum() const {return max;}
+    /**    Sets the maximum value for the valuator.  */
+    void maximum(double a) {max = a;}
+  /**
+    Sets the minimum and maximum values for the valuator. When
+    the user manipulates the widget, the value is limited to this
+    range. This clamping is done <I>after</I> rounding to the step
+    value (this makes a difference if the range is not a multiple of
+    the step).
+    
+    <P>The minimum may be greater than the maximum. This has the
+    effect of "reversing" the object so the larger values
+    are in the opposite direction. This also switches which end of
+    the filled sliders is filled.</P>
+    
+    <P>Some widgets consider this a "soft" range.  This
+    means they will stop at the range, but if the user releases and
+    grabs the control again and tries to move it further, it is
+    allowed.</P>
+    
+    <P>The range may affect the display. You must redraw()
+    the widget after changing the range.
+  */
+  void range(double a, double b) {min = a; max = b;}
+  /**    See double Fl_Valuator::step() const   */
+  void step(int a) {A = a; B = 1;}
+  /**    See double Fl_Valuator::step() const   */
+  void step(double a, int b) {A = a; B = b;}
+  void step(double s);
+  /**
+    Gets or sets the step value. As the user moves the mouse the
+    value is rounded to the nearest multiple of the step value. This
+    is done <I>before</I> clamping it to the range. For most widgets
+    the default step is zero.
+    
+    <P>For precision the step is stored as the ratio of two
+    integers, A/B. You can set these integers directly. Currently
+    setting a floating point value sets the nearest A/1 or 1/B value
+    possible.
+  */
+  double step() const {return A/B;}
+  void precision(int);
+
+  /** Gets the floating point(double) value. See int value(double) */
+  double value() const {return value_;}
+  int value(double);
+
+  virtual int format(char*);
+  double round(double); // round to nearest multiple of step
+  double clamp(double); // keep in range
+  double increment(double, int); // add n*step to value
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Valuator.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Value_Input.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Value_Input.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Value_Input.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,135 @@
+//
+// "$Id: Fl_Value_Input.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// Value input header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Value_Input widget . */
+
+#ifndef Fl_Value_Input_H
+#define Fl_Value_Input_H
+
+#include "Fl_Valuator.H"
+#include "Fl_Input.H"
+
+/**
+  The Fl_Value_Input widget displays a numeric value.
+  The user can click in the text field and edit it - there is in
+  fact a hidden Fl_Input widget with
+  type(FL_FLOAT_INPUT) or type(FL_INT_INPUT) in
+  there - and when they hit return or tab the value updates to
+  what they typed and the callback is done.
+  
+  <P>If step() is non-zero and integral, then the range of numbers
+  is limited to integers instead of floating point numbers. As
+  well as displaying the value as an integer, typed input is also
+  limited to integer values, even if the hidden Fl_Input widget
+  is of type(FL_FLOAT_INPUT).</P>
+  
+  <P>If step() is non-zero, the user can also drag the
+  mouse across the object and thus slide the value. The left
+  button moves one step() per pixel, the middle by 10
+  * step(), and the right button by 100 * step(). It
+  is therefore impossible to select text by dragging across it,
+  although clicking can still move the insertion cursor.</P>
+  
+  <P>If step() is non-zero and integral, then the range
+  of numbers are limited to integers instead of floating point
+  values.
+  
+  <P ALIGN="CENTER">\image html Fl_Value_Input.gif 
+  \image latex  Fl_Value_Input.eps "Fl_Value_Input" width=8cm
+*/
+class FL_EXPORT Fl_Value_Input : public Fl_Valuator {
+public:
+  /* This is the encapsulated Fl_input attribute to which 
+  this class delegates the value font, color and shortcut */
+  Fl_Input input;
+private:
+  char soft_;
+  static void input_cb(fltk3::Widget*,void*);
+  virtual void value_damage(); // cause damage() due to value() changing
+public:
+  int handle(int);
+protected:
+  void draw();
+public:
+  void resize(int,int,int,int);
+  Fl_Value_Input(int x,int y,int w,int h,const char *l=0);
+  ~Fl_Value_Input();
+
+  /** See void Fl_Value_Input::soft(char s) */
+  void soft(char s) {soft_ = s;}
+  /**
+    If "soft" is turned on, the user is allowed to drag
+    the value outside the range. If they drag the value to one of
+    the ends, let go, then grab again and continue to drag, they can
+    get to any value. The default is true.
+  */
+  char soft() const {return soft_;}
+  /**
+    The first form returns the current shortcut key for the Input.
+    <P>The second form sets the shortcut key to key. Setting this
+    overrides the use of '&' in the label().  The value is a bitwise
+    OR of a key and a set of shift flags, for example FL_ALT | 'a'
+    , FL_ALT | (FL_F + 10), or just 'a'.  A value
+    of 0 disables the shortcut. </P>
+    <P>The key can be any value returned by 
+    fltk3::event_key(), but will usually be an ASCII letter.  Use
+    a lower-case letter unless you require the shift key to be held down. </P>
+    <P>The shift flags can be any set of values accepted by 
+    fltk3::event_state().  If the bit is on that shift key must
+    be pushed.  Meta, Alt, Ctrl, and Shift must be off if they are not in
+    the shift flags (zero for the other bits indicates a "don't care"
+    setting).
+  */
+  int shortcut() const {return input.shortcut();}
+  /** See int Fl_Value_Input::shortcut() const */
+  void shortcut(int s) {input.shortcut(s);}
+
+  /** Gets the typeface of the text in the value box.  */
+  Fl_Font textfont() const {return input.textfont();}
+  /** Sets the typeface of the text in the value box.  */
+  void textfont(Fl_Font s) {input.textfont(s);}
+  /** Gets the size of the text in the value box.  */
+  Fl_Fontsize textsize() const {return input.textsize();}
+  /** Sets the size of the text in the value box.  */
+  void textsize(Fl_Fontsize s) {input.textsize(s);}
+  /** Gets the color of the text in the value box.  */
+  Fl_Color textcolor() const {return input.textcolor();}
+  /** Sets the color of the text in the value box.*/
+  void textcolor(Fl_Color n) {input.textcolor(n);}
+  /** Gets the color of the text cursor. The text cursor is black by default. */
+  Fl_Color cursor_color() const {return input.cursor_color();}
+  /** Sets the color of the text cursor. The text cursor is black by default. */
+  void cursor_color(Fl_Color n) {input.cursor_color(n);}
+
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Value_Input.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Value_Output.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Value_Output.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Value_Output.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,95 @@
+//
+// "$Id: Fl_Value_Output.H 6902 2009-09-27 11:06:56Z matt $"
+//
+// Value output header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Value_Output widget . */
+
+#ifndef Fl_Value_Output_H
+#define Fl_Value_Output_H
+
+#ifndef Fl_Valuator_H
+#include "Fl_Valuator.H"
+#endif
+
+/**
+  The Fl_Value_Output widget displays a floating point value.
+  If step() is not zero, the user can adjust the value by
+  dragging the mouse left and right.  The left button moves one step()
+  per pixel, the middle by 10 * step(), and the right button by 
+  100 * step().
+  <P>This is much lighter-weight than 
+  Fl_Value_Input because it contains no text editing code or
+  character buffer. </P>
+  <P ALIGN=CENTER>\image html Fl_Value_Output.gif 
+  \image latex  Fl_Value_Output.eps "Fl_Value_Output" width=8cm
+*/
+class FL_EXPORT Fl_Value_Output : public Fl_Valuator {
+  Fl_Font textfont_;
+  Fl_Fontsize textsize_;
+  uchar soft_;
+  Fl_Color textcolor_;
+
+protected:
+  void draw();
+
+public:
+  int handle(int);
+  Fl_Value_Output(int x,int y,int w,int h,const char *l=0);
+
+  /**
+    If "soft" is turned on, the user is allowed to drag the value outside
+    the range.  If they drag the value to one of the ends, let go, then
+    grab again and continue to drag, they can get to any value.  Default is
+    one.
+  */
+  void soft(uchar s) {soft_ = s;}
+  /**
+    If "soft" is turned on, the user is allowed to drag the value outside
+    the range.  If they drag the value to one of the ends, let go, then
+    grab again and continue to drag, they can get to any value.  Default is
+    one.
+  */
+  uchar soft() const {return soft_;}
+
+  /**    Gets the typeface of the text in the value box.  */
+  Fl_Font textfont() const {return textfont_;}
+  /**    Sets the typeface of the text in the value box.  */
+  void textfont(Fl_Font s) {textfont_ = s;}
+  /**    Gets the size of the text in the value box.  */
+  Fl_Fontsize textsize() const {return textsize_;}
+  void textsize(Fl_Fontsize s) {textsize_ = s;}
+  /**    Sets the color of the text in the value box.  */
+  Fl_Color textcolor() const {return textcolor_;}
+  /**    Gets the color of the text in the value box.  */
+  void textcolor(Fl_Color s) {textcolor_ = s;}
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Value_Output.H 6902 2009-09-27 11:06:56Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Value_Slider.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Value_Slider.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Value_Slider.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,69 @@
+//
+// "$Id: Fl_Value_Slider.H 6902 2009-09-27 11:06:56Z matt $"
+//
+// Value slider header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Value_Slider widget . */
+
+#ifndef Fl_Value_Slider_H
+#define Fl_Value_Slider_H
+
+#include "Fl_Slider.H"
+
+/**
+  The Fl_Value_Slider widget is a Fl_Slider widget
+  with a box displaying the current value.
+  <P ALIGN=CENTER>\image html value_slider.gif 
+  \image latex  value_slider.eps "Fl_Value_Slider" width=4cm
+*/
+class FL_EXPORT Fl_Value_Slider : public Fl_Slider {
+    Fl_Font textfont_;
+    Fl_Fontsize textsize_;
+    Fl_Color textcolor_;
+protected:
+    void draw();
+public:
+    int handle(int);
+    Fl_Value_Slider(int x,int y,int w,int h, const char *l = 0);
+    /**    Gets the typeface of the text in the value box.  */
+    Fl_Font textfont() const {return textfont_;}
+    /**    Sets the typeface of the text in the value box.  */
+    void textfont(Fl_Font s) {textfont_ = s;}
+    /**    Gets the size of the text in the value box.  */
+    Fl_Fontsize textsize() const {return textsize_;}
+    /**    Sets the size of the text in the value box.  */
+    void textsize(Fl_Fontsize s) {textsize_ = s;}
+    /**    Gets the color of the text in the value box.  */
+    Fl_Color textcolor() const {return textcolor_;}
+    /**    Sets the color of the text in the value box.  */
+    void textcolor(Fl_Color s) {textcolor_ = s;}
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Value_Slider.H 6902 2009-09-27 11:06:56Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Widget.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Widget.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Widget.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,978 @@
+//
+// "$Id: Fl_Widget.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// Widget header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   fltk3::Widget, Fl_Label classes . */
+
+#ifndef Fl_Widget_H
+#define Fl_Widget_H
+
+#include "Enumerations.H"
+
+namespace fltk3 {
+  class Window;
+  class Widget;
+  class Group;
+}
+
+class Fl_Image;
+
+/** Default callback type definition for all fltk widgets (by far the most used) */
+typedef void (Fl_Callback )(fltk3::Widget*, void*);
+/** Default callback type pointer definition for all fltk widgets */
+typedef Fl_Callback* Fl_Callback_p; // needed for BORLAND
+/** One parameter callback type definition passing only the widget */
+typedef void (Fl_Callback0)(fltk3::Widget*);
+/** Callback type definition passing the widget and a long data value */
+typedef void (Fl_Callback1)(fltk3::Widget*, long);
+
+/** This struct stores all information for a text or mixed graphics label.
+
+    \todo For FLTK 1.3, the Fl_Label type will become a widget by itself. That way
+          we will be avoiding a lot of code duplication by handling labels in 
+          a similar fashion to widgets containing text. We also provide an easy
+          interface for very complex labels, containing html or vector graphics.
+ */
+struct FL_EXPORT Fl_Label {
+  /** label text */
+  const char* value;
+  /** optional image for an active label */
+  Fl_Image* image;
+  /** optional image for a deactivated label */
+  Fl_Image* deimage;
+  /** label font used in text */
+  Fl_Font font;
+  /** size of label font */
+  Fl_Fontsize size;
+  /** text color */
+  Fl_Color color;
+  /** alignment of label */
+  Fl_Align align_;
+  /** type of label. \see Fl_Labeltype */
+  uchar type;
+
+  /** Draws the label aligned to the given box */
+  void draw(int,int,int,int, Fl_Align) const ;
+  void measure(int &w, int &h) const ;
+};
+
+
+/** fltk3::Widget is the base class for all widgets in FLTK.  
+  
+    You can't create one of these because the constructor is not public.
+    However you can subclass it.  
+
+    All "property" accessing methods, such as color(), parent(), or argument() 
+    are implemented as trivial inline functions and thus are as fast and small 
+    as accessing fields in a structure. Unless otherwise noted, the property 
+    setting methods such as color(n) or label(s) are also trivial inline 
+    functions, even if they change the widget's appearance. It is up to the 
+    user code to call redraw() after these.
+ */
+class FL_EXPORT fltk3::Widget {
+  friend class Group;
+
+  fltk3::Group* parent_;
+  Fl_Callback* callback_;
+  void* user_data_;
+  int x_,y_,w_,h_;
+  Fl_Label label_;
+  unsigned int flags_;
+  Fl_Color color_;
+  Fl_Color color2_;
+  uchar type_;
+  uchar damage_;
+  uchar box_;
+  uchar when_;
+
+  const char *tooltip_;
+
+  /** unimplemented copy ctor */
+  Widget(const fltk3::Widget &);
+  /** unimplemented assignment operator */
+  Widget& operator=(const fltk3::Widget &);
+
+protected:
+
+  /** Internal use only. Use position(int,int), size(int,int) or resize(int,int,int,int) instead. */
+  void x(int v) {x_ = v;}
+  /** Internal use only. Use position(int,int), size(int,int) or resize(int,int,int,int) instead. */
+  void y(int v) {y_ = v;}
+  /** Internal use only. Use position(int,int), size(int,int) or resize(int,int,int,int) instead. */
+  void w(int v) {w_ = v;}
+  /** Internal use only. Use position(int,int), size(int,int) or resize(int,int,int,int) instead. */
+  void h(int v) {h_ = v;}
+  /** Gets the widget flags mask */
+  unsigned int flags() const {return flags_;}
+  /** Sets a flag in the flags mask */
+  void set_flag(unsigned int c) {flags_ |= c;}
+  /** Clears a flag in the flags mask */
+  void clear_flag(unsigned int c) {flags_ &= ~c;}
+  /** flags possible values enumeration.
+      See activate(), output(), visible(), changed(), set_visible_focus()
+  */
+  enum {
+        INACTIVE        = 1<<0,   ///< the widget can't receive focus, and is disabled but potentially visible
+        INVISIBLE       = 1<<1,   ///< the widget is not drawn but can receive events
+        OUTPUT          = 1<<2,   ///< for output only
+        NOBORDER        = 1<<3,   ///< don't draw a decoration (fltk3::Window)
+        FORCE_POSITION  = 1<<4,   ///< don't let the window manager position the window (fltk3::Window)
+        NON_MODAL       = 1<<5,   ///< thisis a hovering toolbar window (fltk3::Window)
+        SHORTCUT_LABEL  = 1<<6,   ///< the label contains a shortcut we need to draw
+        CHANGED         = 1<<7,   ///< the widget value changed
+        OVERRIDE        = 1<<8,   ///< position window on top (fltk3::Window)
+        VISIBLE_FOCUS   = 1<<9,   ///< accepts keyboard focus navigation if the widget can have the focus
+        COPIED_LABEL    = 1<<10,  ///< the widget label is internally copied, its destruction is handled by the widget
+        CLIP_CHILDREN   = 1<<11,  ///< all drawing within this widget will be clipped (fltk3::Group)
+        MENU_WINDOW     = 1<<12,  ///< a temporary popup window, dismissed by clicking outside (fltk3::Window)
+        TOOLTIP_WINDOW  = 1<<13,  ///< a temporary popup, transparent to events, and dismissed easily (fltk3::Window)
+        MODAL           = 1<<14,  ///< a window blocking input to all other winows (fltk3::Window)
+        NO_OVERLAY      = 1<<15,  ///< window not using a hardware overlay plane (Fl_Menu_Window)
+        GROUP_RELATIVE  = 1<<16,  ///< position this idget relative to the parent group, not to the window
+        // (space for more flags)
+        USERFLAG3       = 1<<29,  ///< reserved for 3rd party extensions
+        USERFLAG2       = 1<<30,  ///< reserved for 3rd party extensions
+        USERFLAG1       = 1<<31   ///< reserved for 3rd party extensions
+  };
+  void draw_box() const;
+  void draw_box(Fl_Boxtype t, Fl_Color c) const;
+  void draw_box(Fl_Boxtype t, int x,int y,int w,int h, Fl_Color c) const;
+  /** draws a focus rectangle around the widget */
+  void draw_focus() {draw_focus(box(),x(),y(),w(),h());}
+  void draw_focus(Fl_Boxtype t, int x,int y,int w,int h) const;
+  void draw_label() const;
+  void draw_label(int, int, int, int) const;
+
+public:
+
+  /** Creates a widget at the given position and size.
+   
+   The fltk3::Widget is a protected constructor, but all derived widgets have a 
+   matching public constructor. It takes a value for x(), y(), w(), h(), and 
+   an optional value for label().
+   
+   \param[in] x, y the position of the widget relative to the enclosing window
+   \param[in] w, h size of the widget in pixels
+   \param[in] label optional text for the widget label
+   */
+  Widget(int x, int y, int w, int h, const char *label=0L);
+
+  /** Destroys the widget.
+      Destroying single widgets is not very common. You almost always want to 
+      destroy the parent group instead, which will destroy all of the child widgets 
+      and groups in that group.
+      
+      \since FLTK 1.3, the widget's destructor removes the widget from its parent
+      group, if it is member of a group.
+   */
+  virtual ~Widget();
+
+  /** Draws the widget.
+      Never call this function directly. FLTK will schedule redrawing whenever
+      needed. If your widget must be redrawn as soon as possible, call redraw()
+      instead.
+
+      Override this function to draw your own widgets.
+
+      If you ever need to call another widget's draw method <I>from within your
+      own draw() method</I>, e.g. for an embedded scrollbar, you can do it
+      (because draw() is virtual) like this:
+
+      \code
+        fltk3::Widget *s = &scroll;		// scroll is an embedded Fl_Scrollbar
+	s->draw();			// calls Fl_Scrollbar::draw()
+      \endcode
+   */
+  virtual void draw() {
+    draw_box();
+    draw_label();
+  }
+
+  /** Handles the specified event. 
+      You normally don't call this method directly, but instead let FLTK do 
+      it when the user interacts with the widget.
+     
+      When implemented in a widget, this function must return 0 if the 
+      widget does not use the event or 1 otherwise.
+
+      Most of the time, you want to call the inherited handle() method in 
+      your overridden method so that you don't short-circuit events that you 
+      don't handle. In this last case you should return the callee retval.
+    
+      \param[in] event the kind of event received
+      \retval 0 if the event was not used or understood
+      \retval 1 if the event was used and can be deleted
+      \see Fl_Event
+   */
+  virtual int handle(int event);
+
+  /** Returns a pointer to the parent widget.  
+      Usually this is a fltk3::Group or fltk3::Window. 
+      \retval NULL if the widget has no parent
+      \see fltk3::Group::add(fltk3::Widget*)
+   */
+  fltk3::Group* parent() const {return parent_;}
+
+  /** Internal use only - "for hacks only".
+  
+      It is \em \b STRONGLY recommended not to use this method, because it
+      short-circuits fltk3::Group's normal widget adding and removing methods,
+      if the widget is already a child widget of another fltk3::Group.
+
+      Use fltk3::Group::add(fltk3::Widget*) and/or fltk3::Group::remove(fltk3::Widget*) instead.
+  */
+  void parent(fltk3::Group* p) {parent_ = p;} // for hacks only, use fltk3::Group::add()
+
+  /** Gets the widget type.
+      Returns the widget type value, which is used for Forms compatibility
+      and to simulate RTTI.
+      
+      \todo Explain "simulate RTTI" (currently only used to decide if a widget
+      is a window, i.e. type()>=FL_WINDOW ?). Is type() really used in a way
+      that ensures "Forms compatibility" ?
+   */
+  uchar type() const {return type_;}
+
+  /** Sets the widget type.
+      This is used for Forms compatibility.
+   */
+  void type(uchar t) {type_ = t;}
+
+  /** Gets the widget position in its window.
+      \return the x position relative to the window
+   */
+  int x() const {return x_;}
+
+  /** Gets the widget position in its window.
+      \return the y position relative to the window
+   */
+  int y() const {return y_;}
+
+  /** Gets the widget width.
+      \return the width of the widget in pixels.
+   */
+  int w() const {return w_;}
+
+  /** Gets the widget height.
+      \return the height of the widget in pixels.
+   */
+  int h() const {return h_;}
+
+  /** Changes the size or position of the widget.
+
+      This is a virtual function so that the widget may implement its 
+      own handling of resizing. The default version does \e not
+      call the redraw() method, but instead relies on the parent widget 
+      to do so because the parent may know a faster way to update the 
+      display, such as scrolling from the old position.  
+
+      Some window managers under X11 call resize() a lot more often 
+      than needed. Please verify that the position or size of a widget 
+      did actually change before doing any extensive calculations.
+
+      position(X, Y) is a shortcut for resize(X, Y, w(), h()), 
+      and size(W, H) is a shortcut for resize(x(), y(), W, H).
+    
+      \param[in] x, y new position relative to the parent window 
+      \param[in] w, h new size
+      \see position(int,int), size(int,int)
+   */
+  virtual void resize(int x, int y, int w, int h);
+
+  /** Internal use only. */
+  int damage_resize(int,int,int,int);
+
+  /** Repositions the window or widget.
+
+      position(X, Y) is a shortcut for resize(X, Y, w(), h()).
+    
+      \param[in] X, Y new position relative to the parent window 
+      \see resize(int,int,int,int), size(int,int)
+   */
+  void position(int X,int Y) {resize(X,Y,w_,h_);}
+
+  /** Changes the size of the widget.
+
+      size(W, H) is a shortcut for resize(x(), y(), W, H).
+    
+      \param[in] W, H new size
+      \see position(int,int), resize(int,int,int,int)
+   */
+  void size(int W,int H) {resize(x_,y_,W,H);}
+
+  /** Gets the label alignment.
+
+      \return label alignment
+      \see label(), align(Fl_Align), Fl_Align
+      \todo This function should not take uchar as an argument. 
+            Apart from the fact that uchar is too short with only 8 bits, 
+	    it does not provide type safety (in which case we don't need 
+	    to declare Fl_Align an enum to begin with).
+	    *NOTE* The current (FLTK 1.3) implementation (Dec 2008) is such that
+	    Fl_Align is (typedef'd to be) "unsigned" (int), but fltk3::Widget's
+	    "align_" member variable is a bit field of 8 bits only !
+   */
+  Fl_Align align() const {return label_.align_;}
+
+  /** Sets the label alignment.
+      This controls how the label is displayed next to or inside the widget. 
+      The default value is FL_ALIGN_CENTER, which centers the label inside 
+      the widget.
+      \param[in] alignment new label alignment
+      \see align(), Fl_Align
+   */
+  void align(Fl_Align alignment) {label_.align_ = alignment;}
+
+  /** Gets the box type of the widget.
+      \return the current box type
+      \see box(Fl_Boxtype), Fl_Boxtype
+   */
+  Fl_Boxtype box() const {return (Fl_Boxtype)box_;}
+  
+  /** Sets the box type for the widget. 
+      This identifies a routine that draws the background of the widget.
+      See Fl_Boxtype for the available types. The default depends on the 
+      widget, but is usually FL_NO_BOX or FL_UP_BOX.
+      \param[in] new_box the new box type
+      \see box(), Fl_Boxtype
+   */
+  void box(Fl_Boxtype new_box) {box_ = new_box;}
+
+  /** Gets the background color of the widget.
+      \return current background color
+      \see color(Fl_Color), color(Fl_Color, Fl_Color)
+   */
+  Fl_Color color() const {return color_;}
+
+  /** Sets the background color of the widget. 
+      The color is passed to the box routine. The color is either an index into 
+      an internal table of RGB colors or an RGB color value generated using 
+      fl_rgb_color().
+      
+      The default for most widgets is FL_BACKGROUND_COLOR. Use fltk3::set_color()
+      to redefine colors in the color map.
+      \param[in] bg background color
+      \see color(), color(Fl_Color, Fl_Color), selection_color(Fl_Color)
+   */
+  void color(Fl_Color bg) {color_ = bg;}
+
+  /** Gets the selection color.
+      \return the current selection color
+      \see selection_color(Fl_Color), color(Fl_Color, Fl_Color)
+   */
+  Fl_Color selection_color() const {return color2_;}
+
+  /** Sets the selection color.
+      The selection color is defined for Forms compatibility and is usually 
+      used to color the widget when it is selected, although some widgets 
+      use this color for other purposes. You can set both colors at once 
+      with color(Fl_Color bg, Fl_Color sel).
+      \param[in] a the new selection color
+      \see selection_color(), color(Fl_Color, Fl_Color)
+   */
+  void selection_color(Fl_Color a) {color2_ = a;}
+
+  /** Sets the background and selection color of the widget. 
+
+      The two color form sets both the background and selection colors. 
+      \param[in] bg background color
+      \param[in] sel selection color
+      \see color(unsigned), selection_color(unsigned)
+   */
+  void color(Fl_Color bg, Fl_Color sel) {color_=bg; color2_=sel;}
+
+  /** Gets the current label text.
+      \return a pointer to the current label text
+      \see label(const char *), copy_label(const char *)
+   */
+  const char* label() const {return label_.value;}
+
+  /** Sets the current label pointer.
+
+      The label is shown somewhere on or next to the widget. The passed pointer 
+      is stored unchanged in the widget (the string is \em not copied), so if 
+      you need to set the label to a formatted value, make sure the buffer is 
+      static, global, or allocated. The copy_label() method can be used 
+      to make a copy of the label string automatically.
+      \param[in] text pointer to new label text
+      \see copy_label()
+   */
+  void label(const char* text);
+
+  /** Sets the current label. 
+      Unlike label(), this method allocates a copy of the label 
+      string instead of using the original string pointer.
+
+      The internal copy will automatically be freed whenever you assign
+      a new label or when the widget is destroyed.
+
+      \param[in] new_label the new label text
+      \see label()
+   */
+  void copy_label(const char *new_label);
+
+  /** Shortcut to set the label text and type in one call.
+      \see label(const char *), labeltype(Fl_Labeltype)
+   */
+  void label(Fl_Labeltype a, const char* b) {label_.type = a; label_.value = b;}
+
+  /** Gets the label type.
+      \return the current label type.
+      \see Fl_Labeltype
+   */
+  Fl_Labeltype labeltype() const {return (Fl_Labeltype)label_.type;}
+
+  /** Sets the label type. 
+      The label type identifies the function that draws the label of the widget. 
+      This is generally used for special effects such as embossing or for using 
+      the label() pointer as another form of data such as an icon. The value 
+      FL_NORMAL_LABEL prints the label as plain text.
+      \param[in] a new label type
+      \see Fl_Labeltype
+   */
+  void labeltype(Fl_Labeltype a) {label_.type = a;}
+
+  /** Gets the label color. 
+      The default color is FL_FOREGROUND_COLOR. 
+      \return the current label color
+   */
+  Fl_Color labelcolor() const {return label_.color;}
+
+  /** Sets the label color. 
+      The default color is FL_FOREGROUND_COLOR. 
+      \param[in] c the new label color
+   */
+  void labelcolor(Fl_Color c) {label_.color=c;}
+
+  /** Gets the font to use. 
+      Fonts are identified by indexes into a table. The default value
+      uses a Helvetica typeface (Arial for Microsoft&reg; Windows&reg;).
+      The function fltk3::set_font() can define new typefaces.
+      \return current font used by the label
+      \see Fl_Font
+   */
+  Fl_Font labelfont() const {return label_.font;}
+
+  /** Sets the font to use. 
+      Fonts are identified by indexes into a table. The default value
+      uses a Helvetica typeface (Arial for Microsoft&reg; Windows&reg;).
+      The function fltk3::set_font() can define new typefaces.
+      \param[in] f the new font for the label
+      \see Fl_Font
+   */
+  void labelfont(Fl_Font f) {label_.font=f;}
+
+  /** Gets the font size in pixels. 
+      The default size is 14 pixels.
+      \return the current font size
+   */
+  Fl_Fontsize labelsize() const {return label_.size;}
+
+  /** Sets the font size in pixels.
+      \param[in] pix the new font size
+      \see Fl_Fontsize labelsize()
+   */
+  void labelsize(Fl_Fontsize pix) {label_.size=pix;}
+
+  /** Gets the image that is used as part of the widget label.
+      This image is used when drawing the widget in the active state.
+      \return the current image
+   */
+  Fl_Image* image() {return label_.image;}
+
+  /** Sets the image to use as part of the widget label.
+      This image is used when drawing the widget in the active state.
+      \param[in] img the new image for the label 
+   */
+  void image(Fl_Image* img) {label_.image=img;}
+
+  /** Sets the image to use as part of the widget label.
+      This image is used when drawing the widget in the active state.
+      \param[in] img the new image for the label 
+   */
+  void image(Fl_Image& img) {label_.image=&img;}
+
+  /** Gets the image that is used as part of the widget label.  
+      This image is used when drawing the widget in the inactive state.
+      \return the current image for the deactivated widget
+   */
+  Fl_Image* deimage() {return label_.deimage;}
+
+  /** Sets the image to use as part of the widget label.  
+      This image is used when drawing the widget in the inactive state.
+      \param[in] img the new image for the deactivated widget
+   */
+  void deimage(Fl_Image* img) {label_.deimage=img;}
+
+  /** Sets the image to use as part of the widget label.  
+      This image is used when drawing the widget in the inactive state.
+      \param[in] img the new image for the deactivated widget
+   */
+  void deimage(Fl_Image& img) {label_.deimage=&img;}
+
+  /** Gets the current tooltip text.
+      \return a pointer to the tooltip text or NULL
+   */
+  const char *tooltip() const {return tooltip_;}
+
+  /** Sets the current tooltip text. 
+      Sets a string of text to display in a popup tooltip window when the user 
+      hovers the mouse over the widget. The string is <I>not</I> copied, so 
+      make sure any formatted string is stored in a static, global, 
+      or allocated buffer.
+
+      If no tooltip is set, the tooltip of the parent is inherited. Setting a 
+      tooltip for a group and setting no tooltip for a child will show the 
+      group's tooltip instead. To avoid this behavior, you can set the child's 
+      tooltip to an empty string ("").
+      \param[in] t new tooltip
+   */
+  void tooltip(const char *t);
+
+  /** Gets the current callback function for the widget.
+      Each widget has a single callback.
+      \return current callback
+   */
+  Fl_Callback_p callback() const {return callback_;}
+
+  /** Sets the current callback function for the widget.
+      Each widget has a single callback.
+      \param[in] cb new callback
+      \param[in] p user data
+   */
+  void callback(Fl_Callback* cb, void* p) {callback_=cb; user_data_=p;}
+
+  /** Sets the current callback function for the widget.
+      Each widget has a single callback.
+      \param[in] cb new callback
+   */
+  void callback(Fl_Callback* cb) {callback_=cb;}
+
+  /** Sets the current callback function for the widget.
+      Each widget has a single callback.
+      \param[in] cb new callback
+   */
+  void callback(Fl_Callback0*cb) {callback_=(Fl_Callback*)cb;}
+
+  /** Sets the current callback function for the widget.
+      Each widget has a single callback.
+      \param[in] cb new callback
+      \param[in] p user data
+   */
+  void callback(Fl_Callback1*cb, long p=0) {callback_=(Fl_Callback*)cb; user_data_=(void*)p;}
+
+  /** Gets the user data for this widget.
+      Gets the current user data (void *) argument that is passed to the callback function.
+      \return user data as a pointer
+   */
+  void* user_data() const {return user_data_;}
+
+  /** Sets the user data for this widget.
+      Sets the new user data (void *) argument that is passed to the callback function.
+      \param[in] v new user data
+   */
+  void user_data(void* v) {user_data_ = v;}
+
+  /** Gets the current user data (long) argument that is passed to the callback function.
+   */
+  long argument() const {return (long)user_data_;}
+
+  /** Sets the current user data (long) argument that is passed to the callback function.
+      \todo The user data value must be implemented using a \em union to avoid 
+      64 bit machine incompatibilities.
+   */
+  void argument(long v) {user_data_ = (void*)v;}
+
+  /** Returns the conditions under which the callback is called.
+
+      You can set the flags with when(uchar), the default value is
+      FL_WHEN_RELEASE.
+
+      \return set of flags
+      \see when(uchar)
+   */
+  Fl_When when() const {return (Fl_When)when_;}
+
+  /** Sets the flags used to decide when a callback is called.
+
+     This controls when callbacks are done. The following values are useful,
+     the default value is FL_WHEN_RELEASE:
+     
+     \li 0: The callback is not done, but changed() is turned on.
+     \li FL_WHEN_CHANGED: The callback is done each time the text is
+         changed by the user.
+     \li FL_WHEN_RELEASE: The callback will be done when this widget loses 
+         the focus, including when the window is unmapped. This is a useful 
+	 value for text fields in a panel where doing the callback on every
+  	 change is wasteful. However the callback will also happen if the 
+	 mouse is moved out of the window, which means it should not do 
+	 anything visible (like pop up an error message).
+	 You might do better setting this to zero, and scanning all the
+	 items for changed() when the OK button on a panel is pressed.
+     \li FL_WHEN_ENTER_KEY: If the user types the Enter key, the entire 
+         text is selected, and the callback is done if the text has changed. 
+	 Normally the Enter key will navigate to the next field (or insert 
+	 a newline for a Fl_Multiline_Input) - this changes the behavior.
+     \li FL_WHEN_ENTER_KEY|FL_WHEN_NOT_CHANGED: The Enter key will do the
+         callback even if the text has not changed. Useful for command fields.
+      fltk3::Widget::when() is a set of bitflags used by subclasses of 
+      fltk3::Widget to decide when to do the callback.
+
+      If the value is zero then the callback is never done. Other values 
+      are described  in the individual widgets. This field is in the base 
+      class so that you can scan a panel and do_callback() on all the ones
+      that don't do their own callbacks in response to an "OK" button.
+      \param[in] i set of flags
+   */
+  void when(uchar i) {when_ = i;}
+
+  /** Returns whether a widget is visible.
+      \retval 0 if the widget is not drawn and hence invisible.
+      \see show(), hide(), visible_r()
+   */
+  unsigned int visible() const {return !(flags_&INVISIBLE);}
+
+  /** Returns whether a widget and all its parents are visible.
+      \retval 0 if the widget or any of its parents are invisible.
+      \see show(), hide(), visible()
+   */
+  int visible_r() const;
+
+  /** Makes a widget visible.
+      An invisible widget never gets redrawn and does not get events.  
+      The visible() method returns true if the widget is set to be  
+      visible. The visible_r() method returns true if the widget and 
+      all of its parents are visible. A widget is only visible if 
+      visible() is true on it <I>and all of its parents</I>. 
+
+      Changing it will send FL_SHOW or FL_HIDE events to 
+      the widget. <I>Do not change it if the parent is not visible, as this 
+      will send false FL_SHOW or FL_HIDE events to the widget</I>.
+      redraw() is called if necessary on this or the parent.
+
+      \see hide(), visible(), visible_r()
+   */
+  virtual void show();
+  
+  /** Makes a widget invisible.
+      \see show(), visible(), visible_r()
+   */
+  virtual void hide();
+
+  /** Makes the widget visible. 
+      You must still redraw the parent widget to see a change in the 
+      window. Normally you want to use the show() method instead.
+   */
+  void set_visible() {flags_ &= ~INVISIBLE;}
+
+  /** Hides the widget. 
+      You must still redraw the parent to see a change in the window. 
+      Normally you want to use the hide() method instead.
+   */
+  void clear_visible() {flags_ |= INVISIBLE;}
+
+  /** Returns whether the widget is active.
+      \retval 0 if the widget is inactive
+      \see active_r(), activate(), deactivate()
+   */
+  unsigned int active() const {return !(flags_&INACTIVE);}
+
+  /** Returns whether the widget and all of its parents are active. 
+      \retval 0 if this or any of the parent widgets are inactive
+      \see active(), activate(), deactivate()
+   */
+  int active_r() const;
+
+  /** Activates the widget.
+      Changing this value will send FL_ACTIVATE to the widget if 
+      active_r() is true.
+      \see active(), active_r(), deactivate()
+   */
+  void activate();
+
+  /** Deactivates the widget.
+      Inactive widgets will be drawn "grayed out", e.g. with less contrast 
+      than the active widget. Inactive widgets will not receive any keyboard 
+      or mouse button events. Other events (including FL_ENTER, FL_MOVE, 
+      FL_LEAVE, FL_SHORTCUT, and others) will still be sent. A widget is 
+      only active if active() is true on it <I>and all of its parents</I>.  
+
+      Changing this value will send FL_DEACTIVATE to the widget if 
+      active_r() is true.
+    
+      Currently you cannot deactivate fltk3::Window widgets.
+
+      \see activate(), active(), active_r()
+   */
+  void deactivate();
+
+  /** Returns if a widget is used for output only.
+      output() means the same as !active() except it does not change how the 
+      widget is drawn. The widget will not receive any events. This is useful 
+      for making scrollbars or buttons that work as displays rather than input 
+      devices.
+      \retval 0 if the widget is used for input and output
+      \see set_output(), clear_output() 
+   */
+  unsigned int output() const {return (flags_&OUTPUT);}
+
+  /** Sets a widget to output only.
+      \see output(), clear_output() 
+   */
+  void set_output() {flags_ |= OUTPUT;}
+
+  /** Sets a widget to accept input.
+      \see set_output(), output() 
+   */
+  void clear_output() {flags_ &= ~OUTPUT;}
+
+  /** Returns if the widget is able to take events.
+      This is the same as (active() && !output()
+      && visible()) but is faster.
+      \retval 0 if the widget takes no events
+   */ 
+  unsigned int takesevents() const {return !(flags_&(INACTIVE|INVISIBLE|OUTPUT));}
+
+  /** 
+      Checks if the widget value changed since the last callback.
+
+      "Changed" is a flag that is turned on when the user changes the value 
+      stored in the widget. This is only used by subclasses of fltk3::Widget that 
+      store values, but is in the base class so it is easier to scan all the 
+      widgets in a panel and do_callback() on the changed ones in response 
+      to an "OK" button.
+
+      Most widgets turn this flag off when they do the callback, and when 
+      the program sets the stored value.
+
+     \retval 0 if the value did not change
+     \see set_changed(), clear_changed()
+   */
+  unsigned int changed() const {return flags_&CHANGED;}
+
+  /** Marks the value of the widget as changed.
+      \see changed(), clear_changed()
+   */
+  void set_changed() {flags_ |= CHANGED;}
+
+  /** Marks the value of the widget as unchanged.
+      \see changed(), set_changed()
+   */
+  void clear_changed() {flags_ &= ~CHANGED;}
+
+  /** Gives the widget the keyboard focus.
+      Tries to make this widget be the fltk3::focus() widget, by first sending 
+      it an FL_FOCUS event, and if it returns non-zero, setting 
+      fltk3::focus() to this widget. You should use this method to 
+      assign the focus to a widget.  
+      \return true if the widget accepted the focus.
+   */
+  int take_focus();
+
+  /** Enables keyboard focus navigation with this widget. 
+      Note, however, that this will not necessarily mean that the widget
+      will accept focus, but for widgets that can accept focus, this method
+      enables it if it has been disabled.
+      \see visible_focus(), clear_visible_focus(), visible_focus(int) 
+   */
+  void set_visible_focus() { flags_ |= VISIBLE_FOCUS; }
+
+  /** Disables keyboard focus navigation with this widget. 
+      Normally, all widgets participate in keyboard focus navigation.
+      \see set_visible_focus(), visible_focus(), visible_focus(int) 
+   */
+  void clear_visible_focus() { flags_ &= ~VISIBLE_FOCUS; }
+
+  /** Modifies keyboard focus navigation. 
+      \param[in] v set or clear visible focus
+      \see set_visible_focus(), clear_visible_focus(), visible_focus() 
+   */
+  void visible_focus(int v) { if (v) set_visible_focus(); else clear_visible_focus(); }
+
+  /** Checks whether this widget has a visible focus.
+      \retval 0 if this widget has no visible focus.
+      \see visible_focus(int), set_visible_focus(), clear_visible_focus()
+   */
+  unsigned int  visible_focus() { return flags_ & VISIBLE_FOCUS; }
+
+  /** Sets the default callback for all widgets.
+      Sets the default callback, which puts a pointer to the widget on the queue 
+      returned by fltk3::readqueue(). You may want to call this from your own callback.
+      \param[in] cb the new callback
+      \param[in] d user data associated with that callback
+      \see callback(), do_callback(), fltk3::readqueue()
+   */
+  static void default_callback(fltk3::Widget *cb, void *d);
+
+  /** Calls the widget callback.
+      Causes a widget to invoke its callback function with default arguments.
+      \see callback()
+   */
+  void do_callback() {do_callback(this,user_data_);}
+
+  /** Calls the widget callback.
+      Causes a widget to invoke its callback function with arbitrary arguments.
+      \param[in] o call the callback with \p o as the widget argument
+      \param[in] arg call the callback with \p arg as the user data argument
+      \see callback()
+   */
+  void do_callback(fltk3::Widget* o,long arg) {do_callback(o,(void*)arg);}
+
+  // Causes a widget to invoke its callback function with arbitrary arguments.
+  // Documentation and implementation in fltk3::Widget.cxx
+  void do_callback(fltk3::Widget* o,void* arg=0);
+
+  /** Internal use only. */
+  int test_shortcut();
+  /** Internal use only. */
+  static unsigned int label_shortcut(const char *t);
+  /** Internal use only. */
+  static int test_shortcut(const char*);
+
+  /** Checks if w is a child of this widget.
+      \param[in] w potential child widget
+      \return Returns 1 if \p w is a child of this widget, or is
+      equal to this widget. Returns 0 if \p w is NULL.
+   */
+  int contains(const fltk3::Widget *w) const ;
+
+  /** Checks if this widget is a child of w.
+      Returns 1 if this widget is a child of \p w, or is
+      equal to \p w. Returns 0 if \p w is NULL.
+      \param[in] w the possible parent widget.
+      \see contains()
+   */
+  int inside(const fltk3::Widget* w) const {return w ? w->contains(this) : 0;}
+
+  /** Schedules the drawing of the widget.
+      Marks the widget as needing its draw() routine called.
+   */
+  void redraw();
+
+  /** Schedules the drawing of the label.
+     Marks the widget or the parent as needing a redraw for the label area 
+     of a widget.
+   */
+  void redraw_label();
+
+  /** Returns non-zero if draw() needs to be called. 
+      The damage value is actually a bit field that the widget 
+      subclass can use to figure out what parts to draw.
+      \return a bitmap of flags describing the kind of damage to the widget
+      \see damage(uchar), clear_damage(uchar)
+   */
+  uchar damage() const {return damage_;}
+
+  /** Clears or sets the damage flags.
+      Damage flags are cleared when parts of the widget drawing is repaired.
+
+      The optional argument \p c specifies the bits that <b>are set</b>
+      after the call (default: 0) and \b not the bits that are cleared!
+
+      \note Therefore it is possible to set damage bits with this method, but
+      this should be avoided. Use damage(uchar) instead.
+      
+      \param[in] c new bitmask of damage flags (default: 0)
+      \see damage(uchar), damage()
+   */
+  void clear_damage(uchar c = 0) {damage_ = c;}
+
+  /** Sets the damage bits for the widget.
+      Setting damage bits will schedule the widget for the next redraw.
+      \param[in] c bitmask of flags to set
+      \see damage(), clear_damage(uchar)
+   */
+  void damage(uchar c);
+
+  /** Sets the damage bits for an area inside the widget.
+      Setting damage bits will schedule the widget for the next redraw.
+      \param[in] c bitmask of flags to set
+      \param[in] x, y, w, h size of damaged area
+      \see damage(), clear_damage(uchar)
+   */
+  void damage(uchar c, int x, int y, int w, int h);
+
+  void draw_label(int, int, int, int, Fl_Align) const;
+
+  /** Sets width ww and height hh accordingly with the label size.
+      Labels with images will return w() and h() of the image.
+   */
+  void measure_label(int& ww, int& hh) {label_.measure(ww, hh);}
+
+  /** Returns a pointer to the primary fltk3::Window widget.
+      \retval  NULL if no window is associated with this widget.  
+      \note for an fltk3::Window widget, this returns its <I>parent</I> window 
+            (if any), not <I>this</I> window.
+   */
+  fltk3::Window* window() const ;
+
+  /** Returns an fltk3::Group pointer if this widget is an fltk3::Group.
+  
+      \retval NULL if this widget is not derived from fltk3::Group.
+      \note This method is provided to avoid dynamic_cast.
+      \todo More documentation ...
+   */
+  virtual fltk3::Group* as_group() {return 0;}
+
+  /** Returns an fltk3::Window pointer if this widget is an fltk3::Window.
+   
+   \retval NULL if this widget is not derived from fltk3::Window.
+   \note This method is provided to avoid dynamic_cast.
+   \todo More documentation ...
+   */
+  virtual fltk3::Window* as_window() {return 0;}
+  
+  /** Returns an Fl_Gl_Window pointer if this widget is an Fl_Gl_Window.   
+   \retval NULL if this widget is not derived from Fl_Gl_Window.
+   \note This method is provided to avoid dynamic_cast.
+   \todo More documentation ...
+   */
+  virtual class Fl_Gl_Window* as_gl_window() {return 0;}
+  
+  /** For back compatibility only.
+      \deprecated Use selection_color() instead.
+  */
+  Fl_Color color2() const {return (Fl_Color)color2_;}
+
+  /** For back compatibility only.
+      \deprecated Use selection_color(unsigned) instead.
+  */
+  void color2(unsigned a) {color2_ = a;}
+};
+
+/**
+    Reserved type numbers (necessary for my cheapo RTTI) start here.
+    Grep the header files for "RESERVED_TYPE" to find the next available
+    number.
+*/
+#define FL_RESERVED_TYPE 100
+
+#endif
+
+//
+// End of "$Id: Fl_Widget.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Window.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Window.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Window.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,450 @@
+//
+// "$Id: Fl_Window.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// Window header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   fltk3::Window widget . */
+
+#ifndef Fl_Window_H
+#define Fl_Window_H
+
+#include "Fl_Group.H"
+
+#define FL_WINDOW 0xF0		///< window type id all subclasses have type() >= this
+#define FL_DOUBLE_WINDOW 0xF1   ///< double window type id
+
+class Fl_X;
+
+/**
+  This widget produces an actual window.  This can either be a main
+  window, with a border and title and all the window management controls,
+  or a "subwindow" inside a window.  This is controlled by whether or not
+  the window has a parent().
+
+  Once you create a window, you usually add children fltk3::Widget
+  's to it by using window->add(child) for each new widget.
+  See fltk3::Group for more information on how to add and remove children.
+
+  There are several subclasses of fltk3::Window that provide
+  double-buffering, overlay, menu, and OpenGL support.
+
+  The window's callback is done if the user tries to close a window
+  using the window manager and fltk3::modal() is zero or equal to the
+  window. fltk3::Window has a default callback that calls fltk3::Window::hide().
+*/
+class FL_EXPORT fltk3::Window : public fltk3::Group {
+
+  friend class ::Fl_X;
+  Fl_X *i; // points at the system-specific stuff
+
+  const char* iconlabel_;
+  const char* xclass_;
+  const void* icon_;
+  // size_range stuff:
+  int minw, minh, maxw, maxh;
+  int dw, dh, aspect;
+  uchar size_range_set;
+  // cursor stuff
+  Fl_Cursor cursor_default;
+  Fl_Color cursor_fg, cursor_bg;
+  void size_range_();
+  void _Fl_Window(); // constructor innards
+
+  // unimplemented copy ctor and assignment operator
+  Window(const fltk3::Window&);
+  Window& operator=(const fltk3::Window&);
+
+protected:
+
+  /** Stores the last window that was made current. See current() const */
+  static fltk3::Window *current_;
+  virtual void draw();
+  /** Forces the window to be drawn, this window is also made current and calls draw(). */
+  virtual void flush();
+
+  /**
+    Sets an internal flag that tells FLTK and the window manager to
+    honor position requests.
+
+    This is used internally and should not be needed by user code.
+
+    \param[in] force 1 to set the FORCE_POSITION flag, 0 to clear it
+  */
+  void force_position(int force) {
+    if (force) set_flag(FORCE_POSITION);
+    else clear_flag(FORCE_POSITION);
+  }
+  /**
+    Returns the internal state of the window's FORCE_POSITION flag.
+
+    \retval 1 if flag is set
+    \retval 0 otherwise
+
+    \see force_position(int)
+  */
+  int force_position() const { return ((flags() & FORCE_POSITION)?1:0); }
+
+public:
+
+  /**
+    Creates a window from the given size and title. 
+    If fltk3::Group::current() is not NULL, the window is created as a 
+    subwindow of the parent window.
+    
+    The first form of the constructor creates a top-level window
+    and asks the window manager to position the window. The second
+    form of the constructor either creates a subwindow or a
+    top-level window at the specified location (x,y) , subject to window
+    manager configuration. If you do not specify the position of the
+    window, the window manager will pick a place to show the window
+    or allow the user to pick a location. Use position(x,y)
+    or hotspot() before calling show() to request a
+    position on the screen. See fltk3::Window::resize() 
+    for some more details on positioning windows.
+    
+    Top-level windows initially have visible() set to 0
+    and parent() set to NULL. Subwindows initially
+    have visible() set to 1 and parent() set to
+    the parent window pointer.
+    
+    fltk3::Widget::box() defaults to FL_FLAT_BOX. If you plan to
+    completely fill the window with children widgets you should
+    change this to FL_NO_BOX. If you turn the window border off
+    you may want to change this to FL_UP_BOX.
+
+    \see fltk3::Window(int x, int y, int w, int h, const char* title = 0)
+  */
+  Window(int w, int h, const char* title= 0);
+  /** Creates a window from the given position, size and title.
+
+    \see fltk3::Window::Window(int w, int h, const char *title = 0)
+  */
+  Window(int x, int y, int w, int h, const char* title = 0);
+  /**
+    The destructor <I>also deletes all the children</I>. This allows a
+    whole tree to be deleted at once, without having to keep a pointer to
+    all the children in the user code. A kludge has been done so the 
+    fltk3::Window and all of its children can be automatic (local)
+    variables, but you must declare the fltk3::Window <I>first</I> so
+    that it is destroyed last.
+  */
+  virtual ~Window();
+
+  virtual int handle(int);
+
+  /**
+    Changes the size and position of the window.  If shown() is true,
+    these changes are communicated to the window server (which may
+    refuse that size and cause a further resize).  If shown() is
+    false, the size and position are used when show() is called.
+    See fltk3::Group for the effect of resizing on the child widgets.
+
+    You can also call the fltk3::Widget methods size(x,y) and position(w,h),
+    which are inline wrappers for this virtual function.
+
+    A top-level window can not force, but merely suggest a position and 
+    size to the operating system. The window manager may not be willing or 
+    able to display a window at the desired position or with the given 
+    dimensions. It is up to the application developer to verify window 
+    parameters after the resize request.
+  */
+  virtual void resize(int,int,int,int);
+  /**
+    Sets whether or not the window manager border is around the
+    window.  The default value is true. void border(int) can be
+    used to turn the border on and off. <I>Under most X window
+    managers this does not work after show() has been called,
+    although SGI's 4DWM does work.</I>
+  */
+  void border(int b);
+  /**
+    Fast inline function to turn the window manager border
+    off. It only works before show() is called.
+  */
+  void clear_border()	{set_flag(NOBORDER);}
+  /** See void fltk3::Window::border(int) */
+  unsigned int border() const	{return !(flags() & NOBORDER);}
+  /** Activates the flags NOBORDER|FL_OVERRIDE */
+  void set_override()	{set_flag(NOBORDER|OVERRIDE);}
+  /** Returns non zero if FL_OVERRIDE flag is set, 0 otherwise. */
+  unsigned int override() const  { return flags()&OVERRIDE; }
+  /**
+    A "modal" window, when shown(), will prevent any events from
+    being delivered to other windows in the same program, and will also
+    remain on top of the other windows (if the X window manager supports
+    the "transient for" property).  Several modal windows may be shown at
+    once, in which case only the last one shown gets events.  You can see
+    which window (if any) is modal by calling fltk3::modal().
+  */
+  void set_modal()	{set_flag(MODAL);}
+  /**  Returns true if this window is modal.  */
+  unsigned int modal() const	{return flags() & MODAL;}
+  /**
+    A "non-modal" window (terminology borrowed from Microsoft Windows)
+    acts like a modal() one in that it remains on top, but it has
+    no effect on event delivery.  There are <I>three</I> states for a
+    window: modal, non-modal, and normal.
+  */
+  void set_non_modal()	{set_flag(NON_MODAL);}
+  /**  Returns true if this window is modal or non-modal. */
+  unsigned int non_modal() const {return flags() & (NON_MODAL|MODAL);}
+
+  /**
+    Marks the window as a menu window.
+
+    This is intended for internal use, but it can also be used if you
+    write your own menu handling. However, this is not recommended.
+
+    This flag is used for correct "parenting" of windows in communication
+    with the windowing system. Modern X window managers can use different
+    flags to distinguish menu and tooltip windows from normal windows.
+
+    This must be called before the window is shown and cannot be changed
+    later.
+  */
+  void set_menu_window()	{set_flag(MENU_WINDOW);}
+
+  /**  Returns true if this window is a menu window. */
+  unsigned int menu_window() const {return flags() & MENU_WINDOW;}
+
+  /**
+    Marks the window as a tooltip window.
+
+    This is intended for internal use, but it can also be used if you
+    write your own tooltip handling. However, this is not recommended.
+
+    This flag is used for correct "parenting" of windows in communication
+    with the windowing system. Modern X window managers can use different
+    flags to distinguish menu and tooltip windows from normal windows.
+
+    This must be called before the window is shown and cannot be changed
+    later.
+
+    \note Since Fl_Tooltip_Window is derived from Fl_Menu_Window, this
+    also \b clears the menu_window() state.
+  */
+  void set_tooltip_window()	{ set_flag(TOOLTIP_WINDOW);
+				  clear_flag(MENU_WINDOW); }
+  /**  Returns true if this window is a tooltip window. */
+  unsigned int tooltip_window() const {return flags() & TOOLTIP_WINDOW;}
+
+  /**
+    Positions the window so that the mouse is pointing at the given
+    position, or at the center of the given widget, which may be the
+    window itself.  If the optional offscreen parameter is
+    non-zero, then the window is allowed to extend off the screen (this
+    does not work with some X window managers). \see position()
+  */
+  void hotspot(int x, int y, int offscreen = 0);
+  /** See void fltk3::Window::hotspot(int x, int y, int offscreen = 0) */
+  void hotspot(const fltk3::Widget*, int offscreen = 0);
+  /** See void fltk3::Window::hotspot(int x, int y, int offscreen = 0) */
+  void hotspot(const fltk3::Widget& p, int offscreen = 0) {hotspot(&p,offscreen);}
+
+  /**
+    Undoes the effect of a previous resize() or show() so that the next time
+    show() is called the window manager is free to position the window.
+
+    This is for Forms compatibility only.
+
+    \deprecated please use force_position(0) instead
+  */
+  void free_position()	{clear_flag(FORCE_POSITION);}
+  /**
+    Sets the allowable range the user can resize this window to.
+    This only works for top-level windows.
+    <UL>
+    <LI>minw and minh are the smallest the window can be.
+	Either value must be greater than 0.</LI>
+    <LI>maxw and maxh are the largest the window can be. If either is
+	<I>equal</I> to the minimum then you cannot resize in that direction.
+	If either is zero  then FLTK picks a maximum size in that direction
+	such that the window will fill the screen.</LI>
+    <LI>dw and dh are size increments.  The  window will be constrained
+	to widths of minw + N * dw,  where N is any non-negative integer.
+	If these are less or equal to 1 they are ignored (this is ignored
+	on WIN32).</LI>
+    <LI>aspect is a flag that indicates that the window should preserve its
+	aspect ratio.  This only works if both the maximum and minimum have
+	the same aspect ratio (ignored on WIN32 and by many X window managers).
+	</LI>
+    </UL>
+
+    If this function is not called, FLTK tries to figure out the range
+    from the setting of resizable():
+    <UL>
+    <LI>If resizable() is NULL (this is the  default) then the window cannot
+	be resized and the resize border and max-size control will not be
+	displayed for the window.</LI>
+    <LI>If either dimension of resizable() is less than 100, then that is
+	considered the minimum size.  Otherwise the resizable() has a minimum
+	size of 100.</LI>
+    <LI>If either dimension of resizable() is zero, then that is also the
+	maximum size (so the window cannot resize in that direction).</LI>
+    </UL>
+
+    It is undefined what happens if the current size does not fit in the
+    constraints passed to size_range().
+  */
+  void size_range(int a, int b, int c=0, int d=0, int e=0, int f=0, int g=0) {
+    minw=a; minh=b; maxw=c; maxh=d; dw=e; dh=f; aspect=g; size_range_();}
+
+  /** See void fltk3::Window::label(const char*)   */
+  const char* label() const	{return fltk3::Widget::label();}
+  /**  See void fltk3::Window::iconlabel(const char*)   */
+  const char* iconlabel() const	{return iconlabel_;}
+  /** Sets the window title bar label. */
+  void label(const char*);
+  /** Sets the icon label. */
+  void iconlabel(const char*);
+  /** Sets the icon label. */
+  void label(const char* label, const char* iconlabel); // platform dependent 
+  void copy_label(const char* a);
+  /** See void fltk3::Window::xclass(const char*) */
+  const char* xclass() const	{return xclass_;}
+  /**
+    A string used to tell the system what type of window this is. Mostly
+    this identifies the picture to draw in the icon. <I>Under X, this is
+    turned into a XA_WM_CLASS pair by truncating at the first
+    non-alphanumeric character and capitalizing the first character, and
+    the second one if the first is 'x'.  Thus "foo" turns into "foo, Foo",
+    and "xprog.1" turns into "xprog, XProg".</I> This only works if called <I>
+    before</I> calling show().
+
+    Under Microsoft Windows this string is used as the name of the
+    WNDCLASS structure, though it is not clear if this can have any
+    visible effect. The passed pointer is stored unchanged. The string 
+    is not copied.
+  */
+  void xclass(const char* c)	{xclass_ = c;}
+  /** Gets the current icon window target dependent data. */
+  const void* icon() const	{return icon_;}
+  /** Sets the current icon window target dependent data. */
+  void icon(const void * ic)	{icon_ = ic;}
+
+  /**
+    Returns non-zero if show() has been called (but not hide()
+    ). You can tell if a window is iconified with (w->shown()
+    && !w->visible()).
+  */
+  int shown() {return i != 0;}
+  /**
+    Puts the window on the screen. Usually (on X) this has the side
+    effect of opening the display. The second form is used for top-level
+    windows and allows standard arguments to be parsed from the
+    command-line.
+
+    If the window is already shown then it is restored and raised to the
+    top.  This is really convenient because your program can call show()
+    at any time, even if the window is already up.  It also means that 
+    show() serves the purpose of raise() in other toolkits.
+  */
+  virtual void show();
+  /**
+    Removes the window from the screen.  If the window is already hidden or
+    has not been shown then this does nothing and is harmless.
+  */
+  virtual void hide();
+  /**
+    See virtual void fltk3::Window::show() 
+  */
+  void show(int, char**);
+  /**
+    Makes the window completely fill the screen, without any window
+    manager border visible.  You must use fullscreen_off() to undo
+    this. This may not work with all window managers.
+  */
+  void fullscreen();
+  /**
+    Turns off any side effects of fullscreen() and does 
+    resize(x,y,w,h).
+  */
+  void fullscreen_off(int,int,int,int);
+  /**
+    Iconifies the window.  If you call this when shown() is false
+    it will show() it as an icon.  If the window is already
+    iconified this does nothing.
+
+    Call show() to restore the window.
+
+    When a window is iconified/restored (either by these calls or by the
+    user) the handle() method is called with FL_HIDE and 
+    FL_SHOW events and visible() is turned on and off.
+
+    There is no way to control what is drawn in the icon except with the
+    string passed to fltk3::Window::xclass().  You should not rely on
+    window managers displaying the icons.
+  */
+  void iconize();
+
+  int x_root() const ;
+  int y_root() const ;
+
+  static fltk3::Window *current();
+  /**
+    Sets things up so that the drawing functions in <fltk3/fl_draw.H> will go
+    into this window. This is useful for incremental update of windows, such
+    as in an idle callback, which will make your program behave much better
+    if it draws a slow graphic. <B>Danger: incremental update is very hard to
+    debug and maintain!</B>
+
+    This method only works for the fltk3::Window and Fl_Gl_Window derived classes.
+  */
+  void make_current();
+
+  /** Returns an fltk3::Window pointer if this widget is an fltk3::Window.
+  
+      \retval NULL if this widget is not derived from fltk3::Window.
+      \note This method is provided to avoid dynamic_cast.
+      \todo More documentation ...
+   */
+  virtual fltk3::Window* as_window() { return this; }
+
+  // for back-compatibility only:
+  /**
+    Changes the cursor for this window.  This always calls the system, if
+    you are changing the cursor a lot you may want to keep track of how
+    you set it in a static variable and call this only if the new cursor
+    is different.
+
+    The type Fl_Cursor is an enumeration defined in <fltk3/Enumerations.H>.
+    (Under X you can get any XC_cursor value by passing 
+    Fl_Cursor((XC_foo/2)+1)).  The colors only work on X, they are
+    not implemented on WIN32.
+
+    For back compatibility only.
+  */
+  void cursor(Fl_Cursor, Fl_Color=FL_BLACK, Fl_Color=FL_WHITE); // platform dependent
+  void default_cursor(Fl_Cursor, Fl_Color=FL_BLACK, Fl_Color=FL_WHITE);
+  static void default_callback(fltk3::Window*, void* v);
+
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Window.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_Wizard.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_Wizard.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_Wizard.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,70 @@
+//
+// "$Id: Fl_Wizard.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// Fl_Wizard widget definitions.
+//
+// Copyright 1999-2009 by Easy Software Products.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_Wizard widget . */
+
+//
+// Include necessary header files...
+//
+
+#ifndef _Fl_Wizard_H_
+#  define _Fl_Wizard_H_
+
+#  include <fltk3/Fl_Group.H>
+
+
+/**
+    This widget is based off the Fl_Tabs
+    widget, but instead of displaying tabs it only changes "tabs" under
+    program control. Its primary purpose is to support "wizards" that
+    step a user through configuration or troubleshooting tasks.
+
+    <P>As with Fl_Tabs, wizard panes are composed of child (usually
+    fltk3::Group) widgets. Navigation buttons must be added separately.
+*/
+class FL_EXPORT Fl_Wizard : public fltk3::Group
+{
+  fltk3::Widget *value_;
+
+  void draw();
+
+  public:
+
+  Fl_Wizard(int, int, int, int, const char * = 0);
+
+  void		next();
+  void		prev();
+  fltk3::Widget	*value();
+  void		value(fltk3::Widget *);
+};
+
+#endif // !_Fl_Wizard_H_
+
+//
+// End of "$Id: Fl_Wizard.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_XBM_Image.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_XBM_Image.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_XBM_Image.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,50 @@
+//
+// "$Id: Fl_XBM_Image.H 6614 2009-01-01 16:11:32Z matt $"
+//
+// XBM image header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+   Fl_XBM_Image class . */
+
+#ifndef Fl_XBM_Image_H
+#define Fl_XBM_Image_H
+#  include "Fl_Bitmap.H"
+
+/**
+  The Fl_XBM_Image class supports loading, caching,
+  and drawing of X Bitmap (XBM) bitmap files.
+*/
+class FL_EXPORT Fl_XBM_Image : public Fl_Bitmap {
+
+  public:
+
+  Fl_XBM_Image(const char* filename);
+};
+
+#endif // !Fl_XBM_Image_H
+
+//
+// End of "$Id: Fl_XBM_Image.H 6614 2009-01-01 16:11:32Z matt $".
+//

Added: branches/branch-3.0/fltk3/Fl_XPM_Image.H
===================================================================
--- branches/branch-3.0/fltk3/Fl_XPM_Image.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/Fl_XPM_Image.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,51 @@
+//
+// "$Id: Fl_XPM_Image.H 6614 2009-01-01 16:11:32Z matt $"
+//
+// XPM image header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/* \file
+  
+   Fl_XPM_Image class . */
+
+#ifndef Fl_XPM_Image_H
+#define Fl_XPM_Image_H
+#  include "Fl_Pixmap.H"
+
+/**
+  The Fl_XPM_Image class supports loading, caching,
+  and drawing of X Pixmap (XPM) images, including transparency.
+*/
+class FL_EXPORT Fl_XPM_Image : public Fl_Pixmap {
+
+  public:
+
+  Fl_XPM_Image(const char* filename);
+};
+
+#endif // !Fl_XPM_Image
+
+//
+// End of "$Id: Fl_XPM_Image.H 6614 2009-01-01 16:11:32Z matt $".
+//

Added: branches/branch-3.0/fltk3/Makefile.in
===================================================================
--- branches/branch-3.0/fltk3/Makefile.in	                        (rev 0)
+++ branches/branch-3.0/fltk3/Makefile.in	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,63 @@
+#
+# "$Id: Makefile.in 6614 2009-01-01 16:11:32Z matt $"
+#
+# Header makefile for the Fast Light Tool Kit (FLTK).
+#
+# Copyright 1998-2009 by Bill Spitzak and others.
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Library General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+# USA.
+#
+# Please report all bugs and problems on the following page:
+#
+#      http://www.fltk.org/str.php
+#
+
+include ../makeinclude
+
+all:
+
+clean:
+
+depend:
+
+install:
+	echo "Installing include files in $(DESTDIR)$(includedir)..."
+	$(RMDIR) $(DESTDIR)$(includedir)/FL
+	$(INSTALL_DIR) $(DESTDIR)$(includedir)/FL
+	for file in *.[hH]; do \
+		$(INSTALL_DATA) $$file $(DESTDIR)$(includedir)/FL; \
+	done
+@HLINKS@	cd $(DESTDIR)$(includedir)/FL;\
+@HLINKS@	for file in *.H; do\
+@HLINKS@		$(RM) "`basename $$file H`h";\
+@HLINKS@		$(LN) $$file "`basename $$file H`h";\
+@HLINKS@	done
+@HLINKS@	$(RM) $(DESTDIR)$(includedir)/FL/fl_file_chooser.H
+@HLINKS@	$(LN) Fl_File_Chooser.H $(DESTDIR)$(includedir)/FL/fl_file_chooser.H
+@HLINKS@	$(RM) $(DESTDIR)$(includedir)/FL/fl_file_chooser.h
+@HLINKS@	$(LN) Fl_File_Chooser.H $(DESTDIR)$(includedir)/FL/fl_file_chooser.h
+@HLINKS@	$(RM) $(DESTDIR)$(includedir)/Fl
+@HLINKS@	$(LN) FL $(DESTDIR)$(includedir)/Fl
+
+uninstall:
+	echo "Uninstalling include files..."
+	$(RMDIR) $(DESTDIR)$(includedir)/FL
+@HLINKS@	$(RM) $(DESTDIR)$(includedir)/Fl
+
+
+#
+# End of "$Id: Makefile.in 6614 2009-01-01 16:11:32Z matt $".
+#

Added: branches/branch-3.0/fltk3/Xutf8.h
===================================================================
--- branches/branch-3.0/fltk3/Xutf8.h	                        (rev 0)
+++ branches/branch-3.0/fltk3/Xutf8.h	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,176 @@
+/* "$Id: Xutf8.h 6942 2009-11-18 12:22:51Z AlbrechtS $"
+ *
+ * Author: Jean-Marc Lienher ( http://oksid.ch )
+ * Copyright 2000-2003 by O'ksi'D.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ * USA.
+ *
+ * Please report all bugs and problems on the following page:
+ *
+ *     http://www.fltk.org/str.php
+ */
+
+#ifndef _Xutf8_h
+#define _Xutf8_h
+
+#  ifdef __cplusplus
+extern "C" {
+#  endif
+
+#include <X11/X.h>
+#include <X11/Xlib.h>
+#include <X11/Xlocale.h>
+#include <X11/Xutil.h>
+
+typedef struct {
+	int nb_font;
+	char **font_name_list;
+	int *encodings;
+	XFontStruct **fonts;
+	Font fid;
+	int ascent;
+	int descent;
+	int *ranges;
+} XUtf8FontStruct;
+
+XUtf8FontStruct *
+XCreateUtf8FontStruct (
+	Display         *dpy, 
+	const char      *base_font_name_list); 
+
+void
+XUtf8DrawString(
+        Display         	*display,
+        Drawable        	d,
+        XUtf8FontStruct  *font_set,
+        GC              	gc,
+        int             	x,
+        int             	y,
+        const char      	*string,
+        int             	num_bytes);
+
+void
+XUtf8DrawRtlString(
+        Display         	*display,
+        Drawable        	d,
+        XUtf8FontStruct  *font_set,
+        GC              	gc,
+        int             	x,
+        int             	y,
+        const char      	*string,
+        int             	num_bytes);
+
+void
+XUtf8DrawImageString(
+        Display         *display,
+        Drawable        d,
+        XUtf8FontStruct         *font_set,
+        GC              gc,
+        int             x,
+        int             y,
+        const char      *string,
+        int             num_bytes);
+
+int
+XUtf8TextWidth(
+        XUtf8FontStruct  *font_set,
+        const char      	*string,
+        int             	num_bytes);
+int 
+XUtf8UcsWidth(
+	XUtf8FontStruct  *font_set,
+	unsigned int            ucs);
+
+int
+XGetUtf8FontAndGlyph(
+        XUtf8FontStruct  *font_set,
+        unsigned int            ucs,
+        XFontStruct     **fnt,
+        unsigned short  *id);
+	
+void
+XFreeUtf8FontStruct(
+        Display         	*dpy,
+        XUtf8FontStruct 	*font_set);
+
+
+int 
+XConvertUtf8ToUcs( 
+	const unsigned char 	*buf, 
+	int 			len, 
+	unsigned int 		*ucs);
+
+int 
+XConvertUcsToUtf8(
+	unsigned int 		ucs, 
+	char 			*buf);
+
+int 
+XUtf8CharByteLen(
+	const unsigned char 	*buf, 
+	int 			len);
+
+int 
+XCountUtf8Char(
+	const unsigned char *buf, 
+	int len);
+
+int 
+XFastConvertUtf8ToUcs( 
+	const unsigned char 	*buf, 
+	int 			len, 
+	unsigned int 		*ucs);
+
+long 
+XKeysymToUcs(
+	KeySym 	keysym);
+
+int
+XUtf8LookupString(
+    XIC                 ic,
+    XKeyPressedEvent*   event,
+    char*               buffer_return,
+    int                 bytes_buffer,
+    KeySym*             keysym,
+    Status*             status_return);
+
+unsigned short 
+XUtf8IsNonSpacing(
+	unsigned int ucs);
+
+unsigned short
+XUtf8IsRightToLeft(
+        unsigned int ucs);
+
+
+int 
+XUtf8Tolower(
+        int ucs);
+
+int 
+XUtf8Toupper(
+        int ucs);
+
+
+#  ifdef __cplusplus
+}
+#  endif
+
+#endif
+
+/*
+ *  End of "$Id: Xutf8.h 6942 2009-11-18 12:22:51Z AlbrechtS $".
+ */ 

Added: branches/branch-3.0/fltk3/dirent.h
===================================================================
--- branches/branch-3.0/fltk3/dirent.h	                        (rev 0)
+++ branches/branch-3.0/fltk3/dirent.h	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,33 @@
+//
+// "$Id: dirent.h 6614 2009-01-01 16:11:32Z matt $"
+//
+// Directory header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+// this file is for back-compatability only
+#include "filename.H"
+
+//
+// End of "$Id: dirent.h 6614 2009-01-01 16:11:32Z matt $".
+//

Added: branches/branch-3.0/fltk3/filename.H
===================================================================
--- branches/branch-3.0/fltk3/filename.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/filename.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,168 @@
+/*
+ * "$Id: filename.H 7354 2010-03-29 11:07:29Z matt $"
+ *
+ * Filename header file for the Fast Light Tool Kit (FLTK).
+ *
+ * Copyright 1998-2009 by Bill Spitzak and others.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ * USA.
+ *
+ * Please report all bugs and problems on the following page:
+ *
+ *     http://www.fltk.org/str.php
+ */
+
+#ifndef FL_FILENAME_H
+#  define FL_FILENAME_H
+
+#  include "Fl_Export.H"
+
+/** \addtogroup filenames File names and URI utility functions 
+    @{ */
+
+#  define FL_PATH_MAX 256 /**< all path buffers should use this length */
+/** Gets the file name from a path. 
+    Similar to basename(3), exceptions shown below.
+    \code
+    #include <FL/filename.H>
+    [..]
+    const char *out;
+    out = fl_filename_name("/usr/lib");     // out="lib"
+    out = fl_filename_name("/usr/");        // out=""      (basename(3) returns "usr" instead)
+    out = fl_filename_name("/usr");         // out="usr"
+    out = fl_filename_name("/");            // out=""      (basename(3) returns "/" instead)
+    out = fl_filename_name(".");            // out="."
+    out = fl_filename_name("..");           // out=".."
+    \endcode
+    \return a pointer to the char after the last slash, or to \p filename if there is none.
+ */
+FL_EXPORT const char *fl_filename_name(const char * filename);
+FL_EXPORT const char *fl_filename_ext(const char *buf);
+FL_EXPORT char *fl_filename_setext(char *to, int tolen, const char *ext);
+FL_EXPORT int fl_filename_expand(char *to, int tolen, const char *from);
+FL_EXPORT int fl_filename_absolute(char *to, int tolen, const char *from);
+FL_EXPORT int fl_filename_relative(char *to, int tolen, const char *from);
+FL_EXPORT int fl_filename_match(const char *name, const char *pattern);
+FL_EXPORT int fl_filename_isdir(const char *name);
+
+#  if defined(__cplusplus) && !defined(FL_DOXYGEN)
+/*
+ * Under WIN32, we include filename.H from numericsort.c; this should probably change...
+ */
+
+inline char *fl_filename_setext(char *to, const char *ext) { return fl_filename_setext(to, FL_PATH_MAX, ext); }
+inline int fl_filename_expand(char *to, const char *from) { return fl_filename_expand(to, FL_PATH_MAX, from); }
+inline int fl_filename_absolute(char *to, const char *from) { return fl_filename_absolute(to, FL_PATH_MAX, from); }
+inline int fl_filename_relative(char *to, const char *from) { return fl_filename_relative(to, FL_PATH_MAX, from); }
+#  endif /* __cplusplus */
+
+
+#  if defined(WIN32) && !defined(__CYGWIN__) && !defined(__WATCOMC__)
+
+struct dirent {char d_name[1];};
+
+#  elif defined(__WATCOMC__)
+#    include <sys/types.h>
+#    include <direct.h>
+
+#  else
+/*
+ * WARNING: on some systems (very few nowadays?) <dirent.h> may not exist.
+ * The correct information is in one of these files:
+ *
+ *     #include <sys/ndir.h>
+ *     #include <sys/dir.h>
+ *     #include <ndir.h>
+ *
+ * plus you must do the following #define:
+ *
+ *     #define dirent direct
+ *
+ * It would be best to create a <dirent.h> file that does this...
+ */
+#    include <sys/types.h>
+#    include <dirent.h>
+#  endif
+
+#  if defined (__cplusplus)
+extern "C" {
+#  endif /* __cplusplus */
+
+#  if !defined(FL_DOXYGEN)
+FL_EXPORT int fl_alphasort(struct dirent **, struct dirent **);
+FL_EXPORT int fl_casealphasort(struct dirent **, struct dirent **);
+FL_EXPORT int fl_casenumericsort(struct dirent **, struct dirent **);
+FL_EXPORT int fl_numericsort(struct dirent **, struct dirent **);
+#  endif
+
+  typedef int (Fl_File_Sort_F)(struct dirent **, struct dirent **); /**< File sorting function. \see fl_filename_list() */
+
+#  if defined(__cplusplus)
+}
+
+/*
+ * Portable "scandir" function.  Ugly but necessary...
+ */
+
+FL_EXPORT int fl_filename_list(const char *d, struct dirent ***l,
+                               Fl_File_Sort_F *s = fl_numericsort);
+
+/*
+ * Generic function to open a Uniform Resource Identifier (URI) using a
+ * system-defined program (added in FLTK 1.1.8)
+ */
+
+FL_EXPORT int	fl_open_uri(const char *uri, char *msg = (char *)0,
+		            int msglen = 0);
+
+#    ifndef FL_DOXYGEN
+/*
+ * _fl_filename_isdir_quick() is a private function that checks for a
+ * trailing slash and assumes that the passed name is a directory if
+ * it finds one.  This function is used by Fl_File_Browser and
+ * Fl_File_Chooser to avoid extra stat() calls, but is not supported
+ * outside of FLTK...
+ */
+int _fl_filename_isdir_quick(const char *name);
+#    endif
+
+#  endif /* __cplusplus */
+
+/*
+ * FLTK 1.0.x compatibility definitions...
+ */
+
+#  ifdef FLTK_1_0_COMPAT
+#    define filename_absolute	fl_filename_absolute
+#    define filename_expand	fl_filename_expand
+#    define filename_ext	fl_filename_ext
+#    define filename_isdir	fl_filename_isdir
+#    define filename_list	fl_filename_list
+#    define filename_match	fl_filename_match
+#    define filename_name	fl_filename_name
+#    define filename_relative	fl_filename_relative
+#    define filename_setext	fl_filename_setext
+#    define numericsort		fl_numericsort
+#  endif /* FLTK_1_0_COMPAT */
+
+
+#endif /* FL_FILENAME_H */
+
+/** @} */
+
+/*
+ * End of "$Id: filename.H 7354 2010-03-29 11:07:29Z matt $".
+ */

Added: branches/branch-3.0/fltk3/fl_ask.H
===================================================================
--- branches/branch-3.0/fltk3/fl_ask.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/fl_ask.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,80 @@
+//
+// "$Id: fl_ask.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// Standard dialog header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+#ifndef fl_ask_H
+#  define fl_ask_H
+
+#  include "Enumerations.H"
+
+class fltk3::Widget;
+/** Different system beeps available. \relatesalso fl_beep(int) */
+enum {
+  FL_BEEP_DEFAULT = 0,
+  FL_BEEP_MESSAGE,
+  FL_BEEP_ERROR,
+  FL_BEEP_QUESTION,
+  FL_BEEP_PASSWORD,
+  FL_BEEP_NOTIFICATION
+};
+
+#  ifdef __GNUC__
+#    define __fl_attr(x) __attribute__ (x)
+#    if __GNUC__ < 3
+#      define __deprecated__
+#    endif // __GNUC__ < 3
+#  else
+#    define __fl_attr(x)
+#  endif // __GNUC__
+
+FL_EXPORT void fl_beep(int type = FL_BEEP_DEFAULT);
+FL_EXPORT void fl_message(const char *,...) __fl_attr((__format__ (__printf__, 1, 2)));
+FL_EXPORT void fl_alert(const char *,...) __fl_attr((__format__ (__printf__, 1, 2)));
+// fl_ask() is deprecated since it uses "Yes" and "No" for the buttons,
+// which does not conform to the current FLTK Human Interface Guidelines.
+// Use fl_choice() instead with the appropriate verbs instead.
+FL_EXPORT int fl_ask(const char *,...) __fl_attr((__format__ (__printf__, 1, 2), __deprecated__));
+FL_EXPORT int fl_choice(const char *q,const char *b0,const char *b1,const char *b2,...) __fl_attr((__format__ (__printf__, 1, 5)));
+FL_EXPORT const char *fl_input(const char *label, const char *deflt = 0, ...) __fl_attr((__format__ (__printf__, 1, 3)));
+FL_EXPORT const char *fl_password(const char *label, const char *deflt = 0, ...) __fl_attr((__format__ (__printf__, 1, 3)));
+
+FL_EXPORT fltk3::Widget *fl_message_icon();
+extern FL_EXPORT Fl_Font fl_message_font_;
+extern FL_EXPORT Fl_Fontsize fl_message_size_;
+inline void fl_message_font(Fl_Font f, Fl_Fontsize s) {
+  fl_message_font_ = f; fl_message_size_ = s;}
+
+// pointers you can use to change FLTK to a foreign language:
+extern FL_EXPORT const char* fl_no;
+extern FL_EXPORT const char* fl_yes;
+extern FL_EXPORT const char* fl_ok;
+extern FL_EXPORT const char* fl_cancel;
+extern FL_EXPORT const char* fl_close;
+#endif // !fl_ask_H
+
+//
+// End of "$Id: fl_ask.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/fl_draw.H
===================================================================
--- branches/branch-3.0/fltk3/fl_draw.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/fl_draw.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,729 @@
+//
+// "$Id: fl_draw.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// Portable drawing function header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/**
+  \file fl_draw.H
+  \brief utility header to pull drawing functions together
+*/
+
+#ifndef fl_draw_H
+#define fl_draw_H
+
+#include "Enumerations.H"  // for the color names
+#include "Fl_Window.H"	   // for fl_set_spot()
+#include "Fl_Device.H"
+
+// Image class...
+class Fl_Image;
+
+// Label flags...
+FL_EXPORT extern char fl_draw_shortcut;
+
+/** \addtogroup fl_attributes
+    @{
+*/
+
+// Colors:
+/**
+ Sets the color for all subsequent drawing operations.
+ For colormapped displays, a color cell will be allocated out of
+ \p fl_colormap the first time you use a color. If the colormap fills up
+ then a least-squares algorithm is used to find the closest color.
+ If no valid graphical context (fl_gc) is available,
+ the foreground is not set for the current window.
+ \param[in] c color 
+ */
+inline void	fl_color(Fl_Color c) {fl_device->color(c); }; // select indexed color
+/** for back compatibility - use fl_color(Fl_Color c) instead */
+inline void fl_color(int c) {fl_color((Fl_Color)c);}
+/**
+ Set the color for all subsequent drawing operations.
+ The closest possible match to the RGB color is used.
+ The RGB color is used directly on TrueColor displays.
+ For colormap visuals the nearest index in the gray
+ ramp or color cube is used.
+ If no valid graphical context (fl_gc) is available,
+ the foreground is not set for the current window.
+ \param[in] r,g,b color components
+ */
+inline void	fl_color(uchar r, uchar g, uchar b) {fl_device->color(r,g,b); }; // select actual color
+/** \brief The current color */
+extern FL_EXPORT Fl_Color fl_color_;
+/**
+  Returns the last fl_color() that was set.
+  This can be used for state save/restore.
+*/
+inline Fl_Color fl_color() {return fl_color_;}
+/** @} */
+
+/** \addtogroup fl_drawings
+    @{
+*/
+// clip:
+/**
+ Intersects the current clip region with a rectangle and pushes this
+ new region onto the stack.
+ \param[in] x,y,w,h position and size
+ */
+inline void fl_push_clip(int x, int y, int w, int h) {fl_device->push_clip(x,y,w,h); };
+/** The fl_clip() name is deprecated and will be removed from future releases */
+#define fl_clip fl_push_clip
+/**
+ Pushes an empty clip region onto the stack so nothing will be clipped.
+ */
+inline void fl_push_no_clip() {fl_device->push_no_clip(); };
+/**
+ Restores the previous clip region.
+ 
+ You must call fl_pop_clip() once for every time you call fl_push_clip().
+ Unpredictable results may occur if the clip stack is not empty when
+ you return to FLTK.
+ */
+inline void fl_pop_clip() {fl_device->pop_clip(); };
+/**
+ Does the rectangle intersect the current clip region?
+ \param[in] x,y,w,h position and size of rectangle
+ \returns non-zero if any of the rectangle intersects the current clip
+ region. If this returns 0 you don't have to draw the object.
+ 
+ \note
+ Under X this returns 2 if the rectangle is partially clipped, 
+ and 1 if it is entirely inside the clip region.
+ */
+inline int fl_not_clipped(int x, int y, int w, int h) {return fl_device->not_clipped(x,y,w,h); };
+/**
+ Intersects the rectangle with the current clip region and returns the
+ bounding box of the result.
+ 
+ Returns non-zero if the resulting rectangle is different to the original.
+ This can be used to limit the necessary drawing to a rectangle.
+ \p W and \p H are set to zero if the rectangle is completely outside
+ the region.
+ \param[in] x,y,w,h position and size of rectangle
+ \param[out] X,Y,W,H position and size of resulting bounding box.
+ \p W and \p H are set to zero if the rectangle is
+ completely outside the region.
+ \returns Non-zero if the resulting rectangle is different to the original.
+ */
+inline int fl_clip_box(int x , int y, int w, int h, int& X, int& Y, int& W, int& H) 
+  {return fl_device->clip_box(x,y,w,h,X,Y,W,H); };
+/** Undoes any clobbering of clip done by your program */
+extern void fl_restore_clip();
+/**
+ Replaces the top of the clipping stack with a clipping region of any shape.
+ 
+ Fl_Region is an operating system specific type.
+ \param[in] r clipping region
+ */
+FL_EXPORT void fl_clip_region(Fl_Region r);
+/**
+ returns the current clipping region.
+ */
+extern Fl_Region fl_clip_region();
+  
+
+// points:
+/**
+ Draws a single pixel at the given coordinates
+ */
+inline void fl_point(int x, int y) { fl_device->point(x,y); };
+
+// line type:
+/**
+ Sets how to draw lines (the "pen").
+ If you change this it is your responsibility to set it back to the default
+ using \c fl_line_style(0).
+ 
+ \param[in] style A bitmask which is a bitwise-OR of a line style, a cap
+ style, and a join style. If you don't specify a dash type you
+ will get a solid line. If you don't specify a cap or join type
+ you will get a system-defined default of whatever value is
+ fastest.
+ \param[in] width The thickness of the lines in pixels. Zero results in the
+ system defined default, which on both X and Windows is somewhat
+ different and nicer than 1.
+ \param[in] dashes A pointer to an array of dash lengths, measured in pixels.
+ The first location is how long to draw a solid portion, the next
+ is how long to draw the gap, then the solid, etc. It is terminated
+ with a zero-length entry. A \c NULL pointer or a zero-length
+ array results in a solid line. Odd array sizes are not supported
+ and result in undefined behavior.
+ 
+ \note      Because of how line styles are implemented on Win32 systems,
+ you \e must set the line style \e after setting the drawing
+ color. If you set the color after the line style you will lose
+ the line style settings.
+ \note      The \p dashes array does not work under Windows 95, 98 or Me,
+ since those operating systems do not support complex line styles.
+ */
+inline void fl_line_style(int style, int width=0, char* dashes=0) {fl_device->line_style(style,width,dashes); };
+enum {
+  FL_SOLID	= 0,		///< line style: <tt>___________</tt>
+  FL_DASH	= 1,		///< line style: <tt>_ _ _ _ _ _</tt>
+  FL_DOT	= 2,		///< line style: <tt>. . . . . .</tt>
+  FL_DASHDOT	= 3,		///< line style: <tt>_ . _ . _ .</tt>
+  FL_DASHDOTDOT	= 4,		///< line style: <tt>_ . . _ . .</tt>
+
+  FL_CAP_FLAT	= 0x100,	///< cap style: end is flat
+  FL_CAP_ROUND	= 0x200,	///< cap style: end is round
+  FL_CAP_SQUARE	= 0x300,	///< cap style: end wraps end point
+
+  FL_JOIN_MITER	= 0x1000,	///< join style: line join extends to a point
+  FL_JOIN_ROUND	= 0x2000,	///< join style: line join is rounded
+  FL_JOIN_BEVEL	= 0x3000	///< join style: line join is tidied
+};
+
+// rectangles tweaked to exactly fill the pixel rectangle:
+
+/** Draws a 1-pixel border \e inside the given bounding box */
+inline void fl_rect(int x, int y, int w, int h) { fl_device->rect(x,y,w,h); };
+
+/** Draws with passed color a 1-pixel border \e inside the given bounding box */
+inline void fl_rect(int x, int y, int w, int h, Fl_Color c) {fl_color(c); fl_rect(x,y,w,h);}
+/** Colors with current color a rectangle that exactly fills the given bounding box */
+inline void fl_rectf(int x, int y, int w, int h) { fl_device->rectf(x,y,w,h); };
+/** Colors with passsed color a rectangle that exactly fills the given bounding box */
+inline void fl_rectf(int x, int y, int w, int h, Fl_Color c) {fl_color(c); fl_rectf(x,y,w,h);}
+
+/**
+  Color a rectangle with "exactly" the passed <tt>r,g,b</tt> color.
+  On screens with less than 24 bits of color this is done by drawing a
+  solid-colored block using fl_draw_image() so that the correct color
+  shade is produced.
+  */
+/* note: doxygen comment here to avoid triplication in os-speciic files */
+FL_EXPORT void fl_rectf(int x, int y, int w, int h, uchar r, uchar g, uchar b);
+
+// line segments:
+/**
+ Draws a line from (x,y) to (x1,y1)
+ */
+inline void fl_line(int x, int y, int x1, int y1) {fl_device->line(x,y,x1,y1); };
+/**
+ Draws a line from (x,y) to (x1,y1) and another from (x1,y1) to (x2,y2)
+ */
+inline void fl_line(int x, int y, int x1, int y1, int x2, int y2) {fl_device->line(x,y,x1,y1,x2,y2); };
+
+// closed line segments:
+/**
+ Outlines a 3-sided polygon with lines
+ */
+inline void fl_loop(int x, int y, int x1, int y1, int x2, int y2) {fl_device->loop(x,y,x1,y1,x2,y2); };
+/**
+ Outlines a 4-sided polygon with lines
+ */
+inline void fl_loop(int x, int y, int x1, int y1, int x2, int y2, int x3, int y3) 
+  {fl_device->loop(x,y,x1,y1,x2,y2,x3,y3); };
+
+// filled polygons
+/**
+ Fills a 3-sided polygon. The polygon must be convex.
+ */
+inline void fl_polygon(int x, int y, int x1, int y1, int x2, int y2) {fl_device->polygon(x,y,x1,y1,x2,y2); };
+/**
+ Fills a 4-sided polygon. The polygon must be convex.
+ */
+inline void fl_polygon(int x, int y, int x1, int y1, int x2, int y2, int x3, int y3) 
+  { fl_device->polygon(x,y,x1,y1,x2,y2,x3,y3); };
+
+// draw rectilinear lines, horizontal segment first:
+/**
+ Draws a horizontal line from (x,y) to (x1,y)
+ */
+inline void fl_xyline(int x, int y, int x1) {fl_device->xyline(x,y,x1);};
+/**
+ Draws a horizontal line from (x,y) to (x1,y), then vertical from (x1,y) to (x1,y2)
+ */
+inline void fl_xyline(int x, int y, int x1, int y2) {fl_device->xyline(x,y,x1,y2);};
+/**
+ Draws a horizontal line from (x,y) to (x1,y), then a vertical from (x1,y) to (x1,y2)
+ and then another horizontal from (x1,y2) to (x3,y2)
+ */
+inline void fl_xyline(int x, int y, int x1, int y2, int x3) {fl_device->xyline(x,y,x1,y2,x3);};
+
+// draw rectilinear lines, vertical segment first:
+/**
+ Draws a vertical line from (x,y) to (x,y1)
+ */
+inline void fl_yxline(int x, int y, int y1) {fl_device->yxline(x,y,y1);};
+/**
+ Draws a vertical line from (x,y) to (x,y1), then a horizontal from (x,y1) to (x2,y1)
+ */
+inline void fl_yxline(int x, int y, int y1, int x2) {fl_device->yxline(x,y,y1,x2);};
+/**
+ Draws a vertical line from (x,y) to (x,y1) then a horizontal from (x,y1)
+ to (x2,y1), then another vertical from (x2,y1) to (x2,y3)
+ */
+inline void fl_yxline(int x, int y, int y1, int x2, int y3) {fl_device->yxline(x,y,y1,x2,y3);};
+
+// circular lines and pie slices (code in fl_arci.C):
+/**
+ Draw ellipse sections using integer coordinates.
+ 
+ These functions match the rather limited circle drawing code provided by X
+ and WIN32. The advantage over using fl_arc with floating point coordinates
+ is that they are faster because they often use the hardware, and they draw
+ much nicer small circles, since the small sizes are often hard-coded bitmaps.
+ 
+ If a complete circle is drawn it will fit inside the passed bounding box.
+ The two angles are measured in degrees counterclockwise from 3 o'clock and
+ are the starting and ending angle of the arc, \p a2 must be greater or equal
+ to \p a1.
+ 
+ fl_arc() draws a series of lines to approximate the arc. Notice that the
+ integer version of fl_arc() has a different number of arguments than the
+ double version fl_arc(double x, double y, double r, double start, double end)
+ 
+ \param[in] x,y,w,h bounding box of complete circle
+ \param[in] a1,a2 start and end angles of arc measured in degrees
+ counter-clockwise from 3 o'clock. \p a2 must be greater
+ than or equal to \p a1.
+ */
+inline void fl_arc(int x, int y, int w, int h, double a1, double a2) {fl_device->arc(x,y,w,h,a1,a2); };
+/**
+ Draw filled ellipse sections using integer coordinates.
+ 
+ Like fl_arc(), but fl_pie() draws a filled-in pie slice.
+ This slice may extend outside the line drawn by fl_arc();
+ to avoid this use w - 1 and h - 1.
+ 
+ \param[in] x,y,w,h bounding box of complete circle
+ \param[in] a1,a2 start and end angles of arc measured in degrees
+ counter-clockwise from 3 o'clock. \p a2 must be greater
+ than or equal to \p a1.
+ */
+inline void fl_pie(int x, int y, int w, int h, double a1, double a2) {fl_device->pie(x,y,w,h,a1,a2); };
+/** fl_chord declaration is a place holder - the function does not yet exist */
+FL_EXPORT void fl_chord(int x, int y, int w, int h, double a1, double a2); // nyi
+
+// scalable drawing code (code in fl_vertex.C and fl_arc.C):
+FL_EXPORT void fl_push_matrix();
+FL_EXPORT void fl_pop_matrix();
+FL_EXPORT void fl_scale(double x, double y);
+FL_EXPORT void fl_scale(double x);
+FL_EXPORT void fl_translate(double x, double y);
+FL_EXPORT void fl_rotate(double d);
+FL_EXPORT void fl_mult_matrix(double a, double b, double c, double d, double x,double y);
+/**
+ Starts drawing a list of points. Points are added to the list with fl_vertex()
+ */
+inline void fl_begin_points() {fl_device->begin_points(); };
+/**
+ Starts drawing a list of lines.
+ */
+inline void fl_begin_line() {fl_device->begin_line(); };
+/**
+ Starts drawing a closed sequence of lines.
+ */
+inline void fl_begin_loop() {fl_device->begin_loop(); };
+/**
+ Starts drawing a convex filled polygon.
+ */
+inline void fl_begin_polygon() {fl_device->begin_polygon(); };
+/**
+ Adds a single vertex to the current path.
+ \param[in] x,y coordinate
+ */
+inline void fl_vertex(double x, double y) {fl_device->vertex(x,y); };
+/**
+ Add a series of points on a Bezier curve to the path.
+ The curve ends (and two of the points) are at X0,Y0 and X3,Y3.
+ \param[in] X0,Y0 curve start point
+ \param[in] X1,Y1 curve control point
+ \param[in] X2,Y2 curve control point
+ \param[in] X3,Y3 curve end point
+ */
+inline void fl_curve(double X0, double Y0, double X1, double Y1, double X2, double Y2, double X3, double Y3)
+  {fl_device->curve(X0,Y0,X1,Y1,X2,Y2,X3,Y3); };
+/**
+ Add a series of points to the current path on the arc of a circle; you
+ can get elliptical paths by using scale and rotate before calling fl_arc().
+ \param[in] x,y,r center and radius of circular arc
+ \param[in] start,end angles of start and end of arc measured in degrees
+ counter-clockwise from 3 o'clock. If \p end is less than \p start
+ then it draws the arc in a clockwise direction.
+ */
+inline void fl_arc(double x, double y, double r, double start, double end) {fl_device->arc(x,y,r,start,end); };
+/**
+ fl_circle() is equivalent to fl_arc(x,y,r,0,360), but may be faster.
+ 
+ It must be the \e only thing in the path: if you want a circle as part of
+ a complex polygon you must use fl_arc()
+ \param[in] x,y,r center and radius of circle
+ */
+inline void fl_circle(double x, double y, double r) {fl_device->circle(x,y,r); };
+/**
+ Ends list of points, and draws.
+ */
+inline void fl_end_points() {fl_device->end_points(); };
+/**
+ Ends list of lines, and draws.
+ */
+inline void fl_end_line() {fl_device->end_line(); };
+/**
+ Ends closed sequence of lines, and draws.
+ */
+inline void fl_end_loop() {fl_device->end_loop(); };
+/**
+ Ends convex filled polygon, and draws.
+ */
+inline void fl_end_polygon() {fl_device->end_polygon(); };
+/**
+ Starts drawing a complex filled polygon.
+ 
+ The polygon may be concave, may have holes in it, or may be several
+ disconnected pieces. Call fl_gap() to separate loops of the path.
+ 
+ To outline the polygon, use fl_begin_loop() and replace each fl_gap()
+ with fl_end_loop();fl_begin_loop() pairs.
+ 
+ \note
+ For portability, you should only draw polygons that appear the same
+ whether "even/odd" or "non-zero" winding rules are used to fill them.
+ Holes should be drawn in the opposite direction to the outside loop.
+ */
+inline void fl_begin_complex_polygon() {fl_device->begin_complex_polygon(); };
+/**
+ Call fl_gap() to separate loops of the path.
+ 
+ It is unnecessary but harmless to call fl_gap() before the first vertex,
+ after the last vertex, or several times in a row.
+ */
+inline void fl_gap() {fl_device->gap(); };
+/**
+ Ends complex filled polygon, and draws.
+ */
+inline void fl_end_complex_polygon() {fl_device->end_complex_polygon(); };
+// get and use transformed positions:
+FL_EXPORT double fl_transform_x(double x, double y);
+FL_EXPORT double fl_transform_y(double x, double y);
+FL_EXPORT double fl_transform_dx(double x, double y);
+FL_EXPORT double fl_transform_dy(double x, double y);
+/**
+ Adds coordinate pair to the vertex list without further transformations.
+ \param[in] xf,yf transformed coordinate
+ */
+inline void fl_transformed_vertex(double xf, double yf) {fl_device->transformed_vertex(xf,yf); };
+/** @} */
+
+/** \addtogroup  fl_attributes
+    @{ */
+/* NOTE: doxygen comments here to avoid triplication in os-specific sources */
+
+// Fonts:
+/**
+  Sets the current font, which is then used in various drawing routines.
+  You may call this outside a draw context if necessary to call fl_width(),
+  but on X this will open the display.
+
+  The font is identified by a \p face and a \p size.
+  The size of the font is measured in pixels and not "points".
+  Lines should be spaced \p size pixels apart or more.
+*/
+inline void fl_font(Fl_Font face, Fl_Fontsize size) { fl_device->font(face,size); };
+extern FL_EXPORT Fl_Font fl_font_; ///< current font index
+
+/**
+  Returns the \p face set by the most recent call to fl_font().
+  This can be used to save/restore the font.
+*/
+inline Fl_Font fl_font() {return fl_font_;}
+/** \brief current font size */
+extern FL_EXPORT Fl_Fontsize fl_size_;
+/**
+  Returns the \p size set by the most recent call to fl_font().
+  This can be used to save/restore the font.
+*/
+inline Fl_Fontsize fl_size() {return fl_size_;}
+
+// information you can get about the current font:
+/**
+  Returns the recommended minimum line spacing for the current font.
+  You can also use the value of \p size passed to fl_font()
+*/
+FL_EXPORT int   fl_height();	// using "size" should work ok
+FL_EXPORT int fl_height(int font, int size);
+/**
+  Returns the recommended distance above the bottom of a fl_height() tall box to
+  draw the text at so it looks centered vertically in that box.
+*/
+FL_EXPORT int   fl_descent();
+/** Return the typographical width of a nul-terminated string */
+FL_EXPORT double fl_width(const char* txt);
+/** Return the typographical width of a sequence of \p n characters */
+FL_EXPORT double fl_width(const char* txt, int n);
+/** Return the typographical width of a single character :
+    \note if a valid fl_gc is NOT found then it uses the first window gc,
+    or the screen gc if no fltk window is available when called. */
+FL_EXPORT double fl_width(unsigned int);
+/** Determine the minimum pixel dimensions of a nul-terminated string.
+
+Usage: given a string "txt" drawn using fl_draw(txt, x, y) you would determine
+its pixel extents on the display using fl_text_extents(txt, dx, dy, wo, ho)
+such that a bounding box that exactly fits around the text could be drawn with
+fl_rect(x+dx, y+dy, wo, ho). Note the dx, dy values hold the offset of the first
+"colored in" pixel of the string, from the draw origin.
+*/
+FL_EXPORT void fl_text_extents(const char*, int& dx, int& dy, int& w, int& h); // NO fltk symbol expansion will be performed
+/** Determine the minimum pixel dimensions of a sequence of \p n characters.
+\see fl_text_extents(const char*, int& dx, int& dy, int& w, int& h)
+*/
+FL_EXPORT void fl_text_extents(const char*, int n, int& dx, int& dy, int& w, int& h);
+
+// font encoding:
+// Note: doxygen comments here to avoid duplication for os-sepecific cases
+/**
+  convert text from Windows/X11 latin1 charcter set to local encoding.
+  \param[in] t character string (latin1 encoding)
+  \param[in] n optional number of characters to convert (default is all)
+  \returns pointer to internal buffer containing converted characters
+  */
+FL_EXPORT const char *fl_latin1_to_local(const char *t, int n=-1);
+/**
+  convert text from local encoding to Windowx/X11 latin1 character set.
+  \param[in] t character string (local encoding)
+  \param[in] n optional number of characters to convert (default is all)
+  \returns pointer to internal buffer containing converted characters
+  */
+FL_EXPORT const char *fl_local_to_latin1(const char *t, int n=-1);
+/**
+  convert text from Mac Roman charcter set to local encoding.
+  \param[in] t character string (Mac Roman encoding)
+  \param[in] n optional number of characters to convert (default is all)
+  \returns pointer to internal buffer containing converted characters
+  */
+FL_EXPORT const char *fl_mac_roman_to_local(const char *t, int n=-1);
+/**
+  convert text from local encoding to Mac Roman character set.
+  \param[in] t character string (local encoding)
+  \param[in] n optional number of characters to convert (default is all)
+  \returns pointer to internal buffer containing converted characters
+  */
+FL_EXPORT const char *fl_local_to_mac_roman(const char *t, int n=-1);
+/** @} */
+
+/** \addtogroup  fl_drawings
+    @{ */
+/**
+  Draws a nul-terminated string starting at the given location.
+
+  Text is aligned to the left and to the baseline of the font.
+  To align to the bottom, subtract fl_descent() from \p y.
+  To align to the top, subtract fl_descent() and add fl_height().
+  This version of fl_draw provides direct access to the text drawing
+  function of the underlying OS. It does not apply any special handling
+  to control characters.
+*/
+FL_EXPORT void fl_draw(const char* str, int x, int y);
+/**
+  Draws a nul-terminated string starting at the given location and 
+  rotating \p angle degrees counterclockwise.
+  This version of fl_draw provides direct access to the text drawing
+  function of the underlying OS and is supported by Xft, Win32 and MacOS
+  fltk subsets.
+*/
+FL_EXPORT void fl_draw(int angle, const char* str, int x, int y);
+/**
+  Draws an array of \p n characters starting at the given location.
+*/
+inline void fl_draw(const char* str, int n, int x, int y) {fl_device->draw(str,n,x,y); };
+/**
+  Draws an array of \p n characters starting at the given location,
+  rotating \p angle degrees counterclockwise.
+*/
+inline void fl_draw(int angle,const char* str, int n, int x, int y) {fl_device->draw(angle,str,n,x,y); };
+/**
+  Draws an array of \p n characters right to left starting at given location.
+*/
+FL_EXPORT void fl_rtl_draw(const char*, int n, int x, int y);
+FL_EXPORT void fl_measure(const char* str, int& x, int& y,
+                          int draw_symbols = 1);
+FL_EXPORT void fl_draw(const char* str, int x, int y, int w, int h,
+                       Fl_Align align,
+                       Fl_Image* img=0, int draw_symbols = 1);
+FL_EXPORT void fl_draw(const char* str, int x, int y, int w, int h,
+                       Fl_Align align,
+                       void (*callthis)(const char *,int,int,int),
+                       Fl_Image* img=0, int draw_symbols = 1);
+
+// boxtypes:
+FL_EXPORT void fl_frame(const char* s, int x, int y, int w, int h);
+FL_EXPORT void fl_frame2(const char* s, int x, int y, int w, int h);
+FL_EXPORT void fl_draw_box(Fl_Boxtype, int x, int y, int w, int h, Fl_Color);
+
+// images:
+
+/**
+  Draw an 8-bit per color RGB or luminance image.
+  \param[in] buf points at the "r" data of the top-left pixel.
+                 Color data must be in <tt>r,g,b</tt> order.
+  \param[in] X,Y position where to put top-left corner of image
+  \param[in] W,H size of the image
+  \param[in] D   delta to add to the pointer between pixels. it may be
+                 any value greater than or equal to 3, or it can be
+		 negative to flip the image horizontally
+  \param[in] L   delta to add to the pointer between lines (if 0 is
+                 passed it uses \p W * \p D), and may be larger than
+		 \p W * \p D to crop data, or negative to flip the
+		 image vertically
+
+  It is highly recommended that you put the following code before the
+  first <tt>show()</tt> of \e any window in your program to get rid of
+  the dithering if possible:
+  \code
+  fltk3::visual(FL_RGB);
+  \endcode
+  Gray scale (1-channel) images may be drawn. This is done if
+  <tt>abs(D)</tt> is less than 3, or by calling fl_draw_image_mono().
+  Only one 8-bit sample is used for each pixel, and on screens with
+  different numbers of bits for red, green, and blue only gray colors
+  are used. Setting \p D greater than 1 will let you display one channel
+  of a color image.
+
+  \par Note:
+  The X version does not support all possible visuals. If FLTK cannot
+  draw the image in the current visual it will abort. FLTK supports
+  any visual of 8 bits or less, and all common TrueColor visuals up
+  to 32 bits.
+  */
+inline void fl_draw_image(const uchar* buf, int X,int Y,int W,int H, int D=3, int L=0)
+  { fl_device->draw_image(buf, X, Y, W, H, D, L); };
+
+/**
+  Draw a gray-scale (1 channel) image.
+  \see fl_draw_image(const uchar* buf, int X,int Y,int W,int H, int D, int L)
+  */
+inline void fl_draw_image_mono(const uchar* buf, int X,int Y,int W,int H, int D=1, int L=0)
+  { fl_device->draw_image_mono(buf, X, Y, W, H, D, L); };
+
+/**
+  Draw image using callback function to generate image data.
+  You can generate the image as it is being drawn, or do arbitrary
+  decompression of stored data, provided it can be decompressed to
+  individual scan lines easily.
+  \param[in] cb   callback function to generate scan line data
+  \param[in] data user data passed to callback function
+  \param[in] X,Y
+  \param[in] W,H
+  \param[in] D
+  \see fl_draw_image(const uchar* buf, int X,int Y,int W,int H, int D, int L)
+
+  The callback function \p cb is called with the <tt>void*</tt> \p data
+  user data pointer to allow access to a structure of information about
+  the image, and the \p x, \p y, and \p w of the scan line desired from
+  the image. 0,0 is the upper-left corner of the image, not \p X, \p Y.
+  A pointer to a buffer to put the data into is passed. You must copy
+  \p w pixels from scanline \p y, starting at pixel \p x, to this buffer.
+
+  Due to cropping, less than the whole image may be requested. So \p x
+  may be greater than zero, the first \p y may be greater than zero,
+  and \p w may be less than \p W. The buffer is long enough to store
+  the entire \p W * \p D pixels, this is for convenience with some
+  decompression schemes where you must decompress the entire line at
+  once: decompress it into the buffer, and then if \p x is not zero,
+  copy the data over so the \p x'th pixel is at the start of the buffer.
+
+  You can assume the \p y's will be consecutive, except the first one
+  may be greater than zero.
+
+  If \p D is 4 or more, you must fill in the unused bytes with zero.
+  */
+inline void fl_draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=3)
+  { fl_device->draw_image(cb, data, X, Y, W, H, D); };
+
+/**
+  Draw gray-scale image using callback function to generate image data.
+  \see fl_draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D)
+  */
+FL_EXPORT void fl_draw_image_mono(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=1);
+
+/**
+  Checks whether platform supports true alpha blending for RGBA images.
+  \returns 1 if true alpha blending supported by platform
+  \returns 0 not supported so FLTK will use screen door transparency
+  */
+/* note: doxygen comment here to avoid triplication in os-speciic files */
+FL_EXPORT char fl_can_do_alpha_blending();
+
+/**
+  Read an RGB(A) image from the current window or off-screen buffer.
+  \param[in] p     pixel buffer, or NULL to allocate one
+  \param[in] X,Y   position of top-left of image to read
+  \param[in] W,H   width and height of image to read
+  \param[in] alpha alpha value for image (0 fr none)
+  \returns pointer to pixel buffer, or NULL if allocation failed.
+
+  The \p p argument points to a buffer that can hold the image and must
+  be at least \p W*H*3 bytes when reading RGB images, or \p W*H*4 bytes
+  when reading RGBA images. If NULL, fl_read_image() will create an
+  array of the proper suze which can be freed using <tt>delete[]</tt>.
+
+  The \p alpha parameter controls whether an alpha channel is created
+  and the value that is placed in the alpha channel. If 0, no alpha
+  channel is generated.
+  */
+/* note: doxygen comment here to avoid triplication in os-speciic files */
+FL_EXPORT uchar *fl_read_image(uchar *p,int X,int Y,int W,int H,int alpha=0);
+
+// pixmaps:
+FL_EXPORT int fl_draw_pixmap(/*const*/ char* const* data, int x,int y,Fl_Color=FL_GRAY);
+FL_EXPORT int fl_draw_pixmap(const char* const* cdata, int x,int y,Fl_Color=FL_GRAY);
+FL_EXPORT int fl_measure_pixmap(/*const*/ char* const* data, int &w, int &h);
+FL_EXPORT int fl_measure_pixmap(const char* const* cdata, int &w, int &h);
+
+// other:
+FL_EXPORT void fl_scroll(int X, int Y, int W, int H, int dx, int dy,
+                         void (*draw_area)(void*, int,int,int,int), void* data);
+FL_EXPORT const char* fl_shortcut_label(unsigned int shortcut);
+FL_EXPORT const char* fl_shortcut_label(unsigned int shortcut, const char **eom);
+FL_EXPORT void fl_overlay_rect(int x,int y,int w,int h);
+FL_EXPORT void fl_overlay_clear();
+FL_EXPORT void fl_cursor(Fl_Cursor, Fl_Color fg=FL_BLACK, Fl_Color bg=FL_WHITE);
+FL_EXPORT const char* fl_expand_text(const char* from, char* buf, int maxbuf,
+                                     double maxw, int& n, double &width,
+                                     int wrap, int draw_symbols = 0);
+
+// XIM:
+/** \todo provide user documentation for fl_set_status function */
+FL_EXPORT void fl_set_status(int X, int Y, int W, int H);
+/** \todo provide user documentation for fl_set_spot function */
+FL_EXPORT void fl_set_spot(int font, int size, int X, int Y, int W, int H, fltk3::Window *win=0);
+/** \todo provide user documentation for fl_reset_spot function*/
+FL_EXPORT void fl_reset_spot(void);
+
+
+
+// XForms symbols:
+FL_EXPORT int fl_draw_symbol(const char* label,int x,int y,int w,int h, Fl_Color);
+FL_EXPORT int fl_add_symbol(const char* name, void (*drawit)(Fl_Color), int scalable);
+/** @} */
+
+#endif
+
+//
+// End of "$Id: fl_draw.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/fl_message.H
===================================================================
--- branches/branch-3.0/fltk3/fl_message.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/fl_message.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,32 @@
+//
+// "$Id: fl_message.H 6614 2009-01-01 16:11:32Z matt $"
+//
+// Standard message header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+#include "fl_ask.H"
+
+//
+// End of "$Id: fl_message.H 6614 2009-01-01 16:11:32Z matt $".
+//

Added: branches/branch-3.0/fltk3/fl_show_colormap.H
===================================================================
--- branches/branch-3.0/fltk3/fl_show_colormap.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/fl_show_colormap.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,37 @@
+//
+// "$Id: fl_show_colormap.H 6614 2009-01-01 16:11:32Z matt $"
+//
+// Colormap picker header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+#ifndef fl_show_colormap_H
+#define fl_show_colormap_H
+
+FL_EXPORT Fl_Color fl_show_colormap(Fl_Color oldcol);
+
+#endif
+
+//
+// End of "$Id: fl_show_colormap.H 6614 2009-01-01 16:11:32Z matt $".
+//

Added: branches/branch-3.0/fltk3/fl_show_input.H
===================================================================
--- branches/branch-3.0/fltk3/fl_show_input.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/fl_show_input.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,32 @@
+//
+// "$Id: fl_show_input.H 6614 2009-01-01 16:11:32Z matt $"
+//
+// Standard input dialog header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+#include "fl_ask.H"
+
+//
+// End of "$Id: fl_show_input.H 6614 2009-01-01 16:11:32Z matt $".
+//

Added: branches/branch-3.0/fltk3/fl_types.h
===================================================================
--- branches/branch-3.0/fltk3/fl_types.h	                        (rev 0)
+++ branches/branch-3.0/fltk3/fl_types.h	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,66 @@
+/*
+ * "$Id: fl_types.h 6942 2009-11-18 12:22:51Z AlbrechtS $"
+ *
+ * Simple "C"-style types for the Fast Light Tool Kit (FLTK).
+ *
+ * Copyright 1998-2009 by Bill Spitzak and others.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ * USA.
+ *
+ * Please report all bugs and problems on the following page:
+ *
+ *     http://www.fltk.org/str.php
+ */
+
+/** \file 
+ *  This file contains simple "C"-style type definitions.
+ */
+
+#ifndef FL_TYPES_H
+#define FL_TYPES_H
+
+/** \name	Miscellaneous */
+/*@{*/	/* group: Miscellaneous */
+
+/** unsigned char */
+typedef unsigned char uchar;
+/** unsigned long */
+typedef unsigned long ulong;
+
+/** Flexible length utf8 Unicode text
+ *
+ *  \todo FIXME: temporary (?) typedef to mark UTF8 and Unicode conversions
+ */
+typedef char *Fl_String;
+
+/** Flexible length utf8 Unicode read-only string
+ *  \sa Fl_String
+ */
+typedef const char *Fl_CString;
+
+/** 24-bit Unicode character + 8-bit indicator for keyboard flags */
+typedef unsigned int Fl_Shortcut;
+
+/** 24-bit Unicode character - upper 8-bits are unused */
+typedef unsigned int Fl_Char;
+ 
+/*@}*/	/* group: Miscellaneous */
+
+#endif
+
+/*
+ * End of "$Id: fl_types.h 6942 2009-11-18 12:22:51Z AlbrechtS $".
+ */

Added: branches/branch-3.0/fltk3/fl_utf8.h
===================================================================
--- branches/branch-3.0/fltk3/fl_utf8.h	                        (rev 0)
+++ branches/branch-3.0/fltk3/fl_utf8.h	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,250 @@
+/* "$Id: fl_utf8.h 6942 2009-11-18 12:22:51Z AlbrechtS $"
+ *
+ * Author: Jean-Marc Lienher ( http://oksid.ch )
+ * Copyright 2000-2009 by O'ksi'D.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ * USA.
+ *
+ * Please report all bugs and problems on the following page:
+ *
+ *     http://www.fltk.org/str.php
+ */
+
+/* Merged in some functionality from the fltk-2 version. IMM.
+ * The following code is an attempt to merge the functions incorporated in FLTK2
+ * with the functions provided in OksiD's fltk-1.1.6-utf8 port
+ */
+
+/*** NOTE : all functions are LIMITED to 24 bits Unicode values !!! ***/
+
+/**
+  \file fl_utf8.h
+  \brief header for Unicode and UTF8 chracter handling
+*/
+
+#ifndef _HAVE_FL_UTF8_HDR_
+#define _HAVE_FL_UTF8_HDR_
+
+#include "FL/Fl_Export.H"
+#include "FL/fl_types.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#ifdef WIN32
+#  include <sys/types.h>
+#  include <sys/stat.h>
+#  include <locale.h>
+#  include <ctype.h>
+#  define xchar wchar_t
+#  if !defined(FL_DLL) && !defined(__CYGWIN__)
+#    undef strdup
+#    define strdup _strdup
+#    undef putenv
+#    define putenv _putenv
+#    undef stricmp
+#    define stricmp _stricmp
+#    undef strnicmp
+#    define strnicmp _strnicmp
+#    undef hypot
+#    define hypot _hypot
+#    undef chdir
+#    define chdir _chdir
+#  endif
+#elif defined(__APPLE__)
+#  include <wchar.h>
+#  include <sys/stat.h>
+#  define xchar wchar_t
+#else /* X11 */
+#  include <sys/types.h>
+#  include <sys/stat.h>
+#  include "Xutf8.h"
+#  include <X11/Xlocale.h>
+#  include <X11/Xlib.h>
+#  include <locale.h>
+#  define xchar unsigned short
+#endif
+
+#  ifdef __cplusplus
+extern "C" {
+#  endif
+
+/** \addtogroup fl_unicode
+    @{
+*/
+
+/* F2: comes from FLTK2 */
+/* OD: comes from OksiD */
+
+/**
+  Return the number of bytes needed to encode the given UCS4 character in UTF8.
+  \param [in] ucs UCS4 encoded character
+  \return number of bytes required
+ */
+FL_EXPORT int fl_utf8bytes(unsigned ucs);
+
+/* OD: returns the byte length of the first UTF-8 char sequence (returns -1 if not valid) */
+FL_EXPORT int fl_utf8len(char c);
+
+/* OD: returns the number of Unicode chars in the UTF-8 string */
+FL_EXPORT int fl_utf_nb_char(const unsigned char *buf, int len);
+
+/* F2: Convert the next UTF8 char-sequence into a Unicode value (and say how many bytes were used) */
+FL_EXPORT unsigned fl_utf8decode(const char* p, const char* end, int* len);
+
+/* F2: Encode a Unicode value into a UTF8 sequence, return the number of bytes used */
+FL_EXPORT int fl_utf8encode(unsigned ucs, char* buf);
+
+/* F2: Move forward to the next valid UTF8 sequence start betwen start and end */
+FL_EXPORT const char* fl_utf8fwd(const char* p, const char* start, const char* end);
+
+/* F2: Move backward to the previous valid UTF8 sequence start */
+FL_EXPORT const char* fl_utf8back(const char* p, const char* start, const char* end);
+
+/* F2: Convert a UTF8 string into UTF16 */
+FL_EXPORT unsigned fl_utf8toUtf16(const char* src, unsigned srclen, unsigned short* dst, unsigned dstlen);
+
+/* F2: Convert a UTF8 string into a wide character string - makes UTF16 on win32, "UCS4" elsewhere */
+FL_EXPORT unsigned fl_utf8towc(const char *src, unsigned srclen, wchar_t *dst, unsigned dstlen);
+
+/* F2: Convert a wide character string to UTF8 - takes in UTF16 on win32, "UCS4" elsewhere */
+FL_EXPORT unsigned fl_utf8fromwc(char *dst, unsigned dstlen, const wchar_t *src, unsigned srclen);
+
+/* F2: Convert a UTF8 string into ASCII, eliding untranslatable glyphs */
+FL_EXPORT unsigned fl_utf8toa (const char *src, unsigned srclen, char *dst, unsigned dstlen);
+/* OD: convert UTF-8 string to latin1 */
+/* FL_EXPORT int fl_utf2latin1(const unsigned char *src, int srclen, char *dst); */
+
+/* F2: Convert 8859-1 string to UTF8 */
+FL_EXPORT unsigned fl_utf8froma (char *dst, unsigned dstlen, const char *src, unsigned srclen);
+/* OD: convert latin1 str to UTF-8 */
+/* FL_EXPORT int fl_latin12utf(const unsigned char *src, int srclen, char *dst); */
+
+/* F2: Returns true if the current O/S locale is UTF8 */
+FL_EXPORT int fl_utf8locale();
+
+/* F2: Examine the first len characters of src, to determine if the input text is UTF8 or not
+ * NOTE: The value returned is not simply boolean - it contains information about the probable
+ * type of the src text. */
+FL_EXPORT int fl_utf8test(const char *src, unsigned len);
+
+/* OD: Return true if the character is non-spacing */
+FL_EXPORT unsigned int fl_nonspacing(unsigned int ucs);
+
+/* F2: Convert UTF8 to a local multi-byte encoding - mainly for win32? */
+FL_EXPORT unsigned fl_utf8to_mb(const char *src, unsigned srclen, char *dst, unsigned dstlen);
+/* OD: Convert UTF8 to a local multi-byte encoding */
+FL_EXPORT char* fl_utf2mbcs(const char *src);
+
+/* F2: Convert a local multi-byte encoding to UTF8 - mainly for win32? */
+FL_EXPORT unsigned fl_utf8from_mb(char *dst, unsigned dstlen, const char *src, unsigned srclen);
+/* OD: Convert a local multi-byte encoding to UTF8 */
+/* FL_EXPORT char* fl_mbcs2utf(const char *src); */
+
+/*****************************************************************************/
+#ifdef WIN32
+/* OD: Attempt to convert the UTF8 string to the current locale */
+FL_EXPORT char *fl_utf8_to_locale(const char *s, int len, unsigned int codepage);
+
+/* OD: Attempt to convert a string in the current locale to UTF8 */
+FL_EXPORT char *fl_locale_to_utf8(const char *s, int len, unsigned int codepage);
+#endif
+
+/*****************************************************************************
+ * The following functions are intended to provide portable, UTF8 aware
+ * versions of standard functions
+ */
+
+/* OD: UTF8 aware strncasecmp - converts to lower case Unicode and tests */
+FL_EXPORT int fl_utf_strncasecmp(const char *s1, const char *s2, int n);
+
+/* OD: UTF8 aware strcasecmp - converts to Unicode and tests */
+FL_EXPORT int fl_utf_strcasecmp(const char *s1, const char *s2);
+
+/* OD: return the Unicode lower case value of ucs */
+FL_EXPORT int fl_tolower(unsigned int ucs);
+
+/* OD: return the Unicode upper case value of ucs */
+FL_EXPORT int fl_toupper(unsigned int ucs);
+
+/* OD: converts the UTF8 string to the lower case equivalent */
+FL_EXPORT int fl_utf_tolower(const unsigned char *str, int len, char *buf);
+
+/* OD: converts the UTF8 string to the upper case equivalent */
+FL_EXPORT int fl_utf_toupper(const unsigned char *str, int len, char *buf);
+
+/* OD: Portable UTF8 aware chmod wrapper */
+FL_EXPORT int fl_chmod(const char* f, int mode);
+
+/* OD: Portable UTF8 aware access wrapper */
+FL_EXPORT int fl_access(const char* f, int mode);
+
+/* OD: Portable UTF8 aware stat wrapper */
+FL_EXPORT int fl_stat( const char *path, struct stat *buffer );
+
+/* OD: Portable UTF8 aware getcwd wrapper */
+FL_EXPORT char* fl_getcwd( char *buf, int maxlen);
+
+/* OD: Portable UTF8 aware fopen wrapper */
+FL_EXPORT FILE *fl_fopen(const char *f, const char *mode);
+
+/* OD: Portable UTF8 aware system wrapper */
+FL_EXPORT int fl_system(const char* f);
+
+/* OD: Portable UTF8 aware execvp wrapper */
+FL_EXPORT int fl_execvp(const char *file, char *const *argv);
+
+/* OD: Portable UTF8 aware open wrapper */
+FL_EXPORT int fl_open(const char* f, int o, ...);
+
+/* OD: Portable UTF8 aware unlink wrapper */
+FL_EXPORT int fl_unlink(const char *f);
+
+/* OD: Portable UTF8 aware rmdir wrapper */
+FL_EXPORT int fl_rmdir(const char *f);
+
+/* OD: Portable UTF8 aware getenv wrapper */
+FL_EXPORT char* fl_getenv(const char *name);
+
+/* OD: Portable UTF8 aware execvp wrapper */
+FL_EXPORT int fl_mkdir(const char* f, int mode);
+
+/* OD: Portable UTF8 aware rename wrapper */
+FL_EXPORT int fl_rename(const char* f, const char *t);
+
+
+/* OD: Given a full pathname, this will create the directory path needed to hold the file named */
+FL_EXPORT void fl_make_path_for_file( const char *path );
+
+/* OD: recursively create a path in the file system */
+FL_EXPORT char fl_make_path( const char *path );
+
+
+/** @} */
+
+/*****************************************************************************/
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+
+#endif /* _HAVE_FL_UTF8_HDR_ */
+
+/*
+ * End of "$Id: fl_utf8.h 6942 2009-11-18 12:22:51Z AlbrechtS $".
+ */

Added: branches/branch-3.0/fltk3/forms.H
===================================================================
--- branches/branch-3.0/fltk3/forms.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/forms.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,845 @@
+//
+// "$Id: forms.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// Forms emulation header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+#ifndef __FORMS_H__
+#define __FORMS_H__
+
+#include "Fl.H"
+#include "Fl_Group.H"
+#include "Fl_Window.H"
+#include "fl_draw.H"
+
+typedef fltk3::Widget FL_OBJECT;
+typedef fltk3::Window FL_FORM;
+
+////////////////////////////////////////////////////////////////
+// Random constants & symbols defined by forms.h file:
+
+#ifndef NULL
+#define NULL 0
+#endif
+#ifndef FALSE
+#define FALSE 0
+#define TRUE 1
+#endif
+
+#define FL_ON		1
+#define FL_OK		1
+#define FL_VALID	1
+#define FL_PREEMPT	1
+#define FL_AUTO		2
+#define FL_WHEN_NEEDED	FL_AUTO
+#define FL_OFF		0
+#define FL_NONE		0
+#define FL_CANCEL	0
+#define FL_INVALID	0
+#define FL_IGNORE	-1
+//#define FL_CLOSE	-2 // this variable is never used in FLTK Forms. It is removed becaus it conflicts with the window FL_CLOSE event
+
+#define FL_LCOL		FL_BLACK
+#define FL_COL1		FL_GRAY
+#define FL_MCOL		FL_LIGHT1
+#define FL_LEFT_BCOL	FL_LIGHT3 // 53 is better match
+#define FL_TOP_BCOL	FL_LIGHT2 // 51
+#define FL_BOTTOM_BCOL	FL_DARK2  // 40
+#define FL_RIGHT_BCOL	FL_DARK3  // 36
+#define FL_INACTIVE	FL_INACTIVE_COLOR
+#define FL_INACTIVE_COL	FL_INACTIVE_COLOR
+#define FL_FREE_COL1	FL_FREE_COLOR
+#define FL_FREE_COL2	((Fl_Color)(FL_FREE_COLOR+1))
+#define FL_FREE_COL3	((Fl_Color)(FL_FREE_COLOR+2))
+#define FL_FREE_COL4	((Fl_Color)(FL_FREE_COLOR+3))
+#define FL_FREE_COL5	((Fl_Color)(FL_FREE_COLOR+4))
+#define FL_FREE_COL6	((Fl_Color)(FL_FREE_COLOR+5))
+#define FL_FREE_COL7	((Fl_Color)(FL_FREE_COLOR+6))
+#define FL_FREE_COL8	((Fl_Color)(FL_FREE_COLOR+7))
+#define FL_FREE_COL9	((Fl_Color)(FL_FREE_COLOR+8))
+#define FL_FREE_COL10	((Fl_Color)(FL_FREE_COLOR+9))
+#define FL_FREE_COL11	((Fl_Color)(FL_FREE_COLOR+10))
+#define FL_FREE_COL12	((Fl_Color)(FL_FREE_COLOR+11))
+#define FL_FREE_COL13	((Fl_Color)(FL_FREE_COLOR+12))
+#define FL_FREE_COL14	((Fl_Color)(FL_FREE_COLOR+13))
+#define FL_FREE_COL15	((Fl_Color)(FL_FREE_COLOR+14))
+#define FL_FREE_COL16	((Fl_Color)(FL_FREE_COLOR+15))
+#define FL_TOMATO	((Fl_Color)(131))
+#define FL_INDIANRED	((Fl_Color)(164))
+#define FL_SLATEBLUE	((Fl_Color)(195))
+#define FL_DARKGOLD	((Fl_Color)(84))
+#define FL_PALEGREEN	((Fl_Color)(157))
+#define FL_ORCHID	((Fl_Color)(203))
+#define FL_DARKCYAN	((Fl_Color)(189))
+#define FL_DARKTOMATO	((Fl_Color)(113))
+#define FL_WHEAT	((Fl_Color)(174))
+
+#define FL_ALIGN_BESIDE	FL_ALIGN_INSIDE
+
+#define FL_PUP_TOGGLE	2 // FL_MENU_TOGGLE
+#define FL_PUP_INACTIVE 1 // FL_MENU_INACTIVE
+#define FL_NO_FRAME	FL_NO_BOX
+#define FL_ROUNDED3D_UPBOX 	FL_ROUND_UP_BOX
+#define FL_ROUNDED3D_DOWNBOX	FL_ROUND_DOWN_BOX
+#define FL_OVAL3D_UPBOX		FL_ROUND_UP_BOX
+#define FL_OVAL3D_DOWNBOX	FL_ROUND_DOWN_BOX
+
+#define FL_MBUTTON1	1
+#define FL_LEFTMOUSE	1
+#define FL_MBUTTON2	2
+#define FL_MIDDLEMOUSE	2
+#define FL_MBUTTON3	3
+#define FL_RIGHTMOUSE	3
+#define FL_MBUTTON4	4
+#define FL_MBUTTON5	5
+
+#define FL_INVALID_STYLE 255
+#define FL_NORMAL_STYLE	FL_HELVETICA
+#define FL_BOLD_STYLE	FL_HELVETICA_BOLD
+#define FL_ITALIC_STYLE	FL_HELVETICA_ITALIC
+#define FL_BOLDITALIC_STYLE FL_HELVETICA_BOLD_ITALIC
+#define FL_FIXED_STYLE	FL_COURIER
+#define FL_FIXEDBOLD_STYLE FL_COURIER_BOLD
+#define FL_FIXEDITALIC_STYLE FL_COURIER_ITALIC
+#define FL_FIXEDBOLDITALIC_STYLE FL_COURIER_BOLD_ITALIC
+#define FL_TIMES_STYLE	FL_TIMES
+#define FL_TIMESBOLD_STYLE FL_TIMES_BOLD
+#define FL_TIMESITALIC_STYLE FL_TIMES_ITALIC
+#define FL_TIMESBOLDITALIC_STYLE FL_TIMES_BOLD_ITALIC
+
+// hacks to change the labeltype() when passed to fl_set_object_lstyle():
+#define FL_SHADOW_STYLE		(FL_SHADOW_LABEL<<8)
+#define FL_ENGRAVED_STYLE	(FL_ENGRAVED_LABEL<<8)
+#define FL_EMBOSSED_STYLE	(FL_EMBOSSED_LABEL<<0)
+
+// size values are different from XForms, match older Forms:
+#define FL_TINY_SIZE	8
+#define FL_SMALL_SIZE	11 // 10
+//#define FL_NORMAL_SIZE	14 // 12
+#define FL_MEDIUM_SIZE	18 // 14
+#define FL_LARGE_SIZE	24 // 18
+#define FL_HUGE_SIZE	32 // 24
+#define FL_DEFAULT_SIZE	FL_SMALL_SIZE
+#define FL_TINY_FONT	FL_TINY_SIZE
+#define FL_SMALL_FONT	FL_SMALL_SIZE
+#define FL_NORMAL_FONT	FL_NORMAL_SIZE
+#define FL_MEDIUM_FONT	FL_MEDIUM_SIZE
+#define FL_LARGE_FONT	FL_LARGE_SIZE
+#define FL_HUGE_FONT	FL_HUGE_SIZE
+#define FL_NORMAL_FONT1	FL_SMALL_FONT
+#define FL_NORMAL_FONT2	FL_NORMAL_FONT
+#define FL_DEFAULT_FONT	FL_SMALL_FONT
+
+#define FL_RETURN_END_CHANGED	FL_WHEN_RELEASE
+#define FL_RETURN_CHANGED	FL_WHEN_CHANGED
+#define FL_RETURN_END		FL_WHEN_RELEASE_ALWAYS
+#define FL_RETURN_ALWAYS	(FL_WHEN_CHANGED|FL_WHEN_NOT_CHANGED)
+
+#define FL_BOUND_WIDTH	3
+
+typedef int FL_Coord;
+typedef int FL_COLOR;
+
+////////////////////////////////////////////////////////////////
+// fltk interaction:
+
+#define FL_CMD_OPT void
+extern FL_EXPORT void fl_initialize(int*, char*[], const char*, FL_CMD_OPT*, int);
+inline void fl_finish() {}
+
+typedef void (*FL_IO_CALLBACK) (int, void*);
+inline void fl_add_io_callback(int fd, short w, FL_IO_CALLBACK cb, void* v) {
+  fltk3::add_fd(fd,w,cb,v);}
+inline void fl_remove_io_callback(int fd, short, FL_IO_CALLBACK) {
+  fltk3::remove_fd(fd);} // removes all the callbacks!
+
+// type of callback is different and no "id" number is returned:
+inline void fl_add_timeout(long msec, void (*cb)(void*), void* v) {
+  fltk3::add_timeout(msec*.001, cb, v);}
+inline void fl_remove_timeout(int) {}
+
+// type of callback is different!
+inline void fl_set_idle_callback(void (*cb)()) {fltk3::set_idle(cb);}
+
+FL_EXPORT fltk3::Widget* fl_do_forms(void);
+FL_EXPORT fltk3::Widget* fl_check_forms();
+inline fltk3::Widget* fl_do_only_forms(void) {return fl_do_forms();}
+inline fltk3::Widget* fl_check_only_forms(void) {return fl_check_forms();}
+
+// because of new redraw behavior, these are no-ops:
+inline void fl_freeze_object(fltk3::Widget*) {}
+inline void fl_unfreeze_object(fltk3::Widget*) {}
+inline void fl_freeze_form(fltk3::Window*) {}
+inline void fl_unfreeze_form(fltk3::Window*) {}
+inline void fl_freeze_all_forms() {}
+inline void fl_unfreeze_all_forms() {}
+
+inline void fl_set_focus_object(fltk3::Window*, fltk3::Widget* o) {fltk3::focus(o);}
+inline void fl_reset_focus_object(fltk3::Widget* o) {fltk3::focus(o);}
+#define fl_set_object_focus fl_set_focus_object
+
+// void fl_set_form_atclose(fltk3::Window*w,int (*cb)(fltk3::Window*,void*),void* v)
+// void fl_set_atclose(int (*cb)(fltk3::Window*,void*),void*)
+// fl_set_form_atactivate/atdeactivate not implemented!
+
+////////////////////////////////////////////////////////////////
+// fltk3::Widget:
+
+inline void fl_set_object_boxtype(fltk3::Widget* o, Fl_Boxtype a) {o->box(a);}
+inline void fl_set_object_lsize(fltk3::Widget* o,int s) {o->labelsize(s);}
+
+/* forms lib font indexes must be byte sized - extract correct byte from style word */
+inline void fl_set_object_lstyle(fltk3::Widget* o,int a) {
+  o->labelfont((Fl_Font)(a&0xff)); o->labeltype((Fl_Labeltype)(a>>8));}
+inline void fl_set_object_lcol(fltk3::Widget* o, Fl_Color a) {o->labelcolor(a);}
+#define fl_set_object_lcolor  fl_set_object_lcol
+inline void fl_set_object_lalign(fltk3::Widget* o, Fl_Align a) {o->align(a);}
+#define fl_set_object_align fl_set_object_lalign
+inline void fl_set_object_color(fltk3::Widget* o,Fl_Color a,Fl_Color b) {o->color(a,b);}
+inline void fl_set_object_label(fltk3::Widget* o, const char* a) {o->label(a); o->redraw();}
+inline void fl_set_object_position(fltk3::Widget*o,int x,int y) {o->position(x,y);}
+inline void fl_set_object_size(fltk3::Widget* o, int w, int h) {o->size(w,h);}
+inline void fl_set_object_geometry(fltk3::Widget* o,int x,int y,int w,int h) {o->resize(x,y,w,h);}
+
+inline void fl_get_object_geometry(fltk3::Widget* o,int*x,int*y,int*w,int*h) {
+  *x = o->x(); *y = o->y(); *w = o->w(); *h = o->h();}
+inline void fl_get_object_position(fltk3::Widget* o,int*x,int*y) {
+  *x = o->x(); *y = o->y();}
+
+typedef void (*Forms_CB)(fltk3::Widget*, long);
+inline void fl_set_object_callback(fltk3::Widget*o,Forms_CB c,long a) {o->callback(c,a);}
+#define fl_set_call_back      fl_set_object_callback
+inline void fl_call_object_callback(fltk3::Widget* o) {o->do_callback();}
+inline void fl_trigger_object(fltk3::Widget* o) {o->do_callback();}
+inline void fl_set_object_return(fltk3::Widget* o, int v) {
+  o->when((Fl_When)(v|FL_WHEN_RELEASE));}
+
+inline void fl_redraw_object(fltk3::Widget* o) {o->redraw();}
+inline void fl_show_object(fltk3::Widget* o) {o->show();}
+inline void fl_hide_object(fltk3::Widget* o) {o->hide();}
+inline void fl_free_object(fltk3::Widget* x) {delete x;}
+inline void fl_delete_object(fltk3::Widget* o) {o->parent()->remove(*o);}
+inline void fl_activate_object(fltk3::Widget* o) {o->activate();}
+inline void fl_deactivate_object(fltk3::Widget* o) {o->deactivate();}
+
+inline void fl_add_object(fltk3::Window* f, fltk3::Widget* x) {f->add(x);}
+inline void fl_insert_object(fltk3::Widget* o, fltk3::Widget* b) {b->parent()->insert(*o,b);}
+
+inline fltk3::Window* FL_ObjWin(fltk3::Widget* o) {return o->window();}
+
+////////////////////////////////////////////////////////////////
+// things that appered in the demos a lot that I don't emulate, but
+// I did not want to edit out of all the demos...
+
+inline int fl_get_border_width() {return 3;}
+inline void fl_set_border_width(int) {}
+inline void fl_set_object_dblbuffer(fltk3::Widget*, int) {}
+inline void fl_set_form_dblbuffer(fltk3::Window*, int) {}
+
+////////////////////////////////////////////////////////////////
+// fltk3::Window:
+
+inline void fl_free_form(fltk3::Window* x) {delete x;}
+inline void fl_redraw_form(fltk3::Window* f) {f->redraw();}
+
+inline fltk3::Window* fl_bgn_form(Fl_Boxtype b,int w,int h) {
+  fltk3::Window* g = new fltk3::Window(w,h,0);
+  g->box(b);
+  return g;
+}
+FL_EXPORT void fl_end_form();
+inline void fl_addto_form(fltk3::Window* f) {f->begin();}
+inline fltk3::Group* fl_bgn_group() {return new fltk3::Group(0,0,0,0,0);}
+inline void fl_end_group() {fltk3::Group::current()->forms_end();}
+inline void fl_addto_group(fltk3::Widget* o) {((fltk3::Group* )o)->begin();}
+#define resizebox _ddfdesign_kludge()
+
+inline void fl_scale_form(fltk3::Window* f, double x, double y) {
+  f->resizable(f); f->size(int(f->w()*x),int(f->h()*y));}
+inline void fl_set_form_position(fltk3::Window* f,int x,int y) {f->position(x,y);}
+inline void fl_set_form_size(fltk3::Window* f, int w, int h) {f->size(w,h);}
+inline void fl_set_form_geometry(fltk3::Window* f,int x,int y,int w,int h) {
+  f->resize(x,y,w,h);}
+#define fl_set_initial_placement fl_set_form_geometry
+inline void fl_adjust_form_size(fltk3::Window*) {}
+
+FL_EXPORT void fl_show_form(fltk3::Window* f,int p,int b,const char* n);
+enum {	// "p" argument values:
+  FL_PLACE_FREE = 0,	// make resizable
+  FL_PLACE_MOUSE = 1,	// mouse centered on form
+  FL_PLACE_CENTER = 2,	// center of the screen
+  FL_PLACE_POSITION = 4,// fixed position, resizable
+  FL_PLACE_SIZE = 8,	// fixed size, normal fltk behavior
+  FL_PLACE_GEOMETRY =16,// fixed size and position
+  FL_PLACE_ASPECT = 32,	// keep aspect ratio (ignored)
+  FL_PLACE_FULLSCREEN=64,// fill screen
+  FL_PLACE_HOTSPOT = 128,// enables hotspot
+  FL_PLACE_ICONIC = 256,// iconic (ignored)
+  FL_FREE_SIZE=(1<<14),	// force resizable
+  FL_FIX_SIZE =(1<<15)	// force off resizable
+};
+#define FL_PLACE_FREE_CENTER (FL_PLACE_CENTER|FL_FREE_SIZE)
+#define FL_PLACE_CENTERFREE  (FL_PLACE_CENTER|FL_FREE_SIZE)
+enum {	// "b" arguement values:
+  FL_NOBORDER = 0,
+  FL_FULLBORDER,
+  FL_TRANSIENT
+//FL_MODAL = (1<<8)	// not implemented yet in Forms
+};
+inline void fl_set_form_hotspot(fltk3::Window* w,int x,int y) {w->hotspot(x,y);}
+inline void fl_set_form_hotobject(fltk3::Window* w, fltk3::Widget* o) {w->hotspot(o);}
+extern FL_EXPORT char fl_flip;	// in forms.C
+inline void fl_flip_yorigin() {fl_flip = 1;}
+
+#define fl_prepare_form_window fl_show_form
+inline void fl_show_form_window(fltk3::Window*) {}
+
+inline void fl_raise_form(fltk3::Window* f) {f->show();}
+
+inline void fl_hide_form(fltk3::Window* f) {f->hide();}
+inline void fl_pop_form(fltk3::Window* f) {f->show();}
+
+extern FL_EXPORT char fl_modal_next; // in forms.C
+inline void fl_activate_all_forms() {}
+inline void fl_deactivate_all_forms() {fl_modal_next = 1;}
+inline void fl_deactivate_form(fltk3::Window*w) {w->deactivate();}
+inline void fl_activate_form(fltk3::Window*w) {w->activate();}
+
+inline void fl_set_form_title(fltk3::Window* f, const char* s) {f->label(s);}
+inline void fl_title_form(fltk3::Window* f, const char* s) {f->label(s);}
+
+typedef void (*Forms_FormCB)(fltk3::Widget*);
+inline void fl_set_form_callback(fltk3::Window* f,Forms_FormCB c) {f->callback(c);}
+#define fl_set_form_call_back fl_set_form_callback
+
+inline void fl_init() {}
+FL_EXPORT void fl_set_graphics_mode(int,int);
+
+inline int fl_form_is_visible(fltk3::Window* f) {return f->visible();}
+
+inline int fl_mouse_button() {return fltk3::event_button();}
+#define fl_mousebutton fl_mouse_button
+
+#define fl_free       free
+#define fl_malloc     malloc
+#define fl_calloc     calloc
+#define fl_realloc    realloc
+
+////////////////////////////////////////////////////////////////
+// Drawing functions.  Only usable inside an Fl_Free object?
+
+inline void fl_drw_box(Fl_Boxtype b,int x,int y,int w,int h,Fl_Color bgc,int=3) {
+    fl_draw_box(b,x,y,w,h,bgc);}
+inline void fl_drw_frame(Fl_Boxtype b,int x,int y,int w,int h,Fl_Color bgc,int=3) {
+    fl_draw_box(b,x,y,w,h,bgc);}
+
+inline void fl_drw_text(Fl_Align align, int x, int y, int w, int h,
+		  Fl_Color fgcolor, int size, Fl_Font style,
+		  const char* s) {
+  fl_font(style,size);
+  fl_color(fgcolor);
+  fl_draw(s,x,y,w,h,align);
+}
+
+// this does not work except for CENTER...
+inline void fl_drw_text_beside(Fl_Align align, int x, int y, int w, int h,
+		  Fl_Color fgcolor, int size, Fl_Font style,
+		  const char* s) {
+  fl_font(style,size);
+  fl_color(fgcolor);
+  fl_draw(s,x,y,w,h,align);
+}
+
+inline void fl_set_font_name(Fl_Font n,const char* s) {fltk3::set_font(n,s);}
+
+inline void fl_mapcolor(Fl_Color c, uchar r, uchar g, uchar b) {fltk3::set_color(c,r,g,b);}
+
+#define fl_set_clipping(x,y,w,h) fl_push_clip(x,y,w,h)
+#define fl_unset_clipping() fl_pop_clip()
+
+////////////////////////////////////////////////////////////////
+// Forms classes:
+
+inline fltk3::Widget* fl_add_new(fltk3::Widget* p) {return p;}
+inline fltk3::Widget* fl_add_new(uchar t,fltk3::Widget* p) {p->type(t); return p;}
+
+#define forms_constructor(type,name) \
+inline type* name(uchar t,int x,int y,int w,int h,const char* l) { \
+ return (type*)(fl_add_new(t, new type(x,y,w,h,l)));}
+#define forms_constructort(type,name) \
+inline type* name(uchar t,int x,int y,int w,int h,const char* l) { \
+ return (type*)(fl_add_new(new type(t,x,y,w,h,l)));}
+#define forms_constructorb(type,name) \
+inline type* name(Fl_Boxtype t,int x,int y,int w,int h,const char* l) { \
+ return (type*)(fl_add_new(new type(t,x,y,w,h,l)));}
+
+#include "Fl_FormsBitmap.H"
+#define FL_NORMAL_BITMAP FL_NO_BOX
+forms_constructorb(Fl_FormsBitmap, fl_add_bitmap)
+inline void fl_set_bitmap_data(fltk3::Widget* o, int w, int h, const uchar* b) {
+    ((Fl_FormsBitmap*)o)->set(w,h,b);
+}
+
+#include "Fl_FormsPixmap.H"
+#define FL_NORMAL_PIXMAP FL_NO_BOX
+forms_constructorb(Fl_FormsPixmap, fl_add_pixmap)
+inline void fl_set_pixmap_data(fltk3::Widget* o, char*const* b) {
+    ((Fl_FormsPixmap*)o)->set(b);
+}
+//inline void fl_set_pixmap_file(fltk3::Widget*, const char*);
+inline void fl_set_pixmap_align(fltk3::Widget* o,Fl_Align a,int,int) {o->align(a);}
+//inline void fl_set_pixmap_colorcloseness(int, int, int);
+
+#include "Fl_Box.H"
+forms_constructorb(Fl_Box, fl_add_box)
+
+#include "Fl_Browser.H"
+forms_constructor(Fl_Browser, fl_add_browser)
+
+inline void fl_clear_browser(fltk3::Widget* o) {
+    ((Fl_Browser*)o)->clear();}
+inline void fl_add_browser_line(fltk3::Widget* o, const char* s) {
+    ((Fl_Browser*)o)->add(s);}
+inline void fl_addto_browser(fltk3::Widget* o, const char* s) {
+    ((Fl_Browser*)o)->add(s);} /* should also scroll to bottom */
+//inline void fl_addto_browser_chars(fltk3::Widget*, const char*)
+//#define fl_append_browser fl_addto_browser_chars
+inline void fl_insert_browser_line(fltk3::Widget* o, int n, const char* s) {
+    ((Fl_Browser*)o)->insert(n,s);}
+inline void fl_delete_browser_line(fltk3::Widget* o, int n) {
+    ((Fl_Browser*)o)->remove(n);}
+inline void fl_replace_browser_line(fltk3::Widget* o, int n, const char* s) {
+    ((Fl_Browser*)o)->replace(n,s);}
+inline char* fl_get_browser_line(fltk3::Widget* o, int n) {
+    return (char*)(((Fl_Browser*)o)->text(n));}
+inline int fl_load_browser(fltk3::Widget* o, const char* f) {
+    return ((Fl_Browser*)o)->load(f);}
+inline void fl_select_browser_line(fltk3::Widget* o, int n) {
+    ((Fl_Browser*)o)->select(n,1);}
+inline void fl_deselect_browser_line(fltk3::Widget* o, int n) {
+    ((Fl_Browser*)o)->select(n,0);}
+inline void fl_deselect_browser(fltk3::Widget* o) {
+    ((Fl_Browser*)o)->deselect();}
+inline int fl_isselected_browser_line(fltk3::Widget* o, int n) {
+    return ((Fl_Browser*)o)->selected(n);}
+inline int fl_get_browser_topline(fltk3::Widget* o) {
+    return ((Fl_Browser*)o)->topline();}
+inline int fl_get_browser(fltk3::Widget* o) {
+    return ((Fl_Browser*)o)->value();}
+inline int fl_get_browser_maxline(fltk3::Widget* o) {
+    return ((Fl_Browser*)o)->size();}
+//linline int fl_get_browser_screenlines(fltk3::Widget*);
+inline void fl_set_browser_topline(fltk3::Widget* o, int n) {
+    ((Fl_Browser*)o)->topline(n);}
+inline void fl_set_browser_fontsize(fltk3::Widget* o, int s) {
+    ((Fl_Browser*)o)->textsize(s);}
+inline void fl_set_browser_fontstyle(fltk3::Widget* o, Fl_Font s) {
+    ((Fl_Browser*)o)->textfont(s);}
+inline void fl_set_browser_specialkey(fltk3::Widget* o, char c) {
+    ((Fl_Browser*)o)->format_char(c);}
+//inline void fl_set_browser_vscrollbar(fltk3::Widget*, int);
+//inline void fl_set_browser_hscrollbar(fltk3::Widget*, int);
+//inline void fl_set_browser_leftslider(fltk3::Widget*, int);
+//#define fl_set_browser_leftscrollbar fl_set_browser_leftslider
+//inline void fl_set_browser_line_selectable(fltk3::Widget*, int, int);
+//inline void fl_get_browser_dimension(fltk3::Widget*,int*,int*,int*,int*);
+//inline void fl_set_browser_dblclick_callback(fltk3::Widget*,FL_CALLBACKPTR,long);
+//inline void fl_set_browser_xoffset(fltk3::Widget*, FL_Coord);
+//inline void fl_set_browser_scrollbarsize(fltk3::Widget*, int, int);
+inline void fl_setdisplayed_browser_line(fltk3::Widget* o, int n, int i) {
+    ((Fl_Browser*)o)->display(n,i);}
+inline int fl_isdisplayed_browser_line(fltk3::Widget* o, int n) {
+    return ((Fl_Browser*)o)->displayed(n);}
+
+#include "Fl_Button.H"
+
+#define FL_NORMAL_BUTTON	0
+#define FL_TOUCH_BUTTON		4
+#define FL_INOUT_BUTTON		5
+#define FL_RETURN_BUTTON	6
+#define FL_HIDDEN_RET_BUTTON	7
+#define FL_PUSH_BUTTON		FL_TOGGLE_BUTTON
+#define FL_MENU_BUTTON		9
+
+FL_EXPORT Fl_Button* fl_add_button(uchar t,int x,int y,int w,int h,const char* l);
+inline int fl_get_button(fltk3::Widget* b) {return ((Fl_Button*)b)->value();}
+inline void fl_set_button(fltk3::Widget* b, int v) {((Fl_Button*)b)->value(v);}
+inline int fl_get_button_numb(fltk3::Widget*) {return fltk3::event_button();}
+inline void fl_set_button_shortcut(fltk3::Widget* b, const char* s,int=0) {
+    ((Fl_Button*)b)->shortcut(s);}
+//#define fl_set_object_shortcut(b,s) fl_set_button_shortcut(b,s)
+
+#include "Fl_Light_Button.H"
+forms_constructor(Fl_Light_Button, fl_add_lightbutton)
+
+#include "Fl_Round_Button.H"
+forms_constructor(Fl_Round_Button, fl_add_roundbutton)
+forms_constructor(Fl_Round_Button, fl_add_round3dbutton)
+
+#include "Fl_Check_Button.H"
+forms_constructor(Fl_Check_Button, fl_add_checkbutton)
+
+inline fltk3::Widget* fl_add_bitmapbutton(int t,int x,int y,int w,int h,const char* l) {fltk3::Widget* o = fl_add_button(t,x,y,w,h,l); return o;}
+inline void fl_set_bitmapbutton_data(fltk3::Widget* o,int a,int b,uchar* c) {
+  (new Fl_Bitmap(c,a,b))->label(o);}  // does not delete old Fl_Bitmap!
+
+inline fltk3::Widget* fl_add_pixmapbutton(int t,int x,int y,int w,int h,const char* l) {fltk3::Widget* o = fl_add_button(t,x,y,w,h,l); return o;}
+inline void fl_set_pixmapbutton_data(fltk3::Widget* o, const char*const* c) {
+  (new Fl_Pixmap(c))->label(o);}  // does not delete old Fl_Pixmap!
+
+// Fl_Canvas object not yet implemented!
+
+#include "Fl_Chart.H"
+
+forms_constructor(Fl_Chart, fl_add_chart)
+inline void fl_clear_chart(fltk3::Widget* o) {
+  ((Fl_Chart*)o)->clear();}
+inline void fl_add_chart_value(fltk3::Widget* o,double v,const char* s,uchar c){
+  ((Fl_Chart*)o)->add(v,s,c);}
+inline void fl_insert_chart_value(fltk3::Widget* o, int i, double v, const char* s, uchar c) {
+  ((Fl_Chart*)o)->insert(i,v,s,c);}
+inline void fl_replace_chart_value(fltk3::Widget* o, int i, double v, const char* s, uchar c) {
+  ((Fl_Chart*)o)->replace(i,v,s,c);}
+inline void fl_set_chart_bounds(fltk3::Widget* o, double a, double b) {
+  ((Fl_Chart*)o)->bounds(a,b);}
+inline void fl_set_chart_maxnumb(fltk3::Widget* o, int v) {
+  ((Fl_Chart*)o)->maxsize(v);}
+inline void fl_set_chart_autosize(fltk3::Widget* o, int v) {
+  ((Fl_Chart*)o)->autosize(v);}
+inline void fl_set_chart_lstyle(fltk3::Widget* o, Fl_Font v) {
+  ((Fl_Chart*)o)->textfont(v);}
+inline void fl_set_chart_lsize(fltk3::Widget* o, int v) {
+  ((Fl_Chart*)o)->textsize(v);}
+inline void fl_set_chart_lcolor(fltk3::Widget* o, Fl_Color v) {
+  ((Fl_Chart*)o)->textcolor(v);}
+#define fl_set_chart_lcol   fl_set_chart_lcolor
+
+#include "Fl_Choice.H"
+
+#define FL_NORMAL_CHOICE	0
+#define FL_NORMAL_CHOICE2	0
+#define FL_DROPLIST_CHOICE	0
+
+forms_constructor(Fl_Choice, fl_add_choice)
+inline void fl_clear_choice(fltk3::Widget* o) {
+    ((Fl_Choice*)o)->clear();}
+inline void fl_addto_choice(fltk3::Widget* o, const char* s) {
+    ((Fl_Choice*)o)->add(s);}
+inline void fl_replace_choice(fltk3::Widget* o, int i, const char* s) {
+    ((Fl_Choice*)o)->replace(i-1,s);}
+inline void fl_delete_choice(fltk3::Widget* o, int i) {
+    ((Fl_Choice*)o)->remove(i-1);}
+inline void fl_set_choice(fltk3::Widget* o, int i) {
+    ((Fl_Choice*)o)->value(i-1);}
+// inline void fl_set_choice_text(fltk3::Widget*, const char*);
+inline int fl_get_choice(fltk3::Widget* o) {
+    return ((Fl_Choice*)o)->value()+1;}
+// inline const char* fl_get_choice_item_text(fltk3::Widget*, int);
+// inline int fl_get_choice_maxitems(fltk3::Widget*);
+inline const char* fl_get_choice_text(fltk3::Widget* o) {
+    return ((Fl_Choice*)o)->text();}
+inline void fl_set_choice_fontsize(fltk3::Widget* o, int x) {
+    ((Fl_Choice*)o)->textsize(x);}
+inline void fl_set_choice_fontstyle(fltk3::Widget* o, Fl_Font x) {
+    ((Fl_Choice*)o)->textfont(x);}
+// inline void fl_set_choice_item_mode(fltk3::Widget*, int, unsigned);
+// inline void fl_set_choice_item_shortcut(fltk3::Widget*, int, const char*);
+
+#include "Fl_Clock.H"
+forms_constructort(Fl_Clock, fl_add_clock)
+inline void fl_get_clock(fltk3::Widget* o, int* h, int* m, int* s) {
+    *h = ((Fl_Clock*)o)->hour();
+    *m = ((Fl_Clock*)o)->minute();
+    *s = ((Fl_Clock*)o)->second();
+}
+
+#include "Fl_Counter.H"
+forms_constructor(Fl_Counter, fl_add_counter)
+inline void fl_set_counter_value(fltk3::Widget* o, double v) {
+    ((Fl_Counter*)o)->value(v);}
+inline void fl_set_counter_bounds(fltk3::Widget* o, double a, double b) {
+    ((Fl_Counter*)o)->bounds(a,b);}
+inline void fl_set_counter_step(fltk3::Widget* o, double a, double b) {
+    ((Fl_Counter*)o)->step(a,b);}
+inline void fl_set_counter_precision(fltk3::Widget* o, int v) {
+    ((Fl_Counter*)o)->precision(v);}
+inline void fl_set_counter_return(fltk3::Widget* o, int v) {
+    ((Fl_Counter*)o)->when((Fl_When)(v|FL_WHEN_RELEASE));}
+inline double fl_get_counter_value(fltk3::Widget* o) {
+    return ((Fl_Counter*)o)->value();}
+inline void fl_get_counter_bounds(fltk3::Widget* o, float* a, float* b) {
+  *a = float(((Fl_Counter*)o)->minimum());
+  *b = float(((Fl_Counter*)o)->maximum());
+}
+//inline void fl_set_counter_filter(fltk3::Widget*,const char* (*)(fltk3::Widget*,double,int));
+
+// Cursor stuff cannot be emulated because it uses X stuff
+inline void fl_set_cursor(fltk3::Window* w, Fl_Cursor c) {w->cursor(c);}
+#define FL_INVISIBLE_CURSOR FL_CURSOR_NONE
+#define FL_DEFAULT_CURSOR FL_CURSOR_DEFAULT
+
+#include "Fl_Dial.H"
+
+#define FL_DIAL_COL1 FL_GRAY
+#define FL_DIAL_COL2 37
+
+forms_constructor(Fl_Dial, fl_add_dial)
+inline void fl_set_dial_value(fltk3::Widget* o, double v) {
+  ((Fl_Dial*)o)->value(v);}
+inline double fl_get_dial_value(fltk3::Widget* o) {
+  return ((Fl_Dial*)o)->value();}
+inline void fl_set_dial_bounds(fltk3::Widget* o, double a, double b) {
+  ((Fl_Dial*)o)->bounds(a, b);}
+inline void fl_get_dial_bounds(fltk3::Widget* o, float* a, float* b) {
+  *a = float(((Fl_Dial*)o)->minimum());
+  *b = float(((Fl_Dial*)o)->maximum());
+}
+inline void fl_set_dial_return(fltk3::Widget* o, int i) {
+  ((Fl_Dial*)o)->when((Fl_When)(i|FL_WHEN_RELEASE));}
+inline void fl_set_dial_angles(fltk3::Widget* o, int a, int b) {
+  ((Fl_Dial*)o)->angles((short)a, (short)b);}
+//inline void fl_set_dial_cross(fltk3::Widget* o, int);
+// inline void fl_set_dial_direction(fltk3::Widget* o, uchar d) {
+//   ((Fl_Dial*)o)->direction(d);}
+inline void fl_set_dial_step(fltk3::Widget* o, double v) {
+  ((Fl_Dial*)o)->step(v);}
+
+// Frames:
+
+inline fltk3::Widget* fl_add_frame(Fl_Boxtype i,int x,int y,int w,int h,const char* l) {
+  return fl_add_box(i,x-3,y-3,w+6,h+6,l);}
+
+// labelframe nyi
+inline fltk3::Widget* fl_add_labelframe(Fl_Boxtype i,int x,int y,int w,int h,const char* l) {
+  fltk3::Widget* o = fl_add_box(i,x-3,y-3,w+6,h+6,l);
+  o->align(FL_ALIGN_TOP_LEFT);
+  return o;
+}
+
+#include "Fl_Free.H"
+inline Fl_Free*
+fl_add_free(int t,double x,double y,double w,double h,const char* l,
+	    FL_HANDLEPTR hdl) {
+ return (Fl_Free*)(fl_add_new(
+   new Fl_Free(t,int(x),int(y),int(w),int(h),l,hdl)));
+}
+
+#include "fl_ask.H"
+#include "fl_show_colormap.H"
+
+inline int fl_show_question(const char* c, int = 0) {return fl_choice("%s",fl_no,fl_yes,0L,c);}
+FL_EXPORT void fl_show_message(const char *,const char *,const char *);
+FL_EXPORT void fl_show_alert(const char *,const char *,const char *,int=0);
+FL_EXPORT int fl_show_question(const char *,const char *,const char *);
+inline const char *fl_show_input(const char *l,const char*d=0) {return fl_input(l,d);}
+FL_EXPORT /*const*/ char *fl_show_simple_input(const char *label, const char *deflt = 0);
+FL_EXPORT int fl_show_choice(
+    const char *m1,
+    const char *m2,
+    const char *m3,
+    int numb,
+    const char *b0,
+    const char *b1,
+    const char *b2);
+
+inline void fl_set_goodies_font(Fl_Font a, Fl_Fontsize b) {fl_message_font(a,b);}
+#define fl_show_messages fl_message
+inline int fl_show_choices(const char* c,int n,const char* b1,const char* b2,
+			   const char* b3, int) {
+  return fl_show_choice(0,c,0,n,b1,b2,b3);
+}
+
+#include "filename.H"
+#include "Fl_File_Chooser.H"
+inline int do_matching(char* a, const char* b) {return fl_filename_match(a,b);}
+
+// Forms-compatable file chooser (implementation in fselect.C):
+FL_EXPORT char* fl_show_file_selector(const char* message,const char* dir,
+			    const char* pat,const char* fname);
+FL_EXPORT char*	fl_get_directory();
+FL_EXPORT char*	fl_get_pattern();
+FL_EXPORT char*	fl_get_filename();
+
+#include "Fl_Input.H"
+forms_constructor(Fl_Input, fl_add_input)
+inline void fl_set_input(fltk3::Widget* o, const char* v) {
+    ((Fl_Input*)o)->value(v);}
+inline void fl_set_input_return(fltk3::Widget* o, int x) {
+    ((Fl_Input*)o)->when((Fl_When)(x | FL_WHEN_RELEASE));}
+inline void fl_set_input_color(fltk3::Widget* o, Fl_Color a, Fl_Color b) {
+    ((Fl_Input*)o)->textcolor(a);
+    ((Fl_Input*)o)->cursor_color(b);
+}
+// inline void fl_set_input_scroll(fltk3::Widget*, int);
+inline void fl_set_input_cursorpos(fltk3::Widget* o, int x, int /*y*/) {
+  ((Fl_Input*)o)->position(x);}
+// inline void fl_set_input_selected(fltk3::Widget*, int);
+// inline void fl_set_input_selected_range(fltk3::Widget*, int, int);
+// inline void fl_set_input_maxchars(fltk3::Widget*, int);
+// inline void fl_set_input_format(fltk3::Widget*, int, int);
+// inline void fl_set_input_hscrollbar(fltk3::Widget*, int);
+// inline void fl_set_input_vscrollbar(fltk3::Widget*, int);
+// inline void fl_set_input_xoffset(fltk3::Widget*, int);
+// inline void fl_set_input_topline(fltk3::Widget*, int);
+// inline void fl_set_input_scrollbarsize(fltk3::Widget*, int, int);
+// inline int fl_get_input_topline(fltk3::Widget*);
+// inline int fl_get_input_screenlines(fltk3::Widget*);
+inline int fl_get_input_cursorpos(fltk3::Widget* o, int*x, int*y) {
+  *x = ((Fl_Input*)o)->position(); *y = 0; return *x;}
+// inline int fl_get_input_numberoflines(fltk3::Widget*);
+// inline void fl_get_input_format(fltk3::Widget*, int*, int*);
+inline const char* fl_get_input(fltk3::Widget* o) {return ((Fl_Input*)o)->value();}
+
+#include "Fl_Menu_Button.H"
+
+// types are not implemented, they all act like FL_PUSH_MENU:
+#define FL_TOUCH_MENU		0
+#define FL_PUSH_MENU		1
+#define FL_PULLDOWN_MENU	2
+forms_constructor(Fl_Menu_Button, fl_add_menu)
+
+inline void fl_clear_menu(fltk3::Widget* o) {
+    ((Fl_Menu_Button*)o)->clear();}
+inline void fl_set_menu(fltk3::Widget* o, const char* s) {
+    ((Fl_Menu_Button*)o)->clear(); ((Fl_Menu_Button*)o)->add(s);}
+inline void fl_addto_menu(fltk3::Widget* o, const char* s) {
+    ((Fl_Menu_Button*)o)->add(s);}
+inline void fl_replace_menu_item(fltk3::Widget* o, int i, const char* s) {
+    ((Fl_Menu_Button*)o)->replace(i-1,s);}
+inline void fl_delete_menu_item(fltk3::Widget* o, int i) {
+    ((Fl_Menu_Button*)o)->remove(i-1);}
+inline void fl_set_menu_item_shortcut(fltk3::Widget* o, int i, const char* s) {
+    ((Fl_Menu_Button*)o)->shortcut(i-1,fl_old_shortcut(s));}
+inline void fl_set_menu_item_mode(fltk3::Widget* o, int i, long x) {
+    ((Fl_Menu_Button*)o)->mode(i-1,x);}
+inline void fl_show_menu_symbol(fltk3::Widget*, int ) {
+/*    ((Fl_Menu_Button*)o)->show_menu_symbol(i); */}
+// inline void fl_set_menu_popup(fltk3::Widget*, int);
+inline int fl_get_menu(fltk3::Widget* o) {
+    return ((Fl_Menu_Button*)o)->value()+1;}
+inline const char* fl_get_menu_item_text(fltk3::Widget* o, int i) {
+    return ((Fl_Menu_Button*)o)->text(i);}
+inline int fl_get_menu_maxitems(fltk3::Widget* o) {
+    return ((Fl_Menu_Button*)o)->size();}
+inline int fl_get_menu_item_mode(fltk3::Widget* o, int i) {
+    return ((Fl_Menu_Button*)o)->mode(i);}
+inline const char* fl_get_menu_text(fltk3::Widget* o) {
+    return ((Fl_Menu_Button*)o)->text();}
+
+#include "Fl_Positioner.H"
+#define FL_NORMAL_POSITIONER	0
+forms_constructor(Fl_Positioner, fl_add_positioner)
+inline void fl_set_positioner_xvalue(fltk3::Widget* o, double v) {
+    ((Fl_Positioner*)o)->xvalue(v);}
+inline double fl_get_positioner_xvalue(fltk3::Widget* o) {
+    return ((Fl_Positioner*)o)->xvalue();}
+inline void fl_set_positioner_xbounds(fltk3::Widget* o, double a, double b) {
+    ((Fl_Positioner*)o)->xbounds(a,b);}
+inline void fl_get_positioner_xbounds(fltk3::Widget* o, float* a, float* b) {
+  *a = float(((Fl_Positioner*)o)->xminimum());
+  *b = float(((Fl_Positioner*)o)->xmaximum());
+}
+inline void fl_set_positioner_yvalue(fltk3::Widget* o, double v) {
+    ((Fl_Positioner*)o)->yvalue(v);}
+inline double fl_get_positioner_yvalue(fltk3::Widget* o) {
+    return ((Fl_Positioner*)o)->yvalue();}
+inline void fl_set_positioner_ybounds(fltk3::Widget* o, double a, double b) {
+    ((Fl_Positioner*)o)->ybounds(a,b);}
+inline void fl_get_positioner_ybounds(fltk3::Widget* o, float* a, float* b) {
+  *a = float(((Fl_Positioner*)o)->yminimum());
+  *b = float(((Fl_Positioner*)o)->ymaximum());
+}
+inline void fl_set_positioner_xstep(fltk3::Widget* o, double v) {
+    ((Fl_Positioner*)o)->xstep(v);}
+inline void fl_set_positioner_ystep(fltk3::Widget* o, double v) {
+    ((Fl_Positioner*)o)->ystep(v);}
+inline void fl_set_positioner_return(fltk3::Widget* o, int v) {
+    ((Fl_Positioner*)o)->when((Fl_When)(v|FL_WHEN_RELEASE));}
+
+#include "Fl_Slider.H"
+
+#define FL_HOR_BROWSER_SLIDER FL_HOR_SLIDER
+#define FL_VERT_BROWSER_SLIDER FL_VERT_SLIDER
+
+forms_constructort(Fl_Slider, fl_add_slider)
+#define FL_SLIDER_COL1 FL_GRAY
+inline void fl_set_slider_value(fltk3::Widget* o, double v) {
+    ((Fl_Slider*)o)->value(v);}
+inline double fl_get_slider_value(fltk3::Widget* o) {
+    return ((Fl_Slider*)o)->value();}
+inline void fl_set_slider_bounds(fltk3::Widget* o, double a, double b) {
+    ((Fl_Slider*)o)->bounds(a, b);}
+inline void fl_get_slider_bounds(fltk3::Widget* o, float* a, float* b) {
+  *a = float(((Fl_Slider*)o)->minimum());
+  *b = float(((Fl_Slider*)o)->maximum());
+}
+inline void fl_set_slider_return(fltk3::Widget* o, int i) {
+    ((Fl_Slider*)o)->when((Fl_When)(i|FL_WHEN_RELEASE));}
+inline void fl_set_slider_step(fltk3::Widget* o, double v) {
+    ((Fl_Slider*)o)->step(v);}
+// inline void fl_set_slider_increment(fltk3::Widget* o, double v, double);
+inline void fl_set_slider_size(fltk3::Widget* o, double v) {
+    ((Fl_Slider*)o)->slider_size(v);}
+
+#include "Fl_Value_Slider.H"
+forms_constructor(Fl_Value_Slider, fl_add_valslider)
+
+inline void fl_set_slider_precision(fltk3::Widget* o, int i) {
+    ((Fl_Value_Slider*)o)->precision(i);}
+// filter function!
+
+// The forms text object was the same as an Fl_Box except it inverted the
+// meaning of FL_ALIGN_INSIDE.  Implementation in forms.cxx
+class FL_EXPORT Fl_FormsText : public fltk3::Widget {
+protected:
+    void draw();
+public:
+    Fl_FormsText(Fl_Boxtype b, int X, int Y, int W, int H, const char* l=0)
+  : fltk3::Widget(X,Y,W,H,l) {box(b); align(FL_ALIGN_LEFT);}
+};
+#define FL_NORMAL_TEXT FL_NO_BOX
+forms_constructorb(Fl_FormsText, fl_add_text)
+
+#include "Fl_Timer.H"
+forms_constructort(Fl_Timer, fl_add_timer)
+inline void fl_set_timer(fltk3::Widget* o, double v) {((Fl_Timer*)o)->value(v);}
+inline double fl_get_timer(fltk3::Widget* o) {return ((Fl_Timer*)o)->value();}
+inline void fl_suspend_timer(fltk3::Widget* o) {((Fl_Timer*)o)->suspended(1);}
+inline void fl_resume_timer(fltk3::Widget* o) {((Fl_Timer*)o)->suspended(0);}
+inline void fl_set_timer_countup(fltk3::Widget* o,char d) {((Fl_Timer*)o)->direction(d);}
+void fl_gettime(long* sec, long* usec);
+
+// Fl_XYPlot nyi
+
+
+// stuff from DDForms:
+
+inline int fl_double_click() {return fltk3::event_clicks();}
+inline void fl_draw() {fltk3::flush();}
+
+#endif	/* define __FORMS_H__ */
+
+//
+// End of "$Id: forms.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/gl.h
===================================================================
--- branches/branch-3.0/fltk3/gl.h	                        (rev 0)
+++ branches/branch-3.0/fltk3/gl.h	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,108 @@
+//
+// "$Id: gl.h 6749 2009-04-09 20:44:31Z engelsman $"
+//
+// OpenGL header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// You must include this instead of GL/gl.h to get the Microsoft
+// APIENTRY stuff included (from <windows.h>) prior to the OpenGL
+// header files.
+//
+// This file also provides "missing" OpenGL functions, and
+// gl_start() and gl_finish() to allow OpenGL to be used in any window
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+/** \file gl.h
+ *  This file defines wrapper functions for OpenGL in FLTK
+ *
+ *  To use OpenGL from within an FLTK application you MUST use gl_visual()
+ *  to select the default visual before doing show() on any windows. Mesa
+ *  will crash if yoy try to use a visual not returned by glxChooseVidual.
+ *
+ *  This does not work with Fl_Double_Window's!  It will try to draw
+ *  into the front buffer.  Depending on the system this will either
+ *  crash or do nothing (when pixmaps are being used as back buffer
+ *  and GL is being done by hardware), work correctly (when GL is done
+ *  with software, such as Mesa), or draw into the front buffer and
+ *  be erased when the buffers are swapped (when double buffer hardware
+ *  is being used)
+ */
+
+#ifndef FL_gl_H
+#  define FL_gl_H
+
+#  include "Enumerations.H" // for color names
+#  ifdef WIN32
+#    include <windows.h>
+#  endif
+#  ifndef APIENTRY
+#    if defined(__CYGWIN__)
+#      define APIENTRY __attribute__ ((__stdcall__))
+#    else
+#      define APIENTRY
+#    endif
+#  endif
+
+#  ifdef __APPLE__
+#    include <OpenGL/gl.h>
+#  else
+#    include <GL/gl.h>
+#  endif
+
+FL_EXPORT void gl_start();
+FL_EXPORT void gl_finish();
+
+FL_EXPORT void gl_color(Fl_Color i);
+/** back compatability */
+inline void gl_color(int c) {gl_color((Fl_Color)c);}
+
+FL_EXPORT void gl_rect(int x,int y,int w,int h);
+/**
+  Fills the given rectangle with the current color.
+  \see gl_rect(int x, int y, int w, int h)
+  */
+inline void gl_rectf(int x,int y,int w,int h) {glRecti(x,y,x+w,y+h);}
+
+FL_EXPORT void gl_font(int fontid, int size);
+FL_EXPORT int  gl_height();
+FL_EXPORT int  gl_descent();
+FL_EXPORT double gl_width(const char *);
+FL_EXPORT double gl_width(const char *, int n);
+FL_EXPORT double gl_width(uchar);
+
+FL_EXPORT void gl_draw(const char*);
+FL_EXPORT void gl_draw(const char*, int n);
+FL_EXPORT void gl_draw(const char*, int x, int y);
+FL_EXPORT void gl_draw(const char*, float x, float y);
+FL_EXPORT void gl_draw(const char*, int n, int x, int y);
+FL_EXPORT void gl_draw(const char*, int n, float x, float y);
+FL_EXPORT void gl_draw(const char*, int x, int y, int w, int h, Fl_Align);
+FL_EXPORT void gl_measure(const char*, int& x, int& y);
+
+FL_EXPORT void gl_draw_image(const uchar *, int x,int y,int w,int h, int d=3, int ld=0);
+
+#endif // !FL_gl_H
+
+//
+// End of "$Id: gl.h 6749 2009-04-09 20:44:31Z engelsman $".
+//

Added: branches/branch-3.0/fltk3/gl2opengl.h
===================================================================
--- branches/branch-3.0/fltk3/gl2opengl.h	                        (rev 0)
+++ branches/branch-3.0/fltk3/gl2opengl.h	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,35 @@
+/*	gl.h
+
+	GL to OpenGL translator.
+	If you include this, you might be able to port old GL programs.
+	There are also much better emulators available on the net.
+
+*/
+
+#include <FL/gl.h>
+#include "gl_draw.H"
+
+inline void clear() {glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);}
+#define RGBcolor(r,g,b) glColor3ub(r,g,b)
+#define bgnline() glBegin(GL_LINE_STRIP)
+#define bgnpolygon() glBegin(GL_POLYGON)
+#define bgnclosedline() glBegin(GL_LINE_LOOP)
+#define endline() glEnd()
+#define endpolygon() glEnd()
+#define endclosedline() glEnd()
+#define v2f(v) glVertex2fv(v)
+#define v2s(v) glVertex2sv(v)
+#define cmov(x,y,z) glRasterPos3f(x,y,z)
+#define charstr(s) gl_draw(s)
+#define fmprstr(s) gl_draw(s)
+typedef float Matrix[4][4];
+inline void pushmatrix() {glPushMatrix();}
+inline void popmatrix() {glPopMatrix();}
+inline void multmatrix(Matrix m) {glMultMatrixf((float *)m);}
+inline void color(int n) {glIndexi(n);}
+inline void rect(int x,int y,int r,int t) {gl_rect(x,y,r-x,t-y);}
+inline void rectf(int x,int y,int r,int t) {glRectf(x,y,r+1,t+1);}
+inline void recti(int x,int y,int r,int t) {gl_rect(x,y,r-x,t-y);}
+inline void rectfi(int x,int y,int r,int t) {glRecti(x,y,r+1,t+1);}
+inline void rects(int x,int y,int r,int t) {gl_rect(x,y,r-x,t-y);}
+inline void rectfs(int x,int y,int r,int t) {glRects(x,y,r+1,t+1);}

Added: branches/branch-3.0/fltk3/gl_draw.H
===================================================================
--- branches/branch-3.0/fltk3/gl_draw.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/gl_draw.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,35 @@
+//
+// "$Id: gl_draw.H 6614 2009-01-01 16:11:32Z matt $"
+//
+// OpenGL header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+#include "gl.h"
+
+extern FL_EXPORT void gl_remove_displaylist_fonts();
+
+
+//
+// End of "$Id: gl_draw.H 6614 2009-01-01 16:11:32Z matt $".
+//

Added: branches/branch-3.0/fltk3/glu.h
===================================================================
--- branches/branch-3.0/fltk3/glu.h	                        (rev 0)
+++ branches/branch-3.0/fltk3/glu.h	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,60 @@
+//
+// "$Id: glu.h 6942 2009-11-18 12:22:51Z AlbrechtS $"
+//
+// GLu header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// You must include this instead of GL/gl.h to get the Microsoft
+// APIENTRY stuff included (from <windows.h>) prior to the OpenGL
+// header files.
+//
+// This file also provides "missing" OpenGL functions, and
+// gl_start() and gl_finish() to allow OpenGL to be used in any window
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+#ifndef FL_glu_H
+#  define FL_glu_H
+
+#  include "Enumerations.H" // for color names
+#  ifdef WIN32
+#    include <windows.h>
+#  endif
+#  ifndef APIENTRY
+#    if defined(__CYGWIN__)
+#      define APIENTRY __attribute__ ((__stdcall__))
+#    else
+#      define APIENTRY
+#    endif
+#  endif
+
+#  ifdef __APPLE__
+#    include <OpenGL/glu.h>
+#  else
+#    include <GL/glu.h>
+#  endif
+
+#endif // !FL_glu_H
+
+//
+// End of "$Id: glu.h 6942 2009-11-18 12:22:51Z AlbrechtS $".
+//

Added: branches/branch-3.0/fltk3/glut.H
===================================================================
--- branches/branch-3.0/fltk3/glut.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/glut.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,491 @@
+//
+// "$Id: glut.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// GLUT emulation header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+// Emulation of GLUT using fltk.
+
+// GLUT is Copyright (c) Mark J. Kilgard, 1994, 1995, 1996:
+// "This program is freely distributable without licensing fees  and is
+// provided without guarantee or warrantee expressed or  implied. This
+// program is -not- in the public domain."
+
+// Although I have copied the GLUT API, none of my code is based on
+// any GLUT implementation details and is therefore covered by the LGPL.
+
+// Commented out lines indicate parts of GLUT that are not emulated.
+
+#ifndef Fl_glut_H
+#  define Fl_glut_H
+
+#  include "gl.h"
+
+
+#  include "Fl.H"
+#  include "Fl_Gl_Window.H"
+
+/** 
+  GLUT is emulated using this window class and these static variables
+  (plus several more static variables hidden in glut_compatability.cxx):
+*/
+class FL_EXPORT Fl_Glut_Window : public Fl_Gl_Window {
+  void _init();
+  int mouse_down;
+protected:
+  void draw();
+  void draw_overlay();
+  int handle(int);
+public: // so the inline functions work
+  int number;
+  int menu[3];
+  void make_current();
+  void (*display)();
+  void (*overlaydisplay)();
+  void (*reshape)(int w, int h);
+  void (*keyboard)(uchar, int x, int y);
+  void (*mouse)(int b, int state, int x, int y);
+  void (*motion)(int x, int y);
+  void (*passivemotion)(int x, int y);
+  void (*entry)(int);
+  void (*visibility)(int);
+  void (*special)(int, int x, int y);
+  Fl_Glut_Window(int w, int h, const char *);
+  Fl_Glut_Window(int x, int y, int w, int h, const char *);
+  ~Fl_Glut_Window();
+};
+
+extern FL_EXPORT Fl_Glut_Window *glut_window;	// the current window
+extern FL_EXPORT int glut_menu;			// the current menu
+
+// function pointers that are not per-window:
+extern FL_EXPORT void (*glut_idle_function)();
+extern FL_EXPORT void (*glut_menustate_function)(int);
+extern FL_EXPORT void (*glut_menustatus_function)(int,int,int);
+
+////////////////////////////////////////////////////////////////
+
+//#  define GLUT_API_VERSION This does not match any version of GLUT exactly...
+
+FL_EXPORT void glutInit(int *argcp, char **argv); // creates first window
+
+FL_EXPORT void glutInitDisplayMode(unsigned int mode);
+// the FL_ symbols have the same value as the GLUT ones:
+#  define GLUT_RGB	FL_RGB
+#  define GLUT_RGBA	FL_RGB
+#  define GLUT_INDEX	FL_INDEX
+#  define GLUT_SINGLE	FL_SINGLE
+#  define GLUT_DOUBLE	FL_DOUBLE
+#  define GLUT_ACCUM	FL_ACCUM
+#  define GLUT_ALPHA	FL_ALPHA
+#  define GLUT_DEPTH	FL_DEPTH
+#  define GLUT_STENCIL	FL_STENCIL
+#  define GLUT_MULTISAMPLE FL_MULTISAMPLE
+#  define GLUT_STEREO	FL_STEREO
+// #  define GLUT_LUMINANCE		512
+
+FL_EXPORT void glutInitWindowPosition(int x, int y);
+
+FL_EXPORT void glutInitWindowSize(int w, int h);
+
+FL_EXPORT void glutMainLoop();
+
+FL_EXPORT int glutCreateWindow(char *title);
+FL_EXPORT int glutCreateWindow(const char *title);
+
+FL_EXPORT int glutCreateSubWindow(int win, int x, int y, int width, int height);
+
+FL_EXPORT void glutDestroyWindow(int win);
+
+inline void glutPostRedisplay() {glut_window->redraw();}
+
+FL_EXPORT void glutPostWindowRedisplay(int win);
+
+FL_EXPORT void glutSwapBuffers();
+
+inline int glutGetWindow() {return glut_window->number;}
+
+FL_EXPORT void glutSetWindow(int win);
+
+inline void glutSetWindowTitle(char *t) {glut_window->label(t);}
+
+inline void glutSetIconTitle(char *t) {glut_window->iconlabel(t);}
+
+inline void glutPositionWindow(int x, int y) {glut_window->position(x,y);}
+
+inline void glutReshapeWindow(int w, int h) {glut_window->size(w,h);}
+
+inline void glutPopWindow() {glut_window->show();}
+
+inline void glutPushWindow() { /* do nothing */ }
+
+inline void glutIconifyWindow() {glut_window->iconize();}
+
+inline void glutShowWindow() {glut_window->show();}
+
+inline void glutHideWindow() {glut_window->hide();}
+
+inline void glutFullScreen() {glut_window->fullscreen();}
+
+inline void glutSetCursor(Fl_Cursor cursor) {glut_window->cursor(cursor);}
+// notice that the numeric values are different than glut:
+#  define GLUT_CURSOR_RIGHT_ARROW		((Fl_Cursor)2)
+#  define GLUT_CURSOR_LEFT_ARROW		((Fl_Cursor)67)
+#  define GLUT_CURSOR_INFO			FL_CURSOR_HAND
+#  define GLUT_CURSOR_DESTROY			((Fl_Cursor)45)
+#  define GLUT_CURSOR_HELP			FL_CURSOR_HELP
+#  define GLUT_CURSOR_CYCLE			((Fl_Cursor)26)
+#  define GLUT_CURSOR_SPRAY			((Fl_Cursor)63)
+#  define GLUT_CURSOR_WAIT			FL_CURSOR_WAIT
+#  define GLUT_CURSOR_TEXT			FL_CURSOR_INSERT
+#  define GLUT_CURSOR_CROSSHAIR			FL_CURSOR_CROSS
+#  define GLUT_CURSOR_UP_DOWN			FL_CURSOR_NS
+#  define GLUT_CURSOR_LEFT_RIGHT		FL_CURSOR_WE
+#  define GLUT_CURSOR_TOP_SIDE			FL_CURSOR_N
+#  define GLUT_CURSOR_BOTTOM_SIDE		FL_CURSOR_S
+#  define GLUT_CURSOR_LEFT_SIDE			FL_CURSOR_W
+#  define GLUT_CURSOR_RIGHT_SIDE		FL_CURSOR_E
+#  define GLUT_CURSOR_TOP_LEFT_CORNER		FL_CURSOR_NW
+#  define GLUT_CURSOR_TOP_RIGHT_CORNER		FL_CURSOR_NE
+#  define GLUT_CURSOR_BOTTOM_RIGHT_CORNER	FL_CURSOR_SE
+#  define GLUT_CURSOR_BOTTOM_LEFT_CORNER	FL_CURSOR_SW
+#  define GLUT_CURSOR_INHERIT			FL_CURSOR_DEFAULT
+#  define GLUT_CURSOR_NONE			FL_CURSOR_NONE
+#  define GLUT_CURSOR_FULL_CROSSHAIR		FL_CURSOR_CROSS
+
+inline void glutWarpPointer(int, int) { /* do nothing */ }
+
+inline void glutEstablishOverlay() {glut_window->make_overlay_current();}
+
+inline void glutRemoveOverlay() {glut_window->hide_overlay();}
+
+inline void glutUseLayer(GLenum layer) {
+  layer ? glut_window->make_overlay_current() : glut_window->make_current();}
+enum {GLUT_NORMAL, GLUT_OVERLAY};
+
+inline void glutPostOverlayRedisplay() {glut_window->redraw_overlay();}
+
+inline void glutShowOverlay() {glut_window->redraw_overlay();}
+
+inline void glutHideOverlay() {glut_window->hide_overlay();}
+
+FL_EXPORT int glutCreateMenu(void (*)(int));
+
+FL_EXPORT void glutDestroyMenu(int menu);
+
+inline int glutGetMenu() {return glut_menu;}
+
+inline void glutSetMenu(int m) {glut_menu = m;}
+
+FL_EXPORT void glutAddMenuEntry(char *label, int value);
+
+FL_EXPORT void glutAddSubMenu(char *label, int submenu);
+
+FL_EXPORT void glutChangeToMenuEntry(int item, char *labela, int value);
+
+FL_EXPORT void glutChangeToSubMenu(int item, char *label, int submenu);
+
+FL_EXPORT void glutRemoveMenuItem(int item);
+
+inline void glutAttachMenu(int b) {glut_window->menu[b] = glut_menu;}
+
+inline void glutDetachMenu(int b) {glut_window->menu[b] = 0;}
+
+inline void glutDisplayFunc(void (*f)()) {glut_window->display = f;}
+
+inline void glutReshapeFunc(void (*f)(int w, int h)) {glut_window->reshape=f;}
+
+inline void glutKeyboardFunc(void (*f)(uchar key, int x, int y)) {
+  glut_window->keyboard = f;}
+
+inline void glutMouseFunc(void (*f)(int b, int state, int x, int y)) {
+  glut_window->mouse = f;}
+#  define GLUT_LEFT_BUTTON		0
+#  define GLUT_MIDDLE_BUTTON		1
+#  define GLUT_RIGHT_BUTTON		2
+#  define GLUT_DOWN			0
+#  define GLUT_UP			1
+
+inline void glutMotionFunc(void (*f)(int x, int y)) {glut_window->motion= f;}
+
+inline void glutPassiveMotionFunc(void (*f)(int x, int y)) {
+  glut_window->passivemotion= f;}
+
+inline void glutEntryFunc(void (*f)(int s)) {glut_window->entry = f;}
+enum {GLUT_LEFT, GLUT_ENTERED};
+
+inline void glutVisibilityFunc(void (*f)(int s)) {glut_window->visibility=f;}
+enum {GLUT_NOT_VISIBLE, GLUT_VISIBLE};
+
+FL_EXPORT void glutIdleFunc(void (*f)());
+
+// Warning: this cast may not work on all machines:
+inline void glutTimerFunc(unsigned int msec, void (*f)(int), int value) {
+  fltk3::add_timeout(msec*.001, (void (*)(void *))f, (void *)value);
+}
+
+inline void glutMenuStateFunc(void (*f)(int state)) {
+  glut_menustate_function = f;}
+
+inline void glutMenuStatusFunc(void (*f)(int status, int x, int y)) {
+  glut_menustatus_function = f;}
+enum {GLUT_MENU_NOT_IN_USE, GLUT_MENU_IN_USE};
+
+inline void glutSpecialFunc(void (*f)(int key, int x, int y)) {
+  glut_window->special = f;}
+#  define GLUT_KEY_F1			1
+#  define GLUT_KEY_F2			2
+#  define GLUT_KEY_F3			3
+#  define GLUT_KEY_F4			4
+#  define GLUT_KEY_F5			5
+#  define GLUT_KEY_F6			6
+#  define GLUT_KEY_F7			7
+#  define GLUT_KEY_F8			8
+#  define GLUT_KEY_F9			9
+#  define GLUT_KEY_F10			10
+#  define GLUT_KEY_F11			11
+#  define GLUT_KEY_F12			12
+// WARNING: Different values than GLUT uses:
+#  define GLUT_KEY_LEFT			FL_Left
+#  define GLUT_KEY_UP			FL_Up
+#  define GLUT_KEY_RIGHT		FL_Right
+#  define GLUT_KEY_DOWN			FL_Down
+#  define GLUT_KEY_PAGE_UP		FL_Page_Up
+#  define GLUT_KEY_PAGE_DOWN		FL_Page_Down
+#  define GLUT_KEY_HOME			FL_Home
+#  define GLUT_KEY_END			FL_End
+#  define GLUT_KEY_INSERT		FL_Insert
+
+//inline void glutSpaceballMotionFunc(void (*)(int x, int y, int z));
+
+//inline void glutSpaceballRotateFunc(void (*)(int x, int y, int z));
+
+//inline void glutSpaceballButtonFunc(void (*)(int button, int state));
+
+//inline void glutButtonBoxFunc(void (*)(int button, int state));
+
+//inline void glutDialsFunc(void (*)(int dial, int value));
+
+//inline void glutTabletMotionFunc(void (*)(int x, int y));
+
+//inline void glutTabletButtonFunc(void (*)(int button, int state, int x, int y));
+
+inline void glutOverlayDisplayFunc(void (*f)()) {
+  glut_window->overlaydisplay = f;}
+
+//inline void glutWindowStatusFunc(void (*)(int state));
+//enum {GLUT_HIDDEN, GLUT_FULLY_RETAINED, GLUT_PARTIALLY_RETAINED,
+//	GLUT_FULLY_COVERED};
+
+//inline void glutSetColor(int, GLfloat red, GLfloat green, GLfloat blue);
+
+//inline GLfloat glutGetColor(int ndx, int component);
+//#define GLUT_RED			0
+//#define GLUT_GREEN			1
+//#define GLUT_BLUE			2
+
+//inline void glutCopyColormap(int win);
+
+// Warning: values are changed from GLUT!
+// Also relies on the GL_ symbols having values greater than 100
+FL_EXPORT int glutGet(GLenum type);
+enum {
+  GLUT_RETURN_ZERO = 0,
+  GLUT_WINDOW_X,
+  GLUT_WINDOW_Y,
+  GLUT_WINDOW_WIDTH,
+  GLUT_WINDOW_HEIGHT,
+  GLUT_WINDOW_PARENT,
+  GLUT_SCREEN_WIDTH,
+  GLUT_SCREEN_HEIGHT,
+  GLUT_MENU_NUM_ITEMS,
+  GLUT_DISPLAY_MODE_POSSIBLE,
+  GLUT_INIT_WINDOW_X,
+  GLUT_INIT_WINDOW_Y,
+  GLUT_INIT_WINDOW_WIDTH,
+  GLUT_INIT_WINDOW_HEIGHT,
+  GLUT_INIT_DISPLAY_MODE,
+  GLUT_WINDOW_BUFFER_SIZE,
+  GLUT_VERSION
+//GLUT_WINDOW_NUM_CHILDREN,
+//GLUT_WINDOW_CURSOR,
+//GLUT_SCREEN_WIDTH_MM,
+//GLUT_SCREEN_HEIGHT_MM,
+//GLUT_ELAPSED_TIME,
+};
+
+#  define GLUT_WINDOW_STENCIL_SIZE	GL_STENCIL_BITS
+#  define GLUT_WINDOW_DEPTH_SIZE	GL_DEPTH_BITS
+#  define GLUT_WINDOW_RED_SIZE		GL_RED_BITS
+#  define GLUT_WINDOW_GREEN_SIZE	GL_GREEN_BITS
+#  define GLUT_WINDOW_BLUE_SIZE		GL_BLUE_BITS
+#  define GLUT_WINDOW_ALPHA_SIZE	GL_ALPHA_BITS
+#  define GLUT_WINDOW_ACCUM_RED_SIZE	GL_ACCUM_RED_BITS
+#  define GLUT_WINDOW_ACCUM_GREEN_SIZE	GL_ACCUM_GREEN_BITS
+#  define GLUT_WINDOW_ACCUM_BLUE_SIZE	GL_ACCUM_BLUE_BITS
+#  define GLUT_WINDOW_ACCUM_ALPHA_SIZE	GL_ACCUM_ALPHA_BITS
+#  define GLUT_WINDOW_DOUBLEBUFFER	GL_DOUBLEBUFFER
+#  define GLUT_WINDOW_RGBA		GL_RGBA
+#  define GLUT_WINDOW_COLORMAP_SIZE	GL_INDEX_BITS
+#  ifdef GL_SAMPLES_SGIS
+#    define GLUT_WINDOW_NUM_SAMPLES	GL_SAMPLES_SGIS
+#  else
+#    define GLUT_WINDOW_NUM_SAMPLES	GLUT_RETURN_ZERO
+#  endif
+#  define GLUT_WINDOW_STEREO		GL_STEREO
+
+#  define GLUT_HAS_KEYBOARD		600
+#  define GLUT_HAS_MOUSE		601
+#  define GLUT_HAS_SPACEBALL		602
+#  define GLUT_HAS_DIAL_AND_BUTTON_BOX	603
+#  define GLUT_HAS_TABLET		604
+#  define GLUT_NUM_MOUSE_BUTTONS	605
+#  define GLUT_NUM_SPACEBALL_BUTTONS	606
+#  define GLUT_NUM_BUTTON_BOX_BUTTONS	607
+#  define GLUT_NUM_DIALS		608
+#  define GLUT_NUM_TABLET_BUTTONS	609
+FL_EXPORT int glutDeviceGet(GLenum type);
+
+// WARNING: these values are different than GLUT uses:
+#  define GLUT_ACTIVE_SHIFT               FL_SHIFT
+#  define GLUT_ACTIVE_CTRL                FL_CTRL
+#  define GLUT_ACTIVE_ALT                 FL_ALT
+inline int glutGetModifiers() {return fltk3::event_state() & (GLUT_ACTIVE_SHIFT | GLUT_ACTIVE_CTRL | GLUT_ACTIVE_ALT);}
+
+FL_EXPORT int glutLayerGet(GLenum);
+#  define GLUT_OVERLAY_POSSIBLE		800
+//#define GLUT_LAYER_IN_USE		801
+//#define GLUT_HAS_OVERLAY		802
+#  define GLUT_TRANSPARENT_INDEX		803
+#  define GLUT_NORMAL_DAMAGED		804
+#  define GLUT_OVERLAY_DAMAGED		805
+
+extern "C" {
+typedef void (*GLUTproc)();
+}
+
+FL_EXPORT GLUTproc glutGetProcAddress(const char *procName);
+
+//inline int glutVideoResizeGet(GLenum param);
+//#define GLUT_VIDEO_RESIZE_POSSIBLE	900
+//#define GLUT_VIDEO_RESIZE_IN_USE	901
+//#define GLUT_VIDEO_RESIZE_X_DELTA	902
+//#define GLUT_VIDEO_RESIZE_Y_DELTA	903
+//#define GLUT_VIDEO_RESIZE_WIDTH_DELTA	904
+//#define GLUT_VIDEO_RESIZE_HEIGHT_DELTA 905
+//#define GLUT_VIDEO_RESIZE_X		906
+//#define GLUT_VIDEO_RESIZE_Y		907
+//#define GLUT_VIDEO_RESIZE_WIDTH	908
+//#define GLUT_VIDEO_RESIZE_HEIGHT	909
+
+//inline void glutSetupVideoResizing();
+
+//inline void glutStopVideoResizing();
+
+//inline void glutVideoResize(int x, int y, int width, int height);
+
+//inline void glutVideoPan(int x, int y, int width, int height);
+
+// Font argument must be a void* for compatability, so...
+/** fltk glut font/size attributes used in the glutXXX functions */
+struct Fl_Glut_Bitmap_Font {Fl_Font font; Fl_Fontsize size;};
+
+extern FL_EXPORT struct Fl_Glut_Bitmap_Font
+  glutBitmap9By15, glutBitmap8By13, glutBitmapTimesRoman10,
+  glutBitmapTimesRoman24, glutBitmapHelvetica10, glutBitmapHelvetica12,
+  glutBitmapHelvetica18;
+#  define GLUT_BITMAP_9_BY_15             (&glutBitmap9By15)
+#  define GLUT_BITMAP_8_BY_13             (&glutBitmap8By13)
+#  define GLUT_BITMAP_TIMES_ROMAN_10      (&glutBitmapTimesRoman10)
+#  define GLUT_BITMAP_TIMES_ROMAN_24      (&glutBitmapTimesRoman24)
+#  define GLUT_BITMAP_HELVETICA_10        (&glutBitmapHelvetica10)
+#  define GLUT_BITMAP_HELVETICA_12        (&glutBitmapHelvetica12)
+#  define GLUT_BITMAP_HELVETICA_18        (&glutBitmapHelvetica18)
+
+FL_EXPORT void glutBitmapCharacter(void *font, int character);
+FL_EXPORT int glutBitmapHeight(void *font);
+FL_EXPORT int glutBitmapLength(void *font, const unsigned char *string);
+FL_EXPORT void glutBitmapString(void *font, const unsigned char *string);
+FL_EXPORT int glutBitmapWidth(void *font, int character);
+
+FL_EXPORT int glutExtensionSupported(char *name);
+
+/* GLUT stroked font sub-API */
+struct Fl_Glut_StrokeVertex {
+  GLfloat X, Y;
+};
+
+struct Fl_Glut_StrokeStrip {
+  int Number;
+  const Fl_Glut_StrokeVertex* Vertices;
+};
+
+struct Fl_Glut_StrokeChar {
+  GLfloat Right;
+  int Number;
+  const Fl_Glut_StrokeStrip* Strips;
+};
+
+struct Fl_Glut_StrokeFont {
+  char* Name;				// The source font name
+  int Quantity;				// Number of chars in font
+  GLfloat Height;			// Height of the characters
+  const Fl_Glut_StrokeChar** Characters;// The characters mapping
+};
+extern FL_EXPORT Fl_Glut_StrokeFont glutStrokeRoman;
+extern FL_EXPORT Fl_Glut_StrokeFont glutStrokeMonoRoman;
+#  define GLUT_STROKE_ROMAN		(&glutStrokeRoman)
+#  define GLUT_STROKE_MONO_ROMAN	(&glutStrokeMonoRoman)
+
+FL_EXPORT void glutStrokeCharacter(void *font, int character);
+FL_EXPORT GLfloat glutStrokeHeight(void *font);
+FL_EXPORT int glutStrokeLength(void *font, const unsigned char *string);
+FL_EXPORT void glutStrokeString(void *font, const unsigned char *string);
+FL_EXPORT int glutStrokeWidth(void *font, int character);
+
+/* GLUT pre-built models sub-API */
+FL_EXPORT void glutWireSphere(GLdouble radius, GLint slices, GLint stacks);
+FL_EXPORT void glutSolidSphere(GLdouble radius, GLint slices, GLint stacks);
+FL_EXPORT void glutWireCone(GLdouble base, GLdouble height, GLint slices, GLint stacks);
+FL_EXPORT void glutSolidCone(GLdouble base, GLdouble height, GLint slices, GLint stacks);
+FL_EXPORT void glutWireCube(GLdouble size);
+FL_EXPORT void glutSolidCube(GLdouble size);
+FL_EXPORT void glutWireTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings);
+FL_EXPORT void glutSolidTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings);
+FL_EXPORT void glutWireDodecahedron();
+FL_EXPORT void glutSolidDodecahedron();
+FL_EXPORT void glutWireTeapot(GLdouble size);
+FL_EXPORT void glutSolidTeapot(GLdouble size);
+FL_EXPORT void glutWireOctahedron();
+FL_EXPORT void glutSolidOctahedron();
+FL_EXPORT void glutWireTetrahedron();
+FL_EXPORT void glutSolidTetrahedron();
+FL_EXPORT void glutWireIcosahedron();
+FL_EXPORT void glutSolidIcosahedron();
+
+#endif // !Fl_glut_H
+
+//
+// End of "$Id: glut.H 7365 2010-03-30 15:18:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/mac.H
===================================================================
--- branches/branch-3.0/fltk3/mac.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/mac.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,192 @@
+//
+// "$Id: mac.H 7354 2010-03-29 11:07:29Z matt $"
+//
+// Mac header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+// Do not directly include this file, instead use <fltk3/x.H>.  It will
+// include this file if "__APPLE__" is defined.  This is to encourage
+// portability of even the system-specific code...
+#ifndef FL_DOXYGEN
+
+#if !defined(Fl_X_H)
+#  error "Never use <fltk3/mac.H> directly; include <fltk3/x.H> instead."
+#endif // !Fl_X_H
+
+// Standard MacOS Carbon API includes...
+#include <Carbon/Carbon.h>
+#include <config.h>
+
+#ifndef MAC_OS_X_VERSION_10_3
+#define MAC_OS_X_VERSION_10_3 1030
+#endif
+#ifndef MAC_OS_X_VERSION_10_4
+#define MAC_OS_X_VERSION_10_4 1040
+#endif
+#ifndef MAC_OS_X_VERSION_10_5
+#define MAC_OS_X_VERSION_10_5 1050
+#endif
+#ifndef MAC_OS_X_VERSION_10_6
+#define MAC_OS_X_VERSION_10_6 1060
+#endif
+#ifndef MAC_OS_X_VERSION_MAX_ALLOWED
+#define MAC_OS_X_VERSION_MAX_ALLOWED MAC_OS_X_VERSION_10_3
+#endif
+
+#ifndef CGFLOAT_DEFINED //appears with 10.5 in CGBase.h
+#if defined(__LP64__) && __LP64__
+typedef double CGFloat;
+#else
+typedef float CGFloat;
+#endif
+#endif // CGFLOAT_DEFINED
+
+
+// Now make some fixes to the headers...
+#undef check			// Dunno where this comes from...
+
+// Some random X equivalents
+struct XPoint { int x, y; };
+struct XRectangle {int x, y, width, height;};
+
+typedef void *NativeWindow; // this is really a pter to the subclass FLWindow of NSWindow
+typedef struct flCocoaRegion {
+  int count;
+  CGRect *rects;
+} *Fl_Region;  // a region is the union of a series of rectangles
+extern CGRect fl_cgrectmake_cocoa(int x, int y, int w, int h);
+
+inline Fl_Region XRectangleRegion(int x, int y, int w, int h) {
+  Fl_Region R = (Fl_Region)malloc(sizeof(*R));
+  R->count = 1;
+  R->rects = (CGRect *)malloc(sizeof(CGRect));
+  *(R->rects) = fl_cgrectmake_cocoa(x, y, w, h);
+  return R;
+}
+inline void XDestroyRegion(Fl_Region r) {
+  if(r) {
+	free(r->rects);
+	free(r);
+	}
+}
+extern void *fl_default_cursor;
+extern void *fl_system_menu;
+typedef CGContextRef Fl_Offscreen;
+typedef CGImageRef Fl_Bitmask;
+
+void fl_clip_region(Fl_Region);
+
+#  include "Fl_Window.H"
+
+// This object contains all mac-specific stuff about a window:
+// WARNING: this object is highly subject to change!
+class Fl_X 
+{
+public:
+  NativeWindow xid;              // Cocoa: FLWindow* ; Carbon: WindowRef
+  Fl_Offscreen other_xid;  // pointer for offscreen bitmaps (doublebuffer)
+  fltk3::Window *w;            // FLTK window for 
+  Fl_Region region;
+  Fl_Region subRegion;     // region for this specific subwindow
+  Fl_X *next;              // linked tree to support subwindows
+  Fl_X *xidChildren, *xidNext; // more subwindow tree
+  int wait_for_expose;
+  void *cursor;			  // is really NSCursor*
+  static Fl_X* first;
+  static Fl_X* i(const fltk3::Window* w) {return w->i;}
+  static int fake_X_wm(const fltk3::Window*,int&,int&,int&,int&,int&);
+  static void make(fltk3::Window*);
+  void flush();
+  // Quartz additions:
+  CGContextRef gc;                 // graphics context (NULL when using QD)
+  static void q_fill_context();    // fill a Quartz context with current FLTK state
+  static void q_clear_clipping();  // remove all clipping from a Quartz context
+  static void q_release_context(Fl_X *x=0); // free all resources associated with fl_gc
+  static void q_begin_image(CGRect&, int x, int y, int w, int h);
+  static void q_end_image();
+};
+
+extern void MacDestroyWindow(fltk3::Window*,void *);
+extern void MacMapWindow(fltk3::Window*,void *);
+extern void MacUnmapWindow(fltk3::Window*,void *);
+extern WindowRef MACwindowRef(fltk3::Window *w);
+extern Fl_Region MacRectRegionIntersect(Fl_Region current, int x,int y,int w, int h);
+extern void MacCollapseWindow(NativeWindow w);
+
+extern int MacUnlinkWindow(Fl_X*,Fl_X*start=0L);
+
+inline NativeWindow fl_xid(const fltk3::Window*w) 
+{
+  return Fl_X::i(w)->xid;
+}
+
+extern struct Fl_XMap {
+  RGBColor rgb;
+  ulong pen;
+} *fl_current_xmap;
+
+extern FL_EXPORT void *fl_display;
+extern FL_EXPORT NativeWindow fl_window;
+extern FL_EXPORT CGContextRef fl_gc;
+extern FL_EXPORT class Fl_Sys_Menu_Bar *fl_sys_menu_bar;
+
+
+extern Fl_Offscreen fl_create_offscreen(int w, int h);
+extern void fl_copy_offscreen(int x,int y,int w,int h, Fl_Offscreen gWorld, int srcx,int srcy);
+extern void fl_delete_offscreen(Fl_Offscreen gWorld);
+extern void fl_begin_offscreen(Fl_Offscreen gWorld);
+extern void fl_end_offscreen();
+
+
+extern FL_EXPORT Fl_Bitmask fl_create_bitmask(int w, int h, const uchar *data);
+extern FL_EXPORT Fl_Bitmask fl_create_alphamask(int w, int h, int d, int ld, const uchar *data);
+extern FL_EXPORT void fl_delete_bitmask(Fl_Bitmask bm);
+
+extern void fl_open_display();
+
+// Register a function for opening files via the finder...
+extern void fl_open_callback(void (*cb)(const char *));
+
+extern FL_EXPORT int fl_parse_color(const char* p, uchar& r, uchar& g, uchar& b);
+#endif // FL_DOXYGEN
+
+/** \defgroup group_macosx Mac OS X-specific functions
+ @{ */
+
+/** 
+ * \brief Mac OS X: attaches a callback to the "About myprog" item of the system application menu.
+ * \note  #include <fltk3/x.H>
+ *
+ * \param cb   a callback that will be called by "About myprog" menu item
+ *		   with NULL 1st argument.
+ * \param user_data   a pointer transmitted as 2nd argument to the callback.
+ * \param shortcut    optional shortcut to attach to the "About myprog" menu item (e.g., FL_META+'a')
+ */
+extern void fl_mac_set_about( Fl_Callback *cb, void *user_data, int shortcut = 0);
+/** @} */
+
+//
+// End of "$Id: mac.H 7354 2010-03-29 11:07:29Z matt $".
+//
+

Added: branches/branch-3.0/fltk3/math.h
===================================================================
--- branches/branch-3.0/fltk3/math.h	                        (rev 0)
+++ branches/branch-3.0/fltk3/math.h	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,68 @@
+//
+// "$Id: math.h 7354 2010-03-29 11:07:29Z matt $"
+//
+// Math header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+#ifndef fl_math_h
+#  define fl_math_h
+
+// Apple's ProjectBuilder has the nasty habit of including recursively
+// down the file tree. To avoid re-including <FL/math.h> we must 
+// directly include the systems math file. (Plus, I could not find a 
+// predefined macro for ProjectBuilder builds, so we have to define it 
+// in the project)
+#  include <math.h>
+
+#  ifdef __EMX__
+#    include <float.h>
+#  endif
+
+
+#  ifndef M_PI
+#    define M_PI            3.14159265358979323846
+#    define M_PI_2          1.57079632679489661923
+#    define M_PI_4          0.78539816339744830962
+#    define M_1_PI          0.31830988618379067154
+#    define M_2_PI          0.63661977236758134308
+#  endif // !M_PI
+
+#  ifndef M_SQRT2
+#    define M_SQRT2         1.41421356237309504880
+#    define M_SQRT1_2       0.70710678118654752440
+#  endif // !M_SQRT2
+
+#  if (defined(WIN32) || defined(CRAY)) && !defined(__MINGW32__) && !defined(__MWERKS__)
+
+inline double rint(double v) {return floor(v+.5);}
+inline double copysign(double a, double b) {return b<0 ? -a : a;}
+
+#  endif // (WIN32 || CRAY) && !__MINGW32__ && !__MWERKS__
+
+#endif // !fl_math_h
+
+
+//
+// End of "$Id: math.h 7354 2010-03-29 11:07:29Z matt $".
+//

Added: branches/branch-3.0/fltk3/names.h
===================================================================
--- branches/branch-3.0/fltk3/names.h	                        (rev 0)
+++ branches/branch-3.0/fltk3/names.h	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,123 @@
+//
+// "$Id: names.h 7159 2010-02-26 18:10:54Z greg.ercolano $"
+//
+// Event names header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+// Thanks to Greg Ercolano for this addition.
+
+#ifndef FL_NAMES_H
+#define FL_NAMES_H
+
+/** \defgroup fl_events Events handling functions
+    @{
+ */
+
+/**
+  This is an array of event names you can use to convert event numbers into names.
+
+  The array gets defined inline wherever your '\#include <fltk3/names.h>' appears.
+
+  \b Example:
+  \code
+  #include <fltk3/names.h>		// array will be defined here
+  int MyClass::handle(int e) {
+      printf("Event was %s (%d)\n", fl_eventnames[e], e);
+      // ..resulting output might be e.g. "Event was FL_PUSH (1)"..
+      [..]
+  }
+  \endcode
+ */
+const char * const fl_eventnames[] =
+{
+  "FL_NO_EVENT",
+  "FL_PUSH",
+  "FL_RELEASE",
+  "FL_ENTER",
+  "FL_LEAVE",
+  "FL_DRAG",
+  "FL_FOCUS",
+  "FL_UNFOCUS",
+  "FL_KEYDOWN",
+  "FL_KEYUP",
+  "FL_CLOSE",
+  "FL_MOVE",
+  "FL_SHORTCUT",
+  "FL_DEACTIVATE",
+  "FL_ACTIVATE",
+  "FL_HIDE",
+  "FL_SHOW",
+  "FL_PASTE",
+  "FL_SELECTIONCLEAR",
+  "FL_MOUSEWHEEL",
+  "FL_DND_ENTER",
+  "FL_DND_DRAG",
+  "FL_DND_LEAVE",
+  "FL_DND_RELEASE",
+};
+
+/**
+  This is an array of font names you can use to convert font numbers into names.
+
+  The array gets defined inline wherever your '\#include <fltk3/names.h>' appears.
+
+  \b Example:
+  \code
+  #include <fltk3/names.h>		// array will be defined here
+  int MyClass::my_callback(fltk3::Widget *w, void*) {
+      int fnum = w->labelfont();
+      // Resulting output might be e.g. "Label's font is FL_HELVETICA (0)"
+      printf("Label's font is %s (%d)\n", fl_fontnames[fnum], fnum);
+      // ..resulting output might be e.g. "Label's font is FL_HELVETICA (0)"..
+      [..]
+  }
+  \endcode
+ */
+const char * const fl_fontnames[] =
+{
+  "FL_HELVETICA",
+  "FL_HELVETICA_BOLD",
+  "FL_HELVETICA_ITALIC",
+  "FL_HELVETICA_BOLD_ITALIC",
+  "FL_COURIER",
+  "FL_COURIER_BOLD",
+  "FL_COURIER_ITALIC",
+  "FL_COURIER_BOLD_ITALIC",
+  "FL_TIMES",
+  "FL_TIMES_BOLD",
+  "FL_TIMES_ITALIC",
+  "FL_TIMES_BOLD_ITALIC",
+  "FL_SYMBOL",
+  "FL_SCREEN",
+  "FL_SCREEN_BOLD",
+  "FL_ZAPF_DINGBATS",
+};
+
+/** @} */
+
+#endif /* FL_NAMES_H */
+
+//
+// End of "$Id: names.h 7159 2010-02-26 18:10:54Z greg.ercolano $".
+//

Added: branches/branch-3.0/fltk3/win32.H
===================================================================
--- branches/branch-3.0/fltk3/win32.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/win32.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,153 @@
+//
+// "$Id: win32.H 7263 2010-03-14 18:07:24Z AlbrechtS $"
+//
+// WIN32 header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+// Do not directly include this file, instead use <fltk3/x.H>.  It will
+// include this file if WIN32 is defined.  This is to encourage
+// portability of even the system-specific code...
+
+#ifndef FL_DOXYGEN
+#ifndef Fl_X_H
+#  error "Never use <fltk3/win32.H> directly; include <fltk3/x.H> instead."
+#endif // !Fl_X_H
+
+#include <windows.h>
+// In some of the distributions, the gcc header files are missing some stuff:
+#ifndef LPMINMAXINFO
+#define LPMINMAXINFO MINMAXINFO*
+#endif
+#ifndef VK_LWIN
+#define VK_LWIN 0x5B
+#define VK_RWIN 0x5C
+#define VK_APPS 0x5D
+#endif
+
+#include <fltk3/Fl_Device.H>
+
+// some random X equivalents
+typedef HWND NativeWindow;
+typedef POINT XPoint;
+struct XRectangle {int x, y, width, height;};
+typedef HRGN Fl_Region;
+FL_EXPORT void fl_clip_region(Fl_Region);
+extern Fl_Region XRectangleRegion(int x, int y, int w, int h);
+inline void XDestroyRegion(Fl_Region r) {DeleteObject(r);}
+inline void XClipBox(Fl_Region r,XRectangle* rect) {
+    RECT win_rect; GetRgnBox(r,&win_rect);
+    rect->x=win_rect.left;
+    rect->y=win_rect.top;
+    rect->width=win_rect.right-win_rect.left;
+    rect->height=win_rect.bottom-win_rect.top;
+}
+#define XDestroyWindow(a,b) DestroyWindow(b)
+#define XMapWindow(a,b) ShowWindow(b, SW_RESTORE)
+#define XUnmapWindow(a,b) ShowWindow(b, SW_HIDE)
+
+#include "Fl_Window.H"
+// this object contains all win32-specific stuff about a window:
+// Warning: this object is highly subject to change!
+class FL_EXPORT Fl_X {
+public:
+  // member variables - add new variables only at the end of this block
+  NativeWindow xid;
+  HBITMAP other_xid; // for double-buffered windows
+  fltk3::Window* w;
+  Fl_Region region;
+  Fl_X *next;
+  int wait_for_expose;
+  HDC private_dc; // used for OpenGL
+  HCURSOR cursor;
+  HDC saved_hdc;  // saves the handle of the DC currently loaded
+  // static variables, static functions and member functions
+  static Fl_X* first;
+  static Fl_X* i(const fltk3::Window* w) {return w->i;}
+  static int fake_X_wm(const fltk3::Window* w,int &X, int &Y,
+		                 int &bt,int &bx,int &by);
+  void setwindow(fltk3::Window* wi) {w=wi; wi->i=this;}
+  void flush() {w->flush();}
+  void set_minmax(LPMINMAXINFO minmax);
+  void mapraise();
+  static Fl_X* make(fltk3::Window*);
+};
+extern FL_EXPORT HCURSOR fl_default_cursor;
+extern FL_EXPORT UINT fl_wake_msg;
+inline NativeWindow fl_xid(const fltk3::Window*w) {Fl_X *temp = Fl_X::i(w); return temp ? temp->xid : 0;}
+FL_EXPORT fltk3::Window* fl_find(NativeWindow xid);
+extern FL_EXPORT char fl_override_redirect; // hack into fltk3::Window::make_xid()
+extern FL_EXPORT int fl_background_pixel;  // hack into fltk3::Window::make_xid()
+
+// most recent fl_color() or fl_rgbcolor() points at one of these:
+extern FL_EXPORT struct Fl_XMap {
+  COLORREF rgb;	// this should be the type the RGB() macro returns
+  HPEN pen;	// pen, 0 if none created yet
+  int brush;	// ref to solid brush, 0 if none created yet
+} *fl_current_xmap;
+inline COLORREF fl_RGB() {return fl_current_xmap->rgb;}
+inline HPEN fl_pen() {return fl_current_xmap->pen;}
+FL_EXPORT HBRUSH fl_brush(); // allocates a brush if necessary
+FL_EXPORT HBRUSH fl_brush_action(int); // now does the real work
+
+extern FL_EXPORT HINSTANCE fl_display;
+extern FL_EXPORT NativeWindow fl_window;
+extern FL_EXPORT HDC fl_gc;
+extern FL_EXPORT HPALETTE fl_palette; // non-zero only on 8-bit displays!
+extern FL_EXPORT HDC fl_GetDC(NativeWindow);
+extern FL_EXPORT MSG fl_msg;
+extern FL_EXPORT void fl_release_dc(HWND w, HDC dc);
+extern FL_EXPORT void fl_save_dc( HWND w, HDC dc);
+
+// off-screen pixmaps: create, destroy, draw into, copy to window
+typedef HBITMAP Fl_Offscreen;
+#define fl_create_offscreen(w, h) CreateCompatibleBitmap(fl_gc, w, h)
+
+extern FL_EXPORT HDC fl_makeDC(HBITMAP);
+
+# define fl_begin_offscreen(b) \
+   HDC _sgc=fl_gc; NativeWindow _sw=fl_window; \
+   fl_gc=fl_makeDC(b); int _savedc = SaveDC(fl_gc); fl_window=(HWND)b; fl_push_no_clip()
+
+# define fl_end_offscreen() \
+   fl_pop_clip(); RestoreDC(fl_gc, _savedc); DeleteDC(fl_gc); fl_window=_sw; fl_gc = _sgc
+
+FL_EXPORT void fl_copy_offscreen(int x,int y,int w,int h,HBITMAP pixmap,int srcx,int srcy);
+FL_EXPORT void fl_copy_offscreen_with_alpha(int x,int y,int w,int h,HBITMAP pixmap,int srcx,int srcy);
+#define fl_delete_offscreen(bitmap) DeleteObject(bitmap);
+
+// Bitmap masks
+typedef HBITMAP Fl_Bitmask;
+
+extern FL_EXPORT Fl_Bitmask fl_create_bitmask(int w, int h, const uchar *data);
+extern FL_EXPORT Fl_Bitmask fl_create_alphamask(int w, int h, int d, int ld, const uchar *data);
+extern FL_EXPORT void fl_delete_bitmask(Fl_Bitmask bm);
+
+// Dummy function to register a function for opening files via the window manager...
+inline void fl_open_callback(void (*)(const char *)) {}
+
+extern FL_EXPORT int fl_parse_color(const char* p, uchar& r, uchar& g, uchar& b);
+#endif // FL_DOXYGEN
+//
+// End of "$Id: win32.H 7263 2010-03-14 18:07:24Z AlbrechtS $".
+//

Added: branches/branch-3.0/fltk3/x.H
===================================================================
--- branches/branch-3.0/fltk3/x.H	                        (rev 0)
+++ branches/branch-3.0/fltk3/x.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -0,0 +1,149 @@
+//
+// "$Id: x.H 7365 2010-03-30 15:18:29Z matt $"
+//
+// X11 header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2009 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+// These are internal fltk symbols that are necessary or useful for
+// calling Xlib.  You should include this file if (and ONLY if) you
+// need to call Xlib directly.  These symbols may not exist on non-X
+// systems.
+
+#if !defined(Fl_X_H) && !defined(FL_DOXYGEN) 
+#  define Fl_X_H
+
+#  include "Enumerations.H"
+
+#  ifdef WIN32
+#    include "win32.H"
+#  elif defined(__APPLE__)
+#    include "mac.H"
+#  else
+#    if defined(_ABIN32) || defined(_ABI64) // fix for broken SGI Irix X .h files
+#      pragma set woff 3322
+#    endif
+#    include <X11/Xlib.h>
+#    include <X11/Xutil.h>
+#    if defined(_ABIN32) || defined(_ABI64)
+#      pragma reset woff 3322
+#    endif
+#    include <X11/Xatom.h>
+#    include "Fl_Window.H"
+#    include "Xutf8.h"
+// Mirror X definition of Region to Fl_Region, for portability...
+typedef Region Fl_Region;
+
+FL_EXPORT void fl_open_display();
+FL_EXPORT void fl_open_display(Display*);
+FL_EXPORT void fl_close_display();
+
+// constant info about the X server connection:
+extern FL_EXPORT Display *fl_display;
+extern FL_EXPORT NativeWindow fl_message_window;
+extern FL_EXPORT int fl_screen;
+extern FL_EXPORT XVisualInfo *fl_visual;
+extern FL_EXPORT Colormap fl_colormap;
+
+// drawing functions:
+extern FL_EXPORT GC fl_gc;
+extern FL_EXPORT NativeWindow fl_window;
+//extern FL_EXPORT XFontStruct* fl_xfont;
+extern FL_EXPORT XUtf8FontStruct* fl_xfont;
+extern FL_EXPORT void *fl_xftfont;
+FL_EXPORT ulong fl_xpixel(Fl_Color i);
+FL_EXPORT ulong fl_xpixel(uchar r, uchar g, uchar b);
+FL_EXPORT void fl_clip_region(Fl_Region);
+FL_EXPORT Fl_Region fl_clip_region();
+FL_EXPORT Fl_Region XRectangleRegion(int x, int y, int w, int h); // in fl_rect.cxx
+
+// feed events into fltk:
+FL_EXPORT int fl_handle(const XEvent&);
+
+// you can use these in fltk3::add_handler() to look at events:
+extern FL_EXPORT const XEvent* fl_xevent;
+extern FL_EXPORT ulong fl_event_time;
+
+// off-screen pixmaps: create, destroy, draw into, copy to window:
+typedef ulong Fl_Offscreen;
+#define fl_create_offscreen(w,h) \
+  XCreatePixmap(fl_display, fl_window, w, h, fl_visual->depth)
+// begin/end are macros that save the old state in local variables:
+#    define fl_begin_offscreen(pixmap) \
+  NativeWindow _sw=fl_window; fl_window=pixmap; fl_push_no_clip()
+#    define fl_end_offscreen() \
+  fl_pop_clip(); fl_window = _sw
+
+#    define fl_copy_offscreen(x,y,w,h,pixmap,srcx,srcy) \
+  XCopyArea(fl_display, pixmap, fl_window, fl_gc, srcx, srcy, w, h, x, y)
+#    define fl_delete_offscreen(pixmap) XFreePixmap(fl_display, pixmap)
+
+// Bitmap masks
+typedef ulong Fl_Bitmask;
+
+extern FL_EXPORT Fl_Bitmask fl_create_bitmask(int w, int h, const uchar *data);
+extern FL_EXPORT Fl_Bitmask fl_create_alphamask(int w, int h, int d, int ld, const uchar *data);
+extern FL_EXPORT void fl_delete_bitmask(Fl_Bitmask bm);
+
+// this object contains all X-specific stuff about a window:
+// Warning: this object is highly subject to change!  It's definition
+// is only here so that fl_xid can be declared inline:
+class FL_EXPORT Fl_X {
+public:
+  NativeWindow xid;
+  NativeWindow other_xid;
+  fltk3::Window *w;
+  Fl_Region region;
+  Fl_X *next;
+  char wait_for_expose;
+  char backbuffer_bad; // used for XDBE
+  static Fl_X* first;
+  static Fl_X* i(const fltk3::Window* wi) {return wi->i;}
+  void setwindow(fltk3::Window* wi) {w=wi; wi->i=this;}
+  void sendxjunk();
+  static void make_xid(fltk3::Window*,XVisualInfo* =fl_visual, Colormap=fl_colormap);
+  static Fl_X* set_xid(fltk3::Window*, NativeWindow);
+  // kludges to get around protection:
+  void flush() {w->flush();}
+  static void x(fltk3::Window* wi, int X) {wi->x(X);}
+  static void y(fltk3::Window* wi, int Y) {wi->y(Y);}
+};
+
+// convert xid <-> fltk3::Window:
+inline NativeWindow fl_xid(const fltk3::Window*w) {return Fl_X::i(w)->xid;}
+FL_EXPORT fltk3::Window* fl_find(NativeWindow xid);
+
+extern FL_EXPORT char fl_override_redirect; // hack into Fl_X::make_xid()
+extern FL_EXPORT int fl_background_pixel;  // hack into Fl_X::make_xid()
+
+// Dummy function to register a function for opening files via the window manager...
+inline void fl_open_callback(void (*)(const char *)) {}
+
+extern FL_EXPORT int fl_parse_color(const char* p, uchar& r, uchar& g, uchar& b);
+
+#  endif
+#endif
+
+//
+// End of "$Id: x.H 7365 2010-03-30 15:18:29Z matt $".
+//

Modified: branches/branch-3.0/ide/Xcode3/FLTK.xcodeproj/project.pbxproj
===================================================================
--- branches/branch-3.0/ide/Xcode3/FLTK.xcodeproj/project.pbxproj	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/ide/Xcode3/FLTK.xcodeproj/project.pbxproj	2010-03-30 17:38:49 UTC (rev 7366)
@@ -459,6 +459,12 @@
 		C9039A6D472AFBDB4D5D3581 /* fltkgl.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4AED96DAF2EDB1950E04795 /* fltkgl.framework */; };
 		C9603E2EF91824FAFDAB4652 /* device.cxx in Sources */ = {isa = PBXBuildFile; fileRef = AE541F73BF89F614E5BCC604 /* device.cxx */; };
 		C9C84B2983DC793B141DDC70 /* ide_maketools.cxx in Sources */ = {isa = PBXBuildFile; fileRef = B65FCD2B8489E2BBAA3F695A /* ide_maketools.cxx */; };
+		C9C9078F11626697006C5014 /* hello.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 388A5267639C2CEEDD762C41 /* hello.cxx */; };
+		C9C9079111626697006C5014 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F459EEE32AC6EE0087583065 /* fltk.framework */; };
+		C9C9079311626697006C5014 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = F459EEE32AC6EE0087583065 /* fltk.framework */; };
+		C9C907A9116266AA006C5014 /* hello.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 388A5267639C2CEEDD762C41 /* hello.cxx */; };
+		C9C907AB116266AA006C5014 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F459EEE32AC6EE0087583065 /* fltk.framework */; };
+		C9C907AD116266AA006C5014 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = F459EEE32AC6EE0087583065 /* fltk.framework */; };
 		CA0BD11A864DD8E6018DDC43 /* Fl_File_Input.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 19E46DC28A1945E3BB3FA0EC /* Fl_File_Input.cxx */; };
 		CA29F412020993F3D156CA64 /* jdinput.c in Sources */ = {isa = PBXBuildFile; fileRef = E28D295E888C8D18A99E45DB /* jdinput.c */; };
 		CAE74E0204978B1EE0CB2685 /* fltkimages.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 23AEAC354D12FE5A50BF85B5 /* fltkimages.framework */; };
@@ -1358,6 +1364,30 @@
 			);
 			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
 		};
+		C9C9079411626697006C5014 /* PBXBuildRule */ = {
+			isa = PBXBuildRule;
+			compilerSpec = com.apple.compilers.proxy.script;
+			filePatterns = "*.fl";
+			fileType = pattern.proxy;
+			isEditable = 1;
+			outputFiles = (
+				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
+				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
+			);
+			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
+		};
+		C9C907AE116266AA006C5014 /* PBXBuildRule */ = {
+			isa = PBXBuildRule;
+			compilerSpec = com.apple.compilers.proxy.script;
+			filePatterns = "*.fl";
+			fileType = pattern.proxy;
+			isEditable = 1;
+			outputFiles = (
+				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
+				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
+			);
+			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
+		};
 		D5B6FE5D59F0B4931EB86467 /* PBXBuildRule */ = {
 			isa = PBXBuildRule;
 			compilerSpec = com.apple.compilers.proxy.script;
@@ -2532,6 +2562,20 @@
 			remoteGlobalIDString = E379F105C5DD998B9B72950E;
 			remoteInfo = fltk;
 		};
+		C9C9078C11626697006C5014 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 2E06DFE475DEE3090F8EA260 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = E379F105C5DD998B9B72950E;
+			remoteInfo = fltk;
+		};
+		C9C907A6116266AA006C5014 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 2E06DFE475DEE3090F8EA260 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = E379F105C5DD998B9B72950E;
+			remoteInfo = fltk;
+		};
 		CA8E7FCFC24ADBBE0C615F34 /* PBXContainerItemProxy */ = {
 			isa = PBXContainerItemProxy;
 			containerPortal = 2E06DFE475DEE3090F8EA260 /* Project object */;
@@ -3493,6 +3537,26 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
+		C9C9079211626697006C5014 /* CopyFiles */ = {
+			isa = PBXCopyFilesBuildPhase;
+			buildActionMask = 2147483647;
+			dstPath = "";
+			dstSubfolderSpec = 10;
+			files = (
+				C9C9079311626697006C5014 /* fltk.framework in CopyFiles */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		C9C907AC116266AA006C5014 /* CopyFiles */ = {
+			isa = PBXCopyFilesBuildPhase;
+			buildActionMask = 2147483647;
+			dstPath = "";
+			dstSubfolderSpec = 10;
+			files = (
+				C9C907AD116266AA006C5014 /* fltk.framework in CopyFiles */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
 		C9DC8AAA406C1F6F4FA3F15B /* CopyFiles */ = {
 			isa = PBXCopyFilesBuildPhase;
 			buildActionMask = 2147483647;
@@ -3951,6 +4015,10 @@
 		C7F31D0DB5A326C914FBFE48 /* fl_file_dir.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_file_dir.cxx; path = ../../src/fl_file_dir.cxx; sourceTree = SOURCE_ROOT; };
 		C8320D29ED1BA62DF881FD21 /* jidctred.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jidctred.c; path = ../../jpeg/jidctred.c; sourceTree = SOURCE_ROOT; };
 		C8FCAB4E2E2C4369C61BFD12 /* Fluid_Image.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fluid_Image.cxx; path = ../../fluid/Fluid_Image.cxx; sourceTree = SOURCE_ROOT; };
+		C9C9079811626697006C5014 /* hello.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = hello.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		C9C907A011626698006C5014 /* hello-Info copy.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "hello-Info copy.plist"; path = "plists/hello-Info copy.plist"; sourceTree = "<group>"; };
+		C9C907B2116266AA006C5014 /* hello.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = hello.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		C9C907BA116266AB006C5014 /* hello-Info copy 2.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "hello-Info copy 2.plist"; path = "plists/hello-Info copy 2.plist"; sourceTree = "<group>"; };
 		C9F70AA7DF730564A9DD1BFD /* pngwtran.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pngwtran.c; path = ../../png/pngwtran.c; sourceTree = SOURCE_ROOT; };
 		CA38333A14E4BA43F4E01CAA /* fl_show_colormap.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_show_colormap.cxx; path = ../../src/fl_show_colormap.cxx; sourceTree = SOURCE_ROOT; };
 		CA39566FD1F25D47C83DE042 /* glut_font.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = glut_font.cxx; path = ../../src/glut_font.cxx; sourceTree = SOURCE_ROOT; };
@@ -4545,6 +4613,22 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
+		C9C9079011626697006C5014 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				C9C9079111626697006C5014 /* fltk.framework in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		C9C907AA116266AA006C5014 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				C9C907AB116266AA006C5014 /* fltk.framework in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
 		CC5EEC22D6CC98D290BF1108 /* Frameworks */ = {
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
@@ -4788,6 +4872,8 @@
 				C197AD2AAA7FA44783DD8E27 /* Frameworks */,
 				7806C7AA99FE626675560AF1 /* Tests */,
 				7DC38200FBE41638B7195263 /* Products */,
+				C9C907A011626698006C5014 /* hello-Info copy.plist */,
+				C9C907BA116266AB006C5014 /* hello-Info copy 2.plist */,
 			);
 			sourceTree = "<group>";
 		};
@@ -5378,6 +5464,8 @@
 				2C2ABE11C85CA4F38910342F /* utf8.app */,
 				20D5080729E562F13002641C /* valuators.app */,
 				CE1B91A86A673AD693E3D089 /* device.app */,
+				C9C9079811626697006C5014 /* hello.app */,
+				C9C907B2116266AA006C5014 /* hello.app */,
 			);
 			name = Products;
 			sourceTree = "<group>";
@@ -7070,6 +7158,46 @@
 			productReference = 5C77424BC3FA8DD40F116E8B /* input_choice.app */;
 			productType = "com.apple.product-type.application";
 		};
+		C9C9078A11626697006C5014 /* hello1 */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = C9C9079511626697006C5014 /* Build configuration list for PBXNativeTarget "hello1" */;
+			buildPhases = (
+				C9C9078D11626697006C5014 /* Resources */,
+				C9C9078E11626697006C5014 /* Sources */,
+				C9C9079011626697006C5014 /* Frameworks */,
+				C9C9079211626697006C5014 /* CopyFiles */,
+			);
+			buildRules = (
+				C9C9079411626697006C5014 /* PBXBuildRule */,
+			);
+			dependencies = (
+				C9C9078B11626697006C5014 /* PBXTargetDependency */,
+			);
+			name = hello1;
+			productName = hello;
+			productReference = C9C9079811626697006C5014 /* hello.app */;
+			productType = "com.apple.product-type.application";
+		};
+		C9C907A4116266AA006C5014 /* hello2 */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = C9C907AF116266AA006C5014 /* Build configuration list for PBXNativeTarget "hello2" */;
+			buildPhases = (
+				C9C907A7116266AA006C5014 /* Resources */,
+				C9C907A8116266AA006C5014 /* Sources */,
+				C9C907AA116266AA006C5014 /* Frameworks */,
+				C9C907AC116266AA006C5014 /* CopyFiles */,
+			);
+			buildRules = (
+				C9C907AE116266AA006C5014 /* PBXBuildRule */,
+			);
+			dependencies = (
+				C9C907A5116266AA006C5014 /* PBXTargetDependency */,
+			);
+			name = hello2;
+			productName = hello;
+			productReference = C9C907B2116266AA006C5014 /* hello.app */;
+			productType = "com.apple.product-type.application";
+		};
 		CB0251B492844839B1A1A4CB /* navigation */ = {
 			isa = PBXNativeTarget;
 			buildConfigurationList = DAF4EB778872069CA71195B5 /* Build configuration list for PBXNativeTarget "navigation" */;
@@ -7551,6 +7679,8 @@
 				3122B416B3CF763DB611E81C /* gl_overlay */,
 				E408DD3C810C39651ADDA2FB /* glpuzzle */,
 				D20AA53D1AEB4AA2514B75C1 /* hello */,
+				C9C9078A11626697006C5014 /* hello1 */,
+				C9C907A4116266AA006C5014 /* hello2 */,
 				DFF4C72EF86EB3291EA43905 /* help */,
 				9D221371C9BC25C9EC14BB23 /* iconize */,
 				1455CCACEBA30622B6A1D00D /* image */,
@@ -7974,6 +8104,20 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
+		C9C9078D11626697006C5014 /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		C9C907A7116266AA006C5014 /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
 		CA4C3D6588FE0947E3985BB5 /* Resources */ = {
 			isa = PBXResourcesBuildPhase;
 			buildActionMask = 2147483647;
@@ -8872,6 +9016,22 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
+		C9C9078E11626697006C5014 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				C9C9078F11626697006C5014 /* hello.cxx in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		C9C907A8116266AA006C5014 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				C9C907A9116266AA006C5014 /* hello.cxx in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
 		CA76768BCE090D9040E525CD /* Sources */ = {
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
@@ -9825,6 +9985,16 @@
 			target = E379F105C5DD998B9B72950E /* fltk */;
 			targetProxy = 1A719F0285C4520423A99FD9 /* PBXContainerItemProxy */;
 		};
+		C9C9078B11626697006C5014 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = E379F105C5DD998B9B72950E /* fltk */;
+			targetProxy = C9C9078C11626697006C5014 /* PBXContainerItemProxy */;
+		};
+		C9C907A5116266AA006C5014 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = E379F105C5DD998B9B72950E /* fltk */;
+			targetProxy = C9C907A6116266AA006C5014 /* PBXContainerItemProxy */;
+		};
 		CAE940C198635D14F70451E5 /* PBXTargetDependency */ = {
 			isa = PBXTargetDependency;
 			target = E379F105C5DD998B9B72950E /* fltk */;
@@ -14056,6 +14226,136 @@
 			};
 			name = Release;
 		};
+		C9C9079611626697006C5014 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = fltk.pch;
+				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
+				HEADER_SEARCH_PATHS = (
+					../../ide/XCode3/,
+					../../,
+					../../png,
+					../../jpeg,
+				);
+				INFOPLIST_FILE = "plists/hello-Info copy.plist";
+				INSTALL_PATH = "$(HOME)/Applications";
+				OTHER_LDFLAGS = (
+					"-framework",
+					Cocoa,
+					"-framework",
+					Carbon,
+				);
+				PRODUCT_NAME = hello;
+				WARNING_CFLAGS = (
+					"-Wno-format-security",
+					"-Wall",
+				);
+			};
+			name = Debug;
+		};
+		C9C9079711626697006C5014 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				GCC_MODEL_TUNING = G5;
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = fltk.pch;
+				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
+				HEADER_SEARCH_PATHS = (
+					../../ide/XCode3/,
+					../../,
+					../../png,
+					../../jpeg,
+				);
+				INFOPLIST_FILE = "plists/hello-Info copy.plist";
+				INSTALL_PATH = "$(HOME)/Applications";
+				OTHER_LDFLAGS = (
+					"-framework",
+					Cocoa,
+					"-framework",
+					Carbon,
+				);
+				PRODUCT_NAME = hello;
+				WARNING_CFLAGS = (
+					"-Wno-format-security",
+					"-Wall",
+				);
+			};
+			name = Release;
+		};
+		C9C907B0116266AA006C5014 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = fltk.pch;
+				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
+				HEADER_SEARCH_PATHS = (
+					../../ide/XCode3/,
+					../../,
+					../../png,
+					../../jpeg,
+				);
+				INFOPLIST_FILE = "plists/hello-Info copy 2.plist";
+				INSTALL_PATH = "$(HOME)/Applications";
+				OTHER_LDFLAGS = (
+					"-framework",
+					Cocoa,
+					"-framework",
+					Carbon,
+				);
+				PRODUCT_NAME = hello;
+				WARNING_CFLAGS = (
+					"-Wno-format-security",
+					"-Wall",
+				);
+			};
+			name = Debug;
+		};
+		C9C907B1116266AA006C5014 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				GCC_MODEL_TUNING = G5;
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = fltk.pch;
+				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
+				HEADER_SEARCH_PATHS = (
+					../../ide/XCode3/,
+					../../,
+					../../png,
+					../../jpeg,
+				);
+				INFOPLIST_FILE = "plists/hello-Info copy 2.plist";
+				INSTALL_PATH = "$(HOME)/Applications";
+				OTHER_LDFLAGS = (
+					"-framework",
+					Cocoa,
+					"-framework",
+					Carbon,
+				);
+				PRODUCT_NAME = hello;
+				WARNING_CFLAGS = (
+					"-Wno-format-security",
+					"-Wall",
+				);
+			};
+			name = Release;
+		};
 		CDFB9842F390DEB95DE77F87 /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
@@ -15552,6 +15852,24 @@
 			defaultConfigurationIsVisible = 0;
 			defaultConfigurationName = Debug;
 		};
+		C9C9079511626697006C5014 /* Build configuration list for PBXNativeTarget "hello1" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				C9C9079611626697006C5014 /* Debug */,
+				C9C9079711626697006C5014 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Debug;
+		};
+		C9C907AF116266AA006C5014 /* Build configuration list for PBXNativeTarget "hello2" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				C9C907B0116266AA006C5014 /* Debug */,
+				C9C907B1116266AA006C5014 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Debug;
+		};
 		D397475D7D3A6DC650C52377 /* Build configuration list for PBXNativeTarget "message" */ = {
 			isa = XCConfigurationList;
 			buildConfigurations = (

Modified: branches/branch-3.0/ide/Xcode3/plists/hello-Info.plist
===================================================================
--- branches/branch-3.0/ide/Xcode3/plists/hello-Info.plist	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/ide/Xcode3/plists/hello-Info.plist	2010-03-30 17:38:49 UTC (rev 7366)
@@ -17,4 +17,4 @@
 	<key>CFBundleVersion</key>
 	<string>1.0</string>
 </dict>
-	</plist>
+</plist>

Modified: branches/branch-3.0/src/Fl.cxx
===================================================================
--- branches/branch-3.0/src/Fl.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -31,10 +31,10 @@
 //          to implement clipping. This should be changed into pure
 //          Quartz calls in the near future.
 #include "config.h"
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/x.H>
-#include <FL/Fl_Tooltip.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Window.H>
+#include <fltk3/x.H>
+#include <fltk3/Fl_Tooltip.H>
 #include <ctype.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -748,7 +748,7 @@
 
 ////////////////////////////////////////////////////////////////
 
-fltk3::Widget* fl_oldfocus; // kludge for Fl_Group...
+fltk3::Widget* fl_oldfocus; // kludge for fltk3::Group...
 
 /**
     Sets the widget that will receive FL_KEYBOARD events.
@@ -1319,7 +1319,7 @@
 //    Fl_Tooltip::exit(Fl_Tooltip::current());
   }
 
-  return Fl_Group::handle(ev);
+  return fltk3::Group::handle(ev);
 }
 
 ////////////////////////////////////////////////////////////////
@@ -1367,7 +1367,7 @@
 
 ////////////////////////////////////////////////////////////////
 
-#include <FL/fl_draw.H>
+#include <fltk3/fl_draw.H>
 
 void fltk3::Widget::redraw() {
   damage(FL_DAMAGE_ALL);

Modified: branches/branch-3.0/src/Fl_Abstract_Printer.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Abstract_Printer.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Abstract_Printer.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -28,8 +28,8 @@
  \brief implementation of class Fl_Abstract_Printer.
  */
 
-#include <FL/Fl.H>
-#include <FL/Fl_Printer.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Printer.H>
 
 /**
  @brief Draws the widget on the printed page.
@@ -85,7 +85,7 @@
 
 void Fl_Abstract_Printer::traverse(fltk3::Widget *widget)
 {
-  Fl_Group *g = widget->as_group();
+  fltk3::Group *g = widget->as_group();
   if (!g) return;
   int n = g->children();
   for (int i = 0; i < n; i++) {

Modified: branches/branch-3.0/src/Fl_Adjuster.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Adjuster.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Adjuster.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -25,10 +25,10 @@
 //     http://www.fltk.org/str.php
 //
 
-#include <FL/Fl.H>
-#include <FL/Fl_Adjuster.H>
-#include <FL/Fl_Bitmap.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Adjuster.H>
+#include <fltk3/Fl_Bitmap.H>
+#include <fltk3/fl_draw.H>
 
 #include "fastarrow.h"
 static Fl_Bitmap fastarrow(fastarrow_bits, fastarrow_width, fastarrow_height);

Modified: branches/branch-3.0/src/Fl_BMP_Image.cxx
===================================================================
--- branches/branch-3.0/src/Fl_BMP_Image.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_BMP_Image.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -34,7 +34,7 @@
 // Include necessary header files...
 //
 
-#include <FL/Fl_BMP_Image.H>
+#include <fltk3/Fl_BMP_Image.H>
 #include <config.h>
 #include <stdio.h>
 #include <stdlib.h>

Modified: branches/branch-3.0/src/Fl_Bitmap.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Bitmap.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Bitmap.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -31,12 +31,12 @@
 /** \fn Fl_Bitmap::Fl_Bitmap(const unsigned char *array, int W, int H)
   The constructors create a new bitmap from the specified bitmap data.*/
 
-#include <FL/Fl.H>
-#include <FL/x.H>
-#include <FL/fl_draw.H>
-#include <FL/Fl_Widget.H>
-#include <FL/Fl_Menu_Item.H>
-#include <FL/Fl_Bitmap.H>
+#include <fltk3/Fl.H>
+#include <fltk3/x.H>
+#include <fltk3/fl_draw.H>
+#include <fltk3/Fl_Widget.H>
+#include <fltk3/Fl_Menu_Item.H>
+#include <fltk3/Fl_Bitmap.H>
 #include "flstring.h"
 
 #if defined(__APPLE_QUARTZ__)

Modified: branches/branch-3.0/src/Fl_Box.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Box.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Box.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -25,8 +25,8 @@
 //     http://www.fltk.org/str.php
 //
 
-#include <FL/Fl_Widget.H>
-#include <FL/Fl_Box.H>
+#include <fltk3/Fl_Widget.H>
+#include <fltk3/Fl_Box.H>
 
 void Fl_Box::draw() {
   draw_box();

Modified: branches/branch-3.0/src/Fl_Browser.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Browser.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Browser.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -25,9 +25,9 @@
 //     http://www.fltk.org/str.php
 //
 
-#include <FL/Fl.H>
-#include <FL/Fl_Browser.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Browser.H>
+#include <fltk3/fl_draw.H>
 #include "flstring.h"
 #include <stdlib.h>
 #include <math.h>

Modified: branches/branch-3.0/src/Fl_Browser_.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Browser_.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Browser_.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -28,10 +28,10 @@
 #define DISPLAY_SEARCH_BOTH_WAYS_AT_ONCE
 
 #include <stdio.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Widget.H>
-#include <FL/Fl_Browser_.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Widget.H>
+#include <fltk3/Fl_Browser_.H>
+#include <fltk3/fl_draw.H>
 
 
 // This is the base class for browsers.  To be useful it must be
@@ -106,7 +106,7 @@
 
 // The scrollbars may be moved again by draw(), since each one's size
 // depends on whether the other is visible or not.  This skips over
-// Fl_Group::resize since it moves the scrollbars uselessly.
+// fltk3::Group::resize since it moves the scrollbars uselessly.
 /**
   Repositions and/or resizes the browser.
   \param[in] X,Y,W,H The new position and size for the browser, in pixels.
@@ -773,7 +773,7 @@
     }
   }
   
-  if (Fl_Group::handle(event)) return 1;
+  if (fltk3::Group::handle(event)) return 1;
   if (wp.deleted()) return 1;
 
   int X, Y, W, H; bbox(X, Y, W, H);
@@ -958,7 +958,7 @@
   \param[in] L The label string, may be NULL.
 */
 Fl_Browser_::Fl_Browser_(int X, int Y, int W, int H, const char* L)
-  : Fl_Group(X, Y, W, H, L),
+: fltk3::Group(X, Y, W, H, L),
     scrollbar(0, 0, 0, 0, 0), // they will be resized by draw()
     hscrollbar(0, 0, 0, 0, 0)
 {

Modified: branches/branch-3.0/src/Fl_Browser_load.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Browser_load.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Browser_load.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -25,10 +25,10 @@
 //     http://www.fltk.org/str.php
 //
 
-#include <FL/Fl.H>
-#include <FL/Fl_Browser.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Browser.H>
 #include <stdio.h>
-#include <FL/fl_utf8.h>
+#include <fltk3/fl_utf8.h>
 
 /**
   Clears the browser and reads the file, adding each line from the file

Modified: branches/branch-3.0/src/Fl_Button.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Button.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Button.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -25,10 +25,10 @@
 //     http://www.fltk.org/str.php
 //
 
-#include <FL/Fl.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Window.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Button.H>
+#include <fltk3/Fl_Group.H>
+#include <fltk3/Fl_Window.H>
 
 // There are a lot of subclasses, named Fl_*_Button.  Some of
 // them are implemented by setting the type() value and testing it
@@ -60,7 +60,7 @@
  */
 void Fl_Button::setonly() { // set this radio button on, turn others off
   value(1);
-  Fl_Group* g = parent();
+  fltk3::Group* g = parent();
   fltk3::Widget*const* a = g->array();
   for (int i = g->children(); i--;) {
     fltk3::Widget* o = *a++;

Modified: branches/branch-3.0/src/Fl_Chart.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Chart.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Chart.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -25,10 +25,10 @@
 //     http://www.fltk.org/str.php
 //
 
-#include <FL/math.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Chart.H>
-#include <FL/fl_draw.H>
+#include <fltk3/math.h>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Chart.H>
+#include <fltk3/fl_draw.H>
 #include "flstring.h"
 #include <stdlib.h>
 

Modified: branches/branch-3.0/src/Fl_Check_Browser.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Check_Browser.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Check_Browser.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -28,8 +28,8 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include "flstring.h"
-#include <FL/fl_draw.H>
-#include <FL/Fl_Check_Browser.H>
+#include <fltk3/fl_draw.H>
+#include <fltk3/Fl_Check_Browser.H>
 
 /* This uses a cache for faster access when you're scanning the list
 either forwards or backwards. */

Modified: branches/branch-3.0/src/Fl_Check_Button.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Check_Button.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Check_Button.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -25,8 +25,8 @@
 //     http://www.fltk.org/str.php
 //
 
-#include <FL/Fl.H>
-#include <FL/Fl_Check_Button.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Check_Button.H>
 
 // TODO Correct incorrect Fl_Check_Button comments.
 // A subclass of Fl_Button that always draws as a diamond box.  This

Modified: branches/branch-3.0/src/Fl_Choice.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Choice.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Choice.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -25,9 +25,9 @@
 //     http://www.fltk.org/str.php
 //
 
-#include <FL/Fl.H>
-#include <FL/Fl_Choice.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Choice.H>
+#include <fltk3/fl_draw.H>
 #include "flstring.h"
 
 // Emulates the Forms choice widget.  This is almost exactly the same

Modified: branches/branch-3.0/src/Fl_Clock.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Clock.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Clock.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -25,9 +25,9 @@
 //     http://www.fltk.org/str.php
 //
 
-#include <FL/Fl.H>
-#include <FL/Fl_Clock.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Clock.H>
+#include <fltk3/fl_draw.H>
 #include <math.h>
 #include <time.h>
 #ifndef WIN32

Modified: branches/branch-3.0/src/Fl_Color_Chooser.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Color_Chooser.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Color_Chooser.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -25,13 +25,13 @@
 //     http://www.fltk.org/str.php
 //
 
-#include <FL/Fl.H>
-#include <FL/Fl_Color_Chooser.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Return_Button.H>
-#include <FL/fl_draw.H>
-#include <FL/math.h>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Color_Chooser.H>
+#include <fltk3/Fl_Window.H>
+#include <fltk3/Fl_Box.H>
+#include <fltk3/Fl_Return_Button.H>
+#include <fltk3/fl_draw.H>
+#include <fltk3/math.h>
 #include <stdio.h>
 
 // Besides being a useful object on it's own, the Fl_Color_Chooser was
@@ -468,7 +468,7 @@
   \param[in] L widget label, default is no label
  */
 Fl_Color_Chooser::Fl_Color_Chooser(int X, int Y, int W, int H, const char* L)
-  : Fl_Group(0,0,195,115,L),
+: fltk3::Group(0,0,195,115,L),
     huebox(0,0,115,115),
     valuebox(115,0,20,115),
     choice(140,0,55,25),

Modified: branches/branch-3.0/src/Fl_Counter.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Counter.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Counter.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -25,9 +25,9 @@
 //     http://www.fltk.org/str.php
 //
 
-#include <FL/Fl.H>
-#include <FL/Fl_Counter.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Counter.H>
+#include <fltk3/fl_draw.H>
 
 void Fl_Counter::draw() {
   int i; Fl_Boxtype boxtype[5];

Modified: branches/branch-3.0/src/Fl_Device.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Device.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Device.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -25,10 +25,10 @@
 //     http://www.fltk.org/str.php
 //
 
-#include <FL/Fl.H>
-#include <FL/Fl_Device.H>
-//#include <FL/fl_draw.H>
-#include <FL/Fl_Image.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Device.H>
+//#include <fltk3/fl_draw.H>
+#include <fltk3/Fl_Image.H>
 
 /** \brief Draws an Fl_RGB_Image object to the device. 
  *

Modified: branches/branch-3.0/src/Fl_Dial.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Dial.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Dial.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -25,11 +25,11 @@
 //     http://www.fltk.org/str.php
 //
 
-#include <FL/Fl.H>
-#include <FL/Fl_Dial.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Dial.H>
+#include <fltk3/fl_draw.H>
 #include <stdlib.h>
-#include <FL/math.h>
+#include <fltk3/math.h>
 
 // All angles are measured with 0 to the right and counter-clockwise
 /**

Modified: branches/branch-3.0/src/Fl_Double_Window.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Double_Window.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Double_Window.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -26,10 +26,10 @@
 //
 
 #include <config.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/x.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Double_Window.H>
+#include <fltk3/x.H>
+#include <fltk3/fl_draw.H>
 
 // On systems that support double buffering "naturally" the base
 // fltk3::Window class will probably do double-buffer and this subclass

Modified: branches/branch-3.0/src/Fl_File_Browser.cxx
===================================================================
--- branches/branch-3.0/src/Fl_File_Browser.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_File_Browser.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -39,10 +39,10 @@
 // Include necessary header files...
 //
 
-#include <FL/Fl_File_Browser.H>
-#include <FL/fl_draw.H>
-#include <FL/filename.H>
-#include <FL/Fl_Image.H>	// icon
+#include <fltk3/Fl_File_Browser.H>
+#include <fltk3/fl_draw.H>
+#include <fltk3/filename.H>
+#include <fltk3/Fl_Image.H>	// icon
 #include <stdio.h>
 #include <stdlib.h>
 #include "flstring.h"

Modified: branches/branch-3.0/src/Fl_File_Chooser.cxx
===================================================================
--- branches/branch-3.0/src/Fl_File_Chooser.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_File_Chooser.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -27,8 +27,8 @@
 
 // generated by Fast Light User Interface Designer (fluid) version 1.0300
 
-#include "../FL/Fl_File_Chooser.H"
-#include <FL/fl_draw.H>
+#include "../fltk3/Fl_File_Chooser.H"
+#include <fltk3/fl_draw.H>
 
 void Fl_File_Chooser::cb_window_i(Fl_Double_Window*, void*) {
   fileName->value("");
@@ -61,7 +61,7 @@
   ((Fl_File_Chooser*)(o->parent()->parent()->user_data()))->cb_newButton_i(o,v);
 }
 
-#include <FL/Fl_Bitmap.H>
+#include <fltk3/Fl_Bitmap.H>
 static unsigned char idata_new[] =
 {0,0,120,0,132,0,2,1,1,254,1,128,49,128,49,128,253,128,253,128,49,128,49,
 128,1,128,1,128,255,255,0,0};
@@ -159,15 +159,15 @@
 }
 
 Fl_File_Chooser::Fl_File_Chooser(const char *d, const char *p, int t, const char *title) {
-  Fl_Group *prev_current = Fl_Group::current();
+  fltk3::Group *prev_current = fltk3::Group::current();
   { window = new Fl_Double_Window(490, 380, "Choose File");
     window->callback((Fl_Callback*)cb_window, (void*)(this));
-    { Fl_Group* o = new Fl_Group(10, 10, 470, 25);
+    { fltk3::Group* o = new fltk3::Group(10, 10, 470, 25);
       { showChoice = new Fl_Choice(65, 10, 215, 25, "Show:");
         showChoice->down_box(FL_BORDER_BOX);
         showChoice->labelfont(1);
         showChoice->callback((Fl_Callback*)cb_showChoice);
-        Fl_Group::current()->resizable(showChoice);
+        fltk3::Group::current()->resizable(showChoice);
         showChoice->label(show_label);
       } // Fl_Choice* showChoice
       { favoritesButton = new Fl_Menu_Button(290, 10, 155, 25, "Favorites");
@@ -183,7 +183,7 @@
         o->tooltip(new_directory_tooltip);
       } // Fl_Button* newButton
       o->end();
-    } // Fl_Group* o
+    } // fltk3::Group* o
     { Fl_Tile* o = new Fl_Tile(10, 45, 470, 225);
       o->callback((Fl_Callback*)cb_);
       { fileList = new Fl_File_Browser(10, 45, 295, 225);
@@ -197,10 +197,10 @@
         previewBox->align(Fl_Align(FL_ALIGN_CLIP|FL_ALIGN_INSIDE));
       } // Fl_Box* previewBox
       o->end();
-      Fl_Group::current()->resizable(o);
+      fltk3::Group::current()->resizable(o);
     } // Fl_Tile* o
-    { Fl_Group* o = new Fl_Group(10, 275, 470, 95);
-      { Fl_Group* o = new Fl_Group(10, 275, 470, 20);
+    { fltk3::Group* o = new fltk3::Group(10, 275, 470, 95);
+      { fltk3::Group* o = new fltk3::Group(10, 275, 470, 20);
         { previewButton = new Fl_Check_Button(10, 275, 73, 20, "Preview");
           previewButton->shortcut(0x80070);
           previewButton->down_box(FL_DOWN_BOX);
@@ -209,15 +209,15 @@
           previewButton->label(preview_label);
         } // Fl_Check_Button* previewButton
         { Fl_Box* o = new Fl_Box(115, 275, 365, 20);
-          Fl_Group::current()->resizable(o);
+          fltk3::Group::current()->resizable(o);
         } // Fl_Box* o
         o->end();
-      } // Fl_Group* o
+      } // fltk3::Group* o
       { fileName = new Fl_File_Input(115, 300, 365, 35);
         fileName->labelfont(1);
         fileName->callback((Fl_Callback*)cb_fileName);
         fileName->when(FL_WHEN_ENTER_KEY);
-        Fl_Group::current()->resizable(fileName);
+        fltk3::Group::current()->resizable(fileName);
         fileName->when(FL_WHEN_CHANGED | FL_WHEN_ENTER_KEY);
       } // Fl_File_Input* fileName
       { Fl_Box* o = new Fl_Box(10, 310, 105, 25, "Filename:");
@@ -225,7 +225,7 @@
         o->align(Fl_Align(FL_ALIGN_RIGHT|FL_ALIGN_INSIDE));
         o->label(filename_label);
       } // Fl_Box* o
-      { Fl_Group* o = new Fl_Group(10, 345, 470, 25);
+      { fltk3::Group* o = new fltk3::Group(10, 345, 470, 25);
         { okButton = new Fl_Return_Button(313, 345, 85, 25, "OK");
           okButton->callback((Fl_Callback*)cb_okButton);
           okButton->label(fl_ok);
@@ -235,12 +235,12 @@
           o->label(fl_cancel);
         } // Fl_Button* cancelButton
         { Fl_Box* o = new Fl_Box(10, 345, 30, 25);
-          Fl_Group::current()->resizable(o);
+          fltk3::Group::current()->resizable(o);
         } // Fl_Box* o
         o->end();
-      } // Fl_Group* o
+      } // fltk3::Group* o
       o->end();
-    } // Fl_Group* o
+    } // fltk3::Group* o
     if (title) window->label(title);
     window->set_modal();
     window->end();
@@ -250,23 +250,23 @@
     { favList = new Fl_File_Browser(10, 10, 300, 95);
       favList->type(2);
       favList->callback((Fl_Callback*)cb_favList);
-      Fl_Group::current()->resizable(favList);
+      fltk3::Group::current()->resizable(favList);
     } // Fl_File_Browser* favList
-    { Fl_Group* o = new Fl_Group(320, 10, 25, 95);
+    { fltk3::Group* o = new fltk3::Group(320, 10, 25, 95);
       { favUpButton = new Fl_Button(320, 10, 25, 25, "@8>");
         favUpButton->callback((Fl_Callback*)cb_favUpButton);
       } // Fl_Button* favUpButton
       { favDeleteButton = new Fl_Button(320, 45, 25, 25, "X");
         favDeleteButton->labelfont(1);
         favDeleteButton->callback((Fl_Callback*)cb_favDeleteButton);
-        Fl_Group::current()->resizable(favDeleteButton);
+        fltk3::Group::current()->resizable(favDeleteButton);
       } // Fl_Button* favDeleteButton
       { favDownButton = new Fl_Button(320, 80, 25, 25, "@2>");
         favDownButton->callback((Fl_Callback*)cb_favDownButton);
       } // Fl_Button* favDownButton
       o->end();
-    } // Fl_Group* o
-    { Fl_Group* o = new Fl_Group(10, 113, 335, 29);
+    } // fltk3::Group* o
+    { fltk3::Group* o = new fltk3::Group(10, 113, 335, 29);
       { favCancelButton = new Fl_Button(273, 115, 72, 25, "Cancel");
         favCancelButton->callback((Fl_Callback*)cb_favCancelButton);
         favCancelButton->label(fl_cancel);
@@ -276,10 +276,10 @@
         favOkButton->label(save_label);
       } // Fl_Return_Button* favOkButton
       { Fl_Box* o = new Fl_Box(10, 115, 161, 25);
-        Fl_Group::current()->resizable(o);
+        fltk3::Group::current()->resizable(o);
       } // Fl_Box* o
       o->end();
-    } // Fl_Group* o
+    } // fltk3::Group* o
     favWindow->label(manage_favorites_label);
     favWindow->set_modal();
     favWindow->size_range(181, 150);
@@ -297,7 +297,7 @@
 int e;
 prefs_.get("preview", e, 1);
 preview(e);
-Fl_Group::current(prev_current);
+  fltk3::Group::current(prev_current);
   ext_group=(fltk3::Widget*)0;
 }
 

Modified: branches/branch-3.0/src/Fl_File_Chooser2.cxx
===================================================================
--- branches/branch-3.0/src/Fl_File_Chooser2.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_File_Chooser2.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -338,11 +338,11 @@
 // Include necessary headers.
 //
 
-#include <FL/Fl_File_Chooser.H>
-#include <FL/filename.H>
-#include <FL/fl_ask.H>
-#include <FL/x.H>
-#include <FL/Fl_Shared_Image.H>
+#include <fltk3/Fl_File_Chooser.H>
+#include <fltk3/filename.H>
+#include <fltk3/fl_ask.H>
+#include <fltk3/x.H>
+#include <fltk3/Fl_Shared_Image.H>
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -1087,7 +1087,7 @@
   prefs_.set("preview", e);
   prefs_.flush();
 
-  Fl_Group *p = previewBox->parent();
+  fltk3::Group *p = previewBox->parent();
   if (e) {
     int w = p->w() * 2 / 3;
     fileList->resize(fileList->x(), fileList->y(),

Modified: branches/branch-3.0/src/Fl_File_Icon.cxx
===================================================================
--- branches/branch-3.0/src/Fl_File_Icon.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_File_Icon.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -43,7 +43,7 @@
 
 #include <stdio.h>
 #include <stdlib.h>
-#include <FL/fl_utf8.h>
+#include <fltk3/fl_utf8.h>
 #include "flstring.h"
 #include <errno.h>
 #include <sys/types.h>
@@ -55,10 +55,10 @@
 #  include <unistd.h>
 #endif /* WIN32 || __EMX__ */
 
-#include <FL/Fl_File_Icon.H>
-#include <FL/Fl_Widget.H>
-#include <FL/fl_draw.H>
-#include <FL/filename.H>
+#include <fltk3/Fl_File_Icon.H>
+#include <fltk3/Fl_Widget.H>
+#include <fltk3/fl_draw.H>
+#include <fltk3/filename.H>
 
 
 //

Modified: branches/branch-3.0/src/Fl_File_Icon2.cxx
===================================================================
--- branches/branch-3.0/src/Fl_File_Icon2.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_File_Icon2.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -44,11 +44,11 @@
 
 #include <stdio.h>
 #include <stdlib.h>
-#include <FL/fl_utf8.h>
+#include <fltk3/fl_utf8.h>
 #include "flstring.h"
 #include <ctype.h>
 #include <errno.h>
-#include <FL/math.h>
+#include <fltk3/math.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #if defined(WIN32) && !defined(__CYGWIN__)
@@ -61,11 +61,11 @@
 #  include <unistd.h>
 #endif // WIN32
 
-#include <FL/Fl_File_Icon.H>
-#include <FL/Fl_Shared_Image.H>
-#include <FL/Fl_Widget.H>
-#include <FL/fl_draw.H>
-#include <FL/filename.H>
+#include <fltk3/Fl_File_Icon.H>
+#include <fltk3/Fl_Shared_Image.H>
+#include <fltk3/Fl_Widget.H>
+#include <fltk3/fl_draw.H>
+#include <fltk3/filename.H>
 
 
 //

Modified: branches/branch-3.0/src/Fl_File_Input.cxx
===================================================================
--- branches/branch-3.0/src/Fl_File_Input.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_File_Input.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -26,10 +26,10 @@
 //     http://www.fltk.org/str.php
 //
 
-#include <FL/Fl.H>
-#include <FL/Fl_File_Input.H>
-#include <FL/Fl_Window.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_File_Input.H>
+#include <fltk3/Fl_Window.H>
+#include <fltk3/fl_draw.H>
 #include <stdio.h>
 #include "flstring.h"
 

Modified: branches/branch-3.0/src/Fl_GIF_Image.cxx
===================================================================
--- branches/branch-3.0/src/Fl_GIF_Image.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_GIF_Image.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -32,11 +32,11 @@
 // Include necessary header files...
 //
 
-#include <FL/Fl.H>
-#include <FL/Fl_GIF_Image.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_GIF_Image.H>
 #include <stdio.h>
 #include <stdlib.h>
-#include <FL/fl_utf8.h>
+#include <fltk3/fl_utf8.h>
 #include "flstring.h"
 
 // Read a .gif file and convert it to a "xpm" format (actually my

Modified: branches/branch-3.0/src/Fl_Gl_Choice.H
===================================================================
--- branches/branch-3.0/src/Fl_Gl_Choice.H	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Gl_Choice.H	2010-03-30 17:38:49 UTC (rev 7366)
@@ -55,7 +55,7 @@
 // Warning: whatever GLContext is defined to must take exactly the same
 // space in a structure as a void*!!!
 #ifdef WIN32
-#  include <FL/gl.h>
+#  include <fltk3/gl.h>
 #  define GLContext HGLRC
 #elif defined(__APPLE_QUARTZ__)
 // warning: the Quartz version should probably use Core GL (CGL) instead of AGL

Modified: branches/branch-3.0/src/Fl_Gl_Choice.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Gl_Choice.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Gl_Choice.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -28,16 +28,16 @@
 #include <config.h>
 #if HAVE_GL
 
-#  include <FL/Fl.H>
-#  include <FL/x.H>
+#  include <fltk3/Fl.H>
+#  include <fltk3/x.H>
 #  include <stdlib.h>
 #  include "Fl_Gl_Choice.H"
-#  include <FL/gl_draw.H>
+#  include <fltk3/gl_draw.H>
 #  include "flstring.h"
-#  include <FL/fl_utf8.h>
+#  include <fltk3/fl_utf8.h>
 
 #  ifdef __APPLE__
-#    include <FL/Fl_Window.H>
+#    include <fltk3/Fl_Window.H>
 #    include <Carbon/Carbon.h>
 #  endif
 

Modified: branches/branch-3.0/src/Fl_Gl_Device_Plugin.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Gl_Device_Plugin.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Gl_Device_Plugin.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -25,12 +25,12 @@
 //     http://www.fltk.org/str.php
 //
 
-#include <FL/Fl_Printer.H>
-#include <FL/Fl_Gl_Window.H>
+#include <fltk3/Fl_Printer.H>
+#include <fltk3/Fl_Gl_Window.H>
 #include "Fl_Gl_Choice.H"
-#include "FL/Fl.H"
+#include "fltk3/Fl.H"
 #ifndef __APPLE__
-#include "FL/fl_draw.H"
+#include "fltk3/fl_draw.H"
 #endif
 
 #if defined(__APPLE__)

Modified: branches/branch-3.0/src/Fl_Gl_Overlay.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Gl_Overlay.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Gl_Overlay.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -28,10 +28,10 @@
 #include <config.h>
 #if HAVE_GL
 
-#include <FL/Fl.H>
-#include <FL/x.H>
+#include <fltk3/Fl.H>
+#include <fltk3/x.H>
 #include "Fl_Gl_Choice.H"
-#include <FL/Fl_Gl_Window.H>
+#include <fltk3/Fl_Gl_Window.H>
 #include <stdlib.h>
 
 #if !HAVE_GL_OVERLAY

Modified: branches/branch-3.0/src/Fl_Gl_Window.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Gl_Window.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Gl_Window.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -32,12 +32,12 @@
 
 static int temp = fl_gl_load_plugin;
 
-#include <FL/Fl.H>
-#include <FL/x.H>
+#include <fltk3/Fl.H>
+#include <fltk3/x.H>
 #include "Fl_Gl_Choice.H"
-#include <FL/Fl_Gl_Window.H>
+#include <fltk3/Fl_Gl_Window.H>
 #include <stdlib.h>
-#include <FL/fl_utf8.h>
+#include <fltk3/fl_utf8.h>
 
 ////////////////////////////////////////////////////////////////
 
@@ -513,7 +513,7 @@
   initialization if it is false.
 
   The draw() method can <I>only</I> use OpenGL calls.  Do not
-  attempt to call X, any of the functions in <FL/fl_draw.H>, or glX
+  attempt to call X, any of the functions in <fltk3/fl_draw.H>, or glX
   directly.  Do not call gl_start() or gl_finish().
 
   If double-buffering is enabled in the window, the back and front

Modified: branches/branch-3.0/src/Fl_Group.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Group.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Group.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -25,19 +25,19 @@
 //     http://www.fltk.org/str.php
 //
 
-// The Fl_Group is the only defined container type in FLTK.
+// The fltk3::Group is the only defined container type in FLTK.
 
 // fltk3::Window itself is a subclass of this, and most of the event
 // handling is designed so windows themselves work correctly.
 
 #include <stdio.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Window.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Group.H>
+#include <fltk3/Fl_Window.H>
+#include <fltk3/fl_draw.H>
 #include <stdlib.h>
 
-Fl_Group* Fl_Group::current_;
+fltk3::Group* fltk3::Group::current_;
 
 // Hack: A single child is stored in the pointer to the array, while
 // multiple children are stored in an allocated array:
@@ -46,7 +46,7 @@
   Returns a pointer to the array of children. <I>This pointer is only
   valid until the next time a child is added or removed.</I>
 */
-fltk3::Widget*const* Fl_Group::array() const {
+fltk3::Widget*const* fltk3::Group::array() const {
   return children_ <= 1 ? (fltk3::Widget**)(&array_) : array_;
 }
 
@@ -54,7 +54,7 @@
   Searches the child array for the widget and returns the index. Returns children()
   if the widget is NULL or not found.
 */
-int Fl_Group::find(const fltk3::Widget* o) const {
+int fltk3::Group::find(const fltk3::Widget* o) const {
   fltk3::Widget*const* a = array();
   int i; for (i=0; i < children_; i++) if (*a++ == o) break;
   return i;
@@ -67,31 +67,31 @@
   Sets the current group so you can build the widget
   tree by just constructing the widgets.
 
-  begin() is automatically called by the constructor for Fl_Group (and thus for
+  begin() is automatically called by the constructor for fltk3::Group (and thus for
   fltk3::Window as well). begin() <I>is exactly the same as</I> current(this).
   <I>Don't forget to end() the group or window!</I>
 */
-void Fl_Group::begin() {current_ = this;}
+void fltk3::Group::begin() {current_ = this;}
 
 /**
   <I>Exactly the same as</I> current(this->parent()). Any new widgets
   added to the widget tree will be added to the parent of the group.
 */
-void Fl_Group::end() {current_ = parent();}
+void fltk3::Group::end() {current_ = parent();}
 
 /**
   Returns the currently active group.
   
   The fltk3::Widget constructor automatically does current()->add(widget) if this
   is not null. To prevent new widgets from being added to a group, call
-  Fl_Group::current(0).
+  fltk3::Group::current(0).
 */
-Fl_Group *Fl_Group::current() {return current_;}
+fltk3::Group *fltk3::Group::current() {return current_;}
 
 /**
-  See static Fl_Group *Fl_Group::current() 
+  See static fltk3::Group *fltk3::Group::current() 
 */
-void Fl_Group::current(Fl_Group *g) {current_ = g;}
+void fltk3::Group::current(fltk3::Group *g) {current_ = g;}
 
 extern fltk3::Widget* fl_oldfocus; // set by fltk3::focus
 
@@ -147,7 +147,7 @@
   return 0;
 }
 
-int Fl_Group::handle(int event) {
+int fltk3::Group::handle(int event) {
 
   fltk3::Widget*const* a = array();
   int i;
@@ -307,7 +307,7 @@
   }
 }
 
-//void Fl_Group::focus(fltk3::Widget *o) {fltk3::focus(o); o->handle(FL_FOCUS);}
+//void fltk3::Group::focus(fltk3::Widget *o) {fltk3::focus(o); o->handle(FL_FOCUS);}
 
 #if 0
 const char *nameof(fltk3::Widget *o) {
@@ -318,7 +318,7 @@
 #endif
 
 // try to move the focus in response to a keystroke:
-int Fl_Group::navigation(int key) {
+int fltk3::Group::navigation(int key) {
   if (children() <= 1) return 0;
   int i;
   for (i = 0; ; i++) {
@@ -363,7 +363,7 @@
 
 ////////////////////////////////////////////////////////////////
 
-Fl_Group::Fl_Group(int X,int Y,int W,int H,const char *l)
+fltk3::Group::Group(int X,int Y,int W,int H,const char *l)
 : fltk3::Widget(X,Y,W,H,l) {
   align(FL_ALIGN_TOP);
   children_ = 0;
@@ -383,7 +383,7 @@
   This method differs from the remove() method in that it
   affects all child widgets and deletes them from memory.
 */
-void Fl_Group::clear() {
+void fltk3::Group::clear() {
   savedfocus_ = 0;
   resizable_ = this;
   init_sizes();
@@ -395,7 +395,7 @@
       delete o;			// then delete it
     } else {			// this should never happen !
 #ifdef DEBUG_CLEAR
-      printf ("Fl_Group::clear() widget:%p, parent: %p != this (%p)\n",
+      printf ("fltk3::Group::clear() widget:%p, parent: %p != this (%p)\n",
 	      o, o->parent(), this); fflush(stdout);
 #endif // DEBUG_CLEAR
       remove(o);		// remove it
@@ -408,16 +408,16 @@
   whole tree to be deleted at once, without having to keep a pointer to
   all the children in the user code.
   
-  It is allowed that the Fl_Group and all of its children are automatic
-  (local) variables, but you must declare the Fl_Group \e first, so that
+  It is allowed that the fltk3::Group and all of its children are automatic
+  (local) variables, but you must declare the fltk3::Group \e first, so that
   it is destroyed last.
   
-  If you add static or automatic (local) variables to an Fl_Group, then it
+  If you add static or automatic (local) variables to an fltk3::Group, then it
   is your responsibility to remove (or delete) all such static or automatic
   child widgets \e \b before destroying the group - otherwise the child
   widgets' destructors would be called twice!
 */
-Fl_Group::~Fl_Group() {
+fltk3::Group::~Group() {
   clear();
 }
 
@@ -427,9 +427,9 @@
   if n >= children(). This can also be used to rearrange
   the widgets inside a group.
 */
-void Fl_Group::insert(fltk3::Widget &o, int index) {
+void fltk3::Group::insert(fltk3::Widget &o, int index) {
   if (o.parent()) {
-    Fl_Group* g = o.parent();
+    fltk3::Group* g = o.parent();
     int n = g->find(o);
     if (g == this) {
       if (index > n) index--;
@@ -460,7 +460,7 @@
   The widget is removed from its current group (if any) and then added
   to the end of this group.
 */
-void Fl_Group::add(fltk3::Widget &o) {insert(o, children_);}
+void fltk3::Group::add(fltk3::Widget &o) {insert(o, children_);}
 
 /**
   Removes a widget from the group but does not delete it.
@@ -470,7 +470,7 @@
   This method differs from the clear() method in that it only affects
   a single widget and does not delete it from memory.
 */
-void Fl_Group::remove(fltk3::Widget &o) {
+void fltk3::Group::remove(fltk3::Widget &o) {
   if (!children_) return;
   int i = find(o);
   if (i >= children_) return;
@@ -480,7 +480,7 @@
   } 
 #ifdef DEBUG_REMOVE  
   else {			// this should never happen !
-    printf ("Fl_Group::remove(): widget %p, parent_ (%p) != this (%p)\n",
+    printf ("fltk3::Group::remove(): widget %p, parent_ (%p) != this (%p)\n",
       &o, o.parent_, this);
   }
 #endif // DEBUG_REMOVE
@@ -514,11 +514,11 @@
 /**
   Resets the internal array of widget sizes and positions.
 
-  The Fl_Group widget keeps track of the original widget sizes and
+  The fltk3::Group widget keeps track of the original widget sizes and
   positions when resizing occurs so that if you resize a window back to its
   original size the widgets will be in the correct places. If you rearrange
   the widgets in your group, call this method to register the new arrangement
-  with the Fl_Group that contains them.
+  with the fltk3::Group that contains them.
   
   If you add or remove widgets, this will be done automatically.
   
@@ -527,7 +527,7 @@
   
   \sa sizes()
 */
-void Fl_Group::init_sizes() {
+void fltk3::Group::init_sizes() {
   delete[] sizes_; sizes_ = 0;
 }
 
@@ -538,14 +538,14 @@
   with the current widget sizes and positions.
 
   \note You should never need to use this method directly, unless you have
-  special needs to rearrange the children of a Fl_Group. Fl_Tile uses
+  special needs to rearrange the children of a fltk3::Group. Fl_Tile uses
   this to rearrange its widget positions.
   
   \sa init_sizes()
 
   \todo Should the internal representation of the sizes() array be documented?
 */
-int* Fl_Group::sizes() {
+int* fltk3::Group::sizes() {
   if (!sizes_) {
     int* p = sizes_ = new int[4*(children_+2)];
     // first thing in sizes array is the group's size:
@@ -579,17 +579,17 @@
 }
 
 /**
-  Resizes the Fl_Group widget and all of its children.
+  Resizes the fltk3::Group widget and all of its children.
 
-  The Fl_Group widget first resizes itself, and then it moves and resizes
+  The fltk3::Group widget first resizes itself, and then it moves and resizes
   all its children according to the rules documented for
-  Fl_Group::resizable(fltk3::Widget*)
+  fltk3::Group::resizable(fltk3::Widget*)
 
-  \sa Fl_Group::resizable(fltk3::Widget*)
-  \sa Fl_Group::resizable()
+  \sa fltk3::Group::resizable(fltk3::Widget*)
+  \sa fltk3::Group::resizable()
   \sa fltk3::Widget::resize(int,int,int,int)
 */
-void Fl_Group::resize(int X, int Y, int W, int H) {
+void fltk3::Group::resize(int X, int Y, int W, int H) {
 
   int dx = X-x();
   int dy = Y-y();
@@ -666,11 +666,11 @@
 /**
   Draws all children of the group.
 
-  This is useful, if you derived a widget from Fl_Group and want to draw a special
+  This is useful, if you derived a widget from fltk3::Group and want to draw a special
   border or background. You can call draw_children() from the derived draw() method
   after drawing the box, border, or background.
 */
-void Fl_Group::draw_children() {
+void fltk3::Group::draw_children() {
   fltk3::Widget*const* a = array();
 
   if (clip_children()) {
@@ -693,7 +693,7 @@
   if (clip_children()) fl_pop_clip();
 }
 
-void Fl_Group::draw() {
+void fltk3::Group::draw() {
   if (damage() & ~FL_DAMAGE_CHILD) { // redraw the entire thing:
     draw_box();
     draw_label();
@@ -707,9 +707,9 @@
   This draws a child widget, if it is not clipped \em and if any damage() bits
   are set. The damage bits are cleared after drawing.
 
-  \sa Fl_Group::draw_child(fltk3::Widget& widget) const
+  \sa fltk3::Group::draw_child(fltk3::Widget& widget) const
 */
-void Fl_Group::update_child(fltk3::Widget& widget) const {
+void fltk3::Group::update_child(fltk3::Widget& widget) const {
   if (widget.damage() && widget.visible() && widget.type() < FL_WINDOW &&
       fl_not_clipped(widget.x(), widget.y(), widget.w(), widget.h())) {
     widget.draw();	
@@ -723,7 +723,7 @@
   This draws a child widget, if it is not clipped.
   The damage bits are cleared after drawing.
 */
-void Fl_Group::draw_child(fltk3::Widget& widget) const {
+void fltk3::Group::draw_child(fltk3::Widget& widget) const {
   if (widget.visible() && widget.type() < FL_WINDOW &&
       fl_not_clipped(widget.x(), widget.y(), widget.w(), widget.h())) {
     widget.clear_damage(FL_DAMAGE_ALL);
@@ -735,7 +735,7 @@
 extern char fl_draw_shortcut;
 
 /** Parents normally call this to draw outside labels of child widgets. */
-void Fl_Group::draw_outside_label(const fltk3::Widget& widget) const {
+void fltk3::Group::draw_outside_label(const fltk3::Widget& widget) const {
   if (!widget.visible()) return;
   // skip any labels that are inside the widget:
   if (!(widget.align()&15) || (widget.align() & FL_ALIGN_INSIDE)) return;

Modified: branches/branch-3.0/src/Fl_Help_Dialog.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Help_Dialog.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Help_Dialog.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -27,9 +27,9 @@
 
 // generated by Fast Light User Interface Designer (fluid) version 1.0108
 
-#include "../FL/Fl_Help_Dialog.H"
+#include "../fltk3/Fl_Help_Dialog.H"
 #include "flstring.h"
-#include <FL/fl_ask.H>
+#include <fltk3/fl_ask.H>
 
 void Fl_Help_Dialog::cb_back__i(Fl_Button*, void*) {
   if (index_ > 0)
@@ -149,7 +149,7 @@
 Fl_Help_Dialog::Fl_Help_Dialog() {
   { window_ = new Fl_Double_Window(530, 385, "Help Dialog");
     window_->user_data((void*)(this));
-    { Fl_Group* o = new Fl_Group(10, 10, 511, 25);
+    { fltk3::Group* o = new fltk3::Group(10, 10, 511, 25);
       { back_ = new Fl_Button(10, 10, 25, 25, "@<-");
         back_->tooltip("Show the previous help page.");
         back_->shortcut(0xff51);
@@ -174,7 +174,7 @@
         larger_->labelsize(16);
         larger_->callback((Fl_Callback*)cb_larger_);
       } // Fl_Button* larger_
-      { Fl_Group* o = new Fl_Group(350, 10, 171, 25);
+      { fltk3::Group* o = new fltk3::Group(350, 10, 171, 25);
         o->box(FL_DOWN_BOX);
         o->color(FL_BACKGROUND2_COLOR);
         { find_ = new Fl_Input(375, 12, 143, 21, "@search");
@@ -186,16 +186,16 @@
           find_->when(FL_WHEN_ENTER_KEY_ALWAYS);
         } // Fl_Input* find_
         o->end();
-      } // Fl_Group* o
+      } // fltk3::Group* o
       { Fl_Box* o = new Fl_Box(150, 10, 190, 25);
-        Fl_Group::current()->resizable(o);
+        fltk3::Group::current()->resizable(o);
       } // Fl_Box* o
       o->end();
-    } // Fl_Group* o
+    } // fltk3::Group* o
     { view_ = new Fl_Help_View(10, 45, 510, 330);
       view_->box(FL_DOWN_BOX);
       view_->callback((Fl_Callback*)cb_view_);
-      Fl_Group::current()->resizable(view_);
+      fltk3::Group::current()->resizable(view_);
     } // Fl_Help_View* view_
     window_->size_range(260, 150);
     window_->end();

Modified: branches/branch-3.0/src/Fl_Help_View.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Help_View.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Help_View.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -55,14 +55,14 @@
 // Include necessary header files...
 //
 
-#include <FL/Fl_Help_View.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Pixmap.H>
-#include <FL/x.H>
+#include <fltk3/Fl_Help_View.H>
+#include <fltk3/Fl_Window.H>
+#include <fltk3/Fl_Pixmap.H>
+#include <fltk3/x.H>
 #include <stdio.h>
 #include <stdlib.h>
-#include <FL/fl_utf8.h>
-#include <FL/filename.H>	// fl_open_uri()
+#include <fltk3/fl_utf8.h>
+#include <fltk3/filename.H>	// fl_open_uri()
 #include "flstring.h"
 #include <ctype.h>
 #include <errno.h>
@@ -2961,7 +2961,7 @@
       redraw();
       return 1;
     case FL_ENTER :
-      Fl_Group::handle(event);
+      fltk3::Group::handle(event);
       return 1;
     case FL_LEAVE :
       fl_cursor(FL_CURSOR_DEFAULT);
@@ -2971,7 +2971,7 @@
       else fl_cursor(FL_CURSOR_DEFAULT);
       return 1;
     case FL_PUSH:
-      if (Fl_Group::handle(event)) return 1;
+      if (fltk3::Group::handle(event)) return 1;
       linkp = find_link(xx, yy);
       if (linkp) {
         fl_cursor(FL_CURSOR_HAND);
@@ -3022,7 +3022,7 @@
       }
       break; }
   }
-  return (Fl_Group::handle(event));
+  return (fltk3::Group::handle(event));
 }
 
 /** 
@@ -3034,7 +3034,7 @@
 			   int        ww,	// I - Width in pixels
 			   int        hh,	// I - Height in pixels
 			   const char *l)
-    : Fl_Group(xx, yy, ww, hh, l),
+: fltk3::Group(xx, yy, ww, hh, l),
       scrollbar_(xx + ww - fltk3::scrollbar_size(), yy,
                  fltk3::scrollbar_size(), hh - fltk3::scrollbar_size()),
       hscrollbar_(xx, yy + hh - fltk3::scrollbar_size(),

Modified: branches/branch-3.0/src/Fl_Image.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Image.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Image.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -25,12 +25,12 @@
 //     http://www.fltk.org/str.php
 //
 
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-#include <FL/x.H>
-#include <FL/Fl_Widget.H>
-#include <FL/Fl_Menu_Item.H>
-#include <FL/Fl_Image.H>
+#include <fltk3/Fl.H>
+#include <fltk3/fl_draw.H>
+#include <fltk3/x.H>
+#include <fltk3/Fl_Widget.H>
+#include <fltk3/Fl_Menu_Item.H>
+#include <fltk3/Fl_Image.H>
 #include "flstring.h"
 
 #ifdef WIN32

Modified: branches/branch-3.0/src/Fl_Input.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Input.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Input.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -33,11 +33,11 @@
 
 #include <stdio.h>
 #include <stdlib.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Input.H>
-#include <FL/fl_draw.H>
-#include <FL/fl_ask.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Window.H>
+#include <fltk3/Fl_Input.H>
+#include <fltk3/fl_draw.H>
+#include <fltk3/fl_ask.H>
 #include "flstring.h"
 
 #ifdef HAVE_LOCALE_H

Modified: branches/branch-3.0/src/Fl_Input_.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Input_.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Input_.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -25,13 +25,13 @@
 //     http://www.fltk.org/str.php
 //
 
-#include <FL/Fl.H>
-#include <FL/Fl_Input_.H>
-#include <FL/Fl_Window.H>
-#include <FL/fl_draw.H>
-#include <FL/fl_ask.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Input_.H>
+#include <fltk3/Fl_Window.H>
+#include <fltk3/fl_draw.H>
+#include <fltk3/fl_ask.H>
 #include <math.h>
-#include <FL/fl_utf8.h>
+#include <fltk3/fl_utf8.h>
 #include "flstring.h"
 #include <stdlib.h>
 #include <ctype.h>
@@ -1034,7 +1034,7 @@
   Creates a new Fl_Input_ widget.
 
   This function creates a new Fl_Input_ widget and adds it to the current
-  Fl_Group. The value() is set to \c NULL.
+  fltk3::Group. The value() is set to \c NULL.
   The default boxtype is \c FL_DOWN_BOX.
 
   \param X, Y, W, H the dimensions of the new widget
@@ -1217,7 +1217,7 @@
   Destroys the widget.
 
   The destructor clears all allocated buffers and removes the widget
-  from the parent Fl_Group.
+  from the parent fltk3::Group.
 */
 Fl_Input_::~Fl_Input_() {
   if (undowidget == this) undowidget = 0;

Modified: branches/branch-3.0/src/Fl_JPEG_Image.cxx
===================================================================
--- branches/branch-3.0/src/Fl_JPEG_Image.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_JPEG_Image.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -34,7 +34,7 @@
 // Include necessary header files...
 //
 
-#include <FL/Fl_JPEG_Image.H>
+#include <fltk3/Fl_JPEG_Image.H>
 #include <config.h>
 #include <stdio.h>
 #include <stdlib.h>

Modified: branches/branch-3.0/src/Fl_Light_Button.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Light_Button.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Light_Button.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -32,9 +32,9 @@
 // The default down_box of zero draws a rectangle designed to look
 // just like Flame's buttons.
 
-#include <FL/Fl.H>
-#include <FL/Fl_Light_Button.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Light_Button.H>
+#include <fltk3/fl_draw.H>
 #include "flstring.h"
 
 void Fl_Light_Button::draw() {

Modified: branches/branch-3.0/src/Fl_Menu.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Menu.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Menu.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -31,10 +31,10 @@
 // methods for bringing up popup menu hierarchies without using the
 // Fl_Menu_ widget.
 
-#include <FL/Fl.H>
-#include <FL/Fl_Menu_Window.H>
-#include <FL/Fl_Menu_.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Menu_Window.H>
+#include <fltk3/Fl_Menu_.H>
+#include <fltk3/fl_draw.H>
 #include <stdio.h>
 #include "flstring.h"
 
@@ -809,7 +809,7 @@
     const Fl_Menu_* pbutton,
     const Fl_Menu_Item* t,
     int menubar) const {
-  Fl_Group::current(0); // fix possible user error...
+  fltk3::Group::current(0); // fix possible user error...
 
   button = pbutton;
   if (pbutton) {

Modified: branches/branch-3.0/src/Fl_Menu_.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Menu_.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Menu_.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -31,8 +31,8 @@
 
 // More code in Fl_Menu_add.cxx
 
-#include <FL/Fl.H>
-#include <FL/Fl_Menu_.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Menu_.H>
 #include "flstring.h"
 #include <stdio.h>
 #include <stdlib.h>

Modified: branches/branch-3.0/src/Fl_Menu_Bar.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Menu_Bar.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Menu_Bar.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -25,9 +25,9 @@
 //     http://www.fltk.org/str.php
 //
 
-#include <FL/Fl.H>
-#include <FL/Fl_Menu_Bar.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Menu_Bar.H>
+#include <fltk3/fl_draw.H>
 
 void Fl_Menu_Bar::draw() {
   draw_box();

Modified: branches/branch-3.0/src/Fl_Menu_Button.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Menu_Button.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Menu_Button.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -25,9 +25,9 @@
 //     http://www.fltk.org/str.php
 //
 
-#include <FL/Fl.H>
-#include <FL/Fl_Menu_Button.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Menu_Button.H>
+#include <fltk3/fl_draw.H>
 
 
 static Fl_Menu_Button	*pressed_menu_button_ = 0;

Modified: branches/branch-3.0/src/Fl_Menu_Window.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Menu_Window.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Menu_Window.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -33,10 +33,10 @@
 // can be used to dismiss the menus.
 
 #include <config.h>
-#include <FL/Fl.H>
-#include <FL/x.H>
-#include <FL/fl_draw.H>
-#include <FL/Fl_Menu_Window.H>
+#include <fltk3/Fl.H>
+#include <fltk3/x.H>
+#include <fltk3/fl_draw.H>
+#include <fltk3/Fl_Menu_Window.H>
 
 // WIN32 note: HAVE_OVERLAY is false
 #if HAVE_OVERLAY

Modified: branches/branch-3.0/src/Fl_Menu_add.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Menu_add.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Menu_add.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -34,7 +34,7 @@
 // Not at all guaranteed to be Forms compatible, especially with any
 // string with a % sign in it!
 
-#include <FL/Fl_Menu_.H>
+#include <fltk3/Fl_Menu_.H>
 #include "flstring.h"
 #include <stdio.h>
 #include <stdlib.h>

Modified: branches/branch-3.0/src/Fl_Menu_global.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Menu_global.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Menu_global.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -29,8 +29,8 @@
 // Currently only one menu at a time and you cannot destruct the menu,
 // is this sufficient?
 
-#include <FL/Fl.H>
-#include <FL/Fl_Menu_.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Menu_.H>
 
 static Fl_Menu_* the_widget;
 

Modified: branches/branch-3.0/src/Fl_Multi_Label.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Multi_Label.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Multi_Label.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -28,10 +28,10 @@
 // Allows two labels to be used on a widget (by having one of them
 // be one of these it allows an infinte number!)
 
-#include <FL/Fl.H>
-#include <FL/Fl_Widget.H>
-#include <FL/Fl_Menu_Item.H>
-#include <FL/Fl_Multi_Label.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Widget.H>
+#include <fltk3/Fl_Menu_Item.H>
+#include <fltk3/Fl_Multi_Label.H>
 
 static void multi_labeltype(
     const Fl_Label* o, int x, int y, int w, int h, Fl_Align a)

Modified: branches/branch-3.0/src/Fl_Native_File_Chooser_FLTK.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Native_File_Chooser_FLTK.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Native_File_Chooser_FLTK.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -26,8 +26,8 @@
 //     http://www.fltk.org/str.php
 //
 
-#include <FL/Fl_Native_File_Chooser.H>
-#include <FL/Fl_File_Icon.H>
+#include <fltk3/Fl_Native_File_Chooser.H>
+#include <fltk3/Fl_File_Icon.H>
 #define FLTK_CHOOSER_SINGLE    Fl_File_Chooser::SINGLE
 #define FLTK_CHOOSER_DIRECTORY Fl_File_Chooser::DIRECTORY
 #define FLTK_CHOOSER_MULTI     Fl_File_Chooser::MULTI
@@ -68,7 +68,7 @@
   // Added by MG
   Fl_Button *b = _file_chooser->previewButton;
   fltk3::Window *w = b->window();
-  Fl_Group::current(w);		// adds a "Show hidden files" check button in _file_chooser's window
+  fltk3::Group::current(w);		// adds a "Show hidden files" check button in _file_chooser's window
   show_hidden = new Fl_Check_Button(b->x() + b->w() + 10, b->y(), 145, b->h(), "Show hidden files");
   show_hidden->callback((Fl_Callback*)show_hidden_cb, this);
   my_fileList = _file_chooser->browser();

Modified: branches/branch-3.0/src/Fl_Native_File_Chooser_MAC.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Native_File_Chooser_MAC.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Native_File_Chooser_MAC.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -38,9 +38,9 @@
 #include <sys/stat.h>		// stat(2)
 
 
-#include <FL/Fl.H>
-#include <FL/Fl_Native_File_Chooser.H>
-#include <FL/filename.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Native_File_Chooser.H>
+#include <fltk3/filename.H>
 
 // FREE PATHNAMES ARRAY, IF IT HAS ANY CONTENTS
 void Fl_Native_File_Chooser::clear_pathnames() {

Modified: branches/branch-3.0/src/Fl_Overlay_Window.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Overlay_Window.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Overlay_Window.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -29,7 +29,7 @@
   You must subclass Fl_Overlay_Window and provide this method.
   It is just like a draw() method, except it draws the overlay.
   The overlay will have already been "cleared" when this is called.  You
-  can use any of the routines described in &lt;FL/fl_draw.H&gt;.
+  can use any of the routines described in &lt;fltk3/fl_draw.H&gt;.
 */
 
 // A window using double-buffering and able to draw an overlay
@@ -37,10 +37,10 @@
 // possible, otherwise it just draws in the front buffer.
 
 #include <config.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Overlay_Window.H>
-#include <FL/fl_draw.H>
-#include <FL/x.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Overlay_Window.H>
+#include <fltk3/fl_draw.H>
+#include <fltk3/x.H>
 
 void Fl_Overlay_Window::show() {
   Fl_Double_Window::show();
@@ -151,9 +151,9 @@
   if (!fl_display) return; // this prevents fluid -c from opening display
   if (!overlay_) {
     if (can_do_overlay()) {
-      Fl_Group::current(this);
+      fltk3::Group::current(this);
       overlay_ = new _Fl_Overlay(0,0,w(),h());
-      Fl_Group::current(0);
+      fltk3::Group::current(0);
     } else {
       overlay_ = this;	// fake the overlay
     }

Modified: branches/branch-3.0/src/Fl_PNG_Image.cxx
===================================================================
--- branches/branch-3.0/src/Fl_PNG_Image.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_PNG_Image.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -35,12 +35,12 @@
 // Include necessary header files...
 //
 
-#include <FL/Fl.H>
-#include <FL/Fl_PNG_Image.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_PNG_Image.H>
 #include <config.h>
 #include <stdio.h>
 #include <stdlib.h>
-#include <FL/fl_utf8.h>
+#include <fltk3/fl_utf8.h>
 
 extern "C"
 {

Modified: branches/branch-3.0/src/Fl_PNM_Image.cxx
===================================================================
--- branches/branch-3.0/src/Fl_PNM_Image.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_PNM_Image.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -34,11 +34,11 @@
 // Include necessary header files...
 //
 
-#include <FL/Fl.H>
-#include <FL/Fl_PNM_Image.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_PNM_Image.H>
 #include <stdio.h>
 #include <stdlib.h>
-#include <FL/fl_utf8.h>
+#include <fltk3/fl_utf8.h>
 #include "flstring.h"
 
 

Modified: branches/branch-3.0/src/Fl_PS_Printer.cxx
===================================================================
--- branches/branch-3.0/src/Fl_PS_Printer.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_PS_Printer.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -25,12 +25,12 @@
 //     http://www.fltk.org/str.php
 //
 
-#include <FL/Fl.H>
-#include <FL/fl_ask.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/fl_ask.H>
+#include <fltk3/fl_draw.H>
 #include <stdio.h>
-#include <FL/Fl_PSfile_Device.H>
-#include <FL/Fl_Native_File_Chooser.H>
+#include <fltk3/Fl_PSfile_Device.H>
+#include <fltk3/Fl_Native_File_Chooser.H>
 
 const char *Fl_PSfile_Device::file_chooser_title = "Select a .ps file";
 

Modified: branches/branch-3.0/src/Fl_Pack.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Pack.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Pack.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -30,9 +30,9 @@
 // them on each redraw (only if box() is zero)
 // Bugs: ?
 
-#include <FL/Fl.H>
-#include <FL/Fl_Pack.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Pack.H>
+#include <fltk3/fl_draw.H>
 
 /**
   Creates a new Fl_Pack widget using the given position, size,
@@ -45,7 +45,7 @@
   that it is destroyed last.
 */
 Fl_Pack::Fl_Pack(int X, int Y, int W, int H,const char *l)
-: Fl_Group(X, Y, W, H, l) {
+: fltk3::Group(X, Y, W, H, l) {
   resizable(0);
   spacing_ = 0;
   // type(VERTICAL); // already set like this

Modified: branches/branch-3.0/src/Fl_Pixmap.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Pixmap.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Pixmap.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -41,12 +41,12 @@
 // Implemented without using the xpm library (which I can't use because
 // it interferes with the color cube used by fl_draw_image).
 
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-#include <FL/x.H>
-#include <FL/Fl_Widget.H>
-#include <FL/Fl_Menu_Item.H>
-#include <FL/Fl_Pixmap.H>
+#include <fltk3/Fl.H>
+#include <fltk3/fl_draw.H>
+#include <fltk3/x.H>
+#include <fltk3/Fl_Widget.H>
+#include <fltk3/Fl_Menu_Item.H>
+#include <fltk3/Fl_Pixmap.H>
 
 #include <stdio.h>
 #include "flstring.h"

Modified: branches/branch-3.0/src/Fl_Positioner.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Positioner.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Positioner.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -29,9 +29,9 @@
 // The positioner widget from Forms, gives 2D input
 // Written by: Mark Overmars
 
-#include <FL/Fl.H>
-#include <FL/Fl_Positioner.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Positioner.H>
+#include <fltk3/fl_draw.H>
 
 static double flinear(double val, double smin, double smax, double gmin, double gmax)
 {

Modified: branches/branch-3.0/src/Fl_Preferences.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Preferences.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Preferences.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -25,16 +25,16 @@
 //     http://www.fltk.org/str.php
 //
 
-#include <FL/Fl.H>
-#include <FL/Fl_Preferences.H>
-#include <FL/Fl_Plugin.H>
-#include <FL/Fl_Tree.H>
-#include <FL/filename.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Preferences.H>
+#include <fltk3/Fl_Plugin.H>
+#include <fltk3/Fl_Tree.H>
+#include <fltk3/filename.H>
 
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdarg.h>
-#include <FL/fl_utf8.h>
+#include <fltk3/fl_utf8.h>
 #include "flstring.h"
 #include <sys/stat.h>
 #include <time.h>

Modified: branches/branch-3.0/src/Fl_Printer.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Printer.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Printer.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -26,7 +26,7 @@
 //     http://www.fltk.org/str.php
 //
 
-#include <FL/Fl_Printer.H>
+#include <fltk3/Fl_Printer.H>
 
 #ifdef __APPLE__
 #include <src/Fl_Quartz_Printer.mm>

Modified: branches/branch-3.0/src/Fl_Progress.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Progress.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Progress.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -35,9 +35,9 @@
 // Include necessary header files...
 //
 
-#include <FL/Fl.H>
-#include <FL/Fl_Progress.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Progress.H>
+#include <fltk3/fl_draw.H>
 
 
 //

Modified: branches/branch-3.0/src/Fl_Quartz_Printer.mm
===================================================================
--- branches/branch-3.0/src/Fl_Quartz_Printer.mm	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Quartz_Printer.mm	2010-03-30 17:38:49 UTC (rev 7366)
@@ -26,11 +26,11 @@
 //
 
 #ifdef __APPLE__
-#include <FL/Fl_Printer.H>
+#include <fltk3/Fl_Printer.H>
 
-#include <FL/Fl.H>
-#include <FL/fl_ask.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/fl_ask.H>
+#include <fltk3/fl_draw.H>
 #import <Cocoa/Cocoa.h>
 
 extern void fl_quartz_restore_line_style_();

Modified: branches/branch-3.0/src/Fl_Repeat_Button.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Repeat_Button.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Repeat_Button.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -25,8 +25,8 @@
 //     http://www.fltk.org/str.php
 //
 
-#include <FL/Fl.H>
-#include <FL/Fl_Repeat_Button.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Repeat_Button.H>
 
 #define INITIALREPEAT .5
 #define REPEAT .1

Modified: branches/branch-3.0/src/Fl_Return_Button.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Return_Button.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Return_Button.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -25,9 +25,9 @@
 //     http://www.fltk.org/str.php
 //
 
-#include <FL/Fl.H>
-#include <FL/Fl_Return_Button.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Return_Button.H>
+#include <fltk3/fl_draw.H>
 
 int fl_return_arrow(int x, int y, int w, int h) {
   int size = w; if (h<size) size = h;

Modified: branches/branch-3.0/src/Fl_Roller.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Roller.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Roller.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -27,9 +27,9 @@
 
 // Rapid-App style knob
 
-#include <FL/Fl.H>
-#include <FL/Fl_Roller.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Roller.H>
+#include <fltk3/fl_draw.H>
 #include <math.h>
 
 int Fl_Roller::handle(int event) {

Modified: branches/branch-3.0/src/Fl_Round_Button.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Round_Button.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Round_Button.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -29,8 +29,8 @@
 // circle is smaller than the widget size and can be surrounded by
 // another box type, for compatibility with Forms.
 
-#include <FL/Fl.H>
-#include <FL/Fl_Round_Button.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Round_Button.H>
 
 /**
   Creates a new Fl_Round_Button widget using the given

Modified: branches/branch-3.0/src/Fl_Scroll.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Scroll.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Scroll.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -25,10 +25,10 @@
 //     http://www.fltk.org/str.php
 //
 
-#include <FL/Fl.H>
-#include <FL/Fl_Tiled_Image.H>
-#include <FL/Fl_Scroll.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Tiled_Image.H>
+#include <fltk3/Fl_Scroll.H>
+#include <fltk3/fl_draw.H>
 
 /** Clear all but the scrollbars... */
 void Fl_Scroll::clear() {
@@ -73,7 +73,7 @@
     case _FL_OVAL_FRAME :
     case _FL_PLASTIC_UP_FRAME :
     case _FL_PLASTIC_DOWN_FRAME :
-        if (s->parent() == (Fl_Group *)s->window() && fltk3::scheme_bg_) {
+      if (s->parent() == (fltk3::Group *)s->window() && fltk3::scheme_bg_) {
 	  fltk3::scheme_bg_->draw(X-(X%((Fl_Tiled_Image *)fltk3::scheme_bg_)->image()->w()),
 	                       Y-(Y%((Fl_Tiled_Image *)fltk3::scheme_bg_)->image()->h()),
 	                       W+((Fl_Tiled_Image *)fltk3::scheme_bg_)->image()->w(),
@@ -369,7 +369,7 @@
     if (o == &hscrollbar || o == &scrollbar) continue;
     o->position(o->x()+dx, o->y()+dy);
   }
-  if (parent() == (Fl_Group *)window() && fltk3::scheme_bg_) damage(FL_DAMAGE_ALL);
+  if (parent() == (fltk3::Group *)window() && fltk3::scheme_bg_) damage(FL_DAMAGE_ALL);
   else damage(FL_DAMAGE_SCROLL);
 }
 
@@ -393,7 +393,7 @@
   that it is destroyed last.
 */
 Fl_Scroll::Fl_Scroll(int X,int Y,int W,int H,const char* L)
-  : Fl_Group(X,Y,W,H,L), 
+: fltk3::Group(X,Y,W,H,L), 
     scrollbar(X+W-fltk3::scrollbar_size(),Y,
               fltk3::scrollbar_size(),H-fltk3::scrollbar_size()),
     hscrollbar(X,Y+H-fltk3::scrollbar_size(),
@@ -409,7 +409,7 @@
 
 int Fl_Scroll::handle(int event) {
   fix_scrollbar_order();
-  return Fl_Group::handle(event);
+  return fltk3::Group::handle(event);
 }
 
 //

Modified: branches/branch-3.0/src/Fl_Scrollbar.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Scrollbar.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Scrollbar.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -26,9 +26,9 @@
 //
 
 
-#include <FL/Fl.H>
-#include <FL/Fl_Scrollbar.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Scrollbar.H>
+#include <fltk3/fl_draw.H>
 #include <math.h>
 #include "flstring.h"
 

Modified: branches/branch-3.0/src/Fl_Shared_Image.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Shared_Image.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Shared_Image.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -27,13 +27,13 @@
 
 #include <stdio.h>
 #include <stdlib.h>
-#include <FL/fl_utf8.h>
+#include <fltk3/fl_utf8.h>
 #include "flstring.h"
 
-#include <FL/Fl.H>
-#include <FL/Fl_Shared_Image.H>
-#include <FL/Fl_XBM_Image.H>
-#include <FL/Fl_XPM_Image.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Shared_Image.H>
+#include <fltk3/Fl_XBM_Image.H>
+#include <fltk3/Fl_XPM_Image.H>
 
 
 //

Modified: branches/branch-3.0/src/Fl_Single_Window.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Single_Window.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Single_Window.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -31,7 +31,7 @@
 //	buffered.  You can turn it off using this subclass in case
 //	your display looks better without it.
 
-#include <FL/Fl_Single_Window.H>
+#include <fltk3/Fl_Single_Window.H>
 
 void Fl_Single_Window::show() {fltk3::Window::show();}
 void Fl_Single_Window::flush() {fltk3::Window::flush();}

Modified: branches/branch-3.0/src/Fl_Slider.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Slider.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Slider.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -25,9 +25,9 @@
 //     http://www.fltk.org/str.php
 //
 
-#include <FL/Fl.H>
-#include <FL/Fl_Slider.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Slider.H>
+#include <fltk3/fl_draw.H>
 #include <math.h>
 #include "flstring.h"
 

Modified: branches/branch-3.0/src/Fl_Sys_Menu_Bar.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Sys_Menu_Bar.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Sys_Menu_Bar.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -54,9 +54,9 @@
 
 #if defined(__APPLE__) || defined(FL_DOXYGEN)
 
-#include <FL/x.H>
-#include <FL/Fl.H>
-#include <FL/Fl_Sys_Menu_Bar.H>
+#include <fltk3/x.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Sys_Menu_Bar.H>
 
 #include "flstring.h"
 #include <stdio.h>

Modified: branches/branch-3.0/src/Fl_Table.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Table.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Table.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -23,11 +23,11 @@
 //
 
 #include <stdio.h>		// fprintf
-#include <FL/fl_draw.H>
-#include <FL/Fl_Table.H>
+#include <fltk3/fl_draw.H>
+#include <fltk3/Fl_Table.H>
 
 #if defined(USE_UTF8) && ( defined(MICROSOFT) || defined(LINUX) )
-#include <FL/fl_utf8.H>	// currently only Windows and Linux
+#include <fltk3/fl_utf8.H>	// currently only Windows and Linux
 #endif
 
 #define SCROLLBAR_SIZE	16
@@ -99,7 +99,7 @@
 }
 
 // Ctor
-Fl_Table::Fl_Table(int X, int Y, int W, int H, const char *l) : Fl_Group(X,Y,W,H,l) {
+Fl_Table::Fl_Table(int X, int Y, int W, int H, const char *l) : fltk3::Group(X,Y,W,H,l) {
   _rows             = 0;
   _cols             = 0;
   _row_header_w     = 40;
@@ -157,14 +157,14 @@
   table_resized();
   redraw();
   
-  Fl_Group::end();		// end the group's begin()
+  fltk3::Group::end();		// end the group's begin()
   
   table->begin();		// leave with fltk children getting added to the scroll
 }
 
 // Dtor
 Fl_Table::~Fl_Table() {
-  // The parent Fl_Group takes care of destroying scrollbars
+  // The parent fltk3::Group takes care of destroying scrollbars
 }
 
 // Set height of a row
@@ -578,7 +578,7 @@
   }
   
   // Tell FLTK child widgets were resized
-  Fl_Group::init_sizes();
+  fltk3::Group::init_sizes();
   
   // Recalc top/bot/left/right
   table_scrolled();
@@ -700,7 +700,7 @@
 // Handle FLTK events
 int Fl_Table::handle(int event) {
   PRINTEVENT;
-  int ret = Fl_Group::handle(event);	// let FLTK group handle events first
+  int ret = fltk3::Group::handle(event);	// let FLTK group handle events first
   if (ret) {
     if (fltk3::event_inside(hscrollbar) || fltk3::event_inside(vscrollbar)) return 1;
     if (fltk3::focus() != this && contains(fltk3::focus())) return 1;
@@ -1021,7 +1021,7 @@
 //
 void Fl_Table::resize(int X, int Y, int W, int H) {
   // Tell group to resize, and recalc our own widget as well
-  Fl_Group::resize(X, Y, W, H);
+  fltk3::Group::resize(X, Y, W, H);
   table_resized();
   redraw();
 }
@@ -1098,7 +1098,7 @@
   //
   fl_push_clip(wix, wiy, wiw, wih);
   {
-    Fl_Group::draw();
+    fltk3::Group::draw();
   }
   fl_pop_clip();
   
@@ -1106,7 +1106,7 @@
   draw_box(box(), x(), y(), w(), h(), color());
   
   // If Fl_Scroll 'table' is hidden, draw its box
-  //    Do this after Fl_Group::draw() so we draw over scrollbars
+  //    Do this after fltk3::Group::draw() so we draw over scrollbars
   //    that leak around the border.
   //
   if ( ! table->visible() ) {

Modified: branches/branch-3.0/src/Fl_Table_Row.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Table_Row.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Table_Row.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -31,9 +31,9 @@
 //
 
 #include <stdio.h>		// for debugging
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-#include <FL/Fl_Table_Row.H>
+#include <fltk3/Fl.H>
+#include <fltk3/fl_draw.H>
+#include <fltk3/Fl_Table_Row.H>
 
 // Is row selected?
 int Fl_Table_Row::row_selected(int row) {

Modified: branches/branch-3.0/src/Fl_Tabs.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Tabs.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Tabs.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -33,10 +33,10 @@
 // Clicking the tab makes that card visible.
 
 #include <stdio.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Tabs.H>
-#include <FL/fl_draw.H>
-#include <FL/Fl_Tooltip.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Tabs.H>
+#include <fltk3/fl_draw.H>
+#include <fltk3/Fl_Tooltip.H>
 
 #define BORDER 2
 #define EXTRASPACE 10
@@ -147,9 +147,9 @@
   case FL_PUSH: {
     int H = tab_height();
     if (H >= 0) {
-      if (fltk3::event_y() > y()+H) return Fl_Group::handle(event);
+      if (fltk3::event_y() > y()+H) return fltk3::Group::handle(event);
     } else {
-      if (fltk3::event_y() < y()+h()+H) return Fl_Group::handle(event);
+      if (fltk3::event_y() < y()+h()+H) return fltk3::Group::handle(event);
     }}
     /* FALLTHROUGH */
   case FL_DRAG:
@@ -173,7 +173,7 @@
     }
     return 1;
   case FL_MOVE: {
-    int ret = Fl_Group::handle(event);
+    int ret = fltk3::Group::handle(event);
     fltk3::Widget *o = Fl_Tooltip::current(), *n = o;
     int H = tab_height();
     if ( (H>=0) && (fltk3::event_y()>y()+H) )
@@ -189,7 +189,7 @@
     return ret; }
   case FL_FOCUS:
   case FL_UNFOCUS:
-    if (!fltk3::visible_focus()) return Fl_Group::handle(event);
+      if (!fltk3::visible_focus()) return fltk3::Group::handle(event);
     if (fltk3::event() == FL_RELEASE ||
 	fltk3::event() == FL_SHORTCUT ||
 	fltk3::event() == FL_KEYBOARD ||
@@ -198,7 +198,7 @@
       redraw_tabs();
       if (fltk3::event() == FL_FOCUS || fltk3::event() == FL_UNFOCUS) return 0;
       else return 1;
-    } else return Fl_Group::handle(event);
+    } else return fltk3::Group::handle(event);
   case FL_KEYBOARD:
     switch (fltk3::event_key()) {
       case FL_Left:
@@ -219,11 +219,11 @@
         return 1;
       case FL_Down:
         redraw();
-        return Fl_Group::handle(FL_FOCUS);
+        return fltk3::Group::handle(FL_FOCUS);
       default:
         break;
     }
-    return Fl_Group::handle(event);
+      return fltk3::Group::handle(event);
   case FL_SHORTCUT:
     for (i = 0; i < children(); ++i) {
       fltk3::Widget *c = child(i);
@@ -235,11 +235,11 @@
         return 1;
       }
     }
-    return Fl_Group::handle(event);
+      return fltk3::Group::handle(event);
   case FL_SHOW:
     value(); // update visibilities and fall through
   default:
-    return Fl_Group::handle(event);
+      return fltk3::Group::handle(event);
 
   }
 }
@@ -407,7 +407,7 @@
 
     <P>Use add(fltk3::Widget
     *) to add each child, which are usually
-    Fl_Group widgets. The children should be sized to stay
+    fltk3::Group widgets. The children should be sized to stay
     away from the top or bottom edge of the Fl_Tabs widget,
     which is where the tabs will be drawn.
 
@@ -419,7 +419,7 @@
     Fl_Tabs widget <I>first</I> so that it is destroyed last.
 */
 Fl_Tabs::Fl_Tabs(int X,int Y,int W, int H, const char *l) :
-  Fl_Group(X,Y,W,H,l)
+fltk3::Group(X,Y,W,H,l)
 {
   box(FL_THIN_UP_BOX);
   push_ = 0;

Modified: branches/branch-3.0/src/Fl_Text_Buffer.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Text_Buffer.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Text_Buffer.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -27,11 +27,11 @@
 
 #include <stdio.h>
 #include <stdlib.h>
-#include <FL/fl_utf8.h>
+#include <fltk3/fl_utf8.h>
 #include "flstring.h"
 #include <ctype.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Text_Buffer.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Text_Buffer.H>
 
 
 static void histogramCharacters(const char *string, int length, char hist[ 256 ],

Modified: branches/branch-3.0/src/Fl_Text_Display.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Text_Display.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Text_Display.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -27,14 +27,14 @@
 
 #include <stdio.h>
 #include <stdlib.h>
-#include <FL/fl_utf8.h>
+#include <fltk3/fl_utf8.h>
 #include "flstring.h"
 #include <limits.h>
 #include <ctype.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Text_Buffer.H>
-#include <FL/Fl_Text_Display.H>
-#include <FL/Fl_Window.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Text_Buffer.H>
+#include <fltk3/Fl_Text_Display.H>
+#include <fltk3/Fl_Window.H>
 
 #undef min
 #undef max
@@ -79,7 +79,7 @@
 
 /**  Creates a new text display widget.*/
 Fl_Text_Display::Fl_Text_Display(int X, int Y, int W, int H,  const char* l)
-    : Fl_Group(X, Y, W, H, l) {
+: fltk3::Group(X, Y, W, H, l) {
   int i;
 
   mMaxsize = 0;
@@ -3239,7 +3239,7 @@
       !dragging && event != FL_LEAVE && event != FL_ENTER &&
       event != FL_MOVE && event != FL_FOCUS && event != FL_UNFOCUS &&
       event != FL_KEYBOARD && event != FL_KEYUP) {
-    return Fl_Group::handle(event);
+    return fltk3::Group::handle(event);
   }
 
   switch (event) {
@@ -3275,7 +3275,7 @@
 	  fltk3::focus(this);
 	  handle(FL_FOCUS);
 	}
-        if (Fl_Group::handle(event)) return 1;
+      if (fltk3::Group::handle(event)) return 1;
         if (fltk3::event_state()&FL_SHIFT) return handle(FL_DRAG);
         dragging = 1;
         int pos = xy_to_position(fltk3::event_x(), fltk3::event_y(), CURSOR_POS);

Modified: branches/branch-3.0/src/Fl_Text_Editor.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Text_Editor.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Text_Editor.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -29,10 +29,10 @@
 #include <stdlib.h>
 #include "flstring.h"
 #include <ctype.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Text_Editor.H>
-#include <FL/fl_ask.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Window.H>
+#include <fltk3/Fl_Text_Editor.H>
+#include <fltk3/fl_ask.H>
 
 
 /* Keyboard Control Matrix
@@ -590,7 +590,7 @@
     case FL_PUSH:
       if (fltk3::event_button() == 2) {
         // don't let the text_display see this event
-        if (Fl_Group::handle(event)) return 1;
+        if (fltk3::Group::handle(event)) return 1;
         dragType = -1;
         fltk3::paste(*this, 0);
         fltk3::focus(this);

Modified: branches/branch-3.0/src/Fl_Tile.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Tile.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Tile.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -30,9 +30,9 @@
 // The size of the first child determines where the resize border is.
 // The resizebox is used to limit where the border can be dragged to.
 
-#include <FL/Fl.H>
-#include <FL/Fl_Tile.H>
-#include <FL/Fl_Window.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Tile.H>
+#include <fltk3/Fl_Window.H>
 #include <stdlib.h>
 
 // Drag the edges that were initially at oldx,oldy to newx,newy:
@@ -70,7 +70,7 @@
 
 // move the lower-right corner (sort of):
 void Fl_Tile::resize(int X,int Y,int W,int H) {
-  //Fl_Group::resize(X, Y, W, H);
+  //fltk3::Group::resize(X, Y, W, H);
   //return;
   // remember how much to move the child widgets:
   int dx = X-x();
@@ -78,7 +78,7 @@
   int dw = W-w();
   int dh = H-h();
   int *p = sizes();
-  // resize this (skip the Fl_Group resize):
+  // resize this (skip the fltk3::Group resize):
   fltk3::Widget::resize(X,Y,W,H);
   // find bottom-right of resiable:
   int OR = p[5];
@@ -172,7 +172,7 @@
     if (mindy <= GRABAREA) {sdrag |= DRAGV; sy = oldy;}
     set_cursor(this, cursors[sdrag]);
     if (sdrag) return 1;
-    return Fl_Group::handle(event);
+      return fltk3::Group::handle(event);
   }
 
   case FL_LEAVE:
@@ -206,7 +206,7 @@
 
   }
 
-  return Fl_Group::handle(event);
+  return fltk3::Group::handle(event);
 }
 
 //

Modified: branches/branch-3.0/src/Fl_Tiled_Image.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Tiled_Image.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Tiled_Image.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -26,9 +26,9 @@
 //
 
 
-#include <FL/Fl.H>
-#include <FL/Fl_Tiled_Image.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Tiled_Image.H>
+#include <fltk3/fl_draw.H>
 
 /**
   The constructors create a new tiled image containing the specified image.

Modified: branches/branch-3.0/src/Fl_Tooltip.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Tooltip.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Tooltip.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -25,9 +25,9 @@
 //     http://www.fltk.org/str.php
 //
 
-#include <FL/Fl_Tooltip.H>
-#include <FL/fl_draw.H>
-#include <FL/Fl_Menu_Window.H>
+#include <fltk3/Fl_Tooltip.H>
+#include <fltk3/fl_draw.H>
+#include <fltk3/Fl_Menu_Window.H>
 
 #include <stdio.h>
 

Modified: branches/branch-3.0/src/Fl_Tree.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Tree.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Tree.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -6,7 +6,7 @@
 #include <stdlib.h>
 #include <string.h>
 
-#include <FL/Fl_Tree.H>
+#include <fltk3/Fl_Tree.H>
 
 #define SCROLL_W 15
 
@@ -77,7 +77,7 @@
 }
 
 /// Constructor.
-Fl_Tree::Fl_Tree(int X, int Y, int W, int H, const char *L) : Fl_Group(X,Y,W,H,L) { 
+Fl_Tree::Fl_Tree(int X, int Y, int W, int H, const char *L) : fltk3::Group(X,Y,W,H,L) { 
   _root = new Fl_Tree_Item(_prefs);
   _root->parent(0);				// we are root of tree
   _root->label("ROOT");
@@ -166,8 +166,8 @@
   // Let group draw box+label but *NOT* children.
   // We handle drawing children ourselves by calling each item's draw()
   //
-  Fl_Group::draw_box();
-  Fl_Group::draw_label();
+  fltk3::Group::draw_box();
+  fltk3::Group::draw_label();
   if ( ! _root ) return;
   int cx = x() + fltk3::box_dx(box());
   int cy = y() + fltk3::box_dy(box());
@@ -209,7 +209,7 @@
     _vscroll->hide();
   }
   fl_push_clip(cx,cy,cw,ch);
-  Fl_Group::draw_children();	// draws any FLTK children set via Fl_Tree::widget()
+  fltk3::Group::draw_children();	// draws any FLTK children set via Fl_Tree::widget()
   fl_pop_clip();
 }
 
@@ -217,7 +217,7 @@
 int Fl_Tree::handle(int e) {
   static Fl_Tree_Item *lastselect = 0;
   int changed = 0;
-  int ret = Fl_Group::handle(e);
+  int ret = fltk3::Group::handle(e);
   if ( ! _root ) return(ret);
   switch ( e ) {
     case FL_PUSH: {

Modified: branches/branch-3.0/src/Fl_Tree_Item.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Tree_Item.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Tree_Item.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -5,9 +5,9 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <FL/Fl_Widget.H>
-#include <FL/Fl_Tree_Item.H>
-#include <FL/Fl_Tree_Prefs.H>
+#include <fltk3/Fl_Widget.H>
+#include <fltk3/Fl_Tree_Item.H>
+#include <fltk3/Fl_Tree_Prefs.H>
 
 //////////////////////
 // Fl_Tree_Item.cxx
@@ -74,7 +74,7 @@
     free((void*)_label);
     _label = 0;
   }
-  _widget = 0;			// Fl_Group will handle destruction
+  _widget = 0;			// fltk3::Group will handle destruction
   _usericon = 0;		// user handled allocation
   //_children.clear();		// array's destructor handles itself
 }

Modified: branches/branch-3.0/src/Fl_Tree_Item_Array.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Tree_Item_Array.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Tree_Item_Array.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -6,8 +6,8 @@
 #include <stdlib.h>
 #include <string.h>
 
-#include <FL/Fl_Tree_Item_Array.H>
-#include <FL/Fl_Tree_Item.H>
+#include <fltk3/Fl_Tree_Item_Array.H>
+#include <fltk3/Fl_Tree_Item.H>
 
 //////////////////////
 // Fl_Tree_Item_Array.cxx

Modified: branches/branch-3.0/src/Fl_Tree_Prefs.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Tree_Prefs.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Tree_Prefs.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -2,9 +2,9 @@
 // "$Id$"
 //
 
-#include <FL/Fl.H>
-#include <FL/Fl_Pixmap.H>
-#include <FL/Fl_Tree_Prefs.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Pixmap.H>
+#include <fltk3/Fl_Tree_Prefs.H>
 #include <string.h>
 
 //////////////////////

Modified: branches/branch-3.0/src/Fl_Valuator.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Valuator.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Valuator.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -28,9 +28,9 @@
 
 // Base class for sliders and all other one-value "knobs"
 
-#include <FL/Fl.H>
-#include <FL/Fl_Valuator.H>
-#include <FL/math.h>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Valuator.H>
+#include <fltk3/math.h>
 #include <stdio.h>
 #include "flstring.h"
 

Modified: branches/branch-3.0/src/Fl_Value_Input.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Value_Input.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Value_Input.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -27,13 +27,13 @@
 
 // FLTK widget for drag-adjusting a floating point value.
 // Warning: this works by making a child Fl_Input object, even
-// though this object is *not* an Fl_Group.  May be a kludge?
+// though this object is *not* an fltk3::Group.  May be a kludge?
 
-#include <FL/Fl.H>
-#include <FL/Fl_Value_Input.H>
-#include <FL/Fl_Group.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Value_Input.H>
+#include <fltk3/Fl_Group.H>
 #include <stdlib.h>
-#include <FL/math.h>
+#include <fltk3/math.h>
 
 
 void Fl_Value_Input::input_cb(fltk3::Widget*, void* v) {
@@ -127,7 +127,7 @@
   soft_ = 0;
   if (input.parent())  // defeat automatic-add
     input.parent()->remove(input);
-  input.parent((Fl_Group *)this); // kludge!
+  input.parent((fltk3::Group *)this); // kludge!
   input.callback(input_cb, this);
   input.when(FL_WHEN_CHANGED);
   box(input.box());
@@ -140,7 +140,7 @@
 
 Fl_Value_Input::~Fl_Value_Input() {
 
-  if (input.parent() == (Fl_Group *)this)
+  if (input.parent() == (fltk3::Group *)this)
     input.parent(0);   // *revert* ctor kludge!
 }
 

Modified: branches/branch-3.0/src/Fl_Value_Output.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Value_Output.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Value_Output.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -29,9 +29,9 @@
 // This is much lighter than Fl_Value_Input because it has no text editor
 // If step() is zero then it can be used to display a floating-point value
 
-#include <FL/Fl.H>
-#include <FL/Fl_Value_Output.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Value_Output.H>
+#include <fltk3/fl_draw.H>
 
 void Fl_Value_Output::draw() {
   Fl_Boxtype b = box() ? box() : FL_DOWN_BOX;

Modified: branches/branch-3.0/src/Fl_Value_Slider.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Value_Slider.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Value_Slider.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -25,9 +25,9 @@
 //     http://www.fltk.org/str.php
 //
 
-#include <FL/Fl.H>
-#include <FL/Fl_Value_Slider.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Value_Slider.H>
+#include <fltk3/fl_draw.H>
 #include <math.h>
 
 /**

Modified: branches/branch-3.0/src/Fl_Widget.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Widget.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Widget.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -25,11 +25,11 @@
 //     http://www.fltk.org/str.php
 //
 
-#include <FL/Fl.H>
-#include <FL/Fl_Widget.H>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Tooltip.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Widget.H>
+#include <fltk3/Fl_Group.H>
+#include <fltk3/Fl_Tooltip.H>
+#include <fltk3/fl_draw.H>
 #include <stdlib.h>
 #include "flstring.h"
 
@@ -134,7 +134,7 @@
   when_		 = FL_WHEN_RELEASE;
 
   parent_ = 0;
-  if (Fl_Group::current()) Fl_Group::current()->add(this);
+  if (fltk3::Group::current()) fltk3::Group::current()->add(this);
 }
 
 void fltk3::Widget::resize(int X, int Y, int W, int H) {

Modified: branches/branch-3.0/src/Fl_Window.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Window.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Window.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -30,14 +30,14 @@
 // crap you need to do to communicate with X is in Fl_x.cxx, the
 // equivalent (but totally different) crap for MSWindows is in Fl_win32.cxx
 #include "config.h"
-#include <FL/Fl.H>
-#include <FL/x.H>
-#include <FL/Fl_Window.H>
+#include <fltk3/Fl.H>
+#include <fltk3/x.H>
+#include <fltk3/Fl_Window.H>
 #include <stdlib.h>
 #include "flstring.h"
 
 #ifdef __APPLE_QUARTZ__
-#include <FL/fl_draw.H>
+#include <fltk3/fl_draw.H>
 #endif
 
 void fltk3::Window::_Fl_Window() {
@@ -61,7 +61,7 @@
 }
 
 fltk3::Window::Window(int X,int Y,int W, int H, const char *l)
-: Fl_Group(X, Y, W, H, l) {
+: fltk3::Group(X, Y, W, H, l) {
   cursor_default = FL_CURSOR_DEFAULT;
   cursor_fg      = FL_BLACK;
   cursor_bg      = FL_WHITE;
@@ -72,7 +72,7 @@
 
 fltk3::Window::Window(int W, int H, const char *l)
 // fix common user error of a missing end() with current(0):
-  : Fl_Group((Fl_Group::current(0),0), 0, W, H, l) {
+: fltk3::Group((fltk3::Group::current(0),0), 0, W, H, l) {
   cursor_default = FL_CURSOR_DEFAULT;
   cursor_fg      = FL_BLACK;
   cursor_bg      = FL_WHITE;
@@ -101,7 +101,7 @@
 
 void fltk3::Window::draw() {
 
-  // The following is similar to Fl_Group::draw(), but ...
+  // The following is similar to fltk3::Group::draw(), but ...
   //  - we draw the box with x=0 and y=0 instead of x() and y()
   //  - we don't draw a label
 

Modified: branches/branch-3.0/src/Fl_Window_fullscreen.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Window_fullscreen.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Window_fullscreen.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -35,8 +35,8 @@
 // the window full screen will lose the size of the border off the
 // bottom and right.
 
-#include <FL/Fl.H>
-#include <FL/x.H>
+#include <fltk3/Fl.H>
+#include <fltk3/x.H>
 
 #include <config.h>
 

Modified: branches/branch-3.0/src/Fl_Window_hotspot.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Window_hotspot.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Window_hotspot.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -25,9 +25,9 @@
 //     http://www.fltk.org/str.php
 //
 
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/x.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Window.H>
+#include <fltk3/x.H>
 #include <stdio.h>
 
 void fltk3::Window::hotspot(int X, int Y, int offscreen) {

Modified: branches/branch-3.0/src/Fl_Window_iconize.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Window_iconize.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Window_iconize.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -25,7 +25,7 @@
 //     http://www.fltk.org/str.php
 //
 
-#include <FL/x.H>
+#include <fltk3/x.H>
 
 extern char fl_show_iconic; // in Fl_x.cxx
 

Modified: branches/branch-3.0/src/Fl_Wizard.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Wizard.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_Wizard.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -39,9 +39,9 @@
 // Include necessary header files...
 //
 
-#include <FL/Fl_Wizard.H>
-#include <FL/Fl_Window.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl_Wizard.H>
+#include <fltk3/Fl_Window.H>
+#include <fltk3/fl_draw.H>
 
 
 //
@@ -58,7 +58,7 @@
 		     int        ww,	// I - Width
 		     int        hh,	// I - Height
 		     const char *l) :	// I - Label
-    Fl_Group(xx, yy, ww, hh, l)
+fltk3::Group(xx, yy, ww, hh, l)
 {
   box(FL_THIN_UP_BOX);
 

Modified: branches/branch-3.0/src/Fl_XBM_Image.cxx
===================================================================
--- branches/branch-3.0/src/Fl_XBM_Image.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_XBM_Image.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -33,11 +33,11 @@
 // Include necessary header files...
 //
 
-#include <FL/Fl.H>
-#include <FL/Fl_XBM_Image.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_XBM_Image.H>
 #include <stdio.h>
 #include <stdlib.h>
-#include <FL/fl_utf8.h>
+#include <fltk3/fl_utf8.h>
 #include "flstring.h"
 
 //

Modified: branches/branch-3.0/src/Fl_XPM_Image.cxx
===================================================================
--- branches/branch-3.0/src/Fl_XPM_Image.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_XPM_Image.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -32,11 +32,11 @@
 // Include necessary header files...
 //
 
-#include <FL/Fl.H>
-#include <FL/Fl_XPM_Image.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_XPM_Image.H>
 #include <stdio.h>
 #include <stdlib.h>
-#include <FL/fl_utf8.h>
+#include <fltk3/fl_utf8.h>
 #include "flstring.h"
 
 

Modified: branches/branch-3.0/src/Fl_abort.cxx
===================================================================
--- branches/branch-3.0/src/Fl_abort.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_abort.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -29,7 +29,7 @@
 // do not need to be included in Fl.cxx:
 // You can also override this by redefining all of these.
 
-#include <FL/Fl.H>
+#include <fltk3/Fl.H>
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdarg.h>

Modified: branches/branch-3.0/src/Fl_add_idle.cxx
===================================================================
--- branches/branch-3.0/src/Fl_add_idle.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_add_idle.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -28,7 +28,7 @@
 // Allows you to manage an arbitrary set of idle() callbacks.
 // Replaces the older set_idle() call (which is used to implement this)
 
-#include <FL/Fl.H>
+#include <fltk3/Fl.H>
 
 struct idle_cb {
   void (*cb)(void*);

Modified: branches/branch-3.0/src/Fl_arg.cxx
===================================================================
--- branches/branch-3.0/src/Fl_arg.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_arg.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -28,12 +28,12 @@
 // OPTIONAL initialization code for a program using fltk.
 // You do not need to call this!  Feel free to make up your own switches.
 
-#include <FL/Fl.H>
-#include <FL/x.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Tooltip.H>
-#include <FL/filename.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/x.H>
+#include <fltk3/Fl_Window.H>
+#include <fltk3/Fl_Tooltip.H>
+#include <fltk3/filename.H>
+#include <fltk3/fl_draw.H>
 #include <ctype.h>
 #include "flstring.h"
 

Modified: branches/branch-3.0/src/Fl_cocoa.mm
===================================================================
--- branches/branch-3.0/src/Fl_cocoa.mm	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_cocoa.mm	2010-03-30 17:38:49 UTC (rev 7366)
@@ -77,13 +77,13 @@
 }
 
 
-#include <FL/Fl.H>
-#include <FL/x.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Tooltip.H>
-#include <FL/Fl_Sys_Menu_Bar.H>
-#include <FL/Fl_Printer.H>
-#include <FL/Fl_Input_.H>
+#include <fltk3/Fl.H>
+#include <fltk3/x.H>
+#include <fltk3/Fl_Window.H>
+#include <fltk3/Fl_Tooltip.H>
+#include <fltk3/Fl_Sys_Menu_Bar.H>
+#include <fltk3/Fl_Printer.H>
+#include <fltk3/Fl_Input_.H>
 #include <stdio.h>
 #include <stdlib.h>
 #include "flstring.h"
@@ -2054,7 +2054,7 @@
 {
   static int xyPos = 100;
   if ( w->parent() ) {		// create a subwindow
-    Fl_Group::current(0);
+    fltk3::Group::current(0);
     // our subwindow needs this structure to know about its clipping. 
     Fl_X* x = new Fl_X;
     x->other_xid = 0;
@@ -2086,7 +2086,7 @@
   else {			// create a desktop window
     NSAutoreleasePool *localPool;
     localPool = [[NSAutoreleasePool alloc] init]; 
-    Fl_Group::current(0);
+    fltk3::Group::current(0);
     fl_open_display();
     NSInteger winlevel = NSNormalWindowLevel;
     NSUInteger winstyle;
@@ -2356,7 +2356,7 @@
   }
   resize_from_system = 0;
   if (is_a_resize) {
-    Fl_Group::resize(X,Y,W,H);
+    fltk3::Group::resize(X,Y,W,H);
     if (shown()) { 
       redraw(); 
     }

Modified: branches/branch-3.0/src/Fl_compose.cxx
===================================================================
--- branches/branch-3.0/src/Fl_compose.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_compose.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -25,8 +25,8 @@
 //     http://www.fltk.org/str.php
 //
 
-#include <FL/Fl.H>
-#include <FL/x.H>
+#include <fltk3/Fl.H>
+#include <fltk3/x.H>
 
 //
 // MRS: Uncomment the following define to get the original (pre-1.1.2)

Modified: branches/branch-3.0/src/Fl_display.cxx
===================================================================
--- branches/branch-3.0/src/Fl_display.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_display.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -28,7 +28,7 @@
 // Startup method to set what display to use.
 // Using setenv makes programs that are exec'd use the same display.
 
-#include <FL/Fl.H>
+#include <fltk3/Fl.H>
 #include <stdlib.h>
 #include "flstring.h"
 

Modified: branches/branch-3.0/src/Fl_get_key.cxx
===================================================================
--- branches/branch-3.0/src/Fl_get_key.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_get_key.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -35,8 +35,8 @@
 // keys (mostly) by the X keysym.  So this turns the keysym into a keycode
 // and looks it up in the X key bit vector, which Fl_x.cxx keeps track of.
 
-#  include <FL/Fl.H>
-#  include <FL/x.H>
+#  include <fltk3/Fl.H>
+#  include <fltk3/x.H>
 
 extern char fl_key_vector[32]; // in Fl_x.cxx
 

Modified: branches/branch-3.0/src/Fl_get_key_mac.cxx
===================================================================
--- branches/branch-3.0/src/Fl_get_key_mac.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_get_key_mac.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -29,8 +29,8 @@
 // which are actually X keysyms.  So this has to translate to macOS
 // symbols.
 
-#include <FL/Fl.H>
-#include <FL/x.H>
+#include <fltk3/Fl.H>
+#include <fltk3/x.H>
 #include <config.h>
 
 // convert an FLTK (X) keysym to a MacOS symbol:

Modified: branches/branch-3.0/src/Fl_get_key_win32.cxx
===================================================================
--- branches/branch-3.0/src/Fl_get_key_win32.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_get_key_win32.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -29,8 +29,8 @@
 // which are actually X keysyms.  So this has to translate to MSWindows
 // VK_x symbols.
 
-#include <FL/fltk3.H>
-#include <FL/x.H>
+#include <fltk3/fltk3.H>
+#include <fltk3/x.H>
 
 // convert an Fltk (X) keysym to a MSWindows VK symbol:
 // See also the inverse converter in Fl_win32.cxx

Modified: branches/branch-3.0/src/Fl_get_system_colors.cxx
===================================================================
--- branches/branch-3.0/src/Fl_get_system_colors.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_get_system_colors.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -25,16 +25,16 @@
 //     http://www.fltk.org/str.php
 //
 
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-#include <FL/x.H>
-#include <FL/math.h>
-#include <FL/fl_utf8.h>
+#include <fltk3/Fl.H>
+#include <fltk3/fl_draw.H>
+#include <fltk3/x.H>
+#include <fltk3/math.h>
+#include <fltk3/fl_utf8.h>
 #include "flstring.h"
 #include <stdio.h>
 #include <stdlib.h>
-#include <FL/Fl_Pixmap.H>
-#include <FL/Fl_Tiled_Image.H>
+#include <fltk3/Fl_Pixmap.H>
+#include <fltk3/Fl_Tiled_Image.H>
 #include "tile.xpm"
 
 #if defined(WIN32) && !defined(__CYGWIN__) && !defined(__WATCOMC__)

Modified: branches/branch-3.0/src/Fl_grab.cxx
===================================================================
--- branches/branch-3.0/src/Fl_grab.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_grab.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -26,8 +26,8 @@
 //
 
 #include <config.h>
-#include <FL/Fl.H>
-#include <FL/x.H>
+#include <fltk3/Fl.H>
+#include <fltk3/x.H>
 
 ////////////////////////////////////////////////////////////////
 // "Grab" is done while menu systems are up.  This has several effects:

Modified: branches/branch-3.0/src/Fl_lock.cxx
===================================================================
--- branches/branch-3.0/src/Fl_lock.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_lock.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -26,7 +26,7 @@
 //
 
 
-#include <FL/Fl.H>
+#include <fltk3/Fl.H>
 #include <config.h>
 
 #include <stdlib.h>
@@ -189,7 +189,7 @@
 #ifdef WIN32
 #  include <windows.h>
 #  include <process.h>
-#  include <FL/x.H>
+#  include <fltk3/x.H>
 
 // These pointers are in Fl_win32.cxx:
 extern void (*fl_lock_function)();

Modified: branches/branch-3.0/src/Fl_mac.cxx
===================================================================
--- branches/branch-3.0/src/Fl_mac.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_mac.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -59,11 +59,11 @@
 }
 
 #include <config.h>
-#include <FL/Fl.H>
-#include <FL/x.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Tooltip.H>
-#include <FL/Fl_Sys_Menu_Bar.H>
+#include <fltk3/Fl.H>
+#include <fltk3/x.H>
+#include <fltk3/Fl_Window.H>
+#include <fltk3/Fl_Tooltip.H>
+#include <fltk3/Fl_Sys_Menu_Bar.H>
 #include <stdio.h>
 #include <stdlib.h>
 #include "flstring.h"
@@ -1855,7 +1855,7 @@
 static int currDragSize = 0; 
 static OSErr currDragErr = noErr;
 fltk3::Window *fl_dnd_target_window = 0;
-#include <FL/fl_draw.H>
+#include <fltk3/fl_draw.H>
 
 /**
  * Fill the currDrag* variables with the current DnD ASCII text.
@@ -2104,7 +2104,7 @@
   static int xyPos = 100;
   if ( w->parent() ) // create a subwindow
   {
-    Fl_Group::current(0);
+    fltk3::Group::current(0);
     Rect wRect;
     wRect.top    = w->y();
     wRect.left   = w->x();
@@ -2137,7 +2137,7 @@
   }
   else // create a desktop window
   {
-    Fl_Group::current(0);
+    fltk3::Group::current(0);
     fl_open_display();
     int winclass = kDocumentWindowClass;
     int winattr = kWindowStandardHandlerAttribute | kWindowCloseBoxAttribute | kWindowCollapseBoxAttribute;
@@ -2427,7 +2427,7 @@
   }
   resize_from_system = 0;
   if (is_a_resize) {
-    Fl_Group::resize(X,Y,W,H);
+    fltk3::Group::resize(X,Y,W,H);
     if (shown()) { 
       redraw(); 
     }

Modified: branches/branch-3.0/src/Fl_own_colormap.cxx
===================================================================
--- branches/branch-3.0/src/Fl_own_colormap.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_own_colormap.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -34,8 +34,8 @@
 // get huge color changes when switching windows.
 
 #include <config.h>
-#include <FL/Fl.H>
-#include <FL/x.H>
+#include <fltk3/Fl.H>
+#include <fltk3/x.H>
 
 /** \fn fltk3::own_colormap()
     Makes FLTK use its own colormap.  This may make FLTK display better

Modified: branches/branch-3.0/src/Fl_visual.cxx
===================================================================
--- branches/branch-3.0/src/Fl_visual.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_visual.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -28,8 +28,8 @@
 // Set the default visual according to passed switches:
 
 #include <config.h>
-#include <FL/Fl.H>
-#include <FL/x.H>
+#include <fltk3/Fl.H>
+#include <fltk3/x.H>
 
 /** \fn  fltk3::visual(int flags)
     Selects a visual so that your graphics are drawn correctly.  This is

Modified: branches/branch-3.0/src/Fl_win32.cxx
===================================================================
--- branches/branch-3.0/src/Fl_win32.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_win32.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -30,13 +30,13 @@
 // for other system-specific code.
 
 #ifndef FL_DOXYGEN
-#include <FL/Fl.H>
-#include <FL/x.H>
-#include <FL/fl_utf8.h>
-#include <FL/Fl_Window.H>
-#include <FL/fl_draw.H>
-#include <FL/Enumerations.H>
-#include <FL/Fl_Tooltip.H>
+#include <fltk3/Fl.H>
+#include <fltk3/x.H>
+#include <fltk3/fl_utf8.h>
+#include <fltk3/Fl_Window.H>
+#include <fltk3/fl_draw.H>
+#include <fltk3/Enumerations.H>
+#include <fltk3/Fl_Tooltip.H>
 #include "flstring.h"
 #include "Fl_Font.H"
 #include <stdio.h>
@@ -1304,7 +1304,7 @@
     flags |= SWP_NOMOVE;
   }
   if (is_a_resize) {
-    Fl_Group::resize(X,Y,W,H);
+    fltk3::Group::resize(X,Y,W,H);
     if (visible_r()) {
       redraw(); 
       // only wait for exposure if this window has a size - a window 
@@ -1379,7 +1379,7 @@
 int fl_disable_transient_for; // secret method of removing TRANSIENT_FOR
 
 Fl_X* Fl_X::make(fltk3::Window* w) {
-  Fl_Group::current(0); // get rid of very common user bug: forgot end()
+  fltk3::Group::current(0); // get rid of very common user bug: forgot end()
 
   // if the window is a subwindow and our parent is not mapped yet, we
   // mark this window visible, so that mapping the parent at a later
@@ -1719,7 +1719,7 @@
 
 ////////////////////////////////////////////////////////////////
 
-#include <FL/filename.H> // need so FL_EXPORT fl_filename_name works
+#include <fltk3/filename.H> // need so FL_EXPORT fl_filename_name works
 
 // returns pointer to the filename, or null if name ends with '/'
 const char *fl_filename_name(const char *name) {
@@ -1935,8 +1935,8 @@
 #ifdef USE_PRINT_BUTTON
 // to test the Fl_Printer class creating a "Print front window" button in a separate window
 // contains also preparePrintFront call above
-#include <FL/Fl_Printer.H>
-#include <FL/Fl_Button.H>
+#include <fltk3/Fl_Printer.H>
+#include <fltk3/Fl_Button.H>
 void printFront(fltk3::Widget *o, void *data)
 {
   Fl_Printer printer;

Modified: branches/branch-3.0/src/Fl_x.cxx
===================================================================
--- branches/branch-3.0/src/Fl_x.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/Fl_x.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -36,12 +36,12 @@
 /* #define BACKSPACE_HACK 1 */
 
 #  include <config.h>
-#  include <FL/Fl.H>
-#  include <FL/x.H>
-#  include <FL/Fl_Window.H>
-#  include <FL/fl_utf8.h>
-#  include <FL/Fl_Tooltip.H>
-#  include <FL/fl_draw.H>
+#  include <fltk3/Fl.H>
+#  include <fltk3/x.H>
+#  include <fltk3/Fl_Window.H>
+#  include <fltk3/fl_utf8.h>
+#  include <fltk3/Fl_Tooltip.H>
+#  include <fltk3/fl_draw.H>
 #  include <stdio.h>
 #  include <stdlib.h>
 #  include "flstring.h"
@@ -1374,7 +1374,7 @@
   if (is_a_move && resize_from_program) set_flag(FORCE_POSITION);
   else if (!is_a_resize && !is_a_move) return;
   if (is_a_resize) {
-    Fl_Group::resize(X,Y,W,H);
+    fltk3::Group::resize(X,Y,W,H);
     if (shown()) {redraw(); i->wait_for_expose = 1;}
   } else {
     x(X); y(Y);
@@ -1438,7 +1438,7 @@
 
 void Fl_X::make_xid(fltk3::Window* win, XVisualInfo *visual, Colormap colormap)
 {
-  Fl_Group::current(0); // get rid of very common user bug: forgot end()
+  fltk3::Group::current(0); // get rid of very common user bug: forgot end()
 
   int X = win->x();
   int Y = win->y();
@@ -1764,8 +1764,8 @@
 #ifdef USE_PRINT_BUTTON
 // to test the Fl_Printer class creating a "Print front window" button in a separate window
 // contains also preparePrintFront call above
-#include <FL/Fl_Printer.H>
-#include <FL/Fl_Button.H>
+#include <fltk3/Fl_Printer.H>
+#include <fltk3/Fl_Button.H>
 void printFront(fltk3::Widget *o, void *data)
 {
   Fl_Printer printer;

Modified: branches/branch-3.0/src/filename_absolute.cxx
===================================================================
--- branches/branch-3.0/src/filename_absolute.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/filename_absolute.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -31,8 +31,8 @@
    Returns true if any changes were made.
 */
 
-#include <FL/filename.H>
-#include <FL/fl_utf8.h>
+#include <fltk3/filename.H>
+#include <fltk3/fl_utf8.h>
 #include <stdlib.h>
 #include "flstring.h"
 #include <ctype.h>
@@ -50,7 +50,7 @@
 
 /** Makes a filename absolute from a relative filename.
     \code
-    #include <FL/filename.H>
+    #include <fltk3/filename.H>
     [..]
     chdir("/var/tmp");
     fl_filename_absolute(out, sizeof(out), "foo.txt");         // out="/var/tmp/foo.txt"
@@ -117,7 +117,7 @@
 
 /** Makes a filename relative to the current working directory.
     \code
-    #include <FL/filename.H>
+    #include <fltk3/filename.H>
     [..]
     chdir("/var/tmp/somedir");       // set cwd to /var/tmp/somedir
     [..]

Modified: branches/branch-3.0/src/filename_expand.cxx
===================================================================
--- branches/branch-3.0/src/filename_expand.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/filename_expand.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -30,8 +30,8 @@
    to & from may be the same buffer.
 */
 
-#include <FL/filename.H>
-#include <FL/fl_utf8.h>
+#include <fltk3/filename.H>
+#include <fltk3/fl_utf8.h>
 #include <stdlib.h>
 #include "flstring.h"
 #if defined(WIN32) && !defined(__CYGWIN__)
@@ -57,7 +57,7 @@
 
     \b Examples:
     \code
-    #include <FL/filename.H>
+    #include <fltk3/filename.H>
     [..]
     putenv("TMPDIR=/var/tmp");
     fl_filename_expand(out, sizeof(out), "~fred/.cshrc");     // out="/usr/fred/.cshrc"

Modified: branches/branch-3.0/src/filename_ext.cxx
===================================================================
--- branches/branch-3.0/src/filename_ext.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/filename_ext.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -27,11 +27,11 @@
 
 // returns pointer to the last '.' or to the null if none:
 
-#include <FL/filename.H>
+#include <fltk3/filename.H>
 
 /** Gets the extensions of a filename.
    \code
-   #include <FL/filename.H>
+   #include <fltk3/filename.H>
    [..]
    const char *out;
    out = fl_filename_ext("/some/path/foo.txt");        // result: ".txt"

Modified: branches/branch-3.0/src/filename_isdir.cxx
===================================================================
--- branches/branch-3.0/src/filename_isdir.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/filename_isdir.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -31,8 +31,8 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <ctype.h>
-#include <FL/filename.H>
-#include <FL/fl_utf8.h>
+#include <fltk3/filename.H>
+#include <fltk3/fl_utf8.h>
 
 
 #if defined(WIN32) || defined(__EMX__) && !defined(__CYGWIN__)
@@ -50,7 +50,7 @@
 /**
    Determines if a file exists and is a directory from its filename.
    \code
-   #include <FL/filename.H>
+   #include <fltk3/filename.H>
    [..]
    fl_filename_isdir("/etc");		// returns non-zero
    fl_filename_isdir("/etc/hosts");	// returns 0

Modified: branches/branch-3.0/src/filename_list.cxx
===================================================================
--- branches/branch-3.0/src/filename_list.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/filename_list.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -27,7 +27,7 @@
 
 // Wrapper for scandir with const-correct function prototypes.
 
-#include <FL/filename.H>
+#include <fltk3/filename.H>
 #include "flstring.h"
 #include <stdlib.h>
 
@@ -61,7 +61,7 @@
 
    \b Include:
    \code
-   #include <FL/filename.H>
+   #include <fltk3/filename.H>
    \endcode
 
    \param[in] d the name of the directory to list.  It does not matter if it has a trailing slash.

Modified: branches/branch-3.0/src/filename_match.cxx
===================================================================
--- branches/branch-3.0/src/filename_match.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/filename_match.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -26,7 +26,7 @@
 //
 
 /* Adapted from Rich Salz. */
-#include <FL/filename.H>
+#include <fltk3/filename.H>
 #include <ctype.h>
 
 /**
@@ -43,7 +43,7 @@
 
     \b Include:
     \code
-    #include <FL/filename.H>
+    #include <fltk3/filename.H>
     \endcode
 
     \param[in] s the string to check for a match

Modified: branches/branch-3.0/src/filename_setext.cxx
===================================================================
--- branches/branch-3.0/src/filename_setext.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/filename_setext.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -27,7 +27,7 @@
 
 // Replace .ext with new extension
 
-#include <FL/filename.H>
+#include <fltk3/filename.H>
 #include "flstring.h"
 
 /**
@@ -38,7 +38,7 @@
 
    \b Example
    \code
-   #include <FL/filename.H>
+   #include <fltk3/filename.H>
    [..]
    char buf[1024] = "/path/myfile.cxx";
    fl_filename_setext(buf, sizeof(buf), ".txt");      // buf[] becomes "/path/myfile.txt"

Modified: branches/branch-3.0/src/fl_arc.cxx
===================================================================
--- branches/branch-3.0/src/fl_arc.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/fl_arc.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -34,8 +34,8 @@
 // the current fl_begin/fl_vertex/fl_end path.
 // Incremental math implementation:
 
-#include <FL/fl_draw.H>
-#include <FL/math.h>
+#include <fltk3/fl_draw.H>
+#include <fltk3/math.h>
 
 // avoid problems with some platforms that don't 
 // implement hypot.

Modified: branches/branch-3.0/src/fl_arci.cxx
===================================================================
--- branches/branch-3.0/src/fl_arci.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/fl_arci.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -40,10 +40,10 @@
 
 // 3/10/98: created
 
-#include <FL/fl_draw.H>
-#include <FL/x.H>
+#include <fltk3/fl_draw.H>
+#include <fltk3/x.H>
 #ifdef WIN32
-#  include <FL/math.h>
+#  include <fltk3/math.h>
 #endif
 #include <config.h>
 

Modified: branches/branch-3.0/src/fl_ask.cxx
===================================================================
--- branches/branch-3.0/src/fl_ask.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/fl_ask.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -34,18 +34,18 @@
 #include <stdarg.h>
 #include "flstring.h"
 
-#include <FL/Fl.H>
+#include <fltk3/Fl.H>
 
-#include <FL/fl_ask.H>
+#include <fltk3/fl_ask.H>
 
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Return_Button.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Input.H>
-#include <FL/Fl_Secret_Input.H>
-#include <FL/x.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl_Box.H>
+#include <fltk3/Fl_Button.H>
+#include <fltk3/Fl_Return_Button.H>
+#include <fltk3/Fl_Window.H>
+#include <fltk3/Fl_Input.H>
+#include <fltk3/Fl_Secret_Input.H>
+#include <fltk3/x.H>
+#include <fltk3/fl_draw.H>
 
 #ifdef __APPLE__
 # if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
@@ -78,8 +78,8 @@
  }
  // make sure that the dialog does not become the child of some 
  // current group
- Fl_Group *previously_current_group = Fl_Group::current();
- Fl_Group::current(0);
+  fltk3::Group *previously_current_group = fltk3::Group::current();
+  fltk3::Group::current(0);
  // create a new top level window
   fltk3::Window *w = message_form = new fltk3::Window(410,103,"");
  // w->clear_border();
@@ -104,7 +104,7 @@
  w->resizable(new Fl_Box(60,10,110-60,27));
  w->end();
  w->set_modal();
- Fl_Group::current(previously_current_group);
+  fltk3::Group::current(previously_current_group);
  return w;
 }
 

Modified: branches/branch-3.0/src/fl_boxtype.cxx
===================================================================
--- branches/branch-3.0/src/fl_boxtype.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/fl_boxtype.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -34,9 +34,9 @@
 // boxtypes.  Other box types are in separate files so they are not
 // linked in if not used.
 
-#include <FL/Fl.H>
-#include <FL/Fl_Widget.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Widget.H>
+#include <fltk3/fl_draw.H>
 #include <config.h>
 
 ////////////////////////////////////////////////////////////////

Modified: branches/branch-3.0/src/fl_call_main.c
===================================================================
--- branches/branch-3.0/src/fl_call_main.c	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/fl_call_main.c	2010-03-30 17:38:49 UTC (rev 7366)
@@ -51,7 +51,7 @@
 #  include <windows.h>
 #  include <stdio.h>
 #  include <stdlib.h>
-#  include <FL/fl_utf8.h>
+#  include <fltk3/fl_utf8.h>
 
 extern int main(int, char *[]);
 

Modified: branches/branch-3.0/src/fl_color.cxx
===================================================================
--- branches/branch-3.0/src/fl_color.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/fl_color.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -46,9 +46,9 @@
 // before use.
 
 #  include "Fl_XColor.H"
-#  include <FL/Fl.H>
-#  include <FL/x.H>
-#  include <FL/fl_draw.H>
+#  include <fltk3/Fl.H>
+#  include <fltk3/x.H>
+#  include <fltk3/fl_draw.H>
 
 ////////////////////////////////////////////////////////////////
 // figure_out_visual() calculates masks & shifts for generating

Modified: branches/branch-3.0/src/fl_color_mac.cxx
===================================================================
--- branches/branch-3.0/src/fl_color_mac.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/fl_color_mac.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -34,9 +34,9 @@
 // matt: Quartz support done
 
 #include <config.h>
-#include <FL/Fl.H>
-#include <FL/x.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/x.H>
+#include <fltk3/fl_draw.H>
 
 static unsigned fl_cmap[256] = {
 #include "fl_cmap.h" // this is a file produced by "cmap.cxx":

Modified: branches/branch-3.0/src/fl_color_win32.cxx
===================================================================
--- branches/branch-3.0/src/fl_color_win32.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/fl_color_win32.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -35,9 +35,9 @@
 // before use.
 
 #include <config.h>
-#include <FL/Fl.H>
-#include <FL/x.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/x.H>
+#include <fltk3/fl_draw.H>
 
 static unsigned fl_cmap[256] = {
 #include "fl_cmap.h" // this is a file produced by "cmap.cxx":

Modified: branches/branch-3.0/src/fl_cursor.cxx
===================================================================
--- branches/branch-3.0/src/fl_cursor.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/fl_cursor.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -31,17 +31,17 @@
 // This avoids a field in the fltk3::Window, and I suspect is more
 // portable to other systems.
 
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/x.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Window.H>
+#include <fltk3/x.H>
 #if !defined(WIN32) && !defined(__APPLE__)
 #  include <X11/cursorfont.h>
 #endif
-#include <FL/fl_draw.H>
+#include <fltk3/fl_draw.H>
 
 /**
   Sets the cursor for the current window to the specified shape and colors.
-  The cursors are defined in the <FL/Enumerations.H> header file. 
+  The cursors are defined in the <fltk3/Enumerations.H> header file. 
   */
 void fl_cursor(Fl_Cursor c, Fl_Color fg, Fl_Color bg) {
   if (fltk3::first_window()) fltk3::first_window()->cursor(c,fg,bg);

Modified: branches/branch-3.0/src/fl_curve.cxx
===================================================================
--- branches/branch-3.0/src/fl_curve.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/fl_curve.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -35,7 +35,7 @@
   If anybody has a better algorithm, please send it!
 */
 
-#include <FL/fl_draw.H>
+#include <fltk3/fl_draw.H>
 #include <math.h>
 
 void Fl_Device::curve(double X0, double Y0,

Modified: branches/branch-3.0/src/fl_diamond_box.cxx
===================================================================
--- branches/branch-3.0/src/fl_diamond_box.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/fl_diamond_box.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -31,8 +31,8 @@
 
 // The diamond box draws best if the area is square!
 
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/fl_draw.H>
 
 extern uchar* fl_gray_ramp();
 

Modified: branches/branch-3.0/src/fl_dnd_mac.cxx
===================================================================
--- branches/branch-3.0/src/fl_dnd_mac.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/fl_dnd_mac.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -27,9 +27,9 @@
 // for other system-specific code.
 
 #include <config.h>
-#include <FL/Fl.H>
-#include <FL/x.H>
-#include <FL/Fl_Window.H>
+#include <fltk3/Fl.H>
+#include <fltk3/x.H>
+#include <fltk3/Fl_Window.H>
 
 // warning: this function is only implemented in Quickdraw. The function
 //          below may not work if FLTK is compiled with Quartz enabled

Modified: branches/branch-3.0/src/fl_dnd_win32.cxx
===================================================================
--- branches/branch-3.0/src/fl_dnd_win32.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/fl_dnd_win32.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -26,10 +26,10 @@
 // in.  Search other files for "WIN32" or filenames ending in _win32.cxx
 // for other system-specific code.
 
-#include <FL/Fl.H>
-#include <FL/x.H>
-#include <FL/Fl_Window.H>
-#include <FL/fl_utf8.h>
+#include <fltk3/Fl.H>
+#include <fltk3/x.H>
+#include <fltk3/Fl_Window.H>
+#include <fltk3/fl_utf8.h>
 #include "flstring.h"
 #include <stdio.h>
 #include <stdlib.h>
@@ -134,7 +134,7 @@
       fltk3::e_y = fltk3::e_y_root-fl_dnd_target_window->y();
     }
     if (fillCurrentDragData(0)) {
-      // Fl_Group will change DND_DRAG into DND_ENTER and DND_LEAVE if needed
+      // fltk3::Group will change DND_DRAG into DND_ENTER and DND_LEAVE if needed
       if ( fltk3::handle( FL_DND_DRAG, fl_dnd_target_window ) )
         *pdwEffect = DROPEFFECT_MOVE|DROPEFFECT_COPY; //|DROPEFFECT_LINK;
       else

Modified: branches/branch-3.0/src/fl_dnd_x.cxx
===================================================================
--- branches/branch-3.0/src/fl_dnd_x.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/fl_dnd_x.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -25,9 +25,9 @@
 //     http://www.fltk.org/str.php
 //
 
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/x.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Window.H>
+#include <fltk3/x.H>
 #include "flstring.h"
 
 

Modified: branches/branch-3.0/src/fl_draw.cxx
===================================================================
--- branches/branch-3.0/src/fl_draw.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/fl_draw.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -33,10 +33,10 @@
 // Aligns them against the inside of the box.
 
 #define min(a,b) ((a)<(b)?(a):(b))
-#include <FL/fl_utf8.h>
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-#include <FL/Fl_Image.H>
+#include <fltk3/fl_utf8.h>
+#include <fltk3/Fl.H>
+#include <fltk3/fl_draw.H>
+#include <fltk3/Fl_Image.H>
 
 #include "flstring.h"
 #include <ctype.h>

Modified: branches/branch-3.0/src/fl_draw_image.cxx
===================================================================
--- branches/branch-3.0/src/fl_draw_image.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/fl_draw_image.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -59,9 +59,9 @@
 
 ////////////////////////////////////////////////////////////////
 
-#  include <FL/Fl.H>
-#  include <FL/fl_draw.H>
-#  include <FL/x.H>
+#  include <fltk3/Fl.H>
+#  include <fltk3/fl_draw.H>
+#  include <fltk3/x.H>
 #  include "Fl_XColor.H"
 #  include "flstring.h"
 

Modified: branches/branch-3.0/src/fl_draw_pixmap.cxx
===================================================================
--- branches/branch-3.0/src/fl_draw_pixmap.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/fl_draw_pixmap.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -35,9 +35,9 @@
 // as I want to discourage programs that require support files to work.
 // All data needed by a program ui should be compiled in!!!
 
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-#include <FL/x.H>
+#include <fltk3/Fl.H>
+#include <fltk3/fl_draw.H>
+#include <fltk3/x.H>
 #include <stdio.h>
 #include "flstring.h"
 

Modified: branches/branch-3.0/src/fl_encoding_latin1.cxx
===================================================================
--- branches/branch-3.0/src/fl_encoding_latin1.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/fl_encoding_latin1.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -25,8 +25,8 @@
 //     http://www.fltk.org/str.php
 //
 
-#include <FL/fl_draw.H>
-#include <FL/Enumerations.H>
+#include <fltk3/fl_draw.H>
+#include <fltk3/Enumerations.H>
 #include <stdlib.h>
 #include "flstring.h"
 

Modified: branches/branch-3.0/src/fl_encoding_mac_roman.cxx
===================================================================
--- branches/branch-3.0/src/fl_encoding_mac_roman.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/fl_encoding_mac_roman.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -25,8 +25,8 @@
 //     http://www.fltk.org/str.php
 //
 
-#include <FL/fl_draw.H>
-#include <FL/Enumerations.H>
+#include <fltk3/fl_draw.H>
+#include <fltk3/Enumerations.H>
 #include <stdlib.h>
 #include "flstring.h"
 

Modified: branches/branch-3.0/src/fl_engraved_label.cxx
===================================================================
--- branches/branch-3.0/src/fl_engraved_label.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/fl_engraved_label.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -27,9 +27,9 @@
 
 // Drawing code for XForms style engraved & embossed labels
 
-#include <FL/Fl.H>
-#include <FL/Fl_Widget.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Widget.H>
+#include <fltk3/fl_draw.H>
 
 // data[] is dx, dy, color triples
 

Modified: branches/branch-3.0/src/fl_file_dir.cxx
===================================================================
--- branches/branch-3.0/src/fl_file_dir.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/fl_file_dir.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -26,9 +26,9 @@
 //
 
 #include "flstring.h"
-#include <FL/filename.H>
-#include <FL/Fl_File_Chooser.H>
-#include <FL/fl_ask.H>
+#include <fltk3/filename.H>
+#include <fltk3/Fl_File_Chooser.H>
+#include <fltk3/fl_ask.H>
 
 
 static Fl_File_Chooser	*fc = (Fl_File_Chooser *)0;

Modified: branches/branch-3.0/src/fl_font.cxx
===================================================================
--- branches/branch-3.0/src/fl_font.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/fl_font.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -40,9 +40,9 @@
 
 // Select fonts from the FLTK font table.
 #include "flstring.h"
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-#include <FL/x.H>
+#include <fltk3/Fl.H>
+#include <fltk3/fl_draw.H>
+#include <fltk3/x.H>
 #include "Fl_Font.H"
 
 #include <stdio.h>

Modified: branches/branch-3.0/src/fl_gtk.cxx
===================================================================
--- branches/branch-3.0/src/fl_gtk.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/fl_gtk.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -32,8 +32,8 @@
 // These box types are in separate files so they are not linked
 // in if not used.
 
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/fl_draw.H>
 
 extern void fl_internal_boxtype(Fl_Boxtype, Fl_Box_Draw_F*);
 

Modified: branches/branch-3.0/src/fl_images_core.cxx
===================================================================
--- branches/branch-3.0/src/fl_images_core.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/fl_images_core.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -34,12 +34,12 @@
 // Include necessary header files...
 //
 
-#include <FL/Fl_Shared_Image.H>
-#include <FL/Fl_BMP_Image.H>
-#include <FL/Fl_GIF_Image.H>
-#include <FL/Fl_JPEG_Image.H>
-#include <FL/Fl_PNG_Image.H>
-#include <FL/Fl_PNM_Image.H>
+#include <fltk3/Fl_Shared_Image.H>
+#include <fltk3/Fl_BMP_Image.H>
+#include <fltk3/Fl_GIF_Image.H>
+#include <fltk3/Fl_JPEG_Image.H>
+#include <fltk3/Fl_PNG_Image.H>
+#include <fltk3/Fl_PNM_Image.H>
 #include <stdio.h>
 #include <stdlib.h>
 #include "flstring.h"

Modified: branches/branch-3.0/src/fl_labeltype.cxx
===================================================================
--- branches/branch-3.0/src/fl_labeltype.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/fl_labeltype.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -29,11 +29,11 @@
 // Other label types (symbols) are in their own source files
 // to avoid linking if not used.
 
-#include <FL/Fl.H>
-#include <FL/Fl_Widget.H>
-#include <FL/Fl_Group.H>
-#include <FL/fl_draw.H>
-#include <FL/Fl_Image.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Widget.H>
+#include <fltk3/Fl_Group.H>
+#include <fltk3/fl_draw.H>
+#include <fltk3/Fl_Image.H>
 
 void
 fl_no_label(const Fl_Label*,int,int,int,int,Fl_Align) {}
@@ -137,7 +137,7 @@
 
 // include these vars here so they can be referenced without including
 // Fl_Input_ code:
-#include <FL/Fl_Input_.H>
+#include <fltk3/Fl_Input_.H>
 
 //
 // End of "$Id$".

Modified: branches/branch-3.0/src/fl_line_style.cxx
===================================================================
--- branches/branch-3.0/src/fl_line_style.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/fl_line_style.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -30,9 +30,9 @@
   \brief Line style drawing utility hiding different platforms.
 */
 
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-#include <FL/x.H>
+#include <fltk3/Fl.H>
+#include <fltk3/fl_draw.H>
+#include <fltk3/x.H>
 #include "flstring.h"
 #include <stdio.h>
 

Modified: branches/branch-3.0/src/fl_open_uri.cxx
===================================================================
--- branches/branch-3.0/src/fl_open_uri.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/fl_open_uri.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -29,7 +29,7 @@
 // Include necessary headers...
 //
 
-#include <FL/filename.H>
+#include <fltk3/filename.H>
 #include <stdio.h>
 #include <stdlib.h>
 #include <errno.h>
@@ -73,7 +73,7 @@
  *
  * \b Example
  * \code
- * #include <FL/filename.H>
+ * #include <fltk3/filename.H>
  * [..]
  * char errmsg[512];
  * if ( !fl_open_uri("http://google.com/";, errmsg, sizeof(errmsg)) ) {

Modified: branches/branch-3.0/src/fl_oval_box.cxx
===================================================================
--- branches/branch-3.0/src/fl_oval_box.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/fl_oval_box.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -29,8 +29,8 @@
 // Less-used box types are in separate files so they are not linked
 // in if not used.
 
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/fl_draw.H>
 
 static void fl_oval_flat_box(int x, int y, int w, int h, Fl_Color c) {
   fl_color(c);

Modified: branches/branch-3.0/src/fl_overlay.cxx
===================================================================
--- branches/branch-3.0/src/fl_overlay.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/fl_overlay.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -30,8 +30,8 @@
 // to erase the overlay before drawing anything that might intersect
 // it.
 
-#include <FL/x.H>
-#include <FL/fl_draw.H>
+#include <fltk3/x.H>
+#include <fltk3/fl_draw.H>
 #ifdef __APPLE__
 #include <config.h>
 #endif

Modified: branches/branch-3.0/src/fl_overlay_visual.cxx
===================================================================
--- branches/branch-3.0/src/fl_overlay_visual.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/fl_overlay_visual.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -32,8 +32,8 @@
 
 #include <config.h>
 #if HAVE_OVERLAY
-#include <FL/Fl.H>
-#include <FL/x.H>
+#include <fltk3/Fl.H>
+#include <fltk3/x.H>
 
 // SERVER_OVERLAY_VISUALS property element:
 struct OverlayInfo {

Modified: branches/branch-3.0/src/fl_plastic.cxx
===================================================================
--- branches/branch-3.0/src/fl_plastic.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/fl_plastic.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -32,8 +32,8 @@
 // These box types are in separate files so they are not linked
 // in if not used.
 
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/fl_draw.H>
 #include "flstring.h"
 
 //

Modified: branches/branch-3.0/src/fl_read_image.cxx
===================================================================
--- branches/branch-3.0/src/fl_read_image.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/fl_read_image.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -25,9 +25,9 @@
 //     http://www.fltk.org/str.php
 //
 
-#include <FL/x.H>
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
+#include <fltk3/x.H>
+#include <fltk3/Fl.H>
+#include <fltk3/fl_draw.H>
 #include "flstring.h"
 
 #ifdef DEBUG

Modified: branches/branch-3.0/src/fl_rect.cxx
===================================================================
--- branches/branch-3.0/src/fl_rect.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/fl_rect.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -36,10 +36,10 @@
 // that minimal update works.
 
 #include <config.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Widget.H>
-#include <FL/fl_draw.H>
-#include <FL/x.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Widget.H>
+#include <fltk3/fl_draw.H>
+#include <fltk3/x.H>
 
 #ifdef __APPLE_QUARTZ__
 extern float fl_quartz_line_width_;

Modified: branches/branch-3.0/src/fl_round_box.cxx
===================================================================
--- branches/branch-3.0/src/fl_round_box.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/fl_round_box.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -29,8 +29,8 @@
 // These box types are in separate files so they are not linked
 // in if not used.
 
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/fl_draw.H>
 
 // A compiler from a certain very large software company will not compile
 // the function pointer assignment due to the name conflict with fl_arc.

Modified: branches/branch-3.0/src/fl_rounded_box.cxx
===================================================================
--- branches/branch-3.0/src/fl_rounded_box.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/fl_rounded_box.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -25,8 +25,8 @@
 //     http://www.fltk.org/str.php
 //
 
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/fl_draw.H>
 
 #define RN	5
 #define RS	15

Modified: branches/branch-3.0/src/fl_scroll_area.cxx
===================================================================
--- branches/branch-3.0/src/fl_scroll_area.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/fl_scroll_area.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -30,9 +30,9 @@
 // into the drawing area.
 
 #include <config.h>
-#include <FL/Fl.H>
-#include <FL/x.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/x.H>
+#include <fltk3/fl_draw.H>
 
 // scroll a rectangle and redraw the newly exposed portions:
 /**

Modified: branches/branch-3.0/src/fl_set_font.cxx
===================================================================
--- branches/branch-3.0/src/fl_set_font.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/fl_set_font.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -28,9 +28,9 @@
 // Add a font to the internal table.
 // Also see fl_set_fonts.cxx which adds all possible fonts.
 
-#include <FL/Fl.H>
-#include <FL/x.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/x.H>
+#include <fltk3/fl_draw.H>
 #include "flstring.h"
 #include "Fl_Font.H"
 #include <stdlib.h>

Modified: branches/branch-3.0/src/fl_set_fonts.cxx
===================================================================
--- branches/branch-3.0/src/fl_set_fonts.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/fl_set_fonts.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -25,8 +25,8 @@
 //     http://www.fltk.org/str.php
 //
 
-#include <FL/Fl.H>
-#include <FL/x.H>
+#include <fltk3/Fl.H>
+#include <fltk3/x.H>
 #include "Fl_Font.H"
 #include "flstring.h"
 #include <stdlib.h>

Modified: branches/branch-3.0/src/fl_set_fonts_win32.cxx
===================================================================
--- branches/branch-3.0/src/fl_set_fonts_win32.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/fl_set_fonts_win32.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -29,7 +29,7 @@
 // are found on the X server.  It tries to place the fonts into families
 // and to sort them so the first 4 in a family are normal, bold, italic,
 // and bold italic.
-#include <FL/fl_utf8.h>
+#include <fltk3/fl_utf8.h>
 #ifdef __CYGWIN__
 # include <wchar.h>
 #endif

Modified: branches/branch-3.0/src/fl_shadow_box.cxx
===================================================================
--- branches/branch-3.0/src/fl_shadow_box.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/fl_shadow_box.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -25,8 +25,8 @@
 //     http://www.fltk.org/str.php
 //
 
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/fl_draw.H>
 
 #define BW 3
 

Modified: branches/branch-3.0/src/fl_shortcut.cxx
===================================================================
--- branches/branch-3.0/src/fl_shortcut.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/fl_shortcut.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -41,14 +41,14 @@
 // This allows punctuation shortcuts like "#" to work (rather than
 // calling it "shift+3" on a US keyboard)
 
-#include <FL/Fl.H>
-#include <FL/Fl_Widget.H>
-#include <FL/Fl_Button.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Widget.H>
+#include <fltk3/Fl_Button.H>
+#include <fltk3/fl_draw.H>
 #include <ctype.h>
 #include "flstring.h"
 #if !defined(WIN32) && !defined(__APPLE__)
-#include <FL/x.H>
+#include <fltk3/x.H>
 #endif
 
 /**

Modified: branches/branch-3.0/src/fl_show_colormap.cxx
===================================================================
--- branches/branch-3.0/src/fl_show_colormap.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/fl_show_colormap.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -25,10 +25,10 @@
 //     http://www.fltk.org/str.php
 //
 
-#include <FL/Fl.H>
-#include <FL/Fl_Single_Window.H>
-#include <FL/fl_draw.H>
-#include <FL/fl_show_colormap.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Single_Window.H>
+#include <fltk3/fl_draw.H>
+#include <fltk3/fl_show_colormap.H>
 #include <config.h>
 
 #define BOXSIZE 14

Modified: branches/branch-3.0/src/fl_symbols.cxx
===================================================================
--- branches/branch-3.0/src/fl_symbols.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/fl_symbols.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -34,9 +34,9 @@
 // Version 2.1 a
 // Date: Oct  2, 1992
 
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-#include <FL/math.h>
+#include <fltk3/Fl.H>
+#include <fltk3/fl_draw.H>
+#include <fltk3/math.h>
 #include "flstring.h"
 
 typedef struct {

Modified: branches/branch-3.0/src/fl_utf.c
===================================================================
--- branches/branch-3.0/src/fl_utf.c	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/fl_utf.c	2010-03-30 17:38:49 UTC (rev 7366)
@@ -27,7 +27,7 @@
 
 /* Modified to obey rfc3629, which limits unicode to 0-0x10ffff */
 
-#include <FL/fl_utf8.h>
+#include <fltk3/fl_utf8.h>
 #include <string.h>
 #include <stdlib.h>
 

Modified: branches/branch-3.0/src/fl_utf8.cxx
===================================================================
--- branches/branch-3.0/src/fl_utf8.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/fl_utf8.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -27,7 +27,7 @@
 
 
 #include <config.h>
-#include <FL/filename.H>
+#include <fltk3/filename.H>
 #include <stdarg.h>
 
 #if defined(WIN32) && !defined(__CYGWIN__)
@@ -64,14 +64,14 @@
 
 #else // X-windows platform
 
-# include <FL/Xutf8.h>
+# include <fltk3/Xutf8.h>
 # include <sys/types.h>
 # include <sys/stat.h>
 # include <fcntl.h>
 # include <unistd.h>
 #endif // WIN32
 
-#include <FL/fl_utf8.h>
+#include <fltk3/fl_utf8.h>
 #include <string.h>
 #include <stdlib.h>
 

Modified: branches/branch-3.0/src/fl_vertex.cxx
===================================================================
--- branches/branch-3.0/src/fl_vertex.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/fl_vertex.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -38,10 +38,10 @@
 //       operations for reasons of compatibility and maintainability
 
 #include <config.h>
-#include <FL/fl_draw.H>
-#include <FL/x.H>
-#include <FL/Fl.H>
-#include <FL/math.h>
+#include <fltk3/fl_draw.H>
+#include <fltk3/x.H>
+#include <fltk3/Fl.H>
+#include <fltk3/math.h>
 #include <stdlib.h>
 
 struct matrix {double a, b, c, d, x, y;};

Modified: branches/branch-3.0/src/forms_bitmap.cxx
===================================================================
--- branches/branch-3.0/src/forms_bitmap.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/forms_bitmap.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -25,7 +25,7 @@
 //     http://www.fltk.org/str.php
 //
 
-#include <FL/forms.H>
+#include <fltk3/forms.H>
 /** Creates a bitmap widget from a box type, position, size and optional label specification */
 Fl_FormsBitmap::Fl_FormsBitmap(
   Fl_Boxtype t, int X, int Y, int W, int H, const char* l)

Modified: branches/branch-3.0/src/forms_compatability.cxx
===================================================================
--- branches/branch-3.0/src/forms_compatability.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/forms_compatability.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -28,14 +28,14 @@
 // Forms library compatibility functions.
 // Many more functions are defined as inlines in forms.h!
 
-#include <FL/forms.H>
+#include <fltk3/forms.H>
 #include <stdlib.h>
 
 char fl_flip = 2;
 void fl_end_form() {
-  while (Fl_Group::current()) Fl_Group::current()->forms_end();
+  while (fltk3::Group::current()) fltk3::Group::current()->forms_end();
 }
-void Fl_Group::forms_end() {
+void fltk3::Group::forms_end() {
   // set the dimensions of a group to surround contents
   if (children() && !w()) {
     fltk3::Widget*const* a = array();
@@ -148,8 +148,8 @@
 
 // Create a forms button by selecting correct fltk subclass:
 
-#include <FL/Fl_Return_Button.H>
-#include <FL/Fl_Repeat_Button.H>
+#include <fltk3/Fl_Return_Button.H>
+#include <fltk3/Fl_Repeat_Button.H>
 
 Fl_Button *fl_add_button(uchar t,int x,int y,int w,int h,const char *l) {
   Fl_Button *b;

Modified: branches/branch-3.0/src/forms_free.cxx
===================================================================
--- branches/branch-3.0/src/forms_free.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/forms_free.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -30,8 +30,8 @@
 // me to port several other programs, but it is in no way
 // complete.
 
-#include <FL/Fl.H>
-#include <FL/Fl_Free.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Free.H>
 
 void Fl_Free::step(void *v) {
   Fl_Free *f = (Fl_Free *)v;

Modified: branches/branch-3.0/src/forms_fselect.cxx
===================================================================
--- branches/branch-3.0/src/forms_fselect.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/forms_fselect.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -27,7 +27,7 @@
 
 // Emulate the Forms file chooser using the fltk file chooser.
 
-#include <FL/forms.H>
+#include <fltk3/forms.H>
 #include "flstring.h"
 
 static char fl_directory[1024];

Modified: branches/branch-3.0/src/forms_pixmap.cxx
===================================================================
--- branches/branch-3.0/src/forms_pixmap.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/forms_pixmap.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -25,7 +25,7 @@
 //     http://www.fltk.org/str.php
 //
 
-#include <FL/forms.H>
+#include <fltk3/forms.H>
 
 /**
   Creates a new Fl_FormsPixmap widget using the given box type, position,

Modified: branches/branch-3.0/src/forms_timer.cxx
===================================================================
--- branches/branch-3.0/src/forms_timer.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/forms_timer.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -29,9 +29,9 @@
 // You don't want to use this if you just want a timeout, call
 // fltk3::add_timeout directly!
 
-#include <FL/Fl.H>
-#include <FL/Fl_Timer.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Timer.H>
+#include <fltk3/fl_draw.H>
 #ifdef WIN32
 #  ifdef __MWERKS__
 #    include <time.h>

Modified: branches/branch-3.0/src/freeglut_geometry.cxx
===================================================================
--- branches/branch-3.0/src/freeglut_geometry.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/freeglut_geometry.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -25,8 +25,8 @@
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
 
-#include <FL/glut.H>
-#include <FL/math.h>
+#include <fltk3/glut.H>
+#include <fltk3/math.h>
 #include <stdlib.h>
 
 /*

Modified: branches/branch-3.0/src/freeglut_stroke_mono_roman.cxx
===================================================================
--- branches/branch-3.0/src/freeglut_stroke_mono_roman.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/freeglut_stroke_mono_roman.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -28,7 +28,7 @@
 
 /* This file has been automatically generated by the genstroke utility. */
 
-#include <FL/glut.H>
+#include <fltk3/glut.H>
 
 /* char: 0x20 */
 

Modified: branches/branch-3.0/src/freeglut_stroke_roman.cxx
===================================================================
--- branches/branch-3.0/src/freeglut_stroke_roman.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/freeglut_stroke_roman.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -28,7 +28,7 @@
 
 /* This file has been automatically generated by the genstroke utility. */
 
-#include <FL/glut.H>
+#include <fltk3/glut.H>
 
 /* char: 0x20 */
 

Modified: branches/branch-3.0/src/freeglut_teapot.cxx
===================================================================
--- branches/branch-3.0/src/freeglut_teapot.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/freeglut_teapot.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -72,7 +72,7 @@
  * OpenGL(TM) is a trademark of Silicon Graphics, Inc.
  */
 
-#include <FL/glut.H>
+#include <fltk3/glut.H>
 #include "freeglut_teapot_data.h"
 
 /* -- PRIVATE FUNCTIONS ---------------------------------------------------- */

Modified: branches/branch-3.0/src/gl_draw.cxx
===================================================================
--- branches/branch-3.0/src/gl_draw.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/gl_draw.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -25,22 +25,22 @@
 //     http://www.fltk.org/str.php
 //
 
-// Functions from <FL/gl.h>
+// Functions from <fltk3/gl.h>
 // See also Fl_Gl_Window and gl_start.cxx
 
 #include "flstring.h"
 #if HAVE_GL
 
-#include <FL/Fl.H>
-#include <FL/gl.h>
-#include <FL/x.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/gl.h>
+#include <fltk3/x.H>
+#include <fltk3/fl_draw.H>
 #include "Fl_Gl_Choice.H"
 #include "Fl_Font.H"
-#include <FL/fl_utf8.h>
+#include <fltk3/fl_utf8.h>
 
 #if !defined(WIN32) && !defined(__APPLE__)
-#include <FL/Xutf8.h>
+#include <fltk3/Xutf8.h>
 #endif
 
 #if USE_XFT
@@ -362,7 +362,7 @@
 
 #ifdef __APPLE__
 
-#include <FL/glu.h>
+#include <fltk3/glu.h>
 
 static void gl_draw_cocoa(const char* str, int n) 
 {

Modified: branches/branch-3.0/src/gl_start.cxx
===================================================================
--- branches/branch-3.0/src/gl_start.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/gl_start.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -40,10 +40,10 @@
 #include <config.h>
 #if HAVE_GL
 
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/x.H>
-#include <FL/fl_draw.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Window.H>
+#include <fltk3/x.H>
+#include <fltk3/fl_draw.H>
 #include "Fl_Gl_Choice.H"
 
 extern int fl_clip_state_number; // in fl_rect.cxx

Modified: branches/branch-3.0/src/glut_compatability.cxx
===================================================================
--- branches/branch-3.0/src/glut_compatability.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/glut_compatability.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -38,7 +38,7 @@
 #include "flstring.h"
 #if HAVE_GL
 
-#  include <FL/glut.H>
+#  include <fltk3/glut.H>
 #  ifdef HAVE_GLXGETPROCADDRESSARB
 #    define GLX_GLXEXT_LEGACY
 #    include <GL/glx.h>
@@ -281,7 +281,7 @@
 }
 
 ////////////////////////////////////////////////////////////////
-#include <FL/Fl_Menu_Item.H>
+#include <fltk3/Fl_Menu_Item.H>
 
 struct menu {
   void (*cb)(int);

Modified: branches/branch-3.0/src/glut_font.cxx
===================================================================
--- branches/branch-3.0/src/glut_font.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/glut_font.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -35,7 +35,7 @@
 
 #include <config.h>
 #if HAVE_GL
-#  include <FL/glut.H>
+#  include <fltk3/glut.H>
 
 Fl_Glut_Bitmap_Font glutBitmap9By15 = {FL_SCREEN, 15};
 Fl_Glut_Bitmap_Font glutBitmap8By13 = {FL_SCREEN, 13};

Modified: branches/branch-3.0/src/numericsort.c
===================================================================
--- branches/branch-3.0/src/numericsort.c	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/numericsort.c	2010-03-30 17:38:49 UTC (rev 7366)
@@ -33,7 +33,7 @@
 #include <stdlib.h>
 #include <sys/types.h>
 
-#include <FL/filename.H>
+#include <fltk3/filename.H>
 
 #if !defined(WIN32) || defined(__CYGWIN__)
 #  ifdef HAVE_DIRENT_H

Modified: branches/branch-3.0/src/print_panel.cxx
===================================================================
--- branches/branch-3.0/src/print_panel.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/print_panel.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -45,12 +45,12 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include "../src/flstring.h"
-#include <FL/Fl_Preferences.H>
-#include <FL/Fl_Int_Input.H>
+#include <fltk3/Fl_Preferences.H>
+#include <fltk3/Fl_Int_Input.H>
 
 static Fl_Preferences print_prefs(Fl_Preferences::USER, "fltk.org", "printers");
 static Fl_Double_Window *print_panel=(Fl_Double_Window *)0;
-static Fl_Group *print_panel_controls=(Fl_Group *)0;
+static fltk3::Group *print_panel_controls=(fltk3::Group *)0;
 static Fl_Choice *print_choice=(Fl_Choice *)0;
 static Fl_Button *print_properties=(Fl_Button *)0;
 static Fl_Box *print_status=(Fl_Box *)0;
@@ -58,7 +58,7 @@
 static Fl_Round_Button *print_pages=(Fl_Round_Button *)0;
 static Fl_Round_Button *print_selection=(Fl_Round_Button *)0;
 static Fl_Check_Button *print_collate_button=(Fl_Check_Button *)0;
-static Fl_Group *print_collate_group[2]={(Fl_Group *)0};
+static fltk3::Group *print_collate_group[2]={(fltk3::Group *)0};
 static Fl_Progress *print_progress=(Fl_Progress *)0;
 static Fl_Double_Window *print_properties_panel=(Fl_Double_Window *)0;
 static Fl_Choice *print_page_size=(Fl_Choice *)0;
@@ -147,7 +147,7 @@
  {0,0,0,0,0,0,0,0,0}
 };
 
-#include <FL/Fl_Pixmap.H>
+#include <fltk3/Fl_Pixmap.H>
 static const char *idata_print_color[] = {
 "24 24 17 1",
 " \tc None",
@@ -270,7 +270,7 @@
 
 Fl_Double_Window* make_print_panel() {
   { print_panel = new Fl_Double_Window(465, 235, Fl_Printer::dialog_title);
-    { print_panel_controls = new Fl_Group(10, 10, 447, 216);
+    { print_panel_controls = new fltk3::Group(10, 10, 447, 216);
       { print_choice = new Fl_Choice(133, 10, 181, 25, Fl_Printer::dialog_printer);
         print_choice->down_box(FL_BORDER_BOX);
         print_choice->labelfont(1);
@@ -283,7 +283,7 @@
       { print_status = new Fl_Box(0, 41, print_panel_controls->w(), 17, "printer/job status");
         print_status->align(Fl_Align(FL_ALIGN_CLIP|FL_ALIGN_INSIDE|FL_ALIGN_LEFT));
       } // Fl_Box* print_status
-      { Fl_Group* o = new Fl_Group(10, 86, 227, 105, Fl_Printer::dialog_range);
+      { fltk3::Group* o = new fltk3::Group(10, 86, 227, 105, Fl_Printer::dialog_range);
         o->box(FL_THIN_DOWN_BOX);
         o->labelfont(1);
         o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
@@ -314,8 +314,8 @@
           print_to->deactivate();
         } // Fl_Int_Input* print_to
         o->end();
-      } // Fl_Group* o
-      { Fl_Group* o = new Fl_Group(247, 86, 210, 105, Fl_Printer::dialog_copies);
+      } // fltk3::Group* o
+      { fltk3::Group* o = new fltk3::Group(247, 86, 210, 105, Fl_Printer::dialog_copies);
         o->box(FL_THIN_DOWN_BOX);
         o->labelfont(1);
         o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
@@ -329,7 +329,7 @@
           print_collate_button->when(FL_WHEN_CHANGED);
           print_collate_button->deactivate();
         } // Fl_Check_Button* print_collate_button
-        { print_collate_group[0] = new Fl_Group(257, 131, 191, 50);
+        { print_collate_group[0] = new fltk3::Group(257, 131, 191, 50);
           print_collate_group[0]->deactivate();
           { Fl_Box* o = new Fl_Box(287, 141, 30, 40, "1");
             o->box(FL_BORDER_BOX);
@@ -395,8 +395,8 @@
             o->deactivate();
           } // Fl_Box* o
           print_collate_group[0]->end();
-        } // Fl_Group* print_collate_group[0]
-        { print_collate_group[1] = new Fl_Group(257, 131, 191, 50);
+        } // fltk3::Group* print_collate_group[0]
+        { print_collate_group[1] = new fltk3::Group(257, 131, 191, 50);
           print_collate_group[1]->hide();
           print_collate_group[1]->deactivate();
           { Fl_Box* o = new Fl_Box(287, 141, 30, 40, "3");
@@ -454,9 +454,9 @@
             o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
           } // Fl_Box* o
           print_collate_group[1]->end();
-        } // Fl_Group* print_collate_group[1]
+        } // fltk3::Group* print_collate_group[1]
         o->end();
-      } // Fl_Group* o
+      } // fltk3::Group* o
       { Fl_Return_Button* o = new Fl_Return_Button(279, 201, 100, 25, Fl_Printer::dialog_print_button);
         o->callback((Fl_Callback*)print_cb);
       } // Fl_Return_Button* o
@@ -464,7 +464,7 @@
         o->callback((Fl_Callback*)cb_Cancel);
       } // Fl_Button* o
       print_panel_controls->end();
-    } // Fl_Group* print_panel_controls
+    } // fltk3::Group* print_panel_controls
     { print_progress = new Fl_Progress(10, 203, 289, 21);
       print_progress->selection_color((Fl_Color)4);
       print_progress->hide();
@@ -479,7 +479,7 @@
       print_page_size->labelfont(FL_HELVETICA);
       print_page_size->menu(menu_print_page_size);
     } // Fl_Choice* print_page_size
-    { Fl_Group* o = new Fl_Group(110, 45, 170, 40, Fl_Printer::property_mode);
+    { fltk3::Group* o = new fltk3::Group(110, 45, 170, 40, Fl_Printer::property_mode);
       o->labelfont(FL_HELVETICA);
       o->align(Fl_Align(FL_ALIGN_LEFT));
       { print_output_mode[0] = new Fl_Button(110, 45, 30, 40);
@@ -516,7 +516,7 @@
         print_output_mode[3]->image(image_print_gray);
       } // Fl_Button* print_output_mode[3]
       o->end();
-    } // Fl_Group* o
+    } // fltk3::Group* o
     { Fl_Return_Button* o = new Fl_Return_Button(93, 95, 99, 25, Fl_Printer::property_save);
       o->callback((Fl_Callback*)cb_Save);
     } // Fl_Return_Button* o

Modified: branches/branch-3.0/src/print_panel.h
===================================================================
--- branches/branch-3.0/src/print_panel.h	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/print_panel.h	2010-03-30 17:38:49 UTC (rev 7366)
@@ -32,18 +32,18 @@
 
 #ifndef print_panel_h
 #define print_panel_h
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Choice.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Round_Button.H>
-#include <FL/Fl_Input.H>
-#include <FL/Fl_Spinner.H>
-#include <FL/Fl_Check_Button.H>
-#include <FL/Fl_Return_Button.H>
-#include <FL/Fl_Progress.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Double_Window.H>
+#include <fltk3/Fl_Group.H>
+#include <fltk3/Fl_Choice.H>
+#include <fltk3/Fl_Button.H>
+#include <fltk3/Fl_Box.H>
+#include <fltk3/Fl_Round_Button.H>
+#include <fltk3/Fl_Input.H>
+#include <fltk3/Fl_Spinner.H>
+#include <fltk3/Fl_Check_Button.H>
+#include <fltk3/Fl_Return_Button.H>
+#include <fltk3/Fl_Progress.H>
 static Fl_Double_Window* make_print_panel();
 static void print_cb(Fl_Return_Button *, void *); 
 static void print_load();

Modified: branches/branch-3.0/src/ps_image.cxx
===================================================================
--- branches/branch-3.0/src/ps_image.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/ps_image.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -29,10 +29,10 @@
 #include <math.h>
 #include <string.h>
 
-#include <FL/Fl_PSfile_Device.H>
-#include <FL/Fl.H>
-#include <FL/Fl_Pixmap.H>
-#include <FL/Fl_Bitmap.H>
+#include <fltk3/Fl_PSfile_Device.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Pixmap.H>
+#include <fltk3/Fl_Bitmap.H>
  
 int Fl_PSfile_Device::alpha_mask(const uchar * data, int w, int h, int D, int LD){
 

Modified: branches/branch-3.0/src/scandir.c
===================================================================
--- branches/branch-3.0/src/scandir.c	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/scandir.c	2010-03-30 17:38:49 UTC (rev 7366)
@@ -21,7 +21,7 @@
 #else
 
 #  include "flstring.h"
-#  include <FL/fl_utf8.h>
+#  include <fltk3/fl_utf8.h>
 
 #  if !HAVE_SCANDIR
 #    include <stdlib.h>

Modified: branches/branch-3.0/src/screen_xywh.cxx
===================================================================
--- branches/branch-3.0/src/screen_xywh.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/src/screen_xywh.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -26,8 +26,8 @@
 //
 
 
-#include <FL/Fl.H>
-#include <FL/x.H>
+#include <fltk3/Fl.H>
+#include <fltk3/x.H>
 #include <config.h>
 
 

Modified: branches/branch-3.0/test/hello.cxx
===================================================================
--- branches/branch-3.0/test/hello.cxx	2010-03-30 15:18:29 UTC (rev 7365)
+++ branches/branch-3.0/test/hello.cxx	2010-03-30 17:38:49 UTC (rev 7366)
@@ -25,9 +25,9 @@
 //     http://www.fltk.org/str.php
 //
 
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Box.H>
+#include <fltk3/Fl.H>
+#include <fltk3/Fl_Window.H>
+#include <fltk3/Fl_Box.H>
 
 using namespace fltk3;
 

Direct Link to Message ]
 
     
Previous Message ]Next Message ]
 
 

Comments are owned by the poster. All other content is copyright 1998-2024 by Bill Spitzak and others. This project is hosted by The FLTK Team. Please report site problems to 'erco@seriss.com'.