// // "$Id: forms_compatability.cxx 5190 2006-06-09 16:16:34Z mike $" // // Forms compatibility functions for the Fast Light Tool Kit (FLTK). // // Copyright 1998-2005 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 // // Forms library compatability functions. // Many more functions are defined as inlines in forms.h! #include #include char fl_flip = 2; void fl_end_form() { while (Fl_Group::current()) Fl_Group::current()->forms_end(); } void Fl_Group::forms_end() { // set the dimensions of a group to surround contents if (children() && !w()) { Fl_Widget*const* a = array(); Fl_Widget* o = *a++; int rx = o->x(); int ry = o->y(); int rw = rx+o->w(); int rh = ry+o->h(); for (int i=children_-1; i--;) { o = *a++; if (o->x() < rx) rx = o->x(); if (o->y() < ry) ry = o->y(); if (o->x()+o->w() > rw) rw = o->x()+o->w(); if (o->y()+o->h() > rh) rh = o->y()+o->h(); } x(rx); y(ry); w(rw-rx); h(rh-ry); } // flip all the children's coordinate systems: if (fl_flip) { Fl_Widget* o = (type()>=FL_WINDOW) ? this : window(); int Y = o->h(); Fl_Widget*const* a = array(); for (int i=children(); i--;) { Fl_Widget* ow = *a++; int newy = Y-ow->y()-ow->h(); ow->y(newy); } } end(); } static int initargc; static char **initargv; void fl_initialize(int *argc, char **argv, const char *, FL_CMD_OPT *, int) { initargc = *argc; initargv = new char*[*argc+1]; int i,j; for (i=0; i<=*argc; i++) initargv[i] = argv[i]; for (i=j=1; i<*argc; ) { if (Fl::arg(*argc,argv,i)); else argv[j++] = argv[i++]; } argv[j] = 0; *argc = j; if (fl_flip==2) fl_flip = 0; } char fl_modal_next; // set by fl_freeze_forms() void fl_show_form(Fl_Window *f,int place,int b,const char *n) { f->label(n); if (!b) f->clear_border(); if (fl_modal_next || b==FL_TRANSIENT) {f->set_modal(); fl_modal_next = 0;} if (place & FL_PLACE_MOUSE) f->hotspot(f); if (place & FL_PLACE_CENTER) { int scr_x, scr_y, scr_w, scr_h; Fl::screen_xywh(scr_x, scr_y, scr_w, scr_h); f->position(scr_x+(scr_w-f->w())/2, scr_y+(scr_h-f->h())/2); } if (place & FL_PLACE_FULLSCREEN) f->fullscreen(); if (place & (FL_PLACE_POSITION | FL_PLACE_GEOMETRY)) f->position( (f->x() < 0) ? Fl::w()-f->w()+f->x()-1 : f->x(), (f->y() < 0) ? Fl::h()-f->h()+f->y()-1 : f->y()); // if (place & FL_PLACE_ASPECT) { // this is not yet implemented // it can be done by setting size_range(). if (place == FL_PLACE_FREE || place == FL_PLACE_SIZE) f->free_position(); if (place == FL_PLACE_FREE || place & FL_FREE_SIZE) if (!f->resizable()) f->resizable(f); if (initargc) {f->show(initargc,initargv); initargc = 0;} else f->show(); } Fl_Widget *fl_do_forms(void) { Fl_Widget *obj; while (!(obj = Fl::readqueue())) if (!Fl::wait()) exit(0); return obj; } Fl_Widget *fl_check_forms() { Fl::check(); return Fl::readqueue(); } void fl_set_graphics_mode(int /*r*/,int /*d*/) {} void Fl_FormsText::draw() { draw_box(); align(align()|FL_ALIGN_INSIDE); // questionable method of compatability draw_label(); } // Create a forms button by selecting correct fltk subclass: #include #include Fl_Button *fl_add_button(uchar t,int x,int y,int w,int h,const char *l) { Fl_Button *b; switch (t) { case FL_RETURN_BUTTON: case FL_HIDDEN_RET_BUTTON: b = new Fl_Return_Button(x,y,w,h,l); break; case FL_TOUCH_BUTTON: b = new Fl_Repeat_Button(x,y,w,h,l); break; default: b = new Fl_Button(x,y,w,h,l); } switch (t) { case FL_TOGGLE_BUTTON: case FL_RADIO_BUTTON: b->type(t); break; case FL_HIDDEN_BUTTON: case FL_HIDDEN_RET_BUTTON: b->type(FL_HIDDEN_BUTTON); break; case FL_INOUT_BUTTON: b->when(FL_WHEN_CHANGED); break; } return b; } void fl_show_message(const char *q1,const char *q2,const char *q3) { fl_message("%s\n%s\n%s", q1?q1:"", q2?q2:"", q3?q3:""); } void fl_show_alert(const char *q1,const char *q2,const char *q3,int) { fl_alert("%s\n%s\n%s", q1?q1:"", q2?q2:"", q3?q3:""); } int fl_show_question(const char *q1,const char *q2,const char *q3) { return fl_choice("%s\n%s\n%s", "No", "Yes", 0L, q1?q1:"", q2?q2:"", q3?q3:""); } int fl_show_choice( const char *q1, const char *q2, const char *q3, int, // number of buttons, ignored const char *b0, const char *b1, const char *b2) { return fl_choice("%s\n%s\n%s", q1?q1:"", q2?q2:"", q3?q3:"", b0,b1,b2)+1; } char *fl_show_simple_input(const char *str1, const char *defstr) { const char *r = fl_input(str1, defstr); return (char *)(r ? r : defstr); } // // End of "$Id: forms_compatability.cxx 5190 2006-06-09 16:16:34Z mike $". //