Author: engelsman Date: 2009-05-25 12:49:40 -0700 (Mon, 25 May 2009) New Revision: 6790 Log: converted old html tags to doxygen in forms.dox
Modified: branches/branch-1.3/documentation/src/forms.dox Modified: branches/branch-1.3/documentation/src/forms.dox =================================================================== --- branches/branch-1.3/documentation/src/forms.dox 2009-05-25 18:49:47 UTC (rev 6789) +++ branches/branch-1.3/documentation/src/forms.dox 2009-05-25 19:49:40 UTC (rev 6790) @@ -1,4 +1,5 @@ /** + <!-- Warning: \p .fd does not work but <tt>.fd</tt> does --> \page forms Forms Compatibility @@ -6,7 +7,8 @@ \section forms_importing Importing Forms Layout Files -<A href=fluid.html#FLUID>FLUID</A> can read the .fd files put out by +\ref fluid "FLUID" +can read the <tt>.fd</tt> files put out by all versions of Forms and XForms fdesign. However, it will mangle them a bit, but it prints a warning message about anything it does not understand. FLUID cannot write fdesign files, so you should save to a @@ -14,16 +16,18 @@ You will need to edit your main code considerably to get it to link with the output from FLUID. If you are not interested in this you may -have more immediate luck with the forms compatibility header, <tt> -<FL/forms.H></tt>. +have more immediate luck with the forms compatibility header, <FL/forms.H>. \section forms_using Using the Compatibility Header File You should be able to compile existing Forms or XForms source code by -changing the include directory switch to your compiler so that the <tt> -forms.h</tt> file supplied with FLTK is included. Take a look at <tt> -forms.h</tt> to see how it works, but the basic trick is lots of inline -functions. Most of the XForms demo programs work without changes. +changing the include directory switch to your compiler so that the +\c forms.h file supplied with FLTK is included. +The \c forms.h file simply pulls in <FL/forms.H> so you don't need to +change your source code. +Take a look at <FL/forms.H> to see how it works, but the basic trick +is lots of inline functions. Most of the XForms demo programs work +without changes. You will also have to compile your Forms or XForms program using a C++ compiler. The FLTK library does not provide C bindings or header @@ -44,34 +48,32 @@ \section forms_problems Problems You Will Encounter -Many parts of XForms use X-specific structures like <tt>XEvent</tt> +Many parts of XForms use X-specific structures like \c XEvent in their interface. I did not emulate these! Unfortunately these features (such as the "canvas" widget) are needed by most large programs. You will need to rewrite these to use FLTK subclasses. -<A href=Fl_Free.html#Fl_Free><tt>Fl_Free</tt></A> widgets emulate -the <I>old</I> Forms "free" widget. It may be useful for porting -programs that change the <tt>handle()</tt> function on widgets, but you -will still need to rewrite things. +Fl_Free widgets emulate the \e old Forms "free" widget. +It may be useful for porting programs that change the \c handle() +function on widgets, but you will still need to rewrite things. -<A href=Fl_Timer.html#Fl_Timer><tt>Fl_Timer</tt></A> widgets are +Fl_Timer widgets are provided to emulate the XForms timer. These work, but are quite -inefficient and inaccurate compared to using <A href="Fl.html#Fl.add_timeout"> -<tt>Fl::add_timeout()</tt></A>. +inefficient and inaccurate compared to using Fl::add_timeout(). <I>All instance variables are hidden.</I> If you directly refer to -the x, y, w, h, label, or other fields of your Forms widgets you will -have to add empty parenthesis after each reference. The easiest way to -do this is to globally replace "->x" with "->x()", etc. Replace -"boxtype" with "box()". +the \p x, \p y, \p w, \p h, \p label, or other fields of your Forms +widgets you will have to add empty parenthesis after each reference. +The easiest way to do this is to globally replace <tt>"->x"</tt> +with <tt>"->x()"</tt>, etc. +Replace <tt>"boxtype"</tt> with <tt>"box()"</tt>. <tt>const char *</tt> arguments to most FLTK methods are simply -stored, while Forms would <tt>strdup()</tt> the passed string. This is +stored, while Forms would \c strdup() the passed string. This is most noticable with the label of widgets. Your program must always -pass static data such as a string constant or malloc'd buffer to <tt> -label()</tt>. If you are using labels to display program output you -may want to try the <A href=Fl_Output.html#Fl_Output><tt>Fl_Output</tt></A> -widget. +pass static data such as a string constant or malloc'd buffer to +\c label(). If you are using labels to display program output you +may want to try the Fl_Output widget. The default fonts and sizes are matched to the older GL version of Forms, so all labels will draw somewhat larger than an XForms program @@ -79,55 +81,55 @@ fdesign outputs a setting of a "fdui" instance variable to the main window. I did not emulate this because I wanted all instance variables -to be hidden. You can store the same information in the <tt>user_data()</tt> - field of a window. To do this, search through the fdesign output for -all occurances of "->fdui" and edit to use "->user_data()" instead. -This will require casts and is not trivial. +to be hidden. You can store the same information in the \c user_data() +field of a window. To do this, search through the fdesign output for all +occurances of <tt>"->fdui"</tt> and edit to use <tt>"->user_data()"</tt> +instead. This will require casts and is not trivial. -The prototype for the functions passed to <tt>fl_add_timeout()</tt> -and <tt>fl_set_idle_callback()</tt> callback are different. +The prototype for the functions passed to \c fl_add_timeout() +and \c fl_set_idle_callback() callback are different. <B>All the following XForms calls are missing:</B> -\li <tt>FL_REVISION</tt>, <tt>fl_library_version()</tt> -\li <tt>FL_RETURN_DBLCLICK</tt> (use <tt>Fl::event_clicks()</tt>) -\li <tt>fl_add_signal_callback()</tt> -\li <tt>fl_set_form_atactivate()</tt> <tt>fl_set_form_atdeactivate()</tt> -\li <tt>fl_set_form_property()</tt> -\li <tt>fl_set_app_mainform()</tt>, <tt>fl_get_app_mainform()</tt> -\li <tt>fl_set_form_minsize()</tt>, <tt>fl_set_form_maxsize()</tt> -\li <tt>fl_set_form_event_cmask()</tt>, <tt>fl_get_form_event_cmask()</tt> -\li <tt>fl_set_form_dblbuffer()</tt>, <tt>fl_set_object_dblbuffer()</tt> - (use an <tt>Fl_Double_Window</tt> instead) -\li <tt>fl_adjust_form_size()</tt> -\li <tt>fl_register_raw_callback()</tt> -\li <tt>fl_set_object_bw()</tt>, <tt>fl_set_border_width()</tt> -\li <tt>fl_set_object_resize()</tt>, <tt>fl_set_object_gravity()</tt> -\li <tt>fl_set_object_shortcutkey()</tt> -\li <tt>fl_set_object_automatic()</tt> -\li <tt>fl_get_object_bbox()</tt> (maybe FLTK should do this) -\li <tt>fl_set_object_prehandler()</tt>, <tt>fl_set_object_posthandler()</tt> -\li <tt>fl_enumerate_fonts()</tt> +\li \c FL_REVISION, \c fl_library_version() +\li \c FL_RETURN_DBLCLICK (use Fl::event_clicks()) +\li \c fl_add_signal_callback() +\li \c fl_set_form_atactivate() \c fl_set_form_atdeactivate() +\li \c fl_set_form_property() +\li \c fl_set_app_mainform(), \c fl_get_app_mainform() +\li \c fl_set_form_minsize(), \c fl_set_form_maxsize() +\li \c fl_set_form_event_cmask(), \c fl_get_form_event_cmask() +\li \c fl_set_form_dblbuffer(), \c fl_set_object_dblbuffer() + (use an Fl_Double_Window instead) +\li \c fl_adjust_form_size() +\li \c fl_register_raw_callback() +\li \c fl_set_object_bw(), \c fl_set_border_width() +\li \c fl_set_object_resize(), \c fl_set_object_gravity() +\li \c fl_set_object_shortcutkey() +\li \c fl_set_object_automatic() +\li \c fl_get_object_bbox() (maybe FLTK should do this) +\li \c fl_set_object_prehandler(), \c fl_set_object_posthandler() +\li \c fl_enumerate_fonts() \li Most drawing functions -\li <tt>fl_set_coordunit()</tt> (FLTK uses pixels all the time) -\li <tt>fl_ringbell()</tt> -\li <tt>fl_gettime()</tt> -\li <tt>fl_win*()</tt> (all these functions) -\li <tt>fl_initialize(argc,argv,x,y,z)</tt> ignores last 3 arguments -\li <tt>fl_read_bitmapfile()</tt>, <tt>fl_read_pixmapfile()</tt> -\li <tt>fl_addto_browser_chars()</tt> -\li <tt>FL_MENU_BUTTON</tt> just draws normally -\li <tt>fl_set_bitmapbutton_file()</tt>, <tt>fl_set_pixmapbutton_file()</tt> -\li <tt>FL_CANVAS</tt> objects -\li <tt>FL_DIGITAL_CLOCK</tt> (comes out analog) -\li <tt>fl_create_bitmap_cursor()</tt>, <tt>fl_set_cursor_color()</tt> -\li <tt>fl_set_dial_angles()</tt> -\li <tt>fl_show_oneliner()</tt> -\li <tt>fl_set_choice_shortcut(a,b,c) </tt> +\li \c fl_set_coordunit() (FLTK uses pixels all the time) +\li \c fl_ringbell() +\li \c fl_gettime() +\li \c fl_win*() (all these functions) +\li \c fl_initialize(argc,argv,x,y,z) ignores last 3 arguments +\li \c fl_read_bitmapfile(), \c fl_read_pixmapfile() +\li \c fl_addto_browser_chars() +\li \c FL_MENU_BUTTON just draws normally +\li \c fl_set_bitmapbutton_file(), \c fl_set_pixmapbutton_file() +\li \c FL_CANVAS objects +\li \c FL_DIGITAL_CLOCK (comes out analog) +\li \c fl_create_bitmap_cursor(), \c fl_set_cursor_color() +\li \c fl_set_dial_angles() +\li \c fl_show_oneliner() +\li \c fl_set_choice_shortcut(a,b,c) \li command log \li Only some of file selector is emulated -\li <tt>FL_DATE_INPUT</tt> -\li <tt>fl_pup*()</tt> (all these functions) +\li \c FL_DATE_INPUT +\li \c fl_pup*() (all these functions) \li textbox object (should be easy but I had no sample programs) \li xyplot object @@ -155,37 +157,35 @@ None of this works with FLTK. Nor will it compile, the necessary calls are not in the interface. -You have to make a subclass of <A href=Fl_Gl_Window.html#Fl_Gl_Window> -<tt>Fl_Gl_Window</tt></A> and write a <tt>draw()</tt> method and <tt> -handle()</tt> method. This may require anywhere from a trivial to a +You have to make a subclass of Fl_Gl_Window and write a \c draw() method +and \c handle() method. This may require anywhere from a trivial to a major rewrite. -If you draw into the overlay planes you will have to also write a <tt> -draw_overlay()</tt> method and call <tt>redraw_overlay()</tt> on the +If you draw into the overlay planes you will have to also write a +\c draw_overlay() method and call \c redraw_overlay() on the OpenGL window. -One easy way to hack your program so it works is to make the <tt> -draw()</tt> and <tt>handle()</tt> methods on your window set some -static variables, storing what event happened. Then in the main loop -of your program, call <tt>Fl::wait()</tt> and then check these -variables, acting on them as though they are events read from <tt> -fl_queue</tt>. +One easy way to hack your program so it works is to make the \c draw() +and \c handle() methods on your window set some static variables, storing +what event happened. Then in the main loop of your program, call +Fl::wait() and then check these variables, acting on them as though +they are events read from \c fl_queue. \par You Must Use OpenGL to Draw Everything -The file <tt><FL/gl.h></tt> defines replacements for a lot of IRISGL +The file <FL/gl.h> defines replacements for a lot of IRISGL calls, translating them to OpenGL. There are much better translators available that you might want to investigate. \par You Cannot Make Forms Subclasses -Programs that call <tt>fl_make_object</tt> or directly setting the +Programs that call \c fl_make_object or directly setting the handle routine will not compile. You have to rewrite them to use a -subclass of <tt>Fl_Widget</tt>. It is important to note that the <tt> -handle()</tt> method is not exactly the same as the <tt>handle()</tt> -function of Forms. Where a Forms <tt>handle()</tt> returned non-zero, -your <tt>handle()</tt> must call <tt>do_callback()</tt>. And your <tt> -handle()</tt> must return non-zero if it "understood" the event. +subclass of Fl_Widget. It is important to note that the \c handle() +method is not exactly the same as the \c handle() function of Forms. +Where a Forms \c handle() returned non-zero, your \c handle() must +call \c do_callback(). And your \c handle() must return non-zero +if it "understood" the event. An attempt has been made to emulate the "free" widget. This appears to work quite well. It may be quicker to modify your subclass into a @@ -214,7 +214,7 @@ </TABLE> </CENTER> -Anything else in <tt>getvaluator</tt> and you are on your own... +Anything else in \c getvaluator and you are on your own... \par Font Numbers Are Different _______________________________________________ fltk-commit mailing list [email protected] http://lists.easysw.com/mailman/listinfo/fltk-commit
