// // Widget panel for the Fast Light Tool Kit (FLTK). // // Copyright 1998-2021 by Bill Spitzak and others. // // This library is free software. Distribution and use rights are outlined in // the file "COPYING" which should have been included with this file. If this // file is missing or damaged, see the license at: // // https://www.fltk.org/COPYING.php // // Please see the following page on how to report bugs and issues: // // https://www.fltk.org/bugs.php // // generated by Fast Light User Interface Designer (fluid) version 1.0500 #include "widget_panel.h" #include "Fluid.h" #include "app/Snap_Action.h" #include "app/Image_Asset.h" #include "proj/undo.h" #include "nodes/Window_Node.h" #include "nodes/Grid_Node.h" #include "nodes/Function_Node.h" #include #include #include #include #include #include #include #include // free() #include // std::function #define ZERO_ENTRY 1000 extern const char* when_symbol_name(int n); extern void set_whenmenu(int n); extern void redraw_browser(); extern Fl_Color fl_show_colormap(Fl_Color oldcol); extern void labelcolor_common(Fl_Color c); extern void color_common(Fl_Color c); extern void color2_common(Fl_Color c); extern void textcolor_common(Fl_Color c); extern int widget_i; extern fld::widget::Formula_Input_Vars widget_vars[]; extern int numselected; extern Fl_Menu_Item boxmenu[]; extern int haderror; /** Allow widget navigation on text fields with Tab. */ static int use_tab_navigation(int, Fl_Text_Editor*) { //fl ▼ ------------------------ code ------=-~--==~-~=----=-- ▼ fl// return 0; //fl ▲ ----------~~-~=---~-------------~-=--~~-=~=-~~--~-~=-- ▲ fl// } static void update_current(Fl_Input* o, void *v, std::function getter, std::function setter) { //fl ▼ ------------------------ code --~---=~--=-=-=---~=~~=~ ▼ fl// if (v == LOAD) { o->value( getter().c_str() ); } else { std::string v = o->value(); if (v != getter()) { setter(v); Fluid.proj.set_modflag(1); } } //fl ▲ ----------~~~=~---=~-------------~=-~--~=~~-=--=-==~-= ▲ fl// } static void update_current(Fl_Text_Editor* o, void *v, std::function getter, std::function setter) { //fl ▼ ------------------------ code ----~-~-=~~~~=-~-==--~-- ▼ fl// if (v == LOAD) { o->buffer()->text( getter().c_str() ); } else { std::string v = o->buffer()->text(); if (v != getter()) { setter(v); Fluid.proj.set_modflag(1); } } //fl ▲ ----------~~-=-~=--=-=----------~-~~=-~-~~-~~==~~--=~- ▲ fl// } Fl_Double_Window *image_panel_window=(Fl_Double_Window *)0; static void cb_image_panel_window(Fl_Double_Window* o, void* v) { //fl ▼ ---------------------- callback ~-=--=~~=~=~~--==-=~~- ▼ fl// propagate_load(o, v); //fl ▲ ----------~=-~=-=--=~------------~~----=--~=~~-~-----= ▲ fl// } Fl_Group *image_panel_imagegroup=(Fl_Group *)0; Fl_Box *image_panel_data=(Fl_Box *)0; static void cb_image_panel_data(Fl_Box* o, void* v) { //fl ▼ ---------------------- callback -~-~--~-~~-~-~~~----~= ▼ fl// if (v == LOAD) { Fl_Shared_Image *img = Fl_Shared_Image::get(widget_image_input->value()); o->user_data(img); if (img) { char buf[256]; snprintf(buf, 255, "%d x %d pixels, %d channels", img->data_w(), img->data_h(), img->d()); o->copy_label(buf); image_panel_imagegroup->activate(); } else if (widget_image_input->value() && widget_image_input->value()[0]) { o->label("Can't load image"); image_panel_imagegroup->activate(); } else { o->label("... x ... pixels, ..."); image_panel_imagegroup->deactivate(); } } //fl ▲ ----------=~-=-~-~---~-----------~=--~~~-~~=--~-=--=-= ▲ fl// } fld::widget::Formula_Input *image_panel_imagew=(fld::widget::Formula_Input *)0; static void cb_image_panel_imagew(fld::widget::Formula_Input* o, void* v) { //fl ▼ ---------------------- callback ~~--~=---~-~=-=~~~-~~- ▼ fl// if (v == LOAD) { if (current_widget->is_widget() && !current_widget->is_a(Type::Window)) { o->value(current_widget->scale_image_w_); } } else { int mod = 0; for (Node *t = Fluid.proj.tree.first; t; t = t->next) { if (t->selected && t->is_widget()) { Widget_Node* wt = ((Widget_Node*)t); wt->scale_image_w_ = o->value(); Fl_Image *img = wt->o->image(); if (img) { int iw = wt->scale_image_w_; if (iw<=0) iw = img->data_w(); int ih = wt->scale_image_h_; if (ih<=0) ih = img->data_w(); img->scale(iw, ih, 0, 1); wt->o->redraw(); if (wt->o->parent()) wt->o->parent()->redraw(); } mod = 1; } } if (mod) Fluid.proj.set_modflag(1); } //fl ▲ ----------~==~=~-~~=~~----------~-~-=-=~~-~=~~-~=~~-~- ▲ fl// } fld::widget::Formula_Input *image_panel_imageh=(fld::widget::Formula_Input *)0; static void cb_image_panel_imageh(fld::widget::Formula_Input* o, void* v) { //fl ▼ ---------------------- callback ~-~=-~~-=-=~~~--~----= ▼ fl// if (v == LOAD) { if (current_widget->is_widget() && !current_widget->is_a(Type::Window)) { o->value(current_widget->scale_image_h_); } } else { int mod = 0; for (Node *t = Fluid.proj.tree.first; t; t = t->next) { if (t->selected && t->is_widget()) { Widget_Node* wt = ((Widget_Node*)t); wt->scale_image_h_ = o->value(); Fl_Image *img = wt->o->image(); if (img) { int iw = wt->scale_image_w_; if (iw<=0) iw = img->data_w(); int ih = wt->scale_image_h_; if (ih<=0) ih = img->data_w(); img->scale(iw, ih, 0, 1); wt->o->redraw(); if (wt->o->parent()) wt->o->parent()->redraw(); } mod = 1; } } if (mod) Fluid.proj.set_modflag(1); } //fl ▲ ----------=~~=~~-~~=~=----------~~-==-=-=~-=~=~---=~~= ▲ fl// } static void cb_Reset(Fl_Button*, void* v) { //fl ▼ ---------------------- callback --~-=~=-=-=-=~~--~-~-- ▼ fl// if (v != LOAD) { image_panel_imagew->value(0); image_panel_imageh->value(0); image_panel_imagew->do_callback(); image_panel_imageh->do_callback(); } //fl ▲ ----------~=-=~==~~==------------~=--==-~=-~~=~=-=~~~= ▲ fl// } static void cb_convert(Fl_Check_Button* o, void* v) { //fl ▼ ---------------------- callback --~~=-=-~-~--=---~-=~= ▼ fl// if (v == LOAD) { if (current_widget->is_widget() && !current_widget->is_a(Type::Window)) { o->activate(); o->value(!current_widget->compress_image_); } else { o->deactivate(); } } else { int mod = 0; for (Widget_Node *q: Fluid.proj.tree.all_selected_widgets()) { q->compress_image_ = !o->value(); mod = 1; } if (mod) Fluid.proj.set_modflag(1); } //fl ▲ ----------~=---=~-~==~------------~~=~~~=~~=-~~==-=-=~ ▲ fl// } static void cb_bind(Fl_Check_Button* o, void* v) { //fl ▼ ---------------------- callback ~~~~~-=~=~---~--~~~~~= ▼ fl// if (v == LOAD) { if (current_widget->is_widget() && !current_widget->is_a(Type::Window)) { o->activate(); o->value(current_widget->bind_image_); } else { o->deactivate(); } } else { int mod = 0; for (Widget_Node *q: Fluid.proj.tree.all_selected_widgets()) { q->bind_image_ = o->value(); mod = 1; } if (mod) Fluid.proj.set_modflag(1); } //fl ▲ ----------~=~=-~~--=~~-------------==-~=~~=~=~----~~=~ ▲ fl// } Fl_Group *image_panel_deimagegroup=(Fl_Group *)0; Fl_Box *image_panel_dedata=(Fl_Box *)0; static void cb_image_panel_dedata(Fl_Box* o, void* v) { //fl ▼ ---------------------- callback ~---~=~~-~-=---~=~~==- ▼ fl// if (v == LOAD) { Fl_Shared_Image *img = Fl_Shared_Image::get(widget_deimage_input->value()); o->user_data(img); if (img) { char buf[256]; snprintf(buf, 255, "%d x %d pixels, %d channels", img->data_w(), img->data_h(), img->d()); o->copy_label(buf); image_panel_deimagegroup->activate(); } else if (widget_deimage_input->value() && widget_deimage_input->value()[0]) { o->label("Can't load image"); image_panel_deimagegroup->activate(); } else { o->label("... x ... pixels, ..."); image_panel_deimagegroup->deactivate(); } } //fl ▲ ----------~=~=-~~---=~------------~~=-~~=-=-=~=~--=--~ ▲ fl// } fld::widget::Formula_Input *image_panel_deimagew=(fld::widget::Formula_Input *)0; static void cb_image_panel_deimagew(fld::widget::Formula_Input* o, void* v) { //fl ▼ ---------------------- callback ~~--=~=~=~=~-=~--=~~=- ▼ fl// if (v == LOAD) { if (current_widget->is_widget() && !current_widget->is_a(Type::Window)) { o->value(current_widget->scale_deimage_w_); } } else { int mod = 0; for (Node *t = Fluid.proj.tree.first; t; t = t->next) { if (t->selected && t->is_widget()) { Widget_Node* wt = ((Widget_Node*)t); wt->scale_deimage_w_ = o->value(); Fl_Image *img = wt->o->deimage(); if (img) { int iw = wt->scale_deimage_w_; if (iw<=0) iw = img->data_w(); int ih = wt->scale_deimage_h_; if (ih<=0) ih = img->data_w(); img->scale(iw, ih, 0, 1); wt->o->redraw(); if (wt->o->parent()) wt->o->parent()->redraw(); } mod = 1; } } if (mod) Fluid.proj.set_modflag(1); } //fl ▲ ----------~=-~--=-=~=~----------~-~-~~--~~-=-==~~==-~= ▲ fl// } fld::widget::Formula_Input *image_panel_deimageh=(fld::widget::Formula_Input *)0; static void cb_image_panel_deimageh(fld::widget::Formula_Input* o, void* v) { //fl ▼ ---------------------- callback ~~=-=---~-~~-=-=~-~--- ▼ fl// if (v == LOAD) { if (current_widget->is_widget() && !current_widget->is_a(Type::Window)) { o->value(current_widget->scale_deimage_h_); } } else { int mod = 0; for (Node *t = Fluid.proj.tree.first; t; t = t->next) { if (t->selected && t->is_widget()) { Widget_Node* wt = ((Widget_Node*)t); wt->scale_deimage_h_ = o->value(); Fl_Image *img = wt->o->deimage(); if (img) { int iw = wt->scale_deimage_w_; if (iw<=0) iw = img->data_w(); int ih = wt->scale_deimage_h_; if (ih<=0) ih = img->data_w(); img->scale(iw, ih, 0, 1); wt->o->redraw(); if (wt->o->parent()) wt->o->parent()->redraw(); } mod = 1; } } if (mod) Fluid.proj.set_modflag(1); } //fl ▲ ----------=~-=~~~~---=-----------~~~~==~~~~=~~=-=~-=~- ▲ fl// } static void cb_Reset1(Fl_Button*, void* v) { //fl ▼ ---------------------- callback ~~=~~=~=~~~=--~~=~-=~= ▼ fl// if (v != LOAD) { image_panel_deimagew->value(0); image_panel_deimageh->value(0); image_panel_deimagew->do_callback(); image_panel_deimageh->do_callback(); } //fl ▲ ----------=~~--~~=---~-----------~=-~~-~~==-~=-~---=-= ▲ fl// } static void cb_convert1(Fl_Check_Button* o, void* v) { //fl ▼ ---------------------- callback ~~-==--~~-~~=~-==~-~-- ▼ fl// if (v == LOAD) { if (current_widget->is_widget() && !current_widget->is_a(Type::Window)) { o->activate(); o->value(!current_widget->compress_deimage_); } else { o->deactivate(); } } else { int mod = 0; for (Widget_Node *q: Fluid.proj.tree.all_selected_widgets()) { q->compress_deimage_ = !o->value(); mod = 1; } if (mod) Fluid.proj.set_modflag(1); } //fl ▲ ----------~=--~==-~~~=----------~------~~~-~-=~~--~-=~ ▲ fl// } static void cb_bind1(Fl_Check_Button* o, void* v) { //fl ▼ ---------------------- callback ---=--~-=--~-~~~-=-=~= ▼ fl// if (v == LOAD) { if (current_widget->is_widget() && !current_widget->is_a(Type::Window)) { o->activate(); o->value(current_widget->bind_deimage_); } else { o->deactivate(); } } else { int mod = 0; for (Widget_Node *q: Fluid.proj.tree.all_selected_widgets()) { q->bind_deimage_ = o->value(); mod = 1; } if (mod) Fluid.proj.set_modflag(1); } //fl ▲ ----------=~-=~-~~-~~-----------~--==~--=~-=~~-~=~---= ▲ fl// } Fl_Button *image_panel_close=(Fl_Button *)0; static void cb_image_panel_close(Fl_Button*, void* v) { //fl ▼ ---------------------- callback ~~-=~-~--~---=~-=---=- ▼ fl// if (v != LOAD) image_panel_window->hide(); //fl ▲ ----------=~-=~~-~~=------------~--==~-=~~~=~=~~-==~=- ▲ fl// } /** Create a panel for editing widget image data */ Fl_Double_Window* make_image_panel() { { image_panel_window = new Fl_Double_Window(260, 332, "Image Options"); image_panel_window->callback((Fl_Callback*)cb_image_panel_window); { image_panel_imagegroup = new Fl_Group(10, 15, 235, 125); image_panel_imagegroup->callback((Fl_Callback*)propagate_load); { Fl_Box* o = new Fl_Box(75, 15, 170, 20, " ---- Active Image ----"); o->labelfont(1); o->labelsize(11); o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE)); } // Fl_Box* o { image_panel_data = new Fl_Box(75, 35, 170, 20, "... x ... pixels, ..."); image_panel_data->labelsize(11); image_panel_data->callback((Fl_Callback*)cb_image_panel_data); image_panel_data->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE)); } // Fl_Box* image_panel_data { Fl_Group* o = new Fl_Group(75, 75, 170, 20); o->callback((Fl_Callback*)propagate_load); { image_panel_imagew = new fld::widget::Formula_Input(75, 75, 55, 20, "Width:"); image_panel_imagew->tooltip("Scale image to this width in pixel units"); image_panel_imagew->box(FL_DOWN_BOX); image_panel_imagew->color(FL_BACKGROUND2_COLOR); image_panel_imagew->selection_color(FL_SELECTION_COLOR); image_panel_imagew->labeltype(FL_NORMAL_LABEL); image_panel_imagew->labelfont(0); image_panel_imagew->labelsize(11); image_panel_imagew->labelcolor(FL_FOREGROUND_COLOR); image_panel_imagew->textsize(11); image_panel_imagew->callback((Fl_Callback*)cb_image_panel_imagew); image_panel_imagew->align(Fl_Align(FL_ALIGN_TOP_LEFT)); image_panel_imagew->when(FL_WHEN_RELEASE); } // fld::widget::Formula_Input* image_panel_imagew { image_panel_imageh = new fld::widget::Formula_Input(135, 75, 55, 20, "Height:"); image_panel_imageh->tooltip("Scale image to this height in pixel units"); image_panel_imageh->box(FL_DOWN_BOX); image_panel_imageh->color(FL_BACKGROUND2_COLOR); image_panel_imageh->selection_color(FL_SELECTION_COLOR); image_panel_imageh->labeltype(FL_NORMAL_LABEL); image_panel_imageh->labelfont(0); image_panel_imageh->labelsize(11); image_panel_imageh->labelcolor(FL_FOREGROUND_COLOR); image_panel_imageh->textsize(11); image_panel_imageh->callback((Fl_Callback*)cb_image_panel_imageh); image_panel_imageh->align(Fl_Align(FL_ALIGN_TOP_LEFT)); image_panel_imageh->when(FL_WHEN_RELEASE); } // fld::widget::Formula_Input* image_panel_imageh { Fl_Button* o = new Fl_Button(195, 75, 50, 20, "Reset"); o->tooltip("Reset scale to original size"); o->labelsize(11); o->callback((Fl_Callback*)cb_Reset); } // Fl_Button* o o->end(); } // Fl_Group* o { Fl_Box* o = new Fl_Box(10, 75, 60, 20, "Scale:"); o->labelfont(1); o->labelsize(11); o->align(Fl_Align(FL_ALIGN_RIGHT|FL_ALIGN_INSIDE)); } // Fl_Box* o { Fl_Box* o = new Fl_Box(10, 100, 60, 20, "Storage:"); o->labelfont(1); o->labelsize(11); o->align(Fl_Align(FL_ALIGN_RIGHT|FL_ALIGN_INSIDE)); } // Fl_Box* o { Fl_Check_Button* o = new Fl_Check_Button(75, 100, 170, 20, "convert to raw pixel data"); o->tooltip("if unchecked, keep the image in its original format and store the data as is;" " if checked, convert the image and store it as uncompressed RGB or grayscale p" "ixel data"); o->down_box(FL_DOWN_BOX); o->labelsize(11); o->callback((Fl_Callback*)cb_convert); } // Fl_Check_Button* o { Fl_Check_Button* o = new Fl_Check_Button(75, 120, 170, 20, "bind to widget"); o->tooltip("bind the image to the widget, so it will be deleted with the widget"); o->down_box(FL_DOWN_BOX); o->labelsize(11); o->callback((Fl_Callback*)cb_bind); o->window()->hotspot(o); } // Fl_Check_Button* o image_panel_imagegroup->end(); } // Fl_Group* image_panel_imagegroup { image_panel_deimagegroup = new Fl_Group(10, 155, 235, 125); image_panel_deimagegroup->callback((Fl_Callback*)propagate_load); { Fl_Box* o = new Fl_Box(75, 155, 170, 20, " ---- Inactive Image ----"); o->labelfont(1); o->labelsize(11); o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE)); } // Fl_Box* o { image_panel_dedata = new Fl_Box(75, 175, 170, 20, "... x ... pixels, ..."); image_panel_dedata->labelsize(11); image_panel_dedata->callback((Fl_Callback*)cb_image_panel_dedata); image_panel_dedata->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE)); } // Fl_Box* image_panel_dedata { Fl_Group* o = new Fl_Group(75, 215, 170, 20); o->callback((Fl_Callback*)propagate_load); { image_panel_deimagew = new fld::widget::Formula_Input(75, 215, 55, 20, "Width:"); image_panel_deimagew->tooltip("Scale image to this width in pixel units"); image_panel_deimagew->box(FL_DOWN_BOX); image_panel_deimagew->color(FL_BACKGROUND2_COLOR); image_panel_deimagew->selection_color(FL_SELECTION_COLOR); image_panel_deimagew->labeltype(FL_NORMAL_LABEL); image_panel_deimagew->labelfont(0); image_panel_deimagew->labelsize(11); image_panel_deimagew->labelcolor(FL_FOREGROUND_COLOR); image_panel_deimagew->textsize(11); image_panel_deimagew->callback((Fl_Callback*)cb_image_panel_deimagew); image_panel_deimagew->align(Fl_Align(FL_ALIGN_TOP_LEFT)); image_panel_deimagew->when(FL_WHEN_RELEASE); } // fld::widget::Formula_Input* image_panel_deimagew { image_panel_deimageh = new fld::widget::Formula_Input(135, 215, 55, 20, "Height:"); image_panel_deimageh->tooltip("Scale image to this height in pixel units"); image_panel_deimageh->box(FL_DOWN_BOX); image_panel_deimageh->color(FL_BACKGROUND2_COLOR); image_panel_deimageh->selection_color(FL_SELECTION_COLOR); image_panel_deimageh->labeltype(FL_NORMAL_LABEL); image_panel_deimageh->labelfont(0); image_panel_deimageh->labelsize(11); image_panel_deimageh->labelcolor(FL_FOREGROUND_COLOR); image_panel_deimageh->textsize(11); image_panel_deimageh->callback((Fl_Callback*)cb_image_panel_deimageh); image_panel_deimageh->align(Fl_Align(FL_ALIGN_TOP_LEFT)); image_panel_deimageh->when(FL_WHEN_RELEASE); } // fld::widget::Formula_Input* image_panel_deimageh { Fl_Button* o = new Fl_Button(195, 215, 50, 20, "Reset"); o->tooltip("Reset scale to original size"); o->labelsize(11); o->callback((Fl_Callback*)cb_Reset1); } // Fl_Button* o o->end(); } // Fl_Group* o { Fl_Box* o = new Fl_Box(10, 215, 60, 20, "Scale:"); o->labelfont(1); o->labelsize(11); o->align(Fl_Align(FL_ALIGN_RIGHT|FL_ALIGN_INSIDE)); } // Fl_Box* o { Fl_Box* o = new Fl_Box(10, 240, 60, 20, "Storage:"); o->labelfont(1); o->labelsize(11); o->align(Fl_Align(FL_ALIGN_RIGHT|FL_ALIGN_INSIDE)); } // Fl_Box* o { Fl_Check_Button* o = new Fl_Check_Button(75, 240, 170, 20, "convert to raw pixel data"); o->tooltip("if unchecked, keep the image in its original format and store the data as is;" " if checked, convert the image and store it as uncompressed RGB or grayscale p" "ixel data"); o->down_box(FL_DOWN_BOX); o->labelsize(11); o->callback((Fl_Callback*)cb_convert1); } // Fl_Check_Button* o { Fl_Check_Button* o = new Fl_Check_Button(75, 260, 170, 20, "bind to widget"); o->tooltip("bind the image to the widget, so it will be deleted with the widget"); o->down_box(FL_DOWN_BOX); o->labelsize(11); o->callback((Fl_Callback*)cb_bind1); } // Fl_Check_Button* o image_panel_deimagegroup->end(); } // Fl_Group* image_panel_deimagegroup { image_panel_close = new Fl_Button(165, 295, 80, 20, "Close"); image_panel_close->labelsize(11); image_panel_close->callback((Fl_Callback*)cb_image_panel_close); } // Fl_Button* image_panel_close image_panel_window->set_modal(); image_panel_window->end(); } // Fl_Double_Window* image_panel_window return image_panel_window; } void run_image_panel() { //fl ▼ ------------------------ code --~~~~--~==--~=---=-=~~~ ▼ fl// if (!image_panel_window) make_image_panel(); image_panel_window->do_callback(image_panel_window, LOAD); Fl::pushed(0); Fl_Window *g = Fl::grab(); if (g) Fl::grab(0); image_panel_window->show(); while (image_panel_window->shown()) Fl::wait(); if (g) Fl::grab(g); Fl_Shared_Image *img = (Fl_Shared_Image*)image_panel_data->user_data(); if (img) { img->release(); image_panel_data->user_data(nullptr); } //fl ▲ ----------~~--~==~=-=-----------~-=~~==~=-=-=~--=~--=~ ▲ fl// } void flex_margin_cb(Fl_Value_Input* i, void* v, void (*load_margin)(Fl_Flex*,Fl_Value_Input*), int (*update_margin)(Fl_Flex*,int)) { //fl ▼ ------------------------ code ------=--~--~=-~-~~~~~-= ▼ fl// if (v == LOAD) { if (current_widget->is_a(Type::Flex)) { load_margin((Fl_Flex*)current_widget->o, i); } } else { int mod = 0; int new_value = (int)i->value(); for (Node *o = Fluid.proj.tree.first; o; o = o->next) { if (o->selected && o->is_a(Type::Flex)) { Flex_Node* q = (Flex_Node*)o; Fl_Flex* w = (Fl_Flex*)q->o; if (update_margin(w, new_value)) { w->layout(); mod = 1; } } } if (mod) Fluid.proj.set_modflag(1); } //fl ▲ ----------~---=--~~=-~-----------~~--~~~=~=-~==~~==-~~ ▲ fl// } Fl_Wizard *tabs_wizard=(Fl_Wizard *)0; static void cb_tabs_wizard(Fl_Wizard* o, void* v) { //fl ▼ ---------------------- callback -~-=-~=-~~---~-=-~~~-~ ▼ fl// propagate_load((Fl_Group *)o,v); //fl ▲ ----------~=~=~--~=~=~----------~--~-==~~-=-=~=-~=~~=- ▲ fl// } Fl_Tabs *widget_tabs=(Fl_Tabs *)0; static void cb_widget_tabs(Fl_Tabs* o, void* v) { //fl ▼ ---------------------- callback --~-~~=~~==----==--~-~ ▼ fl// if (current_widget) propagate_load((Fl_Group *)o,v); //fl ▲ ----------=~-==~---=------------~-~~~~-==--==--~~--~=~ ▲ fl// } Fl_Group *wp_gui_tab=(Fl_Group *)0; Fl_Input *wp_gui_label=(Fl_Input *)0; Fl_Input *widget_image_input=(Fl_Input *)0; static void cb_widget_image_input(Fl_Input* o, void* v) { //fl ▼ ---------------------- callback --~-------=~=~~==~-=~~ ▼ fl// if (v == LOAD) { if (current_widget->is_widget() && !current_widget->is_a(Type::Window)) { o->activate(); o->value(((Widget_Node*)current_widget)->image_name().c_str()); } else o->deactivate(); } else { int mod = 0; for (Widget_Node *q: Fluid.proj.tree.all_selected_widgets()) { q->image_name(o->value()); mod = 1; } if (mod) Fluid.proj.set_modflag(1); } //fl ▲ ----------=~-==-=~=-~~----------~~=-~==~~~-=-=~---=-=~ ▲ fl// } static void cb_Browse(Fl_Button* o, void* v) { //fl ▼ ---------------------- callback ~~-~-=~~=~~-=--~=--~-~ ▼ fl// if (v == LOAD) { if (current_widget->is_widget() && !current_widget->is_a(Type::Window)) o->activate(); else o->deactivate(); } else { int mod = 0; Image_Asset *image_asset = ui_find_image(widget_image_input->value()); if (image_asset) { widget_image_input->value(image_asset->filename()); for (Widget_Node *q: Fluid.proj.tree.all_selected_widgets()) { q->image_name(image_asset->filename()); mod = 1; } if (mod) Fluid.proj.set_modflag(1); } } //fl ▲ ----------=~-=~==~~=-=------------~=~=~==~-~--~~=-=~=~ ▲ fl// } static void cb_(Fl_Button*, void* v) { //fl ▼ ---------------------- callback ~~=~~-~-=-=-~-----=--- ▼ fl// if (v != LOAD) { run_image_panel(); } //fl ▲ ----------~=-==~~-~-~=----------~~-~~--~~-=~--=-=~~=~- ▲ fl// } Fl_Input *widget_deimage_input=(Fl_Input *)0; static void cb_widget_deimage_input(Fl_Input* o, void* v) { //fl ▼ ---------------------- callback ~~=-~=-=-------~-~~-=~ ▼ fl// if (v == LOAD) { if (current_widget->is_widget() && !current_widget->is_a(Type::Window)) { o->activate(); o->value(((Widget_Node*)current_widget)->inactive_name().c_str()); } else o->deactivate(); } else { int mod = 0; for (Widget_Node *q: Fluid.proj.tree.all_selected_widgets()) { q->inactive_name(o->value()); mod = 1; } if (mod) Fluid.proj.set_modflag(1); } //fl ▲ ----------=~---=-~=~-=--------------~~~-~---~-~~=--=-- ▲ fl// } static void cb_Browse1(Fl_Button* o, void* v) { //fl ▼ ---------------------- callback ~~-=~=~~-~=~~-=~~---~~ ▼ fl// if (v == LOAD) { if (current_widget->is_widget() && !current_widget->is_a(Type::Window)) o->activate(); else o->deactivate(); } else { int mod = 0; Image_Asset *image_asset = ui_find_image(widget_deimage_input->value()); if (image_asset) { widget_deimage_input->value(image_asset->filename()); for (Widget_Node *q: Fluid.proj.tree.all_selected_widgets()) { q->inactive_name(image_asset->filename()); mod = 1; } if (mod) Fluid.proj.set_modflag(1); } } //fl ▲ ----------=~---==---=~-----------~~~-~-~~=-=~==-~--~-- ▲ fl// } Fl_Group *wp_gui_alignment=(Fl_Group *)0; Fl_Menu_Item menu_[] = { {" Image Alignment ", 0, 0, (void*)((fl_intptr_t)-1), 0, (uchar)FL_NORMAL_LABEL, 1, 10, 0}, {"image over text", 0, 0, (void*)((fl_intptr_t)FL_ALIGN_IMAGE_OVER_TEXT), 0, (uchar)FL_NORMAL_LABEL, 0, 9, 0}, {"text over image", 0, 0, (void*)((fl_intptr_t)FL_ALIGN_TEXT_OVER_IMAGE), 0, (uchar)FL_NORMAL_LABEL, 0, 9, 0}, {"text next to image", 0, 0, (void*)((fl_intptr_t)FL_ALIGN_TEXT_NEXT_TO_IMAGE), 0, (uchar)FL_NORMAL_LABEL, 0, 9, 0}, {"image next to text", 0, 0, (void*)((fl_intptr_t)FL_ALIGN_IMAGE_NEXT_TO_TEXT), 0, (uchar)FL_NORMAL_LABEL, 0, 9, 0}, {"image is backdrop", 0, 0, (void*)((fl_intptr_t)FL_ALIGN_IMAGE_BACKDROP), 0, (uchar)FL_NORMAL_LABEL, 0, 9, 0}, {0,0,0,0,0,0,0,0,0} }; Fl_Menu_Item menu_1[] = { {" Inside && Outside ", 0, 0, (void*)((fl_intptr_t)-1), 0, (uchar)FL_NORMAL_LABEL, 1, 10, 0}, {"top left", 0, 0, (void*)((fl_intptr_t)FL_ALIGN_TOP_LEFT), 0, (uchar)FL_NORMAL_LABEL, 0, 9, 0}, {"top", 0, 0, (void*)((fl_intptr_t)FL_ALIGN_TOP), 0, (uchar)FL_NORMAL_LABEL, 0, 9, 0}, {"top right", 0, 0, (void*)((fl_intptr_t)FL_ALIGN_TOP_RIGHT), 0, (uchar)FL_NORMAL_LABEL, 0, 9, 0}, {"left", 0, 0, (void*)((fl_intptr_t)FL_ALIGN_LEFT), 0, (uchar)FL_NORMAL_LABEL, 0, 9, 0}, {"center", 0, 0, (void*)((fl_intptr_t)FL_ALIGN_CENTER), 0, (uchar)FL_NORMAL_LABEL, 0, 9, 0}, {"right", 0, 0, (void*)((fl_intptr_t)FL_ALIGN_RIGHT), 0, (uchar)FL_NORMAL_LABEL, 0, 9, 0}, {"bottom left", 0, 0, (void*)((fl_intptr_t)FL_ALIGN_BOTTOM_LEFT), 0, (uchar)FL_NORMAL_LABEL, 0, 9, 0}, {"bottom", 0, 0, (void*)((fl_intptr_t)FL_ALIGN_BOTTOM), 0, (uchar)FL_NORMAL_LABEL, 0, 9, 0}, {"bottom right", 0, 0, (void*)((fl_intptr_t)FL_ALIGN_BOTTOM_RIGHT), 0, (uchar)FL_NORMAL_LABEL, 0, 9, 0}, {" Outside Alignment ", 0, 0, (void*)((fl_intptr_t)-1), 0, (uchar)FL_NORMAL_LABEL, 1, 10, 0}, {"left top", 0, 0, (void*)((fl_intptr_t)FL_ALIGN_LEFT_TOP), 0, (uchar)FL_NORMAL_LABEL, 0, 9, 0}, {"right top", 0, 0, (void*)((fl_intptr_t)FL_ALIGN_RIGHT_TOP), 0, (uchar)FL_NORMAL_LABEL, 0, 9, 0}, {"left bottom", 0, 0, (void*)((fl_intptr_t)FL_ALIGN_LEFT_BOTTOM), 0, (uchar)FL_NORMAL_LABEL, 0, 9, 0}, {"right bottom", 0, 0, (void*)((fl_intptr_t)FL_ALIGN_RIGHT_BOTTOM), 0, (uchar)FL_NORMAL_LABEL, 0, 9, 0}, {0,0,0,0,0,0,0,0,0} }; fld::widget::Formula_Input *widget_x_input=(fld::widget::Formula_Input *)0; static void cb_widget_x_input(fld::widget::Formula_Input* o, void* v) { //fl ▼ ---------------------- callback ~~=-~~~~~~=-~-~~----~- ▼ fl// if (v == LOAD) { if (current_widget->is_true_widget()) { o->value(((Widget_Node *)current_widget)->o->x()); o->activate(); } else o->deactivate(); } else { Fluid.proj.undo.checkpoint(); widget_i = 0; int mod = 0; int v = 0; for (Widget_Node *q: Fluid.proj.tree.all_selected_widgets()) { if (q->is_true_widget()) { Fl_Widget *w = q->o; o->variables(widget_vars, q); v = o->value(); w->resize(v, w->y(), w->w(), w->h()); if (w->window()) w->window()->redraw(); widget_i++; mod = 1; } } if (mod) { Fluid.proj.set_modflag(1); o->value(v); // change the displayed value to the result of the last // calculation. Keep the formula if it was not used. } } //fl ▲ ----------=~=~--~~-=-~----------~~=~=--~~~-=~=~-=~~==- ▲ fl// } fld::widget::Formula_Input *widget_y_input=(fld::widget::Formula_Input *)0; static void cb_widget_y_input(fld::widget::Formula_Input* o, void* v) { //fl ▼ ---------------------- callback ~~--~=--~-~=-~=~~~=~~= ▼ fl// if (v == LOAD) { if (current_widget->is_true_widget()) { o->value(((Widget_Node *)current_widget)->o->y()); o->activate(); } else o->deactivate(); } else { Fluid.proj.undo.checkpoint(); widget_i = 0; int mod = 0; int v = 0; for (Widget_Node *q: Fluid.proj.tree.all_selected_widgets()) { if (q->is_true_widget()) { Fl_Widget *w = q->o; o->variables(widget_vars, q); v = o->value(); w->resize(w->x(), v, w->w(), w->h()); if (w->window()) w->window()->redraw(); widget_i++; mod = 1; } } if (mod) { Fluid.proj.set_modflag(1); o->value(v); } } //fl ▲ ----------~==--=~=--=-----------~~=~--~~=~-~---=~-=-~= ▲ fl// } fld::widget::Formula_Input *widget_w_input=(fld::widget::Formula_Input *)0; static void cb_widget_w_input(fld::widget::Formula_Input* o, void* v) { //fl ▼ ---------------------- callback ---=~~--~==-=-~-=-~-=~ ▼ fl// if (v == LOAD) { if (current_widget->is_true_widget()) { o->value(((Widget_Node *)current_widget)->o->w()); o->activate(); } else o->deactivate(); } else { Fluid.proj.undo.checkpoint(); widget_i = 0; int mod = 0; int v = 0; for (Widget_Node *q: Fluid.proj.tree.all_selected_widgets()) { if (q->is_true_widget()) { Fl_Widget *w = q->o; o->variables(widget_vars, q); v = o->value(); w->resize(w->x(), w->y(), v, w->h()); if (w->window()) w->window()->redraw(); widget_i++; mod = 1; } } if (mod) { Fluid.proj.set_modflag(1); o->value(v); } } //fl ▲ ----------~=~-=~~--~------------~--~-==-~~~~~==-=--=-= ▲ fl// } fld::widget::Formula_Input *widget_h_input=(fld::widget::Formula_Input *)0; static void cb_widget_h_input(fld::widget::Formula_Input* o, void* v) { //fl ▼ ---------------------- callback -~-=-==~--~=-~--=----- ▼ fl// if (v == LOAD) { if (current_widget->is_true_widget()) { o->value(((Widget_Node *)current_widget)->o->h()); o->activate(); } else o->deactivate(); } else { Fluid.proj.undo.checkpoint(); widget_i = 0; int mod = 0; int v = 0; for (Widget_Node *q: Fluid.proj.tree.all_selected_widgets()) { if (q->is_true_widget()) { Fl_Widget *w = q->o; o->variables(widget_vars, q); v = o->value(); w->resize(w->x(), w->y(), w->w(), v); if (w->window()) w->window()->redraw(); widget_i++; mod = 1; } } if (mod) { Fluid.proj.set_modflag(1); o->value(v); } } //fl ▲ ----------~=~--~~=--~-------------~~~=-=~-=~-~=---~~~~ ▲ fl// } static void cb_Children(Fl_Choice* o, void* v) { //fl ▼ ---------------------- callback ---=-=-~=-~=~=~-~=~-~- ▼ fl// if (v == LOAD) { if (current_widget->is_a(Type::Widget_Class)) { o->show(); o->value(((Widget_Class_Node *)current_widget)->wc_relative); } else { o->hide(); } } else { int mod = 0; Fluid.proj.undo.checkpoint(); for (Widget_Node *q: Fluid.proj.tree.all_selected_widgets()) { if (q->is_a(Type::Widget_Class)) { Widget_Class_Node *t = (Widget_Class_Node *)q; t->wc_relative = o->value(); mod = 1; } } if (mod) Fluid.proj.set_modflag(1); } //fl ▲ ----------~=-==~=-=-~-----------~~=~=~~=~=-=-=~=~-~=-= ▲ fl// } Fl_Menu_Item menu_Children[] = { {"Fixed", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, {"Reposition", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, {"Resize", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, {0,0,0,0,0,0,0,0,0} }; Fl_Group *wp_gui_flexp=(Fl_Group *)0; static void cb_wp_gui_flexp(Fl_Group* o, void* v) { //fl ▼ ---------------------- callback --~~~~~-=~~-~-~----~-= ▼ fl// if (v == LOAD) { if (Flex_Node::parent_is_flex(current_widget)) { o->show(); propagate_load(o, v); } else { o->hide(); } } //fl ▲ ----------~=---=-=~~-=------------=-~=-~-==-~~~-~-=~~~ ▲ fl// } Fl_Value_Input *widget_flex_size=(Fl_Value_Input *)0; static void cb_widget_flex_size(Fl_Value_Input* o, void* v) { //fl ▼ ---------------------- callback ---~-~=~~=-~=~~-~--~-= ▼ fl// if (v == LOAD) { if (Flex_Node::parent_is_flex(current_widget)) { o->value(Flex_Node::size(current_widget)); } } else { int mod = 0; int new_size = (int)o->value(); for (Widget_Node *q: Fluid.proj.tree.all_selected_widgets()) { if (Flex_Node::parent_is_flex(q)) { Fl_Widget* w = (Fl_Widget*)q->o; Fl_Flex* f = (Fl_Flex*)((Flex_Node*)q->parent)->o; int was_fixed = f->fixed(w); if (new_size==0) { if (was_fixed) { f->fixed(w, 0); f->layout(); widget_flex_fixed->value(0); mod = 1; } } else { int old_size = Flex_Node::size(q); if (old_size!=new_size || !was_fixed) { f->fixed(w, new_size); f->layout(); widget_flex_fixed->value(1); mod = 1; } } } } if (mod) Fluid.proj.set_modflag(1); } //fl ▲ ----------~=~~-~-=~-=~----------~~~=~~--~=-~--~==--~~~ ▲ fl// } Fl_Check_Button *widget_flex_fixed=(Fl_Check_Button *)0; static void cb_widget_flex_fixed(Fl_Check_Button* o, void* v) { //fl ▼ ---------------------- callback ~~-==--~--~~-~=~-=~=~- ▼ fl// if (v == LOAD) { if (Flex_Node::parent_is_flex(current_widget)) { o->value(Flex_Node::is_fixed(current_widget)); } } else { int mod = 0; int new_fixed = (int)o->value(); for (Widget_Node *q: Fluid.proj.tree.all_selected_widgets()) { if (Flex_Node::parent_is_flex(q)) { Fl_Widget* w = q->o; Fl_Flex* f = (Fl_Flex*)((Flex_Node*)q->parent)->o; int was_fixed = f->fixed(w); if (new_fixed==0) { if (was_fixed) { f->fixed(w, 0); f->layout(); mod = 1; } } else { if (!was_fixed) { f->fixed(w, Flex_Node::size(q)); f->layout(); mod = 1; } } } } if (mod) Fluid.proj.set_modflag(1); } //fl ▲ ----------~==-=-~=---=----------~--~=---~~~=~~-~~-~--= ▲ fl// } Fl_Group *wp_gui_values=(Fl_Group *)0; static void cb_wp_gui_values(Fl_Group* o, void* v) { //fl ▼ ---------------------- callback ~~~~=~-=-==~--~=~==-~- ▼ fl// if (v == LOAD) { if ( current_widget->is_a(Type::Flex) || current_widget->is_a(Type::Grid) || current_widget->is_a(Type::Window)) { o->hide(); } else { o->show(); propagate_load(o, v); } } //fl ▲ ----------~=~--~=--~------------~-=--~=~~~-~-==--=~--~ ▲ fl// } static void cb_Size(Fl_Value_Input* o, void* v) { //fl ▼ ---------------------- callback ~~~-~~-=~=~-~~---==--~ ▼ fl// if (v == LOAD) { if (!current_widget->is_a(Type::Slider)) {o->deactivate(); return;} o->activate(); o->value(((Fl_Slider*)(current_widget->o))->slider_size()); } else { int mod = 0; Fluid.proj.undo.checkpoint(); double n = o->value(); for (Widget_Node *q: Fluid.proj.tree.all_selected_widgets()) { if (q->is_a(Type::Slider)) { ((Fl_Slider*)(q->o))->slider_size(n); q->o->redraw(); mod = 1; } } if (mod) Fluid.proj.set_modflag(1); } //fl ▲ ----------~=-==~-~-~~=-----------~~---~=-=~=-~=--~-=~~ ▲ fl// } static void cb_Minimum(Fl_Value_Input* o, void* v) { //fl ▼ ---------------------- callback -~-=~~-=-=-=~=~==-~~~- ▼ fl// if (v == LOAD) { if (current_widget->is_a(Type::Valuator_)) { o->activate(); o->value(((Fl_Valuator*)(current_widget->o))->minimum()); } else if (current_widget->is_a(Type::Spinner)) { o->activate(); o->value(((Fl_Spinner*)(current_widget->o))->minimum()); } else { o->deactivate(); return; } } else { int mod = 0; Fluid.proj.undo.checkpoint(); double n = o->value(); for (Widget_Node *q: Fluid.proj.tree.all_selected_widgets()) { if (q->is_a(Type::Valuator_)) { ((Fl_Valuator*)(q->o))->minimum(n); q->o->redraw(); mod = 1; } else if (q->is_a(Type::Spinner)) { ((Fl_Spinner*)(q->o))->minimum(n); q->o->redraw(); mod = 1; } } if (mod) Fluid.proj.set_modflag(1); } //fl ▲ ----------=~~==-~~=--=----------~~~-~~-=~~-==-~~-==--= ▲ fl// } static void cb_Maximum(Fl_Value_Input* o, void* v) { //fl ▼ ---------------------- callback ~-~-=~=-=-~-=-~-~=---= ▼ fl// if (v == LOAD) { if (current_widget->is_a(Type::Valuator_)) { o->activate(); o->value(((Fl_Valuator*)(current_widget->o))->maximum()); } else if (current_widget->is_a(Type::Spinner)) { o->activate(); o->value(((Fl_Spinner*)(current_widget->o))->maximum()); } else { o->deactivate(); return; } } else { int mod = 0; Fluid.proj.undo.checkpoint(); double n = o->value(); for (Widget_Node *q: Fluid.proj.tree.all_selected_widgets()) { if (q->is_a(Type::Valuator_)) { ((Fl_Valuator*)(q->o))->maximum(n); q->o->redraw(); mod = 1; } else if (q->is_a(Type::Spinner)) { ((Fl_Spinner*)(q->o))->maximum(n); q->o->redraw(); mod = 1; } } if (mod) Fluid.proj.set_modflag(1); } //fl ▲ ----------~=~==-=~~~~~----------~-=~-==~~~~--~=--=-==~ ▲ fl// } static void cb_Step(Fl_Value_Input* o, void* v) { //fl ▼ ---------------------- callback --~-=~-~=~~~~~-~=--~~= ▼ fl// if (v == LOAD) { if (current_widget->is_a(Type::Valuator_)) { o->activate(); o->value(((Fl_Valuator*)(current_widget->o))->step()); } else if (current_widget->is_a(Type::Spinner)) { o->activate(); o->value(((Fl_Spinner*)(current_widget->o))->step()); } else { o->deactivate(); return; } } else { int mod = 0; Fluid.proj.undo.checkpoint(); double n = o->value(); for (Widget_Node *q: Fluid.proj.tree.all_selected_widgets()) { if (q->is_a(Type::Valuator_)) { ((Fl_Valuator*)(q->o))->step(n); q->o->redraw(); mod = 1; } else if (q->is_a(Type::Spinner)) { ((Fl_Spinner*)(q->o))->step(n); q->o->redraw(); mod = 1; } } if (mod) Fluid.proj.set_modflag(1); } //fl ▲ ----------~=---~-==~-~----------~-~~=~~~~=~--~~---=-=- ▲ fl// } static void cb_Value(Fl_Value_Input* o, void* v) { //fl ▼ ---------------------- callback --=-=-~--~-~-~-~~=-~~~ ▼ fl// if (v == LOAD) { if (current_widget->is_a(Type::Valuator_)) { o->activate(); o->value(((Fl_Valuator*)(current_widget->o))->value()); } else if (current_widget->is_button()) { o->activate(); o->value(((Fl_Button*)(current_widget->o))->value()); } else if (current_widget->is_a(Type::Spinner)) { o->activate(); o->value(((Fl_Spinner*)(current_widget->o))->value()); } else o->deactivate(); } else { int mod = 0; Fluid.proj.undo.checkpoint(); double n = o->value(); for (Widget_Node *q: Fluid.proj.tree.all_selected_widgets()) { if (q->is_a(Type::Valuator_)) { ((Fl_Valuator*)(q->o))->value(n); mod = 1; } else if (q->is_button()) { ((Fl_Button*)(q->o))->value(n != 0); if (q->is_a(Type::Menu_Item)) q->redraw(); mod = 1; } else if (q->is_a(Type::Spinner)) { ((Fl_Spinner*)(q->o))->value(n); mod = 1; } } if (mod) Fluid.proj.set_modflag(1); } //fl ▲ ----------=~~-=---=~=~----------~-=-~==-~~~=~~~--~-~-~ ▲ fl// } Fl_Group *wp_gui_margins=(Fl_Group *)0; static void cb_wp_gui_margins(Fl_Group* o, void* v) { //fl ▼ ---------------------- callback ---~~==--~-~=~~--==~~- ▼ fl// if (v == LOAD) { if (current_widget->is_a(Type::Flex)) { o->show(); propagate_load(o, v); } else { o->hide(); } } //fl ▲ ----------=~-~---=-~~-----------~~-=---~~==~~=-=---=~= ▲ fl// } static void cb_Left(Fl_Value_Input* o, void* v) { //fl ▼ ---------------------- callback ~-=~~-~~--=-=--=--~--~ ▼ fl// flex_margin_cb(o, v, [](Fl_Flex *w, Fl_Value_Input* i) -> void { int v; w->margin(&v, nullptr, nullptr, nullptr); i->value((double)v); }, [](Fl_Flex *w, int new_value) -> int { int l, t, r, b; w->margin(&l, &t, &r, &b); if (new_value!=l) { w->margin(new_value, t, r, b); return 1; } else { return 0; } } ); //fl ▲ ----------~=~-=~=~-~~-----------~~----=-~--==-----~~~= ▲ fl// } static void cb_Top(Fl_Value_Input* o, void* v) { //fl ▼ ---------------------- callback ~---~--=~-=~-=~=~=~=~- ▼ fl// flex_margin_cb(o, v, [](Fl_Flex *w, Fl_Value_Input* i) -> void { int v; w->margin(nullptr, &v, nullptr, nullptr); i->value((double)v); }, [](Fl_Flex *w, int new_value) { int l, t, r, b; w->margin(&l, &t, &r, &b); if (new_value!=t) { w->margin(l, new_value, r, b); return 1; } else { return 0; } } ); //fl ▲ ----------=~-~=--=~--~---------------~~-=-~=--~=---~~~ ▲ fl// } static void cb_Right(Fl_Value_Input* o, void* v) { //fl ▼ ---------------------- callback ~~=~-~-~--~-~-~=~--==- ▼ fl// flex_margin_cb(o, v, [](Fl_Flex *w, Fl_Value_Input* i) -> void { int v; w->margin(nullptr, nullptr, &v, nullptr); i->value((double)v); }, [](Fl_Flex *w, int new_value) -> int { int l, t, r, b; w->margin(&l, &t, &r, &b); if (new_value!=r) { w->margin(l, t, new_value, b); return 1; } else { return 0; } } ); //fl ▲ ----------=~~~~~~==~-~------------~~=----~=-=-~==-=~=~ ▲ fl// } static void cb_Bottom(Fl_Value_Input* o, void* v) { //fl ▼ ---------------------- callback ~--=~~~--=~-~~--~=-~-= ▼ fl// flex_margin_cb(o, v, [](Fl_Flex *w, Fl_Value_Input* i) -> void { int v; w->margin(nullptr, nullptr, nullptr, &v); i->value((double)v); }, [](Fl_Flex *w, int new_value) -> int { int l, t, r, b; w->margin(&l, &t, &r, &b); if (new_value!=b) { w->margin(l, t, r, new_value); return 1; } else { return 0; } } ); //fl ▲ ----------=~~==---~~=-----------~~-~--=-----=~~-~=-=-~ ▲ fl// } static void cb_Gap(Fl_Value_Input* o, void* v) { //fl ▼ ---------------------- callback --~---~~-=~~-=~-~-=~-- ▼ fl// flex_margin_cb(o, v, [](Fl_Flex *w, Fl_Value_Input* o) -> void { int v = w->gap(); o->value((double)v); }, [](Fl_Flex *w, int new_value) -> int { int g = w->gap(); if (new_value!=g) { w->gap(new_value); return 1; } else { return 0; } } ); //fl ▲ ----------~=-=~=~~~=------------~~=-~=~-=~---==~=~~=-= ▲ fl// } Fl_Group *wp_gui_sizerange=(Fl_Group *)0; static void cb_wp_gui_sizerange(Fl_Group* o, void* v) { //fl ▼ ---------------------- callback ~~-==-=~--=-=~-~-~-=-~ ▼ fl// if (v == LOAD) { if (current_widget->is_a(Type::Window)) { o->show(); propagate_load(o, v); } else { o->hide(); } } //fl ▲ ----------~=--=~-~=-~~----------~~~~~~~=----=-~--=-~-~ ▲ fl// } static void cb_Minimum1(Fl_Value_Input* o, void* v) { //fl ▼ ---------------------- callback ~-=~=-~-~==~~-~~~-~--= ▼ fl// if (v == LOAD) { if (!current_widget->is_a(Type::Window)) return; o->value(((Window_Node*)current_widget)->sr_min_w); } else { int mod = 0; Fluid.proj.undo.checkpoint(); int n = (int)o->value(); for (Widget_Node *q: Fluid.proj.tree.all_selected_widgets()) { if (q->is_a(Type::Window)) { ((Window_Node*)q)->sr_min_w = n; mod = 1; } } if (mod) Fluid.proj.set_modflag(1); } //fl ▲ ----------=~~--~=-~-------------~~~--=~-=-=-~-~==~~~-- ▲ fl// } static void cb_1(Fl_Value_Input* o, void* v) { //fl ▼ ---------------------- callback ~-~-=~~=~-=-~==-=~-=-= ▼ fl// if (v == LOAD) { if (!current_widget->is_a(Type::Window)) return; o->value(((Window_Node*)current_widget)->sr_min_h); } else { int mod = 0; Fluid.proj.undo.checkpoint(); int n = (int)o->value(); for (Widget_Node *q: Fluid.proj.tree.all_selected_widgets()) { if (q->is_a(Type::Window)) { ((Window_Node*)q)->sr_min_h = n; mod = 1; } } if (mod) Fluid.proj.set_modflag(1); } //fl ▲ ----------=~=~~--=-~~~------------~=~==--~------~-=-~- ▲ fl// } static void cb_set(Fl_Button* o, void* v) { //fl ▼ ---------------------- callback -~=~=-~-=-=~-~~-~~~-=- ▼ fl// if (v == LOAD) { } else { int mod = 0; Fluid.proj.undo.checkpoint(); for (Widget_Node *q: Fluid.proj.tree.all_selected_widgets()) { if (q->is_a(Type::Window)) { Window_Node *win = (Window_Node*)q; win->sr_min_w = win->o->w(); win->sr_min_h = win->o->h(); mod = 1; } } propagate_load(the_panel, LOAD); if (mod) Fluid.proj.set_modflag(1); } //fl ▲ ----------=~=-=-~--~=------------~~~=~~--~-~-==~-~--=- ▲ fl// } static void cb_Maximum1(Fl_Value_Input* o, void* v) { //fl ▼ ---------------------- callback ~~~~-=~=-~--=~=~-~=~=~ ▼ fl// if (v == LOAD) { if (!current_widget->is_a(Type::Window)) return; o->value(((Window_Node*)current_widget)->sr_max_w); } else { int mod = 0; Fluid.proj.undo.checkpoint(); int n = (int)o->value(); for (Widget_Node *q: Fluid.proj.tree.all_selected_widgets()) { if (q->is_a(Type::Window)) { ((Window_Node*)q)->sr_max_w = n; mod = 1; } } if (mod) Fluid.proj.set_modflag(1); } //fl ▲ ----------=~-~-==~=-~=----------~~~==~-=-==~=-=~~~--=~ ▲ fl// } static void cb_2(Fl_Value_Input* o, void* v) { //fl ▼ ---------------------- callback -~~~~=~==-~~~=-~=-~~~~ ▼ fl// if (v == LOAD) { if (!current_widget->is_a(Type::Window)) return; o->value(((Window_Node*)current_widget)->sr_max_h); } else { int mod = 0; Fluid.proj.undo.checkpoint(); int n = (int)o->value(); for (Widget_Node *q: Fluid.proj.tree.all_selected_widgets()) { if (q->is_a(Type::Window)) { ((Window_Node*)q)->sr_max_h = n; mod = 1; } } if (mod) Fluid.proj.set_modflag(1); } //fl ▲ ----------=~~=-=-~~---------------~-=-~~--~-=~-~~=~==- ▲ fl// } static void cb_set1(Fl_Button* o, void* v) { //fl ▼ ---------------------- callback --~~=~~~~~~==-=--==-~~ ▼ fl// if (v == LOAD) { } else { int mod = 0; Fluid.proj.undo.checkpoint(); for (Widget_Node *q: Fluid.proj.tree.all_selected_widgets()) { if (q->is_a(Type::Window)) { Window_Node *win = (Window_Node*)q; win->sr_max_w = win->o->w(); win->sr_max_h = win->o->h(); mod = 1; } } propagate_load(the_panel, LOAD); if (mod) Fluid.proj.set_modflag(1); } //fl ▲ ----------~=--=~--~~=~---------------=-~~=~-~=-~=~~=~- ▲ fl// } Fl_Shortcut_Button *wp_gui_shortcut=(Fl_Shortcut_Button *)0; static void cb_wp_gui_shortcut(Fl_Shortcut_Button* o, void* v) { //fl ▼ ---------------------- callback -~=---=~-~--=-~~~=-~~= ▼ fl// if (v == LOAD) { if (current_widget->is_button()) o->value( ((Fl_Button*)(current_widget->o))->shortcut() ); else if (current_widget->is_a(Type::Input)) o->value( ((Fl_Input_*)(current_widget->o))->shortcut() ); else if (current_widget->is_a(Type::Value_Input)) o->value( ((Fl_Value_Input*)(current_widget->o))->shortcut() ); else if (current_widget->is_a(Type::Text_Display)) o->value( ((Fl_Text_Display*)(current_widget->o))->shortcut() ); else { o->hide(); o->parent()->hide(); return; } //i->default_value( i->value() ); // enable the "undo" capability of the shortcut button o->show(); o->parent()->show(); o->redraw(); } else { int mod = 0; for (Widget_Node *q: Fluid.proj.tree.all_selected_widgets()) if (q->is_button()) { Fl_Button* b = (Fl_Button*)(q->o); if (b->shortcut() != (int)o->value()) mod = 1; b->shortcut(o->value()); if (q->is_a(Type::Menu_Item)) q->redraw(); } else if (q->is_a(Type::Input)) { Fl_Input_* b = (Fl_Input_*)(q->o); if (b->shortcut() != (int)o->value()) mod = 1; b->shortcut(o->value()); } else if (q->is_a(Type::Value_Input)) { Fl_Value_Input* b = (Fl_Value_Input*)(q->o); if (b->shortcut() != (int)o->value()) mod = 1; b->shortcut(o->value()); } else if (q->is_a(Type::Text_Display)) { Fl_Text_Display* b = (Fl_Text_Display*)(q->o); if (b->shortcut() != (int)o->value()) mod = 1; b->shortcut(o->value()); } if (mod) Fluid.proj.set_modflag(1); } //fl ▲ ----------~=~~~~~=~~~~----------~-----~=~=--~~-=-=-~~- ▲ fl// } Fl_Group *wp_gui_xclass=(Fl_Group *)0; static void cb_3(Fl_Input* o, void* v) { //fl ▼ ---------------------- callback ~-~=~-~~=~~~-~~-~~~~-= ▼ fl// if (v == LOAD) { if (current_widget->is_a(Type::Window)) { o->show(); o->parent()->show(); o->value(((Window_Node *)current_widget)->xclass); } else { o->hide(); o->parent()->hide(); // hides the "X Class:" label as well } } else { int mod = 0; Fluid.proj.undo.checkpoint(); for (Widget_Node *q: Fluid.proj.tree.all_selected_widgets()) { if (q->is_a(Type::Window)) { mod = 1; Window_Node *wt = (Window_Node *)q; storestring(o->value(), wt->xclass); ((Fl_Window*)(wt->o))->xclass(wt->xclass); } } if (mod) Fluid.proj.set_modflag(1); } //fl ▲ ----------=~=~-----~-~----------~-=-=-=~-=~~~=~==~--=- ▲ fl// } static void cb_Border(Fl_Light_Button* o, void* v) { //fl ▼ ---------------------- callback -~-=~-=~~-~~-=-~--~~-= ▼ fl// if (v == LOAD) { if (!current_widget->is_a(Type::Window)) {o->hide(); return;} o->show(); o->value(((Fl_Window*)(current_widget->o))->border()); } else { Fluid.proj.undo.checkpoint(); ((Fl_Window*)(current_widget->o))->border(o->value()); Fluid.proj.set_modflag(1); } //fl ▲ ----------=~~=~=~--=-~-------------~--~---~-=-~~=-=-=~ ▲ fl// } static void cb_Modal(Fl_Light_Button* o, void* v) { //fl ▼ ---------------------- callback ~---~~~=~==~-=-=~=-=-- ▼ fl// if (v == LOAD) { if (!current_widget->is_a(Type::Window)) {o->hide(); return;} o->show(); o->value(((Window_Node *)current_widget)->modal); } else { Fluid.proj.undo.checkpoint(); ((Window_Node *)current_widget)->modal = o->value(); Fluid.proj.set_modflag(1); } //fl ▲ ----------~=-=~-=-=~=--------------=-~=----~~=~~-=-=-= ▲ fl// } static void cb_Nonmodal(Fl_Light_Button* o, void* v) { //fl ▼ ---------------------- callback ~~~~-~~=~=~=---~-=~~~- ▼ fl// if (v == LOAD) { if (!current_widget->is_a(Type::Window)) {o->hide(); return;} o->show(); o->value(((Window_Node *)current_widget)->non_modal); } else { Fluid.proj.undo.checkpoint(); ((Window_Node *)current_widget)->non_modal = o->value(); Fluid.proj.set_modflag(1); } //fl ▲ ----------~=~~~-=-~=-=----------~-~-~=~--~~-=-=-~=~~=- ▲ fl// } Fl_Group *wp_gui_attributes=(Fl_Group *)0; static void cb_Visible(Fl_Light_Button* o, void* v) { //fl ▼ ---------------------- callback ~-~~=-~-~==--~=-~~=-=- ▼ fl// if (v == LOAD) { o->value(current_widget->o->visible()); if (current_widget->is_a(Type::Window)) o->deactivate(); else o->activate(); } else { int mod = 0; int n = o->value(); for (Widget_Node *q: Fluid.proj.tree.all_selected_widgets()) { if (!mod) { mod = 1; Fluid.proj.undo.checkpoint(); } n ? q->o->show() : q->o->hide(); q->redraw(); if (n && q->parent && q->parent->type_name()) { if (q->parent->is_a(Type::Tabs)) { ((Fl_Tabs *)q->o->parent())->value(q->o); } else if (q->parent->is_a(Type::Wizard)) { ((Fl_Wizard *)q->o->parent())->value(q->o); } } } if (mod) { Fluid.proj.set_modflag(1); redraw_browser(); } } //fl ▲ ----------=~-==~-~-~~~----------~-=~~~=-----~-~~~==~~- ▲ fl// } static void cb_Active(Fl_Light_Button* o, void* v) { //fl ▼ ---------------------- callback ~~-~--~--=~=~~--~-=~~~ ▼ fl// if (v == LOAD) { o->value(current_widget->o->active()); if (current_widget->is_a(Type::Window)) o->deactivate(); else o->activate(); } else { int mod = 0; int n = o->value(); for (Widget_Node *q: Fluid.proj.tree.all_selected_widgets()) { if (!mod) { mod = 1; Fluid.proj.undo.checkpoint(); } n ? q->o->activate() : q->o->deactivate(); q->redraw(); } if (mod) Fluid.proj.set_modflag(1); } //fl ▲ ----------=~-=~-=---~=----------~~~~--=~--~=~=-==---~- ▲ fl// } static void cb_Resizable(Fl_Light_Button* o, void* v) { //fl ▼ ---------------------- callback ~~=-=~-==~=~~----=-=~= ▼ fl// if (v == LOAD) { if (current_widget->is_a(Type::Menu_Item)) { o->hide(); return; } o->show(); o->value(current_widget->resizable()); if (numselected > 1) { o->deactivate(); return; } o->activate(); } else { Fluid.proj.undo.checkpoint(); current_widget->resizable(o->value()); Fluid.proj.set_modflag(1); } //fl ▲ ----------=~-~-~-=--=------------~~-=~=~~=--~-~--=-~-- ▲ fl// } static void cb_Headline(Fl_Light_Button* o, void* v) { //fl ▼ ---------------------- callback -~--~=~-=~-=~--=~~---- ▼ fl// if (v == LOAD) { if (!current_widget->is_a(Type::Menu_Item)) { o->hide(); return; } o->show(); o->value(current_widget->menu_headline()); } else { int mod = 0; int n = o->value(); for (Widget_Node *q: Fluid.proj.tree.all_selected_widgets()) { if (q->is_a(Type::Menu_Item)) { if (!mod) { mod = 1; Fluid.proj.undo.checkpoint(); } q->menu_headline(n); q->redraw(); } } if (mod) Fluid.proj.set_modflag(1); } //fl ▲ ----------~=~~-~~-=-=-----------~~~~=~=~~-=~=~~=--=~=~ ▲ fl// } static void cb_Hotspot(Fl_Light_Button* o, void* v) { //fl ▼ ---------------------- callback ~~=-~-=~=-=~-~-=~=~~-= ▼ fl// if (v == LOAD) { if (numselected > 1) {o->deactivate(); return;} if (current_widget->is_a(Type::Menu_Item)) o->label("divider"); else o->label("hotspot"); o->activate(); o->value(current_widget->hotspot()); } else { Fluid.proj.undo.checkpoint(); current_widget->hotspot(o->value()); if (current_widget->is_a(Type::Menu_Item)) { current_widget->redraw(); return; } if (o->value()) { Node *p = current_widget->parent; if (!p || !p->is_widget()) return; while (!p->is_a(Type::Window)) p = p->parent; for (Node *q = p->next; q && q->level > p->level; q = q->next) { if (q->is_widget() && q != current_widget) ((Widget_Node*)q)->hotspot(0); } } Fluid.proj.set_modflag(1); } //fl ▲ ----------~=~--=~~=~-=----------~~----~-~~~=---=~-=~~~ ▲ fl// } Fl_Input *wp_gui_tooltip=(Fl_Input *)0; static void cb_wp_gui_tooltip(Fl_Input* o, void* v) { //fl ▼ ---------------------- callback ~~=-~~--=--=--=-=~=-=- ▼ fl// if (v == LOAD) { if (current_widget->is_widget()) { o->activate(); o->value(((Widget_Node*)current_widget)->tooltip().c_str()); } else { o->deactivate(); } } else { int mod = 0; for (Widget_Node *q: Fluid.proj.tree.all_selected_widgets()) { q->tooltip(o->value()); mod = 1; } if (mod) Fluid.proj.set_modflag(1); } //fl ▲ ----------~==--==-~==~-----------~--~--~~=--=-~----==- ▲ fl// } Fl_Group *wp_style_tab=(Fl_Group *)0; Fl_Group *wp_style_label=(Fl_Group *)0; static void cb_4(Fl_Choice* o, void* v) { //fl ▼ ---------------------- callback ~-~-~=-----~-=~-~=-~~- ▼ fl// if (v == LOAD) { int n = current_widget->o->labelfont(); if (n > 15) n = 0; o->value(n); } else { int mod = 0; int n = o->value(); if (n <= 0) n = Fluid.proj.layout->labelfont; if (n <= 0) n = FL_HELVETICA; for (Widget_Node *q: Fluid.proj.tree.all_selected_widgets()) { q->o->labelfont(n); q->redraw(); mod = 1; } if (mod) Fluid.proj.set_modflag(1); } //fl ▲ ----------~=~=-=-~=-=------------~--~~--=-=~~~-----~-= ▲ fl// } static void cb_5(Fl_Value_Input* o, void* v) { //fl ▼ ---------------------- callback ~~-=~=~----~=~--=~-~~= ▼ fl// int n; if (v == LOAD) { n = current_widget->o->labelsize(); } else { int mod = 0; n = int(o->value()); if (n <= 0) n = Fluid.proj.layout->labelsize; for (Widget_Node *q: Fluid.proj.tree.all_selected_widgets()) { q->o->labelsize(n); q->redraw(); mod = 1; } if (mod) Fluid.proj.set_modflag(1); } o->value(n); //fl ▲ ----------=~~=~=~--~=------------~-=~=-~-~=-~==-~-~=~~ ▲ fl// } Fl_Button *w_labelcolor=(Fl_Button *)0; static void cb_w_labelcolor(Fl_Button* o, void* v) { //fl ▼ ---------------------- callback ~-~=~~----=~-~-~=~=~-~ ▼ fl// Fl_Color c = current_widget->o->labelcolor(); if (v != LOAD) { Fl_Color d = fl_show_colormap(c); if (d == c) return; c = d; labelcolor_common(c); } o->color(c); o->labelcolor(fl_contrast(FL_BLACK,c)); o->redraw(); //fl ▲ ----------~=-==~=-=~~=-----------~=-~=-~=~~~~~-=--~~=~ ▲ fl// } static void cb_6(Fl_Menu_Button* o, void* v) { //fl ▼ ---------------------- callback ~--=~~-=~~~-=~=-=~--=~ ▼ fl// Fl_Color c = current_widget->o->labelcolor(); if (v != LOAD) { Fl_Color d = (Fl_Color)(o->mvalue()->argument()); if (d == c) return; c = d; labelcolor_common(c); w_labelcolor->color(c); w_labelcolor->labelcolor(fl_contrast(FL_BLACK,c)); w_labelcolor->redraw(); } //fl ▲ ----------~=-~~~~----=----------~~=-=-=-~~--~=-~~~-=~= ▲ fl// } Fl_Group *wp_style_box=(Fl_Group *)0; static void cb_7(Fl_Choice* o, void* v) { //fl ▼ ---------------------- callback ~-~--~-~~=--~~=-=---=- ▼ fl// if (v == LOAD) { if (current_widget->is_a(Type::Menu_Item)) {o->deactivate(); return;} else o->activate(); int n = current_widget->o->box(); if (!n) n = ZERO_ENTRY; for (int j = 0; j < 72 /*int(sizeof(boxmenu)/sizeof(*boxmenu))*/; j++) if (boxmenu[j].argument() == n) {o->value(j); break;} } else { int mod = 0; int m = o->value(); int n = int(boxmenu[m].argument()); if (!n) return; // should not happen if (n == ZERO_ENTRY) n = 0; for (Widget_Node *q: Fluid.proj.tree.all_selected_widgets()) { q->o->box((Fl_Boxtype)n); q->redraw(); mod = 1; } if (mod) Fluid.proj.set_modflag(1); } //fl ▲ ----------~==-~--~~--=----------~~~~--~--=--=~=~~--=-~ ▲ fl// } Fl_Button *w_color=(Fl_Button *)0; static void cb_w_color(Fl_Button* o, void* v) { //fl ▼ ---------------------- callback --=---~=~--~~-=~--~~~- ▼ fl// Fl_Color c = current_widget->o->color(); if (v == LOAD) { if (current_widget->is_a(Type::Menu_Item)) { o->deactivate(); } else { o->activate(); } } else { Fl_Color d = fl_show_colormap(c); if (d == c) return; c = d; color_common(c); } o->color(c); o->labelcolor(fl_contrast(FL_BLACK,c)); o->redraw(); //fl ▲ ----------=~---==--~~-------------=-~=~---~-~-=-=~~--= ▲ fl// } static void cb_8(Fl_Menu_Button* o, void* v) { //fl ▼ ---------------------- callback ---~-~~==--==--=~-=--= ▼ fl// Fl_Color c = current_widget->o->color(); if (v == LOAD) { if (current_widget->is_a(Type::Menu_Item)) {o->deactivate(); return;} else o->activate(); } else { Fl_Color d = (Fl_Color)(o->mvalue()->argument()); if (d == c) return; c = d; color_common(c); w_color->color(c); w_color->labelcolor(fl_contrast(FL_BLACK,c)); w_color->redraw(); } //fl ▲ ----------~==~=---~~--------------~~-==-~--~~-=-~=~~~~ ▲ fl// } Fl_Group *wp_style_downbox=(Fl_Group *)0; static void cb_9(Fl_Choice* o, void* v) { //fl ▼ ---------------------- callback -~-=----~-~-~==-=--=~= ▼ fl// if (v == LOAD) { int n; if (current_widget->is_a(Type::Button)) n = ((Fl_Button*)(current_widget->o))->down_box(); else if (current_widget->is_a(Type::Input_Choice)) n = ((Fl_Input_Choice*)(current_widget->o))->down_box(); else if (current_widget->is_a(Type::Menu_Manager_)) n = ((Fl_Menu_*)(current_widget->o))->down_box(); else { o->deactivate(); return; } o->activate(); if (!n) n = ZERO_ENTRY; for (int j = 0; j < 72 /*int(sizeof(boxmenu)/sizeof(*boxmenu))*/; j++) if (boxmenu[j].argument() == n) {o->value(j); break;} } else { int mod = 0; int m = o->value(); int n = int(boxmenu[m].argument()); if (!n) return; // should not happen if (n == ZERO_ENTRY) n = 0; for (Widget_Node *q: Fluid.proj.tree.all_selected_widgets()) { if (q->is_a(Type::Button)) { ((Fl_Button*)(q->o))->down_box((Fl_Boxtype)n); if (((Fl_Button*)(q->o))->value()) q->redraw(); } else if (q->is_a(Type::Input_Choice)) { ((Fl_Input_Choice*)(q->o))->down_box((Fl_Boxtype)n); } else if (q->is_a(Type::Menu_Manager_)) { ((Fl_Menu_*)(q->o))->down_box((Fl_Boxtype)n); } mod = 1; } if (mod) Fluid.proj.set_modflag(1); } //fl ▲ ----------=~=--~-=---=------------=~---~~~=-=-~=~=~~-= ▲ fl// } Fl_Button *w_selectcolor=(Fl_Button *)0; static void cb_w_selectcolor(Fl_Button* o, void* v) { //fl ▼ ---------------------- callback --~~~-=~~-=--~~~~-=~~~ ▼ fl// Fl_Color c = current_widget->o->selection_color(); if (v == LOAD) { if (current_widget->is_a(Type::Menu_Item)) { o->deactivate(); return; } else { o->activate(); } } else { Fl_Color d = fl_show_colormap(c); if (d == c) return; c = d; color2_common(c); } o->color(c); o->labelcolor(fl_contrast(FL_BLACK,c)); o->redraw(); //fl ▲ ----------=~=--=-~~~-=----------~--~=~-~~--=-=-~~==-=- ▲ fl// } static void cb_a(Fl_Menu_Button* o, void* v) { //fl ▼ ---------------------- callback -~~=~~-~-~-~~~~=--~~=~ ▼ fl// Fl_Color c = current_widget->o->selection_color(); if (v == LOAD) { if (current_widget->is_a(Type::Menu_Item)) { o->deactivate(); return; } else { o->activate(); } } else { Fl_Color d = (Fl_Color)(o->mvalue()->argument()); if (d == c) return; c = d; color2_common(c); w_selectcolor->color(c); w_selectcolor->labelcolor(fl_contrast(FL_BLACK,c)); w_selectcolor->redraw(); } //fl ▲ ----------=~~~--~=~=~~-----------~=-~-=-~~~-=~-=-=-~~= ▲ fl// } Fl_Group *wp_style_text=(Fl_Group *)0; static void cb_b(Fl_Choice* o, void* v) { //fl ▼ ---------------------- callback -----==-=-~=----~~~-~~ ▼ fl// Fl_Font n; int s; Fl_Color c; if (v == LOAD) { if (!current_widget->textstuff(0,n,s,c)) {o->deactivate(); return;} o->activate(); if (n > 15) n = FL_HELVETICA; o->value(n); } else { int mod = 0; n = (Fl_Font)o->value(); if (n <= 0) n = Fluid.proj.layout->textfont; for (Widget_Node *q: Fluid.proj.tree.all_selected_widgets()) { q->textstuff(1,n,s,c); q->o->redraw(); mod = 1; } if (mod) Fluid.proj.set_modflag(1); } //fl ▲ ----------=~-~-=--=~~~--------------~==~~~-=--~~~~~~=~ ▲ fl// } static void cb_c(Fl_Value_Input* o, void* v) { //fl ▼ ---------------------- callback ~~--=~-~-=~=~~-~~==~-= ▼ fl// Fl_Font n; int s; Fl_Color c; if (v == LOAD) { if (!current_widget->textstuff(0,n,s,c)) {o->deactivate(); return;} o->activate(); } else { int mod = 0; s = int(o->value()); if (s <= 0) s = Fluid.proj.layout->textsize; if (s <= 0) s = Fluid.proj.layout->labelsize; for (Widget_Node *q: Fluid.proj.tree.all_selected_widgets()) { q->textstuff(2,n,s,c); q->o->redraw(); mod = 1; } if (mod) Fluid.proj.set_modflag(1); } o->value(s); //fl ▲ ----------~==--=---~~------------~=-=----=~==-=~=~=-~~ ▲ fl// } Fl_Button *w_textcolor=(Fl_Button *)0; static void cb_w_textcolor(Fl_Button* o, void* v) { //fl ▼ ---------------------- callback ~~~==~-=~-=~-~--~~~=-- ▼ fl// Fl_Font n; int s; Fl_Color c; if (v == LOAD) { if (!current_widget->textstuff(0,n,s,c)) { o->deactivate(); return; } o->activate(); } else { c = o->color(); Fl_Color d = fl_show_colormap(c); if (d == c) return; c = d; textcolor_common(c); } o->color(c); o->labelcolor(fl_contrast(FL_BLACK,c)); o->redraw(); //fl ▲ ----------~=-~~==-~==-----------~~-~---=-~=-=--==~~==- ▲ fl// } static void cb_d(Fl_Menu_Button* o, void* v) { //fl ▼ ---------------------- callback ~~~=~~~~=--~~--~~=~~=~ ▼ fl// Fl_Font n; int s; Fl_Color c; if (v == LOAD) { if (!current_widget->textstuff(0,n,s,c)) { o->deactivate(); return; } o->activate(); } else { c = o->color(); Fl_Color d = (Fl_Color)(o->mvalue()->argument()); if (d == c) return; c = d; textcolor_common(c); w_textcolor->color(c); w_textcolor->labelcolor(fl_contrast(FL_BLACK,c)); w_textcolor->redraw(); } //fl ▲ ----------~=-~~~-==-~~----------~~~~-=~==---=~-~=-~==~ ▲ fl// } static void cb_Horizontal(Fl_Value_Input* o, void* v) { //fl ▼ ---------------------- callback -~-=~==~=~-=~-=-=-~==~ ▼ fl// int s; if (v == LOAD) { if (!current_widget->is_true_widget()) { o->deactivate(); o->value(0); } else { o->activate(); o->value(((Widget_Node*)current_widget)->o->horizontal_label_margin()); } } else { int mod = 0; s = int(o->value()); for (Widget_Node *q: Fluid.proj.tree.all_selected_widgets()) { if (q->is_true_widget()) { if (q->o->horizontal_label_margin() != s) { q->o->horizontal_label_margin(s); if (!(q->o->align() & FL_ALIGN_INSIDE) && q->o->window()) q->o->window()->damage(FL_DAMAGE_EXPOSE); // outside labels q->o->redraw(); mod = 1; } } } if (mod) Fluid.proj.set_modflag(1); } //fl ▲ ----------~=-=-=-=~~~~-----------~~---=---~=-=~=---=-~ ▲ fl// } static void cb_Vertical(Fl_Value_Input* o, void* v) { //fl ▼ ---------------------- callback ~--~~=-----=~-~=-=~~~- ▼ fl// int s; if (v == LOAD) { if (!current_widget->is_true_widget()) { o->deactivate(); o->value(0); } else { o->activate(); o->value(((Widget_Node*)current_widget)->o->vertical_label_margin()); } } else { int mod = 0; s = int(o->value()); for (Widget_Node *q: Fluid.proj.tree.all_selected_widgets()) { if (q->is_true_widget()) { if (q->o->vertical_label_margin() != s) { q->o->vertical_label_margin(s); if (!(q->o->align() & FL_ALIGN_INSIDE) && q->o->window()) q->o->window()->damage(FL_DAMAGE_EXPOSE); // outside labels q->o->redraw(); mod = 1; } } } if (mod) Fluid.proj.set_modflag(1); } //fl ▲ ----------=~-~=--~~~=~----------~~~~=-~-=---~-~~=-~~-- ▲ fl// } static void cb_Image(Fl_Value_Input* o, void* v) { //fl ▼ ---------------------- callback -~~~=~--~~--~--==-=~-= ▼ fl// int s; if (v == LOAD) { if (!current_widget->is_true_widget()) { o->deactivate(); o->value(0); } else { o->activate(); o->value(((Widget_Node*)current_widget)->o->label_image_spacing()); } } else { int mod = 0; s = int(o->value()); for (Widget_Node *q: Fluid.proj.tree.all_selected_widgets()) { if (q->is_true_widget()) { if (q->o->label_image_spacing() != s) { q->o->label_image_spacing(s); if (!(q->o->align() & FL_ALIGN_INSIDE) && q->o->window()) q->o->window()->damage(FL_DAMAGE_EXPOSE); // outside labels q->o->redraw(); mod = 1; } } } if (mod) Fluid.proj.set_modflag(1); } //fl ▲ ----------=~~=-~-~~-------------~--=~~=-~--=-=~~=--~=- ▲ fl// } static void cb_Compact(Fl_Light_Button* o, void* v) { //fl ▼ ---------------------- callback ~-~-=~-~-==~=-~~=--=-= ▼ fl// if (v == LOAD) { uchar n; if (current_widget->is_a(Type::Button) && !current_widget->is_a(Type::Menu_Item)) { n = ((Fl_Button*)(current_widget->o))->compact(); o->value(n); o->show(); } else { o->hide(); } } else { int mod = 0; uchar n = (uchar)o->value(); for (Widget_Node *q: Fluid.proj.tree.all_selected_widgets()) { if (q->is_a(Type::Button) && !q->is_a(Type::Menu_Item)) { uchar v = ((Fl_Button*)(q->o))->compact(); if (n != v) { if (!mod) { mod = 1; Fluid.proj.undo.checkpoint(); } ((Fl_Button*)(q->o))->compact(n); q->redraw(); } } } if (mod) Fluid.proj.set_modflag(1); } //fl ▲ ----------=~-==~~-=-=-----------~~=~-~~~=-~--=~=-~~-~~ ▲ fl// } Fl_Group *wp_cpp_tab=(Fl_Group *)0; Fl_Group *wp_cpp_class=(Fl_Group *)0; static void cb_e(Fl_Input* o, void* v) { //fl ▼ ---------------------- callback ~-~=~--~--~-~-~=-~~-~~ ▼ fl// if (v == LOAD) { if (current_widget->is_a(Type::Menu_Item)) { o->deactivate(); } else { o->activate(); o->value(current_widget->subclass().c_str()); } } else { int mod = 0; const char *c = o->value(); for (Widget_Node *t: Fluid.proj.tree.all_selected_widgets()) { t->subclass(c); mod = 1; } if (mod) Fluid.proj.set_modflag(1); } //fl ▲ ----------~=~~--=~-=~=-----------~~==--=--~~~--=---=-= ▲ fl// } static void cb_f(Fl_Choice* o, void* v) { //fl ▼ ---------------------- callback ~~---=--=-=~=-=-~-~~~~ ▼ fl// static Fl_Menu_Item empty_type_menu[] = { {"Normal",0,nullptr,(void*)nullptr}, {nullptr}}; if (v == LOAD) { Fl_Menu_Item* m = current_widget->subtypes(); if (!m) { o->menu(empty_type_menu); o->value(0); o->deactivate(); } else { o->menu(m); int j; for (j = 0;; j++) { if (!m[j].text) {j = 0; break;} if (current_widget->is_a(Type::Spinner)) { if (m[j].argument() == ((Fl_Spinner*)current_widget->o)->type()) break; } else { if (m[j].argument() == current_widget->o->type()) break; } } o->value(j); o->activate(); } o->redraw(); } else { int mod = 0; int n = int(o->mvalue()->argument()); Fl_Menu_Item* m = current_widget->subtypes(); for (Widget_Node *q: Fluid.proj.tree.all_selected_widgets()) { if (q->subtypes()==m) { if (q->is_a(Type::Spinner)) ((Fl_Spinner*)q->o)->type(n); else if (q->is_a(Type::Flex)) ((Flex_Node*)q)->change_subtype_to(n); else q->o->type(n); q->redraw(); mod = 1; } } if (mod) Fluid.proj.set_modflag(1); } //fl ▲ ----------=~=~=--==~=--------------~-==--~~-=--~=-~-~= ▲ fl// } Fl_Group *wp_cpp_name=(Fl_Group *)0; static void cb_10(Fl_Input* o, void* v) { //fl ▼ ---------------------- callback ~~~~-~-=-~~==-=-~=-~~= ▼ fl// if (v == LOAD) { static char buf[1024]; if (numselected != 1) { snprintf(buf, sizeof(buf), "Widget Properties (%d widgets)", numselected); o->hide(); } else { o->value(current_widget->name()); o->show(); snprintf(buf, sizeof(buf), "%s Properties", current_widget->title()); } the_panel->label(buf); } else { if (numselected == 1) { current_widget->name(o->value()); // I don't update window title, as it probably is being closed // and wm2 (a window manager) barfs if you retitle and then // hide a window: // ((Fl_Window*)(o->parent()->parent()->parent()))->label(current_widget->title()); } } //fl ▲ ----------~=~=~=-~-=~=----------~~=-~-~~~=~-=----~~--~ ▲ fl// } static void cb_11(Fl_Choice* o, void* v) { //fl ▼ ---------------------- callback ~~-~-~=~-~~=~~=-~-~~~~ ▼ fl// if (v == LOAD) { o->value(current_widget->public_); if (current_widget->is_in_class()) o->show(); else o->hide(); } else { int mod = 0; for (Widget_Node *w: Fluid.proj.tree.all_selected_widgets()) { if (w->is_in_class()) { w->public_ = o->value(); } else { // if this is not in a class, it can be only private or public w->public_ = (o->value()>0); } mod = 1; } if (mod) { Fluid.proj.set_modflag(1); redraw_browser(); } } //fl ▲ ----------=~-=~-=--~=~----------~--~=-~~~=-==--=~-~==- ▲ fl// } Fl_Menu_Item menu_2[] = { {"private", 0, 0, (void*)(0), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, {"public", 0, 0, (void*)(1), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, {"protected", 0, 0, (void*)(2), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, {0,0,0,0,0,0,0,0,0} }; Fl_Menu_Item menu_3[] = { {"local", 0, 0, (void*)(0), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, {"global", 0, 0, (void*)(1), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, {0,0,0,0,0,0,0,0,0} }; static void cb_v_input(Fl_Input* o, void* v) { //fl ▼ ---------------------- callback ~~-==~=~-~~==-=--~~--= ▼ fl// int n = fl_int(o->user_data()); if (v == LOAD) { o->value(current_widget->extra_code(n).c_str()); } else { int mod = 0; const char *c = o->value(); const char *d = c_check(c&&c[0]=='#' ? c+1 : c); if (d) {fl_message("Error in %s: %s",o->label(),d); haderror = 1; return;} for (Widget_Node *w: Fluid.proj.tree.all_selected_widgets()) { w->extra_code(n, c); mod = 1; } if (mod) Fluid.proj.set_modflag(1); } //fl ▲ ----------~==--~-~=-~~----------~~-=-=~=~-~--~-==---=~ ▲ fl// } static void cb_v_input1(Fl_Input* o, void* v) { //fl ▼ ---------------------- callback ~-~==~-~~=~~=~~-~~=--~ ▼ fl// cb_v_input(o, v); //fl ▲ ----------~=-~--~~-=~-----------~-~-~=~~-------=-=-=-= ▲ fl// } static void cb_v_input2(Fl_Input* o, void* v) { //fl ▼ ---------------------- callback -~--=-~~~~-=-~-=-=~--~ ▼ fl// cb_v_input(o, v); //fl ▲ ----------=~-~-=--~~-=----------~-~-~=~~-------=-=-=-= ▲ fl// } Fl_Input *v_input[4]={(Fl_Input *)0}; static void cb_v_input3(Fl_Input* o, void* v) { //fl ▼ ---------------------- callback ~----~-~=~~--~--~~~~=~ ▼ fl// cb_v_input(o, v); //fl ▲ ----------~==-=-~--~~=----------~-~-~=~~-------=-=-=-= ▲ fl// } static void cb_12(Fl_Tile*, void* v) { //fl ▼ ---------------------- callback -~-----~=-~==~=--~-==~ ▼ fl// wComment->do_callback(wComment, v); wCallback->do_callback(wCallback, v); //fl ▲ ----------~=~~~=~=~=~~-----------~~--~-=--~=-=~~-~=~=~ ▲ fl// } Fl_Text_Editor *wComment=(Fl_Text_Editor *)0; static void cb_wComment(Fl_Text_Editor* o, void* v) { //fl ▼ ---------------------- callback ----~~=~~--==--=~----~ ▼ fl// if (v == LOAD) { const char *cmttext = current_widget->comment(); o->buffer()->text( cmttext ? cmttext : "" ); } else { int mod = 0; char *c = o->buffer()->text(); for (Node *n: Fluid.proj.tree.all_selected_nodes()) { n->comment(c); mod = 1; } if (mod) Fluid.proj.set_modflag(1); free(c); } //fl ▲ ----------=~---~~-=--~----------~~-~--=~~~-~~==~~=~~~- ▲ fl// } fld::widget::Code_Editor *wCallback=(fld::widget::Code_Editor *)0; static void cb_wCallback(fld::widget::Code_Editor* o, void* v) { //fl ▼ ---------------------- callback ~--~-~-~~-=~~-~=~=-~~= ▼ fl// if (v == LOAD) { const char *cbtext = current_widget->callback(); o->buffer()->text( cbtext ? cbtext : "" ); } else { int mod = 0; char *c = o->buffer()->text(); const char *d = c_check(c); if (d) { fl_message("Error in callback: %s",d); if (o->window()) o->window()->make_current(); haderror = 1; } for (Node *n: Fluid.proj.tree.all_selected_nodes()) { n->callback(c); mod = 1; } if (mod) Fluid.proj.set_modflag(1); free(c); } //fl ▲ ----------=~-~-==~~-=------------~=-~~-~~=-=~--~~--=~~ ▲ fl// } Fl_Group *wp_cpp_callback=(Fl_Group *)0; static void cb_13(Fl_Input* o, void* v) { //fl ▼ ---------------------- callback -~~=~-~----==~-=~~=~-= ▼ fl// if (v == LOAD) { o->value(current_widget->user_data()); } else { int mod = 0; const char *c = o->value(); const char *d = c_check(c); if (d) {fl_message("Error in user_data: %s",d); haderror = 1; return;} for (Node *n: Fluid.proj.tree.all_selected_nodes()) { n->user_data(c); mod = 1; } if (mod) Fluid.proj.set_modflag(1); } //fl ▲ ----------=~-=-~--~--=----------~-~=-~=~-~~---=-~~-~-- ▲ fl// } static void cb_When(Fl_Menu_Button* o, void* v) { //fl ▼ ---------------------- callback ~~=--==-~-=~=~~==-~-~- ▼ fl// if (v == LOAD) { if (current_widget->is_a(Type::Menu_Item)) {o->deactivate(); return;} else o->activate(); int n = current_widget->o->when(); set_whenmenu(n); w_when_box->copy_label(when_symbol_name(n)); } else { int mod = 0; int n = 0; if (o->mvalue() && ((o->mvalue()->flags & FL_MENU_TOGGLE) == 0) ) { n = (int)o->mvalue()->argument(); set_whenmenu(n); } else { if (whenmenu[0].value()) n |= FL_WHEN_CHANGED; if (whenmenu[1].value()) n |= FL_WHEN_NOT_CHANGED; if (whenmenu[2].value()) n |= FL_WHEN_RELEASE; if (whenmenu[3].value()) n |= FL_WHEN_ENTER_KEY; if (whenmenu[4].value()) n |= FL_WHEN_CLOSED; } w_when_box->copy_label(when_symbol_name(n)); for (Widget_Node *q: Fluid.proj.tree.all_selected_widgets()) { q->o->when(n); mod = 1; } if (mod) Fluid.proj.set_modflag(1); } //fl ▲ ----------=~~~=--~-~-=-----------~-=~==--=~~-=-=~~--~~ ▲ fl// } static void cb_14(Fl_Input_Choice* o, void* v) { //fl ▼ ---------------------- callback ~~---~-~~~~=~~-~~=~~~~ ▼ fl// static const char *dflt = "void*"; if (v == LOAD) { const char *c = current_widget->user_data_type(); if (!c) c = dflt; o->value(c); } else { int mod = 0; const char *c = o->value(); const char *d = c_check(c); if (!*c) o->value(dflt); else if (!strcmp(c,dflt)) c = nullptr; if (!d) { if (c && *c && c[strlen(c)-1] != '*' && strcmp(c,"long")) d = "must be pointer or long"; } if (d) {fl_message("Error in type: %s",d); haderror = 1; return;} for (Node *q: Fluid.proj.tree.all_selected_nodes()) { q->user_data_type(c); mod = 1; } if (mod) Fluid.proj.set_modflag(1); } //fl ▲ ----------~=~~=~~~=--~--------------=~~-~-~~~~-=~-~=-- ▲ fl// } Fl_Menu_Item menu_4[] = { {"void*", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 4, 11, 0}, {"long", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 4, 11, 0}, {0,0,0,0,0,0,0,0,0} }; Fl_Box *w_when_box=(Fl_Box *)0; Grid_Tab *widget_tab_grid=(Grid_Tab *)0; static void cb_widget_tab_grid(Grid_Tab* o, void*) { //fl ▼ ---------------------- callback -~--=~~~~~=-~~=-=~-~~- ▼ fl// o->callback((Fl_Callback*)propagate_load); //fl ▲ ----------~=---==~~--~----------~~~==-=--~-~-=~~=-~=-= ▲ fl// } Grid_Child_Tab *widget_tab_grid_child=(Grid_Child_Tab *)0; static void cb_widget_tab_grid_child(Grid_Child_Tab* o, void*) { //fl ▼ ---------------------- callback -~-==-=~~~~~~==~~--~-~ ▼ fl// o->callback((Fl_Callback*)propagate_load); //fl ▲ ----------=~-~=-~~-==-----------~~~==-=--~-~-=~~=-~=-= ▲ fl// } Fl_Tabs *data_tabs=(Fl_Tabs *)0; static void cb_data_tabs(Fl_Tabs* o, void* v) { //fl ▼ ---------------------- callback -~-==~-~-~-~-=-~~-~==- ▼ fl// if (current_node && current_node->is_a(Type::Data)) propagate_load((Fl_Group *)o,v); //fl ▲ ----------~=~~=-~~-==-----------~-=~=~~=--~--==~=-=~=- ▲ fl// } Fl_Group *data_tabs_data=(Fl_Group *)0; static void cb_15(Fl_Choice* o, void* v) { //fl ▼ ---------------------- callback --~~-==-=~-==-~-~-~~-= ▼ fl// if (!current_node || !current_node->is_a(Type::Data)) return; Data_Node* nd = (Data_Node*)current_node; if (v == LOAD) { if (!nd->is_in_class()) { o->value(nd->output_file()); o->show(); } else { o->hide(); } } else { if (!nd->is_in_class()) { if (nd->output_file() != o->value()) { nd->output_file(o->value()); Fluid.proj.set_modflag(1); redraw_browser(); } } } //fl ▲ ----------~=--=-=-~--~----------~~~-=~--~~~-=~~-=~=--= ▲ fl// } Fl_Menu_Item menu_5[] = { {"in source file only", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, {"in header file only", 0, 0, 0, 16, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, {"\"static\" in source file", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, {"in source and \"extern\" in header", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, {0,0,0,0,0,0,0,0,0} }; static void cb_16(Fl_Choice* o, void* v) { //fl ▼ ---------------------- callback ~-=~-=--~~-=--=~~~=-=- ▼ fl// if (!current_node || !current_node->is_a(Type::Data)) return; Data_Node* nd = (Data_Node*)current_node; if (v == LOAD) { if (nd->is_in_class()) { o->value(nd->visibility()); o->show(); } else { o->hide(); } } else { if (nd->is_in_class()) { if (nd->visibility() != o->value()) { nd->visibility(o->value()); Fluid.proj.set_modflag(1); redraw_browser(); } } } //fl ▲ ----------=~~=~~-=--=-----------~~~~=-~~-=~~---~-==~=~ ▲ fl// } Fl_Menu_Item menu_6[] = { {"private", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, {"public", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, {"protected", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, {0,0,0,0,0,0,0,0,0} }; static void cb_17(Fl_Choice* o, void* v) { //fl ▼ ---------------------- callback -~=---~-=~=---=~~~=--= ▼ fl// if (!current_node || !current_node->is_a(Type::Data)) return; Data_Node* nd = (Data_Node*)current_node; if (v == LOAD) { o->value(nd->output_format()); } else { if (nd->output_format() != o->value()) { nd->output_format( o->value() ); Fluid.proj.set_modflag(1); } } //fl ▲ ----------~=~=-~-~=-------------~~~-~~-=-~-=~~-~~==~~~ ▲ fl// } Fl_Menu_Item menu_7[] = { {"binary: unsigned char[]", 0, 0, (void*)(0), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, {"text: const char*", 0, 0, (void*)(1), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, {"compressed: unsigned char[]", 0, 0, (void*)(2), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, {"binary: std::vector", 0, 0, (void*)(3), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, {"text: std::string", 0, 0, (void*)(4), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, {"compressed: std::vector", 0, 0, (void*)(5), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, {0,0,0,0,0,0,0,0,0} }; static void cb_Name(Fl_Input* o, void* v) { //fl ▼ ---------------------- callback ~~-~~~-~=~~~=~-~~=-~-= ▼ fl// if (!current_node || !current_node->is_a(Type::Data)) return; Data_Node* nd = (Data_Node*)current_node; if (v == LOAD) { o->value( nd->name() ); the_panel->label("Inline Data Properties"); } else { const char *nn = nd->name(); if ( ( nn && (strcmp(nn, o->value()) != 0)) || (!nn && (strcmp("", o->value()) != 0)) ) { nd->name( o->value() ); Fluid.proj.set_modflag(1); redraw_browser(); } } //fl ▲ ----------=~=~-~--~=~~------------~~-=-~=~-=-~~-~=~--= ▲ fl// } Fl_Input *wp_data_filename=(Fl_Input *)0; static void cb_wp_data_filename(Fl_Input* o, void* v) { //fl ▼ ---------------------- callback ~-~=~~~~~~-=~~=~-==--- ▼ fl// if (!current_node || !current_node->is_a(Type::Data)) return; Data_Node* nd = (Data_Node*)current_node; update_current(o, v, [nd](){return nd->filename();}, [nd](std::string s){nd->filename(s);} ); //fl ▲ ----------~=-~--=--~------------~-~==--==-~=---==--~-~ ▲ fl// } static void cb_fileopen(Fl_Button*, void* v) { //fl ▼ ---------------------- callback ~--=-~~~=~~--~=-=~-=~- ▼ fl// if (v != LOAD) { Fluid.proj.enter_project_dir(); const char *fn = fl_file_chooser("Load Inline Data", nullptr, wp_data_filename->value(), 1); Fluid.proj.leave_project_dir(); if (fn) { if (strcmp(fn, wp_data_filename->value())) { Fluid.proj.set_modflag(1); wp_data_filename->value(fn); wp_data_filename->do_callback(); } } } //fl ▲ ----------=~~---~~=~~=----------~--~-~=~=-~=--~=-~~=-- ▲ fl// } static void cb_Comment(Fl_Text_Editor* o, void* v) { //fl ▼ ---------------------- callback ~--=---~~~-=-~=-=-~-=~ ▼ fl// if (!current_node || !current_node->is_a(Type::Data)) return; Data_Node* nd = (Data_Node*)current_node; if (v == LOAD) { const char *cmttext = nd->comment(); o->buffer()->text( cmttext ? cmttext : "" ); } else { char *c = o->buffer()->text(); const char *nn = nd->comment(); if ( ( nn && (strcmp(nn, c) != 0)) || (!nn && (strcmp("", c) != 0)) ) { nd->comment(c); Fluid.proj.set_modflag(1); redraw_browser(); } free(c); } //fl ▲ ----------=~--=-~-~-~=----------~~-=~=-=-~~=---~-~---= ▲ fl// } Fl_Tabs *comment_tabs=(Fl_Tabs *)0; static void cb_comment_tabs(Fl_Tabs* o, void* v) { //fl ▼ ---------------------- callback ---~~~~==~~=~~~~--~~~~ ▼ fl// if (current_node && current_node->is_a(Type::Comment)) propagate_load((Fl_Group *)o,v); //fl ▲ ----------=~--~=---~~=----------~--~=-~=---=~-~=~~=-~~ ▲ fl// } Fl_Group *comment_tabs_comment=(Fl_Group *)0; Fl_Text_Editor *comment_tabs_name=(Fl_Text_Editor *)0; static void cb_comment_tabs_name(Fl_Text_Editor* o, void* v) { //fl ▼ ---------------------- callback --~~-~-~~=--~---~~~~=- ▼ fl// if (!current_node || !current_node->is_a(Type::Comment)) return; Comment_Node* nd = (Comment_Node*)current_node; if (v == LOAD) { the_panel->label("Comment Properties"); const char *cmttext = nd->name(); o->buffer()->text( cmttext ? cmttext : "" ); } else { char *c = o->buffer()->text(); const char *nn = nd->name(); if ( ( nn && (strcmp(nn, c) != 0)) || (!nn && (strcmp("", c) != 0)) ) { nd->name(c); Fluid.proj.set_modflag(1); redraw_browser(); } free(c); } //fl ▲ ----------=~~=~~~==~=~----------~~-~-==~-=--~==~=-~--~ ▲ fl// } Fl_Menu_Button *comment_predefined_2=(Fl_Menu_Button *)0; static void cb_comment_predefined_2(Fl_Menu_Button* o, void* v) { //fl ▼ ---------------------- callback ~-~-=~=~=-=--=~==-~--- ▼ fl// if (!current_node || !current_node->is_a(Type::Comment)) return; static char itempath[256]; static int last_selected_item { 0 }; if (v == LOAD) { int i=0, n=0, version = 0; Fl_Preferences menu(Fl_Preferences::USER_L, "fltk.org", "fluid_comments_menu"); o->clear(); o->add("_Edit/Add current comment..."); o->add("_Edit/Remove last selection..."); menu.get("version", version, -1); if (version < 10400) load_comments_preset(menu); menu.get("n", n, 0); for (i=0;iadd(text); free(text); } } else { if (o->value()==1) { // add the current comment to the database const char *xname = fl_input( "Please enter a name to reference the current\ncomment in your database.\n\n" "Use forward slashes '/' to create submenus.", "My Comment"); if (xname) { char *name = fl_strdup(xname); for (char*s=name;*s;s++) if (*s==':') *s = ';'; int n; Fl_Preferences db(Fl_Preferences::USER_L, "fltk.org", "fluid_comments"); db.set(name, comment_tabs_name->buffer()->text()); Fl_Preferences menu(Fl_Preferences::USER_L, "fltk.org", "fluid_comments_menu"); menu.get("n", n, 0); menu.set(Fl_Preferences::Name(n), name); menu.set("n", ++n); o->add(name); free(name); } } else if (o->value()==2) { // remove the last selected comment from the database if (itempath[0]==0 || last_selected_item==0) { fl_message("Please select an entry from this menu first."); } else if (fl_choice("Are you sure that you want to delete the entry\n" "\"%s\"\nfrom the database?", "Cancel", "Delete", nullptr, itempath)) { Fl_Preferences db(Fl_Preferences::USER_L, "fltk.org", "fluid_comments"); db.deleteEntry(itempath); o->remove(last_selected_item); Fl_Preferences menu(Fl_Preferences::USER_L, "fltk.org", "fluid_comments_menu"); int i, n; for (i=4, n=0; isize(); i++) { const Fl_Menu_Item *mi = o->menu()+i; if (o->item_pathname(itempath, 255, mi)==0) { if (itempath[0]=='/') memmove(itempath, itempath+1, 255); if (itempath[0]) menu.set(Fl_Preferences::Name(n++), itempath); } } menu.set("n", n); } } else { // load the selected comment from the database if (o->item_pathname(itempath, 255)==0) { if (itempath[0]=='/') memmove(itempath, itempath+1, 255); Fl_Preferences db(Fl_Preferences::USER_L, "fltk.org", "fluid_comments"); char *text; db.get(itempath, text, "(no text found in data base)"); comment_tabs_name->buffer()->text(text); comment_tabs_name->do_callback(); free(text); last_selected_item = o->value(); } } } //fl ▲ ----------~=~~~-=~~~~-----------~-=~~--~=-~-~~=~--~==~ ▲ fl// } Fl_Button *comment_load_2=(Fl_Button *)0; static void cb_comment_load_2(Fl_Button*, void* v) { //fl ▼ ---------------------- callback -~~=-~~=--~~--~~=~---- ▼ fl// // load a comment from disk if (v != LOAD) { fl_file_chooser_ok_label("Load"); const char *fname = fl_file_chooser("Pick a comment", nullptr, nullptr); fl_file_chooser_ok_label(nullptr); if (fname) { if (comment_tabs_name->buffer()->loadfile(fname)) { fl_alert("Error loading file\n%s", fname); } comment_tabs_name->do_callback(); } } //fl ▲ ----------=~--=--=~=~=----------~~-~~----=--~~-~~~=~=- ▲ fl// } static void cb_output(Fl_Check_Button* o, void* v) { //fl ▼ ---------------------- callback ~-=~=-~~~~=-------~~=- ▼ fl// if (!current_node || !current_node->is_a(Type::Comment)) return; Comment_Node* nd = (Comment_Node*)current_node; if (v == LOAD) { o->value(nd->in_h()); } else { if (((int)nd->in_h()) != o->value()) { nd->in_h( o->value() ); Fluid.proj.set_modflag(1); } } //fl ▲ ----------=~~~~-~~~=-~----------~---~=~~=~--=--~-~=~=~ ▲ fl// } static void cb_output1(Fl_Check_Button* o, void* v) { //fl ▼ ---------------------- callback ---=~-~-=~=--~~~~-=~-= ▼ fl// if (!current_node || !current_node->is_a(Type::Comment)) return; Comment_Node* nd = (Comment_Node*)current_node; if (v == LOAD) { o->value(nd->in_c()); } else { if (((int)nd->in_c()) != o->value()) { nd->in_c( o->value() ); Fluid.proj.set_modflag(1); } } //fl ▲ ----------~=-==-~=--~=----------~~~~=~~~=~----~~--~=~= ▲ fl// } Fl_Tabs *class_tabs=(Fl_Tabs *)0; static void cb_class_tabs(Fl_Tabs* o, void* v) { //fl ▼ ---------------------- callback -~-----=-~-=~-~=-~---- ▼ fl// if (current_node && current_node->is_a(Type::Class)) propagate_load((Fl_Group *)o,v); //fl ▲ ----------=~----~=-==-----------~-~~~~=~~~-==~-=~=~~-= ▲ fl// } Fl_Group *class_tabs_main=(Fl_Group *)0; static void cb_18(Fl_Choice* o, void* v) { //fl ▼ ---------------------- callback ---=~~-~=~--=----=~--= ▼ fl// if (!current_node || !current_node->is_a(Type::Class)) return; Class_Node* nd = (Class_Node*)current_node; if (v == LOAD) { if (nd->is_in_class()) { o->value(nd->visibility()); o->activate(); } else { o->deactivate(); } } else { if (nd->is_in_class()) { if (nd->visibility() != o->value()) { nd->visibility(o->value()); Fluid.proj.set_modflag(1); redraw_browser(); } } } //fl ▲ ----------~==-~-~--~--------------=~-=--~-=~~--==--==~ ▲ fl// } Fl_Menu_Item menu_8[] = { {"private", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, {"public", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, {"protected", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, {0,0,0,0,0,0,0,0,0} }; static void cb_Attribute(Fl_Input* o, void* v) { //fl ▼ ---------------------- callback -~~==-~---~~~~~=~=--~~ ▼ fl// if (!current_node || !current_node->is_a(Type::Class)) return; Class_Node* nd = (Class_Node*)current_node; if (v == LOAD) { o->value( nd->prefix().c_str() ); } else { auto nn = nd->prefix(); if (nn != o->value()) { nd->prefix( o->value() ); Fluid.proj.set_modflag(1); } } //fl ▲ ----------=~=-=~~=-~~~------------~--~=~-~=~~=--~-~~~~ ▲ fl// } static void cb_Class(Fl_Input* o, void* v) { //fl ▼ ---------------------- callback ~~~-~-~-~-~==-~-~==~~= ▼ fl// if (!current_node || !current_node->is_a(Type::Class)) return; Class_Node* nd = (Class_Node*)current_node; if (v == LOAD) { the_panel->label("Class Properties"); o->value( nd->name() ); } else { const char *nn = nd->name(); char *nv = strdup( o->value() ); // There is an inconsistency in the project file reader, so this string // must not coantain anything but alphanumeric and underscore characters. char *s = (char*)nv; char *d = (char*)nv; while (*s) { if (isalnum((unsigned char)*s) || *s == '_') { *d++ = *s; } s++; } *d = 0; // The class name must not be empty either if (*nv == 0) { free((void*)nv); nv = strdup("MyClass"); } // The class name may have changed, so update the widget o->value( nv ); // Now copy the new name into the node if it changed if ( ( nn && (strcmp(nn, nv) != 0)) || (!nn && (strcmp("", nv) != 0)) ) { nd->name( nv ); Fluid.proj.set_modflag(1); redraw_browser(); } // Don't forget to clean up if (nv) { free((void*)nv); } } //fl ▲ ----------~=~-=-~~~=------------~-~~=~~-=-=-~--=-~=~~= ▲ fl// } static void cb_Base(Fl_Input* o, void* v) { //fl ▼ ---------------------- callback ~~=~=-=-~==~=~=-~==~=~ ▼ fl// if (!current_node || !current_node->is_a(Type::Class)) return; Class_Node* nd = (Class_Node*)current_node; if (v == LOAD) { o->value( nd->base_class().c_str() ); } else { auto nn = nd->base_class(); if (nn != o->value()) { nd->base_class( o->value() ); Fluid.proj.set_modflag(1); } } //fl ▲ ----------~=~~--=~~--~----------~~---~~--~~-=~~=~=~~-- ▲ fl// } static void cb_Comment1(Fl_Text_Editor* o, void* v) { //fl ▼ ---------------------- callback -~~=~=-==----=~~-~~-=- ▼ fl// if (!current_node || !current_node->is_a(Type::Class)) return; Class_Node* nd = (Class_Node*)current_node; if (v == LOAD) { const char *cmttext = nd->comment(); o->buffer()->text( cmttext ? cmttext : "" ); } else { char *c = o->buffer()->text(); const char *nn = nd->comment(); if ( ( nn && (strcmp(nn, c) != 0)) || (!nn && (strcmp("", c) != 0)) ) { nd->comment(c); Fluid.proj.set_modflag(1); redraw_browser(); } free(c); } //fl ▲ ----------=~-~-=-=-=~~-----------~=--~--~=-~~--~----~- ▲ fl// } Fl_Tabs *declblock_tabs=(Fl_Tabs *)0; static void cb_declblock_tabs(Fl_Tabs* o, void* v) { //fl ▼ ---------------------- callback ~~--=~~=~~~~-==-~=~~=~ ▼ fl// if (current_node && current_node->is_a(Type::DeclBlock)) propagate_load((Fl_Group *)o,v); //fl ▲ ----------=~=~~=-=~--=-------------~-~=~~=-=-~=~----=~ ▲ fl// } Fl_Group *declblock_tabs_main=(Fl_Group *)0; static void cb_Start(Fl_Input* o, void* v) { //fl ▼ ---------------------- callback ~-~=~-~=----~=~==~~-~~ ▼ fl// if (!current_node || !current_node->is_a(Type::DeclBlock)) return; DeclBlock_Node* nd = (DeclBlock_Node*)current_node; if (v == LOAD) { the_panel->label("Declaration Block Properties"); o->value( nd->name() ); } else { const char *nn = nd->name(); if ( ( nn && (strcmp(nn, o->value()) != 0)) || (!nn && (strcmp("", o->value()) != 0)) ) { nd->name( o->value() ); Fluid.proj.set_modflag(1); redraw_browser(); } } //fl ▲ ----------~==~-~=-~--=------------=-~~~=~----~=~=-=--- ▲ fl// } static void cb_End(Fl_Input* o, void* v) { //fl ▼ ---------------------- callback -~-~--~-----=-~~~~~=-~ ▼ fl// if (!current_node || !current_node->is_a(Type::DeclBlock)) return; DeclBlock_Node* nd = (DeclBlock_Node*)current_node; update_current(o, v, [nd](){return nd->end_code();}, [nd](std::string s){nd->end_code(s);} ); //fl ▲ ----------=~~~~~~=~-=-------------=~--~=~--=~~~=~~-~~= ▲ fl// } static void cb_implementations(Fl_Check_Button* o, void* v) { //fl ▼ ---------------------- callback ~-~=-~~=-==~=~--=-=~-= ▼ fl// if (!current_node || !current_node->is_a(Type::DeclBlock)) return; DeclBlock_Node* nd = (DeclBlock_Node*)current_node; if (v == LOAD) { int f = ((nd->write_map() & DeclBlock_Node::CODE_IN_SOURCE) != 0); o->value(f); } else { int f = ((nd->write_map() & DeclBlock_Node::CODE_IN_SOURCE) != 0); if (f != o->value()) { if (o->value()) nd->write_map( nd->write_map() | DeclBlock_Node::CODE_IN_SOURCE ); else nd->write_map( nd->write_map() & ~DeclBlock_Node::CODE_IN_SOURCE ); Fluid.proj.set_modflag(1); } } //fl ▲ ----------~==~=--=~-~=------------=-----=-=-=-~-~~-~=~ ▲ fl// } static void cb_static(Fl_Check_Button* o, void* v) { //fl ▼ ---------------------- callback ~-~=-~~=~~-~=~~=~==-=~ ▼ fl// if (!current_node || !current_node->is_a(Type::DeclBlock)) return; DeclBlock_Node* nd = (DeclBlock_Node*)current_node; if (v == LOAD) { int f = ((nd->write_map() & DeclBlock_Node::STATIC_IN_SOURCE) != 0); o->value(f); } else { int f = ((nd->write_map() & DeclBlock_Node::STATIC_IN_SOURCE) != 0); if (f != o->value()) { if (o->value()) nd->write_map( nd->write_map() | DeclBlock_Node::STATIC_IN_SOURCE ); else nd->write_map( nd->write_map() & ~DeclBlock_Node::STATIC_IN_SOURCE ); Fluid.proj.set_modflag(1); } } //fl ▲ ----------~=---~~~-~=~--------------~=-~~-~=~=-~~~=~=~ ▲ fl// } static void cb_forward(Fl_Check_Button* o, void* v) { //fl ▼ ---------------------- callback ~--=~=-==~~--=--~~~-~~ ▼ fl// if (!current_node || !current_node->is_a(Type::DeclBlock)) return; DeclBlock_Node* nd = (DeclBlock_Node*)current_node; if (v == LOAD) { int f = ((nd->write_map() & DeclBlock_Node::CODE_IN_HEADER) != 0); o->value(f); } else { int f = ((nd->write_map() & DeclBlock_Node::CODE_IN_HEADER) != 0); if (f != o->value()) { if (o->value()) nd->write_map( nd->write_map() | DeclBlock_Node::CODE_IN_HEADER ); else nd->write_map( nd->write_map() & ~DeclBlock_Node::CODE_IN_HEADER ); Fluid.proj.set_modflag(1); } } //fl ▲ ----------~=-~~~~---~=----------~~=-=~--=-~--~--=~--~~ ▲ fl// } static void cb_preprecessor(Fl_Check_Button* o, void* v) { //fl ▼ ---------------------- callback ~~~~-=~=~~~=~==~-~-=~= ▼ fl// if (!current_node || !current_node->is_a(Type::DeclBlock)) return; DeclBlock_Node* nd = (DeclBlock_Node*)current_node; if (v == LOAD) { int f = ((nd->write_map() & DeclBlock_Node::STATIC_IN_HEADER) != 0); o->value(f); } else { int f = ((nd->write_map() & DeclBlock_Node::STATIC_IN_HEADER) != 0); if (f != o->value()) { if (o->value()) nd->write_map( nd->write_map() | DeclBlock_Node::STATIC_IN_HEADER ); else nd->write_map( nd->write_map() & ~DeclBlock_Node::STATIC_IN_HEADER ); Fluid.proj.set_modflag(1); } } //fl ▲ ----------=~~=~~-=~~~~----------~-=-~--~-~~-=~~=~==~-- ▲ fl// } static void cb_Comment2(Fl_Text_Editor* o, void* v) { //fl ▼ ---------------------- callback ~-=~=~-=~-~=-==~~~=-~- ▼ fl// if (!current_node || !current_node->is_a(Type::DeclBlock)) return; DeclBlock_Node* nd = (DeclBlock_Node*)current_node; if (v == LOAD) { const char *cmttext = nd->comment(); o->buffer()->text( cmttext ? cmttext : "" ); } else { char *c = o->buffer()->text(); const char *nn = nd->comment(); if ( ( nn && (strcmp(nn, c) != 0)) || (!nn && (strcmp("", c) != 0)) ) { nd->comment(c); Fluid.proj.set_modflag(1); redraw_browser(); } free(c); } //fl ▲ ----------=~-~=~-~~=~~-----------~-=-=-=-~---~=-~-=~-~ ▲ fl// } Fl_Tabs *decl_tabs=(Fl_Tabs *)0; static void cb_decl_tabs(Fl_Tabs* o, void* v) { //fl ▼ ---------------------- callback --~--~=~~~-~--=~--=~=~ ▼ fl// if (current_node && current_node->is_a(Type::Decl)) propagate_load((Fl_Group *)o,v); //fl ▲ ----------=~~~-==-=~=~----------~~-~=~~~~==~--~--=--=~ ▲ fl// } Fl_Group *decl_tabs_main=(Fl_Group *)0; static void cb_19(Fl_Choice* o, void* v) { //fl ▼ ---------------------- callback -~~==~--~~~-=-~~-==--= ▼ fl// if (!current_node || !current_node->is_a(Type::Decl)) return; Decl_Node* nd = (Decl_Node*)current_node; if (v == LOAD) { if (!nd->is_in_class()) { o->value(nd->output_file()); o->show(); } else { o->hide(); } } else { if (!nd->is_in_class()) { if (nd->output_file() != o->value()) { nd->output_file(o->value()); Fluid.proj.set_modflag(1); redraw_browser(); } } } //fl ▲ ----------=~--~~-=~~-=----------~--=--~~~~-=~-~=~----~ ▲ fl// } Fl_Menu_Item menu_9[] = { {"in source file only", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, {"in header file only", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, {"\"static\" in source file", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, {"in source and \"extern\" in header", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, {0,0,0,0,0,0,0,0,0} }; static void cb_1a(Fl_Choice* o, void* v) { //fl ▼ ---------------------- callback -~-~-=~~~~=~~=--~-~~~= ▼ fl// if (!current_node || !current_node->is_a(Type::Decl)) return; Decl_Node* nd = (Decl_Node*)current_node; if (v == LOAD) { if (nd->is_in_class()) { o->value(nd->visibility()); o->show(); } else { o->hide(); } } else { if (nd->is_in_class()) { if (nd->visibility() != o->value()) { nd->visibility(o->value()); Fluid.proj.set_modflag(1); redraw_browser(); } } } //fl ▲ ----------~==~-==-=-~=----------~-=~~--=~~~~~~~--=~~~~ ▲ fl// } Fl_Menu_Item menu_a[] = { {"private", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, {"public", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, {"protected", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, {0,0,0,0,0,0,0,0,0} }; static void cb_1b(Fl_Tile* o, void* v) { //fl ▼ ---------------------- callback ~~~=~=--=~=-=-~~--=--- ▼ fl// propagate_load(o, v); //fl ▲ ----------=~-=~--~~=~=-----------~~----=--~=~~-~-----= ▲ fl// } static void cb_Declaration(fld::widget::Code_Editor* o, void* v) { //fl ▼ ---------------------- callback ---==--~~-=-=-~=----=- ▼ fl// if (!current_node || !current_node->is_a(Type::Decl)) return; Decl_Node* nd = (Decl_Node*)current_node; if (v == LOAD) { the_panel->label("Declaration Properties"); const char *cmttext = nd->name(); o->buffer()->text( cmttext ? cmttext : "" ); } else { char *c = o->buffer()->text(); const char *nn = nd->name(); if ( ( nn && (strcmp(nn, c) != 0)) || (!nn && (strcmp("", c) != 0)) ) { nd->name(c); Fluid.proj.set_modflag(1); redraw_browser(); } free(c); } //fl ▲ ----------=~~~-=-~-~~=-------------~~=-~~-~-=-~~~~-~~~ ▲ fl// } static void cb_Comment3(Fl_Text_Editor* o, void* v) { //fl ▼ ---------------------- callback -~-~~=~--=~--==-=----- ▼ fl// if (!current_node || !current_node->is_a(Type::Decl)) return; Decl_Node* nd = (Decl_Node*)current_node; if (v == LOAD) { const char *cmttext = nd->comment(); o->buffer()->text( cmttext ? cmttext : "" ); } else { char *c = o->buffer()->text(); const char *nn = nd->comment(); if ( ( nn && (strcmp(nn, c) != 0)) || (!nn && (strcmp("", c) != 0)) ) { nd->comment(c); Fluid.proj.set_modflag(1); redraw_browser(); } free(c); } //fl ▲ ----------~=-----~-==~-------------==~-=~--~=~-~--~-~- ▲ fl// } Fl_Tabs *codeblock_tabs=(Fl_Tabs *)0; static void cb_codeblock_tabs(Fl_Tabs* o, void* v) { //fl ▼ ---------------------- callback ~-~=~~~--~~=-~~-~---~~ ▼ fl// if (current_node && current_node->is_a(Type::CodeBlock)) propagate_load((Fl_Group *)o,v); //fl ▲ ----------=~--~~~~~-~-----------~-=-=--~-=-=---=---~=- ▲ fl// } Fl_Group *codeblock_tabs_main=(Fl_Group *)0; static void cb_Start1(Fl_Input* o, void* v) { //fl ▼ ---------------------- callback -~-~=-=~~=~=~-~==-~-=- ▼ fl// if (!current_node || !current_node->is_a(Type::CodeBlock)) return; CodeBlock_Node* nd = (CodeBlock_Node*)current_node; if (v == LOAD) { o->value( nd->name() ); the_panel->label("Code Block Properties"); } else { const char *nn = nd->name(); if ( ( nn && (strcmp(nn, o->value()) != 0)) || (!nn && (strcmp("", o->value()) != 0)) ) { nd->name( o->value() ); Fluid.proj.set_modflag(1); redraw_browser(); } } //fl ▲ ----------~=~-~--==~-~------------~-~=~--~~==-~~~~~==- ▲ fl// } static void cb_End1(Fl_Input* o, void* v) { //fl ▼ ---------------------- callback ~~-~~=~=-~=-~-=~~~=-=~ ▼ fl// if (!current_node || !current_node->is_a(Type::CodeBlock)) return; CodeBlock_Node* nd = (CodeBlock_Node*)current_node; update_current(o, v, [nd](){return nd->end_code();}, [nd](std::string s){nd->end_code(s);} ); //fl ▲ ----------~=----=-~-=~----------~~~~-~-=~--=-=~~=---~~ ▲ fl// } static void cb_Comment4(Fl_Text_Editor* o, void* v) { //fl ▼ ---------------------- callback ~~~=~=~=-~--=--==~~-=- ▼ fl// if (!current_node || !current_node->is_a(Type::CodeBlock)) return; CodeBlock_Node* nd = (CodeBlock_Node*)current_node; if (v == LOAD) { const char *cmttext = nd->comment(); o->buffer()->text( cmttext ? cmttext : "" ); } else { char *c = o->buffer()->text(); const char *nn = nd->comment(); if ( ( nn && (strcmp(nn, c) != 0)) || (!nn && (strcmp("", c) != 0)) ) { nd->comment(c); Fluid.proj.set_modflag(1); redraw_browser(); } free(c); } //fl ▲ ----------~=-~-~=~~=-------------~--=~=----~-=-=-~~~=~ ▲ fl// } Fl_Tabs *code_tabs=(Fl_Tabs *)0; static void cb_code_tabs(Fl_Tabs* o, void* v) { //fl ▼ ---------------------- callback ---~-=-~-==-~=-=~~=-~- ▼ fl// if (current_node && current_node->is_a(Type::Code)) propagate_load((Fl_Group *)o,v); //fl ▲ ----------=~=~-~=~-~=~----------~~=~~~-=--~-=~--=~---= ▲ fl// } Fl_Group *code_tabs_main=(Fl_Group *)0; static void cb_1c(fld::widget::Code_Editor* o, void* v) { //fl ▼ ---------------------- callback ~-=--~=~~==~=~=~-~--=~ ▼ fl// if (!current_node || !current_node->is_a(Type::Code)) return; Code_Node* nd = (Code_Node*)current_node; if (v == LOAD) { the_panel->label("Code Editor"); const char *cmttext = nd->name(); o->buffer()->text( cmttext ? cmttext : "" ); o->insert_position(nd->cursor_position()); o->scroll(nd->code_input_scroll_row(), nd->code_input_scroll_col()); } else { char *c = o->buffer()->text(); const char *nn = nd->name(); if ( ( nn && (strcmp(nn, c) != 0)) || (!nn && (strcmp("", c) != 0)) ) { nd->name(c); Fluid.proj.set_modflag(1); redraw_browser(); } nd->save_editor_state(o->insert_position(), o->scroll_row(), o->scroll_col()); free(c); } //fl ▲ ----------=~=~=~~=--=~------------=-----~=~~-~-=-~~=~= ▲ fl// } Fl_Tabs *func_tabs=(Fl_Tabs *)0; static void cb_func_tabs(Fl_Tabs* o, void* v) { //fl ▼ ---------------------- callback ~~=~~==~~-~~-~=~=-=~-- ▼ fl// if (current_node && current_node->is_a(Type::Function)) propagate_load((Fl_Group *)o,v); //fl ▲ ----------~=~--=~=--~~------------~-~=-~=~=~=~~~~~=--= ▲ fl// } Fl_Group *func_tabs_main=(Fl_Group *)0; static void cb_1d(Fl_Choice* o, void* v) { //fl ▼ ---------------------- callback ----~-~=--~-=~~~-~~==- ▼ fl// if (!current_node || !current_node->is_a(Type::Function)) return; Function_Node* nd = (Function_Node*)current_node; if (v == LOAD) { if (!nd->is_in_class()) { o->value(nd->visibility()); o->show(); } else { o->hide(); } } else { if (!nd->is_in_class()) { if (nd->visibility() != o->value()) { nd->visibility(o->value()); Fluid.proj.set_modflag(1); redraw_browser(); } } } //fl ▲ ----------=~-----=--=------------~-~=~~=~=~=~~~~-~-~-= ▲ fl// } Fl_Menu_Item menu_b[] = { {"static", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, {"global", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, {"local", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, {0,0,0,0,0,0,0,0,0} }; static void cb_1e(Fl_Choice* o, void* v) { //fl ▼ ---------------------- callback ~-=~-=~---=~--~==-=~=- ▼ fl// if (!current_node || !current_node->is_a(Type::Function)) return; Function_Node* nd = (Function_Node*)current_node; if (v == LOAD) { if (nd->is_in_class()) { o->value(nd->visibility()); o->show(); } else { o->hide(); } } else { if (nd->is_in_class()) { if (nd->visibility() != o->value()) { nd->visibility(o->value()); Fluid.proj.set_modflag(1); redraw_browser(); } } } //fl ▲ ----------~=~-=~~=-==~----------~~-~-~~~-~=~-~~=~~=~-~ ▲ fl// } Fl_Menu_Item menu_c[] = { {"private", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, {"public", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, {"protected", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, {0,0,0,0,0,0,0,0,0} }; static void cb_declare(Fl_Check_Button* o, void* v) { //fl ▼ ---------------------- callback ~-~-=-~-=~-=~=~-~=-=-~ ▼ fl// if (!current_node || !current_node->is_a(Type::Function)) return; Function_Node* nd = (Function_Node*)current_node; if (v == LOAD) { o->value(nd->declare_c()); } else { if (nd->declare_c() != o->value()) { nd->declare_c( o->value() ); Fluid.proj.set_modflag(1); } } //fl ▲ ----------~=-==~~=--=-------------~-=~--=--~~-~~~-=--~ ▲ fl// } static void cb_1f(Fl_Tile* o, void* v) { //fl ▼ ---------------------- callback -~-=~~---~=~-==~~=-=-- ▼ fl// propagate_load(o, v); //fl ▲ ----------=~~=~~-~---~-----------~~----=--~=~~-~-----= ▲ fl// } static void cb_Function(fld::widget::Code_Editor* o, void* v) { //fl ▼ ---------------------- callback --=~=----~=~~-=~-==--~ ▼ fl// if (!current_node || !current_node->is_a(Type::Function)) return; Function_Node* nd = (Function_Node*)current_node; if (v == LOAD) { the_panel->label("Function Properties"); const char *cmttext = nd->name(); o->buffer()->text( cmttext ? cmttext : "" ); } else { char *c = o->buffer()->text(); const char *nn = nd->name(); if ( ( nn && (strcmp(nn, c) != 0)) || (!nn && (strcmp("", c) != 0)) ) { nd->name(c); Fluid.proj.set_modflag(1); redraw_browser(); } free(c); } //fl ▲ ----------=~=~=-=--~=~-----------~=-=~~~~~-=~~~=-=-~-- ▲ fl// } static void cb_Return(fld::widget::Code_Editor* o, void* v) { //fl ▼ ---------------------- callback -~=--~-~=~=~~~---=~~=~ ▼ fl// if (!current_node || !current_node->is_a(Type::Function)) return; Function_Node* nd = (Function_Node*)current_node; update_current(o, v, [nd](){return nd->return_type();}, [nd](std::string s){nd->return_type(s);} ); //fl ▲ ----------~=~~=~~==~~-----------~~=~=-~=~-~-~-=~-=~--~ ▲ fl// } static void cb_Comment5(Fl_Text_Editor* o, void* v) { //fl ▼ ---------------------- callback ----=~--=~-==-~=-~=~=~ ▼ fl// if (!current_node || !current_node->is_a(Type::Function)) return; Function_Node* nd = (Function_Node*)current_node; if (v == LOAD) { const char *cmttext = nd->comment(); o->buffer()->text( cmttext ? cmttext : "" ); } else { char *c = o->buffer()->text(); const char *nn = nd->comment(); if ( ( nn && (strcmp(nn, c) != 0)) || (!nn && (strcmp("", c) != 0)) ) { nd->comment(c); Fluid.proj.set_modflag(1); redraw_browser(); } free(c); } //fl ▲ ----------=~~~-==-~~=~----------~-~=~=-=-~-~=-~-~=~-=- ▲ fl// } Fl_Tabs *widget_tabs_repo=(Fl_Tabs *)0; Fl_Button *wLiveMode=(Fl_Button *)0; Fl_Button *overlay_button=(Fl_Button *)0; /** Create a panel that can be used with all known widgets */ Fl_Double_Window* make_widget_panel() { Fl_Double_Window* w; { // Use a Double Window to avoid flickering. Fl_Double_Window* o = new Fl_Double_Window(420, 400); w = o; (void)w; o->labelsize(11); o->align(Fl_Align(FL_ALIGN_CLIP|FL_ALIGN_INSIDE)); o->hotspot(o); { tabs_wizard = new Fl_Wizard(10, 10, 400, 350); tabs_wizard->box(FL_NO_BOX); tabs_wizard->labelsize(11); tabs_wizard->callback((Fl_Callback*)cb_tabs_wizard); { Fl_Tabs* o = widget_tabs = new Fl_Tabs(10, 10, 400, 350); widget_tabs->selection_color((Fl_Color)12); widget_tabs->labelsize(11); widget_tabs->labelcolor(FL_BACKGROUND2_COLOR); widget_tabs->callback((Fl_Callback*)cb_widget_tabs); widget_tabs->when(FL_WHEN_NEVER); { wp_gui_tab = new Fl_Group(10, 30, 400, 330, "GUI"); wp_gui_tab->labelsize(11); wp_gui_tab->callback((Fl_Callback*)propagate_load); wp_gui_tab->when(FL_WHEN_NEVER); { Fl_Group* o = new Fl_Group(95, 40, 309, 20, "Label:"); o->labelfont(1); o->labelsize(11); o->callback((Fl_Callback*)propagate_load); o->align(Fl_Align(FL_ALIGN_LEFT)); { wp_gui_label = new Fl_Input(95, 40, 190, 20); wp_gui_label->tooltip("The label text for the widget.\nUse Ctrl-J for newlines."); wp_gui_label->labelfont(1); wp_gui_label->labelsize(11); wp_gui_label->textsize(11); wp_gui_label->callback((Fl_Callback*)label_cb); wp_gui_label->when(FL_WHEN_RELEASE | FL_WHEN_ENTER_KEY_CHANGED); Fl_Group::current()->resizable(wp_gui_label); } // Fl_Input* wp_gui_label { Fl_Choice* o = new Fl_Choice(285, 40, 119, 20); o->tooltip("The label style for the widget."); o->box(FL_THIN_UP_BOX); o->down_box(FL_BORDER_BOX); o->labelfont(1); o->labelsize(11); o->textsize(11); o->callback((Fl_Callback*)labeltype_cb); o->menu(labeltypemenu); } // Fl_Choice* o o->end(); } // Fl_Group* o { Fl_Group* o = new Fl_Group(95, 65, 309, 20, "Image:"); o->labelfont(1); o->labelsize(11); o->callback((Fl_Callback*)propagate_load); o->align(Fl_Align(FL_ALIGN_LEFT)); { widget_image_input = new Fl_Input(95, 65, 200, 20); widget_image_input->tooltip("The active image for the widget."); widget_image_input->labelfont(1); widget_image_input->labelsize(11); widget_image_input->textsize(11); widget_image_input->callback((Fl_Callback*)cb_widget_image_input); Fl_Group::current()->resizable(widget_image_input); } // Fl_Input* widget_image_input { Fl_Button* o = new Fl_Button(295, 65, 89, 20, "Browse..."); o->tooltip("Click to choose the active image."); o->labelsize(11); o->callback((Fl_Callback*)cb_Browse); o->align(Fl_Align(256)); } // Fl_Button* o { Fl_Button* o = new Fl_Button(384, 65, 20, 20, "..."); o->tooltip("more image options"); o->callback((Fl_Callback*)cb_); } // Fl_Button* o o->end(); } // Fl_Group* o { Fl_Group* o = new Fl_Group(95, 90, 309, 20, "Inactive:"); o->labelfont(1); o->labelsize(11); o->callback((Fl_Callback*)propagate_load); o->align(Fl_Align(FL_ALIGN_LEFT)); { widget_deimage_input = new Fl_Input(95, 90, 200, 20); widget_deimage_input->tooltip("The inactive image for the widget."); widget_deimage_input->labelfont(1); widget_deimage_input->labelsize(11); widget_deimage_input->textsize(11); widget_deimage_input->callback((Fl_Callback*)cb_widget_deimage_input); Fl_Group::current()->resizable(widget_deimage_input); } // Fl_Input* widget_deimage_input { Fl_Button* o = new Fl_Button(295, 90, 89, 20, "Browse..."); o->tooltip("Click to choose the inactive image."); o->labelsize(11); o->callback((Fl_Callback*)cb_Browse1); } // Fl_Button* o o->end(); } // Fl_Group* o { wp_gui_alignment = new Fl_Group(95, 115, 312, 20, "Alignment:"); wp_gui_alignment->labelfont(1); wp_gui_alignment->labelsize(11); wp_gui_alignment->callback((Fl_Callback*)propagate_load); wp_gui_alignment->align(Fl_Align(FL_ALIGN_LEFT)); { Fl_Button* o = new Fl_Button(95, 115, 30, 20, "Clip"); o->tooltip("Clip the label to the inside of the widget."); o->type(1); o->selection_color(FL_INACTIVE_COLOR); o->labelsize(11); o->callback((Fl_Callback*)align_cb, (void*)((fl_intptr_t)FL_ALIGN_CLIP)); o->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); } // Fl_Button* o { Fl_Button* o = new Fl_Button(130, 115, 38, 20, "Wrap"); o->tooltip("Wrap the label text."); o->type(1); o->selection_color(FL_INACTIVE_COLOR); o->labelsize(11); o->callback((Fl_Callback*)align_cb, (void*)((fl_intptr_t)FL_ALIGN_WRAP)); } // Fl_Button* o { Fl_Button* o = new Fl_Button(278, 115, 20, 20, "@-1<-"); o->tooltip("Left-align the label."); o->type(1); o->selection_color(FL_INACTIVE_COLOR); o->labelsize(11); o->labelcolor(FL_INACTIVE_COLOR); o->callback((Fl_Callback*)align_cb, (void*)((fl_intptr_t)FL_ALIGN_LEFT)); o->hide(); } // Fl_Button* o { Fl_Button* o = new Fl_Button(303, 115, 20, 20, "@-1->"); o->tooltip("Right-align the label."); o->type(1); o->selection_color(FL_INACTIVE_COLOR); o->labelsize(11); o->labelcolor(FL_INACTIVE_COLOR); o->callback((Fl_Callback*)align_cb, (void*)((fl_intptr_t)FL_ALIGN_RIGHT)); o->hide(); } // Fl_Button* o { Fl_Button* o = new Fl_Button(328, 115, 20, 20, "@-18"); o->tooltip("Top-align the label."); o->type(1); o->selection_color(FL_INACTIVE_COLOR); o->labelsize(11); o->labelcolor(FL_INACTIVE_COLOR); o->callback((Fl_Callback*)align_cb, (void*)((fl_intptr_t)FL_ALIGN_TOP)); o->hide(); } // Fl_Button* o { Fl_Button* o = new Fl_Button(353, 115, 20, 20, "@-12"); o->tooltip("Bottom-align the label."); o->type(1); o->selection_color(FL_INACTIVE_COLOR); o->labelsize(11); o->labelcolor(FL_INACTIVE_COLOR); o->callback((Fl_Callback*)align_cb, (void*)((fl_intptr_t)FL_ALIGN_BOTTOM)); o->hide(); } // Fl_Button* o { Fl_Choice* o = new Fl_Choice(172, 115, 116, 20); o->down_box(FL_BORDER_BOX); o->labelsize(11); o->textsize(11); o->callback((Fl_Callback*)align_text_image_cb); o->menu(menu_); } // Fl_Choice* o { Fl_Choice* o = new Fl_Choice(293, 115, 86, 20); o->down_box(FL_BORDER_BOX); o->labelsize(11); o->textsize(11); o->callback((Fl_Callback*)align_position_cb); o->menu(menu_1); } // Fl_Choice* o { Fl_Button* o = new Fl_Button(384, 115, 20, 20, "@-3square"); o->tooltip("Show the label inside the widget."); o->type(1); o->selection_color(FL_INACTIVE_COLOR); o->labelsize(11); o->labelcolor(FL_INACTIVE_COLOR); o->callback((Fl_Callback*)align_cb, (void*)((fl_intptr_t)FL_ALIGN_INSIDE)); } // Fl_Button* o { Fl_Box* o = new Fl_Box(406, 115, 1, 20); o->labelsize(11); Fl_Group::current()->resizable(o); } // Fl_Box* o wp_gui_alignment->end(); } // Fl_Group* wp_gui_alignment { Fl_Group* o = new Fl_Group(95, 150, 314, 20, "Position:"); o->labelfont(1); o->labelsize(11); o->callback((Fl_Callback*)position_group_cb); o->align(Fl_Align(FL_ALIGN_LEFT)); { widget_x_input = new fld::widget::Formula_Input(95, 150, 55, 20, "X:"); widget_x_input->tooltip("The X position of the widget as a number or formula.\nFormulas can be simple " "math, including the variables\nx, px, sx, cx, and i"); widget_x_input->box(FL_DOWN_BOX); widget_x_input->color(FL_BACKGROUND2_COLOR); widget_x_input->selection_color(FL_SELECTION_COLOR); widget_x_input->labeltype(FL_NORMAL_LABEL); widget_x_input->labelfont(0); widget_x_input->labelsize(11); widget_x_input->labelcolor(FL_FOREGROUND_COLOR); widget_x_input->textsize(11); widget_x_input->callback((Fl_Callback*)cb_widget_x_input); widget_x_input->align(Fl_Align(FL_ALIGN_TOP_LEFT)); widget_x_input->when(FL_WHEN_RELEASE); } // fld::widget::Formula_Input* widget_x_input { widget_y_input = new fld::widget::Formula_Input(155, 150, 55, 20, "Y:"); widget_y_input->tooltip("The Y position of the widget as a number or formula.\nFormulas can be simple " "math, including the variables\ny, py, sy, cy, and i"); widget_y_input->box(FL_DOWN_BOX); widget_y_input->color(FL_BACKGROUND2_COLOR); widget_y_input->selection_color(FL_SELECTION_COLOR); widget_y_input->labeltype(FL_NORMAL_LABEL); widget_y_input->labelfont(0); widget_y_input->labelsize(11); widget_y_input->labelcolor(FL_FOREGROUND_COLOR); widget_y_input->textsize(11); widget_y_input->callback((Fl_Callback*)cb_widget_y_input); widget_y_input->align(Fl_Align(FL_ALIGN_TOP_LEFT)); widget_y_input->when(FL_WHEN_RELEASE); } // fld::widget::Formula_Input* widget_y_input { widget_w_input = new fld::widget::Formula_Input(215, 150, 55, 20, "Width:"); widget_w_input->tooltip("The width of the widget as a number or formula.\nFormulas can be simple math," " including the variables\nw, pw, sw, cw, and i"); widget_w_input->box(FL_DOWN_BOX); widget_w_input->color(FL_BACKGROUND2_COLOR); widget_w_input->selection_color(FL_SELECTION_COLOR); widget_w_input->labeltype(FL_NORMAL_LABEL); widget_w_input->labelfont(0); widget_w_input->labelsize(11); widget_w_input->labelcolor(FL_FOREGROUND_COLOR); widget_w_input->textsize(11); widget_w_input->callback((Fl_Callback*)cb_widget_w_input); widget_w_input->align(Fl_Align(FL_ALIGN_TOP_LEFT)); widget_w_input->when(FL_WHEN_RELEASE); } // fld::widget::Formula_Input* widget_w_input { widget_h_input = new fld::widget::Formula_Input(275, 150, 55, 20, "Height:"); widget_h_input->tooltip("The height of the widget as a number or formula.\nFormulas can be simple math" ", including the variables\nh, ph, sh, ch, and i"); widget_h_input->box(FL_DOWN_BOX); widget_h_input->color(FL_BACKGROUND2_COLOR); widget_h_input->selection_color(FL_SELECTION_COLOR); widget_h_input->labeltype(FL_NORMAL_LABEL); widget_h_input->labelfont(0); widget_h_input->labelsize(11); widget_h_input->labelcolor(FL_FOREGROUND_COLOR); widget_h_input->textsize(11); widget_h_input->callback((Fl_Callback*)cb_widget_h_input); widget_h_input->align(Fl_Align(FL_ALIGN_TOP_LEFT)); widget_h_input->when(FL_WHEN_RELEASE); } // fld::widget::Formula_Input* widget_h_input { Fl_Choice* o = new Fl_Choice(335, 150, 64, 20, "Children:"); o->tooltip("When instantiating a widget class, the children can either be fixed in their " "original position, automatically be repositioned, or both repsositioned and re" "sized to fit the container."); o->down_box(FL_BORDER_BOX); o->labelsize(11); o->textsize(11); o->callback((Fl_Callback*)cb_Children); o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); o->menu(menu_Children); } // Fl_Choice* o { Fl_Box* o = new Fl_Box(399, 150, 1, 20); o->hide(); Fl_Group::current()->resizable(o); } // Fl_Box* o o->end(); } // Fl_Group* o { // This group is only visible if the parent is an Fl_Flex widget wp_gui_flexp = new Fl_Group(95, 150, 314, 20, "Flex Parent:"); wp_gui_flexp->labelfont(1); wp_gui_flexp->labelsize(11); wp_gui_flexp->callback((Fl_Callback*)cb_wp_gui_flexp); wp_gui_flexp->align(Fl_Align(FL_ALIGN_LEFT)); wp_gui_flexp->hide(); { widget_flex_size = new Fl_Value_Input(95, 150, 55, 20, "Size:"); widget_flex_size->tooltip("Fixed Width or Height for a horizontal or vertical Fl_Flex Parent."); widget_flex_size->labelsize(11); widget_flex_size->textsize(11); widget_flex_size->callback((Fl_Callback*)cb_widget_flex_size); widget_flex_size->align(Fl_Align(FL_ALIGN_TOP_LEFT)); } // Fl_Value_Input* widget_flex_size { widget_flex_fixed = new Fl_Check_Button(155, 150, 55, 20, "fixed"); widget_flex_fixed->tooltip("If checked, the size of the widget stays fixed."); widget_flex_fixed->down_box(FL_DOWN_BOX); widget_flex_fixed->labelsize(11); widget_flex_fixed->callback((Fl_Callback*)cb_widget_flex_fixed); } // Fl_Check_Button* widget_flex_fixed { Fl_Box* o = new Fl_Box(398, 150, 1, 20); Fl_Group::current()->resizable(o); } // Fl_Box* o wp_gui_flexp->end(); } // Fl_Group* wp_gui_flexp { wp_gui_values = new Fl_Group(95, 185, 300, 20, "Values:"); wp_gui_values->labelfont(1); wp_gui_values->labelsize(11); wp_gui_values->callback((Fl_Callback*)cb_wp_gui_values); wp_gui_values->align(Fl_Align(FL_ALIGN_LEFT)); { Fl_Value_Input* o = new Fl_Value_Input(95, 185, 55, 20, "Size:"); o->tooltip("The size of the slider."); o->labelsize(11); o->textsize(11); o->callback((Fl_Callback*)cb_Size); o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); } // Fl_Value_Input* o { Fl_Value_Input* o = new Fl_Value_Input(155, 185, 55, 20, "Minimum:"); o->tooltip("The minimum value of the widget."); o->labelsize(11); o->textsize(11); o->callback((Fl_Callback*)cb_Minimum); o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); } // Fl_Value_Input* o { Fl_Value_Input* o = new Fl_Value_Input(215, 185, 55, 20, "Maximum:"); o->tooltip("The maximum value of the widget."); o->labelsize(11); o->value(1); o->textsize(11); o->callback((Fl_Callback*)cb_Maximum); o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); } // Fl_Value_Input* o { Fl_Value_Input* o = new Fl_Value_Input(275, 185, 55, 20, "Step:"); o->tooltip("The resolution of the widget value."); o->labelsize(11); o->textsize(11); o->callback((Fl_Callback*)cb_Step); o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); } // Fl_Value_Input* o { Fl_Value_Input* o = new Fl_Value_Input(335, 185, 55, 20, "Value:"); o->tooltip("The current widget value."); o->labelsize(11); o->textsize(11); o->callback((Fl_Callback*)cb_Value); o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); } // Fl_Value_Input* o { Fl_Box* o = new Fl_Box(395, 185, 0, 20); Fl_Group::current()->resizable(o); } // Fl_Box* o wp_gui_values->end(); } // Fl_Group* wp_gui_values { // This group is only visible for Fl_Flex widgets wp_gui_margins = new Fl_Group(95, 185, 300, 20, "Margins:"); wp_gui_margins->labelfont(1); wp_gui_margins->labelsize(11); wp_gui_margins->callback((Fl_Callback*)cb_wp_gui_margins); wp_gui_margins->align(Fl_Align(FL_ALIGN_LEFT)); wp_gui_margins->hide(); { Fl_Value_Input* o = new Fl_Value_Input(95, 185, 55, 20, "Left:"); o->tooltip("Left margin in group."); o->labelsize(11); o->textsize(11); o->callback((Fl_Callback*)cb_Left); o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); } // Fl_Value_Input* o { Fl_Value_Input* o = new Fl_Value_Input(155, 185, 55, 20, "Top:"); o->tooltip("Top margin in group."); o->labelsize(11); o->textsize(11); o->callback((Fl_Callback*)cb_Top); o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); } // Fl_Value_Input* o { Fl_Value_Input* o = new Fl_Value_Input(215, 185, 55, 20, "Right:"); o->tooltip("Right margin in group."); o->labelsize(11); o->textsize(11); o->callback((Fl_Callback*)cb_Right); o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); } // Fl_Value_Input* o { Fl_Value_Input* o = new Fl_Value_Input(275, 185, 55, 20, "Bottom:"); o->tooltip("Bottom margin in group."); o->labelsize(11); o->textsize(11); o->callback((Fl_Callback*)cb_Bottom); o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); } // Fl_Value_Input* o { Fl_Value_Input* o = new Fl_Value_Input(335, 185, 55, 20, "Gap:"); o->tooltip("Gap between children."); o->labelsize(11); o->textsize(11); o->callback((Fl_Callback*)cb_Gap); o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); } // Fl_Value_Input* o { Fl_Box* o = new Fl_Box(395, 185, 0, 20); Fl_Group::current()->resizable(o); } // Fl_Box* o wp_gui_margins->end(); } // Fl_Group* wp_gui_margins { wp_gui_sizerange = new Fl_Group(95, 185, 300, 20, "Size Range:"); wp_gui_sizerange->labelfont(1); wp_gui_sizerange->labelsize(11); wp_gui_sizerange->callback((Fl_Callback*)cb_wp_gui_sizerange); wp_gui_sizerange->align(Fl_Align(FL_ALIGN_LEFT)); wp_gui_sizerange->hide(); { Fl_Value_Input* o = new Fl_Value_Input(95, 185, 55, 20, "Minimum Size:"); o->tooltip("The size of the slider."); o->labelsize(11); o->maximum(2048); o->step(1); o->textsize(11); o->callback((Fl_Callback*)cb_Minimum1); o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); } // Fl_Value_Input* o { Fl_Value_Input* o = new Fl_Value_Input(155, 185, 55, 20); o->tooltip("The minimum value of the widget."); o->labelsize(11); o->maximum(2048); o->step(1); o->textsize(11); o->callback((Fl_Callback*)cb_1); o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); } // Fl_Value_Input* o { Fl_Button* o = new Fl_Button(215, 185, 25, 20, "set"); o->labelsize(11); o->callback((Fl_Callback*)cb_set); } // Fl_Button* o { Fl_Value_Input* o = new Fl_Value_Input(245, 185, 55, 20, "Maximum Size:"); o->tooltip("The maximum value of the widget."); o->labelsize(11); o->maximum(2048); o->step(1); o->textsize(11); o->callback((Fl_Callback*)cb_Maximum1); o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); } // Fl_Value_Input* o { Fl_Value_Input* o = new Fl_Value_Input(305, 185, 55, 20); o->tooltip("The resolution of the widget value."); o->labelsize(11); o->maximum(2048); o->step(1); o->textsize(11); o->callback((Fl_Callback*)cb_2); o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); } // Fl_Value_Input* o { Fl_Button* o = new Fl_Button(365, 185, 25, 20, "set"); o->labelsize(11); o->callback((Fl_Callback*)cb_set1); } // Fl_Button* o { Fl_Box* o = new Fl_Box(395, 185, 0, 20); Fl_Group::current()->resizable(o); } // Fl_Box* o wp_gui_sizerange->end(); } // Fl_Group* wp_gui_sizerange { Fl_Group* o = new Fl_Group(95, 210, 310, 20, "Shortcut:"); o->labelfont(1); o->labelsize(11); o->callback((Fl_Callback*)propagate_load); o->align(Fl_Align(FL_ALIGN_LEFT)); { // This is a special button that grabs keystrokes directly wp_gui_shortcut = new Fl_Shortcut_Button(95, 210, 310, 20); wp_gui_shortcut->tooltip("The shortcut key for the widget.\nUse \'Backspace\' key to clear."); wp_gui_shortcut->box(FL_DOWN_BOX); wp_gui_shortcut->color(FL_BACKGROUND2_COLOR); wp_gui_shortcut->selection_color((Fl_Color)12); wp_gui_shortcut->labeltype(FL_NORMAL_LABEL); wp_gui_shortcut->labelfont(0); wp_gui_shortcut->labelsize(11); wp_gui_shortcut->labelcolor(FL_FOREGROUND_COLOR); wp_gui_shortcut->callback((Fl_Callback*)cb_wp_gui_shortcut); wp_gui_shortcut->align(Fl_Align(FL_ALIGN_CENTER)); wp_gui_shortcut->when(FL_WHEN_CHANGED); } // Fl_Shortcut_Button* wp_gui_shortcut o->end(); } // Fl_Group* o { wp_gui_xclass = new Fl_Group(95, 235, 300, 20, "X Class:"); wp_gui_xclass->labelfont(1); wp_gui_xclass->labelsize(11); wp_gui_xclass->callback((Fl_Callback*)propagate_load); wp_gui_xclass->align(Fl_Align(FL_ALIGN_LEFT)); { Fl_Input* o = new Fl_Input(95, 235, 95, 20, ":"); o->tooltip("The X resource class."); o->labelfont(1); o->labelsize(11); o->textsize(11); o->callback((Fl_Callback*)cb_3); Fl_Group::current()->resizable(o); } // Fl_Input* o { Fl_Light_Button* o = new Fl_Light_Button(195, 235, 60, 20, "Border"); o->tooltip("Add a border around the window."); o->selection_color((Fl_Color)1); o->labelsize(11); o->callback((Fl_Callback*)cb_Border); } // Fl_Light_Button* o { Fl_Light_Button* o = new Fl_Light_Button(260, 235, 55, 20, "Modal"); o->tooltip("Make the window modal."); o->selection_color((Fl_Color)1); o->labelsize(11); o->callback((Fl_Callback*)cb_Modal); } // Fl_Light_Button* o { Fl_Light_Button* o = new Fl_Light_Button(320, 235, 75, 20, "Nonmodal"); o->tooltip("Make the window non-modal."); o->selection_color((Fl_Color)1); o->labelsize(11); o->callback((Fl_Callback*)cb_Nonmodal); o->align(Fl_Align(132|FL_ALIGN_INSIDE)); } // Fl_Light_Button* o wp_gui_xclass->end(); } // Fl_Group* wp_gui_xclass { wp_gui_attributes = new Fl_Group(95, 260, 305, 20, "Attributes:"); wp_gui_attributes->labelfont(1); wp_gui_attributes->labelsize(11); wp_gui_attributes->callback((Fl_Callback*)propagate_load); wp_gui_attributes->align(Fl_Align(FL_ALIGN_LEFT)); { Fl_Light_Button* o = new Fl_Light_Button(95, 260, 60, 20, "Visible"); o->tooltip("Show the widget."); o->selection_color((Fl_Color)1); o->labelsize(11); o->callback((Fl_Callback*)cb_Visible); } // Fl_Light_Button* o { Fl_Light_Button* o = new Fl_Light_Button(160, 260, 60, 20, "Active"); o->tooltip("Activate the widget."); o->selection_color((Fl_Color)1); o->labelsize(11); o->callback((Fl_Callback*)cb_Active); } // Fl_Light_Button* o { Fl_Light_Button* o = new Fl_Light_Button(225, 260, 75, 20, "Resizable"); o->tooltip("Make the widget resizable."); o->selection_color((Fl_Color)1); o->labelsize(11); o->callback((Fl_Callback*)cb_Resizable); o->when(FL_WHEN_CHANGED); } // Fl_Light_Button* o { Fl_Light_Button* o = new Fl_Light_Button(225, 260, 75, 20, "Headline"); o->tooltip("Make a menu item the headline of a menu\nunselectable, but not grayed out"); o->selection_color((Fl_Color)1); o->labelsize(11); o->callback((Fl_Callback*)cb_Headline); o->when(FL_WHEN_CHANGED); o->hide(); } // Fl_Light_Button* o { Fl_Light_Button* o = new Fl_Light_Button(305, 260, 70, 20, "Hotspot"); o->tooltip("Center the window under this widget."); o->selection_color((Fl_Color)1); o->labelsize(11); o->callback((Fl_Callback*)cb_Hotspot); o->when(FL_WHEN_CHANGED); } // Fl_Light_Button* o { Fl_Box* o = new Fl_Box(395, 260, 0, 20); o->labelsize(11); Fl_Group::current()->resizable(o); } // Fl_Box* o wp_gui_attributes->end(); } // Fl_Group* wp_gui_attributes { wp_gui_tooltip = new Fl_Input(95, 285, 310, 20, "Tooltip:"); wp_gui_tooltip->tooltip("The tooltip text for the widget.\nUse Ctrl-J for newlines."); wp_gui_tooltip->labelfont(1); wp_gui_tooltip->labelsize(11); wp_gui_tooltip->textsize(11); wp_gui_tooltip->callback((Fl_Callback*)cb_wp_gui_tooltip); } // Fl_Input* wp_gui_tooltip { Fl_Box* o = new Fl_Box(95, 305, 300, 5); o->hide(); Fl_Group::current()->resizable(o); } // Fl_Box* o wp_gui_tab->end(); Fl_Group::current()->resizable(wp_gui_tab); } // Fl_Group* wp_gui_tab { wp_style_tab = new Fl_Group(10, 30, 400, 330, "Style"); wp_style_tab->labelsize(11); wp_style_tab->callback((Fl_Callback*)propagate_load); wp_style_tab->when(FL_WHEN_NEVER); wp_style_tab->hide(); { wp_style_label = new Fl_Group(99, 40, 305, 20, "Label Font:"); wp_style_label->labelfont(1); wp_style_label->labelsize(11); wp_style_label->callback((Fl_Callback*)propagate_load); wp_style_label->align(Fl_Align(FL_ALIGN_LEFT)); { Fl_Choice* o = new Fl_Choice(99, 40, 148, 20); o->tooltip("The style of the label text."); o->box(FL_THIN_UP_BOX); o->down_box(FL_BORDER_BOX); o->labelfont(1); o->labelsize(11); o->textsize(11); o->callback((Fl_Callback*)cb_4); Fl_Group::current()->resizable(o); o->menu(fontmenu); } // Fl_Choice* o { Fl_Value_Input* o = new Fl_Value_Input(247, 40, 49, 20); o->tooltip("The size of the label text."); o->labelsize(11); o->maximum(100); o->step(1); o->value(14); o->textsize(11); o->callback((Fl_Callback*)cb_5); } // Fl_Value_Input* o { w_labelcolor = new Fl_Button(296, 40, 90, 20, "Label Color"); w_labelcolor->tooltip("The color of the label text."); w_labelcolor->labelsize(11); w_labelcolor->callback((Fl_Callback*)cb_w_labelcolor); } // Fl_Button* w_labelcolor { Fl_Menu_Button* o = new Fl_Menu_Button(386, 40, 18, 20); o->callback((Fl_Callback*)cb_6); o->menu(colormenu); } // Fl_Menu_Button* o wp_style_label->end(); } // Fl_Group* wp_style_label { wp_style_box = new Fl_Group(99, 65, 305, 20, "Box:"); wp_style_box->labelfont(1); wp_style_box->labelsize(11); wp_style_box->callback((Fl_Callback*)propagate_load); wp_style_box->align(Fl_Align(FL_ALIGN_LEFT)); { Fl_Choice* o = new Fl_Choice(100, 65, 196, 20); o->tooltip("The \"up\" box of the widget."); o->box(FL_THIN_UP_BOX); o->down_box(FL_BORDER_BOX); o->labelfont(1); o->labelsize(11); o->textsize(11); o->callback((Fl_Callback*)cb_7); Fl_Group::current()->resizable(o); o->menu(boxmenu); } // Fl_Choice* o { w_color = new Fl_Button(296, 65, 90, 20, "Color"); w_color->tooltip("The background color of the widget."); w_color->labelsize(11); w_color->callback((Fl_Callback*)cb_w_color); } // Fl_Button* w_color { Fl_Menu_Button* o = new Fl_Menu_Button(386, 65, 18, 20); o->callback((Fl_Callback*)cb_8); o->menu(colormenu); } // Fl_Menu_Button* o wp_style_box->end(); } // Fl_Group* wp_style_box { wp_style_downbox = new Fl_Group(99, 90, 305, 20, "Down Box:"); wp_style_downbox->labelfont(1); wp_style_downbox->labelsize(11); wp_style_downbox->callback((Fl_Callback*)propagate_load); wp_style_downbox->align(Fl_Align(FL_ALIGN_LEFT)); { Fl_Choice* o = new Fl_Choice(99, 90, 197, 20); o->tooltip("The \"down\" box of the widget."); o->box(FL_THIN_UP_BOX); o->down_box(FL_BORDER_BOX); o->labelfont(1); o->labelsize(11); o->textsize(11); o->callback((Fl_Callback*)cb_9); Fl_Group::current()->resizable(o); o->menu(boxmenu); } // Fl_Choice* o { w_selectcolor = new Fl_Button(296, 90, 90, 20, "Select Color"); w_selectcolor->tooltip("The selection color of the widget."); w_selectcolor->labelsize(11); w_selectcolor->callback((Fl_Callback*)cb_w_selectcolor); } // Fl_Button* w_selectcolor { Fl_Menu_Button* o = new Fl_Menu_Button(386, 90, 18, 20); o->callback((Fl_Callback*)cb_a); o->menu(colormenu); } // Fl_Menu_Button* o wp_style_downbox->end(); } // Fl_Group* wp_style_downbox { wp_style_text = new Fl_Group(99, 115, 305, 20, "Text Font:"); wp_style_text->labelfont(1); wp_style_text->labelsize(11); wp_style_text->callback((Fl_Callback*)propagate_load); wp_style_text->align(Fl_Align(FL_ALIGN_LEFT)); { Fl_Choice* o = new Fl_Choice(99, 115, 148, 20); o->tooltip("The value text style."); o->box(FL_DOWN_BOX); o->down_box(FL_BORDER_BOX); o->labelfont(1); o->labelsize(11); o->textsize(11); o->callback((Fl_Callback*)cb_b); Fl_Group::current()->resizable(o); o->menu(fontmenu); } // Fl_Choice* o { Fl_Value_Input* o = new Fl_Value_Input(247, 115, 49, 20); o->tooltip("The value text size."); o->labelsize(11); o->maximum(100); o->step(1); o->value(14); o->textsize(11); o->callback((Fl_Callback*)cb_c); } // Fl_Value_Input* o { w_textcolor = new Fl_Button(296, 115, 90, 20, "Text Color"); w_textcolor->tooltip("The value text color."); w_textcolor->labelsize(11); w_textcolor->callback((Fl_Callback*)cb_w_textcolor); } // Fl_Button* w_textcolor { Fl_Menu_Button* o = new Fl_Menu_Button(386, 115, 18, 20); o->callback((Fl_Callback*)cb_d); o->menu(colormenu); } // Fl_Menu_Button* o wp_style_text->end(); } // Fl_Group* wp_style_text { Fl_Group* o = new Fl_Group(99, 150, 242, 20, "Label Margin:"); o->labelfont(1); o->labelsize(11); o->callback((Fl_Callback*)propagate_load); o->align(Fl_Align(FL_ALIGN_LEFT)); { Fl_Value_Input* o = new Fl_Value_Input(99, 150, 55, 20, "Horizontal:"); o->tooltip("Spacing between label and the horizontally aligned side of the widget."); o->labelsize(11); o->minimum(-127); o->maximum(128); o->step(1); o->textsize(11); o->callback((Fl_Callback*)cb_Horizontal); o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); } // Fl_Value_Input* o { Fl_Value_Input* o = new Fl_Value_Input(159, 150, 55, 20, "Vertical:"); o->tooltip("Spacing between label and the vertically aligned side of the widget."); o->labelsize(11); o->minimum(-127); o->maximum(127); o->step(1); o->textsize(11); o->callback((Fl_Callback*)cb_Vertical); o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); } // Fl_Value_Input* o { Fl_Value_Input* o = new Fl_Value_Input(219, 150, 55, 20, "Image Gap:"); o->tooltip("Gap between label image and text in pixels"); o->labelsize(11); o->maximum(255); o->step(1); o->textsize(11); o->callback((Fl_Callback*)cb_Image); o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); } // Fl_Value_Input* o { Fl_Box* o = new Fl_Box(281, 150, 60, 20); o->labelsize(11); o->hide(); Fl_Group::current()->resizable(o); } // Fl_Box* o o->end(); } // Fl_Group* o { Fl_Light_Button* o = new Fl_Light_Button(99, 175, 90, 20, "Compact"); o->tooltip("use compact box types for closely set buttons"); o->selection_color((Fl_Color)1); o->labelsize(11); o->callback((Fl_Callback*)cb_Compact); } // Fl_Light_Button* o { Fl_Box* o = new Fl_Box(195, 205, 40, 40); o->labelsize(11); Fl_Group::current()->resizable(o); } // Fl_Box* o wp_style_tab->end(); } // Fl_Group* wp_style_tab { wp_cpp_tab = new Fl_Group(10, 30, 400, 330, "C++"); wp_cpp_tab->labelsize(11); wp_cpp_tab->callback((Fl_Callback*)propagate_load); wp_cpp_tab->when(FL_WHEN_NEVER); wp_cpp_tab->hide(); { wp_cpp_class = new Fl_Group(95, 40, 310, 20, "Class:"); wp_cpp_class->labelfont(1); wp_cpp_class->labelsize(11); wp_cpp_class->callback((Fl_Callback*)propagate_load); wp_cpp_class->align(Fl_Align(FL_ALIGN_LEFT)); { Fl_Input* o = new Fl_Input(95, 40, 172, 20); o->tooltip("The widget subclass."); o->labelfont(1); o->labelsize(11); o->textfont(4); o->textsize(11); o->callback((Fl_Callback*)cb_e, (void*)(4)); Fl_Group::current()->resizable(o); } // Fl_Input* o { Fl_Choice* o = new Fl_Choice(267, 40, 138, 20); o->tooltip("The widget subtype."); o->box(FL_THIN_UP_BOX); o->down_box(FL_BORDER_BOX); o->labelsize(11); o->textsize(11); o->callback((Fl_Callback*)cb_f); } // Fl_Choice* o wp_cpp_class->end(); } // Fl_Group* wp_cpp_class { wp_cpp_name = new Fl_Group(95, 65, 310, 20, "Name:"); wp_cpp_name->labelfont(1); wp_cpp_name->labelsize(11); wp_cpp_name->callback((Fl_Callback*)propagate_load); wp_cpp_name->align(Fl_Align(FL_ALIGN_LEFT)); { Fl_Input* o = new Fl_Input(95, 65, 235, 20); o->tooltip("The name of the widget."); o->labelfont(1); o->labelsize(11); o->textsize(11); o->callback((Fl_Callback*)cb_10); Fl_Group::current()->resizable(o); } // Fl_Input* o { Fl_Choice* o = new Fl_Choice(330, 65, 75, 20); o->tooltip("Change member access attribute."); o->down_box(FL_BORDER_BOX); o->labelsize(11); o->textsize(11); o->callback((Fl_Callback*)cb_11); o->when(FL_WHEN_CHANGED); o->menu(menu_2); } // Fl_Choice* o { Fl_Choice* o = new Fl_Choice(330, 65, 75, 20); o->tooltip("Change widget accessibility."); o->down_box(FL_BORDER_BOX); o->labelsize(11); o->textsize(11); o->callback((Fl_Callback*)name_public_cb); o->when(FL_WHEN_CHANGED); o->hide(); o->menu(menu_3); } // Fl_Choice* o wp_cpp_name->end(); } // Fl_Group* wp_cpp_name { v_input[0] = new Fl_Input(95, 90, 310, 20, "Extra Code:"); v_input[0]->tooltip("Extra initialization code for the widget."); v_input[0]->labelfont(1); v_input[0]->labelsize(11); v_input[0]->textfont(4); v_input[0]->textsize(11); v_input[0]->callback((Fl_Callback*)cb_v_input, (void*)(0)); } // Fl_Input* v_input[0] { v_input[1] = new Fl_Input(95, 110, 310, 20); v_input[1]->tooltip("Extra initialization code for the widget."); v_input[1]->labelsize(11); v_input[1]->textfont(4); v_input[1]->textsize(11); v_input[1]->callback((Fl_Callback*)cb_v_input1, (void*)(1)); } // Fl_Input* v_input[1] { v_input[2] = new Fl_Input(95, 130, 310, 20); v_input[2]->tooltip("Extra initialization code for the widget."); v_input[2]->labelsize(11); v_input[2]->textfont(4); v_input[2]->textsize(11); v_input[2]->callback((Fl_Callback*)cb_v_input2, (void*)(2)); } // Fl_Input* v_input[2] { v_input[3] = new Fl_Input(95, 150, 310, 20); v_input[3]->tooltip("Extra initialization code for the widget."); v_input[3]->labelsize(11); v_input[3]->textfont(4); v_input[3]->textsize(11); v_input[3]->callback((Fl_Callback*)cb_v_input3, (void*)(3)); } // Fl_Input* v_input[3] { Fl_Tile* o = new Fl_Tile(95, 175, 310, 130); o->callback((Fl_Callback*)cb_12); { Fl_Group* o = new Fl_Group(95, 175, 310, 48); o->box(FL_FLAT_BOX); { wComment = new Fl_Text_Editor(95, 175, 310, 45, "Comment:"); wComment->tooltip("Write a comment that will appear in the source code and in the widget tree ov" "erview."); wComment->box(FL_DOWN_BOX); wComment->labelfont(1); wComment->labelsize(11); wComment->textfont(6); wComment->textsize(11); wComment->textcolor((Fl_Color)59); wComment->callback((Fl_Callback*)cb_wComment); wComment->align(Fl_Align(FL_ALIGN_LEFT)); wComment->when(FL_WHEN_CHANGED); Fl_Group::current()->resizable(wComment); wComment->buffer(new Fl_Text_Buffer()); } // Fl_Text_Editor* wComment o->end(); } // Fl_Group* o { Fl_Group* o = new Fl_Group(95, 223, 310, 82); o->box(FL_FLAT_BOX); { wCallback = new fld::widget::Code_Editor(95, 225, 310, 80, "Callback:"); wCallback->tooltip("The callback function or code for the widget. Use the variable name \'o\' to " "access the Widget pointer and \'v\' to access the user value."); wCallback->box(FL_DOWN_BOX); wCallback->color(FL_BACKGROUND2_COLOR); wCallback->selection_color(FL_SELECTION_COLOR); wCallback->labeltype(FL_NORMAL_LABEL); wCallback->labelfont(1); wCallback->labelsize(11); wCallback->labelcolor(FL_FOREGROUND_COLOR); wCallback->textfont(4); wCallback->textsize(11); wCallback->callback((Fl_Callback*)cb_wCallback); wCallback->align(Fl_Align(FL_ALIGN_LEFT)); wCallback->when(FL_WHEN_RELEASE); Fl_Group::current()->resizable(wCallback); } // fld::widget::Code_Editor* wCallback o->end(); } // Fl_Group* o o->end(); Fl_Group::current()->resizable(o); } // Fl_Tile* o { wp_cpp_callback = new Fl_Group(95, 310, 310, 20, "User Data:"); wp_cpp_callback->labelfont(1); wp_cpp_callback->labelsize(11); wp_cpp_callback->callback((Fl_Callback*)propagate_load); wp_cpp_callback->align(Fl_Align(FL_ALIGN_LEFT)); { Fl_Input* o = new Fl_Input(95, 310, 158, 20); o->tooltip("The user data to pass into the callback code."); o->labelfont(1); o->labelsize(11); o->textfont(4); o->textsize(11); o->callback((Fl_Callback*)cb_13); Fl_Group::current()->resizable(o); } // Fl_Input* o { Fl_Menu_Button* o = new Fl_Menu_Button(260, 310, 145, 20, "When"); o->tooltip("When to call the callback function."); o->box(FL_THIN_UP_BOX); o->down_box(FL_BORDER_BOX); o->labelfont(1); o->labelsize(11); o->textsize(11); o->callback((Fl_Callback*)cb_When); o->when(FL_WHEN_CHANGED); o->menu(whenmenu); } // Fl_Menu_Button* o wp_cpp_callback->end(); } // Fl_Group* wp_cpp_callback { Fl_Group* o = new Fl_Group(95, 332, 310, 26, "Type:"); o->labelfont(1); o->labelsize(11); o->callback((Fl_Callback*)propagate_load); o->align(Fl_Align(FL_ALIGN_LEFT)); { Fl_Input_Choice* o = new Fl_Input_Choice(95, 335, 158, 20); o->tooltip("The type of the user data."); o->labelfont(1); o->labelsize(11); o->textfont(4); o->textsize(11); o->callback((Fl_Callback*)cb_14); Fl_Group::current()->resizable(o); o->menu(menu_4); } // Fl_Input_Choice* o { w_when_box = new Fl_Box(260, 332, 145, 26, "FL_WHEN_NEVER"); w_when_box->box(FL_FLAT_BOX); w_when_box->selection_color((Fl_Color)1); w_when_box->labelsize(8); w_when_box->align(Fl_Align(193|FL_ALIGN_INSIDE)); } // Fl_Box* w_when_box o->end(); } // Fl_Group* o wp_cpp_tab->end(); } // Fl_Group* wp_cpp_tab { widget_tab_grid = new Grid_Tab(10, 30, 400, 330, "Grid"); widget_tab_grid->box(FL_NO_BOX); widget_tab_grid->color(FL_BACKGROUND_COLOR); widget_tab_grid->selection_color(FL_BACKGROUND_COLOR); widget_tab_grid->labeltype(FL_NORMAL_LABEL); widget_tab_grid->labelfont(0); widget_tab_grid->labelsize(11); widget_tab_grid->labelcolor(FL_FOREGROUND_COLOR); widget_tab_grid->callback((Fl_Callback*)cb_widget_tab_grid); widget_tab_grid->align(Fl_Align(FL_ALIGN_TOP)); widget_tab_grid->when(FL_WHEN_RELEASE); widget_tab_grid->hide(); widget_tab_grid->end(); } // Grid_Tab* widget_tab_grid { widget_tab_grid_child = new Grid_Child_Tab(10, 30, 400, 330, "Grid Child"); widget_tab_grid_child->box(FL_NO_BOX); widget_tab_grid_child->color(FL_BACKGROUND_COLOR); widget_tab_grid_child->selection_color(FL_BACKGROUND_COLOR); widget_tab_grid_child->labeltype(FL_NORMAL_LABEL); widget_tab_grid_child->labelfont(0); widget_tab_grid_child->labelsize(11); widget_tab_grid_child->labelcolor(FL_FOREGROUND_COLOR); widget_tab_grid_child->callback((Fl_Callback*)cb_widget_tab_grid_child); widget_tab_grid_child->align(Fl_Align(FL_ALIGN_TOP)); widget_tab_grid_child->when(FL_WHEN_RELEASE); widget_tab_grid_child->hide(); widget_tab_grid_child->end(); } // Grid_Child_Tab* widget_tab_grid_child o->show(); widget_tabs->end(); } // Fl_Tabs* widget_tabs { data_tabs = new Fl_Tabs(10, 10, 400, 350); data_tabs->selection_color((Fl_Color)12); data_tabs->labelsize(11); data_tabs->labelcolor(FL_WHITE); data_tabs->callback((Fl_Callback*)cb_data_tabs); data_tabs->hide(); { data_tabs_data = new Fl_Group(10, 30, 400, 330, "Inline Data"); data_tabs_data->labelsize(11); data_tabs_data->callback((Fl_Callback*)propagate_load); { Fl_Group* o = new Fl_Group(95, 49, 310, 21, "Visibility:"); o->labelfont(1); o->labelsize(11); o->callback((Fl_Callback*)propagate_load); o->align(Fl_Align(FL_ALIGN_LEFT)); { Fl_Choice* o = new Fl_Choice(95, 50, 210, 20); o->down_box(FL_BORDER_BOX); o->labelsize(11); o->textsize(11); o->callback((Fl_Callback*)cb_15); o->menu(menu_5); } // Fl_Choice* o { Fl_Choice* o = new Fl_Choice(95, 50, 75, 20); o->down_box(FL_BORDER_BOX); o->labelsize(11); o->textsize(11); o->callback((Fl_Callback*)cb_16); o->menu(menu_6); } // Fl_Choice* o { Fl_Box* o = new Fl_Box(363, 49, 42, 20); Fl_Group::current()->resizable(o); } // Fl_Box* o o->end(); } // Fl_Group* o { Fl_Group* o = new Fl_Group(95, 75, 310, 20, "Output: "); o->labelfont(1); o->labelsize(11); o->callback((Fl_Callback*)propagate_load); o->align(Fl_Align(FL_ALIGN_LEFT)); { Fl_Choice* o = new Fl_Choice(95, 75, 210, 20); o->tooltip("text mode generates a \"const char*\" and a trailing NUL, compressed mode use" "s zlib to generate a binary block"); o->down_box(FL_BORDER_BOX); o->labelsize(11); o->textsize(11); o->callback((Fl_Callback*)cb_17); o->menu(menu_7); } // Fl_Choice* o { Fl_Box* o = new Fl_Box(363, 75, 42, 20); Fl_Group::current()->resizable(o); } // Fl_Box* o o->end(); } // Fl_Group* o { Fl_Input* o = new Fl_Input(95, 100, 310, 20, "Name:"); o->tooltip("Inline Data variables are declared \"const unsigned char []\" in binary mode " "and \"const char*\" in text mode."); o->labelfont(1); o->labelsize(11); o->textfont(4); o->textsize(11); o->callback((Fl_Callback*)cb_Name); o->align(Fl_Align(132)); } // Fl_Input* o { wp_data_filename = new Fl_Input(95, 125, 270, 20, "Filename:"); wp_data_filename->tooltip("name and path of file that will be inlined"); wp_data_filename->labelfont(1); wp_data_filename->labelsize(11); wp_data_filename->textfont(4); wp_data_filename->textsize(11); wp_data_filename->callback((Fl_Callback*)cb_wp_data_filename); wp_data_filename->align(Fl_Align(132)); Fl_Group::current()->resizable(wp_data_filename); } // Fl_Input* wp_data_filename { Fl_Button* o = new Fl_Button(365, 125, 40, 20, "@fileopen"); o->labelcolor((Fl_Color)134); o->callback((Fl_Callback*)cb_fileopen); } // Fl_Button* o { Fl_Text_Editor* o = new Fl_Text_Editor(95, 150, 310, 105, "Comment:"); o->box(FL_DOWN_BOX); o->labelfont(1); o->labelsize(11); o->textfont(4); o->textsize(11); o->callback((Fl_Callback*)cb_Comment); o->align(Fl_Align(FL_ALIGN_LEFT)); o->buffer(new Fl_Text_Buffer()); o->add_key_binding(FL_Tab, 0, use_tab_navigation); } // Fl_Text_Editor* o data_tabs_data->end(); Fl_Group::current()->resizable(data_tabs_data); } // Fl_Group* data_tabs_data data_tabs->end(); } // Fl_Tabs* data_tabs { comment_tabs = new Fl_Tabs(10, 10, 400, 350); comment_tabs->selection_color((Fl_Color)12); comment_tabs->labelsize(11); comment_tabs->labelcolor(FL_WHITE); comment_tabs->callback((Fl_Callback*)cb_comment_tabs); comment_tabs->hide(); { comment_tabs_comment = new Fl_Group(10, 30, 400, 330, "Comment"); comment_tabs_comment->labelsize(11); comment_tabs_comment->callback((Fl_Callback*)propagate_load); { Fl_Text_Editor* o = comment_tabs_name = new Fl_Text_Editor(95, 45, 310, 235, "Comment:"); comment_tabs_name->box(FL_DOWN_BOX); comment_tabs_name->labelfont(1); comment_tabs_name->labelsize(11); comment_tabs_name->textfont(4); comment_tabs_name->textsize(11); comment_tabs_name->textcolor((Fl_Color)58); comment_tabs_name->callback((Fl_Callback*)cb_comment_tabs_name); comment_tabs_name->align(Fl_Align(FL_ALIGN_LEFT)); Fl_Group::current()->resizable(comment_tabs_name); o->when(FL_WHEN_ENTER_KEY_CHANGED|FL_WHEN_RELEASE); o->buffer(new Fl_Text_Buffer()); } // Fl_Text_Editor* comment_tabs_name { Fl_Group* o = new Fl_Group(95, 285, 310, 65); o->callback((Fl_Callback*)propagate_load); { comment_predefined_2 = new Fl_Menu_Button(95, 285, 90, 20, "Predefined"); comment_predefined_2->labelsize(11); comment_predefined_2->textsize(11); comment_predefined_2->callback((Fl_Callback*)cb_comment_predefined_2); } // Fl_Menu_Button* comment_predefined_2 { comment_load_2 = new Fl_Button(190, 285, 90, 20, "Import..."); comment_load_2->labelsize(11); comment_load_2->callback((Fl_Callback*)cb_comment_load_2); } // Fl_Button* comment_load_2 { Fl_Check_Button* o = new Fl_Check_Button(95, 310, 120, 20, "output to header file"); o->tooltip("write the comment into the header (.h) file"); o->down_box(FL_DOWN_BOX); o->labelsize(11); o->callback((Fl_Callback*)cb_output); o->when(FL_WHEN_CHANGED); } // Fl_Check_Button* o { Fl_Check_Button* o = new Fl_Check_Button(95, 330, 120, 20, "output to source file"); o->tooltip("write the comment into the source (.cxx) file"); o->down_box(FL_DOWN_BOX); o->labelsize(11); o->callback((Fl_Callback*)cb_output1); o->when(FL_WHEN_CHANGED); } // Fl_Check_Button* o { Fl_Box* o = new Fl_Box(404, 285, 1, 65); o->labelsize(11); Fl_Group::current()->resizable(o); } // Fl_Box* o o->end(); } // Fl_Group* o comment_tabs_comment->end(); Fl_Group::current()->resizable(comment_tabs_comment); } // Fl_Group* comment_tabs_comment comment_tabs->end(); } // Fl_Tabs* comment_tabs { class_tabs = new Fl_Tabs(10, 10, 400, 350); class_tabs->selection_color((Fl_Color)12); class_tabs->labelsize(11); class_tabs->labelcolor(FL_WHITE); class_tabs->callback((Fl_Callback*)cb_class_tabs); class_tabs->hide(); { class_tabs_main = new Fl_Group(10, 30, 400, 330, "Class"); class_tabs_main->labelsize(11); class_tabs_main->callback((Fl_Callback*)propagate_load); { /* This elemnt is hidden because we don't support a class inside a class at this point */ Fl_Group* o = new Fl_Group(95, 50, 310, 21, "Visibility:"); o->labelfont(1); o->labelsize(11); o->callback((Fl_Callback*)propagate_load); o->align(Fl_Align(FL_ALIGN_LEFT)); o->hide(); { Fl_Choice* o = new Fl_Choice(95, 50, 75, 20); o->tooltip("visibility for a class inside a class"); o->down_box(FL_BORDER_BOX); o->labelsize(11); o->textsize(11); o->callback((Fl_Callback*)cb_18); o->menu(menu_8); } // Fl_Choice* o { Fl_Box* o = new Fl_Box(363, 50, 42, 20); Fl_Group::current()->resizable(o); } // Fl_Box* o o->end(); } // Fl_Group* o { Fl_Input* o = new Fl_Input(95, 50, 305, 20, "Attribute:"); o->tooltip("class attribute or `alignas()`"); o->labelfont(1); o->labelsize(11); o->textfont(4); o->textsize(11); o->callback((Fl_Callback*)cb_Attribute); } // Fl_Input* o { Fl_Input* o = new Fl_Input(95, 75, 305, 20, "Class Name:"); o->tooltip("class name, must be a single C++ keyword"); o->labelfont(1); o->labelsize(11); o->textfont(4); o->textsize(11); o->callback((Fl_Callback*)cb_Class); } // Fl_Input* o { Fl_Input* o = new Fl_Input(95, 100, 305, 20, "Base Class:"); o->tooltip("visibility and name of base class or classes\ne.g. `public Fl_Widget`"); o->labelfont(1); o->labelsize(11); o->textfont(4); o->textsize(11); o->callback((Fl_Callback*)cb_Base); } // Fl_Input* o { Fl_Text_Editor* o = new Fl_Text_Editor(95, 125, 305, 110, "Comment:"); o->box(FL_DOWN_BOX); o->labelfont(1); o->labelsize(11); o->textfont(4); o->textsize(11); o->callback((Fl_Callback*)cb_Comment1); o->align(Fl_Align(FL_ALIGN_LEFT)); Fl_Group::current()->resizable(o); o->buffer(new Fl_Text_Buffer()); o->add_key_binding(FL_Tab, 0, use_tab_navigation); } // Fl_Text_Editor* o class_tabs_main->end(); Fl_Group::current()->resizable(class_tabs_main); } // Fl_Group* class_tabs_main class_tabs->end(); } // Fl_Tabs* class_tabs { declblock_tabs = new Fl_Tabs(10, 10, 400, 350); declblock_tabs->selection_color((Fl_Color)12); declblock_tabs->labelsize(11); declblock_tabs->labelcolor(FL_WHITE); declblock_tabs->callback((Fl_Callback*)cb_declblock_tabs); declblock_tabs->hide(); { declblock_tabs_main = new Fl_Group(10, 30, 400, 330, "Declaration Block"); declblock_tabs_main->labelsize(11); declblock_tabs_main->callback((Fl_Callback*)propagate_load); { Fl_Input* o = new Fl_Input(95, 50, 305, 20, "Start Code:"); o->tooltip("`#ifdef` or similar conditional declaration block"); o->labelfont(1); o->labelsize(11); o->textfont(4); o->textsize(11); o->callback((Fl_Callback*)cb_Start); } // Fl_Input* o { Fl_Input* o = new Fl_Input(95, 75, 305, 20, "End Code:"); o->tooltip("`#endif` or similar declaration code block"); o->labelfont(1); o->labelsize(11); o->textfont(4); o->textsize(11); o->callback((Fl_Callback*)cb_End); } // Fl_Input* o { Fl_Group* o = new Fl_Group(95, 100, 305, 120); o->callback((Fl_Callback*)propagate_load); { Fl_Box* o = new Fl_Box(95, 100, 270, 20, "Enclose code generated by children in source file:"); o->labelsize(11); o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE)); } // Fl_Box* o { Fl_Check_Button* o = new Fl_Check_Button(105, 120, 260, 20, "implementations"); o->down_box(FL_DOWN_BOX); o->labelsize(11); o->callback((Fl_Callback*)cb_implementations); } // Fl_Check_Button* o { Fl_Check_Button* o = new Fl_Check_Button(105, 140, 260, 20, "static initializations and callbacks"); o->down_box(FL_DOWN_BOX); o->labelsize(11); o->callback((Fl_Callback*)cb_static); } // Fl_Check_Button* o { Fl_Box* o = new Fl_Box(95, 160, 270, 20, "Enclose code in header file:"); o->labelsize(11); o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE)); } // Fl_Box* o { Fl_Check_Button* o = new Fl_Check_Button(105, 180, 260, 20, "forward declarations"); o->down_box(FL_DOWN_BOX); o->labelsize(11); o->callback((Fl_Callback*)cb_forward); } // Fl_Check_Button* o { Fl_Check_Button* o = new Fl_Check_Button(105, 200, 260, 20, "preprecessor and callback declarations"); o->down_box(FL_DOWN_BOX); o->labelsize(11); o->callback((Fl_Callback*)cb_preprecessor); } // Fl_Check_Button* o { Fl_Box* o = new Fl_Box(365, 100, 35, 120); o->labelsize(11); o->hide(); Fl_Group::current()->resizable(o); } // Fl_Box* o o->end(); } // Fl_Group* o { Fl_Text_Editor* o = new Fl_Text_Editor(95, 225, 305, 117, "Comment:"); o->box(FL_DOWN_BOX); o->labelfont(1); o->labelsize(11); o->textfont(4); o->textsize(11); o->callback((Fl_Callback*)cb_Comment2); o->align(Fl_Align(FL_ALIGN_LEFT)); Fl_Group::current()->resizable(o); o->buffer(new Fl_Text_Buffer()); o->add_key_binding(FL_Tab, 0, use_tab_navigation); } // Fl_Text_Editor* o declblock_tabs_main->end(); Fl_Group::current()->resizable(declblock_tabs_main); } // Fl_Group* declblock_tabs_main declblock_tabs->end(); } // Fl_Tabs* declblock_tabs { decl_tabs = new Fl_Tabs(10, 10, 400, 350); decl_tabs->selection_color((Fl_Color)12); decl_tabs->labelsize(11); decl_tabs->labelcolor(FL_WHITE); decl_tabs->callback((Fl_Callback*)cb_decl_tabs); decl_tabs->hide(); { decl_tabs_main = new Fl_Group(10, 30, 400, 330, "Declaration"); decl_tabs_main->labelsize(11); decl_tabs_main->callback((Fl_Callback*)propagate_load); { Fl_Group* o = new Fl_Group(15, 50, 390, 20); o->labelfont(1); o->labelsize(11); o->callback((Fl_Callback*)propagate_load); o->align(Fl_Align(FL_ALIGN_LEFT)); { Fl_Box* o = new Fl_Box(404, 50, 1, 20); o->hide(); Fl_Group::current()->resizable(o); } // Fl_Box* o { Fl_Box* o = new Fl_Box(95, 50, 1, 20, "Visibility:"); o->labelfont(1); o->labelsize(11); o->align(Fl_Align(FL_ALIGN_LEFT)); } // Fl_Box* o { Fl_Choice* o = new Fl_Choice(95, 50, 185, 20); o->down_box(FL_BORDER_BOX); o->labelsize(11); o->textsize(11); o->callback((Fl_Callback*)cb_19); o->menu(menu_9); } // Fl_Choice* o { Fl_Choice* o = new Fl_Choice(95, 50, 75, 20); o->down_box(FL_BORDER_BOX); o->labelsize(11); o->textsize(11); o->callback((Fl_Callback*)cb_1a); o->menu(menu_a); } // Fl_Choice* o o->end(); } // Fl_Group* o { Fl_Tile* o = new Fl_Tile(15, 75, 390, 210); o->callback((Fl_Callback*)cb_1b); { Fl_Group* o = new Fl_Group(15, 75, 390, 105); o->box(FL_FLAT_BOX); o->labelfont(1); o->labelsize(11); o->callback((Fl_Callback*)propagate_load); o->align(Fl_Align(FL_ALIGN_LEFT)); { fld::widget::Code_Editor* o = new fld::widget::Code_Editor(95, 75, 310, 100, "Declaration:"); o->tooltip("a declaration: `int x;`, an external symbol: `extern int foo();`,\na `#` dire" "ctive: `#include `, a typedef `typedef char byte;`,\n or a `using` stat" "ement, etc."); o->box(FL_DOWN_FRAME); o->color(FL_BACKGROUND2_COLOR); o->selection_color(FL_SELECTION_COLOR); o->labeltype(FL_NORMAL_LABEL); o->labelfont(1); o->labelsize(11); o->labelcolor(FL_FOREGROUND_COLOR); o->textsize(11); o->callback((Fl_Callback*)cb_Declaration); o->align(Fl_Align(132)); o->when(FL_WHEN_RELEASE); Fl_Group::current()->resizable(o); o->add_key_binding(FL_Tab, 0, use_tab_navigation); } // fld::widget::Code_Editor* o o->end(); } // Fl_Group* o { Fl_Group* o = new Fl_Group(15, 180, 390, 105); o->box(FL_FLAT_BOX); o->callback((Fl_Callback*)propagate_load); { Fl_Text_Editor* o = new Fl_Text_Editor(95, 185, 310, 100, "Comment:"); o->box(FL_DOWN_BOX); o->labelfont(1); o->labelsize(11); o->textfont(4); o->textsize(11); o->callback((Fl_Callback*)cb_Comment3); o->align(Fl_Align(FL_ALIGN_LEFT)); Fl_Group::current()->resizable(o); o->buffer(new Fl_Text_Buffer()); o->add_key_binding(FL_Tab, 0, use_tab_navigation); } // Fl_Text_Editor* o o->end(); } // Fl_Group* o o->size_range(0, 25, 55); o->size_range(1, 25, 55); o->end(); Fl_Group::current()->resizable(o); } // Fl_Tile* o decl_tabs_main->end(); Fl_Group::current()->resizable(decl_tabs_main); } // Fl_Group* decl_tabs_main decl_tabs->end(); } // Fl_Tabs* decl_tabs { codeblock_tabs = new Fl_Tabs(10, 10, 400, 350); codeblock_tabs->selection_color((Fl_Color)12); codeblock_tabs->labelsize(11); codeblock_tabs->labelcolor(FL_WHITE); codeblock_tabs->callback((Fl_Callback*)cb_codeblock_tabs); codeblock_tabs->hide(); { codeblock_tabs_main = new Fl_Group(10, 30, 400, 330, "Code Block"); codeblock_tabs_main->labelsize(11); codeblock_tabs_main->callback((Fl_Callback*)propagate_load); { Fl_Input* o = new Fl_Input(95, 50, 305, 20, "Start Code:"); o->tooltip("condition statement: `if (x==1)`, or empty"); o->labelfont(1); o->labelsize(11); o->textfont(4); o->textsize(11); o->callback((Fl_Callback*)cb_Start1); } // Fl_Input* o { Fl_Input* o = new Fl_Input(95, 75, 305, 20, "End Code:"); o->tooltip("condition end: `while (x==1);`, or empty"); o->labelfont(1); o->labelsize(11); o->textfont(4); o->textsize(11); o->callback((Fl_Callback*)cb_End1); } // Fl_Input* o { Fl_Text_Editor* o = new Fl_Text_Editor(95, 100, 305, 117, "Comment:"); o->tooltip("code block comment"); o->box(FL_DOWN_BOX); o->labelfont(1); o->labelsize(11); o->textfont(4); o->textsize(11); o->callback((Fl_Callback*)cb_Comment4); o->align(Fl_Align(FL_ALIGN_LEFT)); Fl_Group::current()->resizable(o); o->buffer(new Fl_Text_Buffer()); o->add_key_binding(FL_Tab, 0, use_tab_navigation); } // Fl_Text_Editor* o codeblock_tabs_main->end(); Fl_Group::current()->resizable(codeblock_tabs_main); } // Fl_Group* codeblock_tabs_main codeblock_tabs->end(); } // Fl_Tabs* codeblock_tabs { code_tabs = new Fl_Tabs(10, 10, 400, 350); code_tabs->selection_color((Fl_Color)12); code_tabs->labelsize(11); code_tabs->labelcolor(FL_WHITE); code_tabs->callback((Fl_Callback*)cb_code_tabs); code_tabs->hide(); { code_tabs_main = new Fl_Group(10, 30, 400, 330, "Code"); code_tabs_main->labelsize(11); code_tabs_main->callback((Fl_Callback*)propagate_load); { fld::widget::Code_Editor* o = new fld::widget::Code_Editor(15, 40, 390, 315); o->box(FL_DOWN_BOX); o->color(FL_BACKGROUND2_COLOR); o->selection_color(FL_SELECTION_COLOR); o->labeltype(FL_NORMAL_LABEL); o->labelfont(0); o->labelsize(11); o->labelcolor(FL_FOREGROUND_COLOR); o->textfont(4); o->textsize(11); o->callback((Fl_Callback*)cb_1c); o->align(Fl_Align(FL_ALIGN_TOP)); o->when(FL_WHEN_RELEASE | FL_WHEN_ENTER_KEY_CHANGED); Fl_Group::current()->resizable(o); o->linenumber_width(60); o->linenumber_size(o->Fl_Text_Display::textsize()); } // fld::widget::Code_Editor* o code_tabs_main->end(); Fl_Group::current()->resizable(code_tabs_main); } // Fl_Group* code_tabs_main code_tabs->end(); } // Fl_Tabs* code_tabs { func_tabs = new Fl_Tabs(10, 10, 400, 350); func_tabs->selection_color((Fl_Color)12); func_tabs->labelsize(11); func_tabs->labelcolor(FL_WHITE); func_tabs->callback((Fl_Callback*)cb_func_tabs); func_tabs->hide(); { func_tabs_main = new Fl_Group(10, 30, 400, 330, "Function"); func_tabs_main->labelsize(11); func_tabs_main->callback((Fl_Callback*)propagate_load); { Fl_Group* o = new Fl_Group(15, 50, 390, 45); o->labelfont(1); o->labelsize(11); o->callback((Fl_Callback*)propagate_load); o->align(Fl_Align(FL_ALIGN_LEFT)); { Fl_Box* o = new Fl_Box(404, 50, 1, 20); o->hide(); Fl_Group::current()->resizable(o); } // Fl_Box* o { Fl_Box* o = new Fl_Box(95, 50, 1, 20, "Visibility:"); o->labelfont(1); o->labelsize(11); o->align(Fl_Align(FL_ALIGN_LEFT)); } // Fl_Box* o { Fl_Choice* o = new Fl_Choice(95, 50, 80, 20); o->down_box(FL_BORDER_BOX); o->labelsize(11); o->textsize(11); o->callback((Fl_Callback*)cb_1d); o->menu(menu_b); } // Fl_Choice* o { Fl_Choice* o = new Fl_Choice(95, 50, 75, 20); o->down_box(FL_BORDER_BOX); o->labelsize(11); o->textsize(11); o->callback((Fl_Callback*)cb_1e); o->menu(menu_c); } // Fl_Choice* o { Fl_Check_Button* o = new Fl_Check_Button(95, 75, 90, 20, "declare \"C\""); o->down_box(FL_DOWN_BOX); o->labelsize(11); o->callback((Fl_Callback*)cb_declare); } // Fl_Check_Button* o o->end(); } // Fl_Group* o { Fl_Tile* o = new Fl_Tile(15, 100, 390, 220); o->callback((Fl_Callback*)cb_1f); { Fl_Group* o = new Fl_Group(15, 100, 390, 55); o->box(FL_FLAT_BOX); o->labelfont(1); o->labelsize(11); o->callback((Fl_Callback*)propagate_load); o->align(Fl_Align(FL_ALIGN_LEFT)); { fld::widget::Code_Editor* o = new fld::widget::Code_Editor(95, 100, 310, 50, "Function\nName and\nArgs:"); o->tooltip("function name and args, or blank for `main(..)`"); o->box(FL_DOWN_FRAME); o->color(FL_BACKGROUND2_COLOR); o->selection_color(FL_SELECTION_COLOR); o->labeltype(FL_NORMAL_LABEL); o->labelfont(1); o->labelsize(11); o->labelcolor(FL_FOREGROUND_COLOR); o->textsize(11); o->callback((Fl_Callback*)cb_Function); o->align(Fl_Align(132)); o->when(FL_WHEN_RELEASE); Fl_Group::current()->resizable(o); o->add_key_binding(FL_Tab, 0, use_tab_navigation); } // fld::widget::Code_Editor* o o->end(); } // Fl_Group* o { Fl_Group* o = new Fl_Group(15, 155, 390, 60); o->box(FL_FLAT_BOX); o->labelfont(1); o->labelsize(11); o->callback((Fl_Callback*)propagate_load); o->align(Fl_Align(FL_ALIGN_LEFT)); { fld::widget::Code_Editor* o = new fld::widget::Code_Editor(95, 160, 310, 50, "Return Type:"); o->tooltip("return type, or blank to return outermost widget"); o->box(FL_DOWN_FRAME); o->color(FL_BACKGROUND2_COLOR); o->selection_color(FL_SELECTION_COLOR); o->labeltype(FL_NORMAL_LABEL); o->labelfont(1); o->labelsize(11); o->labelcolor(FL_FOREGROUND_COLOR); o->textsize(11); o->callback((Fl_Callback*)cb_Return); o->align(Fl_Align(132)); o->when(FL_WHEN_RELEASE); Fl_Group::current()->resizable(o); o->add_key_binding(FL_Tab, 0, use_tab_navigation); } // fld::widget::Code_Editor* o o->end(); } // Fl_Group* o { Fl_Group* o = new Fl_Group(15, 215, 390, 105); o->box(FL_FLAT_BOX); o->callback((Fl_Callback*)propagate_load); { Fl_Text_Editor* o = new Fl_Text_Editor(95, 220, 310, 100, "Comment:"); o->box(FL_DOWN_BOX); o->labelfont(1); o->labelsize(11); o->textfont(4); o->textsize(11); o->callback((Fl_Callback*)cb_Comment5); o->align(Fl_Align(FL_ALIGN_LEFT)); Fl_Group::current()->resizable(o); o->buffer(new Fl_Text_Buffer()); o->add_key_binding(FL_Tab, 0, use_tab_navigation); } // Fl_Text_Editor* o o->end(); } // Fl_Group* o o->size_range(0, 25, 50); o->size_range(1, 25, 50); o->size_range(2, 25, 50); o->end(); Fl_Group::current()->resizable(o); } // Fl_Tile* o func_tabs_main->end(); Fl_Group::current()->resizable(func_tabs_main); } // Fl_Group* func_tabs_main func_tabs->end(); Fl_Group::current()->resizable(func_tabs); } // Fl_Tabs* func_tabs tabs_wizard->end(); Fl_Group::current()->resizable(tabs_wizard); } // Fl_Wizard* tabs_wizard { Fl_Tabs* o = widget_tabs_repo = new Fl_Tabs(10, 10, 400, 350); widget_tabs_repo->hide(); { Fl_Group* o = new Fl_Group(10, 30, 400, 330); o->end(); Fl_Group::current()->resizable(o); } // Fl_Group* o o->hide(); widget_tabs_repo->end(); } // Fl_Tabs* widget_tabs_repo { Fl_Group* o = new Fl_Group(10, 370, 400, 20); o->labelsize(11); { wLiveMode = new Fl_Button(10, 370, 80, 20, "Live &Resize"); wLiveMode->tooltip("Create a live duplicate of the selected widgets to test resizing and menu beh" "avior."); wLiveMode->type(1); wLiveMode->labelsize(10); wLiveMode->callback((Fl_Callback*)live_mode_cb); } // Fl_Button* wLiveMode { overlay_button = new Fl_Button(94, 370, 80, 20, "Hide &Overlays"); overlay_button->tooltip("Hide the widget overlay box."); overlay_button->labelsize(10); overlay_button->callback((Fl_Callback*)overlay_cb); } // Fl_Button* overlay_button { // Hidden resizable box Fl_Box* o = new Fl_Box(258, 370, 72, 20); o->labelsize(11); o->hide(); Fl_Group::current()->resizable(o); } // Fl_Box* o { Fl_Return_Button* o = new Fl_Return_Button(330, 370, 80, 20, "Close"); o->labelsize(11); o->callback((Fl_Callback*)ok_cb); } // Fl_Return_Button* o o->end(); } // Fl_Group* o o->size_range(420, 400); o->size_range(o->w(), o->h()); o->end(); } // Fl_Double_Window* o return w; }