Move the sources to trunk
[opencv] / otherlibs / _fltk / include / FL / forms.H
1 //
2 // "$Id: forms.H,v 1.2 2002/12/01 15:38:37 neurosurg Exp $"
3 //
4 // Forms emulation header file for the Fast Light Tool Kit (FLTK).
5 //
6 // Copyright 1998-2002 by Bill Spitzak and others.
7 //
8 // This library is free software; you can redistribute it and/or
9 // modify it under the terms of the GNU Library General Public
10 // License as published by the Free Software Foundation; either
11 // version 2 of the License, or (at your option) any later version.
12 //
13 // This library is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16 // Library General Public License for more details.
17 //
18 // You should have received a copy of the GNU Library General Public
19 // License along with this library; if not, write to the Free Software
20 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
21 // USA.
22 //
23 // Please report all bugs and problems to "fltk-bugs@fltk.org".
24 //
25
26 #ifndef __FORMS_H__
27 #define __FORMS_H__
28
29 #include "Fl.H"
30 #include "Fl_Group.H"
31 #include "Fl_Window.H"
32 #include "fl_draw.H"
33
34 typedef Fl_Widget FL_OBJECT;
35 typedef Fl_Window FL_FORM;
36
37 ////////////////////////////////////////////////////////////////
38 // Random constants & symbols defined by forms.h file:
39
40 #ifndef NULL
41 #define NULL 0
42 #endif
43 #ifndef FALSE
44 #define FALSE 0
45 #define TRUE 1
46 #endif
47
48 #define FL_ON           1
49 #define FL_OK           1
50 #define FL_VALID        1
51 #define FL_PREEMPT      1
52 #define FL_AUTO         2
53 #define FL_WHEN_NEEDED  FL_AUTO
54 #define FL_OFF          0
55 #define FL_NONE         0
56 #define FL_CANCEL       0
57 #define FL_INVALID      0
58 #define FL_IGNORE       -1
59 #define FL_CLOSE        -2
60
61 #define FL_LCOL         FL_BLACK
62 #define FL_COL1         FL_GRAY
63 #define FL_MCOL         FL_LIGHT1
64 #define FL_LEFT_BCOL    FL_LIGHT3 // 53 is better match
65 #define FL_TOP_BCOL     FL_LIGHT2 // 51
66 #define FL_BOTTOM_BCOL  FL_DARK2  // 40
67 #define FL_RIGHT_BCOL   FL_DARK3  // 36
68 #define FL_INACTIVE     FL_INACTIVE_COLOR
69 #define FL_INACTIVE_COL FL_INACTIVE_COLOR
70 #define FL_FREE_COL1    FL_FREE_COLOR
71 #define FL_FREE_COL2    ((Fl_Color)(FL_FREE_COLOR+1))
72 #define FL_FREE_COL3    ((Fl_Color)(FL_FREE_COLOR+2))
73 #define FL_FREE_COL4    ((Fl_Color)(FL_FREE_COLOR+3))
74 #define FL_FREE_COL5    ((Fl_Color)(FL_FREE_COLOR+4))
75 #define FL_FREE_COL6    ((Fl_Color)(FL_FREE_COLOR+5))
76 #define FL_FREE_COL7    ((Fl_Color)(FL_FREE_COLOR+6))
77 #define FL_FREE_COL8    ((Fl_Color)(FL_FREE_COLOR+7))
78 #define FL_FREE_COL9    ((Fl_Color)(FL_FREE_COLOR+8))
79 #define FL_FREE_COL10   ((Fl_Color)(FL_FREE_COLOR+9))
80 #define FL_FREE_COL11   ((Fl_Color)(FL_FREE_COLOR+10))
81 #define FL_FREE_COL12   ((Fl_Color)(FL_FREE_COLOR+11))
82 #define FL_FREE_COL13   ((Fl_Color)(FL_FREE_COLOR+12))
83 #define FL_FREE_COL14   ((Fl_Color)(FL_FREE_COLOR+13))
84 #define FL_FREE_COL15   ((Fl_Color)(FL_FREE_COLOR+14))
85 #define FL_FREE_COL16   ((Fl_Color)(FL_FREE_COLOR+15))
86 #define FL_TOMATO       ((Fl_Color)(131))
87 #define FL_INDIANRED    ((Fl_Color)(164))
88 #define FL_SLATEBLUE    ((Fl_Color)(195))
89 #define FL_DARKGOLD     ((Fl_Color)(84))
90 #define FL_PALEGREEN    ((Fl_Color)(157))
91 #define FL_ORCHID       ((Fl_Color)(203))
92 #define FL_DARKCYAN     ((Fl_Color)(189))
93 #define FL_DARKTOMATO   ((Fl_Color)(113))
94 #define FL_WHEAT        ((Fl_Color)(174))
95
96 #define FL_ALIGN_BESIDE FL_ALIGN_INSIDE
97
98 #define FL_PUP_TOGGLE   2 // FL_MENU_TOGGLE
99 #define FL_PUP_INACTIVE 1 // FL_MENU_INACTIVE
100 #define FL_NO_FRAME     FL_NO_BOX
101 #define FL_ROUNDED3D_UPBOX      FL_ROUND_UP_BOX
102 #define FL_ROUNDED3D_DOWNBOX    FL_ROUND_DOWN_BOX
103 #define FL_OVAL3D_UPBOX         FL_ROUND_UP_BOX
104 #define FL_OVAL3D_DOWNBOX       FL_ROUND_DOWN_BOX
105
106 #define FL_MBUTTON1     1
107 #define FL_LEFTMOUSE    1
108 #define FL_MBUTTON2     2
109 #define FL_MIDDLEMOUSE  2
110 #define FL_MBUTTON3     3
111 #define FL_RIGHTMOUSE   3
112 #define FL_MBUTTON4     4
113 #define FL_MBUTTON5     5
114
115 #define FL_INVALID_STYLE 255
116 #define FL_NORMAL_STYLE FL_HELVETICA
117 #define FL_BOLD_STYLE   FL_HELVETICA_BOLD
118 #define FL_ITALIC_STYLE FL_HELVETICA_ITALIC
119 #define FL_BOLDITALIC_STYLE FL_HELVETICA_BOLD_ITALIC
120 #define FL_FIXED_STYLE  FL_COURIER
121 #define FL_FIXEDBOLD_STYLE FL_COURIER_BOLD
122 #define FL_FIXEDITALIC_STYLE FL_COURIER_ITALIC
123 #define FL_FIXEDBOLDITALIC_STYLE FL_COURIER_BOLD_ITALIC
124 #define FL_TIMES_STYLE  FL_TIMES
125 #define FL_TIMESBOLD_STYLE FL_TIMES_BOLD
126 #define FL_TIMESITALIC_STYLE FL_TIMES_ITALIC
127 #define FL_TIMESBOLDITALIC_STYLE FL_TIMES_BOLD_ITALIC
128
129 // hacks to change the labeltype() when passed to fl_set_object_lstyle():
130 #define FL_SHADOW_STYLE         (FL_SHADOW_LABEL<<8)
131 #define FL_ENGRAVED_STYLE       (FL_ENGRAVED_LABEL<<8)
132 #define FL_EMBOSSED_STYLE       (FL_EMBOSSED_LABEL<<0)
133
134 // size values are different from XForms, match older Forms:
135 #define FL_TINY_SIZE    8
136 #define FL_SMALL_SIZE   11 // 10
137 //#define FL_NORMAL_SIZE        14 // 12
138 #define FL_MEDIUM_SIZE  18 // 14
139 #define FL_LARGE_SIZE   24 // 18
140 #define FL_HUGE_SIZE    32 // 24
141 #define FL_DEFAULT_SIZE FL_SMALL_SIZE
142 #define FL_TINY_FONT    FL_TINY_SIZE
143 #define FL_SMALL_FONT   FL_SMALL_SIZE
144 #define FL_NORMAL_FONT  FL_NORMAL_SIZE
145 #define FL_MEDIUM_FONT  FL_MEDIUM_SIZE
146 #define FL_LARGE_FONT   FL_LARGE_SIZE
147 #define FL_HUGE_FONT    FL_HUGE_SIZE
148 #define FL_NORMAL_FONT1 FL_SMALL_FONT
149 #define FL_NORMAL_FONT2 FL_NORMAL_FONT
150 #define FL_DEFAULT_FONT FL_SMALL_FONT
151
152 #define FL_RETURN_END_CHANGED   FL_WHEN_RELEASE
153 #define FL_RETURN_CHANGED       FL_WHEN_CHANGED
154 #define FL_RETURN_END           FL_WHEN_RELEASE_ALWAYS
155 #define FL_RETURN_ALWAYS        (FL_WHEN_CHANGED|FL_WHEN_NOT_CHANGED)
156
157 #define FL_BOUND_WIDTH  3
158
159 typedef int FL_Coord;
160 typedef int FL_COLOR;
161
162 ////////////////////////////////////////////////////////////////
163 // fltk interaction:
164
165 #define FL_CMD_OPT void
166 extern FL_EXPORT void fl_initialize(int*, char*[], const char*, FL_CMD_OPT*, int);
167 inline void fl_finish() {}
168
169 typedef void (*FL_IO_CALLBACK) (int, void*);
170 inline void fl_add_io_callback(int fd, short w, FL_IO_CALLBACK cb, void* v) {
171   Fl::add_fd(fd,w,cb,v);}
172 inline void fl_remove_io_callback(int fd, short, FL_IO_CALLBACK) {
173   Fl::remove_fd(fd);} // removes all the callbacks!
174
175 // type of callback is different and no "id" number is returned:
176 inline void fl_add_timeout(long msec, void (*cb)(void*), void* v) {
177   Fl::add_timeout(msec*.001, cb, v);}
178 inline void fl_remove_timeout(int) {}
179
180 // type of callback is different!
181 inline void fl_set_idle_callback(void (*cb)()) {Fl::set_idle(cb);}
182
183 FL_EXPORT Fl_Widget* fl_do_forms(void);
184 FL_EXPORT Fl_Widget* fl_check_forms();
185 inline Fl_Widget* fl_do_only_forms(void) {return fl_do_forms();}
186 inline Fl_Widget* fl_check_only_forms(void) {return fl_check_forms();}
187
188 // because of new redraw behavior, these are no-ops:
189 inline void fl_freeze_object(Fl_Widget*) {}
190 inline void fl_unfreeze_object(Fl_Widget*) {}
191 inline void fl_freeze_form(Fl_Window*) {}
192 inline void fl_unfreeze_form(Fl_Window*) {}
193 inline void fl_freeze_all_forms() {}
194 inline void fl_unfreeze_all_forms() {}
195
196 inline void fl_set_focus_object(Fl_Window*, Fl_Widget* o) {Fl::focus(o);}
197 inline void fl_reset_focus_object(Fl_Widget* o) {Fl::focus(o);}
198 #define fl_set_object_focus fl_set_focus_object
199
200 // void fl_set_form_atclose(Fl_Window*w,int (*cb)(Fl_Window*,void*),void* v)
201 // void fl_set_atclose(int (*cb)(Fl_Window*,void*),void*)
202 // fl_set_form_atactivate/atdeactivate not implemented!
203
204 ////////////////////////////////////////////////////////////////
205 // Fl_Widget:
206
207 inline void fl_set_object_boxtype(Fl_Widget* o, Fl_Boxtype a) {o->box(a);}
208 inline void fl_set_object_lsize(Fl_Widget* o,int s) {o->labelsize(s);}
209 inline void fl_set_object_lstyle(Fl_Widget* o,int a) {
210   o->labelfont((uchar)a); o->labeltype((Fl_Labeltype)(a>>8));}
211 inline void fl_set_object_lcol(Fl_Widget* o, unsigned a) {o->labelcolor(a);}
212 #define fl_set_object_lcolor  fl_set_object_lcol
213 inline void fl_set_object_lalign(Fl_Widget* o, Fl_Align a) {o->align(a);}
214 #define fl_set_object_align fl_set_object_lalign
215 inline void fl_set_object_color(Fl_Widget* o,unsigned a,unsigned b) {o->color(a,b);}
216 inline void fl_set_object_label(Fl_Widget* o, const char* a) {o->label(a); o->redraw();}
217 inline void fl_set_object_position(Fl_Widget*o,int x,int y) {o->position(x,y);}
218 inline void fl_set_object_size(Fl_Widget* o, int w, int h) {o->size(w,h);}
219 inline void fl_set_object_geometry(Fl_Widget* o,int x,int y,int w,int h) {o->resize(x,y,w,h);}
220
221 inline void fl_get_object_geometry(Fl_Widget* o,int*x,int*y,int*w,int*h) {
222   *x = o->x(); *y = o->y(); *w = o->w(); *h = o->h();}
223 inline void fl_get_object_position(Fl_Widget* o,int*x,int*y) {
224   *x = o->x(); *y = o->y();}
225
226 typedef void (*Forms_CB)(Fl_Widget*, long);
227 inline void fl_set_object_callback(Fl_Widget*o,Forms_CB c,long a) {o->callback(c,a);}
228 #define fl_set_call_back      fl_set_object_callback
229 inline void fl_call_object_callback(Fl_Widget* o) {o->do_callback();}
230 inline void fl_trigger_object(Fl_Widget* o) {o->do_callback();}
231 inline void fl_set_object_return(Fl_Widget* o, int v) {
232   o->when((Fl_When)(v|FL_WHEN_RELEASE));}
233
234 inline void fl_redraw_object(Fl_Widget* o) {o->redraw();}
235 inline void fl_show_object(Fl_Widget* o) {o->show();}
236 inline void fl_hide_object(Fl_Widget* o) {o->hide();}
237 inline void fl_free_object(Fl_Widget* x) {delete x;}
238 inline void fl_delete_object(Fl_Widget* o) {((Fl_Group*)(o->parent()))->remove(*o);}
239 inline void fl_activate_object(Fl_Widget* o) {o->activate();}
240 inline void fl_deactivate_object(Fl_Widget* o) {o->deactivate();}
241
242 inline void fl_add_object(Fl_Window* f, Fl_Widget* x) {f->add(x);}
243 inline void fl_insert_object(Fl_Widget* o, Fl_Widget* b) {
244     ((Fl_Group*)(b->parent()))->insert(*o,b);}
245
246 inline Fl_Window* FL_ObjWin(Fl_Widget* o) {return o->window();}
247
248 ////////////////////////////////////////////////////////////////
249 // things that appered in the demos a lot that I don't emulate, but
250 // I did not want to edit out of all the demos...
251
252 inline int fl_get_border_width() {return 3;}
253 inline void fl_set_border_width(int) {}
254 inline void fl_set_object_dblbuffer(Fl_Widget*, int) {}
255 inline void fl_set_form_dblbuffer(Fl_Window*, int) {}
256
257 ////////////////////////////////////////////////////////////////
258 // Fl_Window:
259
260 inline void fl_free_form(Fl_Window* x) {delete x;}
261 inline void fl_redraw_form(Fl_Window* f) {f->redraw();}
262
263 inline Fl_Window* fl_bgn_form(Fl_Boxtype b,int w,int h) {
264   Fl_Window* g = new Fl_Window(w,h,0);
265   g->box(b);
266   return g;
267 }
268 FL_EXPORT void fl_end_form();
269 inline void fl_addto_form(Fl_Window* f) {f->begin();}
270 inline Fl_Group* fl_bgn_group() {return new Fl_Group(0,0,0,0,0);}
271 inline void fl_end_group() {Fl_Group::current()->forms_end();}
272 inline void fl_addto_group(Fl_Widget* o) {((Fl_Group* )o)->begin();}
273 #define resizebox _ddfdesign_kludge()
274
275 inline void fl_scale_form(Fl_Window* f, double x, double y) {
276   f->resizable(f); f->size(int(f->w()*x),int(f->h()*y));}
277 inline void fl_set_form_position(Fl_Window* f,int x,int y) {f->position(x,y);}
278 inline void fl_set_form_size(Fl_Window* f, int w, int h) {f->size(w,h);}
279 inline void fl_set_form_geometry(Fl_Window* f,int x,int y,int w,int h) {
280   f->resize(x,y,w,h);}
281 #define fl_set_initial_placement fl_set_form_geometry
282 inline void fl_adjust_form_size(Fl_Window*) {}
283
284 FL_EXPORT void fl_show_form(Fl_Window* f,int p,int b,const char* n);
285 enum {  // "p" argument values:
286   FL_PLACE_FREE = 0,    // make resizable
287   FL_PLACE_MOUSE = 1,   // mouse centered on form
288   FL_PLACE_CENTER = 2,  // center of the screen
289   FL_PLACE_POSITION = 4,// fixed position, resizable
290   FL_PLACE_SIZE = 8,    // fixed size, normal fltk behavior
291   FL_PLACE_GEOMETRY =16,// fixed size and position
292   FL_PLACE_ASPECT = 32, // keep aspect ratio (ignored)
293   FL_PLACE_FULLSCREEN=64,// fill screen
294   FL_PLACE_HOTSPOT = 128,// enables hotspot
295   FL_PLACE_ICONIC = 256,// iconic (ignored)
296   FL_FREE_SIZE=(1<<14), // force resizable
297   FL_FIX_SIZE =(1<<15)  // force off resizable
298 };
299 #define FL_PLACE_FREE_CENTER (FL_PLACE_CENTER|FL_FREE_SIZE)
300 #define FL_PLACE_CENTERFREE  (FL_PLACE_CENTER|FL_FREE_SIZE)
301 enum {  // "b" arguement values:
302   FL_NOBORDER = 0,
303   FL_FULLBORDER,
304   FL_TRANSIENT
305 //FL_MODAL = (1<<8)     // not implemented yet in Forms
306 };
307 inline void fl_set_form_hotspot(Fl_Window* w,int x,int y) {w->hotspot(x,y);}
308 inline void fl_set_form_hotobject(Fl_Window* w, Fl_Widget* o) {w->hotspot(o);}
309 extern FL_EXPORT char fl_flip;  // in forms.C
310 inline void fl_flip_yorigin() {fl_flip = 1;}
311
312 #define fl_prepare_form_window fl_show_form
313 inline void fl_show_form_window(Fl_Window*) {}
314
315 inline void fl_raise_form(Fl_Window* f) {f->show();}
316
317 inline void fl_hide_form(Fl_Window* f) {f->hide();}
318 inline void fl_pop_form(Fl_Window* f) {f->show();}
319
320 extern FL_EXPORT char fl_modal_next; // in forms.C
321 inline void fl_activate_all_forms() {}
322 inline void fl_deactivate_all_forms() {fl_modal_next = 1;}
323 inline void fl_deactivate_form(Fl_Window*w) {w->deactivate();}
324 inline void fl_activate_form(Fl_Window*w) {w->activate();}
325
326 inline void fl_set_form_title(Fl_Window* f, const char* s) {f->label(s);}
327 inline void fl_title_form(Fl_Window* f, const char* s) {f->label(s);}
328
329 typedef void (*Forms_FormCB)(Fl_Widget*);
330 inline void fl_set_form_callback(Fl_Window* f,Forms_FormCB c) {f->callback(c);}
331 #define fl_set_form_call_back fl_set_form_callback
332
333 inline void fl_init() {}
334 FL_EXPORT void fl_set_graphics_mode(int,int);
335
336 inline int fl_form_is_visible(Fl_Window* f) {return f->visible();}
337
338 inline int fl_mouse_button() {return Fl::event_button();}
339 #define fl_mousebutton fl_mouse_button
340
341 #define fl_free       free
342 #define fl_malloc     malloc
343 #define fl_calloc     calloc
344 #define fl_realloc    realloc
345
346 ////////////////////////////////////////////////////////////////
347 // Drawing functions.  Only usable inside an Fl_Free object?
348
349 inline void fl_drw_box(Fl_Boxtype b,int x,int y,int w,int h,Fl_Color bgc,int=3) {
350     fl_draw_box(b,x,y,w,h,bgc);}
351 inline void fl_drw_frame(Fl_Boxtype b,int x,int y,int w,int h,Fl_Color bgc,int=3) {
352     fl_draw_box(b,x,y,w,h,bgc);}
353
354 inline void fl_drw_text(Fl_Align align, int x, int y, int w, int h,
355                   Fl_Color fgcolor, int size, Fl_Font style,
356                   const char* s) {
357   fl_font(style,size);
358   fl_color(fgcolor);
359   fl_draw(s,x,y,w,h,align);
360 }
361
362 // this does not work except for CENTER...
363 inline void fl_drw_text_beside(Fl_Align align, int x, int y, int w, int h,
364                   Fl_Color fgcolor, int size, Fl_Font style,
365                   const char* s) {
366   fl_font(style,size);
367   fl_color(fgcolor);
368   fl_draw(s,x,y,w,h,align);
369 }
370
371 inline void fl_set_font_name(Fl_Font n,const char* s) {Fl::set_font(n,s);}
372
373 inline void fl_mapcolor(Fl_Color c, uchar r, uchar g, uchar b) {Fl::set_color(c,r,g,b);}
374
375 #define fl_set_clipping(x,y,w,h) fl_clip(x,y,w,h)
376 #define fl_unset_clipping() fl_pop_clip()
377
378 ////////////////////////////////////////////////////////////////
379 // Forms classes:
380
381 inline Fl_Widget* fl_add_new(Fl_Widget* p) {return p;}
382 inline Fl_Widget* fl_add_new(uchar t,Fl_Widget* p) {p->type(t); return p;}
383
384 #define forms_constructor(type,name) \
385 inline type* name(uchar t,int x,int y,int w,int h,const char* l) { \
386  return (type*)(fl_add_new(t, new type(x,y,w,h,l)));}
387 #define forms_constructort(type,name) \
388 inline type* name(uchar t,int x,int y,int w,int h,const char* l) { \
389  return (type*)(fl_add_new(new type(t,x,y,w,h,l)));}
390 #define forms_constructorb(type,name) \
391 inline type* name(Fl_Boxtype t,int x,int y,int w,int h,const char* l) { \
392  return (type*)(fl_add_new(new type(t,x,y,w,h,l)));}
393
394 #include "Fl_FormsBitmap.H"
395 #define FL_NORMAL_BITMAP FL_NO_BOX
396 forms_constructorb(Fl_FormsBitmap, fl_add_bitmap)
397 inline void fl_set_bitmap_data(Fl_Widget* o, int w, int h, const uchar* b) {
398     ((Fl_FormsBitmap*)o)->set(w,h,b);
399 }
400
401 #include "Fl_FormsPixmap.H"
402 #define FL_NORMAL_PIXMAP FL_NO_BOX
403 forms_constructorb(Fl_FormsPixmap, fl_add_pixmap)
404 inline void fl_set_pixmap_data(Fl_Widget* o, char*const* b) {
405     ((Fl_FormsPixmap*)o)->set(b);
406 }
407 //inline void fl_set_pixmap_file(Fl_Widget*, const char*);
408 inline void fl_set_pixmap_align(Fl_Widget* o,Fl_Align a,int,int) {o->align(a);}
409 //inline void fl_set_pixmap_colorcloseness(int, int, int);
410
411 #include "Fl_Box.H"
412 forms_constructorb(Fl_Box, fl_add_box)
413
414 #include "Fl_Browser.H"
415 forms_constructor(Fl_Browser, fl_add_browser)
416
417 inline void fl_clear_browser(Fl_Widget* o) {
418     ((Fl_Browser*)o)->clear();}
419 inline void fl_add_browser_line(Fl_Widget* o, const char* s) {
420     ((Fl_Browser*)o)->add(s);}
421 inline void fl_addto_browser(Fl_Widget* o, const char* s) {
422     ((Fl_Browser*)o)->add(s);} /* should also scroll to bottom */
423 //inline void fl_addto_browser_chars(Fl_Widget*, const char*)
424 //#define fl_append_browser fl_addto_browser_chars
425 inline void fl_insert_browser_line(Fl_Widget* o, int n, const char* s) {
426     ((Fl_Browser*)o)->insert(n,s);}
427 inline void fl_delete_browser_line(Fl_Widget* o, int n) {
428     ((Fl_Browser*)o)->remove(n);}
429 inline void fl_replace_browser_line(Fl_Widget* o, int n, const char* s) {
430     ((Fl_Browser*)o)->replace(n,s);}
431 inline char* fl_get_browser_line(Fl_Widget* o, int n) {
432     return (char*)(((Fl_Browser*)o)->text(n));}
433 inline int fl_load_browser(Fl_Widget* o, const char* f) {
434     return ((Fl_Browser*)o)->load(f);}
435 inline void fl_select_browser_line(Fl_Widget* o, int n) {
436     ((Fl_Browser*)o)->select(n,1);}
437 inline void fl_deselect_browser_line(Fl_Widget* o, int n) {
438     ((Fl_Browser*)o)->select(n,0);}
439 inline void fl_deselect_browser(Fl_Widget* o) {
440     ((Fl_Browser*)o)->deselect();}
441 inline int fl_isselected_browser_line(Fl_Widget* o, int n) {
442     return ((Fl_Browser*)o)->selected(n);}
443 inline int fl_get_browser_topline(Fl_Widget* o) {
444     return ((Fl_Browser*)o)->topline();}
445 inline int fl_get_browser(Fl_Widget* o) {
446     return ((Fl_Browser*)o)->value();}
447 inline int fl_get_browser_maxline(Fl_Widget* o) {
448     return ((Fl_Browser*)o)->size();}
449 //linline int fl_get_browser_screenlines(Fl_Widget*);
450 inline void fl_set_browser_topline(Fl_Widget* o, int n) {
451     ((Fl_Browser*)o)->topline(n);}
452 inline void fl_set_browser_fontsize(Fl_Widget* o, int s) {
453     ((Fl_Browser*)o)->textsize(s);}
454 inline void fl_set_browser_fontstyle(Fl_Widget* o, Fl_Font s) {
455     ((Fl_Browser*)o)->textfont(s);}
456 inline void fl_set_browser_specialkey(Fl_Widget* o, char c) {
457     ((Fl_Browser*)o)->format_char(c);}
458 //inline void fl_set_browser_vscrollbar(Fl_Widget*, int);
459 //inline void fl_set_browser_hscrollbar(Fl_Widget*, int);
460 //inline void fl_set_browser_leftslider(Fl_Widget*, int);
461 //#define fl_set_browser_leftscrollbar fl_set_browser_leftslider
462 //inline void fl_set_browser_line_selectable(Fl_Widget*, int, int);
463 //inline void fl_get_browser_dimension(Fl_Widget*,int*,int*,int*,int*);
464 //inline void fl_set_browser_dblclick_callback(Fl_Widget*,FL_CALLBACKPTR,long);
465 //inline void fl_set_browser_xoffset(Fl_Widget*, FL_Coord);
466 //inline void fl_set_browser_scrollbarsize(Fl_Widget*, int, int);
467 inline void fl_setdisplayed_browser_line(Fl_Widget* o, int n, int i) {
468     ((Fl_Browser*)o)->display(n,i);}
469 inline int fl_isdisplayed_browser_line(Fl_Widget* o, int n) {
470     return ((Fl_Browser*)o)->displayed(n);}
471
472 #include "Fl_Button.H"
473
474 #define FL_NORMAL_BUTTON        0
475 #define FL_TOUCH_BUTTON         4
476 #define FL_INOUT_BUTTON         5
477 #define FL_RETURN_BUTTON        6
478 #define FL_HIDDEN_RET_BUTTON    7
479 #define FL_PUSH_BUTTON          FL_TOGGLE_BUTTON
480 #define FL_MENU_BUTTON          9
481
482 FL_EXPORT Fl_Button* fl_add_button(uchar t,int x,int y,int w,int h,const char* l);
483 inline int fl_get_button(Fl_Widget* b) {return ((Fl_Button*)b)->value();}
484 inline void fl_set_button(Fl_Widget* b, int v) {((Fl_Button*)b)->value(v);}
485 inline int fl_get_button_numb(Fl_Widget*) {return Fl::event_button();}
486 inline void fl_set_button_shortcut(Fl_Widget* b, const char* s,int=0) {
487     ((Fl_Button*)b)->shortcut(s);}
488 //#define fl_set_object_shortcut(b,s) fl_set_button_shortcut(b,s)
489
490 #include "Fl_Light_Button.H"
491 forms_constructor(Fl_Light_Button, fl_add_lightbutton)
492
493 #include "Fl_Round_Button.H"
494 forms_constructor(Fl_Round_Button, fl_add_roundbutton)
495 forms_constructor(Fl_Round_Button, fl_add_round3dbutton)
496
497 #include "Fl_Check_Button.H"
498 forms_constructor(Fl_Check_Button, fl_add_checkbutton)
499
500 inline Fl_Widget* fl_add_bitmapbutton(int t,int x,int y,int w,int h,const char* l) {Fl_Widget* o = fl_add_button(t,x,y,w,h,l); return o;}
501 inline void fl_set_bitmapbutton_data(Fl_Widget* o,int a,int b,uchar* c) {
502   (new Fl_Bitmap(c,a,b))->label(o);}  // does not delete old Fl_Bitmap!
503
504 inline Fl_Widget* fl_add_pixmapbutton(int t,int x,int y,int w,int h,const char* l) {Fl_Widget* o = fl_add_button(t,x,y,w,h,l); return o;}
505 inline void fl_set_pixmapbutton_data(Fl_Widget* o, const char*const* c) {
506   (new Fl_Pixmap(c))->label(o);}  // does not delete old Fl_Pixmap!
507
508 // Fl_Canvas object not yet implemented!
509
510 #include "Fl_Chart.H"
511
512 forms_constructor(Fl_Chart, fl_add_chart)
513 inline void fl_clear_chart(Fl_Widget* o) {
514   ((Fl_Chart*)o)->clear();}
515 inline void fl_add_chart_value(Fl_Widget* o,double v,const char* s,uchar c){
516   ((Fl_Chart*)o)->add(v,s,c);}
517 inline void fl_insert_chart_value(Fl_Widget* o, int i, double v, const char* s, uchar c) {
518   ((Fl_Chart*)o)->insert(i,v,s,c);}
519 inline void fl_replace_chart_value(Fl_Widget* o, int i, double v, const char* s, uchar c) {
520   ((Fl_Chart*)o)->replace(i,v,s,c);}
521 inline void fl_set_chart_bounds(Fl_Widget* o, double a, double b) {
522   ((Fl_Chart*)o)->bounds(a,b);}
523 inline void fl_set_chart_maxnumb(Fl_Widget* o, int v) {
524   ((Fl_Chart*)o)->maxsize(v);}
525 inline void fl_set_chart_autosize(Fl_Widget* o, int v) {
526   ((Fl_Chart*)o)->autosize(v);}
527 inline void fl_set_chart_lstyle(Fl_Widget* o, Fl_Font v) {
528   ((Fl_Chart*)o)->textfont(v);}
529 inline void fl_set_chart_lsize(Fl_Widget* o, int v) {
530   ((Fl_Chart*)o)->textsize(v);}
531 inline void fl_set_chart_lcolor(Fl_Widget* o, unsigned v) {
532   ((Fl_Chart*)o)->textcolor(v);}
533 #define fl_set_chart_lcol   fl_set_chart_lcolor
534
535 #include "Fl_Choice.H"
536
537 #define FL_NORMAL_CHOICE        0
538 #define FL_NORMAL_CHOICE2       0
539 #define FL_DROPLIST_CHOICE      0
540
541 forms_constructor(Fl_Choice, fl_add_choice)
542 inline void fl_clear_choice(Fl_Widget* o) {
543     ((Fl_Choice*)o)->clear();}
544 inline void fl_addto_choice(Fl_Widget* o, const char* s) {
545     ((Fl_Choice*)o)->add(s);}
546 inline void fl_replace_choice(Fl_Widget* o, int i, const char* s) {
547     ((Fl_Choice*)o)->replace(i-1,s);}
548 inline void fl_delete_choice(Fl_Widget* o, int i) {
549     ((Fl_Choice*)o)->remove(i-1);}
550 inline void fl_set_choice(Fl_Widget* o, int i) {
551     ((Fl_Choice*)o)->value(i-1);}
552 // inline void fl_set_choice_text(Fl_Widget*, const char*);
553 inline int fl_get_choice(Fl_Widget* o) {
554     return ((Fl_Choice*)o)->value()+1;}
555 // inline const char* fl_get_choice_item_text(Fl_Widget*, int);
556 // inline int fl_get_choice_maxitems(Fl_Widget*);
557 inline const char* fl_get_choice_text(Fl_Widget* o) {
558     return ((Fl_Choice*)o)->text();}
559 inline void fl_set_choice_fontsize(Fl_Widget* o, int x) {
560     ((Fl_Choice*)o)->textsize(x);}
561 inline void fl_set_choice_fontstyle(Fl_Widget* o, Fl_Font x) {
562     ((Fl_Choice*)o)->textfont(x);}
563 // inline void fl_set_choice_item_mode(Fl_Widget*, int, unsigned);
564 // inline void fl_set_choice_item_shortcut(Fl_Widget*, int, const char*);
565
566 #include "Fl_Clock.H"
567 forms_constructort(Fl_Clock, fl_add_clock)
568 inline void fl_get_clock(Fl_Widget* o, int* h, int* m, int* s) {
569     *h = ((Fl_Clock*)o)->hour();
570     *m = ((Fl_Clock*)o)->minute();
571     *s = ((Fl_Clock*)o)->second();
572 }
573
574 #include "Fl_Counter.H"
575 forms_constructor(Fl_Counter, fl_add_counter)
576 inline void fl_set_counter_value(Fl_Widget* o, double v) {
577     ((Fl_Counter*)o)->value(v);}
578 inline void fl_set_counter_bounds(Fl_Widget* o, double a, double b) {
579     ((Fl_Counter*)o)->bounds(a,b);}
580 inline void fl_set_counter_step(Fl_Widget* o, double a, double b) {
581     ((Fl_Counter*)o)->step(a,b);}
582 inline void fl_set_counter_precision(Fl_Widget* o, int v) {
583     ((Fl_Counter*)o)->precision(v);}
584 inline void fl_set_counter_return(Fl_Widget* o, int v) {
585     ((Fl_Counter*)o)->when((Fl_When)(v|FL_WHEN_RELEASE));}
586 inline double fl_get_counter_value(Fl_Widget* o) {
587     return ((Fl_Counter*)o)->value();}
588 inline void fl_get_counter_bounds(Fl_Widget* o, float* a, float* b) {
589   *a = float(((Fl_Counter*)o)->minimum());
590   *b = float(((Fl_Counter*)o)->maximum());
591 }
592 //inline void fl_set_counter_filter(Fl_Widget*,const char* (*)(Fl_Widget*,double,int));
593
594 // Cursor stuff cannot be emulated because it uses X stuff
595 inline void fl_set_cursor(Fl_Window* w, Fl_Cursor c) {w->cursor(c);}
596 #define FL_INVISIBLE_CURSOR FL_CURSOR_NONE
597 #define FL_DEFAULT_CURSOR FL_CURSOR_DEFAULT
598
599 #include "Fl_Dial.H"
600
601 #define FL_DIAL_COL1 FL_GRAY
602 #define FL_DIAL_COL2 37
603
604 forms_constructor(Fl_Dial, fl_add_dial)
605 inline void fl_set_dial_value(Fl_Widget* o, double v) {
606   ((Fl_Dial*)o)->value(v);}
607 inline double fl_get_dial_value(Fl_Widget* o) {
608   return ((Fl_Dial*)o)->value();}
609 inline void fl_set_dial_bounds(Fl_Widget* o, double a, double b) {
610   ((Fl_Dial*)o)->bounds(a, b);}
611 inline void fl_get_dial_bounds(Fl_Widget* o, float* a, float* b) {
612   *a = float(((Fl_Dial*)o)->minimum());
613   *b = float(((Fl_Dial*)o)->maximum());
614 }
615 inline void fl_set_dial_return(Fl_Widget* o, int i) {
616   ((Fl_Dial*)o)->when((Fl_When)(i|FL_WHEN_RELEASE));}
617 inline void fl_set_dial_angles(Fl_Widget* o, int a, int b) {
618   ((Fl_Dial*)o)->angles((short)a, (short)b);}
619 //inline void fl_set_dial_cross(Fl_Widget* o, int);
620 // inline void fl_set_dial_direction(Fl_Widget* o, uchar d) {
621 //   ((Fl_Dial*)o)->direction(d);}
622 inline void fl_set_dial_step(Fl_Widget* o, double v) {
623   ((Fl_Dial*)o)->step(v);}
624
625 // Frames:
626
627 inline Fl_Widget* fl_add_frame(Fl_Boxtype i,int x,int y,int w,int h,const char* l) {
628   return fl_add_box(i,x-3,y-3,w+6,h+6,l);}
629
630 // labelframe nyi
631 inline Fl_Widget* fl_add_labelframe(Fl_Boxtype i,int x,int y,int w,int h,const char* l) {
632   Fl_Widget* o = fl_add_box(i,x-3,y-3,w+6,h+6,l);
633   o->align(FL_ALIGN_TOP_LEFT);
634   return o;
635 }
636
637 #include "Fl_Free.H"
638 inline Fl_Free*
639 fl_add_free(int t,double x,double y,double w,double h,const char* l,
640             FL_HANDLEPTR hdl) {
641  return (Fl_Free*)(fl_add_new(
642    new Fl_Free(t,int(x),int(y),int(w),int(h),l,hdl)));
643 }
644
645 #include "fl_ask.H"
646 #include "fl_show_colormap.H"
647
648 inline int fl_show_question(const char* c, int = 0) {return fl_ask(c);}
649 FL_EXPORT void fl_show_message(const char *,const char *,const char *);
650 FL_EXPORT void fl_show_alert(const char *,const char *,const char *,int=0);
651 FL_EXPORT int fl_show_question(const char *,const char *,const char *);
652 inline const char *fl_show_input(const char *l,const char*d=0) {return fl_input(l,d);}
653 FL_EXPORT /*const*/ char *fl_show_simple_input(const char *label, const char *deflt = 0);
654 FL_EXPORT int fl_show_choice(
655     const char *m1,
656     const char *m2,
657     const char *m3,
658     int numb,
659     const char *b0,
660     const char *b1,
661     const char *b2);
662
663 inline void fl_set_goodies_font(uchar a, uchar b) {fl_message_font(a,b);}
664 #define fl_show_messages fl_message
665 inline int fl_show_choices(const char* c,int n,const char* b1,const char* b2,
666                            const char* b3, int) {
667   return fl_show_choice(0,c,0,n,b1,b2,b3);
668 }
669
670 #include "filename.H"
671 #include "Fl_File_Chooser.H"
672 inline int do_matching(char* a, const char* b) {return fl_filename_match(a,b);}
673
674 // Forms-compatable file chooser (implementation in fselect.C):
675 FL_EXPORT char* fl_show_file_selector(const char* message,const char* dir,
676                             const char* pat,const char* fname);
677 FL_EXPORT char* fl_get_directory();
678 FL_EXPORT char* fl_get_pattern();
679 FL_EXPORT char* fl_get_filename();
680
681 #include "Fl_Input.H"
682 forms_constructor(Fl_Input, fl_add_input)
683 inline void fl_set_input(Fl_Widget* o, const char* v) {
684     ((Fl_Input*)o)->value(v);}
685 inline void fl_set_input_return(Fl_Widget* o, int x) {
686     ((Fl_Input*)o)->when((Fl_When)(x | FL_WHEN_RELEASE));}
687 inline void fl_set_input_color(Fl_Widget* o, unsigned a, unsigned b) {
688     ((Fl_Input*)o)->textcolor(a);
689     ((Fl_Input*)o)->cursor_color(b);
690 }
691 // inline void fl_set_input_scroll(Fl_Widget*, int);
692 inline void fl_set_input_cursorpos(Fl_Widget* o, int x, int /*y*/) {
693   ((Fl_Input*)o)->position(x);}
694 // inline void fl_set_input_selected(Fl_Widget*, int);
695 // inline void fl_set_input_selected_range(Fl_Widget*, int, int);
696 // inline void fl_set_input_maxchars(Fl_Widget*, int);
697 // inline void fl_set_input_format(Fl_Widget*, int, int);
698 // inline void fl_set_input_hscrollbar(Fl_Widget*, int);
699 // inline void fl_set_input_vscrollbar(Fl_Widget*, int);
700 // inline void fl_set_input_xoffset(Fl_Widget*, int);
701 // inline void fl_set_input_topline(Fl_Widget*, int);
702 // inline void fl_set_input_scrollbarsize(Fl_Widget*, int, int);
703 // inline int fl_get_input_topline(Fl_Widget*);
704 // inline int fl_get_input_screenlines(Fl_Widget*);
705 inline int fl_get_input_cursorpos(Fl_Widget* o, int*x, int*y) {
706   *x = ((Fl_Input*)o)->position(); *y = 0; return *x;}
707 // inline int fl_get_input_numberoflines(Fl_Widget*);
708 // inline void fl_get_input_format(Fl_Widget*, int*, int*);
709 inline const char* fl_get_input(Fl_Widget* o) {return ((Fl_Input*)o)->value();}
710
711 #include "Fl_Menu_Button.H"
712
713 // types are not implemented, they all act like FL_PUSH_MENU:
714 #define FL_TOUCH_MENU           0
715 #define FL_PUSH_MENU            1
716 #define FL_PULLDOWN_MENU        2
717 forms_constructor(Fl_Menu_Button, fl_add_menu)
718
719 inline void fl_clear_menu(Fl_Widget* o) {
720     ((Fl_Menu_Button*)o)->clear();}
721 inline void fl_set_menu(Fl_Widget* o, const char* s) {
722     ((Fl_Menu_Button*)o)->clear(); ((Fl_Menu_Button*)o)->add(s);}
723 inline void fl_addto_menu(Fl_Widget* o, const char* s) {
724     ((Fl_Menu_Button*)o)->add(s);}
725 inline void fl_replace_menu_item(Fl_Widget* o, int i, const char* s) {
726     ((Fl_Menu_Button*)o)->replace(i-1,s);}
727 inline void fl_delete_menu_item(Fl_Widget* o, int i) {
728     ((Fl_Menu_Button*)o)->remove(i-1);}
729 inline void fl_set_menu_item_shortcut(Fl_Widget* o, int i, const char* s) {
730     ((Fl_Menu_Button*)o)->shortcut(i-1,fl_old_shortcut(s));}
731 inline void fl_set_menu_item_mode(Fl_Widget* o, int i, long x) {
732     ((Fl_Menu_Button*)o)->mode(i-1,x);}
733 inline void fl_show_menu_symbol(Fl_Widget*, int ) {
734 /*    ((Fl_Menu_Button*)o)->show_menu_symbol(i); */}
735 // inline void fl_set_menu_popup(Fl_Widget*, int);
736 inline int fl_get_menu(Fl_Widget* o) {
737     return ((Fl_Menu_Button*)o)->value()+1;}
738 inline const char* fl_get_menu_item_text(Fl_Widget* o, int i) {
739     return ((Fl_Menu_Button*)o)->text(i);}
740 inline int fl_get_menu_maxitems(Fl_Widget* o) {
741     return ((Fl_Menu_Button*)o)->size();}
742 inline int fl_get_menu_item_mode(Fl_Widget* o, int i) {
743     return ((Fl_Menu_Button*)o)->mode(i);}
744 inline const char* fl_get_menu_text(Fl_Widget* o) {
745     return ((Fl_Menu_Button*)o)->text();}
746
747 #include "Fl_Positioner.H"
748 #define FL_NORMAL_POSITIONER    0
749 forms_constructor(Fl_Positioner, fl_add_positioner)
750 inline void fl_set_positioner_xvalue(Fl_Widget* o, double v) {
751     ((Fl_Positioner*)o)->xvalue(v);}
752 inline double fl_get_positioner_xvalue(Fl_Widget* o) {
753     return ((Fl_Positioner*)o)->xvalue();}
754 inline void fl_set_positioner_xbounds(Fl_Widget* o, double a, double b) {
755     ((Fl_Positioner*)o)->xbounds(a,b);}
756 inline void fl_get_positioner_xbounds(Fl_Widget* o, float* a, float* b) {
757   *a = float(((Fl_Positioner*)o)->xminimum());
758   *b = float(((Fl_Positioner*)o)->xmaximum());
759 }
760 inline void fl_set_positioner_yvalue(Fl_Widget* o, double v) {
761     ((Fl_Positioner*)o)->yvalue(v);}
762 inline double fl_get_positioner_yvalue(Fl_Widget* o) {
763     return ((Fl_Positioner*)o)->yvalue();}
764 inline void fl_set_positioner_ybounds(Fl_Widget* o, double a, double b) {
765     ((Fl_Positioner*)o)->ybounds(a,b);}
766 inline void fl_get_positioner_ybounds(Fl_Widget* o, float* a, float* b) {
767   *a = float(((Fl_Positioner*)o)->yminimum());
768   *b = float(((Fl_Positioner*)o)->ymaximum());
769 }
770 inline void fl_set_positioner_xstep(Fl_Widget* o, double v) {
771     ((Fl_Positioner*)o)->xstep(v);}
772 inline void fl_set_positioner_ystep(Fl_Widget* o, double v) {
773     ((Fl_Positioner*)o)->ystep(v);}
774 inline void fl_set_positioner_return(Fl_Widget* o, int v) {
775     ((Fl_Positioner*)o)->when((Fl_When)(v|FL_WHEN_RELEASE));}
776
777 #include "Fl_Slider.H"
778
779 #define FL_HOR_BROWSER_SLIDER FL_HOR_SLIDER
780 #define FL_VERT_BROWSER_SLIDER FL_VERT_SLIDER
781
782 forms_constructort(Fl_Slider, fl_add_slider)
783 #define FL_SLIDER_COL1 FL_GRAY
784 inline void fl_set_slider_value(Fl_Widget* o, double v) {
785     ((Fl_Slider*)o)->value(v);}
786 inline double fl_get_slider_value(Fl_Widget* o) {
787     return ((Fl_Slider*)o)->value();}
788 inline void fl_set_slider_bounds(Fl_Widget* o, double a, double b) {
789     ((Fl_Slider*)o)->bounds(a, b);}
790 inline void fl_get_slider_bounds(Fl_Widget* o, float* a, float* b) {
791   *a = float(((Fl_Slider*)o)->minimum());
792   *b = float(((Fl_Slider*)o)->maximum());
793 }
794 inline void fl_set_slider_return(Fl_Widget* o, int i) {
795     ((Fl_Slider*)o)->when((Fl_When)(i|FL_WHEN_RELEASE));}
796 inline void fl_set_slider_step(Fl_Widget* o, double v) {
797     ((Fl_Slider*)o)->step(v);}
798 // inline void fl_set_slider_increment(Fl_Widget* o, double v, double);
799 inline void fl_set_slider_size(Fl_Widget* o, double v) {
800     ((Fl_Slider*)o)->slider_size(v);}
801
802 #include "Fl_Value_Slider.H"
803 forms_constructor(Fl_Value_Slider, fl_add_valslider)
804
805 inline void fl_set_slider_precision(Fl_Widget* o, int i) {
806     ((Fl_Value_Slider*)o)->precision(i);}
807 // filter function!
808
809 // The forms text object was the same as an Fl_Box except it inverted the
810 // meaning of FL_ALIGN_INSIDE.  Implementation in forms.cxx
811 class FL_EXPORT Fl_FormsText : public Fl_Widget {
812 protected:
813     void draw();
814 public:
815     Fl_FormsText(Fl_Boxtype b, int X, int Y, int W, int H, const char* l=0)
816         : Fl_Widget(X,Y,W,H,l) {box(b); align(FL_ALIGN_LEFT);}
817 };
818 #define FL_NORMAL_TEXT FL_NO_BOX
819 forms_constructorb(Fl_FormsText, fl_add_text)
820
821 #include "Fl_Timer.H"
822 forms_constructort(Fl_Timer, fl_add_timer)
823 inline void fl_set_timer(Fl_Widget* o, double v) {((Fl_Timer*)o)->value(v);}
824 inline double fl_get_timer(Fl_Widget* o) {return ((Fl_Timer*)o)->value();}
825 inline void fl_suspend_timer(Fl_Widget* o) {((Fl_Timer*)o)->suspended(1);}
826 inline void fl_resume_timer(Fl_Widget* o) {((Fl_Timer*)o)->suspended(0);}
827 inline void fl_set_timer_countup(Fl_Widget* o,char d) {((Fl_Timer*)o)->direction(d);}
828 void fl_gettime(long* sec, long* usec);
829
830 // Fl_XYPlot nyi
831
832
833 // stuff from DDForms:
834
835 inline int fl_double_click() {return Fl::event_clicks();}
836 inline void fl_draw() {Fl::flush();}
837
838 #endif  /* define __FORMS_H__ */
839
840 //
841 // End of "$Id: forms.H,v 1.2 2002/12/01 15:38:37 neurosurg Exp $".
842 //