summaryrefslogtreecommitdiff
path: root/fluid/panels
diff options
context:
space:
mode:
authorMatthias Melcher <github@matthiasm.com>2025-03-07 16:34:35 +0100
committerMatthias Melcher <github@matthiasm.com>2025-03-07 16:34:48 +0100
commit1985aefc0e502048f92b91beef87c0dfbe669fed (patch)
treeaf62874def4590e437a47784b4428d975ceb262f /fluid/panels
parent42a04c064d4b31c3a85210311f3ada163c406a25 (diff)
Restructuring Fluid source files.
Diffstat (limited to 'fluid/panels')
-rw-r--r--fluid/panels/about_panel.cxx2059
-rw-r--r--fluid/panels/about_panel.fl76
-rw-r--r--fluid/panels/about_panel.h32
-rw-r--r--fluid/panels/codeview_panel.cxx550
-rw-r--r--fluid/panels/codeview_panel.fl506
-rw-r--r--fluid/panels/codeview_panel.h58
-rw-r--r--fluid/panels/function_panel.cxx1559
-rw-r--r--fluid/panels/function_panel.fl1043
-rw-r--r--fluid/panels/function_panel.h116
-rw-r--r--fluid/panels/print_panel.cxx586
-rw-r--r--fluid/panels/print_panel.fl358
-rw-r--r--fluid/panels/print_panel.h56
-rw-r--r--fluid/panels/settings_panel.cxx3551
-rw-r--r--fluid/panels/settings_panel.fl1883
-rw-r--r--fluid/panels/settings_panel.h143
-rw-r--r--fluid/panels/template_panel.cxx340
-rw-r--r--fluid/panels/template_panel.fl297
-rw-r--r--fluid/panels/template_panel.h41
-rw-r--r--fluid/panels/widget_panel.cxx2497
-rw-r--r--fluid/panels/widget_panel.fl1872
-rw-r--r--fluid/panels/widget_panel.h225
21 files changed, 17848 insertions, 0 deletions
diff --git a/fluid/panels/about_panel.cxx b/fluid/panels/about_panel.cxx
new file mode 100644
index 000000000..ab36ddc10
--- /dev/null
+++ b/fluid/panels/about_panel.cxx
@@ -0,0 +1,2059 @@
+//
+// About dialog 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 "about_panel.h"
+void show_help(const char *name);
+
+Fl_Double_Window *about_panel=(Fl_Double_Window *)0;
+
+#include <FL/Fl_Anim_GIF_Image.H>
+
+static const unsigned char idata_fluid[] =
+{71,73,70,56,57,97,96,0,96,0,132,31,0,0,1,0,3,31,63,46,48,45,0,54,108,78,80,
+77,64,123,116,124,126,123,125,173,98,107,166,116,171,204,63,220,233,19,253,254,
+0,196,218,42,147,189,83,20,101,159,44,112,135,0,88,172,0,96,191,0,109,220,91,
+161,140,68,152,169,38,140,205,0,128,255,15,133,249,45,146,236,47,148,254,108,
+182,255,164,166,162,187,222,255,202,204,201,253,255,252,0,0,0,33,255,11,78,69,
+84,83,67,65,80,69,50,46,48,3,1,0,0,0,33,249,4,5,10,0,31,0,44,0,0,0,0,96,0,96,0,
+0,5,254,224,39,142,100,105,158,104,170,174,108,235,190,112,44,207,116,109,223,
+120,110,2,124,239,3,186,160,238,71,36,14,34,61,161,18,86,244,13,32,78,139,5,201,
+91,90,87,63,143,118,171,201,112,184,25,11,180,122,45,239,120,219,180,135,147,
+241,174,219,223,164,121,46,234,169,211,108,111,87,163,149,211,205,118,119,96,28,
+93,95,28,3,100,127,101,129,130,90,95,107,26,93,22,136,138,128,104,120,28,143,
+90,124,121,97,80,149,139,151,142,109,164,111,134,153,99,160,87,140,155,145,153,
+142,142,113,137,170,66,172,130,108,90,112,126,180,65,182,119,93,163,26,136,64,
+188,181,162,183,112,111,25,169,197,189,199,119,121,143,108,204,205,57,190,120,
+25,124,91,28,187,213,54,215,120,119,221,222,52,224,141,125,179,228,229,207,231,
+105,227,234,49,230,231,239,240,47,242,141,244,245,45,247,130,249,250,88,236,218,
+161,35,246,47,222,179,78,110,196,165,43,184,239,24,194,100,106,252,49,60,193,
+232,33,41,77,3,39,50,17,101,17,226,22,137,26,73,84,36,69,50,225,199,133,33,254,
+81,140,44,233,49,99,74,22,172,186,148,212,230,14,229,203,18,172,44,98,116,121,
+51,133,47,66,26,118,158,36,216,147,98,64,129,32,95,242,83,72,180,40,206,163,
+237,124,56,61,3,245,156,128,164,19,125,16,16,40,104,131,212,169,31,180,114,109,
+100,224,171,83,31,99,149,37,236,64,192,236,77,31,27,198,178,204,48,180,105,72,
+177,92,59,62,242,138,213,155,15,1,105,231,182,217,210,182,111,51,31,29,2,11,78,
+83,216,38,60,196,105,61,8,166,91,211,49,57,31,6,34,171,37,185,147,175,229,195,
+61,0,107,222,108,146,177,219,199,61,226,142,134,228,202,234,105,191,169,87,107,
+246,108,23,52,15,213,178,35,211,86,135,55,183,230,198,181,85,193,245,189,250,
+234,103,58,195,183,93,36,126,174,195,235,74,189,37,179,100,78,246,249,159,208,
+216,88,10,165,238,1,56,45,200,91,38,115,23,100,60,120,168,219,106,196,143,103,
+106,126,73,244,92,139,215,171,41,107,184,134,143,0,24,34,233,143,116,161,191,
+255,11,251,5,40,224,128,4,6,24,128,117,198,0,254,16,128,4,82,52,232,224,131,16,
+70,40,225,132,16,74,128,224,16,61,68,64,225,134,28,118,8,33,21,199,217,215,195,
+0,30,150,104,226,132,99,132,56,67,15,1,104,248,32,6,48,62,120,193,137,52,98,
+192,160,20,7,214,215,16,15,46,54,136,65,3,12,36,160,0,2,20,76,128,0,144,61,122,
+120,65,3,9,84,112,227,139,8,28,144,0,3,10,56,41,133,4,57,182,183,98,15,16,60,88,
+129,2,11,20,48,193,2,11,8,73,38,3,17,60,217,33,2,103,166,9,33,6,19,48,64,166,2,
+110,74,145,162,150,27,241,64,226,131,114,162,201,166,2,14,200,185,64,3,117,118,
+120,193,1,115,66,160,166,131,9,144,153,64,161,98,92,104,15,139,139,82,64,38,2,
+16,68,48,1,5,16,128,25,38,164,28,126,57,36,168,82,92,32,40,166,139,102,137,39,
+76,25,202,40,232,3,105,74,32,65,5,115,58,32,43,141,18,144,42,5,173,11,0,10,42,
+150,58,62,197,67,151,47,38,170,225,140,108,150,169,40,174,183,74,152,172,2,138,
+46,58,133,164,42,254,68,225,96,5,19,52,112,38,2,19,220,216,232,2,168,74,128,65,
+145,7,80,192,32,156,155,58,152,65,5,69,54,43,5,5,9,36,48,193,183,13,44,27,225,
+48,42,10,11,192,158,14,206,235,169,2,65,106,136,129,167,176,86,32,40,153,182,
+90,128,232,160,26,82,224,233,160,79,98,208,232,144,7,23,96,111,132,170,202,224,
+131,180,22,152,74,166,197,178,74,96,105,175,209,122,188,0,154,12,10,58,65,154,
+23,12,76,230,202,231,202,233,235,152,189,218,202,177,20,17,100,105,144,158,18,
+186,188,128,3,246,46,92,47,131,38,31,160,40,175,63,187,233,51,172,82,124,91,64,
+154,52,51,144,233,134,22,246,101,109,132,35,51,96,179,20,130,62,205,32,175,10,
+192,122,65,178,82,19,157,245,212,52,39,144,169,4,218,46,96,244,205,14,226,187,
+234,125,20,38,171,246,141,24,144,249,243,178,81,71,43,232,219,82,180,253,54,6,
+42,47,75,176,174,16,234,204,42,15,27,126,139,64,157,125,223,40,184,162,35,47,0,
+235,141,93,67,109,172,5,35,67,235,238,134,254,146,250,144,100,132,135,75,78,38,
+224,25,148,254,45,180,46,130,237,128,134,223,222,205,182,163,203,194,237,224,
+157,62,177,184,97,222,100,70,219,177,167,94,115,158,168,4,19,120,58,180,20,125,
+71,112,129,167,143,139,203,252,197,29,202,109,20,15,11,110,120,118,235,181,62,
+112,128,5,52,215,27,168,227,16,32,192,224,228,13,60,160,55,200,109,91,94,0,5,38,
+2,59,142,238,28,78,126,35,205,128,54,57,187,219,129,82,208,117,3,221,90,0,252,
+1,7,144,128,167,140,118,36,48,133,13,101,237,59,141,15,136,213,184,143,65,78,
+111,10,40,128,172,210,55,36,1,206,233,81,12,122,24,6,41,152,0,243,205,233,1,159,
+235,16,238,234,48,162,14,185,204,115,13,50,216,201,130,247,165,147,193,12,81,10,
+120,27,131,254,212,128,215,137,75,91,10,168,87,4,26,197,128,203,209,104,18,82,
+185,218,134,120,165,67,7,229,42,86,13,58,34,18,143,232,174,92,133,236,74,76,12,
+89,4,88,246,67,11,232,140,82,20,194,128,147,46,64,51,31,62,232,86,79,122,148,
+226,141,158,104,196,207,49,72,2,51,234,216,25,171,104,129,170,253,32,0,27,146,
+147,248,26,37,59,54,218,241,142,86,36,2,28,41,68,166,6,208,202,87,182,195,163,
+32,39,164,42,234,109,8,1,10,152,82,15,17,55,200,70,74,168,144,10,226,144,3,40,
+96,195,16,58,242,146,247,210,99,135,66,22,72,76,98,18,146,0,128,158,39,71,121,
+34,9,224,238,141,1,72,165,42,87,201,202,86,186,242,149,176,140,165,44,103,201,
+202,31,144,176,9,184,204,165,46,119,201,203,94,246,82,36,190,12,166,48,135,73,
+76,34,76,175,152,200,76,102,49,75,16,2,0,33,249,4,5,10,0,31,0,44,30,0,4,0,38,0,
+57,0,0,5,254,224,39,142,31,96,158,104,170,2,100,235,174,112,236,206,174,103,
+223,56,158,210,60,205,113,185,91,111,152,201,136,56,25,100,50,232,25,246,126,71,
+227,143,233,57,57,121,72,13,105,169,51,93,105,154,204,141,243,225,222,172,95,
+151,70,227,209,126,128,65,116,186,85,92,127,168,115,44,156,218,204,147,236,111,
+100,83,113,94,126,128,69,101,98,132,44,115,124,124,114,126,45,123,57,145,88,102,
+56,149,60,110,153,156,157,158,159,160,161,162,149,142,120,145,165,76,164,168,
+148,167,171,152,173,174,54,170,177,125,126,180,178,176,177,179,76,28,107,26,100,
+163,34,97,69,69,192,162,74,196,197,163,201,201,155,160,204,196,206,159,208,117,
+163,195,204,198,160,200,209,66,161,189,35,147,184,78,183,169,227,228,229,78,189,
+191,231,226,62,208,225,186,154,208,108,231,150,212,240,174,238,247,236,181,36,
+219,201,217,60,253,35,22,80,224,187,96,111,0,130,226,199,176,161,67,90,219,128,
+61,196,49,144,204,68,27,3,139,93,244,144,49,137,175,143,32,67,138,244,149,225,
+130,201,147,38,3,51,132,0,0,33,249,4,5,10,0,31,0,44,34,0,7,0,34,0,54,0,0,5,202,
+224,39,138,94,105,158,168,57,174,236,154,190,104,43,143,112,237,205,179,13,227,
+178,254,242,45,95,10,200,18,198,136,52,163,10,73,82,150,152,77,39,116,74,141,42,
+167,206,39,52,123,171,122,191,224,176,120,76,46,155,207,232,244,151,195,230,156,
+57,154,140,60,227,94,107,52,245,185,190,62,229,232,229,113,127,114,85,129,130,
+134,83,1,126,130,23,134,25,136,138,127,140,135,80,137,141,134,124,76,144,127,
+112,43,28,90,80,154,114,158,30,109,163,93,125,123,58,72,92,75,64,172,39,106,177,
+76,175,63,69,175,112,119,152,46,172,133,162,61,92,161,190,182,89,141,26,65,92,
+197,199,196,134,198,195,78,189,115,186,31,172,193,205,100,112,209,68,144,120,
+102,208,116,180,90,193,25,26,224,93,222,114,229,34,231,25,233,31,25,23,240,241,
+240,119,244,245,246,247,244,33,0,33,249,4,5,10,0,31,0,44,36,0,13,0,26,0,48,0,0,
+5,196,224,39,138,156,102,114,99,170,174,100,230,186,26,43,143,220,107,163,243,
+26,104,182,157,235,188,158,235,167,218,9,135,196,84,77,24,75,166,130,55,167,
+106,153,209,224,164,88,44,103,123,205,150,162,217,207,177,155,164,246,178,208,
+51,54,237,211,30,51,225,177,103,78,247,252,190,175,79,189,46,219,115,57,123,
+124,44,129,132,123,125,133,136,42,0,139,136,137,41,139,0,141,30,93,100,31,144,
+141,102,46,28,1,131,133,98,71,14,157,132,153,47,26,156,41,152,111,149,57,164,
+154,104,76,97,164,171,101,39,78,84,86,97,31,108,25,128,146,83,71,26,146,118,79,
+111,194,42,187,46,198,196,71,202,52,114,190,191,54,193,205,74,38,86,194,216,217,
+218,219,136,102,171,194,178,43,146,173,188,42,227,170,199,214,234,214,25,23,238,
+239,238,112,41,33,0,33,249,4,5,10,0,31,0,44,38,0,5,0,21,0,56,0,0,5,232,224,39,
+142,80,52,158,104,202,101,25,151,190,98,166,105,172,11,167,44,171,125,156,125,
+139,171,26,173,245,27,245,56,195,93,17,185,11,250,96,131,97,203,89,20,205,106,
+181,170,199,99,67,102,127,219,174,231,11,3,132,129,231,159,57,204,217,186,223,
+111,145,185,7,175,199,81,109,207,76,249,91,105,182,82,79,48,109,121,71,85,64,68,
+135,39,52,127,112,76,26,130,136,132,133,57,58,47,121,34,92,149,57,28,1,153,118,
+122,155,57,3,159,118,82,155,164,31,160,161,162,25,169,171,65,155,26,175,171,167,
+53,158,170,171,154,58,79,186,160,138,192,193,194,39,190,118,55,73,160,0,0,120,
+162,121,111,2,56,173,117,27,203,70,173,45,117,204,173,206,110,218,205,198,39,
+215,191,39,177,156,197,110,73,96,231,235,117,71,189,190,167,124,240,162,74,186,
+229,149,46,246,215,249,176,251,185,160,247,56,85,177,37,67,81,188,17,231,220,17,
+99,199,176,225,186,61,16,35,74,220,19,2,0,59};
+static Fl_Image *image_fluid() {
+ Fl_GIF_Image::animate = true;
+ static Fl_Image *image = NULL;
+ if (!image)
+ image = new Fl_Anim_GIF_Image("fluid.animated.gif", idata_fluid, 2545);
+ return image;
+}
+
+static void cb_View(Fl_Button*, void*) {
+ show_help("license.html");
+}
+
+static void cb_Close(Fl_Return_Button* o, void*) {
+ ((Fl_Window*)(o->parent()))->hide();
+}
+
+Fl_Double_Window* make_about_panel() {
+ static char cbuf[200] = "";
+ if (!cbuf[0]) {
+ time_t t = time(0);
+ struct tm *lt = localtime(&t);
+ sprintf(cbuf, "Copyright © 1998 - %d\nby Bill Spitzak and others", lt->tm_year+1900);
+ }
+ { about_panel = new Fl_Double_Window(345, 180, "About FLUID");
+ about_panel->color(FL_LIGHT1);
+ about_panel->selection_color(FL_DARK1);
+ about_panel->hotspot(about_panel);
+ { Fl_Box* o = new Fl_Box(10, 10, 115, 120);
+ o->image( image_fluid() );
+ ((Fl_Anim_GIF_Image*)(image_fluid()))->canvas(o, Fl_Anim_GIF_Image::DONT_RESIZE_CANVAS);
+ ((Fl_Anim_GIF_Image*)(o->image()))->speed(0.5f);
+ } // Fl_Box* o
+ { Fl_Box* o = new Fl_Box(135, 10, 205, 75, "FLTK User\nInterface Designer\nVersion x.x.x");
+ o->color((Fl_Color)12);
+ o->selection_color(FL_DARK1);
+ o->labelfont(1);
+ o->labelsize(18);
+ o->align(Fl_Align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE));
+ char about[80]; // uses less than 60
+ snprintf(about,sizeof(about),"FLTK User\nInterface Designer\nVersion %d.%d.%d",FL_MAJOR_VERSION,FL_MINOR_VERSION,FL_PATCH_VERSION);
+ o->copy_label(about);
+ } // Fl_Box* o
+ { // Label edited dynamically:
+ Fl_Box* o = new Fl_Box(135, 90, 200, 45, "(Copyright)");
+ o->align(Fl_Align(132|FL_ALIGN_INSIDE));
+ o->label(cbuf);
+ } // Fl_Box* o
+ { Fl_Button* o = new Fl_Button(115, 145, 123, 25, "View License...");
+ o->labelcolor(FL_DARK_BLUE);
+ o->callback((Fl_Callback*)cb_View);
+ } // Fl_Button* o
+ { Fl_Return_Button* o = new Fl_Return_Button(250, 145, 83, 25, "Close");
+ o->callback((Fl_Callback*)cb_Close);
+ } // Fl_Return_Button* o
+ about_panel->set_non_modal();
+ about_panel->end();
+ } // Fl_Double_Window* about_panel
+ return about_panel;
+}
+
+/**
+ Embedded image for internal fluid.html web page.
+*/
+unsigned char fluid_flow_chart_800_png[41559] = /* data inlined from ../documentation/src/fluid_flow_chart_800.png */
+{137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,3,32,0,0,1,41,8,6,0,0,0,
+107,224,70,137,0,0,1,110,105,67,67,80,105,99,99,0,0,40,145,117,145,187,75,195,
+80,20,198,127,173,79,172,226,160,131,136,67,6,149,14,22,124,128,56,106,29,92,
+138,72,85,176,234,210,196,180,21,210,26,146,20,17,87,193,197,65,112,16,93,124,
+13,254,7,186,10,174,10,130,160,8,34,110,238,190,22,41,241,92,83,104,17,189,225,
+230,252,248,238,253,14,39,95,32,156,176,140,188,91,59,10,249,130,231,36,39,226,
+218,92,106,94,107,120,33,66,61,109,68,25,72,27,174,61,54,53,149,224,223,245,121,
+71,72,213,219,152,234,245,255,189,63,87,100,201,116,13,8,53,10,15,27,182,227,9,
+203,52,36,86,61,91,241,150,112,187,145,75,47,9,31,10,247,57,50,160,240,149,210,
+245,128,159,21,103,3,126,87,236,204,36,199,33,172,122,106,217,42,214,171,216,
+200,57,121,225,168,112,119,222,42,26,229,121,212,151,52,155,133,217,105,169,157,
+178,187,112,73,50,65,28,13,157,34,203,88,120,196,164,22,36,179,191,125,253,63,
+190,73,86,196,99,200,219,102,13,71,28,89,114,226,237,19,181,40,93,77,169,25,209,
+77,121,44,214,84,238,191,243,116,51,67,131,65,247,230,56,212,61,249,254,91,15,
+52,236,64,105,219,247,191,142,124,191,116,12,53,143,112,81,168,248,87,36,167,
+145,15,209,183,43,90,247,1,180,110,192,217,101,69,211,119,225,124,19,58,30,236,
+180,147,254,145,106,100,135,51,25,120,61,133,150,20,180,221,64,211,66,144,85,
+249,156,147,123,152,89,151,95,116,13,123,251,208,43,247,91,23,191,1,66,94,104,
+40,91,243,153,39,0,0,0,9,112,72,89,115,0,0,11,17,0,0,11,17,1,127,100,95,145,0,
+0,0,163,116,69,88,116,82,97,119,32,112,114,111,102,105,108,101,32,116,121,112,
+101,32,101,120,105,102,0,10,101,120,105,102,10,32,32,32,32,32,32,54,50,10,52,53,
+55,56,54,57,54,54,48,48,48,48,52,57,52,57,50,97,48,48,48,56,48,48,48,48,48,48,
+48,49,48,48,54,57,56,55,48,52,48,48,48,49,48,48,48,48,48,48,49,97,48,48,48,48,
+48,48,48,48,48,48,48,48,48,48,48,50,48,48,48,50,97,48,10,48,52,48,48,48,49,48,
+48,48,48,48,48,102,54,48,54,48,48,48,48,48,51,97,48,48,52,48,48,48,49,48,48,48,
+48,48,48,57,54,48,50,48,48,48,48,48,48,48,48,48,48,48,48,10,88,22,108,60,0,0,0,
+90,116,69,88,116,82,97,119,32,112,114,111,102,105,108,101,32,116,121,112,101,
+32,105,112,116,99,0,10,105,112,116,99,10,32,32,32,32,32,32,50,54,10,53,48,54,
+56,54,102,55,52,54,102,55,51,54,56,54,102,55,48,50,48,51,51,50,101,51,48,48,48,
+51,56,52,50,52,57,52,100,48,52,48,52,48,48,48,48,48,48,48,48,48,48,48,48,10,
+199,209,105,220,0,0,19,85,116,69,88,116,82,97,119,32,112,114,111,102,105,108,
+101,32,116,121,112,101,32,120,109,112,0,10,120,109,112,10,32,32,32,32,50,52,50,
+51,10,51,99,51,102,55,56,55,48,54,49,54,51,54,98,54,53,55,52,50,48,54,50,54,53,
+54,55,54,57,54,101,51,100,50,50,101,102,98,98,98,102,50,50,50,48,54,57,54,52,
+51,100,50,50,53,55,51,53,52,100,51,48,52,100,55,48,52,51,54,53,54,56,54,57,10,
+52,56,55,97,55,50,54,53,53,51,55,97,52,101,53,52,54,51,55,97,54,98,54,51,51,57,
+54,52,50,50,51,102,51,101,48,97,51,99,55,56,51,97,55,56,54,100,55,48,54,100,54,
+53,55,52,54,49,50,48,55,56,54,100,54,99,54,101,55,51,51,97,55,56,10,51,100,50,
+50,54,49,54,52,54,102,54,50,54,53,51,97,54,101,55,51,51,97,54,100,54,53,55,52,
+54,49,50,102,50,50,50,48,55,56,51,97,55,56,54,100,55,48,55,52,54,98,51,100,50,
+50,53,56,52,100,53,48,50,48,52,51,54,102,55,50,54,53,50,48,10,51,52,50,101,51,
+52,50,101,51,48,50,100,52,53,55,56,54,57,55,54,51,50,50,50,51,101,48,97,50,48,
+51,99,55,50,54,52,54,54,51,97,53,50,52,52,52,54,50,48,55,56,54,100,54,99,54,
+101,55,51,51,97,55,50,54,52,54,54,51,100,50,50,54,56,10,55,52,55,52,55,48,51,97,
+50,102,50,102,55,55,55,55,55,55,50,101,55,55,51,51,50,101,54,102,55,50,54,55,
+50,102,51,49,51,57,51,57,51,57,50,102,51,48,51,50,50,102,51,50,51,50,50,100,55,
+50,54,52,54,54,50,100,55,51,55,57,54,101,55,52,10,54,49,55,56,50,100,54,101,55,
+51,50,51,50,50,51,101,48,97,50,48,50,48,51,99,55,50,54,52,54,54,51,97,52,52,54,
+53,55,51,54,51,55,50,54,57,55,48,55,52,54,57,54,102,54,101,50,48,55,50,54,52,
+54,54,51,97,54,49,54,50,54,102,55,53,10,55,52,51,100,50,50,50,50,48,97,50,48,
+50,48,50,48,50,48,55,56,54,100,54,99,54,101,55,51,51,97,54,53,55,56,54,57,54,
+54,51,100,50,50,54,56,55,52,55,52,55,48,51,97,50,102,50,102,54,101,55,51,50,
+101,54,49,54,52,54,102,54,50,54,53,10,50,101,54,51,54,102,54,100,50,102,54,53,
+55,56,54,57,54,54,50,102,51,49,50,101,51,48,50,102,50,50,48,97,50,48,50,48,50,
+48,54,53,55,56,54,57,54,54,51,97,53,48,54,57,55,56,54,53,54,99,53,56,52,52,54,
+57,54,100,54,53,54,101,55,51,10,54,57,54,102,54,101,51,100,50,50,51,49,51,55,
+51,56,51,50,50,50,48,97,50,48,50,48,50,48,54,53,55,56,54,57,54,54,51,97,53,48,
+54,57,55,56,54,53,54,99,53,57,52,52,54,57,54,100,54,53,54,101,55,51,54,57,54,
+102,54,101,51,100,50,50,10,51,54,51,54,51,50,50,50,50,102,51,101,48,97,50,48,51,
+99,50,102,55,50,54,52,54,54,51,97,53,50,52,52,52,54,51,101,48,97,51,99,50,102,
+55,56,51,97,55,56,54,100,55,48,54,100,54,53,55,52,54,49,51,101,48,97,50,48,50,
+48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,48,97,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,48,97,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,48,97,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,10,50,48,50,48,50,48,48,97,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,48,97,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,48,97,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,48,
+97,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,48,97,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,48,97,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,48,97,50,48,50,48,10,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,48,97,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,48,97,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,48,97,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,
+48,50,48,48,97,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,48,
+97,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,48,97,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,48,97,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,48,97,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+10,50,48,50,48,50,48,50,48,50,48,50,48,48,97,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,48,97,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,48,97,51,99,51,102,55,56,55,48,54,49,
+54,51,54,98,54,53,10,55,52,50,48,54,53,54,101,54,52,51,100,50,50,55,55,50,50,
+51,102,51,101,10,162,250,209,144,0,0,32,0,73,68,65,84,120,94,236,221,7,88,20,
+199,251,7,240,57,122,81,20,81,81,236,96,5,197,222,27,246,222,107,108,49,49,150,
+159,61,26,141,105,127,53,150,88,18,99,139,189,247,222,123,5,197,216,69,80,172,
+128,8,82,21,145,222,217,255,188,43,103,8,65,6,241,238,56,184,239,231,121,230,
+185,54,123,28,123,123,59,243,238,52,133,36,73,12,0,0,0,0,0,64,19,244,68,25,0,0,
+0,0,0,0,84,5,1,8,0,0,0,0,0,104,12,2,16,0,0,0,0,0,208,24,4,32,0,0,0,0,0,160,49,
+8,64,0,0,0,0,0,64,99,12,68,25,136,66,161,16,101,1,0,0,80,185,62,125,250,212,
+113,117,117,181,141,140,140,180,138,139,139,43,204,159,42,196,147,5,79,5,120,50,
+79,75,102,105,201,148,39,227,116,201,40,237,214,144,189,47,239,242,122,97,150,
+202,83,18,79,137,105,41,33,237,54,62,45,197,241,20,147,118,27,157,118,63,138,
+167,72,61,61,189,119,133,10,21,10,183,182,182,14,155,50,101,202,173,81,163,70,
+133,102,246,7,0,0,62,87,118,102,216,85,100,43,19,2,16,0,0,208,160,211,167,79,
+151,92,185,114,229,239,215,174,93,235,245,238,221,59,83,19,19,19,102,96,144,173,
+107,102,144,9,42,235,227,227,227,89,106,106,42,179,181,181,125,209,183,111,223,
+5,220,122,94,190,139,43,1,0,0,159,32,59,177,5,206,230,0,0,160,85,60,60,60,204,
+126,252,241,199,109,231,207,159,111,91,170,84,41,246,195,15,63,176,142,29,59,50,
+75,75,75,209,166,240,17,41,41,41,236,233,211,167,108,235,214,173,108,223,190,
+125,21,118,238,220,185,150,7,35,177,252,165,29,162,109,1,0,84,142,162,20,81,2,0,
+0,208,148,62,156,169,169,169,100,103,103,39,185,187,187,75,160,58,60,232,144,
+126,251,237,55,42,216,37,91,91,91,247,213,171,87,23,22,125,31,0,0,159,66,202,78,
+108,33,202,32,33,0,1,0,0,13,178,176,176,248,75,95,95,95,58,120,240,96,198,250,
+51,168,0,5,33,157,58,117,146,244,244,244,82,120,144,87,67,244,125,0,0,124,10,
+41,27,177,5,102,193,2,0,0,173,18,25,25,105,92,161,66,5,214,174,93,59,81,86,200,
+1,26,215,57,120,240,96,26,15,34,133,134,134,154,137,242,3,0,168,26,2,16,0,0,
+208,26,134,134,134,52,235,137,169,149,149,21,43,88,176,160,40,59,228,80,185,114,
+229,232,70,17,29,29,141,0,4,0,52,14,1,8,0,0,104,141,148,148,20,125,126,99,130,
+217,23,213,43,109,255,210,76,152,166,162,188,0,0,170,134,89,176,0,0,64,107,164,
+166,166,210,133,49,99,9,227,15,53,129,162,16,19,81,38,0,128,79,145,157,11,72,
+104,1,1,0,0,109,66,229,146,145,40,19,168,140,177,40,3,0,128,170,33,0,1,0,0,109,
+34,183,128,100,231,10,26,168,4,130,61,0,208,56,4,32,0,0,160,77,168,92,50,20,
+101,2,149,65,11,8,0,104,28,2,16,0,0,208,38,212,244,129,0,68,115,176,175,1,64,
+227,16,128,0,0,128,54,65,11,136,102,161,5,4,0,52,14,1,8,0,0,104,19,4,32,154,133,
+125,13,0,26,135,0,4,0,0,180,9,117,193,194,20,241,154,131,125,13,0,26,135,0,4,0,
+0,180,9,2,16,205,194,190,6,0,141,67,0,2,0,0,218,4,1,136,102,97,95,3,128,198,
+225,196,3,0,249,218,205,155,55,205,198,142,29,235,228,230,230,86,128,63,52,72,
+77,77,165,62,239,148,104,240,45,173,129,96,146,118,223,36,195,125,229,235,198,
+233,238,231,214,57,51,133,167,228,116,183,148,146,210,221,38,166,165,132,116,41,
+78,161,80,196,25,27,27,199,154,153,153,197,244,238,221,219,107,195,134,13,55,
+50,125,119,237,66,1,136,190,40,19,168,12,246,53,0,104,92,110,21,166,0,0,106,37,
+73,146,105,175,94,189,90,245,235,215,239,151,224,224,224,70,252,49,43,88,176,
+32,51,52,212,173,49,183,137,137,137,236,237,219,183,236,228,201,147,113,3,7,14,
+252,118,247,238,221,107,181,124,145,63,4,32,154,133,122,0,0,104,28,78,60,0,144,
+47,141,26,53,106,220,141,27,55,22,240,224,67,191,75,151,46,108,240,224,193,172,
+102,205,154,204,202,202,138,233,233,233,70,239,211,212,212,84,22,18,18,194,14,
+29,58,196,230,207,159,111,122,229,202,149,49,60,237,224,47,197,136,182,205,69,
+8,64,52,11,245,0,0,208,60,186,42,40,74,0,0,121,201,136,17,35,90,91,90,90,70,
+152,152,152,72,155,55,111,150,82,82,82,36,93,215,188,121,115,201,208,208,240,
+109,187,118,237,236,68,251,47,151,149,224,233,77,163,70,141,68,255,18,124,6,87,
+87,87,42,220,41,45,21,124,31,0,0,42,167,27,151,1,1,64,103,220,184,113,195,248,
+234,213,171,179,35,34,34,44,22,44,88,192,134,15,31,174,51,45,30,31,147,156,156,
+204,120,16,70,251,33,186,80,161,66,241,162,252,90,64,171,251,136,229,51,216,215,
+0,160,113,186,93,42,3,64,190,243,219,111,191,181,241,243,243,107,220,162,69,
+11,234,134,37,202,174,19,188,189,189,153,167,167,39,5,32,207,86,173,90,21,34,
+202,15,0,0,160,78,8,64,0,32,95,225,149,237,225,241,241,241,250,95,126,249,37,51,
+53,53,21,101,215,9,167,79,159,102,17,17,17,204,214,214,214,189,120,241,226,201,
+162,252,0,0,0,234,132,0,4,0,242,141,153,51,103,150,11,8,8,104,93,182,108,89,214,
+181,107,87,81,118,157,16,19,19,195,118,239,222,205,204,205,205,83,235,212,169,
+115,80,148,31,0,0,64,221,16,128,0,64,190,113,231,206,157,161,225,225,225,86,61,
+122,244,96,69,139,22,21,101,215,9,183,110,221,98,119,239,222,101,214,214,214,
+183,182,109,219,230,38,202,15,0,0,160,110,8,64,0,32,95,152,55,111,158,177,135,
+135,71,7,35,35,35,54,112,224,64,81,118,157,177,119,239,94,249,214,202,202,106,3,
+45,76,40,200,14,0,0,160,118,8,64,0,32,95,184,121,243,166,67,112,112,112,195,
+250,245,235,179,186,117,235,138,178,235,132,160,160,32,118,226,196,9,90,128,241,
+205,144,33,67,206,137,242,3,0,0,104,2,2,16,0,200,243,36,73,82,4,4,4,12,79,74,74,
+50,236,219,183,47,51,54,54,22,109,162,19,206,159,63,207,248,126,97,14,14,14,
+247,38,77,154,228,47,202,15,0,0,160,9,8,64,0,32,207,91,176,96,65,17,127,127,255,
+62,150,150,150,140,198,127,0,147,215,253,160,193,231,10,133,34,169,92,185,114,
+127,137,242,3,0,0,104,10,2,16,0,200,211,36,73,98,174,174,174,61,222,188,121,83,
+162,67,135,14,172,66,133,10,162,77,116,194,131,7,15,216,213,171,87,89,217,178,
+101,95,180,104,209,226,162,40,63,0,0,128,166,32,0,1,128,188,78,241,234,213,171,
+17,10,133,66,111,208,160,65,162,188,58,227,224,193,131,52,5,175,84,170,84,169,
+29,99,198,140,137,17,229,7,0,0,208,20,4,32,0,144,167,141,26,53,170,154,143,143,
+143,131,173,173,45,115,114,114,18,101,215,9,209,209,209,114,0,82,160,64,129,56,
+27,27,155,221,162,252,0,0,0,154,132,0,4,0,242,180,219,183,111,119,137,138,138,
+42,212,191,127,127,154,237,73,148,93,39,92,185,114,133,61,126,252,152,241,224,
+227,218,254,253,251,125,69,249,1,0,0,52,9,1,8,0,228,89,59,118,236,176,124,251,
+246,237,87,230,230,230,140,102,191,130,247,99,98,118,238,220,201,244,245,245,89,
+195,134,13,143,43,20,138,100,209,54,0,0,0,154,132,0,4,0,242,172,109,219,182,213,
+9,13,13,173,214,162,69,11,86,189,122,117,81,118,157,224,235,235,203,206,156,
+57,195,44,44,44,124,235,215,175,191,71,148,31,0,0,64,211,16,128,0,64,158,245,
+252,249,243,1,241,241,241,108,192,128,1,204,192,192,64,148,93,39,28,63,126,156,
+189,125,251,150,85,174,92,249,226,196,137,19,95,139,242,3,0,0,104,26,2,16,0,200,
+147,166,76,153,82,252,205,155,55,157,75,151,46,205,58,118,236,40,202,174,19,40,
+24,219,179,103,15,13,62,151,26,54,108,120,72,148,31,0,0,32,55,32,0,1,128,60,
+233,238,221,187,253,163,162,162,74,117,237,218,149,89,91,91,139,178,235,132,219,
+183,111,179,59,119,238,48,30,148,61,250,253,247,223,175,136,242,3,0,0,228,6,4,
+32,0,144,231,172,92,185,210,216,219,219,187,183,161,161,33,195,218,31,255,216,
+191,127,191,188,2,186,141,141,205,54,35,35,163,104,81,126,0,0,128,220,128,0,4,0,
+180,142,191,191,191,105,86,175,223,187,119,175,197,155,55,111,154,214,174,93,
+155,213,175,95,63,171,172,185,38,57,89,179,147,79,133,132,132,176,163,71,143,50,
+75,75,203,136,158,61,123,158,16,229,207,77,15,31,62,52,146,36,9,229,15,0,128,
+142,66,1,0,0,90,199,221,221,189,205,215,95,127,61,110,193,130,5,153,46,236,113,
+235,214,173,118,241,241,241,70,253,250,245,99,38,38,38,153,101,201,53,175,95,
+191,102,255,251,223,255,216,190,125,251,228,233,112,105,70,42,63,63,63,246,251,
+239,191,203,173,19,234,114,233,210,37,249,239,240,0,228,212,132,9,19,30,137,242,
+231,38,125,125,253,178,191,254,250,235,98,254,57,237,69,121,243,139,216,216,88,
+54,107,214,44,22,20,20,196,46,95,190,204,182,111,223,46,218,4,0,32,223,66,0,2,
+0,90,231,229,203,151,87,220,220,220,198,46,91,182,204,181,91,183,110,35,188,
+189,189,63,4,34,51,102,204,48,9,12,12,236,85,184,112,97,214,187,119,239,172,222,
+38,87,92,187,118,141,174,240,203,171,178,151,43,87,142,186,67,49,254,121,229,
+217,169,82,83,83,69,155,231,8,189,239,182,109,219,152,66,161,72,169,87,175,222,
+65,126,43,218,36,87,149,44,89,210,251,209,163,71,150,251,247,239,191,222,190,
+125,251,229,139,23,47,174,44,218,38,175,163,117,89,104,170,104,90,179,198,195,
+195,131,93,189,122,85,180,9,0,64,190,133,0,4,0,180,206,184,113,227,34,107,213,
+170,181,32,34,34,194,241,194,133,11,27,218,181,107,119,165,123,247,238,223,196,
+197,197,89,132,133,133,125,29,21,21,85,158,63,199,108,109,109,69,111,149,45,49,
+49,49,236,143,63,254,144,167,243,253,229,151,95,216,187,119,239,216,161,67,135,
+104,161,67,249,117,90,91,131,90,48,220,221,221,217,252,249,243,229,215,201,95,
+127,253,37,15,252,86,10,13,13,149,3,129,200,200,72,230,229,229,197,18,18,18,88,
+98,98,162,92,249,164,150,26,10,12,232,241,134,13,27,216,136,17,35,216,130,5,11,
+88,120,120,120,166,159,233,83,208,170,231,84,161,229,251,35,136,7,108,46,162,
+252,185,141,7,143,82,143,30,61,22,154,154,154,74,252,251,157,176,124,249,242,27,
+20,136,240,239,160,26,15,216,146,120,22,73,244,30,170,116,243,230,77,54,106,
+212,40,54,108,216,48,118,246,236,89,249,57,250,142,231,205,155,39,31,19,115,230,
+204,145,167,54,166,239,110,197,138,21,242,177,49,97,194,4,182,110,221,58,118,
+253,250,117,54,126,252,120,246,253,247,223,203,173,95,252,216,100,171,87,175,
+150,91,192,70,142,28,201,22,45,90,196,162,163,163,153,158,158,158,124,156,81,43,
+24,141,93,50,50,50,146,255,206,147,39,79,216,244,233,211,229,86,179,243,231,
+207,103,245,49,1,0,242,13,4,32,0,160,54,6,6,6,116,142,161,5,58,140,121,162,113,
+29,5,120,178,224,201,82,148,120,176,113,185,108,217,178,158,252,150,249,248,
+248,212,226,149,179,245,13,27,54,188,251,232,209,163,37,146,36,25,124,241,197,
+23,153,253,201,79,70,43,135,83,69,243,239,191,255,102,99,199,142,165,191,197,
+126,251,237,55,86,177,98,69,57,216,112,117,117,101,63,255,252,51,227,193,144,
+252,28,205,50,69,193,202,225,195,135,217,174,93,187,88,153,50,101,62,188,87,129,
+2,5,88,149,42,85,228,86,143,242,229,203,203,99,50,104,123,90,163,132,254,14,5,
+34,75,150,44,97,23,47,94,148,43,187,20,176,80,69,246,115,199,139,28,60,120,80,
+174,220,86,168,80,225,218,119,223,125,71,205,44,194,253,155,219,105,208,160,65,
+193,85,171,86,61,68,251,196,223,223,223,242,210,165,75,19,150,46,93,234,202,247,
+231,18,246,254,152,209,136,231,207,159,203,223,123,147,38,77,24,15,114,229,64,
+226,217,179,103,242,119,78,221,165,166,76,153,34,183,96,77,157,58,149,209,177,
+72,1,197,233,211,167,229,169,159,255,252,243,79,185,91,21,5,195,158,158,158,
+108,213,170,85,242,84,200,63,253,244,19,115,113,113,97,212,69,144,90,196,232,56,
+74,74,74,98,107,215,174,149,131,20,10,70,232,152,120,243,230,13,5,219,204,206,
+206,142,209,108,110,51,103,206,100,231,206,157,19,125,100,85,163,223,166,240,
+251,74,75,133,120,162,214,72,51,158,168,239,35,69,81,250,252,119,170,221,77,110,
+0,160,117,52,118,146,7,128,252,141,87,196,106,159,57,115,166,175,175,175,175,
+69,241,226,197,13,121,133,56,153,87,198,140,121,197,203,132,87,176,141,121,162,
+91,211,148,148,20,19,158,140,233,74,176,68,181,242,143,216,179,103,79,10,175,
+208,23,87,62,166,202,159,135,135,71,69,186,95,185,114,101,214,170,85,171,143,
+109,250,73,232,74,55,85,40,215,175,95,207,234,213,171,199,170,85,171,198,30,60,
+120,192,28,29,29,229,43,219,116,5,188,65,131,6,236,199,31,127,100,166,166,166,
+108,241,226,197,172,79,159,62,242,122,27,91,183,110,101,37,74,148,248,240,94,
+102,102,102,172,70,141,26,242,213,114,94,41,147,3,14,229,2,137,116,159,158,63,
+112,224,128,124,181,155,174,128,55,107,214,140,241,128,65,110,97,161,224,38,39,
+40,240,160,217,175,44,45,45,89,112,112,112,187,196,196,196,235,252,62,237,218,
+84,46,253,45,221,145,248,119,144,156,182,219,165,12,183,25,239,171,29,15,58,44,
+148,247,41,8,227,129,72,17,254,63,12,163,199,154,234,70,70,93,227,40,0,24,62,
+124,184,252,152,31,187,114,96,120,255,254,125,57,200,44,86,172,24,77,107,204,
+186,117,235,38,143,177,41,90,180,40,155,52,105,146,220,157,138,142,1,154,4,161,
+71,143,30,114,171,215,201,147,39,229,224,130,182,161,64,134,142,1,234,42,56,
+121,242,100,249,88,82,182,130,17,106,5,161,96,131,254,111,58,102,104,59,58,6,
+246,238,221,203,218,183,111,159,197,39,86,185,158,60,213,206,42,3,125,102,254,
+249,244,248,49,156,196,83,60,37,126,92,43,83,2,63,102,18,248,111,50,217,216,216,
+216,144,7,109,113,13,27,54,12,236,213,171,215,238,111,190,249,198,63,171,247,5,
+0,221,133,0,4,0,62,11,205,102,212,182,109,219,63,14,29,58,52,156,87,188,158,
+181,105,211,230,162,131,131,195,83,94,249,122,201,43,36,113,60,0,73,228,129,72,
+34,15,32,18,163,162,162,146,120,37,60,145,87,228,18,255,254,251,239,36,126,251,
+209,65,17,11,22,44,40,178,123,247,238,139,238,238,238,197,232,113,193,130,5,229,
+254,243,188,130,202,250,246,237,43,87,236,84,129,186,199,80,165,187,72,145,34,
+242,99,170,128,82,96,64,104,150,45,186,250,77,21,84,10,62,8,181,120,80,75,71,88,
+88,152,28,172,100,68,21,202,244,131,205,149,21,122,170,196,209,223,162,138,234,
+173,91,183,228,43,239,244,28,181,132,208,251,229,20,181,176,208,152,147,38,77,
+154,60,94,189,122,245,232,215,175,95,71,243,125,158,194,3,145,148,132,132,132,
+228,180,219,84,190,255,83,120,176,146,226,230,230,22,207,239,75,177,177,177,18,
+127,44,209,253,180,199,20,204,72,252,51,74,212,117,76,221,168,133,168,110,221,
+186,27,142,29,59,86,149,30,83,160,102,107,107,27,85,170,84,169,163,151,47,95,
+238,202,247,155,106,190,96,1,58,158,248,223,252,240,152,190,123,106,229,226,199,
+174,124,188,17,250,108,244,93,209,126,161,227,160,80,161,66,242,243,20,68,210,
+113,169,164,28,227,67,207,89,89,89,201,247,41,48,164,96,131,94,75,31,220,209,
+251,209,223,166,46,120,202,241,65,116,108,81,48,162,97,135,121,154,158,85,6,254,
+219,80,240,64,203,128,7,72,70,252,55,110,104,97,97,97,196,131,109,67,30,80,241,
+93,96,100,200,3,18,67,126,220,88,60,123,246,172,252,203,151,47,107,241,244,245,
+95,127,253,53,133,159,11,126,186,120,241,226,198,172,222,27,0,116,19,2,16,0,
+200,177,169,83,167,26,242,74,201,242,74,149,42,13,235,212,169,211,128,133,11,23,
+170,108,250,87,94,145,30,238,229,229,101,71,149,64,94,49,245,236,220,185,243,33,
+23,23,151,233,188,194,102,76,1,200,231,162,105,107,169,18,72,129,7,85,42,233,
+138,55,141,41,161,49,28,52,72,248,215,95,127,149,187,225,208,45,117,165,162,110,
+83,188,66,197,150,46,93,42,183,122,80,87,43,106,21,161,113,32,116,245,90,132,
+42,152,84,41,165,69,19,249,255,34,95,53,167,150,15,234,150,195,43,116,162,205,
+51,69,239,73,221,192,168,117,133,127,166,21,53,107,214,204,51,35,155,215,175,
+95,223,112,220,184,113,221,40,88,227,199,80,36,15,70,246,245,238,221,123,197,
+204,153,51,95,241,151,59,137,182,87,21,170,240,83,235,23,5,142,212,202,70,99,
+115,104,60,8,5,27,212,21,171,86,173,90,242,177,65,65,4,117,173,75,107,185,147,
+183,165,219,140,45,70,244,152,186,89,81,43,90,163,70,141,228,174,125,20,212,82,
+80,146,62,47,189,15,5,176,244,252,220,185,115,229,239,144,198,142,40,3,93,13,
+162,104,51,42,171,12,20,108,211,108,110,217,197,255,79,163,177,99,199,78,229,
+251,96,109,229,202,149,245,249,126,92,39,218,6,0,116,11,2,16,0,200,17,106,249,
+224,65,199,252,114,229,202,13,227,21,168,238,245,234,213,187,40,218,38,187,78,
+156,56,81,124,222,188,121,83,121,197,205,179,69,139,22,171,150,45,91,182,139,87,
+10,29,238,220,185,243,83,235,214,173,85,114,149,152,191,167,124,5,155,250,240,
+83,159,125,26,16,78,149,44,234,203,79,253,252,151,47,95,46,7,11,52,40,189,66,
+133,10,242,56,17,170,36,82,23,42,154,66,149,186,217,208,56,0,218,134,2,10,37,
+186,90,78,87,207,9,189,63,85,92,41,64,81,94,81,167,191,69,99,2,46,92,184,32,15,
+64,238,217,179,167,220,117,43,39,40,128,225,251,138,130,143,119,195,134,13,187,
+64,131,163,243,2,94,161,213,251,254,251,239,103,196,199,199,167,12,28,56,112,
+83,191,126,253,150,247,234,213,203,157,186,31,113,212,167,77,51,253,175,56,254,
+119,229,174,80,252,115,200,1,29,125,175,45,91,182,100,95,126,249,165,60,62,135,
+90,193,40,0,153,49,99,134,28,172,210,247,168,236,70,69,247,233,251,37,233,191,
+119,66,199,19,189,23,181,78,209,152,33,58,22,232,117,229,248,15,122,15,26,59,66,
+221,188,250,247,239,47,183,148,208,152,19,58,238,52,76,229,251,154,255,111,137,
+252,230,183,157,59,119,38,242,223,217,42,30,212,189,219,184,113,227,62,209,118,
+0,160,67,148,87,112,178,74,0,0,25,241,74,186,189,163,163,227,219,49,99,198,
+168,124,46,92,94,33,236,55,121,242,228,169,188,66,42,55,13,240,243,144,65,227,
+198,141,143,208,221,77,155,54,73,170,240,250,245,107,233,205,155,55,31,30,191,
+124,249,82,114,118,118,150,2,2,2,228,199,175,94,189,146,187,35,41,249,249,249,
+73,33,33,33,82,112,112,240,191,222,131,82,122,180,13,175,96,203,247,223,190,
+125,43,69,70,70,82,151,38,121,91,229,88,140,23,47,94,72,60,112,144,120,0,34,125,
+14,94,89,165,19,180,212,189,123,119,141,143,92,254,28,252,255,174,186,100,201,
+146,117,75,151,46,173,147,201,203,20,128,132,53,106,212,72,244,239,171,12,125,
+63,215,175,95,151,110,221,186,37,189,31,34,243,30,15,70,165,147,39,79,202,223,
+23,73,73,73,145,120,144,32,37,37,37,201,143,233,248,137,138,138,146,239,211,
+247,78,199,2,29,55,60,24,151,124,124,124,164,139,23,47,254,107,91,58,118,104,91,
+218,70,121,140,208,99,87,87,87,137,31,243,114,151,56,77,161,191,201,222,207,54,
+182,44,147,239,64,101,120,112,254,27,223,31,30,92,206,251,25,2,64,254,35,33,0,1,
+128,28,168,93,187,246,88,39,39,167,231,252,28,161,242,150,84,94,57,251,231,82,
+50,247,243,207,63,219,89,91,91,71,217,216,216,124,8,16,116,93,98,98,162,212,
+162,69,11,201,216,216,56,101,214,172,89,170,153,18,76,67,30,60,120,96,152,197,
+203,26,15,64,84,137,2,89,7,7,7,121,92,141,54,211,84,0,178,123,247,110,187,250,
+245,235,71,54,107,214,44,203,129,238,0,160,91,196,29,151,1,0,50,17,24,24,104,97,
+105,105,233,162,80,40,62,111,14,217,76,88,89,89,125,24,5,205,235,74,116,197,124,
+80,72,72,72,129,46,93,186,200,253,240,129,201,235,143,208,250,21,21,43,86,244,
+159,58,117,234,113,81,126,109,82,163,70,141,36,81,158,188,138,186,93,81,55,42,
+229,236,103,186,110,224,192,129,47,205,204,204,30,241,160,179,144,40,47,0,232,
+14,4,32,0,144,35,22,22,22,198,213,170,85,123,42,202,247,185,30,61,122,100,230,
+227,227,51,152,42,116,170,90,251,35,63,160,169,119,105,160,180,131,131,195,190,
+130,5,11,70,139,242,131,102,208,32,114,26,167,132,0,228,61,186,64,81,169,82,37,
+47,125,125,125,116,193,2,128,15,16,128,0,64,142,68,69,69,41,120,16,226,43,202,
+247,185,254,250,235,175,70,222,222,222,229,105,224,121,227,198,141,69,217,117,2,
+205,178,116,228,200,17,26,184,28,89,179,102,205,205,162,252,0,185,73,79,79,207,
+155,159,47,52,62,189,23,0,104,47,4,32,0,144,35,137,137,137,198,10,133,66,237,11,
+70,220,185,115,167,91,100,100,164,49,205,82,68,11,185,1,99,206,206,206,242,12,
+88,213,170,85,187,251,227,143,63,122,137,242,3,228,166,148,148,148,132,164,164,
+36,4,32,0,240,1,2,16,0,200,17,90,209,156,7,33,106,237,203,127,234,212,169,50,
+175,95,191,254,130,166,40,165,233,82,225,253,218,31,59,118,236,144,167,127,109,
+209,162,197,73,30,4,170,245,59,0,248,92,180,32,38,191,193,213,3,0,248,0,1,8,0,
+228,8,175,8,27,165,85,44,212,102,211,166,77,78,129,129,129,214,109,219,182,101,
+149,42,85,18,101,215,9,180,56,222,165,75,151,104,245,110,255,214,173,91,239,17,
+229,7,200,109,180,222,11,191,49,18,229,3,0,221,129,0,4,0,114,132,7,32,134,234,
+12,64,36,73,82,60,120,240,160,95,82,82,18,27,48,96,128,40,187,206,160,193,231,
+209,209,209,52,147,212,133,246,237,219,7,136,242,3,228,182,180,243,196,191,166,
+214,6,0,221,134,0,4,0,114,132,7,8,106,13,64,126,249,229,151,42,193,193,193,45,
+108,109,109,153,147,147,147,40,187,78,136,140,140,148,87,98,167,46,105,109,218,
+180,57,44,202,15,160,13,18,19,19,233,60,129,22,16,0,248,0,1,8,0,228,72,90,11,72,
+138,40,95,78,221,189,123,119,88,68,68,68,161,158,61,123,178,34,69,138,136,178,
+235,132,107,215,174,49,15,15,15,86,181,106,85,175,73,147,38,93,19,229,7,208,6,
+60,0,65,23,44,0,248,23,4,32,0,144,35,212,2,146,214,183,91,229,120,69,187,224,
+227,199,143,187,25,27,27,99,237,143,52,180,32,227,190,125,251,152,190,190,62,
+171,92,185,242,22,133,66,241,86,180,13,128,54,72,72,72,72,101,8,64,0,32,29,4,32,
+0,144,35,188,66,108,160,174,0,228,240,225,195,93,131,130,130,170,55,105,210,
+132,57,58,58,138,178,235,4,63,63,63,118,250,244,105,90,9,62,186,127,255,254,39,
+68,249,1,180,69,90,11,136,161,40,31,0,232,14,4,32,0,144,19,10,10,64,226,226,
+226,84,30,128,60,121,242,196,192,197,197,165,43,173,242,61,104,208,32,172,40,
+157,230,212,169,83,44,36,36,132,149,43,87,238,84,231,206,157,61,68,249,1,180,69,
+90,87,77,252,144,1,224,3,4,32,0,144,35,234,10,64,86,175,94,93,204,219,219,187,
+173,181,181,53,235,212,169,147,40,187,78,160,153,192,118,239,222,77,11,49,166,
+52,105,210,228,176,66,161,144,68,219,0,104,139,196,196,68,234,130,133,0,4,0,62,
+64,0,2,0,57,65,45,32,250,241,241,241,42,175,8,123,121,121,245,13,15,15,47,222,
+185,115,103,90,235,66,148,93,39,184,185,185,177,155,55,111,210,224,243,224,113,
+227,198,93,18,229,7,208,38,8,64,0,32,35,4,32,0,144,83,250,170,110,1,137,140,140,
+52,240,245,245,29,70,3,173,49,248,252,31,52,248,156,87,226,104,60,204,177,178,
+101,203,190,22,229,7,208,38,8,64,0,32,35,4,32,0,144,35,212,2,194,3,144,84,81,
+190,79,49,114,228,200,58,60,0,169,86,189,122,117,214,188,121,115,81,118,157,16,
+26,26,202,14,29,58,196,172,172,172,18,234,214,173,187,9,221,175,32,175,73,74,
+74,66,0,2,0,255,130,0,4,0,114,66,238,130,21,27,27,171,210,0,228,209,163,71,117,
+249,123,154,211,218,31,38,38,38,162,236,58,225,196,137,19,236,197,139,23,204,
+222,222,222,109,226,196,137,15,69,249,1,180,77,90,0,130,250,6,0,124,128,19,2,0,
+228,148,158,170,3,144,184,184,184,218,180,246,71,235,214,173,69,89,117,66,96,96,
+32,155,55,111,30,43,84,168,16,107,213,170,213,10,133,66,17,47,218,6,64,219,36,
+38,38,82,171,157,190,40,31,0,232,14,4,32,0,144,35,18,199,3,6,149,118,7,138,143,
+143,47,162,167,167,199,204,205,205,69,89,243,61,47,47,47,54,116,232,80,185,245,
+195,209,209,113,239,236,217,179,15,138,182,1,208,70,105,45,32,0,0,31,104,91,159,
+76,10,136,20,233,110,51,75,44,147,199,185,69,74,75,233,239,103,150,82,211,221,
+2,228,27,209,209,209,42,61,166,43,85,170,244,196,197,197,69,190,234,63,99,198,
+12,102,107,107,203,12,13,117,103,253,50,30,208,201,1,199,133,11,23,216,186,117,
+235,152,191,191,63,43,93,186,244,62,158,134,43,20,138,4,209,246,249,136,74,3,91,
+200,146,218,247,53,2,16,0,200,40,87,2,144,35,71,142,20,90,181,106,85,191,107,
+215,174,85,136,141,141,53,147,36,201,148,63,109,146,150,140,50,36,195,180,100,
+144,46,233,167,37,186,159,91,173,56,116,66,77,73,75,201,233,110,41,37,241,148,
+152,238,150,18,117,157,8,76,187,149,243,215,169,83,39,120,225,194,133,59,219,
+181,107,23,243,223,183,7,208,126,169,169,170,173,87,52,107,214,108,79,112,112,
+240,224,67,135,14,149,63,115,230,12,43,92,184,48,163,22,17,93,145,156,156,204,
+34,34,34,228,64,196,202,202,42,185,85,171,86,187,251,247,239,63,230,127,255,
+251,159,46,117,189,194,197,26,205,82,251,190,230,101,188,40,11,0,232,24,141,6,
+32,252,36,100,200,11,210,182,211,166,77,251,221,203,203,203,158,78,74,37,75,
+150,100,22,22,22,140,166,221,204,239,148,39,97,90,225,153,250,118,123,120,120,
+176,95,126,249,165,207,221,187,119,123,212,173,91,87,151,42,24,0,153,154,51,103,
+206,195,37,75,150,180,219,189,123,119,31,95,95,223,50,252,119,82,156,253,251,2,
+132,126,38,73,239,35,73,19,173,164,230,6,6,6,5,120,224,16,204,178,247,183,168,
+178,151,244,177,196,207,131,201,21,42,84,72,182,183,183,127,91,191,126,253,67,
+252,252,112,241,242,229,203,89,188,93,190,132,0,68,179,176,175,1,64,243,168,82,
+44,74,170,50,116,232,208,46,182,182,182,146,158,158,158,212,179,103,79,233,228,
+201,147,82,64,64,128,68,3,212,82,83,83,117,38,69,69,69,73,87,175,94,149,106,212,
+168,65,251,34,166,125,251,246,182,162,125,7,160,101,168,226,127,133,167,10,162,
+140,185,224,99,221,55,85,154,248,121,75,209,181,107,215,117,60,80,240,228,172,
+68,249,211,37,200,26,5,157,65,141,26,53,146,64,125,92,93,93,149,93,132,23,9,
+190,15,85,232,197,211,118,81,38,0,208,29,26,235,219,176,96,193,2,199,203,151,47,
+111,162,62,205,127,254,249,39,59,112,224,0,163,149,142,109,108,108,228,62,222,
+10,133,66,103,82,129,2,5,168,171,137,188,208,26,15,72,76,249,62,169,41,218,127,
+0,144,109,89,141,199,82,89,58,118,236,88,141,39,79,158,124,241,232,209,35,251,
+173,91,183,14,18,229,79,151,32,107,180,143,112,85,94,115,176,175,1,64,227,52,18,
+128,60,126,252,216,224,248,241,227,211,95,189,122,85,124,220,184,113,108,226,
+196,137,58,209,229,74,228,245,107,121,65,227,56,99,99,227,23,162,188,0,160,61,
+36,73,210,59,112,224,192,20,95,95,223,2,49,49,49,204,217,217,121,194,253,251,
+247,139,138,182,131,108,67,165,88,115,176,175,1,64,227,52,18,128,236,217,179,
+167,58,15,66,122,80,107,199,180,105,211,68,217,117,2,85,90,168,111,183,161,161,
+97,92,106,106,170,175,40,63,0,104,143,163,71,143,214,184,115,231,78,63,26,52,
+78,158,60,121,82,105,247,238,221,95,8,54,131,236,65,11,136,102,97,95,3,128,198,
+105,36,0,185,116,233,82,151,240,240,240,2,125,250,244,145,187,92,1,99,55,111,
+222,100,15,30,60,96,214,214,214,30,195,135,15,199,44,88,0,121,132,36,73,138,189,
+123,247,78,244,245,245,53,83,62,23,25,25,201,92,92,92,38,4,4,4,20,206,106,91,
+200,54,84,138,53,7,251,26,0,52,78,237,1,200,227,199,143,11,135,134,134,14,49,50,
+50,98,67,134,12,17,101,215,25,187,119,239,102,41,41,41,172,102,205,154,39,166,
+76,153,146,36,202,15,0,218,97,227,198,141,117,110,220,184,209,159,126,191,180,
+66,185,185,185,185,100,106,106,74,179,218,85,90,178,100,201,48,209,246,32,68,
+45,32,41,162,76,160,50,201,162,12,0,0,170,166,246,0,228,143,63,254,104,25,20,
+20,84,165,65,131,6,172,118,237,218,162,236,58,129,166,224,61,121,242,36,179,
+180,180,12,108,221,186,245,1,81,126,0,208,14,110,110,110,138,195,135,15,127,171,
+80,40,140,191,250,234,171,131,213,170,85,155,111,96,96,112,108,244,232,209,191,
+217,217,217,189,113,118,118,158,116,244,232,209,34,162,247,129,44,161,11,150,
+102,97,95,3,128,198,169,125,29,16,15,15,143,94,145,145,145,138,126,253,250,233,
+212,138,198,89,161,5,214,120,80,198,170,86,173,122,102,234,212,169,126,162,252,
+0,160,53,28,91,181,106,101,242,197,23,95,116,31,60,120,240,25,30,136,244,228,
+207,21,91,186,116,233,143,15,31,62,220,201,131,147,41,198,198,198,61,248,115,
+155,69,111,4,31,133,22,16,205,66,11,8,0,104,156,90,3,144,197,139,23,91,47,88,
+176,160,45,45,54,216,179,103,79,81,118,157,64,131,86,119,237,218,197,120,37,133,
+213,173,91,119,223,147,39,79,68,155,0,128,150,48,53,53,125,50,117,234,212,254,
+60,240,72,77,235,82,106,196,222,175,137,194,170,87,175,238,201,111,70,188,125,
+251,246,195,216,16,200,17,4,32,154,133,125,13,0,26,167,214,46,88,247,238,221,27,
+20,17,17,81,170,67,135,14,172,76,153,50,162,236,58,129,86,63,191,122,245,42,
+237,15,239,9,19,38,220,17,229,7,0,237,81,181,106,213,4,10,62,178,202,83,164,72,
+145,216,172,94,7,33,4,32,154,133,125,13,0,26,167,182,0,36,42,42,202,216,205,205,
+173,87,106,106,170,188,224,30,188,71,11,48,38,38,38,210,236,87,155,27,53,106,20,
+38,202,15,0,160,99,40,0,65,183,32,205,193,36,40,0,160,113,106,11,64,150,46,93,
+218,44,48,48,176,137,163,163,35,107,210,164,137,40,187,78,160,133,7,247,239,223,
+207,10,23,46,28,221,172,89,179,99,162,252,0,0,186,70,95,95,95,14,64,36,9,139,
+198,171,147,114,255,42,20,10,4,123,0,160,113,106,9,64,104,158,252,43,87,174,208,
+224,115,253,222,189,123,179,2,5,10,136,54,209,9,174,174,174,204,203,203,139,89,
+89,89,157,95,176,96,193,3,81,126,0,0,93,211,185,115,103,201,196,196,36,37,60,
+60,156,197,198,162,55,155,186,208,108,140,164,116,233,210,232,130,5,0,26,167,
+150,0,228,231,159,127,182,124,250,244,105,231,130,5,11,50,90,124,16,222,95,109,
+162,181,63,244,245,245,83,203,149,43,183,75,161,80,136,54,1,0,208,57,171,86,173,
+74,178,181,181,141,241,241,241,97,206,206,206,162,236,144,3,84,30,237,217,179,
+135,233,233,233,177,54,109,218,68,138,242,3,0,168,154,90,2,144,135,15,31,182,
+246,247,247,47,215,178,101,75,86,173,90,53,81,118,157,240,252,249,115,118,225,
+194,5,86,188,120,241,144,9,19,38,92,16,229,7,0,208,69,101,202,148,73,104,212,
+168,209,17,154,182,125,198,140,25,242,185,19,84,107,245,234,213,236,216,177,99,
+172,82,165,74,47,91,183,110,125,69,148,31,0,64,213,84,62,13,47,47,44,244,135,14,
+29,58,134,223,213,163,193,231,184,210,255,30,157,236,169,75,129,147,147,211,
+169,94,189,122,189,19,229,7,0,208,85,107,214,172,217,17,28,28,60,244,212,169,83,
+13,187,119,239,206,38,79,158,204,120,69,153,198,207,137,54,133,143,160,9,97,
+168,11,240,142,29,59,216,250,245,235,169,43,176,212,167,79,159,63,134,13,27,22,
+40,218,22,0,64,213,84,30,128,108,223,190,189,60,15,66,234,148,42,85,138,209,
+244,187,192,88,124,124,188,60,251,149,145,145,81,66,233,210,165,215,138,242,3,0,
+232,50,126,174,140,56,125,250,244,0,125,125,253,45,206,206,206,78,99,198,140,97,
+22,22,22,88,204,246,51,69,71,71,179,132,132,4,102,103,103,23,217,187,119,239,
+197,243,230,205,91,49,127,254,124,209,102,0,0,42,167,242,0,228,216,177,99,29,
+222,189,123,103,57,104,208,32,186,194,34,202,174,19,110,221,186,197,238,222,189,
+203,42,84,168,224,54,121,242,100,15,186,2,5,0,249,215,196,137,19,75,62,127,254,
+60,213,214,214,214,44,40,40,40,188,112,225,194,101,171,86,173,26,54,125,250,
+244,0,209,182,100,209,162,69,150,17,17,17,118,125,251,246,117,175,93,187,118,
+150,211,164,86,171,86,205,164,108,217,178,182,103,207,158,125,148,85,190,188,
+166,83,167,78,47,37,73,106,63,97,194,132,238,252,252,233,228,230,230,102,18,25,
+25,73,17,8,37,90,252,209,32,45,233,103,72,122,31,73,249,165,57,62,53,139,68,51,
+90,165,100,72,244,28,29,67,201,165,75,151,78,174,85,171,86,0,63,174,246,15,31,
+62,252,209,226,197,139,51,123,127,0,0,181,83,105,0,226,227,227,99,214,174,93,
+187,175,232,42,213,128,1,3,68,217,117,6,13,246,163,21,208,235,212,169,115,174,
+94,189,122,9,162,252,0,144,119,241,74,179,222,144,33,67,230,151,40,81,194,39,
+36,36,164,85,201,146,37,23,233,235,235,47,52,51,51,219,203,95,206,214,229,102,
+127,127,255,150,97,97,97,123,151,79,38,3,0,0,32,0,73,68,65,84,163,163,163,203,
+241,135,193,89,229,125,252,248,113,233,212,212,212,77,252,110,163,172,242,229,
+69,10,133,130,42,206,7,211,18,124,166,87,175,94,201,233,196,137,19,162,172,0,0,
+106,165,210,0,228,135,31,126,104,24,26,26,90,167,65,131,6,140,87,180,69,217,117,
+2,175,128,200,227,63,138,21,43,246,182,89,179,102,123,246,238,221,43,218,4,0,
+242,168,169,83,167,26,180,104,209,162,152,185,185,121,131,82,165,74,121,134,135,
+135,219,84,169,82,229,69,245,234,213,15,219,216,216,220,94,177,98,133,147,165,
+165,165,201,158,61,123,244,56,51,30,156,156,88,187,118,109,252,246,237,219,203,
+237,220,185,211,41,57,57,57,245,255,254,239,255,46,109,222,188,57,57,38,38,38,
+37,42,42,170,0,223,102,84,173,90,181,206,242,243,135,223,214,173,91,135,190,
+123,247,238,254,164,73,147,30,204,155,55,175,181,167,167,167,45,207,243,218,205,
+205,45,145,254,254,165,75,151,140,246,239,223,223,137,7,48,69,29,28,28,206,46,
+92,184,240,149,232,51,3,0,0,104,154,202,2,16,90,251,163,73,147,38,131,120,97,
+168,215,175,95,63,102,108,108,44,218,68,39,156,57,115,134,5,4,4,80,235,135,203,
+248,241,227,159,76,152,48,65,180,9,0,228,81,109,218,180,169,203,207,129,155,110,
+223,190,93,209,192,192,96,90,88,88,88,50,15,66,190,222,183,111,95,159,122,245,
+234,197,220,189,123,183,106,72,72,200,23,22,22,22,87,120,190,250,207,159,63,95,
+126,249,242,229,85,243,231,207,63,199,131,143,119,10,133,162,216,180,105,211,
+134,183,110,221,122,45,223,78,242,242,242,42,194,95,95,91,160,64,129,158,60,0,
+241,191,126,253,250,242,160,160,160,153,47,94,188,168,201,223,107,77,177,98,197,
+110,68,70,70,58,242,96,198,143,159,131,13,58,116,232,240,71,66,66,66,243,194,
+133,11,135,156,60,121,114,84,203,150,45,7,185,184,184,120,139,62,55,0,0,128,38,
+169,108,26,222,245,235,215,151,14,12,12,236,79,227,62,186,118,237,42,202,254,89,
+226,226,226,228,46,77,52,171,71,102,104,144,29,229,161,215,105,190,115,74,41,41,
+154,95,107,41,49,49,81,158,113,196,200,200,72,170,85,171,214,14,94,185,192,210,
+190,0,249,88,231,206,157,111,250,251,251,47,25,62,124,184,17,191,95,60,38,38,
+230,219,191,254,250,107,38,45,202,26,27,27,155,26,17,17,65,231,165,123,167,78,
+157,234,50,114,228,200,115,134,134,134,45,151,46,93,218,57,32,32,64,239,210,165,
+75,29,198,142,29,219,186,93,187,118,5,138,20,41,82,141,231,75,78,74,74,146,248,
+182,137,241,241,241,116,2,83,240,247,139,229,193,69,17,55,55,183,105,229,202,
+149,91,116,248,240,225,54,21,42,84,88,202,131,29,197,198,141,27,235,188,123,247,
+238,43,30,148,204,115,116,116,156,89,180,104,209,2,252,220,243,139,232,51,3,0,0,
+104,154,202,90,64,78,158,60,217,150,23,188,22,3,7,14,100,188,96,20,101,207,17,
+10,36,54,111,222,204,246,239,223,207,230,206,157,203,182,108,217,194,102,207,
+158,205,120,97,253,33,207,253,251,247,25,181,50,76,159,62,157,61,120,240,128,53,
+106,212,136,153,153,153,201,125,94,105,27,77,162,191,127,237,218,53,154,58,242,
+81,239,222,189,79,111,218,180,73,180,73,190,211,163,71,143,42,103,206,156,41,
+199,131,49,61,186,66,203,159,50,74,75,198,233,146,9,79,166,116,203,131,52,163,
+180,199,70,233,94,163,251,52,240,52,175,15,34,165,0,84,57,40,52,99,162,190,238,
+212,141,38,145,239,39,186,77,72,75,241,148,248,126,137,229,199,113,44,175,92,
+198,124,251,237,183,110,147,38,77,202,114,92,0,228,142,97,195,134,205,188,112,
+225,66,15,254,155,151,94,188,120,161,168,83,167,206,247,60,192,120,76,99,25,104,
+74,114,90,248,141,7,7,201,252,126,202,190,125,251,2,120,224,96,111,99,99,211,
+245,249,243,231,222,252,57,154,158,251,29,255,254,27,142,30,61,186,23,207,107,
+200,83,10,127,158,142,3,58,118,10,242,160,196,132,43,198,3,151,178,60,223,45,
+250,155,197,139,23,191,195,243,116,226,1,140,5,15,86,140,249,223,29,195,207,197,
+201,9,9,9,175,204,205,205,177,136,6,232,148,193,131,7,87,63,125,250,116,121,30,
+172,155,243,223,128,57,123,95,182,80,82,150,55,70,105,229,140,50,81,185,100,200,
+254,153,208,32,253,228,6,121,157,178,204,161,148,196,254,61,41,129,50,37,100,40,
+115,40,197,241,125,20,199,203,156,24,43,43,171,152,137,19,39,222,255,238,187,
+239,130,50,253,11,0,57,164,146,0,132,255,208,13,170,86,173,42,47,121,62,100,200,
+16,181,173,253,65,45,10,188,208,102,212,197,171,116,233,210,236,246,237,219,
+242,115,233,157,59,119,142,209,20,192,52,103,60,229,41,81,162,4,187,113,227,6,
+45,142,248,159,247,50,50,50,98,234,68,83,239,82,75,76,131,6,13,142,116,237,218,
+53,78,148,63,63,185,126,253,122,49,30,28,254,159,179,179,243,96,94,8,88,82,151,
+60,94,217,18,109,6,31,65,193,55,181,236,189,124,249,146,241,10,173,31,47,12,22,
+115,127,161,85,77,187,140,27,55,238,114,88,88,216,40,126,62,252,53,60,60,252,11,
+30,40,78,174,88,177,98,224,201,147,39,63,84,102,232,187,36,252,220,16,195,239,
+27,7,7,7,159,42,88,176,224,31,87,174,92,169,200,207,85,149,107,215,174,61,166,
+75,151,46,23,66,66,66,82,248,182,252,107,79,136,240,244,244,52,190,121,243,102,
+3,111,111,239,2,181,106,213,10,230,207,249,241,183,232,19,29,29,125,101,228,
+200,145,93,121,160,98,201,183,243,121,240,224,193,27,254,25,214,125,245,213,87,
+7,121,48,180,132,231,213,167,139,32,0,249,221,221,187,119,173,230,205,155,183,
+224,204,153,51,3,222,190,125,91,144,202,28,30,128,139,54,131,143,80,150,57,254,
+254,254,108,229,202,149,254,223,126,251,237,18,110,25,202,28,80,21,149,212,8,
+231,207,159,95,155,23,182,109,105,213,243,230,205,155,139,178,231,24,181,98,60,
+122,244,136,157,63,127,158,213,173,91,151,153,154,154,254,43,216,121,250,244,41,
+59,116,232,144,252,163,113,119,119,151,243,58,58,58,202,115,199,43,231,143,167,
+31,19,255,17,49,63,63,63,154,22,151,77,153,50,133,217,216,216,124,236,79,230,
+24,63,1,178,35,71,142,80,235,71,92,135,14,29,78,187,184,184,136,54,201,55,248,
+255,109,48,119,238,220,149,252,127,238,79,173,83,212,26,213,177,99,71,76,203,
+252,25,148,139,136,109,223,190,157,102,85,43,187,107,215,174,21,201,201,201,116,
+165,106,189,104,91,208,156,221,187,119,75,252,156,116,61,52,52,52,194,194,194,
+226,76,147,38,77,174,242,130,92,159,63,247,154,191,28,205,19,181,114,188,73,203,
+30,157,146,146,242,118,242,228,201,167,121,80,57,134,159,71,157,233,138,173,
+165,165,229,159,81,81,81,15,249,54,161,252,119,243,118,245,234,213,23,110,221,
+186,181,44,32,32,64,193,207,99,175,121,16,226,213,181,107,215,133,135,15,31,254,
+253,235,175,191,110,203,207,117,15,248,177,240,100,218,180,105,62,252,249,45,7,
+15,30,92,123,234,212,169,5,190,190,190,175,248,239,111,236,199,63,45,64,254,
+192,203,126,163,31,126,248,97,237,233,211,167,251,208,98,149,191,254,250,43,117,
+135,100,69,139,22,21,109,10,31,65,101,14,63,215,176,157,59,119,50,94,222,148,
+225,229,206,159,252,57,42,115,86,139,182,5,200,14,149,4,32,206,206,206,61,163,
+163,163,141,251,244,233,195,10,20,40,32,202,158,99,141,27,55,102,149,42,85,146,
+199,152,88,91,91,255,103,92,7,117,253,106,218,180,169,188,216,18,5,30,43,86,172,
+144,63,79,161,66,133,228,215,233,7,245,243,207,63,179,42,85,170,200,149,226,85,
+171,86,209,204,93,114,183,46,234,26,161,74,174,174,174,114,64,84,163,70,141,183,
+52,203,13,127,202,81,180,77,6,202,166,210,244,93,118,82,89,186,185,221,121,0,
+150,18,23,23,71,39,132,127,55,3,229,178,13,27,54,52,190,120,241,98,159,98,197,
+138,49,94,25,98,245,235,215,23,109,2,217,64,1,115,187,118,237,228,224,251,219,
+111,191,165,64,111,26,15,166,15,243,32,250,13,3,173,192,131,130,27,47,95,190,
+188,206,222,119,23,148,79,80,60,152,160,219,118,252,28,67,191,83,229,154,20,100,
+133,145,145,209,154,150,45,91,70,241,115,83,59,254,187,233,206,243,190,152,58,
+117,234,53,94,137,162,115,115,109,30,112,68,242,0,102,212,186,117,235,58,39,38,
+38,6,241,115,217,83,126,14,139,187,112,225,66,34,207,255,240,221,187,119,117,
+42,86,172,184,255,248,241,227,116,126,160,139,52,63,240,64,230,52,15,100,202,
+125,247,221,119,135,27,53,106,20,157,201,199,4,200,87,102,205,154,213,226,220,
+185,115,189,232,130,23,117,209,166,186,2,124,62,42,115,218,182,109,43,151,57,19,
+39,78,164,243,219,119,11,22,44,56,56,99,198,140,80,209,182,0,34,159,29,128,240,
+3,178,56,175,12,13,160,113,22,125,251,246,21,101,255,44,84,161,165,213,112,
+203,150,45,43,183,126,40,187,50,40,153,152,152,80,127,104,121,204,7,5,30,212,
+229,71,95,255,125,207,7,186,79,173,30,55,111,222,148,43,196,151,46,93,146,243,
+208,227,55,111,222,200,219,169,210,238,221,187,229,86,23,170,116,240,10,201,31,
+162,252,153,248,48,38,32,93,74,223,111,51,41,62,62,62,193,206,206,206,210,220,
+220,188,92,88,88,88,82,131,6,13,220,121,112,182,97,196,136,17,190,31,125,87,13,
+112,113,113,105,199,43,64,250,116,21,10,193,135,234,77,154,52,137,93,185,114,
+133,2,144,74,203,151,47,183,101,255,92,81,215,52,41,45,65,26,254,91,255,207,162,
+129,116,206,226,162,168,229,54,189,47,191,252,82,30,223,67,247,249,121,34,146,
+223,124,88,161,148,159,87,41,160,160,231,148,107,97,28,101,25,124,243,205,55,
+238,252,198,61,227,243,63,254,248,227,21,186,165,241,113,0,186,224,204,153,51,
+78,49,49,49,122,127,254,249,39,130,15,53,24,63,126,188,124,81,117,223,190,125,
+182,171,87,175,174,200,159,66,0,2,159,77,21,1,72,135,160,160,32,59,39,39,39,230,
+224,224,32,202,254,89,168,5,131,18,181,124,100,12,62,50,230,201,12,141,199,72,
+74,74,98,52,19,13,109,79,253,67,169,37,68,213,253,68,125,124,124,216,217,179,
+103,169,203,209,203,63,254,248,163,117,155,54,109,124,69,219,228,128,130,166,62,
+94,180,104,81,9,103,103,231,42,79,159,62,173,242,228,201,147,47,120,144,53,138,
+127,23,195,249,115,167,68,111,160,46,81,81,81,10,26,127,211,165,75,23,81,86,200,
+33,26,107,69,221,13,67,66,66,204,68,121,213,136,174,236,35,0,1,0,17,181,94,172,
+8,15,15,55,41,89,178,36,235,214,173,155,40,43,228,16,149,57,180,142,89,104,
+104,104,110,150,57,144,143,124,118,191,163,251,247,239,119,167,49,23,131,6,13,
+82,121,55,38,66,211,237,82,228,253,238,221,187,255,188,63,141,255,248,88,32,
+146,17,5,45,101,202,148,97,116,146,170,93,187,182,60,83,22,117,231,242,244,244,
+84,249,154,37,52,246,131,159,16,153,165,165,229,65,53,5,31,132,254,241,212,62,
+125,250,4,174,88,177,226,242,185,115,231,214,60,122,244,168,37,183,43,38,38,102,
+79,173,90,181,114,243,76,172,207,255,119,244,191,85,163,242,229,203,203,183,60,
+168,206,173,194,64,217,197,40,123,63,64,0,208,101,234,62,79,152,209,216,15,234,
+37,1,234,161,156,221,148,151,57,170,189,98,11,58,235,179,34,134,31,127,252,177,
+180,159,159,95,11,154,117,170,83,167,78,162,236,57,66,173,22,115,230,204,97,47,
+94,188,144,187,52,209,216,15,234,126,69,193,8,205,112,165,236,98,165,68,227,61,
+168,242,75,168,2,76,173,27,148,159,238,83,151,171,89,179,102,177,223,127,255,
+157,245,239,223,159,45,91,182,140,245,234,213,75,165,179,51,81,48,70,51,117,153,
+152,152,164,52,109,218,244,136,40,191,42,81,64,182,100,201,146,201,61,123,246,
+220,194,247,203,190,69,139,22,213,20,109,163,38,242,14,85,215,108,104,240,175,
+125,107,154,85,62,53,163,166,70,117,87,44,0,32,239,83,91,11,72,218,24,79,249,42,
+34,202,28,245,209,146,50,7,242,19,229,66,125,89,165,143,225,21,221,159,120,69,
+87,26,51,102,140,164,46,169,169,169,82,124,124,188,148,146,146,34,63,78,76,76,
+252,215,125,122,61,189,228,228,100,137,22,239,34,116,75,121,41,81,94,37,90,97,
+216,195,195,67,138,142,142,150,84,205,213,213,85,226,1,141,228,224,224,224,121,
+251,246,109,139,143,238,60,53,226,31,67,207,222,222,254,72,251,246,237,119,72,
+217,108,33,82,177,165,53,106,212,16,237,42,248,12,110,110,110,202,2,125,136,232,
+203,80,19,10,50,169,155,95,105,81,198,124,174,63,79,27,69,153,0,116,28,181,200,
+111,17,101,202,9,67,67,67,170,25,239,226,101,222,127,234,3,160,58,15,30,60,80,
+150,57,195,179,254,70,0,178,39,199,45,32,79,158,60,49,121,248,240,97,47,106,61,
+160,238,87,234,66,81,55,117,145,82,118,191,74,27,216,253,225,126,198,43,30,212,
+34,162,108,209,160,91,202,75,73,57,13,47,161,166,90,94,65,86,249,216,15,66,131,
+207,169,219,152,141,141,205,186,250,245,235,71,138,242,171,3,223,39,169,53,107,
+214,92,231,227,227,83,127,240,224,193,170,107,222,201,62,245,46,176,2,233,229,
+230,213,40,234,130,149,249,128,43,0,128,127,168,173,5,132,151,183,84,33,48,17,
+229,3,149,193,190,6,149,200,113,0,178,101,203,150,214,33,33,33,181,104,122,54,
+204,116,244,30,223,31,236,232,209,163,212,221,43,178,73,147,38,39,68,249,213,
+169,92,185,114,247,205,204,204,162,156,157,157,115,99,140,0,2,16,205,201,141,
+239,151,80,228,79,51,53,169,165,82,1,0,249,138,218,186,107,74,146,68,245,152,
+220,188,16,163,107,84,59,104,22,116,86,142,2,16,254,131,103,183,110,221,250,34,
+42,42,74,159,166,222,165,233,111,129,177,11,23,46,176,87,175,94,209,148,190,
+199,103,205,154,229,35,202,175,78,51,102,204,136,228,1,200,211,55,111,222,168,
+190,153,39,107,84,49,197,9,74,115,114,179,224,197,32,116,0,200,14,181,5,32,236,
+125,61,38,55,207,131,186,6,23,24,65,37,114,212,61,103,225,194,133,86,79,158,60,
+105,67,131,189,49,237,221,123,212,237,138,86,12,53,50,50,74,45,85,170,212,118,
+133,66,161,174,147,109,182,20,46,92,56,90,79,79,239,145,161,161,161,166,3,16,42,
+12,112,130,210,156,220,106,1,33,202,197,49,1,0,178,34,207,218,40,202,148,67,84,
+230,228,230,121,80,215,160,124,7,149,200,81,11,136,171,171,107,199,192,192,192,
+146,29,58,116,96,118,118,118,162,236,58,225,225,195,135,242,226,112,197,139,23,
+127,241,251,239,191,95,21,229,215,132,212,212,84,163,132,132,4,77,95,25,146,175,
+70,97,54,18,141,209,116,128,169,164,236,130,165,174,74,5,0,228,31,234,110,1,65,
+0,162,57,232,225,0,42,241,201,1,200,185,115,231,76,121,240,49,150,42,152,3,7,
+14,196,180,119,105,104,81,184,152,152,24,26,220,126,186,102,205,154,177,162,
+252,26,66,35,239,53,221,63,142,142,41,156,160,52,39,55,11,94,140,1,1,128,236,80,
+119,0,162,233,11,109,186,236,159,25,125,0,62,195,39,7,32,7,14,28,168,252,244,
+233,211,218,85,170,84,97,173,90,181,18,101,215,9,180,178,250,225,195,135,105,44,
+76,116,197,138,21,215,136,242,107,16,157,40,52,29,12,80,68,138,38,90,205,209,
+244,247,155,30,90,64,0,32,59,212,217,5,139,202,28,84,138,53,39,71,93,247,1,50,
+250,228,0,228,250,245,235,29,99,98,98,76,105,1,63,11,139,92,89,230,66,235,208,
+74,237,143,30,61,98,182,182,182,247,150,47,95,254,72,148,95,131,114,163,5,4,1,
+136,110,64,23,44,0,200,46,76,217,157,127,32,216,3,149,248,164,0,228,226,197,139,
+5,34,34,34,6,209,172,87,253,250,245,19,101,215,9,52,35,216,158,61,123,228,251,
+117,234,212,57,158,219,131,207,51,200,141,0,4,131,208,117,71,18,67,165,2,21,43,
+0,177,84,134,223,73,126,129,22,16,80,137,79,58,144,86,173,90,213,42,44,44,172,
+122,179,102,205,152,163,163,163,40,187,78,240,243,243,99,103,206,156,97,37,74,
+148,8,238,208,161,195,161,29,59,118,136,54,209,36,10,4,114,35,0,201,173,129,209,
+160,65,122,122,122,73,5,11,22,76,165,46,136,218,236,222,189,123,214,27,54,108,
+232,243,232,209,163,42,158,158,158,6,252,28,102,152,154,154,74,231,62,67,133,66,
+33,223,166,75,244,155,161,231,132,131,219,232,226,3,87,140,39,75,254,62,46,130,
+236,159,75,217,135,62,53,147,148,146,46,81,171,84,10,255,108,116,155,204,191,
+163,228,162,69,139,38,242,243,117,92,195,134,13,207,206,155,55,239,82,230,111,
+15,160,86,152,178,59,255,248,164,122,163,174,24,57,114,100,189,227,199,143,87,
+138,139,139,51,143,137,137,49,75,78,78,166,113,73,148,140,211,37,185,91,60,47,
+47,232,86,89,246,24,164,37,253,116,183,185,65,89,150,36,167,75,244,56,137,151,
+39,116,177,49,49,93,74,72,75,241,60,197,25,26,26,198,153,152,152,196,84,171,86,
+45,98,243,230,205,23,29,28,28,162,51,253,11,25,100,251,64,226,31,64,81,167,78,
+157,47,98,99,99,245,134,12,25,34,175,56,14,140,29,59,118,140,189,121,243,134,
+241,194,253,20,223,47,62,67,135,14,21,109,162,73,244,253,106,122,140,0,29,24,5,
+68,153,32,111,251,249,231,159,139,111,217,178,197,172,98,197,138,201,206,206,
+206,162,236,185,130,159,179,76,198,142,29,219,237,203,47,191,156,239,229,229,85,
+145,23,12,140,7,76,52,69,181,104,211,108,83,78,194,193,255,86,9,65,214,92,195,
+207,217,242,26,69,79,158,60,153,204,207,81,147,182,111,223,190,142,127,110,92,
+141,6,141,49,51,51,75,73,74,74,146,120,18,101,5,237,151,237,122,99,126,71,139,
+96,46,94,188,184,236,161,67,135,230,28,60,120,176,247,219,183,111,205,168,135,
+16,149,51,186,52,65,83,74,74,138,60,9,147,135,135,7,5,98,231,120,25,51,136,215,
+133,195,68,219,101,251,64,90,179,102,77,229,208,208,208,110,54,54,54,172,99,199,
+142,162,236,58,129,78,166,212,253,202,212,212,52,181,65,131,6,7,116,233,128,203,
+2,237,4,68,167,249,156,183,183,119,237,162,69,139,86,248,245,215,95,19,91,180,
+104,33,202,158,43,38,77,154,52,229,232,209,163,115,2,3,3,245,232,156,69,23,78,
+106,214,172,201,248,231,166,214,27,209,230,249,66,106,106,42,11,9,9,145,103,233,
+155,55,111,158,209,221,187,119,127,185,122,245,234,81,254,82,144,104,91,0,85,
+225,245,134,4,43,43,171,106,252,247,88,176,68,137,18,81,162,252,160,213,80,190,
+167,225,229,95,169,115,231,206,185,220,184,113,163,108,185,114,229,216,228,201,
+147,153,147,147,19,43,95,190,60,51,54,214,244,181,223,220,19,29,29,205,30,60,
+120,64,23,38,105,145,242,246,188,156,253,146,63,189,68,180,157,220,141,64,148,
+72,251,246,237,199,211,248,134,49,99,198,72,240,30,63,232,36,3,3,3,137,159,92,
+175,223,185,115,71,27,143,182,205,60,13,22,101,82,49,75,158,2,28,29,29,69,187,
+15,62,131,155,155,27,253,48,41,109,18,124,31,106,193,79,48,211,29,28,28,14,138,
+242,229,150,137,19,39,118,230,21,158,72,19,19,19,105,227,198,141,82,114,114,178,
+104,151,230,123,205,155,55,151,120,161,24,211,182,109,219,170,162,253,7,160,74,
+188,162,102,223,168,81,163,151,188,254,80,70,148,55,7,104,54,28,63,123,123,123,
+137,7,220,162,159,1,228,16,175,96,42,203,156,109,130,239,67,39,240,58,159,69,
+141,26,53,206,243,187,82,175,94,189,36,63,63,63,209,46,204,247,118,238,220,41,
+119,19,230,251,229,153,104,255,145,108,93,6,116,119,119,55,244,244,244,236,67,
+221,174,6,12,24,32,202,174,19,248,190,102,187,119,239,150,87,64,175,94,189,250,
+209,122,245,234,37,136,182,201,5,113,12,253,110,65,197,102,207,158,93,48,33,33,
+225,171,6,13,26,92,20,229,205,13,188,96,176,188,121,243,230,159,111,223,190,45,
+248,219,111,191,177,175,191,254,90,231,187,140,210,121,138,154,201,13,12,12,18,
+139,20,41,146,44,202,15,160,74,163,71,143,14,225,231,140,228,224,224,224,6,162,
+188,89,225,229,46,186,25,228,62,124,7,28,47,91,134,122,123,123,183,109,216,176,
+33,219,178,101,11,43,83,70,29,177,117,222,146,214,197,146,46,116,249,102,157,
+243,189,108,5,32,235,215,175,111,28,30,30,222,180,78,157,58,52,214,65,148,93,39,
+80,183,134,35,71,142,176,98,197,138,197,118,233,210,229,180,40,127,46,161,166,
+110,4,32,160,50,188,2,80,200,223,223,127,127,161,66,133,20,99,199,142,221,35,
+202,159,27,246,236,217,51,240,225,195,135,149,169,107,216,152,49,99,68,217,117,
+2,47,40,25,223,39,140,127,111,175,166,79,159,46,236,155,11,160,74,214,214,214,
+97,213,170,85,187,241,236,217,179,145,46,46,46,57,238,45,112,231,206,157,6,188,
+226,247,205,230,205,155,177,6,0,228,154,75,151,46,21,242,240,240,24,75,93,92,
+231,205,155,135,37,41,216,251,238,190,23,47,94,164,177,47,169,197,139,23,95,38,
+202,79,178,21,128,220,188,121,179,111,108,108,172,97,223,190,125,105,188,131,40,
+187,78,160,29,253,242,229,75,86,186,116,233,203,19,39,78,124,32,202,159,75,104,
+69,118,12,54,5,149,72,76,76,44,48,121,242,228,61,183,110,221,170,105,110,110,
+222,183,126,253,250,111,69,219,104,26,15,144,244,232,124,69,3,226,190,252,242,
+75,90,28,84,180,137,78,56,125,250,52,139,140,140,100,101,203,150,189,93,175,94,
+189,112,81,126,0,85,107,219,182,237,31,102,102,102,77,120,217,249,87,78,91,50,
+146,146,146,30,94,189,122,117,212,156,57,115,46,15,29,58,116,16,127,31,250,129,
+199,138,182,3,80,165,117,235,214,53,10,12,12,180,231,101,32,107,217,178,165,40,
+187,78,8,14,14,102,103,207,158,165,139,92,193,101,202,148,185,35,202,79,178,21,
+128,248,250,250,118,162,8,175,103,207,158,162,172,58,129,34,189,93,187,118,49,
+35,35,35,90,124,112,187,22,207,40,19,195,16,128,228,119,41,162,12,159,227,254,
+253,251,133,7,14,28,88,171,105,211,166,95,215,172,89,243,226,223,127,255,93,213,
+212,212,180,221,165,75,151,30,138,182,205,13,135,14,29,170,239,227,227,211,148,
+154,195,187,116,233,34,202,174,19,40,24,163,201,50,104,102,150,22,45,90,104,237,
+184,29,200,223,190,254,250,235,123,41,41,41,61,79,158,60,57,112,242,228,201,235,
+232,98,129,104,155,140,154,52,105,18,227,224,224,240,123,120,120,120,157,35,71,
+142,236,172,85,171,150,75,223,190,125,191,82,164,205,0,131,137,96,64,221,232,
+184,245,243,243,27,78,231,213,193,131,7,83,183,86,209,38,58,225,196,137,19,44,
+52,52,148,85,168,80,193,101,237,218,181,33,162,252,36,91,123,238,245,235,215,
+54,221,187,119,103,118,118,118,162,172,58,225,218,181,107,236,242,229,203,172,
+100,201,146,190,19,38,76,56,119,240,160,214,150,233,20,128,160,11,86,254,214,
+129,167,19,162,76,25,208,49,65,227,0,146,50,220,254,107,45,9,125,125,253,20,30,
+124,216,152,152,152,56,36,37,37,197,241,0,228,204,232,209,163,215,181,106,213,
+42,224,163,239,156,203,206,156,57,51,56,32,32,192,120,252,248,241,172,120,241,
+226,162,236,58,225,246,237,219,114,170,94,189,250,227,153,51,103,186,46,90,180,
+72,180,9,128,90,184,185,185,93,114,114,114,234,118,227,198,141,131,246,246,246,
+53,248,185,100,71,213,170,85,31,241,32,226,73,155,54,109,2,69,219,19,126,252,
+30,230,199,243,21,23,23,151,22,238,238,238,13,158,63,127,222,128,38,200,161,11,
+131,52,214,9,21,66,80,167,229,203,151,87,120,245,234,85,15,107,107,107,92,228,
+74,19,31,31,47,95,148,55,54,54,78,174,83,167,206,118,254,59,23,109,34,203,238,
+47,213,136,250,83,235,202,212,149,89,161,110,12,52,213,24,13,182,225,59,122,13,
+63,153,106,115,119,6,4,32,249,31,181,68,252,46,202,148,129,50,0,201,152,210,47,
+104,151,66,115,247,243,2,61,113,242,228,201,241,195,135,15,143,244,244,244,148,
+175,164,107,43,94,41,41,56,114,228,200,142,134,134,134,152,44,35,157,125,251,
+246,201,87,134,203,148,41,179,217,220,220,92,187,87,141,132,124,207,217,217,249,
+242,201,147,39,235,31,62,124,120,28,15,32,134,62,120,240,160,200,197,139,23,125,
+245,245,245,223,166,164,164,208,66,160,202,148,233,130,160,20,108,240,227,184,
+20,29,211,52,25,12,173,115,67,79,251,248,248,176,25,51,102,176,185,115,231,162,
+235,37,168,205,133,11,23,58,250,251,251,155,242,50,145,186,224,139,178,235,4,10,
+56,110,220,184,193,44,45,45,221,255,247,191,255,93,222,184,113,163,104,19,89,
+118,3,16,69,98,98,162,40,79,190,231,229,229,37,159,224,174,92,185,194,236,237,
+237,47,76,154,52,105,29,63,137,138,54,203,53,188,34,22,205,131,70,189,132,4,109,
+156,160,11,84,132,90,35,156,69,153,114,34,42,42,74,78,116,162,205,11,246,239,
+223,223,236,241,227,199,182,245,234,213,99,148,224,125,191,220,227,199,143,51,
+43,43,171,152,97,195,134,157,229,21,63,209,38,0,106,215,165,75,23,111,126,51,
+133,7,16,70,219,183,111,55,255,245,215,95,141,141,140,140,12,227,226,226,210,
+175,6,157,233,212,117,118,118,118,198,54,54,54,75,255,254,251,239,15,93,50,40,
+24,41,81,162,4,27,53,106,148,220,53,26,64,29,60,61,61,141,58,119,238,220,139,
+102,85,28,52,104,144,40,187,206,160,94,64,20,35,84,174,92,249,16,47,123,179,29,
+44,100,43,0,49,53,53,149,86,172,88,33,175,32,220,184,113,99,185,47,177,174,160,
+157,234,235,235,43,119,185,162,105,119,95,189,122,197,74,149,42,229,204,79,128,
+3,181,188,245,131,86,159,141,105,213,170,85,251,35,71,142,28,16,229,133,60,75,
+183,231,151,77,67,253,114,123,246,236,57,154,7,219,250,253,250,245,195,21,208,
+52,231,206,157,147,207,89,29,58,116,120,216,191,127,255,7,104,25,2,109,194,3,7,
+170,172,100,187,194,66,86,174,92,217,114,252,248,241,141,104,90,233,210,165,75,
+39,243,128,228,204,213,171,87,27,89,88,88,20,229,21,32,209,230,0,57,182,103,
+207,158,6,97,97,97,45,29,28,28,104,60,146,40,187,78,224,251,131,29,61,122,148,
+226,131,248,30,61,122,156,163,11,244,217,149,173,0,132,87,180,55,186,186,186,
+142,28,59,118,44,93,80,215,169,174,88,212,196,75,39,58,194,119,112,84,211,166,
+77,247,182,107,215,110,250,172,89,179,180,58,248,32,70,70,70,49,129,129,129,
+117,68,249,0,242,186,195,135,15,87,112,115,115,107,73,23,73,122,245,234,37,202,
+174,19,232,188,69,23,77,12,12,12,82,29,29,29,215,82,215,21,209,54,0,218,140,151,
+199,134,3,7,14,252,37,42,42,202,160,91,183,110,199,58,118,236,248,39,63,174,111,
+187,184,184,120,166,166,166,22,165,242,26,3,209,65,29,232,216,226,245,191,62,
+209,209,209,6,116,33,199,204,204,76,180,137,78,160,139,243,212,59,200,222,222,
+254,220,212,169,83,179,53,251,149,82,182,2,144,83,167,78,141,233,220,185,243,
+214,107,215,174,89,242,31,190,121,114,114,50,237,121,186,196,72,115,242,210,156,
+222,202,62,155,202,251,134,236,253,123,103,76,116,181,54,183,162,151,244,3,108,
+211,167,164,180,148,152,46,37,164,37,90,200,47,174,96,193,130,177,230,230,230,
+49,253,250,245,123,181,98,197,10,79,26,132,158,23,148,47,95,62,146,127,95,118,
+43,87,174,180,25,63,126,124,182,6,248,101,23,63,224,244,42,86,172,136,25,182,
+64,43,92,189,122,117,120,80,80,80,225,222,189,123,211,113,47,202,174,19,104,
+221,15,190,95,168,203,74,32,15,202,142,45,94,188,88,180,9,128,86,115,115,115,
+107,84,161,66,133,24,94,246,116,152,55,111,222,5,234,94,200,81,151,140,220,170,
+87,128,142,216,183,111,95,153,128,128,128,190,52,35,44,149,51,240,207,140,176,
+250,250,250,169,85,170,84,217,251,232,209,35,209,38,255,146,173,0,36,237,138,
+194,117,81,190,252,74,217,23,158,186,161,229,37,171,86,173,122,49,118,236,216,
+119,252,0,25,200,31,46,17,229,255,20,177,177,177,246,11,23,46,108,203,15,192,29,
+63,252,240,195,27,81,126,0,117,161,11,34,109,218,180,233,67,51,224,160,95,238,
+63,168,95,46,77,21,73,253,114,27,55,110,172,117,107,182,0,124,42,99,99,99,143,
+223,126,251,173,95,90,215,45,37,52,121,128,218,29,59,118,172,99,112,112,112,233,
+14,29,58,48,116,245,123,239,217,179,103,242,154,120,86,86,86,79,251,244,233,
+115,250,83,199,68,227,170,65,62,86,191,126,253,168,234,213,171,255,145,146,146,
+178,136,87,70,190,22,229,255,20,241,241,241,79,111,222,188,217,105,245,234,213,
+174,253,251,247,31,119,237,218,181,66,105,47,169,117,93,10,128,140,254,248,227,
+143,186,143,31,63,174,68,211,132,59,57,57,137,178,235,132,232,232,104,57,0,177,
+176,176,72,180,183,183,223,138,238,87,144,31,56,56,56,68,100,8,62,0,52,194,211,
+211,179,59,77,232,51,112,224,64,116,243,75,67,45,144,52,51,108,177,98,197,142,
+12,25,50,228,147,135,37,32,0,201,231,54,111,222,188,245,221,187,119,63,253,245,
+215,95,107,167,77,155,246,141,40,127,118,53,104,208,32,137,167,249,252,7,89,133,
+31,132,43,71,140,24,113,157,255,48,199,79,159,62,221,146,33,8,1,13,114,117,117,
+237,27,26,26,42,247,203,165,230,113,96,242,76,125,212,28,94,169,82,165,251,11,
+22,44,240,20,229,7,0,128,204,241,122,141,157,175,175,111,83,234,222,219,177,99,
+71,81,118,157,64,211,95,239,221,187,151,38,169,74,106,218,180,233,167,53,125,
+164,65,0,162,3,158,62,125,186,48,49,49,241,135,115,231,206,45,172,93,187,246,9,
+39,39,167,33,179,103,207,110,179,108,217,50,43,246,239,241,58,202,49,58,217,10,
+239,191,255,254,251,171,181,106,213,58,66,87,5,158,60,121,82,237,216,177,99,43,
+14,30,60,120,81,79,79,207,74,180,45,128,42,220,191,127,191,204,203,151,47,191,
+224,39,65,214,167,79,31,81,118,157,64,131,37,119,238,220,73,253,114,89,243,230,
+205,79,41,20,10,204,195,13,0,144,67,207,158,61,251,38,42,42,202,178,103,207,158,
+180,214,133,40,187,78,184,126,253,58,149,191,204,214,214,214,99,194,132,9,159,
+54,248,35,77,182,198,128,64,222,231,234,234,250,59,15,58,206,92,187,118,109,
+180,187,187,123,143,119,239,222,41,2,2,2,252,120,229,36,149,87,88,148,19,10,80,
+74,127,63,203,41,94,169,91,135,153,153,89,113,154,21,141,6,35,81,68,236,237,
+237,45,207,205,78,247,35,34,34,88,161,66,202,158,89,0,170,183,109,219,182,54,
+188,112,40,70,93,175,106,212,168,33,202,174,19,120,64,198,78,159,62,77,43,193,
+135,242,0,100,219,210,165,75,69,155,0,0,64,38,60,60,60,204,122,244,232,209,137,
+214,151,193,52,230,255,160,69,137,105,166,197,18,37,74,172,229,101,111,140,40,
+127,102,16,128,232,144,153,51,103,210,170,217,19,232,126,72,72,8,53,157,25,234,
+235,235,27,38,39,39,211,113,144,113,230,50,122,156,101,75,8,255,65,42,234,214,
+173,59,159,71,194,85,232,49,5,34,150,150,150,177,225,225,225,70,38,38,38,6,5,10,
+20,200,106,115,128,207,194,143,91,189,134,13,27,246,138,143,143,151,251,229,26,
+24,224,116,70,142,28,57,194,248,111,144,181,111,223,254,74,159,62,125,94,136,
+242,3,0,64,230,166,79,159,94,155,215,151,106,52,106,212,136,213,169,131,85,13,
+72,64,64,128,188,246,71,177,98,197,94,183,107,215,238,44,13,68,207,9,116,193,
+210,97,113,113,113,73,188,18,23,203,239,70,242,20,198,83,8,123,191,178,246,75,
+158,188,120,122,158,85,186,112,225,66,114,96,96,96,107,154,125,200,218,218,58,
+190,121,243,230,187,122,112,169,169,169,193,212,253,131,18,128,186,236,221,187,
+215,222,223,223,191,117,169,82,165,88,167,78,157,68,217,117,2,5,99,251,246,237,
+147,23,139,109,217,178,101,142,250,229,2,0,128,220,157,85,17,26,26,58,52,54,54,
+86,175,111,223,190,116,209,85,180,137,78,56,123,246,44,123,253,250,53,171,82,
+165,202,173,25,51,102,248,137,242,127,12,2,16,200,177,165,75,151,254,16,17,17,
+97,222,172,89,179,221,195,135,15,111,225,226,226,50,120,211,166,77,127,243,151,
+244,168,31,58,128,58,157,58,117,170,63,63,9,22,232,210,165,11,117,55,18,101,215,
+9,119,238,220,145,83,165,74,149,252,39,78,156,152,179,203,82,0,0,192,230,206,
+157,107,29,28,28,220,191,88,177,98,172,107,215,174,162,236,58,33,41,41,73,94,
+224,214,196,196,36,181,102,205,154,219,69,249,179,130,0,4,114,196,221,221,189,
+170,173,173,173,126,187,118,237,90,186,186,186,14,90,184,112,225,237,180,151,
+140,179,220,16,64,5,120,37,219,234,225,195,135,189,169,219,213,224,193,131,69,
+217,117,198,254,253,251,229,126,185,118,118,118,187,10,22,44,24,34,202,15,0,0,
+153,187,117,235,86,215,192,192,64,75,106,97,47,83,166,140,40,187,78,160,129,231,
+180,24,183,181,181,245,243,33,67,134,28,19,229,207,10,2,16,200,17,94,241,123,
+181,120,241,226,145,60,18,190,33,202,11,240,169,66,66,66,76,179,122,253,244,233,
+211,157,94,188,120,225,80,171,86,45,90,239,38,171,172,26,65,149,254,220,70,227,
+186,210,250,229,198,245,236,217,243,168,40,63,0,128,174,226,21,105,3,73,146,62,
+58,112,240,224,193,131,230,175,94,189,250,31,117,37,255,226,139,47,176,246,71,
+154,3,7,14,80,247,125,86,173,90,53,90,224,54,78,148,63,43,24,181,9,57,226,224,
+224,16,45,202,163,105,180,248,218,255,253,223,255,177,208,208,208,15,207,81,197,
+112,236,216,177,242,115,212,45,140,250,113,166,119,254,252,121,246,252,249,115,
+57,143,210,165,75,151,228,53,20,198,143,31,207,46,95,190,204,30,63,126,44,191,
+190,102,205,26,121,234,57,26,108,79,39,35,190,15,216,87,95,125,197,138,20,41,
+194,64,181,60,61,61,7,252,242,203,47,85,156,156,156,150,181,105,211,38,56,227,
+235,127,255,253,119,103,90,0,169,127,255,254,52,153,66,102,111,241,217,126,255,
+253,119,26,200,205,28,29,29,63,154,231,221,187,119,108,214,172,89,242,177,96,
+101,101,37,31,23,77,154,52,97,219,183,111,103,19,38,76,160,149,155,59,89,67,238,
+0,0,32,0,73,68,65,84,63,186,173,170,209,177,74,51,96,213,173,91,215,101,208,
+160,65,183,208,50,4,144,187,104,6,58,90,55,34,42,42,138,102,162,100,223,126,251,
+109,166,249,104,198,200,101,203,150,177,25,51,102,96,156,129,134,240,243,181,
+213,226,197,139,191,255,223,255,254,183,115,245,234,213,119,51,190,206,207,167,
+85,159,61,123,102,79,171,158,55,111,222,60,179,183,200,20,141,137,93,184,112,
+161,188,74,184,114,134,80,122,15,170,67,228,245,41,124,169,188,163,197,7,121,
+153,27,205,255,167,77,103,206,156,17,109,146,37,180,128,64,190,65,3,112,169,11,
+10,143,204,229,65,201,116,226,167,68,131,148,169,114,70,193,67,70,30,30,30,242,
+148,165,233,61,120,240,224,195,115,244,186,242,71,118,226,196,9,57,136,233,214,
+173,27,107,221,186,53,187,123,247,174,188,246,196,155,55,111,254,243,190,240,
+121,248,9,238,34,47,176,71,241,194,225,22,63,113,255,244,228,201,147,146,202,
+215,248,119,92,130,127,47,173,104,138,231,94,189,122,101,245,54,159,133,190,247,
+160,160,160,44,243,184,185,185,81,48,196,218,181,107,199,108,108,108,88,233,210,
+165,229,227,225,216,177,99,114,95,89,77,161,66,110,219,182,109,52,241,131,68,
+139,66,241,64,40,247,155,100,0,116,28,149,25,126,126,126,172,104,209,162,52,46,
+235,163,249,104,218,122,42,187,52,121,206,208,117,252,92,29,242,244,233,211,216,
+35,71,142,92,231,229,249,198,249,243,231,215,76,255,58,175,51,116,139,137,137,
+49,161,25,22,205,205,205,63,246,54,255,65,1,8,125,151,212,101,171,123,247,238,
+172,67,135,14,114,240,57,113,226,68,150,215,199,198,210,108,87,188,44,166,181,
+63,174,45,95,190,220,75,148,95,4,45,32,144,111,208,213,103,170,148,14,25,50,
+132,149,43,87,238,95,175,209,149,8,67,67,195,255,108,67,99,8,50,94,165,78,255,
+28,109,147,254,62,175,220,177,222,189,123,203,143,233,10,51,85,60,183,110,221,
+202,166,78,157,202,64,117,26,55,110,236,63,123,246,236,37,139,22,45,154,203,247,
+239,92,30,60,142,226,129,200,166,95,126,249,101,235,159,127,254,57,52,44,44,172,
+4,13,10,180,179,179,19,189,85,142,81,203,10,245,119,165,22,49,106,114,166,22,
+49,186,146,165,68,87,131,182,108,217,34,183,188,81,43,26,229,167,22,55,154,126,
+218,196,196,68,158,5,142,90,105,214,173,91,39,95,13,171,87,175,30,27,58,116,168,
+90,90,108,168,80,160,213,207,171,84,169,242,150,31,159,103,120,225,32,218,4,0,
+212,140,202,14,58,15,80,165,148,22,236,37,107,215,174,149,43,167,52,147,16,149,
+41,147,39,79,150,243,209,57,131,202,30,106,13,161,60,84,121,173,90,181,170,224,
+47,64,78,81,125,225,214,173,91,43,111,220,184,241,37,63,199,127,253,248,241,
+227,254,78,78,78,251,26,52,104,176,108,204,152,49,239,120,217,62,204,204,204,
+236,63,189,38,178,131,206,241,116,241,179,89,179,102,242,99,186,40,74,221,184,
+232,187,165,224,132,122,77,208,5,76,106,61,191,122,245,170,188,166,6,5,39,84,
+167,104,213,170,149,188,13,5,45,52,163,33,149,113,116,17,149,159,219,229,201,86,
+168,155,45,161,58,13,213,117,54,108,216,192,110,222,188,73,93,111,217,136,17,35,
+228,214,120,58,182,232,66,24,5,191,111,223,190,149,223,87,217,155,131,214,50,
+105,211,166,205,71,63,251,199,208,69,46,250,156,252,239,74,117,235,214,61,238,
+233,233,41,218,68,8,45,32,144,175,208,73,126,243,230,205,242,143,146,210,193,
+131,7,229,231,85,213,127,51,253,21,42,122,79,10,64,232,199,159,139,168,189,190,
+112,126,76,230,230,230,7,248,73,247,101,76,76,12,181,52,148,229,129,200,172,158,
+61,123,254,205,131,145,159,168,64,31,52,104,16,83,39,250,27,167,78,157,98,180,
+200,33,85,20,166,76,153,34,159,132,149,168,144,161,66,193,218,218,90,46,36,168,
+197,132,174,16,41,215,35,161,188,63,252,240,3,243,247,247,151,11,31,10,100,230,
+207,159,255,177,63,247,89,232,56,167,253,100,111,111,127,178,101,203,150,175,68,
+249,1,64,51,168,162,72,173,234,59,118,236,144,31,83,112,65,221,121,169,130,74,
+227,182,126,249,229,23,249,156,65,129,10,85,22,199,141,27,39,95,212,40,95,190,
+124,214,111,156,123,242,77,153,195,131,141,56,94,97,223,70,193,95,80,80,80,129,
+43,87,174,124,189,109,219,182,43,60,40,116,229,223,77,5,58,247,83,240,240,169,
+40,152,160,139,82,148,110,223,190,45,127,223,20,76,82,64,179,114,229,74,182,
+126,253,122,86,179,102,77,249,181,153,51,103,202,193,38,205,230,56,125,250,116,
+121,22,195,135,15,31,202,129,41,173,59,66,159,141,90,79,220,221,221,229,11,90,
+212,77,143,238,211,194,187,123,247,238,149,203,21,186,56,70,221,187,148,93,252,
+92,92,92,216,175,191,254,42,151,79,84,39,162,94,27,116,124,81,119,98,186,88,74,
+239,243,169,124,124,124,216,133,11,23,104,225,65,63,126,236,30,17,229,207,14,
+180,128,64,190,66,149,70,26,191,65,115,84,83,5,176,100,201,146,114,55,169,172,
+100,12,78,232,113,118,3,22,106,113,161,171,227,185,168,61,79,103,69,153,242,162,
+239,190,251,46,153,7,33,31,154,11,168,130,205,131,61,185,43,22,117,103,160,194,
+65,221,70,142,28,41,119,231,163,202,0,181,94,208,119,173,108,142,167,171,150,
+84,136,208,149,32,91,91,91,185,162,145,126,237,27,111,111,111,249,170,19,245,7,
+166,66,132,174,108,253,249,231,159,114,80,66,5,145,170,40,187,111,20,46,92,152,
+213,170,85,107,51,63,118,255,137,146,0,32,215,209,185,65,121,97,130,126,251,147,
+38,77,146,175,66,211,69,12,170,40,210,121,133,206,111,52,166,141,174,118,211,
+115,90,140,46,159,231,155,50,231,240,225,195,198,244,253,16,170,51,4,7,7,23,58,
+118,236,88,33,122,220,175,95,191,108,215,5,210,163,109,86,173,90,37,95,24,74,76,
+76,148,91,39,104,76,33,29,3,244,157,127,255,253,247,114,121,64,193,0,149,47,20,
+32,16,10,28,168,219,30,149,23,212,122,50,124,248,112,249,121,154,117,138,234,
+54,244,249,202,150,45,43,151,41,212,210,78,199,10,5,41,20,184,82,208,147,190,
+203,48,189,39,245,214,160,238,127,116,145,148,130,24,10,108,41,16,166,133,4,45,
+44,44,50,251,232,31,69,45,47,212,234,207,131,154,211,131,6,13,10,16,229,207,14,
+4,32,144,175,208,201,125,206,156,57,114,228,159,222,199,250,94,210,143,152,
+126,84,233,209,99,101,55,25,81,159,205,123,247,238,101,217,183,87,3,206,241,52,
+78,148,41,47,250,233,167,159,44,143,31,63,126,222,195,195,67,94,228,131,22,215,
+163,239,151,174,26,82,179,184,186,7,244,81,161,68,5,135,18,21,30,233,91,64,136,
+178,80,200,12,93,101,162,99,137,174,80,209,182,148,168,64,17,29,83,159,138,154,
+240,233,10,107,253,250,245,221,249,62,187,243,243,207,63,139,54,1,128,92,66,173,
+169,202,137,75,148,129,9,157,19,168,18,73,149,201,167,79,159,50,95,95,95,109,
+110,1,185,192,211,104,81,166,60,34,149,87,210,103,28,57,114,68,30,255,65,223,71,
+137,18,37,228,73,107,168,162,223,185,115,103,209,246,153,162,239,147,130,72,10,
+50,40,24,81,118,227,166,96,132,238,43,203,21,186,80,74,51,57,42,81,80,64,229,6,
+5,163,233,187,145,43,203,58,42,107,232,216,81,214,79,40,96,161,128,130,186,93,
+209,182,20,184,16,250,63,40,240,80,110,67,101,167,242,239,43,7,198,127,10,26,95,
+75,107,127,240,191,155,196,203,153,189,170,234,245,129,46,88,144,175,208,15,
+159,126,100,31,123,141,80,63,125,74,244,152,154,36,189,188,188,228,86,19,66,21,
+70,154,25,171,97,195,134,153,190,135,242,106,8,85,60,169,57,146,186,220,80,63,
+204,92,68,29,139,35,242,99,226,39,225,78,222,222,222,21,41,232,176,183,183,247,
+28,61,122,244,28,91,91,219,68,58,129,211,149,41,117,160,239,159,174,14,41,41,
+143,153,156,4,13,84,144,209,204,88,212,47,119,241,226,197,172,103,207,158,242,
+113,243,41,3,26,69,168,32,161,130,129,90,94,202,148,41,179,158,31,159,90,55,59,
+29,0,252,91,102,231,21,186,154,77,221,135,91,180,104,65,23,95,180,98,106,239,
+143,160,2,86,120,254,206,11,137,151,251,230,15,31,62,28,74,221,148,108,108,108,
+34,155,55,111,190,178,87,175,94,174,180,239,63,119,129,91,229,184,158,204,102,
+66,84,6,0,52,166,144,38,49,81,62,71,19,229,208,180,242,21,43,86,148,199,136,
+144,176,176,48,57,208,160,64,149,234,31,148,143,142,27,250,140,212,202,66,229,
+11,181,174,80,240,74,129,66,70,148,55,39,229,87,122,183,110,221,146,39,92,225,
+129,208,181,111,191,253,246,154,40,127,118,161,5,4,242,13,250,113,210,149,129,
+204,154,76,169,18,75,253,37,233,7,174,60,177,127,247,221,119,172,71,143,30,114,
+159,91,234,163,79,125,52,105,208,22,245,249,164,233,117,73,250,1,233,116,21,97,
+197,138,21,242,251,208,73,128,18,93,229,160,31,126,46,250,244,246,225,60,224,
+208,161,67,86,139,22,45,154,86,180,104,81,207,166,77,155,254,197,239,239,30,59,
+118,108,229,219,183,111,255,72,87,149,170,87,175,46,122,139,28,57,124,248,176,
+220,109,138,102,148,82,14,36,39,116,76,209,227,140,199,22,189,158,126,146,2,101,
+33,65,207,209,21,52,58,182,168,233,155,62,47,181,82,80,215,11,85,162,105,119,
+105,90,68,30,236,188,227,129,240,121,190,223,68,155,0,128,134,40,7,161,167,63,
+79,208,173,178,203,15,221,210,99,101,217,69,23,40,168,143,63,77,176,65,93,94,
+148,19,158,104,153,124,81,230,80,165,124,228,200,145,227,222,190,125,91,180,117,
+235,214,235,59,118,236,184,98,218,180,105,15,74,150,44,233,76,83,33,211,236,87,
+57,69,101,133,242,59,206,236,53,101,57,66,45,226,212,205,247,235,175,191,150,
+131,7,26,79,72,93,167,40,32,162,114,136,186,143,83,185,66,249,233,24,82,150,67,
+132,30,211,24,84,234,214,75,23,66,169,94,67,207,209,5,84,202,163,156,116,39,253,
+177,247,177,114,44,43,84,207,217,181,107,151,124,91,163,70,141,67,118,118,118,
+170,155,170,77,25,29,101,149,0,62,129,37,79,1,142,142,142,146,166,241,31,160,
+244,234,213,43,137,255,120,255,243,26,63,201,72,94,94,94,210,147,39,79,62,164,
+240,240,240,15,175,211,107,103,206,156,145,220,221,221,165,164,164,164,15,207,
+71,70,70,74,161,161,161,242,125,186,125,254,252,185,188,237,211,167,79,255,181,
+189,166,185,185,185,209,15,147,210,38,193,247,145,39,241,239,162,207,248,241,
+227,167,172,95,191,94,238,139,203,255,101,131,6,13,26,236,167,187,27,55,110,20,
+237,158,28,123,247,238,157,20,24,24,40,223,15,14,14,150,98,99,99,229,251,137,
+137,137,242,243,116,140,165,23,19,19,243,225,248,160,99,140,182,167,188,65,65,
+65,18,63,97,203,207,243,192,67,226,65,130,196,131,5,73,213,150,47,95,46,31,7,
+221,187,119,63,47,225,92,13,186,137,58,179,251,217,219,219,127,248,205,105,11,
+58,135,196,197,197,253,235,60,65,231,17,101,25,69,175,209,185,130,7,30,82,64,
+64,192,135,207,255,250,245,107,41,36,36,228,163,239,155,27,232,60,198,222,151,
+57,219,5,223,71,158,224,231,231,103,189,104,209,162,197,163,71,143,254,112,5,
+113,194,132,9,29,120,32,152,210,180,105,83,137,7,4,162,93,146,41,250,14,233,59,
+166,239,54,179,215,232,251,78,95,71,161,50,227,220,185,115,210,149,43,87,62,252,
+77,58,22,238,222,189,43,61,126,252,88,126,175,161,67,135,74,60,32,253,80,182,
+40,81,93,229,234,213,171,210,245,235,215,229,191,71,101,12,255,191,228,186,9,
+189,47,81,30,99,132,202,175,244,199,95,118,208,251,241,160,76,42,94,188,120,196,
+218,181,107,63,125,68,126,86,36,4,32,160,90,185,22,128,232,146,252,30,128,240,2,
+216,36,253,227,111,191,253,182,60,63,1,70,218,216,216,200,39,103,120,31,20,181,
+104,209,66,50,54,54,78,153,57,115,166,122,167,4,3,208,94,90,27,128,228,39,249,
+45,0,185,119,239,30,173,132,254,175,166,128,134,13,27,110,228,55,242,133,157,
+220,68,1,69,163,70,141,164,149,43,87,74,223,127,255,189,212,187,119,239,92,187,
+224,185,105,211,38,249,123,175,93,187,246,30,73,197,241,0,198,128,0,128,214,41,
+86,172,216,135,206,172,116,210,123,241,226,197,192,208,208,208,130,52,40,144,
+22,252,3,38,79,215,72,131,1,43,86,172,232,207,3,180,227,162,252,0,0,240,94,157,
+58,117,146,21,10,197,135,26,245,222,189,123,203,250,251,251,119,163,113,123,52,
+45,110,110,226,193,7,91,182,108,153,220,173,138,186,239,210,52,190,52,203,161,
+166,81,151,64,90,251,195,196,196,68,170,92,185,242,142,79,233,186,149,29,24,3,2,
+0,90,237,238,221,187,38,190,190,190,67,105,124,5,141,213,129,247,104,145,42,
+234,43,236,224,224,176,159,23,78,81,162,252,0,0,144,185,227,199,143,247,14,9,9,
+41,70,11,245,101,92,200,56,55,52,104,208,64,78,185,137,198,45,210,130,136,60,
+40,123,52,127,254,252,203,52,254,85,149,208,2,2,0,90,109,205,154,53,245,125,
+124,124,108,233,74,80,227,198,141,69,217,117,2,77,223,72,131,84,121,224,17,233,
+232,232,184,89,148,31,0,0,50,183,97,195,6,131,123,247,238,117,163,214,118,92,
+228,250,7,173,99,66,235,76,241,0,100,167,157,157,93,140,40,255,167,66,0,2,0,90,
+237,238,221,187,221,162,162,162,76,104,86,18,229,252,231,186,206,217,217,153,
+186,165,209,140,109,247,126,250,233,167,231,162,252,0,0,144,185,91,183,110,85,
+241,241,241,105,64,211,226,106,98,129,219,188,128,151,185,114,0,98,110,110,30,
+221,177,99,71,181,116,241,69,0,2,0,90,235,228,201,147,54,225,225,225,131,169,
+255,107,175,94,189,68,217,117,2,93,165,163,105,17,169,75,90,139,22,45,78,42,20,
+10,213,77,139,8,0,160,99,252,252,252,70,197,199,199,23,160,105,111,105,113,98,
+120,127,145,139,22,197,172,82,165,138,251,130,5,11,158,138,242,231,4,2,16,0,208,
+90,171,87,175,110,22,20,20,100,211,182,109,219,220,94,113,94,107,60,123,246,76,
+94,4,179,116,233,210,175,218,180,105,179,71,148,31,0,0,50,119,233,210,165,2,
+143,30,61,234,76,107,133,245,239,223,95,148,93,39,208,154,31,52,248,156,102,193,
+178,177,177,89,173,167,167,167,150,139,92,8,64,0,64,43,241,115,159,226,233,211,
+167,3,147,146,146,24,13,12,84,245,12,28,121,213,254,253,251,89,116,116,52,205,
+142,114,161,125,251,246,175,68,249,1,242,3,94,73,252,207,180,169,0,159,107,206,
+156,57,77,95,191,126,93,161,121,243,230,52,161,135,40,187,78,160,238,189,167,79,
+159,102,37,75,150,12,108,216,176,225,121,81,254,156,66,0,2,0,90,105,198,140,25,
+118,33,33,33,78,182,182,182,140,86,63,7,198,34,35,35,217,129,3,7,152,165,165,37,
+107,211,166,205,97,81,126,128,252,130,7,31,14,203,150,45,91,177,97,195,6,213,46,
+134,6,58,139,2,218,208,208,208,47,226,226,226,244,105,140,33,173,26,14,114,215,
+103,22,30,30,78,221,175,174,254,252,243,207,175,69,249,115,10,1,8,0,104,37,55,
+55,183,161,188,194,109,217,179,103,79,86,164,72,17,81,118,157,240,247,223,127,
+51,119,119,119,42,24,188,39,79,158,236,42,202,15,144,95,240,160,251,209,253,
+251,247,237,231,206,157,123,125,248,240,225,43,206,157,59,87,37,237,37,181,116,
+15,129,252,111,206,156,57,21,222,188,121,211,187,116,233,210,172,83,167,78,162,
+236,58,33,49,49,145,237,222,189,155,6,159,167,54,105,210,100,87,250,181,82,84,
+13,1,8,0,104,157,203,151,47,155,63,126,252,184,187,177,177,49,166,69,76,135,
+214,254,160,171,116,149,43,87,222,194,11,134,183,162,252,0,249,133,141,141,77,
+82,231,206,157,231,241,187,5,119,238,220,57,126,226,196,137,127,15,27,54,108,
+25,175,68,86,229,207,165,136,182,7,200,232,202,149,43,221,66,66,66,10,246,232,
+209,131,89,91,91,139,178,235,132,219,183,111,203,139,220,242,253,225,62,101,202,
+148,115,162,252,159,3,1,8,0,104,157,35,71,142,116,10,13,13,173,69,235,126,56,58,
+58,138,178,235,132,151,47,95,178,83,167,78,81,69,44,166,127,255,254,39,68,249,
+1,242,2,73,146,244,54,111,222,172,95,180,104,81,90,24,217,136,39,99,158,76,
+120,50,205,152,46,94,188,120,179,118,237,218,39,104,38,184,39,79,158,20,217,179,
+103,207,196,141,27,55,94,208,211,211,43,145,246,94,31,251,51,0,255,194,143,165,
+130,193,193,193,163,13,13,13,25,117,191,130,247,191,31,106,253,160,65,232,188,
+220,61,204,127,147,9,162,109,62,7,86,66,135,28,187,119,239,158,93,80,80,80,114,
+151,46,93,94,138,242,2,100,215,195,135,15,245,135,12,25,210,149,86,249,30,52,
+104,144,60,221,44,48,121,80,96,72,72,8,107,214,172,217,41,254,155,115,23,229,7,
+208,86,94,94,94,133,182,110,221,218,245,250,245,235,173,91,182,108,89,154,7,215,
+49,225,225,225,201,236,159,224,131,210,127,126,248,107,215,174,149,76,76,76,
+138,42,31,83,119,17,95,95,95,185,127,38,45,152,22,17,17,33,143,143,2,16,217,181,
+107,87,77,126,28,86,173,91,183,46,171,95,191,190,40,187,78,224,245,57,90,17,158,
+186,95,133,214,172,89,115,203,145,35,71,68,155,124,22,148,236,144,99,97,97,97,
+201,107,214,172,217,192,15,212,163,243,230,205,219,222,181,107,215,8,254,116,
+170,104,59,128,172,252,249,231,159,69,252,252,252,218,23,47,94,28,253,114,211,
+36,39,39,203,211,34,242,202,87,106,227,198,141,15,171,179,95,46,128,58,13,29,
+58,212,110,212,168,81,7,222,188,121,83,210,192,192,224,116,197,138,21,47,241,
+74,224,117,254,187,167,5,53,149,199,117,166,199,55,63,238,83,155,55,111,190,
+204,217,217,89,30,255,65,221,17,139,21,43,22,29,26,26,106,100,106,106,106,100,
+97,97,145,217,102,0,255,113,227,198,141,30,241,241,241,138,190,125,251,50,234,
+234,11,76,158,222,157,151,189,140,215,233,174,205,158,61,219,95,148,255,115,161,
+11,22,228,88,187,118,237,94,242,138,209,85,47,47,175,21,227,198,141,251,187,99,
+199,142,227,70,140,24,81,152,33,8,129,207,240,234,213,171,62,225,225,225,37,58,
+119,238,76,107,93,136,178,235,4,55,55,55,118,253,250,117,86,181,106,213,96,254,
+91,187,40,202,15,160,141,120,160,97,119,239,222,189,179,69,139,22,141,169,83,
+167,78,45,126,255,171,125,251,246,45,228,193,199,21,254,114,16,79,193,105,41,36,
+179,116,240,224,193,162,188,188,233,146,146,146,66,231,134,119,173,91,183,94,61,
+96,192,128,54,169,169,169,65,52,77,183,158,30,170,52,32,182,124,249,242,146,
+175,95,191,238,71,11,220,210,36,39,240,126,237,143,189,123,247,202,193,88,253,
+250,245,213,219,244,161,68,125,190,68,9,224,99,146,146,146,10,87,169,82,229,25,
+191,43,241,3,87,42,85,170,148,55,47,4,226,120,4,45,129,250,240,10,41,253,48,41,
+109,18,124,69,121,10,255,215,244,236,237,237,111,232,235,235,75,103,207,158,21,
+237,6,157,49,109,218,52,249,251,30,54,108,216,106,9,107,33,64,30,196,131,135,
+242,245,234,213,123,62,113,226,196,171,252,24,206,81,83,69,239,222,189,183,22,
+47,94,60,162,109,219,182,127,45,92,184,80,57,11,22,117,215,242,227,231,13,137,
+87,162,68,63,37,200,161,7,15,30,40,203,156,237,31,255,134,242,134,78,157,58,
+125,99,96,96,32,245,239,223,95,244,111,235,12,15,15,15,169,64,129,2,82,249,242,
+229,95,92,187,118,173,40,211,0,116,193,210,65,43,87,174,44,180,120,241,98,211,
+176,176,48,179,228,228,228,130,9,9,9,102,252,248,51,99,239,79,228,233,111,41,
+101,121,73,201,208,208,80,42,91,182,108,40,175,48,86,162,62,251,1,1,1,182,244,
+60,191,149,163,233,62,125,250,160,15,63,100,27,175,96,212,122,249,242,101,181,
+234,213,171,51,90,24,10,24,123,253,250,53,85,222,24,13,8,172,83,167,206,38,116,
+191,130,188,232,212,169,83,83,227,227,227,35,121,165,175,39,63,134,35,69,249,51,
+226,21,164,170,188,76,9,183,178,178,106,186,126,253,250,135,212,93,36,141,81,86,
+219,1,164,183,121,243,102,189,217,179,103,119,163,43,254,131,7,15,22,101,215,25,
+212,197,151,22,184,117,116,116,220,215,180,105,211,55,162,252,170,128,246,74,29,
+114,238,220,57,171,110,221,186,205,223,186,117,171,7,47,0,78,243,131,108,29,63,
+153,119,230,193,71,67,254,114,45,158,170,243,84,137,167,10,60,217,240,68,81,176,
+149,40,37,37,37,25,102,252,91,212,68,78,7,51,192,167,184,119,239,94,141,216,216,
+88,139,94,189,122,49,83,83,83,81,118,157,112,226,196,9,230,227,227,195,236,237,
+237,221,38,77,154,244,64,148,31,64,219,240,50,162,224,195,135,15,59,150,42,85,
+106,85,179,102,205,194,68,249,51,99,96,96,224,59,111,222,188,201,20,124,136,242,
+2,124,12,63,14,11,6,5,5,213,162,5,110,91,182,108,41,202,174,19,194,194,194,
+228,41,222,11,22,44,24,239,228,228,116,72,148,95,85,112,105,90,71,52,104,208,
+160,212,119,223,125,119,210,144,179,180,180,156,214,191,127,255,11,252,113,44,
+15,68,226,69,219,102,133,7,47,166,14,14,14,221,105,246,4,154,206,142,7,52,65,
+161,161,161,69,202,150,45,107,60,98,196,8,209,230,0,255,162,167,167,215,128,250,
+160,182,110,221,90,148,85,39,4,6,6,178,185,115,231,178,66,133,10,49,94,48,172,
+248,220,223,43,64,110,216,180,105,83,41,30,132,24,243,178,39,199,227,151,120,0,
+142,99,31,62,219,221,187,119,171,166,164,164,20,107,218,180,169,124,94,5,198,22,
+47,94,76,51,211,177,70,141,26,157,230,65,254,157,249,243,231,139,54,81,9,180,
+128,232,128,239,191,255,190,116,76,76,204,81,234,210,178,107,215,174,182,23,46,
+92,216,55,109,218,180,183,170,168,204,116,239,222,125,252,203,151,47,171,151,
+42,85,202,135,191,255,143,29,59,118,108,149,154,154,250,90,194,216,33,77,201,
+87,59,58,57,57,217,154,6,146,22,40,80,64,148,53,223,243,246,246,102,95,126,249,
+165,220,250,65,205,226,179,103,207,214,216,149,41,0,85,90,181,106,149,145,185,
+185,185,255,143,63,254,248,201,93,175,64,235,228,233,50,39,34,34,130,38,202,49,
+65,25,195,88,124,124,60,91,182,108,25,251,227,143,63,104,225,193,208,78,157,58,
+205,227,245,66,141,45,234,169,117,45,32,70,70,70,122,188,2,171,144,222,15,180,
+252,112,155,33,177,12,247,115,139,114,80,86,250,251,114,74,235,167,45,223,82,50,
+53,53,149,34,35,35,53,254,195,165,64,160,125,251,246,75,74,150,44,105,184,114,
+229,202,142,252,179,4,137,182,201,174,179,103,207,218,240,131,183,83,133,10,21,
+126,154,60,121,242,134,111,190,249,38,148,63,93,144,33,176,213,164,68,81,134,
+188,196,198,198,198,45,32,32,160,207,188,121,243,216,15,63,252,192,168,153,156,
+90,214,116,1,253,86,169,64,120,241,226,5,59,127,254,60,91,179,102,13,205,8,70,
+179,205,61,26,60,120,240,55,170,184,96,0,144,27,248,49,109,146,146,146,114,151,
+7,210,111,69,121,65,235,105,172,130,170,14,29,59,118,244,242,246,246,14,63,
+116,232,80,145,22,45,90,48,93,107,9,161,238,241,161,161,161,242,204,138,155,55,
+111,102,103,206,156,97,229,202,149,75,226,193,199,216,153,51,103,222,21,109,175,
+74,185,18,128,204,159,63,223,234,226,197,139,189,111,221,186,85,62,57,57,217,
+44,33,33,193,148,7,29,242,226,67,137,137,137,52,160,44,125,50,76,75,6,233,146,
+126,90,162,251,185,85,217,165,169,102,83,210,82,114,186,91,74,73,236,125,197,80,
+121,155,152,148,148,68,183,84,129,136,55,48,48,136,163,84,187,118,237,224,17,35,
+70,108,231,21,119,181,157,148,103,205,154,229,192,15,182,54,188,98,215,66,149,
+193,7,177,178,178,178,24,61,122,244,168,30,61,122,120,241,255,65,249,116,174,28,
+83,58,44,95,5,32,78,78,78,135,121,160,254,213,193,131,7,237,104,225,61,154,38,
+145,230,250,215,21,252,60,193,222,189,123,39,7,34,69,138,20,137,111,221,186,245,
+129,229,203,151,255,82,173,90,181,40,209,182,0,218,42,42,42,202,64,66,179,120,
+126,145,167,3,16,94,255,244,189,125,251,246,129,27,55,110,140,28,48,96,128,130,
+214,155,210,165,117,64,104,240,61,45,218,25,30,30,78,93,158,165,202,149,43,223,
+107,210,164,201,247,171,87,175,190,66,23,189,52,73,163,149,69,126,254,49,24,55,
+110,92,155,45,91,182,252,254,252,249,243,234,116,62,178,182,182,102,180,120,144,
+174,84,50,232,127,166,217,162,168,111,247,157,59,119,254,191,189,251,0,139,234,
+232,250,0,62,139,82,20,68,176,16,197,94,147,216,176,107,176,247,30,107,84,68,
+141,41,150,136,70,99,137,198,36,230,213,79,19,123,137,37,182,228,53,182,196,94,
+80,172,24,84,236,29,81,193,2,136,74,85,164,73,135,251,205,153,176,188,88,7,112,
+247,178,176,255,223,243,204,179,203,238,185,187,203,150,123,231,220,105,244,5,
+232,246,224,193,131,94,60,3,141,147,109,155,19,107,215,174,173,104,101,101,117,
+211,205,205,205,151,230,73,215,165,134,13,27,250,200,98,64,239,18,101,1,121,201,
+220,185,115,111,45,88,176,160,51,223,25,118,230,191,11,43,254,59,161,153,216,10,
+165,23,243,244,162,61,57,65,215,181,39,39,50,159,164,40,144,233,82,183,95,250,
+87,209,116,162,150,236,223,53,12,178,130,78,92,36,191,169,240,253,65,74,165,74,
+149,82,106,212,168,17,209,168,81,163,93,211,167,79,63,202,147,143,183,60,28,128,
+225,227,199,61,250,45,230,214,201,66,208,173,20,89,128,33,163,46,70,252,251,232,
+210,173,91,55,119,174,92,88,88,24,237,191,181,179,127,82,121,249,56,163,61,17,
+94,240,165,82,32,83,201,13,169,236,197,147,224,153,75,198,201,239,244,146,152,
+94,196,73,112,126,156,137,179,180,180,124,206,19,143,160,117,235,214,237,227,
+245,207,231,188,94,254,154,167,208,47,85,19,144,79,63,253,180,131,167,167,167,
+27,117,49,232,209,163,7,27,62,124,56,171,87,175,30,173,100,106,84,83,181,62,
+127,254,92,52,127,241,100,140,93,184,112,161,221,140,25,51,104,246,169,11,178,
+237,114,130,255,208,44,121,101,38,128,255,232,242,244,78,3,222,40,95,37,32,100,
+210,164,73,247,248,197,114,89,220,27,100,78,56,244,157,124,144,79,120,233,196,
+75,70,19,96,22,188,113,181,103,58,59,69,99,63,168,184,186,186,190,124,55,64,94,
+101,194,144,128,228,23,121,190,46,145,94,31,218,38,139,123,11,205,75,151,185,
+229,141,199,146,183,161,227,12,213,67,169,171,47,79,62,100,225,122,163,90,173,
+127,206,156,57,181,151,47,95,190,62,52,52,148,45,90,180,136,141,25,51,198,168,
+146,142,204,138,20,41,194,168,239,225,160,65,131,216,180,105,211,76,206,159,63,
+79,11,42,233,37,1,225,95,50,139,184,184,184,99,12,242,171,124,151,128,188,163,
+204,59,226,108,237,148,115,136,90,52,148,244,75,0,120,61,74,62,114,187,178,6,
+186,145,231,19,16,29,200,81,197,31,94,164,202,25,137,128,128,128,130,174,174,
+174,147,31,61,122,100,247,213,87,95,177,241,227,199,27,109,242,145,217,147,39,
+98,173,151,20,91,91,219,16,89,108,78,197,198,198,22,58,114,228,136,159,44,14,
+242,44,12,76,206,93,168,84,1,200,233,187,5,4,39,0,212,147,44,11,0,200,10,125,
+238,16,50,252,249,231,159,53,111,223,190,221,187,116,233,210,236,219,111,191,
+149,133,27,5,106,254,250,231,159,127,40,17,139,45,89,178,164,222,22,23,75,75,75,
+163,254,141,170,124,206,144,43,242,213,32,116,0,200,151,244,153,128,80,242,129,
+150,96,245,228,233,65,232,96,56,244,181,67,120,193,177,99,199,186,63,123,246,
+204,170,111,223,190,172,76,153,50,178,112,163,112,225,194,5,230,229,229,197,74,
+149,42,117,173,121,243,230,250,92,246,158,38,187,86,251,44,45,154,37,213,131,22,
+16,0,48,116,250,236,130,69,9,72,188,44,8,116,6,39,189,64,39,244,158,128,248,
+250,250,218,132,133,133,57,211,92,254,131,7,15,150,133,27,141,45,91,182,136,249,
+152,235,212,169,227,58,113,226,68,125,246,169,180,148,5,232,24,253,47,145,178,
+32,208,25,36,32,0,96,232,244,185,110,23,37,32,122,153,69,18,94,11,9,8,232,132,
+222,19,144,5,11,22,180,12,14,14,254,160,113,227,198,172,126,253,250,178,112,163,
+64,83,240,186,185,185,49,91,91,219,160,118,237,218,237,144,197,191,35,181,151,
+251,164,4,68,111,235,154,192,43,208,245,0,0,12,157,62,91,64,168,197,29,45,32,
+234,65,2,2,58,161,247,4,196,203,203,171,79,116,116,180,166,127,255,254,70,179,
+162,177,12,173,60,73,73,136,157,157,221,225,137,19,39,6,202,226,223,17,181,128,
+232,107,199,255,58,104,1,81,23,90,64,0,192,208,233,115,12,8,141,73,64,2,162,30,
+156,244,2,157,208,215,14,65,88,184,112,225,123,247,238,221,107,95,170,84,41,214,
+171,87,47,89,184,81,72,73,73,17,221,175,204,204,204,104,33,191,173,178,120,29,
+80,187,5,132,14,6,209,88,244,86,53,56,24,0,128,161,211,103,23,44,58,216,96,63,
+168,30,188,215,160,19,122,77,64,46,93,186,228,20,21,21,85,166,115,231,206,172,
+92,185,114,178,112,163,112,227,198,13,118,234,212,41,86,190,124,121,191,209,
+163,71,95,146,197,235,128,153,44,64,199,168,63,110,172,44,8,116,6,205,225,0,96,
+232,244,153,128,96,22,44,117,225,189,6,157,208,91,2,18,23,23,103,126,245,234,
+213,222,52,208,122,224,192,129,178,112,163,177,99,199,14,150,148,148,196,222,
+123,239,189,63,154,53,107,246,84,22,159,71,97,64,160,122,144,128,0,128,161,211,
+103,2,66,45,32,9,104,117,87,13,186,187,129,78,232,109,53,192,197,139,23,55,11,
+14,14,118,172,83,167,14,115,116,116,204,184,253,210,165,75,204,198,198,70,180,
+4,180,109,219,150,89,88,88,208,52,189,236,233,211,167,98,117,240,138,21,43,
+138,56,63,63,63,177,76,188,149,149,21,235,212,169,19,43,81,162,132,88,62,158,
+166,175,165,82,181,106,85,214,174,93,59,102,110,110,46,30,211,206,206,142,90,21,
+88,66,66,2,59,119,238,156,120,172,59,119,238,48,218,41,221,191,127,159,57,56,
+56,136,24,26,252,253,240,225,67,214,170,85,43,113,27,185,123,247,46,243,244,
+244,100,246,246,246,172,117,235,214,226,49,99,98,98,68,108,68,68,132,120,172,
+154,53,107,190,238,223,204,22,90,120,112,219,182,109,244,255,199,242,247,196,
+245,244,233,211,178,77,116,65,187,82,179,154,196,25,18,122,239,53,26,125,29,115,
+140,91,166,131,45,22,133,2,0,67,167,239,3,129,24,11,135,99,142,254,100,58,230,
+32,1,1,157,208,75,11,8,255,162,106,60,60,60,122,71,69,69,21,164,181,63,138,20,
+41,146,113,223,252,249,243,217,144,33,67,216,254,253,251,89,124,124,60,155,56,
+113,34,251,251,239,191,69,18,64,183,211,218,24,161,161,161,108,212,168,81,226,
+146,146,137,47,190,248,66,196,110,221,186,149,77,158,60,153,86,247,102,191,253,
+246,27,251,207,127,254,35,30,115,209,162,69,34,137,33,148,200,76,152,48,129,37,
+39,39,139,248,1,3,6,176,141,27,55,138,133,255,166,76,153,194,214,175,95,47,18,
+1,103,103,103,118,253,250,117,118,237,218,53,54,98,196,8,246,224,193,3,113,31,
+61,62,61,215,180,105,211,216,225,195,135,89,100,100,36,251,242,203,47,217,197,
+139,23,95,247,175,102,11,117,189,186,119,239,30,43,94,188,248,177,121,243,230,
+121,201,226,117,36,137,169,127,150,60,37,58,58,154,61,123,246,76,22,7,57,68,147,
+24,164,211,231,20,206,0,0,186,160,207,22,16,18,79,39,13,113,204,209,31,237,49,
+199,194,194,2,61,28,64,39,244,210,2,242,227,143,63,218,248,250,250,118,163,214,
+11,74,64,50,75,76,76,100,29,58,116,96,51,103,206,100,199,143,31,23,173,23,123,
+247,238,21,45,29,113,113,113,108,213,170,85,34,225,120,244,232,17,235,214,173,
+27,171,85,171,22,163,150,2,237,125,179,103,207,22,45,18,193,193,193,162,101,
+228,235,175,191,102,5,10,20,200,156,157,103,92,167,231,162,150,11,26,244,77,137,
+141,187,187,187,88,125,156,90,83,42,84,168,192,194,195,195,105,149,118,214,163,
+71,15,145,240,80,242,210,181,107,87,118,249,242,101,81,40,73,249,236,179,207,
+24,141,97,177,182,182,102,239,138,18,45,254,90,211,202,151,47,191,89,197,179,
+52,137,76,229,62,155,212,170,69,159,31,189,223,159,124,242,137,44,28,114,128,
+190,75,244,29,226,201,125,26,37,123,0,0,198,138,215,31,18,168,130,124,228,200,
+17,230,228,228,36,11,135,28,160,19,186,116,204,41,86,172,88,92,166,19,96,0,57,
+166,151,22,144,27,55,110,180,229,21,208,10,212,205,233,131,15,62,120,225,62,74,
+22,26,52,104,32,174,83,23,169,176,176,48,209,218,224,226,226,194,2,3,3,69,107,
+73,221,186,117,69,171,4,181,70,116,236,216,81,36,15,212,234,65,9,69,237,218,
+181,197,182,212,157,138,98,41,17,49,49,49,201,104,118,165,150,15,45,186,157,186,
+89,209,125,212,194,242,222,123,239,137,228,131,80,146,67,93,184,110,221,186,37,
+42,202,99,198,140,97,63,253,244,147,88,169,157,102,168,154,55,111,158,104,165,
+161,228,99,237,218,181,172,80,161,66,236,93,208,243,83,151,178,146,37,75,134,
+242,255,213,93,22,175,67,148,124,168,218,2,210,188,121,243,83,252,115,78,229,
+137,40,187,125,251,182,44,28,178,105,195,134,13,226,96,192,191,203,183,191,250,
+234,171,7,178,120,0,128,252,172,125,251,246,231,204,205,205,83,233,24,238,237,
+237,45,11,135,108,218,188,121,179,40,165,74,149,10,28,54,108,152,191,44,30,32,
+43,116,222,2,194,147,138,2,67,135,14,29,165,40,138,9,157,137,160,36,224,101,
+218,22,10,74,6,120,133,156,22,43,20,149,126,26,219,65,104,252,71,163,70,141,24,
+175,92,137,157,9,181,68,212,168,81,67,196,80,194,97,107,107,43,154,3,169,85,132,
+18,134,130,5,11,138,228,68,187,45,221,254,242,243,210,243,80,243,44,37,50,212,
+218,178,110,221,58,86,185,114,101,250,65,177,46,93,186,136,150,14,122,12,87,87,
+87,17,75,99,84,232,250,227,199,143,217,183,223,126,203,126,253,245,87,54,103,
+206,28,17,67,175,35,187,45,24,212,202,67,207,223,186,117,235,131,253,250,245,83,
+179,157,153,234,227,76,0,0,32,0,73,68,65,84,88,245,22,16,158,104,185,243,3,194,
+65,15,15,143,238,31,127,252,177,232,102,71,201,30,125,110,144,51,52,254,41,32,
+32,64,180,230,81,75,32,181,200,117,239,222,125,241,220,185,115,177,232,35,0,24,
+181,221,187,119,31,230,251,195,35,135,14,29,234,210,179,103,79,209,13,155,122,
+90,20,43,86,76,182,41,188,1,213,211,232,152,67,173,237,43,87,174,100,150,150,
+150,180,156,194,175,63,255,252,51,154,63,64,39,116,158,128,240,44,185,226,221,
+187,119,27,80,98,64,173,7,47,163,10,60,173,133,65,120,37,149,173,94,189,90,180,
+54,84,169,82,133,253,254,251,239,98,92,7,141,215,160,22,137,241,227,199,139,25,
+163,40,81,169,94,189,186,120,60,186,109,240,224,193,236,224,193,131,98,192,56,
+181,106,80,178,66,9,5,37,23,39,79,158,20,219,16,186,212,94,167,24,154,10,152,90,
+85,170,85,171,38,198,123,208,15,235,243,207,63,167,1,243,34,41,161,150,22,127,
+127,127,241,60,75,151,46,101,103,207,158,21,171,183,211,227,82,75,14,117,43,26,
+55,110,156,168,0,82,146,146,85,52,48,158,102,191,226,137,75,98,217,178,101,87,
+201,226,117,140,222,0,85,7,42,243,228,44,245,226,197,139,163,166,76,153,178,224,
+204,153,51,189,120,34,105,65,173,85,52,184,95,11,131,5,223,46,115,151,66,122,
+159,232,111,250,93,208,119,137,127,247,130,123,247,238,189,148,255,118,126,255,
+239,127,255,251,150,71,1,181,241,253,151,185,183,183,119,17,190,143,73,184,115,
+231,142,73,241,226,197,205,75,149,42,165,153,57,115,102,152,108,91,178,113,227,
+198,130,126,126,126,101,235,214,173,27,194,43,82,178,69,38,53,221,186,117,43,85,
+161,66,133,112,94,65,192,88,32,48,90,124,31,153,196,143,223,95,240,171,43,79,
+156,56,209,141,215,31,76,95,62,230,64,246,100,62,230,148,46,93,58,146,31,115,
+150,173,88,177,98,17,141,191,5,208,5,157,39,32,251,246,237,235,24,25,25,105,75,
+173,31,252,224,251,202,253,52,16,92,59,211,21,205,134,69,221,73,54,109,218,36,
+186,95,45,89,178,132,53,105,210,68,220,71,73,1,117,89,162,46,91,212,250,64,219,
+76,154,52,73,140,221,240,241,241,17,73,2,13,48,39,212,122,65,59,27,122,140,239,
+191,255,94,252,104,168,5,132,90,78,168,117,132,20,46,92,88,36,41,212,117,133,
+250,204,211,192,116,106,85,161,66,219,210,0,113,106,17,153,62,125,186,120,93,84,
+177,163,24,26,11,66,73,10,255,241,137,237,232,204,51,157,141,206,14,26,192,78,
+143,195,255,135,107,163,70,141,242,162,255,87,69,137,180,115,86,123,138,66,158,
+240,61,230,23,78,157,58,117,106,236,238,238,94,61,38,38,198,132,23,250,48,204,
+210,139,121,166,98,193,75,161,244,75,179,76,151,230,153,174,155,50,253,14,98,84,
+3,45,210,72,201,32,37,133,84,185,76,124,169,208,109,241,153,174,39,177,255,
+117,161,163,237,82,120,50,158,50,108,216,48,207,249,243,231,63,92,179,102,205,
+171,207,0,185,42,36,36,100,8,223,63,180,120,248,240,97,48,255,221,61,50,51,51,
+107,98,106,106,106,201,239,234,35,219,150,240,237,202,243,253,219,45,59,59,59,
+58,123,227,33,9,215,240,36,231,47,254,219,118,230,215,31,75,98,1,242,181,58,
+117,234,4,243,139,222,125,251,246,109,113,228,200,145,106,252,120,99,73,133,253,
+123,108,161,162,61,222,152,189,84,232,184,100,154,126,89,32,253,82,123,61,175,
+163,3,127,42,251,223,177,135,46,83,210,175,107,139,246,24,147,249,88,68,199,161,
+120,94,255,122,110,111,111,255,156,31,115,206,254,252,243,207,119,168,37,4,64,
+87,52,89,169,152,102,245,76,117,64,64,64,225,182,109,219,158,8,10,10,106,72,
+179,82,53,107,214,76,182,73,158,66,227,85,104,92,8,255,49,190,182,107,217,155,
+140,30,61,90,204,218,213,191,127,255,153,219,182,109,251,73,22,175,43,252,179,
+45,200,147,169,153,169,169,169,243,98,99,99,35,101,241,0,144,109,253,121,233,
+196,127,107,95,240,253,164,201,39,159,124,226,106,101,101,117,229,233,211,167,
+157,202,151,47,255,125,187,118,237,202,89,90,90,106,120,98,114,204,214,214,182,
+156,155,155,219,211,208,208,80,90,156,213,115,196,136,17,180,118,129,217,240,
+225,195,155,222,190,125,187,240,236,217,179,189,249,126,179,224,149,43,87,252,
+59,118,236,216,190,72,145,34,41,252,49,66,58,116,232,224,235,234,234,218,148,
+63,70,50,143,189,124,224,192,129,138,59,119,238,172,93,177,98,69,255,21,43,86,
+172,174,86,173,218,0,79,79,207,71,11,23,46,172,121,234,212,169,74,61,123,246,
+188,73,253,180,179,186,223,6,80,65,111,246,111,18,62,68,22,8,0,198,65,167,45,32,
+83,167,78,109,28,30,30,94,159,186,59,53,108,216,80,22,158,231,80,127,210,79,63,
+253,52,91,201,7,37,45,233,227,74,158,181,104,209,226,111,90,7,68,45,91,183,110,
+173,248,193,7,31,188,127,254,252,249,40,89,44,0,188,19,171,137,19,39,238,225,9,
+70,99,158,24,84,247,243,243,179,229,137,199,64,254,123,47,109,111,111,207,243,
+255,88,211,128,128,128,95,121,220,249,164,164,164,114,75,150,44,113,231,49,95,
+247,235,215,111,5,223,71,52,183,176,176,72,230,251,207,196,94,189,122,141,166,
+46,140,230,230,230,38,251,247,239,95,211,164,73,147,93,124,155,239,248,111,120,
+158,183,183,119,232,170,85,171,102,46,94,188,216,181,64,129,2,225,60,145,41,102,
+102,102,102,193,247,75,207,251,115,123,246,236,249,133,111,247,112,211,166,77,
+21,3,3,3,255,195,183,91,255,214,87,12,0,0,144,75,178,94,147,150,160,181,63,30,
+60,120,224,76,93,109,104,234,213,252,216,247,146,186,115,81,151,176,236,160,
+177,42,52,118,164,92,185,114,39,198,140,25,227,35,139,215,165,237,219,183,219,
+242,231,166,193,42,242,102,46,0,200,49,158,52,196,90,91,91,207,234,216,177,99,
+145,241,227,199,87,229,137,193,198,229,203,151,127,23,30,30,158,22,17,17,161,
+121,246,236,89,106,112,112,48,37,10,189,102,207,158,189,210,198,198,166,203,143,
+63,254,88,159,39,21,221,249,254,242,243,99,199,142,53,171,87,175,30,157,168,
+232,156,154,154,42,6,174,241,109,147,163,162,162,196,216,14,126,153,204,147,152,
+52,119,119,247,241,252,207,128,67,135,14,181,172,81,163,198,143,60,201,177,104,
+222,188,185,221,147,39,79,22,240,215,176,114,232,208,161,195,249,126,234,236,
+241,227,199,93,178,210,186,13,0,0,144,27,116,150,128,252,254,251,239,101,248,1,
+246,19,106,37,232,222,189,187,44,252,21,116,176,204,111,7,76,26,0,79,179,22,241,
+202,136,226,224,224,64,107,127,168,250,15,242,10,76,143,18,37,74,168,58,0,29,
+192,8,165,140,28,57,178,235,186,117,235,70,211,66,163,212,221,146,239,7,59,204,
+155,55,175,58,191,47,129,90,76,105,226,141,154,53,107,166,126,241,197,23,79,109,
+109,109,253,121,146,96,206,127,155,125,248,101,244,216,177,99,207,243,125,67,
+196,202,149,43,235,63,127,254,252,175,2,5,10,80,127,117,218,87,36,242,235,98,
+159,193,47,173,204,205,205,105,60,84,83,254,88,71,121,124,188,147,147,147,7,255,
+59,232,226,197,139,54,161,161,161,69,120,130,50,132,63,198,122,158,140,84,228,
+9,11,77,149,137,62,88,0,0,96,144,116,214,5,203,213,213,181,125,96,96,96,209,
+129,3,7,102,12,50,207,14,26,28,78,83,235,210,244,121,249,5,77,229,75,131,219,
+109,108,108,110,241,247,229,128,154,51,22,241,202,80,205,133,11,23,126,89,173,
+90,181,49,180,226,59,0,232,141,201,215,95,127,237,31,22,22,230,80,185,114,229,
+21,87,175,94,237,220,187,119,239,223,122,245,234,21,196,19,14,106,50,125,97,
+134,42,158,100,68,241,164,164,112,72,72,200,37,126,249,229,222,189,123,235,69,
+71,71,63,170,87,175,222,244,238,221,187,159,83,20,37,201,204,204,44,141,146,
+146,199,143,31,167,241,191,109,123,244,232,97,159,152,152,232,103,106,106,122,
+151,39,34,52,64,125,54,223,174,49,255,187,98,169,82,165,158,248,248,248,132,56,
+58,58,254,189,108,217,178,133,195,135,15,119,178,183,183,111,197,242,65,203,39,
+181,172,79,157,58,181,213,229,203,151,91,240,68,171,16,79,172,50,15,24,206,60,
+104,184,64,166,162,73,191,52,121,169,228,151,132,44,237,13,37,245,53,37,69,91,
+120,18,155,204,191,159,41,13,26,52,8,234,223,191,191,107,159,62,125,30,190,246,
+209,1,0,84,160,147,4,132,31,24,11,242,138,174,88,242,156,102,158,202,201,224,71,
+26,55,66,235,119,16,154,101,138,206,26,166,166,166,102,116,121,162,235,153,23,
+28,212,198,209,153,69,90,151,227,101,111,154,230,149,22,42,228,7,237,87,110,
+163,88,237,140,89,186,178,115,231,78,22,31,31,207,26,55,110,188,183,83,167,78,
+241,178,120,93,185,117,235,86,237,159,127,254,249,64,225,194,133,189,120,37,197,
+53,39,159,7,0,100,153,9,175,24,63,228,251,163,103,69,139,22,245,178,182,182,
+174,53,110,220,184,63,168,149,162,99,199,142,84,9,164,89,101,168,18,168,221,7,
+80,114,145,192,247,109,103,106,213,170,117,102,233,210,165,91,214,174,93,107,
+193,221,181,180,180,92,78,179,214,241,152,164,178,101,203,158,191,116,233,210,
+151,253,250,245,27,20,19,19,83,130,239,167,34,120,82,179,123,243,230,205,127,
+241,219,188,14,30,60,24,254,236,217,179,251,65,65,65,79,120,197,114,153,175,175,
+239,28,158,240,56,243,4,200,132,239,147,231,191,241,213,230,17,135,15,31,126,
+111,192,128,1,43,255,249,231,159,143,195,195,195,11,82,183,94,154,205,16,114,
+134,142,137,180,78,22,21,111,111,239,31,166,79,159,254,127,51,103,206,196,156,
+170,0,144,43,116,82,227,230,59,177,122,17,17,17,237,63,252,240,67,214,178,101,
+75,89,248,107,209,74,225,79,158,60,17,235,129,204,158,61,91,76,225,75,83,215,
+210,212,184,117,234,212,161,133,134,68,130,64,43,157,82,12,63,40,137,117,67,248,
+129,95,196,208,106,234,180,38,8,109,67,211,246,210,193,138,214,238,224,21,2,177,
+234,57,141,195,88,184,112,161,88,88,144,226,105,61,17,90,77,157,166,230,165,113,
+26,148,148,240,131,58,163,241,43,186,168,176,211,162,131,123,246,236,161,214,
+143,4,94,9,57,120,226,196,9,217,38,239,140,31,96,204,187,117,235,86,123,226,196,
+137,91,249,65,230,182,189,189,125,127,254,191,160,11,22,128,158,241,125,72,252,
+181,107,215,186,187,187,187,199,242,36,98,27,37,31,233,119,185,240,162,208,223,
+252,247,121,60,253,182,211,188,212,219,178,101,203,3,158,84,244,93,178,100,201,
+16,190,191,72,41,83,166,204,150,106,213,170,197,123,122,122,214,225,73,69,208,
+140,25,51,46,110,223,190,253,86,92,92,92,193,18,37,74,156,225,251,192,168,49,99,
+198,132,243,248,14,124,127,219,135,239,191,182,30,61,122,52,196,205,205,45,54,
+62,62,126,37,255,221,223,226,207,211,186,115,231,206,59,127,249,229,151,27,52,
+141,120,94,197,247,211,214,46,46,46,91,248,255,214,182,116,233,210,226,152,64,
+83,175,99,49,211,156,163,147,120,60,73,101,127,254,249,39,157,28,43,205,143,
+157,43,120,18,146,200,143,223,127,200,182,5,0,208,57,237,216,139,183,21,153,102,
+205,154,205,166,135,250,241,199,31,149,156,154,55,111,158,50,122,244,104,37,38,
+38,70,169,80,161,130,50,117,234,84,197,203,203,75,169,89,179,166,210,181,107,
+87,229,202,149,43,202,224,193,131,149,41,83,166,40,124,71,170,244,237,219,87,
+113,117,117,85,194,194,194,148,46,93,186,40,252,160,172,60,127,254,92,225,9,144,
+178,108,217,50,229,210,165,75,74,155,54,109,148,62,125,250,40,41,41,41,138,147,
+147,147,50,103,206,28,229,225,195,135,226,49,70,140,24,161,220,188,121,147,198,
+102,40,183,110,221,18,143,223,187,119,111,133,31,247,101,47,53,75,246,237,219,
+71,149,14,133,39,79,143,42,85,170,84,143,191,63,181,114,88,106,191,161,212,209,
+150,161,67,135,126,202,19,143,53,252,185,78,214,170,85,43,180,83,167,78,235,151,
+47,95,110,205,0,64,223,104,26,222,223,101,65,144,61,252,88,240,153,149,149,149,
+194,247,157,202,213,171,87,101,187,91,200,134,180,180,52,101,214,172,89,116,96,
+87,106,215,174,125,143,39,185,37,100,159,135,14,208,52,188,121,55,35,6,0,157,
+123,231,22,144,221,187,119,219,125,243,205,55,3,168,105,156,90,15,114,138,90,55,
+168,21,130,239,31,69,75,198,240,225,195,69,75,5,45,20,200,43,212,140,102,136,
+105,215,174,29,115,119,119,23,93,177,104,245,244,219,183,111,211,202,235,180,
+248,151,88,124,144,86,50,167,46,91,46,46,46,162,21,131,214,223,160,110,80,52,
+182,228,220,185,115,172,69,139,22,140,90,34,104,160,60,181,78,80,92,161,66,133,
+196,2,136,60,137,17,171,159,151,42,85,74,246,82,165,232,127,160,193,231,244,255,
+240,215,154,228,239,239,191,88,182,205,107,80,203,133,118,177,186,4,246,191,133,
+233,50,47,78,71,221,56,226,15,29,58,148,106,97,97,113,131,63,223,233,81,163,70,
+93,157,60,121,178,215,225,195,135,223,248,192,0,0,134,42,44,44,204,188,125,251,
+246,3,168,75,46,237,231,235,214,173,43,219,4,178,129,142,141,223,125,247,29,243,
+244,244,164,197,126,171,28,57,114,164,53,191,121,135,108,59,0,0,93,210,69,2,210,
+145,39,0,85,168,235,21,37,11,239,138,42,239,148,204,100,94,107,67,59,165,175,
+118,108,8,117,213,226,73,15,77,109,43,22,59,172,85,171,150,184,157,14,88,212,
+229,74,219,133,74,73,111,189,73,76,76,20,133,186,69,209,120,15,74,58,190,253,
+246,91,86,173,90,53,246,215,95,127,137,117,58,214,175,95,207,230,204,153,35,18,
+7,74,124,222,5,245,177,165,4,160,120,241,226,129,115,231,206,109,199,19,40,
+127,217,54,57,69,205,234,180,214,136,22,79,62,222,18,13,0,96,216,38,76,152,80,
+240,222,189,123,214,149,42,85,98,29,59,118,148,133,67,14,208,241,114,208,160,65,
+236,208,161,67,236,248,241,227,197,100,241,0,0,186,246,206,211,240,94,191,126,
+253,227,132,132,4,49,248,60,187,107,100,188,137,242,82,183,47,237,223,116,73,45,
+37,84,193,191,127,255,190,232,23,220,163,71,15,209,194,65,131,189,171,87,175,
+46,174,83,75,72,100,100,36,219,177,99,135,72,90,168,85,195,222,222,158,6,131,
+179,175,191,254,154,85,173,90,85,140,57,161,241,34,52,46,132,90,66,182,111,223,
+46,18,23,127,127,127,49,94,132,238,203,169,125,251,246,137,100,199,214,214,118,
+135,62,147,15,0,128,252,230,175,191,254,50,137,139,139,43,80,162,68,9,102,109,
+141,158,164,250,66,9,30,225,199,83,221,28,184,1,0,178,225,157,18,144,105,211,
+166,149,121,240,224,65,75,170,220,83,23,166,119,81,164,72,17,49,192,144,206,204,
+80,23,44,237,140,84,116,16,178,180,180,20,215,173,172,172,196,1,137,6,151,83,
+161,51,56,99,199,142,101,14,14,14,236,226,197,139,204,194,194,66,76,227,75,133,
+186,112,81,107,7,181,166,208,118,51,103,206,100,179,102,205,98,3,6,12,16,93,173,
+40,113,161,193,237,161,161,161,98,240,57,221,94,179,102,77,246,209,71,31,137,
+110,94,148,220,228,4,181,180,208,148,194,230,230,230,169,142,142,142,123,101,
+241,0,0,240,63,169,169,169,212,132,93,80,23,147,129,192,155,101,234,41,240,206,
+61,33,0,0,178,77,121,135,65,232,189,123,247,158,70,11,101,141,28,57,242,149,
+129,110,217,197,147,5,37,41,41,73,92,231,149,120,49,80,78,123,157,6,145,19,186,
+164,191,181,183,251,248,248,40,81,81,81,226,111,158,72,40,79,159,62,85,246,238,
+221,171,60,123,246,76,60,222,162,69,139,148,113,227,198,101,60,7,221,127,253,
+250,117,49,208,93,139,158,211,219,219,91,20,237,243,208,245,197,139,23,43,57,
+225,233,233,169,240,228,73,169,81,163,198,45,158,20,225,244,29,64,254,134,65,
+232,186,87,148,151,107,77,155,54,149,237,110,225,29,208,177,138,253,187,86,204,
+55,146,207,67,23,48,8,29,0,94,144,227,51,31,247,239,223,55,239,212,169,83,111,
+106,169,160,150,136,119,149,121,13,142,204,235,122,100,190,78,93,188,180,221,
+188,232,246,247,223,127,63,227,62,154,82,151,186,97,209,160,116,106,129,160,191,
+121,130,194,120,18,146,17,67,131,207,169,100,70,3,197,169,229,35,51,122,142,158,
+61,123,178,156,160,231,166,181,73,202,148,41,179,182,81,163,70,209,178,120,0,0,
+120,129,104,1,145,5,129,206,224,189,6,0,213,229,120,199,179,118,237,218,118,161,
+161,161,245,27,52,104,192,154,52,105,34,11,87,5,13,46,255,227,143,63,216,217,
+179,103,197,216,15,90,27,164,100,201,146,178,205,94,65,221,187,114,130,186,115,
+237,218,181,139,186,141,69,55,107,214,108,223,209,163,71,101,155,0,64,30,114,
+247,238,93,243,170,85,171,166,106,52,154,23,86,55,215,82,20,133,133,135,135,91,
+218,217,217,61,127,221,253,144,37,148,128,188,83,247,96,200,22,140,1,1,0,213,
+229,104,39,79,7,217,11,23,46,12,140,137,137,49,233,219,183,111,198,44,85,134,
+128,198,139,180,111,223,94,204,158,146,147,228,227,93,28,59,118,76,44,116,200,
+159,119,255,79,63,253,228,39,139,7,128,188,37,34,34,162,210,204,153,51,87,44,91,
+182,172,89,250,77,52,29,54,173,118,206,110,222,188,89,115,214,172,89,191,95,185,
+114,165,255,155,31,1,178,128,18,16,84,138,213,131,247,26,0,84,151,163,22,144,
+121,243,230,21,247,241,241,105,103,99,99,35,6,115,3,19,221,174,104,74,95,51,51,
+179,180,50,101,202,108,164,69,8,101,219,0,64,222,210,164,73,19,159,230,205,155,
+167,4,6,6,122,244,235,215,111,115,64,64,64,224,253,251,247,237,134,13,27,54,119,
+224,192,129,35,76,77,77,163,235,212,169,131,185,176,223,13,18,16,117,225,189,6,
+0,245,41,57,24,132,222,189,123,119,39,218,116,192,128,1,98,85,114,67,49,105,
+210,36,133,87,12,100,97,122,113,237,218,53,197,210,210,82,225,201,199,253,203,
+151,47,91,190,250,78,3,64,126,48,107,214,172,42,252,119,254,196,196,196,68,41,
+90,180,168,248,221,23,42,84,72,41,92,184,176,50,113,226,68,23,217,246,32,69,43,
+115,251,97,16,186,126,101,26,132,62,67,242,121,232,2,6,161,3,192,11,178,221,5,
+235,232,209,163,133,130,130,130,92,104,10,191,129,3,7,190,176,96,160,90,248,190,
+147,93,185,114,69,116,121,138,136,136,16,183,209,186,30,187,119,239,102,39,79,
+158,20,139,243,37,37,37,49,15,15,15,182,127,255,254,140,24,125,162,177,31,180,
+26,123,157,58,117,14,54,104,208,0,253,191,1,242,169,31,126,248,225,190,131,131,
+195,31,52,89,69,84,84,148,248,221,211,4,24,252,183,239,51,125,250,244,77,178,
+237,33,75,112,86,94,61,120,175,1,64,117,217,206,30,118,236,216,81,205,215,215,
+183,62,45,250,215,182,109,91,89,184,206,81,114,49,99,198,12,81,104,161,65,154,
+129,235,206,157,59,180,32,34,139,141,141,101,158,158,158,44,58,58,90,44,46,184,
+108,217,50,17,227,228,228,36,86,79,215,23,170,132,80,242,99,97,97,17,91,165,74,
+149,85,178,120,0,200,219,122,245,234,245,155,189,189,125,184,246,111,107,107,
+107,165,85,171,86,203,138,22,45,26,245,182,237,32,75,48,8,93,93,120,175,1,64,
+125,74,54,187,96,213,174,93,123,10,109,54,117,234,212,55,181,236,234,213,185,
+115,231,148,198,141,27,43,33,33,33,162,251,215,196,137,19,149,81,163,70,137,251,
+28,29,29,149,91,183,110,41,7,15,30,84,26,53,106,164,196,197,197,137,219,39,76,
+152,160,156,63,127,254,109,15,251,78,246,239,223,175,208,122,40,53,106,212,56,
+193,255,196,206,28,192,8,116,235,214,109,1,173,249,195,175,42,77,155,54,245,141,
+140,140,180,145,109,3,89,66,179,135,60,70,23,44,253,202,212,5,107,142,228,243,
+208,5,116,193,2,128,23,100,107,16,186,187,187,187,213,103,159,125,230,76,43,142,
+211,202,225,185,225,230,205,155,52,205,37,117,131,16,3,191,169,123,149,118,182,
+43,37,61,89,162,238,89,117,235,214,21,211,242,146,133,11,23,190,241,241,222,21,
+61,231,223,127,255,45,46,235,215,175,239,170,209,104,210,100,219,0,64,222,55,
+113,226,196,197,222,222,222,206,79,159,62,181,107,221,186,245,92,27,27,155,72,
+217,54,144,37,154,244,2,234,192,73,51,0,80,93,182,18,144,21,43,86,180,230,7,219,
+90,205,154,53,163,254,206,178,112,189,176,178,178,98,197,139,23,103,211,167,79,
+23,11,6,250,249,249,137,68,68,155,124,208,109,52,59,23,173,201,161,181,105,211,
+38,214,176,97,195,28,175,239,241,54,129,129,129,236,208,161,67,172,84,169,82,
+161,93,186,116,217,69,207,5,0,134,227,242,229,203,69,38,76,152,208,250,198,141,
+27,54,9,9,9,150,241,241,241,133,248,254,130,206,78,80,161,9,35,10,103,42,244,
+55,205,43,46,173,148,181,109,219,54,205,194,194,194,140,206,38,207,159,63,255,
+51,126,211,80,217,54,239,128,78,108,40,233,151,47,151,212,76,37,37,211,101,138,
+137,137,73,74,137,18,37,146,248,254,58,190,105,211,166,135,103,205,154,245,207,
+107,31,221,240,72,223,127,208,25,188,215,0,160,186,44,39,32,252,24,171,169,95,
+191,254,192,184,184,56,205,224,193,131,115,101,240,57,105,221,186,53,91,190,124,
+57,219,187,119,175,88,9,125,193,130,5,108,232,208,161,140,6,197,211,122,36,52,
+22,131,214,38,89,191,126,61,91,183,110,157,184,125,229,202,149,108,207,158,61,
+98,154,92,158,64,177,49,99,198,200,158,38,203,104,144,59,141,47,105,220,184,
+177,219,160,65,131,252,157,157,157,101,155,0,128,10,248,62,203,98,200,144,33,
+109,156,156,156,102,5,6,6,214,79,76,76,100,133,11,23,102,69,139,22,21,251,5,93,
+80,254,215,69,181,185,174,30,83,151,232,245,209,216,56,154,176,195,215,215,119,
+60,127,63,198,110,216,176,97,157,129,79,19,142,49,32,234,194,123,13,0,170,203,
+114,2,178,122,245,234,234,97,97,97,31,219,219,219,179,206,157,59,203,194,245,
+198,206,206,142,94,11,91,179,102,13,243,246,246,102,35,71,142,100,189,123,247,
+22,247,77,153,50,133,157,62,125,154,149,43,87,142,173,90,181,138,109,220,184,
+81,36,74,20,75,183,81,203,137,169,169,169,228,25,178,46,57,57,89,36,53,22,22,
+22,105,60,1,217,97,224,7,117,0,163,50,106,212,168,175,220,221,221,231,4,7,7,
+155,209,194,164,116,114,192,193,193,129,149,40,81,34,215,78,160,168,45,45,45,
+141,133,132,132,136,19,51,115,230,204,49,191,124,249,242,79,158,158,158,251,249,
+93,193,178,109,115,17,18,16,117,225,189,6,0,245,41,89,28,132,222,169,83,39,23,
+154,247,158,87,248,21,248,215,133,11,23,20,158,208,40,60,41,59,119,254,252,121,
+11,201,91,13,0,42,113,113,113,105,111,107,107,251,204,220,220,92,89,179,102,
+141,146,146,146,34,251,57,231,123,205,155,55,87,248,251,241,188,125,251,246,186,
+239,139,170,91,165,120,121,138,65,232,250,149,105,16,250,82,201,231,241,206,52,
+26,13,6,161,3,192,11,178,116,230,227,214,173,91,166,222,222,222,125,233,172,33,
+173,253,1,255,38,110,91,182,108,17,173,32,53,107,214,220,219,164,73,147,4,217,
+54,0,160,127,167,78,157,42,204,203,28,154,149,234,151,95,126,97,195,135,15,23,
+99,195,140,25,141,147,163,214,144,130,5,11,38,243,196,44,69,22,15,160,75,166,
+166,166,89,170,107,0,128,241,200,210,78,97,229,202,149,77,159,61,123,214,188,94,
+189,122,140,87,180,101,225,70,129,6,185,83,183,134,146,37,75,198,247,232,209,
+227,160,44,30,0,212,177,110,221,186,174,247,238,221,107,208,162,69,11,246,213,
+87,95,201,194,141,2,77,214,65,93,86,139,22,45,250,112,202,148,41,79,101,241,0,
+186,132,4,4,0,94,150,165,157,194,185,115,231,6,196,197,197,153,246,239,223,63,
+99,106,91,99,119,244,232,81,246,224,193,3,26,91,226,62,118,236,88,47,89,60,0,
+232,159,162,40,38,94,94,94,67,248,254,138,125,254,249,231,52,62,75,182,137,81,
+160,201,50,104,129,214,10,21,42,156,111,216,176,225,51,89,60,128,46,153,153,153,
+81,93,35,85,22,7,0,198,35,75,9,8,175,104,119,178,182,182,102,61,123,246,148,
+133,26,5,234,202,64,107,127,240,157,42,171,92,185,242,38,172,253,1,96,24,86,175,
+94,93,237,209,163,71,173,203,150,45,203,186,118,237,42,11,55,10,148,140,109,
+219,182,141,21,41,82,132,181,108,217,114,183,44,30,64,215,76,77,77,105,98,1,28,
+39,1,32,67,150,18,144,240,240,112,123,154,254,182,74,149,42,178,80,163,112,246,
+236,89,246,207,63,255,208,218,31,1,46,46,46,71,100,241,0,160,142,227,199,143,15,
+230,251,43,107,58,89,162,93,160,212,216,93,184,112,129,93,188,120,145,85,172,88,
+209,231,251,239,191,63,45,139,7,208,181,244,22,16,140,61,2,128,12,89,74,64,56,
+179,150,45,91,26,205,212,149,111,19,19,19,35,86,97,167,193,231,245,235,215,95,
+221,166,77,27,116,103,0,48,0,219,183,111,183,184,114,229,74,39,154,106,123,192,
+128,1,178,112,163,193,223,23,113,89,174,92,185,255,90,91,91,99,181,118,80,93,
+250,24,16,36,32,0,144,33,171,25,133,134,102,81,49,118,247,239,223,23,253,202,61,
+60,60,148,170,85,171,30,27,55,110,220,26,217,54,0,160,142,157,59,119,214,9,12,
+12,172,219,176,97,67,214,168,81,35,89,184,81,160,53,64,246,237,219,71,107,159,
+60,31,50,100,200,33,89,60,128,62,160,5,4,0,94,150,165,133,8,105,224,249,178,
+101,203,152,173,173,45,251,232,163,143,68,95,98,99,65,171,39,243,74,141,232,114,
+181,121,243,102,113,189,105,211,166,143,157,156,156,70,183,105,211,38,66,182,61,
+0,232,159,162,40,26,254,123,28,145,148,148,100,218,183,111,95,12,62,79,71,43,
+160,63,122,244,136,117,236,216,241,230,192,129,3,111,240,253,150,108,19,0,157,
+67,2,2,0,47,203,82,2,210,186,117,235,63,78,157,58,245,229,200,145,35,53,52,159,
+190,49,117,197,162,245,62,180,173,63,54,54,54,177,142,142,142,219,157,157,157,
+167,185,184,184,132,72,54,5,0,149,44,90,180,168,164,175,175,111,15,254,27,101,
+125,250,244,145,133,27,133,212,212,84,177,86,81,193,130,5,211,234,212,169,179,
+70,163,209,40,178,109,0,244,193,220,220,156,22,226,65,2,2,0,25,178,148,128,184,
+185,185,141,236,210,165,203,159,167,79,159,46,22,27,27,107,201,15,108,133,249,
+205,116,138,145,230,228,53,231,197,44,189,104,175,155,178,127,31,251,229,66,59,
+161,220,202,94,82,211,75,202,75,37,57,189,36,101,42,137,233,37,158,138,149,149,
+85,156,165,165,229,243,126,253,250,61,92,177,98,197,141,51,103,206,188,238,241,
+1,32,23,208,73,130,33,67,134,12,8,15,15,183,163,228,163,82,165,74,178,77,140,
+2,173,251,113,242,228,73,154,169,47,232,227,143,63,222,179,96,193,2,217,38,0,
+122,97,102,102,70,199,254,100,89,28,0,24,143,44,37,32,233,103,206,140,118,246,
+20,158,116,137,194,147,15,89,40,0,168,207,196,215,215,119,8,77,143,237,236,236,
+44,139,53,26,187,118,237,98,207,159,63,103,239,191,255,254,238,22,45,90,160,
+187,40,228,26,115,115,115,58,241,152,36,139,3,0,227,145,91,173,17,0,0,58,49,121,
+242,228,218,247,239,223,175,65,45,31,173,90,181,146,133,27,5,58,97,178,115,231,
+78,26,175,151,92,163,70,141,245,232,126,5,185,41,189,5,4,9,8,0,100,64,2,2,0,
+121,154,167,167,231,199,17,17,17,150,52,245,110,209,162,69,101,225,70,225,212,
+169,83,236,230,205,155,172,122,245,234,215,230,204,153,115,75,22,15,160,79,60,1,
+161,222,22,72,64,0,32,3,18,16,0,200,179,60,60,60,74,242,228,227,51,154,169,175,
+95,191,126,178,112,163,64,99,98,104,198,62,154,48,164,121,243,230,110,26,141,
+38,65,182,13,128,62,89,88,88,80,2,146,40,139,3,0,227,129,4,4,0,242,172,21,43,
+86,52,10,12,12,172,68,11,165,214,174,93,91,22,110,20,104,170,240,131,7,15,50,
+59,59,187,240,22,45,90,252,41,139,7,208,183,244,89,176,144,128,0,64,6,36,32,0,
+144,39,209,218,31,94,94,94,3,19,18,18,24,173,111,81,176,96,150,230,212,200,247,
+246,236,217,195,34,34,34,40,33,59,217,175,95,63,127,89,60,128,190,241,4,132,102,
+198,68,75,28,0,100,64,2,2,0,121,210,194,133,11,203,134,134,134,118,46,83,166,12,
+235,220,185,179,44,220,40,80,50,182,109,219,54,177,88,108,203,150,45,119,203,
+226,1,212,80,160,64,1,51,14,9,8,0,100,64,2,2,0,121,210,241,227,199,63,137,140,
+140,44,217,173,91,55,246,222,123,239,201,194,141,194,229,203,151,217,197,139,23,
+89,213,170,85,31,142,29,59,214,93,22,15,160,134,212,212,212,170,180,158,150,44,
+14,0,140,7,18,16,0,200,115,220,220,220,10,251,250,250,246,53,53,53,101,131,6,
+13,146,133,27,141,237,219,183,139,21,208,121,2,178,165,104,209,162,33,178,120,
+0,125,83,20,197,244,238,221,187,85,210,210,210,98,101,177,0,96,60,144,128,0,
+64,158,115,236,216,177,118,161,161,161,77,28,28,28,88,227,198,141,101,225,70,
+33,44,44,140,237,221,187,151,149,44,89,50,161,87,175,94,251,100,241,185,233,
+198,141,27,166,188,98,90,64,22,7,121,223,186,117,235,42,199,199,199,127,80,171,
+86,173,40,89,44,0,24,15,36,32,0,144,231,120,122,122,118,140,141,141,45,64,107,
+127,208,20,188,250,70,51,75,253,248,227,143,44,37,37,69,22,154,107,142,31,63,
+206,2,2,2,88,217,178,101,61,6,13,26,116,94,22,159,155,204,204,204,170,44,94,188,
+120,237,162,69,139,26,202,98,243,139,184,184,56,54,115,230,76,22,18,18,66,211,
+71,139,169,146,141,193,174,93,187,190,228,23,129,187,119,239,190,43,139,5,0,
+227,129,4,4,0,242,148,133,11,23,22,241,247,247,239,70,139,14,246,234,213,75,22,
+174,19,148,228,124,240,193,7,76,163,209,200,66,115,69,90,90,26,219,184,113,35,
+13,246,85,28,29,29,247,240,215,153,42,219,38,55,217,217,217,221,189,117,235,86,
+241,37,75,150,156,116,114,114,250,239,246,237,219,235,202,182,201,235,104,93,
+150,234,213,171,179,194,133,11,179,235,215,175,179,19,39,78,200,54,201,243,182,
+108,217,50,233,201,147,39,19,235,212,169,51,179,100,201,146,207,101,241,0,96,60,
+48,111,37,0,228,41,167,79,159,238,21,21,21,85,177,71,143,30,52,214,65,22,158,
+129,102,136,250,227,143,63,24,205,154,245,207,63,255,48,94,41,98,53,107,214,164,
+74,146,152,53,106,252,248,241,172,68,137,18,236,222,189,123,108,245,234,213,
+226,76,53,117,239,250,226,139,47,196,246,218,214,143,93,187,118,49,26,123,114,
+254,252,121,198,95,7,27,49,98,196,43,107,144,196,198,198,178,181,107,215,138,24,
+122,142,175,191,254,154,29,61,122,84,60,198,192,129,3,153,159,159,31,115,117,
+117,101,173,91,183,22,107,118,184,184,184,48,75,75,75,182,106,213,42,214,164,73,
+19,214,160,65,131,87,94,255,219,248,250,250,178,147,39,79,178,247,223,127,63,
+162,119,239,222,135,150,45,91,38,219,36,87,217,218,218,166,186,185,185,253,204,
+95,115,167,173,91,183,14,187,120,241,98,191,254,253,251,111,239,210,165,203,
+178,185,115,231,62,244,241,241,81,100,143,161,75,151,46,93,98,191,255,254,187,
+248,142,56,59,59,179,246,237,219,139,207,150,62,15,74,22,106,213,170,197,190,
+250,234,43,241,25,209,231,90,182,108,217,87,190,67,86,86,86,236,155,111,190,161,
+69,247,216,95,127,253,197,138,21,43,38,62,243,106,213,170,177,145,35,71,82,171,
+143,248,252,41,89,164,239,15,253,77,238,222,189,43,190,151,244,157,225,159,29,
+107,219,182,173,228,213,26,62,69,81,10,241,247,235,155,149,43,87,206,136,140,
+140,28,193,223,219,29,178,109,0,192,184,32,1,1,128,60,131,87,108,76,28,28,28,62,
+77,77,77,213,100,119,240,121,98,98,34,251,229,151,95,196,148,189,221,187,119,
+103,83,167,78,101,229,203,151,103,163,70,141,18,149,74,94,89,18,221,172,190,251,
+238,59,214,180,105,83,209,186,66,127,83,165,179,121,243,230,140,42,245,180,222,
+200,206,157,59,69,133,159,226,104,214,169,73,147,38,137,177,23,84,241,36,180,18,
+249,207,63,255,44,98,198,140,25,35,42,177,243,231,207,103,125,250,244,17,3,230,
+43,86,172,72,11,40,178,74,149,42,137,4,138,18,135,228,228,100,86,163,70,13,81,
+145,205,201,138,238,244,154,168,2,203,43,187,103,120,34,21,195,111,42,42,219,38,
+183,241,74,185,79,163,70,141,246,248,251,251,15,224,73,159,85,64,64,192,103,87,
+174,92,233,199,19,196,253,60,1,81,109,124,8,37,156,148,92,208,247,128,18,81,250,
+60,105,48,255,175,191,254,42,6,244,211,103,248,231,159,127,138,219,23,45,90,
+196,120,130,196,58,118,236,200,62,254,248,99,241,29,42,87,174,156,72,48,214,173,
+91,39,190,67,244,88,83,166,76,17,137,102,207,158,61,197,109,207,158,61,99,211,
+166,77,19,215,41,169,53,49,49,17,235,214,60,125,250,148,141,30,61,90,124,55,40,
+49,254,254,251,239,217,255,253,223,255,137,4,72,69,148,9,189,245,251,98,99,99,
+163,169,87,175,94,193,202,149,43,155,218,217,217,153,89,91,91,155,242,132,203,
+172,80,161,66,166,60,145,50,229,255,139,233,243,231,207,173,121,50,85,49,48,48,
+176,118,179,102,205,90,243,100,174,8,79,194,134,243,219,214,191,237,177,1,192,
+56,33,1,1,128,60,99,198,140,25,181,31,61,122,212,132,42,238,237,218,181,147,
+133,191,130,87,164,216,184,113,227,196,25,109,90,47,131,18,13,58,235,28,29,29,
+45,90,34,168,139,213,244,233,211,69,5,241,193,131,7,162,219,204,195,135,15,197,
+223,116,214,154,208,245,79,63,253,148,245,237,219,87,180,84,208,25,243,152,152,
+152,140,4,132,174,187,185,185,177,245,235,215,179,186,117,235,138,174,91,183,
+110,221,98,245,235,215,23,45,29,52,110,133,90,57,168,242,74,221,113,150,46,93,
+42,30,139,206,140,83,34,196,43,120,111,251,23,94,65,99,11,168,194,108,107,107,
+203,120,5,190,14,127,189,135,100,219,24,2,122,95,195,194,194,138,80,194,70,168,
+117,128,39,3,69,248,251,238,68,127,171,213,221,141,90,162,40,41,212,182,116,81,
+43,24,181,126,241,247,146,237,222,189,91,124,30,148,168,82,194,65,99,129,138,
+23,47,46,190,67,212,234,69,223,33,74,67,120,248,161,0,0,11,233,73,68,65,84,40,
+40,129,224,21,112,118,224,192,1,241,253,160,199,160,36,164,66,133,10,162,37,
+132,90,70,232,179,55,55,55,207,248,191,232,251,116,248,240,97,145,124,210,247,
+136,182,163,46,90,212,122,162,114,2,210,155,151,183,54,185,81,107,16,79,148,77,
+78,159,62,157,204,127,19,9,84,120,210,161,45,137,252,127,73,228,201,72,10,45,
+56,24,20,20,20,199,191,223,27,120,2,182,101,232,208,161,143,222,246,184,0,96,
+188,144,128,0,64,158,113,237,218,181,207,34,34,34,172,232,140,51,141,1,201,46,
+26,203,161,221,142,42,131,116,198,155,80,165,144,18,128,248,248,120,209,253,42,
+56,56,152,213,171,87,79,116,171,161,138,97,102,84,113,164,74,168,22,157,201,
+214,86,162,9,85,214,232,177,180,107,147,148,46,93,90,84,72,73,163,70,141,68,197,
+155,87,204,68,242,65,168,37,132,158,39,60,60,92,36,70,217,229,233,233,201,188,
+188,188,40,193,185,230,228,228,212,115,242,228,201,209,178,109,12,68,26,79,34,
+151,28,61,122,244,3,250,131,222,71,123,123,251,103,101,203,150,221,123,230,204,
+153,222,252,61,205,254,7,156,3,244,89,83,151,42,45,234,2,69,107,169,80,66,169,
+253,126,208,103,78,223,3,234,162,69,223,33,74,100,73,230,239,16,161,207,157,190,
+11,214,214,214,25,159,57,37,32,244,191,81,107,74,230,164,138,174,83,162,67,173,
+32,212,130,69,247,211,119,229,229,238,124,42,216,195,203,212,183,5,208,255,68,
+175,143,151,52,254,103,106,122,73,203,116,249,66,151,57,74,192,169,0,0,188,9,6,
+161,3,64,158,112,224,192,129,34,60,1,105,79,149,190,156,116,83,122,25,85,170,
+180,137,3,93,82,107,135,143,143,15,115,119,119,23,3,186,127,248,225,7,81,217,
+164,251,94,62,27,159,57,225,32,84,57,165,86,148,199,143,31,139,138,39,37,23,52,
+174,128,108,216,176,129,253,244,211,79,34,185,161,110,56,116,157,206,124,159,58,
+117,74,220,79,221,179,168,226,249,209,71,31,137,46,95,217,65,175,131,206,152,
+211,107,231,149,228,121,60,249,8,228,55,71,230,133,178,111,223,190,82,252,253,
+238,69,21,219,114,229,202,61,229,21,255,165,252,245,127,196,19,130,111,248,253,
+170,77,55,70,73,31,181,118,80,242,64,173,24,212,77,46,50,50,82,116,217,163,241,
+25,132,18,60,122,143,169,155,20,189,222,204,223,155,151,191,11,244,93,161,100,
+242,230,205,155,226,239,115,231,206,209,212,200,34,201,164,231,208,162,235,239,
+191,255,190,72,86,168,107,224,130,5,11,88,229,202,149,95,72,104,84,66,43,148,75,
+63,175,244,66,201,237,243,244,109,146,216,191,9,136,170,227,117,0,32,127,64,11,
+8,0,228,9,43,87,174,108,16,20,20,84,179,85,171,86,57,58,75,76,21,195,204,93,
+96,104,16,48,85,42,9,93,210,89,106,234,138,67,93,110,168,31,63,37,17,212,61,
+134,206,134,183,104,209,34,163,197,34,243,118,218,199,164,219,232,140,47,117,
+217,217,186,117,171,24,47,64,99,5,168,75,142,183,183,183,24,19,178,112,225,66,
+241,216,148,128,80,69,150,250,250,83,55,44,234,62,69,219,80,197,179,107,215,174,
+98,224,114,135,14,29,94,255,79,188,132,186,137,237,223,191,159,206,200,7,127,
+254,249,231,39,104,208,123,94,240,228,201,19,141,139,139,203,183,212,125,172,
+125,251,246,75,249,255,189,124,252,248,241,247,142,28,57,66,119,151,226,69,157,
+254,87,28,117,159,58,116,232,144,24,179,65,73,1,181,110,208,119,108,240,224,193,
+98,252,71,195,134,13,69,50,249,237,183,223,138,150,47,106,13,121,211,119,72,59,
+176,156,146,146,217,179,103,139,196,146,39,205,34,185,208,126,79,104,91,109,171,
+25,141,37,161,214,15,234,150,71,93,232,168,117,140,198,158,168,76,181,247,26,0,
+32,131,246,12,206,219,10,0,64,110,242,243,243,51,107,210,164,201,54,126,85,89,
+183,110,157,146,19,169,169,169,202,163,71,143,20,158,84,136,191,195,194,194,148,
+232,232,104,113,157,46,67,66,66,196,117,186,60,120,240,160,226,235,235,43,98,
+121,5,82,121,250,244,169,242,248,241,99,133,87,80,197,118,49,49,49,34,150,238,
+167,219,233,177,35,35,35,21,94,129,204,120,190,123,247,238,41,60,153,16,207,73,
+2,2,2,50,182,163,120,127,127,127,133,39,84,98,123,173,224,224,96,241,248,89,
+181,108,217,50,218,65,43,173,91,183,222,41,123,15,13,201,237,219,183,171,206,
+156,57,115,254,216,177,99,63,124,205,221,148,128,60,109,218,180,169,236,223,215,
+153,132,132,4,229,212,169,83,202,217,179,103,51,190,31,228,250,245,235,202,190,
+125,251,196,103,73,222,246,29,162,207,150,190,59,116,63,79,90,148,187,119,239,
+42,60,161,122,97,91,250,172,147,146,146,148,168,168,40,37,60,60,92,220,158,152,
+152,168,120,120,120,40,60,129,205,248,126,168,193,211,211,83,124,119,120,89,250,
+154,207,0,0,64,191,20,36,32,0,96,224,38,76,152,80,193,206,206,46,170,116,233,
+210,25,21,122,99,71,149,224,86,173,90,41,5,11,22,76,254,242,203,47,59,203,222,
+67,67,226,237,237,109,246,150,187,85,79,64,116,41,48,48,80,249,240,195,15,149,
+184,184,56,89,104,174,66,2,2,0,185,9,99,64,0,192,160,241,186,18,181,128,12,12,
+11,11,179,166,46,74,212,125,41,63,81,114,120,146,135,186,134,209,248,130,242,
+229,203,223,155,49,99,134,187,44,222,144,212,170,85,43,73,22,147,87,209,24,32,
+154,217,76,59,107,26,0,0,188,10,99,64,0,192,160,93,189,122,213,60,32,32,96,8,
+245,155,167,117,56,242,155,156,78,55,187,99,199,14,26,40,173,84,168,80,225,79,
+158,148,37,203,226,65,29,52,113,65,86,199,240,0,0,24,43,180,128,0,128,65,251,
+237,183,223,26,251,249,249,85,166,217,138,28,29,29,101,225,70,225,201,147,39,
+108,207,158,61,52,131,18,77,91,187,89,22,15,0,0,96,72,144,128,0,128,65,187,124,
+249,114,247,152,152,152,66,52,75,17,157,93,6,198,60,60,60,168,91,26,173,95,113,
+98,195,134,13,143,101,241,0,0,0,134,4,9,8,0,24,44,55,55,55,251,136,136,136,193,
+52,53,42,173,88,14,255,142,25,217,188,121,179,152,246,213,209,209,209,77,163,
+209,252,111,113,9,0,0,128,60,0,9,8,0,24,172,223,126,251,173,121,112,112,176,125,
+187,118,237,88,181,106,213,100,225,70,225,206,157,59,98,177,196,226,197,139,223,
+105,211,166,205,110,89,60,0,0,128,161,65,2,2,0,6,73,81,20,141,143,143,207,192,
+164,164,36,177,72,92,78,7,107,231,55,52,248,60,38,38,134,85,175,94,221,205,217,
+217,249,169,44,30,0,0,192,208,32,1,1,0,131,52,110,220,184,106,33,33,33,173,169,
+229,163,77,155,54,178,112,163,16,25,25,41,86,78,183,177,177,73,251,232,163,143,
+242,212,226,131,0,0,0,90,72,64,0,192,32,249,248,248,12,138,137,137,177,237,222,
+189,59,43,86,172,152,44,220,40,156,63,127,158,121,121,121,177,114,229,202,121,
+205,155,55,239,154,44,30,0,0,192,16,33,1,1,0,131,115,242,228,73,75,158,128,244,
+52,55,55,103,131,6,13,146,133,27,141,109,219,182,49,19,19,19,102,111,111,191,
+78,163,209,196,202,226,1,0,0,12,17,18,16,0,48,56,187,118,237,234,18,26,26,90,
+183,105,211,166,204,193,193,65,22,110,20,2,3,3,105,86,48,90,105,251,169,179,179,
+243,97,89,60,0,0,128,161,66,2,2,0,6,229,206,157,59,5,60,60,60,186,37,38,38,138,
+214,15,90,1,29,24,59,120,240,32,11,9,9,161,217,175,118,14,29,58,244,158,44,30,0,
+0,192,80,33,1,1,0,131,50,111,222,188,98,15,31,62,236,100,103,103,199,186,118,
+237,42,11,55,10,201,201,201,236,239,191,255,166,100,44,169,65,131,6,123,101,241,
+0,0,0,134,12,9,8,0,24,20,158,124,244,137,136,136,40,221,165,75,23,90,233,91,
+22,110,20,174,95,191,206,206,156,57,67,107,161,60,154,52,105,210,73,89,60,0,0,
+128,33,67,2,2,0,6,67,81,20,19,158,128,12,163,129,214,78,78,78,178,112,163,65,
+131,207,105,61,148,202,149,43,255,237,224,224,128,193,231,0,0,144,167,33,1,1,0,
+131,209,183,111,95,135,7,15,30,212,168,85,171,22,107,217,178,165,44,220,40,132,
+135,135,211,160,124,90,251,227,121,149,42,85,54,200,226,1,0,0,12,29,18,16,0,48,
+24,151,47,95,174,29,23,23,103,221,171,87,47,86,168,80,33,89,184,81,56,112,224,
+0,187,127,255,62,171,88,177,162,231,210,165,75,253,100,241,0,0,0,134,14,9,8,0,
+24,140,2,5,10,52,54,51,51,99,237,218,181,147,133,26,133,224,224,96,54,123,246,
+108,86,164,72,17,214,164,73,147,101,26,141,38,89,182,13,0,0,128,161,67,2,2,0,6,
+35,41,41,169,20,79,66,68,133,219,216,249,251,251,179,97,195,134,177,123,247,
+238,177,218,181,107,111,93,181,106,213,81,217,54,0,0,0,121,1,38,216,7,0,131,97,
+111,111,127,53,40,40,168,47,157,245,255,238,187,239,104,208,53,51,53,53,149,109,
+150,111,196,199,199,179,128,128,0,118,244,232,81,198,19,14,177,248,96,171,86,
+173,188,248,251,240,153,70,163,73,146,109,159,79,40,188,164,202,130,64,103,240,
+94,3,128,234,144,128,0,128,193,224,149,237,61,209,209,209,159,239,216,177,163,
+50,45,188,103,107,107,75,221,178,100,155,229,11,138,162,176,148,148,20,22,25,
+25,201,226,226,226,168,21,40,214,209,209,113,235,130,5,11,254,211,168,81,163,
+120,217,246,249,76,154,44,0,116,6,9,8,0,168,14,9,8,0,24,140,249,243,231,223,228,
+165,203,170,85,171,58,63,120,240,192,234,209,163,71,133,249,205,133,210,139,57,
+47,102,153,46,169,152,166,151,130,153,74,129,76,151,154,87,159,69,239,180,103,
+240,169,164,164,23,186,158,156,126,157,46,19,211,47,147,210,175,39,104,139,185,
+185,121,92,217,178,101,159,247,236,217,243,236,138,21,43,206,241,228,227,53,79,
+145,175,81,242,145,34,11,2,157,193,123,13,0,170,67,2,2,0,6,101,242,228,201,119,
+248,197,29,89,220,75,52,47,93,190,124,61,55,40,111,184,124,171,196,196,68,198,
+19,47,198,147,15,89,104,126,133,46,88,234,66,2,2,0,170,67,2,2,0,249,65,182,42,
+249,96,208,232,51,68,165,88,61,120,175,1,64,117,152,5,11,0,0,12,9,18,16,117,225,
+189,6,0,213,33,1,1,0,0,67,130,46,88,234,66,2,2,0,170,67,2,2,0,0,134,132,6,161,
+99,193,69,245,224,189,6,0,213,33,1,1,0,0,67,66,9,136,177,172,121,98,8,240,94,3,
+128,234,144,128,0,0,128,33,161,46,88,56,43,175,30,36,32,0,160,58,36,32,0,0,96,
+72,208,5,75,93,72,64,0,64,117,72,64,0,0,192,144,136,46,88,180,50,60,168,2,9,8,
+0,168,14,9,8,0,0,24,18,74,64,18,101,65,160,51,9,178,0,0,0,93,67,2,2,0,0,134,4,
+9,136,122,168,153,9,9,8,0,168,14,9,8,0,0,24,12,83,83,83,90,3,36,1,93,176,244,
+43,253,253,85,52,26,13,18,16,0,80,29,18,16,0,0,48,24,201,201,201,226,172,124,
+84,84,20,139,139,139,147,133,67,14,5,5,5,209,133,98,105,105,137,55,25,0,84,135,
+4,4,0,0,12,10,175,20,39,250,249,249,177,147,39,79,202,66,33,135,182,109,219,
+198,76,76,76,52,197,138,21,67,2,2,0,170,67,2,2,0,0,6,165,85,171,86,103,52,26,13,
+155,58,117,42,163,68,4,116,107,245,234,213,108,239,222,189,172,76,153,50,119,70,
+141,26,21,36,139,7,0,208,53,77,86,250,217,210,129,0,0,0,64,13,33,33,33,150,131,
+7,15,62,114,236,216,49,199,154,53,107,178,111,190,249,134,181,105,211,134,21,
+45,90,84,182,41,188,65,90,90,26,187,127,255,62,219,180,105,147,72,64,108,108,
+108,20,103,103,231,81,75,151,46,93,35,219,22,0,64,215,144,128,0,0,128,193,57,
+116,232,80,165,5,11,22,172,242,244,244,236,144,144,144,160,161,228,195,204,204,
+76,28,143,232,184,133,227,146,92,230,227,59,93,143,137,137,97,137,137,137,212,
+242,241,180,95,191,126,139,150,44,89,242,11,127,31,229,149,0,0,0,29,67,2,2,0,0,
+6,137,142,79,221,187,119,239,112,234,212,169,170,209,209,209,182,252,38,235,
+244,98,197,75,225,244,82,40,83,49,79,47,102,233,197,52,211,101,1,94,242,250,193,
+140,166,40,78,97,255,174,20,159,148,94,232,122,98,122,161,25,173,226,211,75,92,
+166,18,195,75,180,185,185,121,84,233,210,165,159,13,31,62,220,227,251,239,191,
+71,223,54,0,200,53,72,64,0,0,0,0,0,64,53,24,132,14,0,0,0,0,0,170,65,2,2,0,0,0,
+0,0,170,65,2,2,0,0,0,0,0,170,65,2,2,0,0,0,0,0,170,65,2,2,0,0,0,0,0,170,65,2,2,
+0,0,0,0,0,170,249,127,83,186,124,199,82,158,209,51,0,0,0,0,73,69,78,68,174,66,
+96,130};
diff --git a/fluid/panels/about_panel.fl b/fluid/panels/about_panel.fl
new file mode 100644
index 000000000..3b5d54b72
--- /dev/null
+++ b/fluid/panels/about_panel.fl
@@ -0,0 +1,76 @@
+# data file for the Fltk User Interface Designer (fluid)
+version 1.0500
+header_name {.h}
+code_name {.cxx}
+comment {//
+// About dialog 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
+//
+} {in_source in_header
+}
+
+decl {\#include <time.h>} {public global
+}
+
+decl {void show_help(const char *name);} {public local
+}
+
+Function {make_about_panel()} {open
+} {
+ code {static char cbuf[200] = "";
+if (!cbuf[0]) {
+ time_t t = time(0);
+ struct tm *lt = localtime(&t);
+ sprintf(cbuf, "Copyright © 1998 - %d\\nby Bill Spitzak and others", lt->tm_year+1900);
+}} {}
+ Fl_Window about_panel {
+ label {About FLUID} open
+ xywh {449 217 345 180} type Double color 50 selection_color 47 hotspot
+ code0 {\#include "../src/flstring.h"} non_modal visible
+ } {
+ Fl_Box {} {
+ image {../icons/fluid.animated.gif} compress_image 1 xywh {10 10 115 120}
+ code0 {((Fl_Anim_GIF_Image*)(o->image()))->speed(0.5f);}
+ }
+ Fl_Box {} {
+ label {FLTK User
+Interface Designer
+Version x.x.x}
+ xywh {135 10 205 75} color 12 selection_color 47 labelfont 1 labelsize 18 align 21
+ code0 {char about[80]; // uses less than 60}
+ code1 {snprintf(about,sizeof(about),"FLTK User\\nInterface Designer\\nVersion %d.%d.%d",FL_MAJOR_VERSION,FL_MINOR_VERSION,FL_PATCH_VERSION);}
+ code2 {o->copy_label(about);}
+ }
+ Fl_Box {} {
+ label {(Copyright)}
+ comment {Label edited dynamically:}
+ xywh {135 90 200 45} align 148
+ code0 {o->label(cbuf);}
+ }
+ Fl_Button {} {
+ label {View License...}
+ callback {show_help("license.html");}
+ xywh {115 145 123 25} labelcolor 136
+ }
+ Fl_Return_Button {} {
+ label Close
+ callback {((Fl_Window*)(o->parent()))->hide();}
+ xywh {250 145 83 25}
+ }
+ }
+}
+
+data fluid_flow_chart_800_png {
+ comment {Embedded image for internal fluid.html web page.} selected public local filename {../documentation/src/fluid_flow_chart_800.png}
+}
diff --git a/fluid/panels/about_panel.h b/fluid/panels/about_panel.h
new file mode 100644
index 000000000..0130a1e44
--- /dev/null
+++ b/fluid/panels/about_panel.h
@@ -0,0 +1,32 @@
+//
+// About dialog 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
+
+#ifndef about_panel_h
+#define about_panel_h
+#include <FL/Fl.H>
+#include <time.h>
+extern void show_help(const char *name);
+#include <FL/Fl_Double_Window.H>
+#include "../src/flstring.h"
+extern Fl_Double_Window *about_panel;
+#include <FL/Fl_Box.H>
+#include <FL/Fl_Button.H>
+#include <FL/Fl_Return_Button.H>
+Fl_Double_Window* make_about_panel();
+extern unsigned char fluid_flow_chart_800_png[41559];
+#endif
diff --git a/fluid/panels/codeview_panel.cxx b/fluid/panels/codeview_panel.cxx
new file mode 100644
index 000000000..33fb92ebd
--- /dev/null
+++ b/fluid/panels/codeview_panel.cxx
@@ -0,0 +1,550 @@
+//
+// Code dialogs for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2023 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 "codeview_panel.h"
+#include "app/fluid.h"
+#include "io/file.h"
+#include <FL/Fl_Tabs.H>
+#include <FL/Fl_Button.H>
+#include "../src/flstring.h"
+static char *cv_source_filename = NULL;
+static char *cv_header_filename = NULL;
+static char *cv_design_filename = NULL;
+int cv_code_choice;
+extern void select_only(Fl_Type *o);
+extern void reveal_in_browser(Fl_Type *t);
+
+/**
+ Update the header and source code highlighting depending on the
+ currently selected object
+
+ The Code View system offers an immediate preview of the code
+ files that will be generated by FLUID. It also marks the code
+ generated for the last selected item in the header and the source
+ file.
+*/
+void update_codeview_position() {
+ if (!codeview_panel || !codeview_panel->visible())
+ return;
+ if (cv_autoposition->value()==0)
+ return;
+ if (codeview_panel && codeview_panel->visible() && Fl_Type::current) {
+ int pos0 = 0, pos1 = 0;
+ if (cv_source->visible_r()) {
+ switch (cv_code_choice) {
+ case 0: // prolog: not yet (include statements)
+ pos0 = Fl_Type::current->code1_start;
+ pos1 = Fl_Type::current->code2_end;
+ break;
+ case 1: // static: callbacks, menu declarations
+ pos0 = Fl_Type::current->code_static_start;
+ pos1 = Fl_Type::current->code_static_end;
+ break;
+ case 2: // code: entire implementation block including children
+ pos0 = Fl_Type::current->code1_start;
+ pos1 = Fl_Type::current->code2_end;
+ break;
+ case 3: // code1: all implementation code before the children
+ pos0 = Fl_Type::current->code1_start;
+ pos1 = Fl_Type::current->code1_end;
+ break;
+ case 4: // code1: all implementation code before the children
+ pos0 = Fl_Type::current->code2_start;
+ pos1 = Fl_Type::current->code2_end;
+ break;
+ }
+ if (pos0>=0) {
+ if (pos1<pos0)
+ pos1 = cv_source->buffer()->line_end(pos0);
+ cv_source->buffer()->highlight(pos0, pos1);
+ int line = cv_source->buffer()->count_lines(0, pos0);
+ cv_source->scroll(line, 0);
+ }
+ }
+ if (cv_header->visible_r()) {
+ switch (cv_code_choice) {
+ case 0: // prolog: not yet (include statements)
+ case 1: // static: callbacks, menu declarations
+ pos0 = Fl_Type::current->header_static_start;
+ pos1 = Fl_Type::current->header_static_end;
+ break;
+ case 2: // code: entire implementation block including children
+ pos0 = Fl_Type::current->header1_start;
+ pos1 = Fl_Type::current->header2_end;
+ break;
+ case 3: // code1: all implementation code before the children
+ pos0 = Fl_Type::current->header1_start;
+ pos1 = Fl_Type::current->header1_end;
+ break;
+ case 4: // code1: all implementation code before the children
+ pos0 = Fl_Type::current->header2_start;
+ pos1 = Fl_Type::current->header2_end;
+ break;
+ }
+ if (pos0>=0) {
+ if (pos1<pos0)
+ pos1 = cv_header->buffer()->line_end(pos0);
+ cv_header->buffer()->highlight(pos0, pos1);
+ int line = cv_header->buffer()->count_lines(0, pos0);
+ cv_header->scroll(line, 0);
+ }
+ }
+ if (cv_project->visible_r()) {
+ switch (cv_code_choice) {
+ case 0: // prolog: not yet (include statements)
+ case 1: // static: callbacks, menu declarations
+ case 2: // code: entire implementation block including children
+ pos0 = Fl_Type::current->proj1_start;
+ pos1 = Fl_Type::current->proj2_end;
+ break;
+ case 3: // code1: all implementation code before the children
+ pos0 = Fl_Type::current->proj1_start;
+ pos1 = Fl_Type::current->proj1_end;
+ break;
+ case 4: // code1: all implementation code before the children
+ pos0 = Fl_Type::current->proj2_start;
+ pos1 = Fl_Type::current->proj2_end;
+ break;
+ }
+ if (pos0>=0) {
+ if (pos1<pos0)
+ pos1 = cv_project->buffer()->line_end(pos0);
+ cv_project->buffer()->highlight(pos0, pos1);
+ int line = cv_project->buffer()->count_lines(0, pos0);
+ cv_project->scroll(line, 0);
+ }
+ }
+ }
+}
+
+/**
+ Callback to update the codeview position.
+*/
+void update_codeview_position_cb(class Fl_Tabs*, void*) {
+ // make sure that the selected tab shows the current view
+ update_codeview_cb(0,0);
+ // highlight the selected widget in the selected tab
+ update_codeview_position();
+}
+
+/**
+ Generate a header, source, strings, or design file in a temporary directory
+ and load those into the Code Viewer widgets.
+*/
+void update_codeview_cb(class Fl_Button*, void*) {
+ if (!codeview_panel || !codeview_panel->visible())
+ return;
+
+ if (!cv_source_filename) {
+ cv_source_filename = (char*)malloc(FL_PATH_MAX);
+ fl_strlcpy(cv_source_filename, get_tmpdir().c_str(), FL_PATH_MAX);
+ fl_strlcat(cv_source_filename, "codeview_tmp.cxx", FL_PATH_MAX);
+ }
+ if (!cv_header_filename) {
+ cv_header_filename = (char*)malloc(FL_PATH_MAX);
+ fl_strlcpy(cv_header_filename, get_tmpdir().c_str(), FL_PATH_MAX);
+ fl_strlcat(cv_header_filename, "codeview_tmp.h", FL_PATH_MAX);
+ }
+ if (!cv_design_filename) {
+ cv_design_filename = (char*)malloc(FL_PATH_MAX);
+ fl_strlcpy(cv_design_filename, get_tmpdir().c_str(), FL_PATH_MAX);
+ fl_strlcat(cv_design_filename, "codeview_tmp.fl", FL_PATH_MAX);
+ }
+
+ if (cv_project->visible_r()) {
+ write_file(cv_design_filename, false, true);
+ int top = cv_project->top_line();
+ cv_project->buffer()->loadfile(cv_design_filename);
+ cv_project->scroll(top, 0);
+ } else if (cv_strings->visible_r()) {
+ static const char *exts[] = { ".txt", ".po", ".msg" };
+ char fn[FL_PATH_MAX+1];
+ fl_strlcpy(fn, get_tmpdir().c_str(), FL_PATH_MAX);
+ fl_strlcat(fn, "strings", FL_PATH_MAX);
+ fl_filename_setext(fn, FL_PATH_MAX, exts[g_project.i18n_type]);
+ write_strings(fn);
+ int top = cv_strings->top_line();
+ cv_strings->buffer()->loadfile(fn);
+ cv_strings->scroll(top, 0);
+ } else if (cv_source->visible_r() || cv_header->visible_r()) {
+ std::string code_file_name_bak = g_project.code_file_name;
+ g_project.code_file_name = cv_source_filename;
+ std::string header_file_name_bak = g_project.header_file_name;
+ g_project.header_file_name = cv_header_filename;
+
+ // generate the code and load the files
+ Fd_Code_Writer f;
+ // generate files
+ if (f.write_code(cv_source_filename, cv_header_filename, true))
+ {
+ // load file into source editor
+ int pos = cv_source->top_line();
+ cv_source->buffer()->loadfile(cv_source_filename);
+ cv_source->scroll(pos, 0);
+ // load file into header editor
+ pos = cv_header->top_line();
+ cv_header->buffer()->loadfile(cv_header_filename);
+ cv_header->scroll(pos, 0);
+ // update the source code highlighting
+ update_codeview_position();
+ }
+
+ g_project.code_file_name = code_file_name_bak;
+ g_project.header_file_name = header_file_name_bak;
+ }
+}
+
+/**
+ This is called by the timer itself
+
+*/
+void update_codeview_timer(void*) {
+ update_codeview_cb(0,0);
+}
+
+void codeview_defer_update() {
+ // we will only update earliest 0.5 seconds after the last change, and only
+ // if no other change was made, so dragging a widget will not generate any
+ // CPU load
+ Fl::remove_timeout(update_codeview_timer, 0);
+ Fl::add_timeout(0.5, update_codeview_timer, 0);
+}
+
+/**
+ Show or hide the source code preview.
+ The state is stored in the app preferences.
+
+*/
+void codeview_toggle_visibility() {
+ if (!codeview_panel) {
+ make_codeview();
+ codeview_panel->callback((Fl_Callback*)toggle_codeview_cb);
+ Fl_Preferences svp(fluid_prefs, "codeview");
+ int autorefresh;
+ svp.get("autorefresh", autorefresh, 1);
+ cv_autorefresh->value(autorefresh);
+ int autoposition;
+ svp.get("autoposition", autoposition, 1);
+ cv_autoposition->value(autoposition);
+ int tab;
+ svp.get("tab", tab, 0);
+ if (tab>=0 && tab<cv_tab->children()) cv_tab->value(cv_tab->child(tab));
+ svp.get("code_choice", cv_code_choice, 2);
+ cv_code_choice_w->value(cv_code_choice_w->find_item_with_argument(cv_code_choice));
+ if (!position_window(codeview_panel,"codeview_pos", 0, 320, 120, 550, 500)) return;
+ }
+
+ if (codeview_panel->visible()) {
+ codeview_panel->hide();
+ codeview_item->label("Show Code View");
+ } else {
+ codeview_panel->show();
+ codeview_item->label("Hide Code View");
+ update_codeview_cb(0,0);
+ }
+}
+
+Fl_Double_Window *codeview_panel=(Fl_Double_Window *)0;
+
+Fl_Tabs *cv_tab=(Fl_Tabs *)0;
+
+Fl_Group *cv_source_tab=(Fl_Group *)0;
+
+CodeViewer *cv_source=(CodeViewer *)0;
+
+CodeViewer *cv_header=(CodeViewer *)0;
+
+TextViewer *cv_strings=(TextViewer *)0;
+
+TextViewer *cv_project=(TextViewer *)0;
+
+Fl_Group *cv_find_row=(Fl_Group *)0;
+
+Fl_Button *cv_find_text_case=(Fl_Button *)0;
+
+Fl_Input *cv_find_text=(Fl_Input *)0;
+
+static void cb_cv_find_text(Fl_Input* o, void*) {
+ Fl_Text_Display *e = NULL;
+ if (cv_source->visible_r()) {
+ e = cv_source;
+ } else if (cv_header->visible_r()) {
+ e = cv_header;
+ } else if (cv_project->visible_r()) {
+ e = cv_project;
+ }
+ if (e) {
+ Fl_Text_Buffer *b = e->buffer();
+ int pos = e->insert_position();
+ int found = b->search_forward(pos, o->value(), &pos, cv_find_text_case->value());
+ if (found) {
+ b->select(pos, pos + (int)strlen(o->value()));
+ e->insert_position(pos);
+ e->show_insert_position();
+ }
+ }
+}
+
+static void cb_(Fl_Button*, void*) {
+ Fl_Text_Display *e = NULL;
+ if (cv_source->visible_r()) {
+ e = cv_source;
+ } else if (cv_header->visible_r()) {
+ e = cv_header;
+ } else if (cv_project->visible_r()) {
+ e = cv_project;
+ }
+ if (e) {
+ const char *needle = cv_find_text->value();
+ Fl_Text_Buffer *b = e->buffer();
+ int pos = e->insert_position()-1;
+ if (pos < 0) pos = b->length()-1;
+ int found = b->search_backward(pos, needle, &pos, cv_find_text_case->value());
+ if (!found)
+ found = b->search_backward(b->length()-1, needle, &pos, cv_find_text_case->value());
+ if (found) {
+ b->select(pos, pos + (int)strlen(needle));
+ e->insert_position(pos);
+ e->show_insert_position();
+ }
+ }
+}
+
+static void cb_1(Fl_Button*, void*) {
+ Fl_Text_Display *e = NULL;
+ if (cv_source->visible_r()) {
+ e = cv_source;
+ } else if (cv_header->visible_r()) {
+ e = cv_header;
+ } else if (cv_project->visible_r()) {
+ e = cv_project;
+ }
+ if (e) {
+ const char *needle = cv_find_text->value();
+ Fl_Text_Buffer *b = e->buffer();
+ int pos = e->insert_position() + 1;
+ if (pos+1 >= b->length()) pos = 0;
+ int found = b->search_forward(pos, needle, &pos, cv_find_text_case->value());
+ if (!found && (pos > 0))
+ found = b->search_forward(0, needle, &pos, cv_find_text_case->value());
+ if (found) {
+ b->select(pos, pos + (int)strlen(needle));
+ e->insert_position(pos);
+ e->show_insert_position();
+ }
+ }
+}
+
+static void cb_Reveal(Fl_Button*, void*) {
+ if (codeview_panel && codeview_panel->visible()) {
+ Fl_Type *node = NULL;
+ if (cv_source->visible_r())
+ node = Fl_Type::find_in_text(0, cv_source->insert_position());
+ else if (cv_header->visible_r())
+ node = Fl_Type::find_in_text(1, cv_header->insert_position());
+ else if (cv_project->visible_r())
+ node = Fl_Type::find_in_text(2, cv_project->insert_position());
+ if (node) {
+ select_only(node);
+ reveal_in_browser(node);
+ if (Fl::event_clicks()==1) // double click
+ node->open();
+ }
+ }
+}
+
+Fl_Group *cv_settings_row=(Fl_Group *)0;
+
+Fl_Light_Button *cv_autorefresh=(Fl_Light_Button *)0;
+
+Fl_Light_Button *cv_autoposition=(Fl_Light_Button *)0;
+
+Fl_Choice *cv_code_choice_w=(Fl_Choice *)0;
+
+static void cb_cv_code_choice_w(Fl_Choice* o, void*) {
+ cv_code_choice = (int)o->mvalue()->argument();
+ update_codeview_position();
+}
+
+Fl_Menu_Item menu_cv_code_choice_w[] = {
+ {"prolog", 0, 0, (void*)(0), 16, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
+ {"static", 0, 0, (void*)(1), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
+ {"code", 0, 0, (void*)(2), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
+ {"code 1", 0, 0, (void*)(3), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
+ {"code 2", 0, 0, (void*)(4), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
+ {0,0,0,0,0,0,0,0,0}
+};
+
+Fl_Double_Window* make_codeview() {
+ { codeview_panel = new Fl_Double_Window(520, 515, "Code View");
+ codeview_panel->callback((Fl_Callback*)toggle_codeview_cb);
+ codeview_panel->align(Fl_Align(FL_ALIGN_CLIP|FL_ALIGN_INSIDE));
+ { cv_tab = new Fl_Tabs(10, 10, 500, 440);
+ cv_tab->selection_color((Fl_Color)4);
+ cv_tab->labelcolor(FL_BACKGROUND2_COLOR);
+ cv_tab->callback((Fl_Callback*)update_codeview_position_cb);
+ { cv_source_tab = new Fl_Group(10, 35, 500, 415, "Source");
+ cv_source_tab->labelsize(13);
+ { CodeViewer* o = cv_source = new CodeViewer(10, 40, 500, 410);
+ cv_source->box(FL_DOWN_FRAME);
+ cv_source->color(FL_BACKGROUND2_COLOR);
+ cv_source->selection_color(FL_SELECTION_COLOR);
+ cv_source->labeltype(FL_NORMAL_LABEL);
+ cv_source->labelfont(0);
+ cv_source->labelsize(14);
+ cv_source->labelcolor(FL_FOREGROUND_COLOR);
+ cv_source->textfont(4);
+ cv_source->textsize(11);
+ cv_source->align(Fl_Align(FL_ALIGN_TOP));
+ cv_source->when(FL_WHEN_RELEASE);
+ Fl_Group::current()->resizable(cv_source);
+ o->linenumber_width(60);
+ o->linenumber_size(o->Fl_Text_Display::textsize());
+ } // CodeViewer* cv_source
+ cv_source_tab->end();
+ Fl_Group::current()->resizable(cv_source_tab);
+ } // Fl_Group* cv_source_tab
+ { Fl_Group* o = new Fl_Group(10, 35, 500, 415, "Header");
+ o->labelsize(13);
+ o->hide();
+ { CodeViewer* o = cv_header = new CodeViewer(10, 40, 500, 410);
+ cv_header->box(FL_DOWN_FRAME);
+ cv_header->color(FL_BACKGROUND2_COLOR);
+ cv_header->selection_color(FL_SELECTION_COLOR);
+ cv_header->labeltype(FL_NORMAL_LABEL);
+ cv_header->labelfont(0);
+ cv_header->labelsize(14);
+ cv_header->labelcolor(FL_FOREGROUND_COLOR);
+ cv_header->textfont(4);
+ cv_header->textsize(11);
+ cv_header->align(Fl_Align(FL_ALIGN_TOP));
+ cv_header->when(FL_WHEN_RELEASE);
+ Fl_Group::current()->resizable(cv_header);
+ o->linenumber_width(60);
+ o->linenumber_size(o->Fl_Text_Display::textsize());
+ } // CodeViewer* cv_header
+ o->end();
+ } // Fl_Group* o
+ { Fl_Group* o = new Fl_Group(10, 35, 500, 415, "Strings");
+ o->labelsize(13);
+ o->hide();
+ { TextViewer* o = cv_strings = new TextViewer(10, 40, 500, 410);
+ cv_strings->box(FL_DOWN_FRAME);
+ cv_strings->color(FL_BACKGROUND2_COLOR);
+ cv_strings->selection_color(FL_SELECTION_COLOR);
+ cv_strings->labeltype(FL_NORMAL_LABEL);
+ cv_strings->labelfont(0);
+ cv_strings->labelsize(14);
+ cv_strings->labelcolor(FL_FOREGROUND_COLOR);
+ cv_strings->textfont(4);
+ cv_strings->textsize(11);
+ cv_strings->align(Fl_Align(FL_ALIGN_TOP));
+ cv_strings->when(FL_WHEN_RELEASE);
+ Fl_Group::current()->resizable(cv_strings);
+ o->linenumber_width(60);
+ o->linenumber_size(o->Fl_Text_Display::textsize());
+ } // TextViewer* cv_strings
+ o->end();
+ } // Fl_Group* o
+ { Fl_Group* o = new Fl_Group(10, 35, 500, 415, "Project");
+ o->labelsize(13);
+ o->hide();
+ { TextViewer* o = cv_project = new TextViewer(10, 40, 500, 410);
+ cv_project->box(FL_DOWN_FRAME);
+ cv_project->color(FL_BACKGROUND2_COLOR);
+ cv_project->selection_color(FL_SELECTION_COLOR);
+ cv_project->labeltype(FL_NORMAL_LABEL);
+ cv_project->labelfont(0);
+ cv_project->labelsize(14);
+ cv_project->labelcolor(FL_FOREGROUND_COLOR);
+ cv_project->textfont(4);
+ cv_project->textsize(11);
+ cv_project->align(Fl_Align(FL_ALIGN_TOP));
+ cv_project->when(FL_WHEN_RELEASE);
+ Fl_Group::current()->resizable(cv_project);
+ o->linenumber_width(60);
+ o->linenumber_size(o->Fl_Text_Display::textsize());
+ } // TextViewer* cv_project
+ o->end();
+ } // Fl_Group* o
+ cv_tab->end();
+ Fl_Group::current()->resizable(cv_tab);
+ } // Fl_Tabs* cv_tab
+ { cv_find_row = new Fl_Group(10, 460, 500, 20);
+ { cv_find_text_case = new Fl_Button(244, 460, 25, 20, "aA");
+ cv_find_text_case->type(1);
+ cv_find_text_case->labelsize(11);
+ } // Fl_Button* cv_find_text_case
+ { cv_find_text = new Fl_Input(40, 460, 200, 20, "Find:");
+ cv_find_text->labelsize(11);
+ cv_find_text->textsize(11);
+ cv_find_text->callback((Fl_Callback*)cb_cv_find_text);
+ cv_find_text->when(FL_WHEN_RELEASE | FL_WHEN_ENTER_KEY_CHANGED);
+ } // Fl_Input* cv_find_text
+ { Fl_Button* o = new Fl_Button(273, 460, 25, 20, "<<");
+ o->labelsize(11);
+ o->callback((Fl_Callback*)cb_);
+ } // Fl_Button* o
+ { Fl_Button* o = new Fl_Button(298, 460, 25, 20, ">>");
+ o->labelsize(11);
+ o->callback((Fl_Callback*)cb_1);
+ } // Fl_Button* o
+ { Fl_Button* o = new Fl_Button(327, 460, 61, 20, "Reveal");
+ o->labelsize(11);
+ o->callback((Fl_Callback*)cb_Reveal);
+ } // Fl_Button* o
+ { Fl_Box* o = new Fl_Box(490, 460, 20, 20);
+ Fl_Group::current()->resizable(o);
+ } // Fl_Box* o
+ cv_find_row->end();
+ } // Fl_Group* cv_find_row
+ { cv_settings_row = new Fl_Group(10, 485, 500, 20);
+ { Fl_Button* o = new Fl_Button(10, 485, 61, 20, "Refresh");
+ o->labelsize(11);
+ o->callback((Fl_Callback*)update_codeview_cb);
+ } // Fl_Button* o
+ { Fl_Light_Button* o = cv_autorefresh = new Fl_Light_Button(77, 485, 91, 20, "Auto-Refresh");
+ cv_autorefresh->labelsize(11);
+ o->callback((Fl_Callback*)update_codeview_cb);
+ } // Fl_Light_Button* cv_autorefresh
+ { cv_autoposition = new Fl_Light_Button(172, 485, 89, 20, "Auto-Position");
+ cv_autoposition->labelsize(11);
+ } // Fl_Light_Button* cv_autoposition
+ { cv_code_choice_w = new Fl_Choice(265, 485, 70, 20);
+ cv_code_choice_w->down_box(FL_BORDER_BOX);
+ cv_code_choice_w->labelsize(11);
+ cv_code_choice_w->textsize(11);
+ cv_code_choice_w->callback((Fl_Callback*)cb_cv_code_choice_w);
+ cv_code_choice_w->menu(menu_cv_code_choice_w);
+ } // Fl_Choice* cv_code_choice_w
+ { Fl_Box* o = new Fl_Box(375, 485, 80, 20);
+ Fl_Group::current()->resizable(o);
+ } // Fl_Box* o
+ { Fl_Button* o = new Fl_Button(460, 485, 50, 20, "Close");
+ o->labelsize(11);
+ o->callback((Fl_Callback*)toggle_codeview_b_cb);
+ } // Fl_Button* o
+ cv_settings_row->end();
+ } // Fl_Group* cv_settings_row
+ codeview_panel->size_range(384, 120);
+ codeview_panel->end();
+ } // Fl_Double_Window* codeview_panel
+ return codeview_panel;
+}
+
+//
diff --git a/fluid/panels/codeview_panel.fl b/fluid/panels/codeview_panel.fl
new file mode 100644
index 000000000..54f0d790f
--- /dev/null
+++ b/fluid/panels/codeview_panel.fl
@@ -0,0 +1,506 @@
+# data file for the Fltk User Interface Designer (fluid)
+version 1.0500
+header_name {.h}
+code_name {.cxx}
+comment {//
+// Code dialogs for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2023 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
+//
+} {in_source in_header
+}
+
+decl {\#include "app/fluid.h"} {private local
+}
+
+decl {\#include "io/file.h"} {private local
+}
+
+decl {\#include <FL/Fl_Tabs.H>} {private local
+}
+
+decl {\#include <FL/Fl_Button.H>} {private local
+}
+
+decl {\#include "../src/flstring.h"} {selected private local
+}
+
+decl {char *cv_source_filename = NULL;} {private local
+}
+
+decl {char *cv_header_filename = NULL;} {private local
+}
+
+decl {char *cv_design_filename = NULL;} {private local
+}
+
+decl {int cv_code_choice;} {public local
+}
+
+decl {extern void select_only(Fl_Type *o);} {private global
+}
+
+decl {extern void reveal_in_browser(Fl_Type *t);} {private global
+}
+
+Function {update_codeview_position()} {
+ comment {Update the header and source code highlighting depending on the
+currently selected object
+
+The Code View system offers an immediate preview of the code
+files that will be generated by FLUID. It also marks the code
+generated for the last selected item in the header and the source
+file.} open return_type void
+} {
+ code {if (!codeview_panel || !codeview_panel->visible())
+ return;
+ if (cv_autoposition->value()==0)
+ return;
+ if (codeview_panel && codeview_panel->visible() && Fl_Type::current) {
+ int pos0 = 0, pos1 = 0;
+ if (cv_source->visible_r()) {
+ switch (cv_code_choice) {
+ case 0: // prolog: not yet (include statements)
+ pos0 = Fl_Type::current->code1_start;
+ pos1 = Fl_Type::current->code2_end;
+ break;
+ case 1: // static: callbacks, menu declarations
+ pos0 = Fl_Type::current->code_static_start;
+ pos1 = Fl_Type::current->code_static_end;
+ break;
+ case 2: // code: entire implementation block including children
+ pos0 = Fl_Type::current->code1_start;
+ pos1 = Fl_Type::current->code2_end;
+ break;
+ case 3: // code1: all implementation code before the children
+ pos0 = Fl_Type::current->code1_start;
+ pos1 = Fl_Type::current->code1_end;
+ break;
+ case 4: // code1: all implementation code before the children
+ pos0 = Fl_Type::current->code2_start;
+ pos1 = Fl_Type::current->code2_end;
+ break;
+ }
+ if (pos0>=0) {
+ if (pos1<pos0)
+ pos1 = cv_source->buffer()->line_end(pos0);
+ cv_source->buffer()->highlight(pos0, pos1);
+ int line = cv_source->buffer()->count_lines(0, pos0);
+ cv_source->scroll(line, 0);
+ }
+ }
+ if (cv_header->visible_r()) {
+ switch (cv_code_choice) {
+ case 0: // prolog: not yet (include statements)
+ case 1: // static: callbacks, menu declarations
+ pos0 = Fl_Type::current->header_static_start;
+ pos1 = Fl_Type::current->header_static_end;
+ break;
+ case 2: // code: entire implementation block including children
+ pos0 = Fl_Type::current->header1_start;
+ pos1 = Fl_Type::current->header2_end;
+ break;
+ case 3: // code1: all implementation code before the children
+ pos0 = Fl_Type::current->header1_start;
+ pos1 = Fl_Type::current->header1_end;
+ break;
+ case 4: // code1: all implementation code before the children
+ pos0 = Fl_Type::current->header2_start;
+ pos1 = Fl_Type::current->header2_end;
+ break;
+ }
+ if (pos0>=0) {
+ if (pos1<pos0)
+ pos1 = cv_header->buffer()->line_end(pos0);
+ cv_header->buffer()->highlight(pos0, pos1);
+ int line = cv_header->buffer()->count_lines(0, pos0);
+ cv_header->scroll(line, 0);
+ }
+ }
+ if (cv_project->visible_r()) {
+ switch (cv_code_choice) {
+ case 0: // prolog: not yet (include statements)
+ case 1: // static: callbacks, menu declarations
+ case 2: // code: entire implementation block including children
+ pos0 = Fl_Type::current->proj1_start;
+ pos1 = Fl_Type::current->proj2_end;
+ break;
+ case 3: // code1: all implementation code before the children
+ pos0 = Fl_Type::current->proj1_start;
+ pos1 = Fl_Type::current->proj1_end;
+ break;
+ case 4: // code1: all implementation code before the children
+ pos0 = Fl_Type::current->proj2_start;
+ pos1 = Fl_Type::current->proj2_end;
+ break;
+ }
+ if (pos0>=0) {
+ if (pos1<pos0)
+ pos1 = cv_project->buffer()->line_end(pos0);
+ cv_project->buffer()->highlight(pos0, pos1);
+ int line = cv_project->buffer()->count_lines(0, pos0);
+ cv_project->scroll(line, 0);
+ }
+ }
+ }} {}
+}
+
+Function {update_codeview_position_cb(class Fl_Tabs*, void*)} {
+ comment {Callback to update the codeview position.} open return_type void
+} {
+ code {// make sure that the selected tab shows the current view
+ update_codeview_cb(0,0);
+ // highlight the selected widget in the selected tab
+ update_codeview_position();} {}
+}
+
+Function {update_codeview_cb(class Fl_Button*, void*)} {
+ comment {Generate a header, source, strings, or design file in a temporary directory
+and load those into the Code Viewer widgets.} open return_type void
+} {
+ code {if (!codeview_panel || !codeview_panel->visible())
+ return;
+
+ if (!cv_source_filename) {
+ cv_source_filename = (char*)malloc(FL_PATH_MAX);
+ fl_strlcpy(cv_source_filename, get_tmpdir().c_str(), FL_PATH_MAX);
+ fl_strlcat(cv_source_filename, "codeview_tmp.cxx", FL_PATH_MAX);
+ }
+ if (!cv_header_filename) {
+ cv_header_filename = (char*)malloc(FL_PATH_MAX);
+ fl_strlcpy(cv_header_filename, get_tmpdir().c_str(), FL_PATH_MAX);
+ fl_strlcat(cv_header_filename, "codeview_tmp.h", FL_PATH_MAX);
+ }
+ if (!cv_design_filename) {
+ cv_design_filename = (char*)malloc(FL_PATH_MAX);
+ fl_strlcpy(cv_design_filename, get_tmpdir().c_str(), FL_PATH_MAX);
+ fl_strlcat(cv_design_filename, "codeview_tmp.fl", FL_PATH_MAX);
+ }
+
+ if (cv_project->visible_r()) {
+ write_file(cv_design_filename, false, true);
+ int top = cv_project->top_line();
+ cv_project->buffer()->loadfile(cv_design_filename);
+ cv_project->scroll(top, 0);
+ } else if (cv_strings->visible_r()) {
+ static const char *exts[] = { ".txt", ".po", ".msg" };
+ char fn[FL_PATH_MAX+1];
+ fl_strlcpy(fn, get_tmpdir().c_str(), FL_PATH_MAX);
+ fl_strlcat(fn, "strings", FL_PATH_MAX);
+ fl_filename_setext(fn, FL_PATH_MAX, exts[g_project.i18n_type]);
+ write_strings(fn);
+ int top = cv_strings->top_line();
+ cv_strings->buffer()->loadfile(fn);
+ cv_strings->scroll(top, 0);
+ } else if (cv_source->visible_r() || cv_header->visible_r()) {
+ std::string code_file_name_bak = g_project.code_file_name;
+ g_project.code_file_name = cv_source_filename;
+ std::string header_file_name_bak = g_project.header_file_name;
+ g_project.header_file_name = cv_header_filename;
+
+ // generate the code and load the files
+ Fd_Code_Writer f;
+ // generate files
+ if (f.write_code(cv_source_filename, cv_header_filename, true))
+ {
+ // load file into source editor
+ int pos = cv_source->top_line();
+ cv_source->buffer()->loadfile(cv_source_filename);
+ cv_source->scroll(pos, 0);
+ // load file into header editor
+ pos = cv_header->top_line();
+ cv_header->buffer()->loadfile(cv_header_filename);
+ cv_header->scroll(pos, 0);
+ // update the source code highlighting
+ update_codeview_position();
+ }
+
+ g_project.code_file_name = code_file_name_bak;
+ g_project.header_file_name = header_file_name_bak;
+ }} {}
+}
+
+Function {update_codeview_timer(void*)} {
+ comment {This is called by the timer itself
+} open return_type void
+} {
+ code {update_codeview_cb(0,0);} {}
+}
+
+Function {codeview_defer_update()} {open return_type void
+} {
+ code {// we will only update earliest 0.5 seconds after the last change, and only
+ // if no other change was made, so dragging a widget will not generate any
+ // CPU load
+ Fl::remove_timeout(update_codeview_timer, 0);
+ Fl::add_timeout(0.5, update_codeview_timer, 0);} {}
+}
+
+Function {codeview_toggle_visibility()} {
+ comment {Show or hide the source code preview.
+The state is stored in the app preferences.
+} open return_type void
+} {
+ code {if (!codeview_panel) {
+ make_codeview();
+ codeview_panel->callback((Fl_Callback*)toggle_codeview_cb);
+ Fl_Preferences svp(fluid_prefs, "codeview");
+ int autorefresh;
+ svp.get("autorefresh", autorefresh, 1);
+ cv_autorefresh->value(autorefresh);
+ int autoposition;
+ svp.get("autoposition", autoposition, 1);
+ cv_autoposition->value(autoposition);
+ int tab;
+ svp.get("tab", tab, 0);
+ if (tab>=0 && tab<cv_tab->children()) cv_tab->value(cv_tab->child(tab));
+ svp.get("code_choice", cv_code_choice, 2);
+ cv_code_choice_w->value(cv_code_choice_w->find_item_with_argument(cv_code_choice));
+ if (!position_window(codeview_panel,"codeview_pos", 0, 320, 120, 550, 500)) return;
+ }
+
+ if (codeview_panel->visible()) {
+ codeview_panel->hide();
+ codeview_item->label("Show Code View");
+ } else {
+ codeview_panel->show();
+ codeview_item->label("Hide Code View");
+ update_codeview_cb(0,0);
+ }} {}
+}
+
+Function {make_codeview()} {open
+} {
+ Fl_Window codeview_panel {
+ label {Code View}
+ callback toggle_codeview_cb open
+ xywh {389 507 520 515} type Double align 80 resizable size_range {384 120 0 0} visible
+ } {
+ Fl_Tabs cv_tab {
+ callback update_codeview_position_cb open
+ xywh {10 10 500 440} selection_color 4 labelcolor 7 resizable
+ } {
+ Fl_Group cv_source_tab {
+ label Source open
+ xywh {10 35 500 415} labelsize 13 resizable
+ } {
+ Fl_Text_Editor cv_source {
+ xywh {10 40 500 410} textfont 4 textsize 11 resizable
+ code0 {\#include "widgets/CodeEditor.h"}
+ code1 {o->linenumber_width(60);}
+ code2 {o->linenumber_size(o->Fl_Text_Display::textsize());}
+ class CodeViewer
+ }
+ }
+ Fl_Group {} {
+ label Header open
+ xywh {10 35 500 415} labelsize 13 hide
+ } {
+ Fl_Text_Editor cv_header {
+ xywh {10 40 500 410} textfont 4 textsize 11 resizable
+ code0 {\#include "widgets/CodeEditor.h"}
+ code1 {o->linenumber_width(60);}
+ code2 {o->linenumber_size(o->Fl_Text_Display::textsize());}
+ class CodeViewer
+ }
+ }
+ Fl_Group {} {
+ label Strings open
+ xywh {10 35 500 415} labelsize 13 hide
+ } {
+ Fl_Text_Display cv_strings {
+ xywh {10 40 500 410} textfont 4 textsize 11 resizable
+ code1 {o->linenumber_width(60);}
+ code2 {o->linenumber_size(o->Fl_Text_Display::textsize());}
+ class TextViewer
+ }
+ }
+ Fl_Group {} {
+ label Project open
+ xywh {10 35 500 415} labelsize 13 hide
+ } {
+ Fl_Text_Display cv_project {
+ xywh {10 40 500 410} textfont 4 textsize 11 resizable
+ code1 {o->linenumber_width(60);}
+ code2 {o->linenumber_size(o->Fl_Text_Display::textsize());}
+ class TextViewer
+ }
+ }
+ }
+ Fl_Group cv_find_row {open
+ xywh {10 460 500 20}
+ } {
+ Fl_Button cv_find_text_case {
+ label aA
+ xywh {244 460 25 20} type Toggle labelsize 11
+ }
+ Fl_Input cv_find_text {
+ label {Find:}
+ callback {Fl_Text_Display *e = NULL;
+if (cv_source->visible_r()) {
+ e = cv_source;
+} else if (cv_header->visible_r()) {
+ e = cv_header;
+} else if (cv_project->visible_r()) {
+ e = cv_project;
+}
+if (e) {
+ Fl_Text_Buffer *b = e->buffer();
+ int pos = e->insert_position();
+ int found = b->search_forward(pos, o->value(), &pos, cv_find_text_case->value());
+ if (found) {
+ b->select(pos, pos + (int)strlen(o->value()));
+ e->insert_position(pos);
+ e->show_insert_position();
+ }
+}}
+ xywh {40 460 200 20} labelsize 11 when 15 textsize 11
+ }
+ Fl_Button {} {
+ label {<<}
+ callback {Fl_Text_Display *e = NULL;
+if (cv_source->visible_r()) {
+ e = cv_source;
+} else if (cv_header->visible_r()) {
+ e = cv_header;
+} else if (cv_project->visible_r()) {
+ e = cv_project;
+}
+if (e) {
+ const char *needle = cv_find_text->value();
+ Fl_Text_Buffer *b = e->buffer();
+ int pos = e->insert_position()-1;
+ if (pos < 0) pos = b->length()-1;
+ int found = b->search_backward(pos, needle, &pos, cv_find_text_case->value());
+ if (!found)
+ found = b->search_backward(b->length()-1, needle, &pos, cv_find_text_case->value());
+ if (found) {
+ b->select(pos, pos + (int)strlen(needle));
+ e->insert_position(pos);
+ e->show_insert_position();
+ }
+}}
+ xywh {273 460 25 20} labelsize 11
+ }
+ Fl_Button {} {
+ label {>>}
+ callback {Fl_Text_Display *e = NULL;
+if (cv_source->visible_r()) {
+ e = cv_source;
+} else if (cv_header->visible_r()) {
+ e = cv_header;
+} else if (cv_project->visible_r()) {
+ e = cv_project;
+}
+if (e) {
+ const char *needle = cv_find_text->value();
+ Fl_Text_Buffer *b = e->buffer();
+ int pos = e->insert_position() + 1;
+ if (pos+1 >= b->length()) pos = 0;
+ int found = b->search_forward(pos, needle, &pos, cv_find_text_case->value());
+ if (!found && (pos > 0))
+ found = b->search_forward(0, needle, &pos, cv_find_text_case->value());
+ if (found) {
+ b->select(pos, pos + (int)strlen(needle));
+ e->insert_position(pos);
+ e->show_insert_position();
+ }
+}}
+ xywh {298 460 25 20} labelsize 11
+ }
+ Fl_Button {} {
+ label Reveal
+ callback {if (codeview_panel && codeview_panel->visible()) {
+ Fl_Type *node = NULL;
+ if (cv_source->visible_r())
+ node = Fl_Type::find_in_text(0, cv_source->insert_position());
+ else if (cv_header->visible_r())
+ node = Fl_Type::find_in_text(1, cv_header->insert_position());
+ else if (cv_project->visible_r())
+ node = Fl_Type::find_in_text(2, cv_project->insert_position());
+ if (node) {
+ select_only(node);
+ reveal_in_browser(node);
+ if (Fl::event_clicks()==1) // double click
+ node->open();
+ }
+}}
+ xywh {327 460 61 20} labelsize 11
+ }
+ Fl_Box {} {
+ xywh {490 460 20 20} resizable
+ }
+ }
+ Fl_Group cv_settings_row {open
+ xywh {10 485 500 20}
+ } {
+ Fl_Button {} {
+ label Refresh
+ callback update_codeview_cb
+ xywh {10 485 61 20} labelsize 11
+ }
+ Fl_Light_Button cv_autorefresh {
+ label {Auto-Refresh}
+ xywh {77 485 91 20} labelsize 11
+ code0 {o->callback((Fl_Callback*)update_codeview_cb);}
+ }
+ Fl_Light_Button cv_autoposition {
+ label {Auto-Position}
+ xywh {172 485 89 20} labelsize 11
+ }
+ Fl_Choice cv_code_choice_w {
+ callback {cv_code_choice = (int)o->mvalue()->argument();
+update_codeview_position();} open
+ xywh {265 485 70 20} down_box BORDER_BOX labelsize 11 textsize 11
+ } {
+ MenuItem {} {
+ label prolog
+ user_data 0 user_data_type long
+ tooltip {Include statements in header or source code} xywh {0 0 100 20} labelsize 11 hide
+ }
+ MenuItem {} {
+ label static
+ user_data 1 user_data_type long
+ tooltip {static declarations in source code} xywh {10 10 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label code
+ user_data 2 user_data_type long
+ tooltip {widget code block including children} xywh {20 20 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label {code 1}
+ user_data 3 user_data_type long
+ tooltip {widget code block before children} xywh {30 30 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label {code 2}
+ user_data 4 user_data_type long
+ tooltip {widget code block after children} xywh {40 40 100 20} labelsize 11
+ }
+ }
+ Fl_Box {} {
+ xywh {375 485 80 20} resizable
+ }
+ Fl_Button {} {
+ label Close
+ callback toggle_codeview_b_cb
+ xywh {460 485 50 20} labelsize 11
+ }
+ }
+ }
+}
+
+comment {
+//} {in_source in_header
+}
diff --git a/fluid/panels/codeview_panel.h b/fluid/panels/codeview_panel.h
new file mode 100644
index 000000000..6dbbde1b4
--- /dev/null
+++ b/fluid/panels/codeview_panel.h
@@ -0,0 +1,58 @@
+//
+// Code dialogs for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2023 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
+
+#ifndef codeview_panel_h
+#define codeview_panel_h
+#include <FL/Fl.H>
+extern int cv_code_choice;
+void update_codeview_position();
+void update_codeview_position_cb(class Fl_Tabs*, void*);
+void update_codeview_cb(class Fl_Button*, void*);
+void update_codeview_timer(void*);
+void codeview_defer_update();
+void codeview_toggle_visibility();
+#include <FL/Fl_Double_Window.H>
+extern void toggle_codeview_cb(Fl_Double_Window*, void*);
+extern Fl_Double_Window *codeview_panel;
+#include <FL/Fl_Tabs.H>
+extern Fl_Tabs *cv_tab;
+#include <FL/Fl_Group.H>
+extern Fl_Group *cv_source_tab;
+#include "widgets/CodeEditor.h"
+extern CodeViewer *cv_source;
+extern CodeViewer *cv_header;
+extern TextViewer *cv_strings;
+extern TextViewer *cv_project;
+extern Fl_Group *cv_find_row;
+#include <FL/Fl_Button.H>
+extern Fl_Button *cv_find_text_case;
+#include <FL/Fl_Input.H>
+extern Fl_Input *cv_find_text;
+#include <FL/Fl_Box.H>
+extern Fl_Group *cv_settings_row;
+#include <FL/Fl_Light_Button.H>
+extern Fl_Light_Button *cv_autorefresh;
+extern Fl_Light_Button *cv_autoposition;
+#include <FL/Fl_Choice.H>
+extern Fl_Choice *cv_code_choice_w;
+extern void toggle_codeview_b_cb(Fl_Button*, void*);
+Fl_Double_Window* make_codeview();
+extern Fl_Menu_Item menu_cv_code_choice_w[];
+#endif
+
+//
diff --git a/fluid/panels/function_panel.cxx b/fluid/panels/function_panel.cxx
new file mode 100644
index 000000000..2f8f72817
--- /dev/null
+++ b/fluid/panels/function_panel.cxx
@@ -0,0 +1,1559 @@
+//
+// Code dialogs for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2023 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 "function_panel.h"
+#include "app/fluid.h"
+#include "app/undo.h"
+#include "nodes/Fl_Type.h"
+#include "nodes/factory.h"
+#include "rsrcs/pixmaps.h"
+#include "widgets/custom_widgets.h"
+#include "widgets/widget_browser.h"
+
+/**
+ Allow widget navigation on text fields with Tab.
+*/
+static int use_tab_navigation(int, Fl_Text_Editor*) {
+ return 0;
+}
+
+Fl_Double_Window *function_panel=(Fl_Double_Window *)0;
+
+Fl_Choice *f_public_member_choice=(Fl_Choice *)0;
+
+Fl_Menu_Item menu_f_public_member_choice[] = {
+ {"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_Choice *f_public_choice=(Fl_Choice *)0;
+
+Fl_Menu_Item menu_f_public_choice[] = {
+ {"static", 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},
+ {"local", 0, 0, (void*)(2), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
+ {0,0,0,0,0,0,0,0,0}
+};
+
+Fl_Light_Button *f_c_button=(Fl_Light_Button *)0;
+
+Fl_Input *f_name_input=(Fl_Input *)0;
+
+Fl_Input *f_return_type_input=(Fl_Input *)0;
+
+Fl_Text_Editor *f_comment_input=(Fl_Text_Editor *)0;
+
+Fl_Return_Button *f_panel_ok=(Fl_Return_Button *)0;
+
+Fl_Button *f_panel_cancel=(Fl_Button *)0;
+
+Fl_Double_Window* make_function_panel() {
+ { function_panel = new Fl_Double_Window(343, 232, "Function/Method Properties");
+ function_panel->align(Fl_Align(FL_ALIGN_CLIP|FL_ALIGN_INSIDE));
+ { Fl_Group* o = new Fl_Group(10, 10, 270, 20);
+ { f_public_member_choice = new Fl_Choice(10, 10, 75, 20);
+ f_public_member_choice->tooltip("Change member access attribute.");
+ f_public_member_choice->down_box(FL_BORDER_BOX);
+ f_public_member_choice->labelsize(11);
+ f_public_member_choice->textsize(11);
+ f_public_member_choice->when(FL_WHEN_CHANGED);
+ f_public_member_choice->menu(menu_f_public_member_choice);
+ } // Fl_Choice* f_public_member_choice
+ { f_public_choice = new Fl_Choice(10, 10, 75, 20);
+ f_public_choice->tooltip("Change widget accessibility.");
+ f_public_choice->down_box(FL_BORDER_BOX);
+ f_public_choice->labelsize(11);
+ f_public_choice->textsize(11);
+ f_public_choice->when(FL_WHEN_CHANGED);
+ f_public_choice->menu(menu_f_public_choice);
+ } // Fl_Choice* f_public_choice
+ { f_c_button = new Fl_Light_Button(95, 10, 120, 20, "C declaration");
+ f_c_button->tooltip("Declare with a C interface instead of C++.");
+ f_c_button->labelsize(11);
+ } // Fl_Light_Button* f_c_button
+ { Fl_Box* o = new Fl_Box(235, 10, 45, 20);
+ Fl_Group::current()->resizable(o);
+ } // Fl_Box* o
+ o->end();
+ } // Fl_Group* o
+ { f_name_input = new Fl_Input(10, 50, 320, 20, "Name(args): (blank for main())");
+ f_name_input->tooltip("The name of the function or method.");
+ f_name_input->labelfont(1);
+ f_name_input->labelsize(11);
+ f_name_input->textfont(4);
+ f_name_input->textsize(11);
+ f_name_input->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ f_name_input->when(FL_WHEN_NEVER);
+ } // Fl_Input* f_name_input
+ { f_return_type_input = new Fl_Input(10, 90, 320, 20, "Return Type: (blank to return outermost widget)");
+ f_return_type_input->tooltip("The return type of the function or method.");
+ f_return_type_input->labelfont(1);
+ f_return_type_input->labelsize(11);
+ f_return_type_input->textfont(4);
+ f_return_type_input->textsize(11);
+ f_return_type_input->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ f_return_type_input->when(FL_WHEN_NEVER);
+ } // Fl_Input* f_return_type_input
+ { f_comment_input = new Fl_Text_Editor(10, 125, 320, 65, "Comment:");
+ f_comment_input->tooltip("Function comment in Doxygen format");
+ f_comment_input->box(FL_DOWN_BOX);
+ f_comment_input->labelfont(1);
+ f_comment_input->labelsize(11);
+ f_comment_input->textfont(4);
+ f_comment_input->textsize(11);
+ f_comment_input->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ Fl_Group::current()->resizable(f_comment_input);
+ f_comment_input->buffer(new Fl_Text_Buffer());
+ f_comment_input->add_key_binding(FL_Tab, 0, use_tab_navigation);
+ } // Fl_Text_Editor* f_comment_input
+ { Fl_Group* o = new Fl_Group(10, 200, 320, 20);
+ { f_panel_ok = new Fl_Return_Button(220, 200, 50, 20, "OK");
+ f_panel_ok->tooltip("Apply the changes.");
+ f_panel_ok->labelsize(11);
+ f_panel_ok->window()->hotspot(f_panel_ok);
+ } // Fl_Return_Button* f_panel_ok
+ { f_panel_cancel = new Fl_Button(280, 200, 50, 20, "Cancel");
+ f_panel_cancel->tooltip("Cancel the changes.");
+ f_panel_cancel->labelsize(11);
+ } // Fl_Button* f_panel_cancel
+ { Fl_Box* o = new Fl_Box(10, 200, 205, 20);
+ Fl_Group::current()->resizable(o);
+ } // Fl_Box* o
+ o->end();
+ } // Fl_Group* o
+ function_panel->set_modal();
+ function_panel->end();
+ } // Fl_Double_Window* function_panel
+ return function_panel;
+}
+
+Fl_Double_Window *code_panel=(Fl_Double_Window *)0;
+
+static void cb_code_panel(Fl_Double_Window*, void*) {
+ if (Fl::event()==FL_SHORTCUT && Fl::event_key()==FL_Escape)
+ return; // ignore Escape
+ code_panel->hide(); // otherwise hide..;
+}
+
+CodeEditor *code_input=(CodeEditor *)0;
+
+Fl_Return_Button *code_panel_ok=(Fl_Return_Button *)0;
+
+Fl_Button *code_panel_cancel=(Fl_Button *)0;
+
+Fl_Double_Window* make_code_panel() {
+ { Fl_Double_Window* o = code_panel = new Fl_Double_Window(540, 180, "Code Properties");
+ code_panel->labelsize(11);
+ code_panel->callback((Fl_Callback*)cb_code_panel);
+ { CodeEditor* o = code_input = new CodeEditor(10, 10, 520, 130);
+ code_input->box(FL_DOWN_BOX);
+ code_input->color(FL_BACKGROUND2_COLOR);
+ code_input->selection_color(FL_SELECTION_COLOR);
+ code_input->labeltype(FL_NORMAL_LABEL);
+ code_input->labelfont(0);
+ code_input->labelsize(11);
+ code_input->labelcolor(FL_FOREGROUND_COLOR);
+ code_input->textfont(4);
+ code_input->textsize(11);
+ code_input->align(Fl_Align(FL_ALIGN_TOP));
+ code_input->when(FL_WHEN_RELEASE);
+ Fl_Group::current()->resizable(code_input);
+ o->when(FL_WHEN_ENTER_KEY_CHANGED|FL_WHEN_RELEASE);
+ } // CodeEditor* code_input
+ { Fl_Group* o = new Fl_Group(10, 150, 520, 20);
+ o->labelsize(11);
+ { code_panel_ok = new Fl_Return_Button(400, 150, 60, 20, "OK");
+ code_panel_ok->labelsize(11);
+ code_panel_ok->window()->hotspot(code_panel_ok);
+ } // Fl_Return_Button* code_panel_ok
+ { code_panel_cancel = new Fl_Button(470, 150, 60, 20, "Cancel");
+ code_panel_cancel->labelsize(11);
+ } // Fl_Button* code_panel_cancel
+ { Fl_Box* o = new Fl_Box(10, 150, 380, 20);
+ o->labelsize(11);
+ Fl_Group::current()->resizable(o);
+ } // Fl_Box* o
+ o->end();
+ } // Fl_Group* o
+ code_panel->set_modal();
+ o->size_range(200, 150);
+ code_panel->end();
+ } // Fl_Double_Window* code_panel
+ // Enable line numbers
+ code_input->linenumber_width(60);
+ code_input->linenumber_size(code_input->Fl_Text_Display::textsize());
+ return code_panel;
+}
+
+Fl_Double_Window *codeblock_panel=(Fl_Double_Window *)0;
+
+Fl_Input *code_before_input=(Fl_Input *)0;
+
+Fl_Input *code_after_input=(Fl_Input *)0;
+
+Fl_Return_Button *codeblock_panel_ok=(Fl_Return_Button *)0;
+
+Fl_Button *codeblock_panel_cancel=(Fl_Button *)0;
+
+Fl_Double_Window* make_codeblock_panel() {
+ { Fl_Double_Window* o = codeblock_panel = new Fl_Double_Window(300, 115, "Code Block Properties");
+ codeblock_panel->labelsize(11);
+ { code_before_input = new Fl_Input(10, 15, 280, 20, "Conditional code block");
+ code_before_input->tooltip("#ifdef or similar conditional code block.");
+ code_before_input->labelsize(11);
+ code_before_input->textfont(4);
+ code_before_input->textsize(11);
+ code_before_input->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ code_before_input->when(FL_WHEN_NEVER);
+ } // Fl_Input* code_before_input
+ { code_after_input = new Fl_Input(10, 55, 280, 20, "\"{...child code...}\" is inserted here");
+ code_after_input->tooltip("#endif or similar conditional code block.");
+ code_after_input->labelsize(11);
+ code_after_input->textfont(4);
+ code_after_input->textsize(11);
+ code_after_input->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ code_after_input->when(FL_WHEN_NEVER);
+ Fl_Group::current()->resizable(code_after_input);
+ } // Fl_Input* code_after_input
+ { Fl_Group* o = new Fl_Group(10, 85, 280, 20);
+ { codeblock_panel_ok = new Fl_Return_Button(160, 85, 60, 20, "OK");
+ codeblock_panel_ok->labelsize(11);
+ codeblock_panel_ok->window()->hotspot(codeblock_panel_ok);
+ } // Fl_Return_Button* codeblock_panel_ok
+ { codeblock_panel_cancel = new Fl_Button(230, 85, 60, 20, "Cancel");
+ codeblock_panel_cancel->shortcut(0xff1b);
+ codeblock_panel_cancel->labelsize(11);
+ } // Fl_Button* codeblock_panel_cancel
+ { Fl_Box* o = new Fl_Box(10, 85, 140, 20);
+ Fl_Group::current()->resizable(o);
+ } // Fl_Box* o
+ o->end();
+ } // Fl_Group* o
+ codeblock_panel->set_modal();
+ o->size_range(o->w(), o->h(), Fl::w(), o->h());
+ codeblock_panel->end();
+ } // Fl_Double_Window* codeblock_panel
+ return codeblock_panel;
+}
+
+Fl_Double_Window *declblock_panel=(Fl_Double_Window *)0;
+
+Fl_Input *declblock_before_input=(Fl_Input *)0;
+
+Fl_Input *declblock_after_input=(Fl_Input *)0;
+
+Fl_Check_Button *declblock_code_source=(Fl_Check_Button *)0;
+
+Fl_Check_Button *declblock_static_source=(Fl_Check_Button *)0;
+
+Fl_Check_Button *declblock_code_header=(Fl_Check_Button *)0;
+
+Fl_Check_Button *declblock_static_header=(Fl_Check_Button *)0;
+
+Fl_Text_Editor *declblock_comment_input=(Fl_Text_Editor *)0;
+
+Fl_Return_Button *declblock_panel_ok=(Fl_Return_Button *)0;
+
+Fl_Button *declblock_panel_cancel=(Fl_Button *)0;
+
+Fl_Double_Window* make_declblock_panel() {
+ { Fl_Double_Window* o = declblock_panel = new Fl_Double_Window(300, 355, "Declaration Block Properties");
+ declblock_panel->labelsize(11);
+ declblock_panel->align(Fl_Align(FL_ALIGN_CLIP|FL_ALIGN_INSIDE));
+ { declblock_before_input = new Fl_Input(10, 23, 280, 20, "Start Code:");
+ declblock_before_input->tooltip("#ifdef or similar conditional declaration block.");
+ declblock_before_input->labelfont(1);
+ declblock_before_input->labelsize(11);
+ declblock_before_input->textfont(4);
+ declblock_before_input->textsize(11);
+ declblock_before_input->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ declblock_before_input->when(FL_WHEN_NEVER);
+ } // Fl_Input* declblock_before_input
+ { Fl_Box* o = new Fl_Box(10, 48, 280, 20, "\"\\n...child code...\\n\" is inserted here");
+ o->labelsize(11);
+ } // Fl_Box* o
+ { declblock_after_input = new Fl_Input(10, 80, 280, 20, "End Code:");
+ declblock_after_input->tooltip("#endif or similar declaration code block.");
+ declblock_after_input->labelfont(1);
+ declblock_after_input->labelsize(11);
+ declblock_after_input->textfont(4);
+ declblock_after_input->textsize(11);
+ declblock_after_input->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ declblock_after_input->when(FL_WHEN_NEVER);
+ } // Fl_Input* declblock_after_input
+ { Fl_Group* o = new Fl_Group(10, 105, 280, 120);
+ { Fl_Box* o = new Fl_Box(10, 105, 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
+ { declblock_code_source = new Fl_Check_Button(20, 125, 260, 20, "implementations");
+ declblock_code_source->down_box(FL_DOWN_BOX);
+ declblock_code_source->labelsize(11);
+ } // Fl_Check_Button* declblock_code_source
+ { declblock_static_source = new Fl_Check_Button(20, 145, 260, 20, "static initializations and callbacks");
+ declblock_static_source->down_box(FL_DOWN_BOX);
+ declblock_static_source->labelsize(11);
+ } // Fl_Check_Button* declblock_static_source
+ { Fl_Box* o = new Fl_Box(10, 165, 270, 20, "Enclose code in header file:");
+ o->labelsize(11);
+ o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
+ } // Fl_Box* o
+ { declblock_code_header = new Fl_Check_Button(20, 185, 260, 20, "forward declarations");
+ declblock_code_header->down_box(FL_DOWN_BOX);
+ declblock_code_header->labelsize(11);
+ } // Fl_Check_Button* declblock_code_header
+ { declblock_static_header = new Fl_Check_Button(20, 205, 260, 20, "preprecessor and callback declarations");
+ declblock_static_header->down_box(FL_DOWN_BOX);
+ declblock_static_header->labelsize(11);
+ } // Fl_Check_Button* declblock_static_header
+ { Fl_Box* o = new Fl_Box(280, 105, 10, 120);
+ o->labelsize(11);
+ o->hide();
+ Fl_Group::current()->resizable(o);
+ } // Fl_Box* o
+ o->end();
+ } // Fl_Group* o
+ { declblock_comment_input = new Fl_Text_Editor(10, 242, 280, 65, "Comment:");
+ declblock_comment_input->tooltip("Declaration comment in Doxygen format");
+ declblock_comment_input->box(FL_DOWN_BOX);
+ declblock_comment_input->labelfont(1);
+ declblock_comment_input->labelsize(11);
+ declblock_comment_input->textfont(4);
+ declblock_comment_input->textsize(11);
+ declblock_comment_input->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ Fl_Group::current()->resizable(declblock_comment_input);
+ declblock_comment_input->buffer(new Fl_Text_Buffer());
+ declblock_comment_input->add_key_binding(FL_Tab, 0, use_tab_navigation);
+ } // Fl_Text_Editor* declblock_comment_input
+ { Fl_Group* o = new Fl_Group(10, 321, 280, 20);
+ { declblock_panel_ok = new Fl_Return_Button(160, 321, 60, 20, "OK");
+ declblock_panel_ok->labelsize(11);
+ declblock_panel_ok->window()->hotspot(declblock_panel_ok);
+ } // Fl_Return_Button* declblock_panel_ok
+ { declblock_panel_cancel = new Fl_Button(230, 321, 60, 20, "Cancel");
+ declblock_panel_cancel->shortcut(0xff1b);
+ declblock_panel_cancel->labelsize(11);
+ } // Fl_Button* declblock_panel_cancel
+ { Fl_Box* o = new Fl_Box(10, 321, 140, 20);
+ Fl_Group::current()->resizable(o);
+ } // Fl_Box* o
+ o->end();
+ } // Fl_Group* o
+ declblock_panel->set_modal();
+ declblock_panel->size_range(300, 355);
+ o->size_range(o->w(), o->h(), Fl::w(), o->h());
+ declblock_panel->end();
+ } // Fl_Double_Window* declblock_panel
+ return declblock_panel;
+}
+
+Fl_Double_Window *decl_panel=(Fl_Double_Window *)0;
+
+Fl_Choice *decl_choice=(Fl_Choice *)0;
+
+Fl_Menu_Item menu_decl_choice[] = {
+ {"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}
+};
+
+Fl_Choice *decl_class_choice=(Fl_Choice *)0;
+
+Fl_Menu_Item menu_decl_class_choice[] = {
+ {"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}
+};
+
+CodeEditor *decl_input=(CodeEditor *)0;
+
+Fl_Text_Editor *decl_comment_input=(Fl_Text_Editor *)0;
+
+Fl_Return_Button *decl_panel_ok=(Fl_Return_Button *)0;
+
+Fl_Button *decl_panel_cancel=(Fl_Button *)0;
+
+Fl_Double_Window* make_decl_panel() {
+ { decl_panel = new Fl_Double_Window(343, 262, "Declaration Properties");
+ decl_panel->align(Fl_Align(FL_ALIGN_CLIP|FL_ALIGN_INSIDE));
+ { Fl_Group* o = new Fl_Group(10, 10, 270, 20);
+ { Fl_Box* o = new Fl_Box(200, 10, 80, 20);
+ Fl_Group::current()->resizable(o);
+ } // Fl_Box* o
+ { decl_choice = new Fl_Choice(10, 10, 185, 20);
+ decl_choice->down_box(FL_BORDER_BOX);
+ decl_choice->labelsize(11);
+ decl_choice->textsize(11);
+ decl_choice->menu(menu_decl_choice);
+ } // Fl_Choice* decl_choice
+ { decl_class_choice = new Fl_Choice(10, 10, 75, 20);
+ decl_class_choice->down_box(FL_BORDER_BOX);
+ decl_class_choice->labelsize(11);
+ decl_class_choice->textsize(11);
+ decl_class_choice->menu(menu_decl_class_choice);
+ } // Fl_Choice* decl_class_choice
+ o->end();
+ } // Fl_Group* o
+ { Fl_Tile* o = new Fl_Tile(10, 40, 320, 180);
+ { Fl_Group* o = new Fl_Group(10, 40, 320, 100);
+ o->box(FL_FLAT_BOX);
+ { decl_input = new CodeEditor(10, 40, 320, 45, "This can be any declaration, like \"int x;\", an external symbol like \"exter"
+"n int foo();\", a #directive like \"#include <foo.h>\", a comment like \"//foo"
+"\" or \"/*foo*/\", or typedef like \"typedef char byte;\" or \"using std::list"
+";\".");
+ decl_input->box(FL_DOWN_FRAME);
+ decl_input->color(FL_BACKGROUND2_COLOR);
+ decl_input->selection_color(FL_SELECTION_COLOR);
+ decl_input->labeltype(FL_NORMAL_LABEL);
+ decl_input->labelfont(0);
+ decl_input->labelsize(11);
+ decl_input->labelcolor(FL_FOREGROUND_COLOR);
+ decl_input->align(Fl_Align(134));
+ decl_input->when(FL_WHEN_RELEASE);
+ Fl_Group::current()->resizable(decl_input);
+ } // CodeEditor* decl_input
+ { Fl_Box* o = new Fl_Box(20, 139, 300, 1);
+ o->box(FL_BORDER_FRAME);
+ o->color((Fl_Color)43);
+ } // Fl_Box* o
+ o->end();
+ Fl_Group::current()->resizable(o);
+ } // Fl_Group* o
+ { Fl_Group* o = new Fl_Group(10, 140, 320, 80);
+ o->box(FL_FLAT_BOX);
+ { decl_comment_input = new Fl_Text_Editor(10, 155, 320, 64, "Comment:");
+ decl_comment_input->tooltip("Declaration comment in Doxygen format");
+ decl_comment_input->box(FL_DOWN_BOX);
+ decl_comment_input->labelfont(1);
+ decl_comment_input->labelsize(11);
+ decl_comment_input->textfont(4);
+ decl_comment_input->textsize(11);
+ decl_comment_input->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ Fl_Group::current()->resizable(decl_comment_input);
+ decl_comment_input->buffer(new Fl_Text_Buffer());
+ decl_comment_input->add_key_binding(FL_Tab, 0, use_tab_navigation);
+ } // Fl_Text_Editor* decl_comment_input
+ o->end();
+ } // Fl_Group* o
+ o->size_range(0, 320, 100);
+ o->size_range(1, 320, 60);
+ o->end();
+ Fl_Group::current()->resizable(o);
+ } // Fl_Tile* o
+ { Fl_Group* o = new Fl_Group(10, 230, 320, 20);
+ { decl_panel_ok = new Fl_Return_Button(200, 230, 60, 20, "OK");
+ decl_panel_ok->labelsize(11);
+ decl_panel_ok->window()->hotspot(decl_panel_ok);
+ } // Fl_Return_Button* decl_panel_ok
+ { decl_panel_cancel = new Fl_Button(270, 230, 60, 20, "Cancel");
+ decl_panel_cancel->shortcut(0xff1b);
+ decl_panel_cancel->labelsize(11);
+ } // Fl_Button* decl_panel_cancel
+ { Fl_Box* o = new Fl_Box(10, 230, 185, 20);
+ Fl_Group::current()->resizable(o);
+ } // Fl_Box* o
+ o->end();
+ } // Fl_Group* o
+ decl_panel->size_range(343, 262);
+ decl_panel->end();
+ } // Fl_Double_Window* decl_panel
+ return decl_panel;
+}
+
+Fl_Double_Window *data_panel=(Fl_Double_Window *)0;
+
+Fl_Choice *data_choice=(Fl_Choice *)0;
+
+Fl_Menu_Item menu_data_choice[] = {
+ {"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}
+};
+
+Fl_Choice *data_class_choice=(Fl_Choice *)0;
+
+Fl_Menu_Item menu_data_class_choice[] = {
+ {"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}
+};
+
+Fl_Choice *data_mode=(Fl_Choice *)0;
+
+Fl_Menu_Item menu_data_mode[] = {
+ {"binary mode", 0, 0, (void*)(0), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
+ {"text mode", 0, 0, (void*)(1), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
+ {"compressed binary", 0, 0, (void*)(2), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
+ {0,0,0,0,0,0,0,0,0}
+};
+
+Fl_Input *data_input=(Fl_Input *)0;
+
+Fl_Input *data_filename=(Fl_Input *)0;
+
+Fl_Button *data_filebrowser=(Fl_Button *)0;
+
+Fl_Text_Editor *data_comment_input=(Fl_Text_Editor *)0;
+
+Fl_Return_Button *data_panel_ok=(Fl_Return_Button *)0;
+
+Fl_Button *data_panel_cancel=(Fl_Button *)0;
+
+Fl_Double_Window* make_data_panel() {
+ { data_panel = new Fl_Double_Window(343, 264, "Inline Data Properties");
+ data_panel->align(Fl_Align(FL_ALIGN_CLIP|FL_ALIGN_INSIDE));
+ { Fl_Group* o = new Fl_Group(10, 10, 320, 48);
+ { Fl_Box* o = new Fl_Box(288, 10, 42, 20);
+ Fl_Group::current()->resizable(o);
+ } // Fl_Box* o
+ { data_choice = new Fl_Choice(10, 10, 185, 20);
+ data_choice->down_box(FL_BORDER_BOX);
+ data_choice->labelsize(11);
+ data_choice->textsize(11);
+ data_choice->menu(menu_data_choice);
+ } // Fl_Choice* data_choice
+ { data_class_choice = new Fl_Choice(10, 10, 75, 20);
+ data_class_choice->down_box(FL_BORDER_BOX);
+ data_class_choice->labelsize(11);
+ data_class_choice->textsize(11);
+ data_class_choice->menu(menu_data_class_choice);
+ } // Fl_Choice* data_class_choice
+ { data_mode = new Fl_Choice(10, 38, 185, 20);
+ data_mode->tooltip("text mode generates a \"const char*\" and a trailing NUL, compressed mode use"
+"s zlib to generate a binary block");
+ data_mode->down_box(FL_BORDER_BOX);
+ data_mode->labelsize(11);
+ data_mode->textsize(11);
+ data_mode->menu(menu_data_mode);
+ } // Fl_Choice* data_mode
+ o->end();
+ } // Fl_Group* o
+ { data_input = new Fl_Input(10, 78, 320, 20, "Variable Name:");
+ data_input->tooltip("Inline Data variables are declared \"const unsigned char []\" in binary mode "
+"and \"const char*\" in text mode.");
+ data_input->labelfont(1);
+ data_input->labelsize(11);
+ data_input->textfont(4);
+ data_input->textsize(11);
+ data_input->align(Fl_Align(133));
+ data_input->when(FL_WHEN_NEVER);
+ } // Fl_Input* data_input
+ { data_filename = new Fl_Input(10, 116, 280, 20, "Filename:");
+ data_filename->tooltip("Name and path of file that will be inlined.");
+ data_filename->labelfont(1);
+ data_filename->labelsize(11);
+ data_filename->textfont(4);
+ data_filename->textsize(11);
+ data_filename->align(Fl_Align(133));
+ data_filename->when(FL_WHEN_NEVER);
+ } // Fl_Input* data_filename
+ { data_filebrowser = new Fl_Button(290, 116, 40, 20, "@fileopen");
+ data_filebrowser->labelcolor((Fl_Color)134);
+ } // Fl_Button* data_filebrowser
+ { data_comment_input = new Fl_Text_Editor(10, 156, 320, 65, "Comment:");
+ data_comment_input->tooltip("Declaration comment in Doxygen format");
+ data_comment_input->box(FL_DOWN_BOX);
+ data_comment_input->labelfont(1);
+ data_comment_input->labelsize(11);
+ data_comment_input->textfont(4);
+ data_comment_input->textsize(11);
+ data_comment_input->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ Fl_Group::current()->resizable(data_comment_input);
+ data_comment_input->buffer(new Fl_Text_Buffer());
+ data_comment_input->add_key_binding(FL_Tab, 0, use_tab_navigation);
+ } // Fl_Text_Editor* data_comment_input
+ { Fl_Group* o = new Fl_Group(10, 231, 320, 20);
+ { data_panel_ok = new Fl_Return_Button(200, 231, 60, 20, "OK");
+ data_panel_ok->labelsize(11);
+ data_panel_ok->window()->hotspot(data_panel_ok);
+ } // Fl_Return_Button* data_panel_ok
+ { data_panel_cancel = new Fl_Button(270, 231, 60, 20, "Cancel");
+ data_panel_cancel->shortcut(0xff1b);
+ data_panel_cancel->labelsize(11);
+ } // Fl_Button* data_panel_cancel
+ { Fl_Box* o = new Fl_Box(10, 231, 185, 20);
+ Fl_Group::current()->resizable(o);
+ } // Fl_Box* o
+ o->end();
+ } // Fl_Group* o
+ data_panel->size_range(343, 237);
+ data_panel->end();
+ } // Fl_Double_Window* data_panel
+ return data_panel;
+}
+
+Fl_Double_Window *class_panel=(Fl_Double_Window *)0;
+
+Fl_Light_Button *c_public_button=(Fl_Light_Button *)0;
+
+Fl_Input *c_name_input=(Fl_Input *)0;
+
+Fl_Input *c_subclass_input=(Fl_Input *)0;
+
+Fl_Text_Editor *c_comment_input=(Fl_Text_Editor *)0;
+
+Fl_Return_Button *c_panel_ok=(Fl_Return_Button *)0;
+
+Fl_Button *c_panel_cancel=(Fl_Button *)0;
+
+Fl_Double_Window* make_class_panel() {
+ { class_panel = new Fl_Double_Window(342, 196, "Class Properties");
+ class_panel->labelsize(11);
+ { Fl_Group* o = new Fl_Group(10, 10, 280, 20);
+ o->hide();
+ { c_public_button = new Fl_Light_Button(10, 10, 60, 20, "public");
+ c_public_button->tooltip("Make the class publicly accessible.");
+ c_public_button->labelsize(11);
+ c_public_button->when(FL_WHEN_NEVER);
+ c_public_button->hide();
+ } // Fl_Light_Button* c_public_button
+ { Fl_Box* o = new Fl_Box(80, 10, 210, 20);
+ Fl_Group::current()->resizable(o);
+ } // Fl_Box* o
+ o->end();
+ } // Fl_Group* o
+ { c_name_input = new Fl_Input(10, 20, 320, 20, "Name:");
+ c_name_input->tooltip("Name of class.");
+ c_name_input->labelfont(1);
+ c_name_input->labelsize(11);
+ c_name_input->textfont(4);
+ c_name_input->textsize(11);
+ c_name_input->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ c_name_input->when(FL_WHEN_NEVER);
+ } // Fl_Input* c_name_input
+ { c_subclass_input = new Fl_Input(10, 55, 320, 20, "Subclass of (text between : and {)");
+ c_subclass_input->tooltip("Name of subclass.");
+ c_subclass_input->labelfont(1);
+ c_subclass_input->labelsize(11);
+ c_subclass_input->textfont(4);
+ c_subclass_input->textsize(11);
+ c_subclass_input->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ c_subclass_input->when(FL_WHEN_NEVER);
+ } // Fl_Input* c_subclass_input
+ { c_comment_input = new Fl_Text_Editor(10, 90, 320, 65, "Comment:");
+ c_comment_input->tooltip("Class comment in Doxygen format");
+ c_comment_input->box(FL_DOWN_BOX);
+ c_comment_input->labelfont(1);
+ c_comment_input->labelsize(11);
+ c_comment_input->textfont(4);
+ c_comment_input->textsize(11);
+ c_comment_input->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ Fl_Group::current()->resizable(c_comment_input);
+ c_comment_input->buffer(new Fl_Text_Buffer());
+ c_comment_input->add_key_binding(FL_Tab, 0, use_tab_navigation);
+ } // Fl_Text_Editor* c_comment_input
+ { Fl_Group* o = new Fl_Group(10, 165, 320, 20);
+ { c_panel_ok = new Fl_Return_Button(200, 165, 60, 20, "OK");
+ c_panel_ok->labelsize(11);
+ c_panel_ok->window()->hotspot(c_panel_ok);
+ } // Fl_Return_Button* c_panel_ok
+ { c_panel_cancel = new Fl_Button(270, 165, 60, 20, "Cancel");
+ c_panel_cancel->shortcut(0xff1b);
+ c_panel_cancel->labelsize(11);
+ } // Fl_Button* c_panel_cancel
+ { Fl_Box* o = new Fl_Box(10, 165, 185, 20);
+ Fl_Group::current()->resizable(o);
+ } // Fl_Box* o
+ o->end();
+ } // Fl_Group* o
+ class_panel->set_modal();
+ class_panel->size_range(343, 188);
+ class_panel->end();
+ } // Fl_Double_Window* class_panel
+ return class_panel;
+}
+
+Fl_Double_Window *comment_panel=(Fl_Double_Window *)0;
+
+Fl_Text_Editor *comment_input=(Fl_Text_Editor *)0;
+
+Fl_Return_Button *comment_panel_ok=(Fl_Return_Button *)0;
+
+Fl_Button *comment_panel_cancel=(Fl_Button *)0;
+
+Fl_Light_Button *comment_in_source=(Fl_Light_Button *)0;
+
+Fl_Light_Button *comment_in_header=(Fl_Light_Button *)0;
+
+Fl_Menu_Button *comment_predefined=(Fl_Menu_Button *)0;
+
+Fl_Button *comment_load=(Fl_Button *)0;
+
+Fl_Double_Window* make_comment_panel() {
+ { Fl_Double_Window* o = comment_panel = new Fl_Double_Window(550, 280, "Comment Properties");
+ comment_panel->labelsize(11);
+ { Fl_Text_Editor* o = comment_input = new Fl_Text_Editor(110, 10, 430, 230);
+ comment_input->box(FL_DOWN_BOX);
+ comment_input->labelsize(11);
+ comment_input->textfont(4);
+ comment_input->textsize(11);
+ comment_input->textcolor((Fl_Color)58);
+ Fl_Group::current()->resizable(comment_input);
+ o->when(FL_WHEN_ENTER_KEY_CHANGED|FL_WHEN_RELEASE);
+ o->buffer(new Fl_Text_Buffer());
+ } // Fl_Text_Editor* comment_input
+ { Fl_Group* o = new Fl_Group(110, 250, 430, 20);
+ o->labelsize(11);
+ { comment_panel_ok = new Fl_Return_Button(370, 250, 80, 20, "OK");
+ comment_panel_ok->labelsize(11);
+ comment_panel_ok->window()->hotspot(comment_panel_ok);
+ } // Fl_Return_Button* comment_panel_ok
+ { comment_panel_cancel = new Fl_Button(460, 250, 80, 20, "Cancel");
+ comment_panel_cancel->shortcut(0xff1b);
+ comment_panel_cancel->labelsize(11);
+ } // Fl_Button* comment_panel_cancel
+ { Fl_Box* o = new Fl_Box(110, 250, 250, 20);
+ o->labelsize(11);
+ Fl_Group::current()->resizable(o);
+ } // Fl_Box* o
+ o->end();
+ } // Fl_Group* o
+ { Fl_Group* o = new Fl_Group(10, 10, 90, 243);
+ o->labelsize(11);
+ { comment_in_source = new Fl_Light_Button(10, 10, 90, 20, "In Source");
+ comment_in_source->tooltip("Put the comment into the source (.cxx) file.");
+ comment_in_source->labelsize(11);
+ comment_in_source->when(FL_WHEN_NEVER);
+ } // Fl_Light_Button* comment_in_source
+ { comment_in_header = new Fl_Light_Button(10, 40, 90, 20, "In Header");
+ comment_in_header->tooltip("Put the comment into the header (.h) file.");
+ comment_in_header->labelsize(11);
+ comment_in_header->when(FL_WHEN_NEVER);
+ } // Fl_Light_Button* comment_in_header
+ { comment_predefined = new Fl_Menu_Button(10, 70, 90, 20, "Predefined");
+ comment_predefined->labelsize(11);
+ comment_predefined->textsize(11);
+ } // Fl_Menu_Button* comment_predefined
+ { comment_load = new Fl_Button(10, 100, 90, 20, "Import...");
+ comment_load->labelsize(11);
+ } // Fl_Button* comment_load
+ { Fl_Box* o = new Fl_Box(10, 132, 90, 121);
+ o->labelsize(11);
+ Fl_Group::current()->resizable(o);
+ } // Fl_Box* o
+ o->end();
+ } // Fl_Group* o
+ comment_panel->set_modal();
+ o->size_range(320, 180);
+ comment_panel->end();
+ } // Fl_Double_Window* comment_panel
+ return comment_panel;
+}
+
+void type_make_cb(Fl_Widget*,void*d) {
+ const char *type_name = (const char*)d;
+ if (Fl_Type::current && Fl_Type::current->can_have_children())
+ add_new_widget_from_user(type_name, Strategy::AS_LAST_CHILD);
+ else
+ add_new_widget_from_user(type_name, Strategy::AFTER_CURRENT);
+}
+
+Fl_Window *widgetbin_panel=(Fl_Window *)0;
+
+static void cb_widgetbin_panel(Fl_Window* o, void* v) {
+ if (Fl::event()==FL_SHORTCUT && Fl::event_key()==FL_Escape)
+ exit_cb((Fl_Widget*)o, v);
+ else
+ toggle_widgetbin_cb((Fl_Widget*)o, v);
+}
+
+Fl_Window* make_widgetbin() {
+ { widgetbin_panel = new Fl_Window(600, 102, "Widget Bin");
+ widgetbin_panel->callback((Fl_Callback*)cb_widgetbin_panel);
+ widgetbin_panel->align(Fl_Align(FL_ALIGN_CLIP|FL_ALIGN_INSIDE));
+ { Fl_Group* o = new Fl_Group(3, 19, 79, 79, "Code");
+ o->labelsize(12);
+ { Fl_Button* o = new Fl_Button(5, 21, 24, 24);
+ o->tooltip("Function");
+ o->box(FL_THIN_UP_BOX);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("Function"));
+ o->image(pixmap[ID_Function]);
+ } // Fl_Button* o
+ { Fl_Button* o = new Fl_Button(30, 21, 24, 24);
+ o->tooltip("Class");
+ o->box(FL_THIN_UP_BOX);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("Class"));
+ o->image(pixmap[ID_Class]);
+ } // Fl_Button* o
+ { Fl_Button* o = new Fl_Button(55, 21, 24, 24);
+ o->tooltip("Comment");
+ o->box(FL_THIN_UP_BOX);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("comment"));
+ o->image(pixmap[ID_Comment]);
+ } // Fl_Button* o
+ { Fl_Button* o = new Fl_Button(5, 46, 24, 24);
+ o->tooltip("Code");
+ o->box(FL_THIN_UP_BOX);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("Code"));
+ o->image(pixmap[ID_Code]);
+ } // Fl_Button* o
+ { Fl_Button* o = new Fl_Button(30, 46, 24, 24);
+ o->tooltip("Code Block");
+ o->box(FL_THIN_UP_BOX);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("CodeBlock"));
+ o->image(pixmap[ID_CodeBlock]);
+ } // Fl_Button* o
+ { Widget_Bin_Window_Button* o = new Widget_Bin_Window_Button(55, 46, 24, 24);
+ o->tooltip("Widget Class");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("widget_class"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_Widget_Class]);
+ } // Widget_Bin_Window_Button* o
+ { Fl_Button* o = new Fl_Button(5, 71, 24, 24);
+ o->tooltip("Declaration");
+ o->box(FL_THIN_UP_BOX);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("decl"));
+ o->image(pixmap[ID_Decl]);
+ } // Fl_Button* o
+ { Fl_Button* o = new Fl_Button(30, 71, 24, 24);
+ o->tooltip("Declaration Block");
+ o->box(FL_THIN_UP_BOX);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("declblock"));
+ o->image(pixmap[ID_DeclBlock]);
+ } // Fl_Button* o
+ { Fl_Button* o = new Fl_Button(55, 71, 24, 24);
+ o->tooltip("Inline Data");
+ o->box(FL_THIN_UP_BOX);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("data"));
+ o->image(pixmap[ID_Data]);
+ } // Fl_Button* o
+ o->end();
+ } // Fl_Group* o
+ { Fl_Group* o = new Fl_Group(87, 19, 79, 79, "Groups");
+ o->labelsize(12);
+ { Widget_Bin_Window_Button* o = new Widget_Bin_Window_Button(89, 21, 24, 24);
+ o->tooltip("Window");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Window"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_Window]);
+ } // Widget_Bin_Window_Button* o
+ { Widget_Bin_Button* o = new Widget_Bin_Button(114, 21, 24, 24);
+ o->tooltip("Group");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Group"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_Group]);
+ } // Widget_Bin_Button* o
+ { Widget_Bin_Button* o = new Widget_Bin_Button(139, 21, 24, 24);
+ o->tooltip("Pack");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Pack"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_Pack]);
+ } // Widget_Bin_Button* o
+ { Widget_Bin_Button* o = new Widget_Bin_Button(89, 46, 24, 24);
+ o->tooltip("Tabs");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Tabs"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_Tabs]);
+ } // Widget_Bin_Button* o
+ { Widget_Bin_Button* o = new Widget_Bin_Button(114, 46, 24, 24);
+ o->tooltip("Scroll");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Scroll"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_Scroll]);
+ } // Widget_Bin_Button* o
+ { Widget_Bin_Button* o = new Widget_Bin_Button(139, 46, 24, 24);
+ o->tooltip("Flex");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Flex"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_Flex]);
+ } // Widget_Bin_Button* o
+ { Widget_Bin_Button* o = new Widget_Bin_Button(89, 71, 24, 24);
+ o->tooltip("Tile");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Tile"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_Tile]);
+ } // Widget_Bin_Button* o
+ { Widget_Bin_Button* o = new Widget_Bin_Button(114, 71, 24, 24);
+ o->tooltip("Wizard");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Wizard"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_Wizard]);
+ } // Widget_Bin_Button* o
+ { Widget_Bin_Button* o = new Widget_Bin_Button(139, 71, 24, 24);
+ o->tooltip("Grid");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Grid"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_Grid]);
+ } // Widget_Bin_Button* o
+ o->end();
+ } // Fl_Group* o
+ { Fl_Group* o = new Fl_Group(171, 19, 54, 79, "Buttons");
+ o->labelsize(12);
+ { Widget_Bin_Button* o = new Widget_Bin_Button(173, 21, 24, 24);
+ o->tooltip("Button");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Button"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_Button]);
+ } // Widget_Bin_Button* o
+ { Widget_Bin_Button* o = new Widget_Bin_Button(198, 21, 24, 24);
+ o->tooltip("Return Button");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Return_Button"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_Return_Button]);
+ } // Widget_Bin_Button* o
+ { Widget_Bin_Button* o = new Widget_Bin_Button(173, 46, 24, 24);
+ o->tooltip("Light Button");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Light_Button"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_Light_Button]);
+ } // Widget_Bin_Button* o
+ { Widget_Bin_Button* o = new Widget_Bin_Button(198, 46, 24, 24);
+ o->tooltip("Repeat Button");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Repeat_Button"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_Repeat_Button]);
+ } // Widget_Bin_Button* o
+ { Widget_Bin_Button* o = new Widget_Bin_Button(173, 71, 24, 24);
+ o->tooltip("Check Button");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Check_Button"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_Check_Button]);
+ } // Widget_Bin_Button* o
+ { Widget_Bin_Button* o = new Widget_Bin_Button(198, 71, 24, 24);
+ o->tooltip("Round Button");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Round_Button"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_Round_Button]);
+ } // Widget_Bin_Button* o
+ o->end();
+ } // Fl_Group* o
+ { Fl_Group* o = new Fl_Group(230, 19, 104, 79, "Valuators");
+ o->labelsize(12);
+ { Widget_Bin_Button* o = new Widget_Bin_Button(232, 21, 24, 24);
+ o->tooltip("Slider");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Slider"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_Slider]);
+ } // Widget_Bin_Button* o
+ { Widget_Bin_Button* o = new Widget_Bin_Button(257, 21, 24, 24);
+ o->tooltip("Scroll Bar");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Scrollbar"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_Scrollbar]);
+ } // Widget_Bin_Button* o
+ { Widget_Bin_Button* o = new Widget_Bin_Button(282, 21, 24, 24);
+ o->tooltip("Value Slider");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Value_Slider"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_Value_Slider]);
+ } // Widget_Bin_Button* o
+ { Widget_Bin_Button* o = new Widget_Bin_Button(307, 21, 24, 24);
+ o->tooltip("Value Output");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Value_Output"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_Value_Output]);
+ } // Widget_Bin_Button* o
+ { Widget_Bin_Button* o = new Widget_Bin_Button(232, 46, 24, 24);
+ o->tooltip("Adjuster");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Adjuster"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_Adjuster]);
+ } // Widget_Bin_Button* o
+ { Widget_Bin_Button* o = new Widget_Bin_Button(257, 46, 24, 24);
+ o->tooltip("Counter");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Counter"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_Counter]);
+ } // Widget_Bin_Button* o
+ { Widget_Bin_Button* o = new Widget_Bin_Button(282, 46, 24, 24);
+ o->tooltip("Dial");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Dial"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_Dial]);
+ } // Widget_Bin_Button* o
+ { Widget_Bin_Button* o = new Widget_Bin_Button(232, 71, 24, 24);
+ o->tooltip("Roller");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Roller"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_Roller]);
+ } // Widget_Bin_Button* o
+ { Widget_Bin_Button* o = new Widget_Bin_Button(257, 71, 24, 24);
+ o->tooltip("Spinner");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Spinner"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_Spinner]);
+ } // Widget_Bin_Button* o
+ { Widget_Bin_Button* o = new Widget_Bin_Button(282, 71, 24, 24);
+ o->tooltip("Value Input");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Value_Input"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_Value_Input]);
+ } // Widget_Bin_Button* o
+ o->end();
+ } // Fl_Group* o
+ { Fl_Group* o = new Fl_Group(339, 19, 54, 79, "Text");
+ o->labelsize(12);
+ { Widget_Bin_Button* o = new Widget_Bin_Button(341, 21, 24, 24);
+ o->tooltip("Input");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Input"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_Input]);
+ } // Widget_Bin_Button* o
+ { Widget_Bin_Button* o = new Widget_Bin_Button(366, 21, 24, 24);
+ o->tooltip("Output");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Output"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_Output]);
+ } // Widget_Bin_Button* o
+ { Widget_Bin_Button* o = new Widget_Bin_Button(341, 46, 24, 24);
+ o->tooltip("Text Edit");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Text_Editor"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_Text_Editor]);
+ } // Widget_Bin_Button* o
+ { Widget_Bin_Button* o = new Widget_Bin_Button(366, 46, 24, 24);
+ o->tooltip("Text Display");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Text_Display"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_Text_Display]);
+ } // Widget_Bin_Button* o
+ { Widget_Bin_Button* o = new Widget_Bin_Button(341, 71, 24, 24);
+ o->tooltip("File Input");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_File_Input"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_File_Input]);
+ } // Widget_Bin_Button* o
+ { Widget_Bin_Button* o = new Widget_Bin_Button(366, 71, 24, 24);
+ o->tooltip("Terminal");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Terminal"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_Terminal]);
+ } // Widget_Bin_Button* o
+ o->end();
+ } // Fl_Group* o
+ { Fl_Group* o = new Fl_Group(398, 19, 79, 79, "Menus");
+ o->labelsize(12);
+ { Widget_Bin_Button* o = new Widget_Bin_Button(400, 22, 24, 24);
+ o->tooltip("Input Choice");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Input_Choice"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_Input_Choice]);
+ } // Widget_Bin_Button* o
+ { Widget_Bin_Button* o = new Widget_Bin_Button(425, 21, 24, 24);
+ o->tooltip("Menu Item");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("menuitem"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_Menu_Item]);
+ } // Widget_Bin_Button* o
+ { Widget_Bin_Button* o = new Widget_Bin_Button(450, 21, 24, 24);
+ o->tooltip("Menu Bar");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Menu_Bar"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_Menu_Bar]);
+ } // Widget_Bin_Button* o
+ { Widget_Bin_Button* o = new Widget_Bin_Button(400, 46, 24, 24);
+ o->tooltip("Menu Button");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Menu_Button"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_Menu_Button]);
+ } // Widget_Bin_Button* o
+ { Widget_Bin_Button* o = new Widget_Bin_Button(425, 46, 24, 24);
+ o->tooltip("Checkbox Menu Item");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("checkmenuitem"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_Checkbox_Menu_Item]);
+ } // Widget_Bin_Button* o
+ { Widget_Bin_Button* o = new Widget_Bin_Button(450, 46, 24, 24);
+ o->tooltip("Sub Menu");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("submenu"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_Submenu]);
+ } // Widget_Bin_Button* o
+ { Widget_Bin_Button* o = new Widget_Bin_Button(400, 71, 24, 24);
+ o->tooltip("Choice");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Choice"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_Choice]);
+ } // Widget_Bin_Button* o
+ { Widget_Bin_Button* o = new Widget_Bin_Button(425, 71, 24, 24);
+ o->tooltip("Radio Menu Item");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("radiomenuitem"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_Radio_Menu_Item]);
+ } // Widget_Bin_Button* o
+ o->end();
+ } // Fl_Group* o
+ { Fl_Group* o = new Fl_Group(482, 19, 54, 79, "Browsers");
+ o->labelsize(12);
+ { Widget_Bin_Button* o = new Widget_Bin_Button(484, 21, 24, 24);
+ o->tooltip("Browser");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Browser"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_Browser]);
+ } // Widget_Bin_Button* o
+ { Widget_Bin_Button* o = new Widget_Bin_Button(509, 21, 24, 24);
+ o->tooltip("Tree");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Tree"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_Tree]);
+ } // Widget_Bin_Button* o
+ { Widget_Bin_Button* o = new Widget_Bin_Button(484, 46, 24, 24);
+ o->tooltip("Check Browser");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Check_Browser"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_Check_Browser]);
+ } // Widget_Bin_Button* o
+ { Widget_Bin_Button* o = new Widget_Bin_Button(509, 46, 24, 24);
+ o->tooltip("Help Browser");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Help_View"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_Help_View]);
+ } // Widget_Bin_Button* o
+ { Widget_Bin_Button* o = new Widget_Bin_Button(484, 71, 24, 24);
+ o->tooltip("File Browser");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_File_Browser"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_File_Browser]);
+ } // Widget_Bin_Button* o
+ { Widget_Bin_Button* o = new Widget_Bin_Button(509, 71, 24, 24);
+ o->tooltip("Table");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Table"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_Table]);
+ } // Widget_Bin_Button* o
+ o->end();
+ } // Fl_Group* o
+ { Fl_Group* o = new Fl_Group(540, 19, 55, 79, "Misc");
+ o->labelsize(12);
+ { Widget_Bin_Button* o = new Widget_Bin_Button(542, 21, 24, 24);
+ o->tooltip("Box");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Box"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_Box]);
+ } // Widget_Bin_Button* o
+ { Widget_Bin_Button* o = new Widget_Bin_Button(567, 21, 24, 24);
+ o->tooltip("Clock");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Clock"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_Clock]);
+ } // Widget_Bin_Button* o
+ { Widget_Bin_Button* o = new Widget_Bin_Button(542, 46, 24, 24);
+ o->tooltip("Progress");
+ o->box(FL_THIN_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(14);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Progress"));
+ o->align(Fl_Align(FL_ALIGN_CENTER));
+ o->when(FL_WHEN_RELEASE);
+ o->image(pixmap[ID_Progress]);
+ } // Widget_Bin_Button* o
+ o->end();
+ } // Fl_Group* o
+ widgetbin_panel->set_non_modal();
+ widgetbin_panel->end();
+ } // Fl_Window* widgetbin_panel
+ return widgetbin_panel;
+}
+
+//
diff --git a/fluid/panels/function_panel.fl b/fluid/panels/function_panel.fl
new file mode 100644
index 000000000..5ad6325fc
--- /dev/null
+++ b/fluid/panels/function_panel.fl
@@ -0,0 +1,1043 @@
+# data file for the Fltk User Interface Designer (fluid)
+version 1.0500
+header_name {.h}
+code_name {.cxx}
+snap {
+ ver 1
+ current_suite FLTK
+ current_preset 1
+}
+comment {//
+// Code dialogs for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2023 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
+//
+} {in_source in_header
+}
+
+decl {\#include "app/fluid.h"} {private local
+}
+
+decl {\#include "app/undo.h"} {selected private local
+}
+
+decl {\#include "nodes/Fl_Type.h"} {private local
+}
+
+decl {\#include "nodes/factory.h"} {private local
+}
+
+decl {\#include "rsrcs/pixmaps.h"} {private local
+}
+
+decl {\#include "widgets/custom_widgets.h"} {private global
+}
+
+decl {\#include "widgets/widget_browser.h"} {private local
+}
+
+Function {use_tab_navigation(int, Fl_Text_Editor*)} {
+ comment {Allow widget navigation on text fields with Tab.} private return_type int
+} {
+ code {return 0;} {}
+}
+
+Function {make_function_panel()} {open
+} {
+ Fl_Window function_panel {
+ label {Function/Method Properties}
+ xywh {540 418 343 232} type Double align 80 resizable modal visible
+ } {
+ Fl_Group {} {open
+ xywh {10 10 270 20}
+ } {
+ Fl_Choice f_public_member_choice {open
+ tooltip {Change member access attribute.} xywh {10 10 75 20} down_box BORDER_BOX labelsize 11 when 1 textsize 11
+ } {
+ MenuItem {} {
+ label private
+ user_data 0 user_data_type long
+ xywh {5 5 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label public
+ user_data 1 user_data_type long
+ xywh {5 5 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label protected
+ user_data 2 user_data_type long
+ xywh {5 5 100 20} labelsize 11
+ }
+ }
+ Fl_Choice f_public_choice {open
+ tooltip {Change widget accessibility.} xywh {10 10 75 20} down_box BORDER_BOX labelsize 11 when 1 textsize 11
+ } {
+ MenuItem {} {
+ label static
+ user_data 0 user_data_type long
+ xywh {15 15 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label global
+ user_data 1 user_data_type long
+ xywh {15 15 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label local
+ user_data 2 user_data_type long
+ xywh {15 15 100 20} labelsize 11
+ }
+ }
+ Fl_Light_Button f_c_button {
+ label {C declaration}
+ tooltip {Declare with a C interface instead of C++.} xywh {95 10 120 20} labelsize 11
+ }
+ Fl_Box {} {
+ xywh {235 10 45 20} resizable
+ }
+ }
+ Fl_Input f_name_input {
+ label {Name(args): (blank for main())}
+ tooltip {The name of the function or method.} xywh {10 50 320 20} labelfont 1 labelsize 11 align 5 when 0 textfont 4 textsize 11
+ }
+ Fl_Input f_return_type_input {
+ label {Return Type: (blank to return outermost widget)}
+ tooltip {The return type of the function or method.} xywh {10 90 320 20} labelfont 1 labelsize 11 align 5 when 0 textfont 4 textsize 11
+ }
+ Fl_Text_Editor f_comment_input {
+ label {Comment:}
+ tooltip {Function comment in Doxygen format} xywh {10 125 320 65} box DOWN_BOX labelfont 1 labelsize 11 align 5 textfont 4 textsize 11 resizable
+ code0 {f_comment_input->buffer(new Fl_Text_Buffer());}
+ code1 {f_comment_input->add_key_binding(FL_Tab, 0, use_tab_navigation);}
+ }
+ Fl_Group {} {open
+ xywh {10 200 320 20}
+ } {
+ Fl_Return_Button f_panel_ok {
+ label OK
+ tooltip {Apply the changes.} xywh {220 200 50 20} labelsize 11 hotspot
+ }
+ Fl_Button f_panel_cancel {
+ label Cancel
+ tooltip {Cancel the changes.} xywh {280 200 50 20} labelsize 11
+ }
+ Fl_Box {} {
+ xywh {10 200 205 20} resizable
+ }
+ }
+ }
+}
+
+Function {make_code_panel()} {open
+} {
+ Fl_Window code_panel {
+ label {Code Properties}
+ callback {if (Fl::event()==FL_SHORTCUT && Fl::event_key()==FL_Escape)
+ return; // ignore Escape
+code_panel->hide(); // otherwise hide..}
+ xywh {539 567 540 180} type Double labelsize 11 hide resizable
+ code0 {o->size_range(200, 150);} modal
+ } {
+ Fl_Text_Editor code_input {
+ xywh {10 10 520 130} box DOWN_BOX labelsize 11 textfont 4 textsize 11 resizable
+ code0 {o->when(FL_WHEN_ENTER_KEY_CHANGED|FL_WHEN_RELEASE);}
+ code1 {\#include "widgets/CodeEditor.h"}
+ class CodeEditor
+ }
+ Fl_Group {} {open
+ xywh {10 150 520 20} labelsize 11
+ } {
+ Fl_Return_Button code_panel_ok {
+ label OK
+ xywh {400 150 60 20} labelsize 11 hotspot
+ }
+ Fl_Button code_panel_cancel {
+ label Cancel
+ xywh {470 150 60 20} labelsize 11
+ }
+ Fl_Box {} {
+ xywh {10 150 380 20} labelsize 11 resizable
+ }
+ }
+ }
+ code {// Enable line numbers
+code_input->linenumber_width(60);
+code_input->linenumber_size(code_input->Fl_Text_Display::textsize());} {}
+}
+
+Function {make_codeblock_panel()} {open
+} {
+ Fl_Window codeblock_panel {
+ label {Code Block Properties}
+ xywh {806 735 300 115} type Double labelsize 11 hide resizable
+ code0 {o->size_range(o->w(), o->h(), Fl::w(), o->h());} modal
+ } {
+ Fl_Input code_before_input {
+ label {Conditional code block}
+ tooltip {\#ifdef or similar conditional code block.} xywh {10 15 280 20} labelsize 11 align 5 when 0 textfont 4 textsize 11
+ }
+ Fl_Input code_after_input {
+ label {"{...child code...}" is inserted here}
+ tooltip {\#endif or similar conditional code block.} xywh {10 55 280 20} labelsize 11 align 5 when 0 textfont 4 textsize 11 resizable
+ }
+ Fl_Group {} {open
+ xywh {10 85 280 20}
+ } {
+ Fl_Return_Button codeblock_panel_ok {
+ label OK
+ xywh {160 85 60 20} labelsize 11 hotspot
+ }
+ Fl_Button codeblock_panel_cancel {
+ label Cancel
+ xywh {230 85 60 20} shortcut 0xff1b labelsize 11
+ }
+ Fl_Box {} {
+ xywh {10 85 140 20} resizable
+ }
+ }
+ }
+}
+
+Function {make_declblock_panel()} {open
+} {
+ Fl_Window declblock_panel {
+ label {Declaration Block Properties} open
+ xywh {645 452 300 355} type Double labelsize 11 align 80 resizable
+ code0 {o->size_range(o->w(), o->h(), Fl::w(), o->h());} modal size_range {300 355 0 0} visible
+ } {
+ Fl_Input declblock_before_input {
+ label {Start Code:}
+ tooltip {\#ifdef or similar conditional declaration block.} xywh {10 23 280 20} labelfont 1 labelsize 11 align 5 when 0 textfont 4 textsize 11
+ }
+ Fl_Box {} {
+ label {"\\n...child code...\\n" is inserted here}
+ xywh {10 48 280 20} labelsize 11
+ }
+ Fl_Input declblock_after_input {
+ label {End Code:}
+ tooltip {\#endif or similar declaration code block.} xywh {10 80 280 20} labelfont 1 labelsize 11 align 5 when 0 textfont 4 textsize 11
+ }
+ Fl_Group {} {open
+ xywh {10 105 280 120}
+ } {
+ Fl_Box {} {
+ label {Enclose code generated by children in source file:}
+ xywh {10 105 270 20} labelsize 11 align 20
+ }
+ Fl_Check_Button declblock_code_source {
+ label implementations
+ xywh {20 125 260 20} down_box DOWN_BOX labelsize 11
+ }
+ Fl_Check_Button declblock_static_source {
+ label {static initializations and callbacks}
+ xywh {20 145 260 20} down_box DOWN_BOX labelsize 11
+ }
+ Fl_Box {} {
+ label {Enclose code in header file:}
+ xywh {10 165 270 20} labelsize 11 align 20
+ }
+ Fl_Check_Button declblock_code_header {
+ label {forward declarations}
+ xywh {20 185 260 20} down_box DOWN_BOX labelsize 11
+ }
+ Fl_Check_Button declblock_static_header {
+ label {preprecessor and callback declarations}
+ xywh {20 205 260 20} down_box DOWN_BOX labelsize 11
+ }
+ Fl_Box {} {
+ xywh {280 105 10 120} labelsize 11 hide resizable
+ }
+ }
+ Fl_Text_Editor declblock_comment_input {
+ label {Comment:}
+ tooltip {Declaration comment in Doxygen format} xywh {10 242 280 65} box DOWN_BOX labelfont 1 labelsize 11 align 5 textfont 4 textsize 11 resizable
+ code0 {declblock_comment_input->buffer(new Fl_Text_Buffer());}
+ code1 {declblock_comment_input->add_key_binding(FL_Tab, 0, use_tab_navigation);}
+ }
+ Fl_Group {} {
+ xywh {10 321 280 20}
+ } {
+ Fl_Return_Button declblock_panel_ok {
+ label OK
+ xywh {160 321 60 20} labelsize 11 hotspot
+ }
+ Fl_Button declblock_panel_cancel {
+ label Cancel
+ xywh {230 321 60 20} shortcut 0xff1b labelsize 11
+ }
+ Fl_Box {} {
+ xywh {10 321 140 20} resizable
+ }
+ }
+ }
+}
+
+Function {make_decl_panel()} {open
+} {
+ Fl_Window decl_panel {
+ label {Declaration Properties}
+ xywh {497 618 343 262} type Double align 80 resizable size_range {343 262 0 0} visible
+ } {
+ Fl_Group {} {
+ xywh {10 10 270 20}
+ } {
+ Fl_Box {} {
+ xywh {200 10 80 20} resizable
+ }
+ Fl_Choice decl_choice {
+ xywh {10 10 185 20} down_box BORDER_BOX labelsize 11 textsize 11
+ } {
+ MenuItem {} {
+ label {in source file only}
+ xywh {0 0 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label {in header file only}
+ xywh {0 0 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label {"static" in source file}
+ xywh {0 0 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label {in source and "extern" in header}
+ xywh {0 0 100 20} labelsize 11
+ }
+ }
+ Fl_Choice decl_class_choice {
+ xywh {10 10 75 20} down_box BORDER_BOX labelsize 11 textsize 11
+ } {
+ MenuItem {} {
+ label private
+ xywh {10 10 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label public
+ xywh {10 10 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label protected
+ xywh {10 10 100 20} labelsize 11
+ }
+ }
+ }
+ Fl_Tile {} {open
+ xywh {10 40 320 180} resizable
+ code2 {o->size_range(0, 320, 100);}
+ code3 {o->size_range(1, 320, 60);}
+ } {
+ Fl_Group {} {open
+ xywh {10 40 320 100} box FLAT_BOX resizable
+ } {
+ Fl_Text_Editor decl_input {
+ label {This can be any declaration, like "int x;", an external symbol like "extern int foo();", a \#directive like "\#include <foo.h>", a comment like "//foo" or "/*foo*/", or typedef like "typedef char byte;" or "using std::list;".}
+ xywh {10 40 320 45} labelsize 11 align 134 resizable
+ code0 {\#include "widgets/CodeEditor.h"}
+ class CodeEditor
+ }
+ Fl_Box {} {
+ xywh {20 139 300 1} box BORDER_FRAME color 43
+ }
+ }
+ Fl_Group {} {open
+ xywh {10 140 320 80} box FLAT_BOX
+ } {
+ Fl_Text_Editor decl_comment_input {
+ label {Comment:}
+ tooltip {Declaration comment in Doxygen format} xywh {10 155 320 64} box DOWN_BOX labelfont 1 labelsize 11 align 5 textfont 4 textsize 11 resizable
+ code0 {decl_comment_input->buffer(new Fl_Text_Buffer());}
+ code1 {decl_comment_input->add_key_binding(FL_Tab, 0, use_tab_navigation);}
+ }
+ }
+ }
+ Fl_Group {} {open
+ xywh {10 230 320 20}
+ } {
+ Fl_Return_Button decl_panel_ok {
+ label OK
+ xywh {200 230 60 20} labelsize 11 hotspot
+ }
+ Fl_Button decl_panel_cancel {
+ label Cancel
+ xywh {270 230 60 20} shortcut 0xff1b labelsize 11
+ }
+ Fl_Box {} {
+ xywh {10 230 185 20} resizable
+ }
+ }
+ }
+}
+
+Function {make_data_panel()} {open
+} {
+ Fl_Window data_panel {
+ label {Inline Data Properties}
+ xywh {567 382 343 264} type Double align 80 resizable size_range {343 237 0 0} visible
+ } {
+ Fl_Group {} {open
+ xywh {10 10 320 48}
+ } {
+ Fl_Box {} {
+ xywh {288 10 42 20} resizable
+ }
+ Fl_Choice data_choice {open
+ xywh {10 10 185 20} down_box BORDER_BOX labelsize 11 textsize 11
+ } {
+ MenuItem {} {
+ label {in source file only}
+ xywh {0 0 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label {in header file only}
+ xywh {0 0 100 20} labelsize 11 hide
+ }
+ MenuItem {} {
+ label {"static" in source file}
+ xywh {0 0 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label {in source and "extern" in header}
+ xywh {0 0 100 20} labelsize 11
+ }
+ }
+ Fl_Choice data_class_choice {open
+ xywh {10 10 75 20} down_box BORDER_BOX labelsize 11 textsize 11
+ } {
+ MenuItem {} {
+ label private
+ xywh {10 10 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label public
+ xywh {10 10 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label protected
+ xywh {10 10 100 20} labelsize 11
+ }
+ }
+ Fl_Choice data_mode {open
+ tooltip {text mode generates a "const char*" and a trailing NUL, compressed mode uses zlib to generate a binary block} xywh {10 38 185 20} down_box BORDER_BOX labelsize 11 textsize 11
+ } {
+ MenuItem {} {
+ label {binary mode}
+ user_data 0 user_data_type long
+ xywh {0 0 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label {text mode}
+ user_data 1 user_data_type long
+ xywh {0 0 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label {compressed binary}
+ user_data 2 user_data_type long
+ xywh {0 0 100 20} labelsize 11
+ }
+ }
+ }
+ Fl_Input data_input {
+ label {Variable Name:}
+ tooltip {Inline Data variables are declared "const unsigned char []" in binary mode and "const char*" in text mode.} xywh {10 78 320 20} labelfont 1 labelsize 11 align 133 when 0 textfont 4 textsize 11
+ }
+ Fl_Input data_filename {
+ label {Filename:}
+ tooltip {Name and path of file that will be inlined.} xywh {10 116 280 20} labelfont 1 labelsize 11 align 133 when 0 textfont 4 textsize 11
+ }
+ Fl_Button data_filebrowser {
+ label {@fileopen}
+ xywh {290 116 40 20} labelcolor 134
+ }
+ Fl_Text_Editor data_comment_input {
+ label {Comment:}
+ tooltip {Declaration comment in Doxygen format} xywh {10 156 320 65} box DOWN_BOX labelfont 1 labelsize 11 align 5 textfont 4 textsize 11 resizable
+ code0 {data_comment_input->buffer(new Fl_Text_Buffer());}
+ code1 {data_comment_input->add_key_binding(FL_Tab, 0, use_tab_navigation);}
+ }
+ Fl_Group {} {open
+ xywh {10 231 320 20}
+ } {
+ Fl_Return_Button data_panel_ok {
+ label OK
+ xywh {200 231 60 20} labelsize 11 hotspot
+ }
+ Fl_Button data_panel_cancel {
+ label Cancel
+ xywh {270 231 60 20} shortcut 0xff1b labelsize 11
+ }
+ Fl_Box {} {
+ xywh {10 231 185 20} resizable
+ }
+ }
+ }
+}
+
+Function {make_class_panel()} {open
+} {
+ Fl_Window class_panel {
+ label {Class Properties}
+ xywh {795 337 342 196} type Double labelsize 11 hide resizable modal size_range {343 188 0 0}
+ } {
+ Fl_Group {} {open
+ xywh {10 10 280 20} hide
+ } {
+ Fl_Light_Button c_public_button {
+ label public
+ tooltip {Make the class publicly accessible.} xywh {10 10 60 20} labelsize 11 when 0 hide
+ }
+ Fl_Box {} {
+ xywh {80 10 210 20} resizable
+ }
+ }
+ Fl_Input c_name_input {
+ label {Name:}
+ tooltip {Name of class.} xywh {10 20 320 20} labelfont 1 labelsize 11 align 5 when 0 textfont 4 textsize 11
+ }
+ Fl_Input c_subclass_input {
+ label {Subclass of (text between : and \{)}
+ tooltip {Name of subclass.} xywh {10 55 320 20} labelfont 1 labelsize 11 align 5 when 0 textfont 4 textsize 11
+ }
+ Fl_Text_Editor c_comment_input {
+ label {Comment:}
+ tooltip {Class comment in Doxygen format} xywh {10 90 320 65} box DOWN_BOX labelfont 1 labelsize 11 align 5 textfont 4 textsize 11 resizable
+ code0 {c_comment_input->buffer(new Fl_Text_Buffer());}
+ code1 {c_comment_input->add_key_binding(FL_Tab, 0, use_tab_navigation);}
+ }
+ Fl_Group {} {open
+ xywh {10 165 320 20}
+ } {
+ Fl_Return_Button c_panel_ok {
+ label OK
+ xywh {200 165 60 20} labelsize 11 hotspot
+ }
+ Fl_Button c_panel_cancel {
+ label Cancel
+ xywh {270 165 60 20} shortcut 0xff1b labelsize 11
+ }
+ Fl_Box {} {
+ xywh {10 165 185 20} resizable
+ }
+ }
+ }
+}
+
+Function {make_comment_panel()} {open
+} {
+ Fl_Window comment_panel {
+ label {Comment Properties}
+ xywh {519 374 550 280} type Double labelsize 11 hide resizable
+ code0 {o->size_range(320, 180);} modal
+ } {
+ Fl_Text_Editor comment_input {
+ xywh {110 10 430 230} box DOWN_BOX labelsize 11 textfont 4 textsize 11 textcolor 58 resizable
+ code0 {o->when(FL_WHEN_ENTER_KEY_CHANGED|FL_WHEN_RELEASE);}
+ code1 {o->buffer(new Fl_Text_Buffer());}
+ }
+ Fl_Group {} {open
+ xywh {110 250 430 20} labelsize 11
+ } {
+ Fl_Return_Button comment_panel_ok {
+ label OK
+ xywh {370 250 80 20} labelsize 11 hotspot
+ }
+ Fl_Button comment_panel_cancel {
+ label Cancel
+ xywh {460 250 80 20} shortcut 0xff1b labelsize 11
+ }
+ Fl_Box {} {
+ xywh {110 250 250 20} labelsize 11 resizable
+ }
+ }
+ Fl_Group {} {open
+ xywh {10 10 90 243} labelsize 11
+ } {
+ Fl_Light_Button comment_in_source {
+ label {In Source}
+ tooltip {Put the comment into the source (.cxx) file.} xywh {10 10 90 20} labelsize 11 when 0
+ }
+ Fl_Light_Button comment_in_header {
+ label {In Header}
+ tooltip {Put the comment into the header (.h) file.} xywh {10 40 90 20} labelsize 11 when 0
+ }
+ Fl_Menu_Button comment_predefined {
+ label Predefined open
+ xywh {10 70 90 20} labelsize 11 textsize 11
+ } {}
+ Fl_Button comment_load {
+ label {Import...}
+ xywh {10 100 90 20} labelsize 11
+ }
+ Fl_Box {} {
+ xywh {10 132 90 121} labelsize 11 resizable
+ }
+ }
+ }
+}
+
+Function {type_make_cb(Fl_Widget*,void*d)} {open return_type void
+} {
+ code {const char *type_name = (const char*)d;
+if (Fl_Type::current && Fl_Type::current->can_have_children())
+ add_new_widget_from_user(type_name, Strategy::AS_LAST_CHILD);
+else
+ add_new_widget_from_user(type_name, Strategy::AFTER_CURRENT);} {}
+}
+
+Function {make_widgetbin()} {open
+} {
+ Fl_Window widgetbin_panel {
+ label {Widget Bin}
+ callback {if (Fl::event()==FL_SHORTCUT && Fl::event_key()==FL_Escape)
+ exit_cb((Fl_Widget*)o, v);
+else
+ toggle_widgetbin_cb((Fl_Widget*)o, v);} open
+ xywh {395 227 600 102} type Single align 80 non_modal visible
+ } {
+ Fl_Group {} {
+ label Code open
+ xywh {3 19 79 79} labelsize 12
+ } {
+ Fl_Button {} {
+ user_data {"Function"}
+ callback type_make_cb
+ tooltip Function xywh {5 21 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Function]);}
+ }
+ Fl_Button {} {
+ user_data {"Class"}
+ callback type_make_cb
+ tooltip Class xywh {30 21 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Class]);}
+ }
+ Fl_Button {} {
+ user_data {"comment"}
+ callback type_make_cb
+ tooltip Comment xywh {55 21 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Comment]);}
+ }
+ Fl_Button {} {
+ user_data {"Code"}
+ callback type_make_cb
+ tooltip Code xywh {5 46 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Code]);}
+ }
+ Fl_Button {} {
+ user_data {"CodeBlock"}
+ callback type_make_cb
+ tooltip {Code Block} xywh {30 46 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_CodeBlock]);}
+ }
+ Fl_Button {} {
+ user_data {"widget_class"}
+ callback type_make_cb
+ tooltip {Widget Class} xywh {55 46 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Widget_Class]);}
+ class Widget_Bin_Window_Button
+ }
+ Fl_Button {} {
+ user_data {"decl"}
+ callback type_make_cb
+ tooltip Declaration xywh {5 71 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Decl]);}
+ }
+ Fl_Button {} {
+ user_data {"declblock"}
+ callback type_make_cb
+ tooltip {Declaration Block} xywh {30 71 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_DeclBlock]);}
+ }
+ Fl_Button {} {
+ user_data {"data"}
+ callback type_make_cb
+ tooltip {Inline Data} xywh {55 71 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Data]);}
+ }
+ }
+ Fl_Group {} {
+ label Groups open
+ xywh {87 19 79 79} labelsize 12
+ } {
+ Fl_Button {} {
+ user_data {"Fl_Window"}
+ callback type_make_cb
+ tooltip Window xywh {89 21 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Window]);}
+ class Widget_Bin_Window_Button
+ }
+ Fl_Button {} {
+ user_data {"Fl_Group"}
+ callback type_make_cb
+ tooltip Group xywh {114 21 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Group]);}
+ class Widget_Bin_Button
+ }
+ Fl_Button {} {
+ user_data {"Fl_Pack"}
+ callback type_make_cb
+ tooltip Pack xywh {139 21 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Pack]);}
+ class Widget_Bin_Button
+ }
+ Fl_Button {} {
+ user_data {"Fl_Tabs"}
+ callback type_make_cb
+ tooltip Tabs xywh {89 46 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Tabs]);}
+ class Widget_Bin_Button
+ }
+ Fl_Button {} {
+ user_data {"Fl_Scroll"}
+ callback type_make_cb
+ tooltip Scroll xywh {114 46 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Scroll]);}
+ class Widget_Bin_Button
+ }
+ Fl_Button {} {
+ user_data {"Fl_Flex"}
+ callback type_make_cb
+ tooltip Flex xywh {139 46 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Flex]);}
+ class Widget_Bin_Button
+ }
+ Fl_Button {} {
+ user_data {"Fl_Tile"}
+ callback type_make_cb
+ tooltip Tile xywh {89 71 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Tile]);}
+ class Widget_Bin_Button
+ }
+ Fl_Button {} {
+ user_data {"Fl_Wizard"}
+ callback type_make_cb
+ tooltip Wizard xywh {114 71 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Wizard]);}
+ class Widget_Bin_Button
+ }
+ Fl_Button {} {
+ user_data {"Fl_Grid"}
+ callback type_make_cb
+ tooltip Grid xywh {139 71 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Grid]);}
+ class Widget_Bin_Button
+ }
+ }
+ Fl_Group {} {
+ label Buttons open
+ xywh {171 19 54 79} labelsize 12
+ } {
+ Fl_Button {} {
+ user_data {"Fl_Button"}
+ callback type_make_cb
+ tooltip Button xywh {173 21 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Button]);}
+ class Widget_Bin_Button
+ }
+ Fl_Button {} {
+ user_data {"Fl_Return_Button"}
+ callback type_make_cb
+ tooltip {Return Button} xywh {198 21 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Return_Button]);}
+ class Widget_Bin_Button
+ }
+ Fl_Button {} {
+ user_data {"Fl_Light_Button"}
+ callback type_make_cb
+ tooltip {Light Button} xywh {173 46 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Light_Button]);}
+ class Widget_Bin_Button
+ }
+ Fl_Button {} {
+ user_data {"Fl_Repeat_Button"}
+ callback type_make_cb
+ tooltip {Repeat Button} xywh {198 46 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Repeat_Button]);}
+ class Widget_Bin_Button
+ }
+ Fl_Button {} {
+ user_data {"Fl_Check_Button"}
+ callback type_make_cb
+ tooltip {Check Button} xywh {173 71 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Check_Button]);}
+ class Widget_Bin_Button
+ }
+ Fl_Button {} {
+ user_data {"Fl_Round_Button"}
+ callback type_make_cb
+ tooltip {Round Button} xywh {198 71 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Round_Button]);}
+ class Widget_Bin_Button
+ }
+ }
+ Fl_Group {} {
+ label Valuators open
+ xywh {230 19 104 79} labelsize 12
+ } {
+ Fl_Button {} {
+ user_data {"Fl_Slider"}
+ callback type_make_cb
+ tooltip Slider xywh {232 21 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Slider]);}
+ class Widget_Bin_Button
+ }
+ Fl_Button {} {
+ user_data {"Fl_Scrollbar"}
+ callback type_make_cb
+ tooltip {Scroll Bar} xywh {257 21 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Scrollbar]);}
+ class Widget_Bin_Button
+ }
+ Fl_Button {} {
+ user_data {"Fl_Value_Slider"}
+ callback type_make_cb
+ tooltip {Value Slider} xywh {282 21 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Value_Slider]);}
+ class Widget_Bin_Button
+ }
+ Fl_Button {} {
+ user_data {"Fl_Value_Output"}
+ callback type_make_cb
+ tooltip {Value Output} xywh {307 21 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Value_Output]);}
+ class Widget_Bin_Button
+ }
+ Fl_Button {} {
+ user_data {"Fl_Adjuster"}
+ callback type_make_cb
+ tooltip Adjuster xywh {232 46 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Adjuster]);}
+ class Widget_Bin_Button
+ }
+ Fl_Button {} {
+ user_data {"Fl_Counter"}
+ callback type_make_cb
+ tooltip Counter xywh {257 46 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Counter]);}
+ class Widget_Bin_Button
+ }
+ Fl_Button {} {
+ user_data {"Fl_Dial"}
+ callback type_make_cb
+ tooltip Dial xywh {282 46 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Dial]);}
+ class Widget_Bin_Button
+ }
+ Fl_Button {} {
+ user_data {"Fl_Roller"}
+ callback type_make_cb
+ tooltip Roller xywh {232 71 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Roller]);}
+ class Widget_Bin_Button
+ }
+ Fl_Button {} {
+ user_data {"Fl_Spinner"}
+ callback type_make_cb
+ tooltip Spinner xywh {257 71 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Spinner]);}
+ class Widget_Bin_Button
+ }
+ Fl_Button {} {
+ user_data {"Fl_Value_Input"}
+ callback type_make_cb
+ tooltip {Value Input} xywh {282 71 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Value_Input]);}
+ class Widget_Bin_Button
+ }
+ }
+ Fl_Group {} {
+ label Text open
+ xywh {339 19 54 79} labelsize 12
+ } {
+ Fl_Button {} {
+ user_data {"Fl_Input"}
+ callback type_make_cb
+ tooltip Input xywh {341 21 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Input]);}
+ class Widget_Bin_Button
+ }
+ Fl_Button {} {
+ user_data {"Fl_Output"}
+ callback type_make_cb
+ tooltip Output xywh {366 21 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Output]);}
+ class Widget_Bin_Button
+ }
+ Fl_Button {} {
+ user_data {"Fl_Text_Editor"}
+ callback type_make_cb
+ tooltip {Text Edit} xywh {341 46 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Text_Editor]);}
+ class Widget_Bin_Button
+ }
+ Fl_Button {} {
+ user_data {"Fl_Text_Display"}
+ callback type_make_cb
+ tooltip {Text Display} xywh {366 46 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Text_Display]);}
+ class Widget_Bin_Button
+ }
+ Fl_Button {} {
+ user_data {"Fl_File_Input"}
+ callback type_make_cb
+ tooltip {File Input} xywh {341 71 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_File_Input]);}
+ class Widget_Bin_Button
+ }
+ Fl_Button {} {
+ user_data {"Fl_Terminal"}
+ callback type_make_cb
+ tooltip Terminal xywh {366 71 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Terminal]);}
+ class Widget_Bin_Button
+ }
+ }
+ Fl_Group {} {
+ label Menus open
+ xywh {398 19 79 79} labelsize 12
+ } {
+ Fl_Button {} {
+ user_data {"Fl_Input_Choice"}
+ callback type_make_cb
+ tooltip {Input Choice} xywh {400 22 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Input_Choice]);}
+ class Widget_Bin_Button
+ }
+ Fl_Button {} {
+ user_data {"menuitem"}
+ callback type_make_cb
+ tooltip {Menu Item} xywh {425 21 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Menu_Item]);}
+ class Widget_Bin_Button
+ }
+ Fl_Button {} {
+ user_data {"Fl_Menu_Bar"}
+ callback type_make_cb
+ tooltip {Menu Bar} xywh {450 21 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Menu_Bar]);}
+ class Widget_Bin_Button
+ }
+ Fl_Button {} {
+ user_data {"Fl_Menu_Button"}
+ callback type_make_cb
+ tooltip {Menu Button} xywh {400 46 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Menu_Button]);}
+ class Widget_Bin_Button
+ }
+ Fl_Button {} {
+ user_data {"checkmenuitem"}
+ callback type_make_cb
+ tooltip {Checkbox Menu Item} xywh {425 46 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Checkbox_Menu_Item]);}
+ class Widget_Bin_Button
+ }
+ Fl_Button {} {
+ user_data {"submenu"}
+ callback type_make_cb
+ tooltip {Sub Menu} xywh {450 46 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Submenu]);}
+ class Widget_Bin_Button
+ }
+ Fl_Button {} {
+ user_data {"Fl_Choice"}
+ callback type_make_cb
+ tooltip Choice xywh {400 71 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Choice]);}
+ class Widget_Bin_Button
+ }
+ Fl_Button {} {
+ user_data {"radiomenuitem"}
+ callback type_make_cb
+ tooltip {Radio Menu Item} xywh {425 71 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Radio_Menu_Item]);}
+ class Widget_Bin_Button
+ }
+ }
+ Fl_Group {} {
+ label Browsers open
+ xywh {482 19 54 79} labelsize 12
+ } {
+ Fl_Button {} {
+ user_data {"Fl_Browser"}
+ callback type_make_cb
+ tooltip Browser xywh {484 21 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Browser]);}
+ class Widget_Bin_Button
+ }
+ Fl_Button {} {
+ user_data {"Fl_Tree"}
+ callback type_make_cb
+ tooltip Tree xywh {509 21 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Tree]);}
+ class Widget_Bin_Button
+ }
+ Fl_Button {} {
+ user_data {"Fl_Check_Browser"}
+ callback type_make_cb
+ tooltip {Check Browser} xywh {484 46 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Check_Browser]);}
+ class Widget_Bin_Button
+ }
+ Fl_Button {} {
+ user_data {"Fl_Help_View"}
+ callback type_make_cb
+ tooltip {Help Browser} xywh {509 46 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Help_View]);}
+ class Widget_Bin_Button
+ }
+ Fl_Button {} {
+ user_data {"Fl_File_Browser"}
+ callback type_make_cb
+ tooltip {File Browser} xywh {484 71 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_File_Browser]);}
+ class Widget_Bin_Button
+ }
+ Fl_Button {} {
+ user_data {"Fl_Table"}
+ callback type_make_cb
+ tooltip Table xywh {509 71 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Table]);}
+ class Widget_Bin_Button
+ }
+ }
+ Fl_Group {} {
+ label Misc open
+ xywh {540 19 55 79} labelsize 12
+ } {
+ Fl_Button {} {
+ user_data {"Fl_Box"}
+ callback type_make_cb
+ tooltip Box xywh {542 21 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Box]);}
+ class Widget_Bin_Button
+ }
+ Fl_Button {} {
+ user_data {"Fl_Clock"}
+ callback type_make_cb
+ tooltip Clock xywh {567 21 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Clock]);}
+ class Widget_Bin_Button
+ }
+ Fl_Button {} {
+ user_data {"Fl_Progress"}
+ callback type_make_cb
+ tooltip Progress xywh {542 46 24 24} box THIN_UP_BOX
+ code0 {o->image(pixmap[ID_Progress]);}
+ class Widget_Bin_Button
+ }
+ }
+ }
+}
+
+comment {
+//} {in_source in_header
+}
diff --git a/fluid/panels/function_panel.h b/fluid/panels/function_panel.h
new file mode 100644
index 000000000..9dffa5c04
--- /dev/null
+++ b/fluid/panels/function_panel.h
@@ -0,0 +1,116 @@
+//
+// Code dialogs for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2023 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
+
+#ifndef function_panel_h
+#define function_panel_h
+#include <FL/Fl.H>
+#include <FL/Fl_Double_Window.H>
+extern Fl_Double_Window *function_panel;
+#include <FL/Fl_Group.H>
+#include <FL/Fl_Choice.H>
+extern Fl_Choice *f_public_member_choice;
+extern Fl_Choice *f_public_choice;
+#include <FL/Fl_Light_Button.H>
+extern Fl_Light_Button *f_c_button;
+#include <FL/Fl_Box.H>
+#include <FL/Fl_Input.H>
+extern Fl_Input *f_name_input;
+extern Fl_Input *f_return_type_input;
+#include <FL/Fl_Text_Editor.H>
+extern Fl_Text_Editor *f_comment_input;
+#include <FL/Fl_Return_Button.H>
+extern Fl_Return_Button *f_panel_ok;
+#include <FL/Fl_Button.H>
+extern Fl_Button *f_panel_cancel;
+Fl_Double_Window* make_function_panel();
+extern Fl_Menu_Item menu_f_public_member_choice[];
+extern Fl_Menu_Item menu_f_public_choice[];
+extern Fl_Double_Window *code_panel;
+#include "widgets/CodeEditor.h"
+extern CodeEditor *code_input;
+extern Fl_Return_Button *code_panel_ok;
+extern Fl_Button *code_panel_cancel;
+Fl_Double_Window* make_code_panel();
+extern Fl_Double_Window *codeblock_panel;
+extern Fl_Input *code_before_input;
+extern Fl_Input *code_after_input;
+extern Fl_Return_Button *codeblock_panel_ok;
+extern Fl_Button *codeblock_panel_cancel;
+Fl_Double_Window* make_codeblock_panel();
+extern Fl_Double_Window *declblock_panel;
+extern Fl_Input *declblock_before_input;
+extern Fl_Input *declblock_after_input;
+#include <FL/Fl_Check_Button.H>
+extern Fl_Check_Button *declblock_code_source;
+extern Fl_Check_Button *declblock_static_source;
+extern Fl_Check_Button *declblock_code_header;
+extern Fl_Check_Button *declblock_static_header;
+extern Fl_Text_Editor *declblock_comment_input;
+extern Fl_Return_Button *declblock_panel_ok;
+extern Fl_Button *declblock_panel_cancel;
+Fl_Double_Window* make_declblock_panel();
+extern Fl_Double_Window *decl_panel;
+extern Fl_Choice *decl_choice;
+extern Fl_Choice *decl_class_choice;
+#include <FL/Fl_Tile.H>
+extern CodeEditor *decl_input;
+extern Fl_Text_Editor *decl_comment_input;
+extern Fl_Return_Button *decl_panel_ok;
+extern Fl_Button *decl_panel_cancel;
+Fl_Double_Window* make_decl_panel();
+extern Fl_Menu_Item menu_decl_choice[];
+extern Fl_Menu_Item menu_decl_class_choice[];
+extern Fl_Double_Window *data_panel;
+extern Fl_Choice *data_choice;
+extern Fl_Choice *data_class_choice;
+extern Fl_Choice *data_mode;
+extern Fl_Input *data_input;
+extern Fl_Input *data_filename;
+extern Fl_Button *data_filebrowser;
+extern Fl_Text_Editor *data_comment_input;
+extern Fl_Return_Button *data_panel_ok;
+extern Fl_Button *data_panel_cancel;
+Fl_Double_Window* make_data_panel();
+extern Fl_Menu_Item menu_data_choice[];
+extern Fl_Menu_Item menu_data_class_choice[];
+extern Fl_Menu_Item menu_data_mode[];
+extern Fl_Double_Window *class_panel;
+extern Fl_Light_Button *c_public_button;
+extern Fl_Input *c_name_input;
+extern Fl_Input *c_subclass_input;
+extern Fl_Text_Editor *c_comment_input;
+extern Fl_Return_Button *c_panel_ok;
+extern Fl_Button *c_panel_cancel;
+Fl_Double_Window* make_class_panel();
+extern Fl_Double_Window *comment_panel;
+extern Fl_Text_Editor *comment_input;
+extern Fl_Return_Button *comment_panel_ok;
+extern Fl_Button *comment_panel_cancel;
+extern Fl_Light_Button *comment_in_source;
+extern Fl_Light_Button *comment_in_header;
+#include <FL/Fl_Menu_Button.H>
+extern Fl_Menu_Button *comment_predefined;
+extern Fl_Button *comment_load;
+Fl_Double_Window* make_comment_panel();
+void type_make_cb(Fl_Widget*,void*d);
+#include <FL/Fl_Window.H>
+extern Fl_Window *widgetbin_panel;
+Fl_Window* make_widgetbin();
+#endif
+
+//
diff --git a/fluid/panels/print_panel.cxx b/fluid/panels/print_panel.cxx
new file mode 100644
index 000000000..f585efee5
--- /dev/null
+++ b/fluid/panels/print_panel.cxx
@@ -0,0 +1,586 @@
+//
+// FLUID print panel for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2020 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 "print_panel.h"
+#include "app/fluid.h"
+#include <FL/fl_string_functions.h>
+#include "../src/flstring.h"
+#include <stdlib.h>
+#include <stdio.h>
+
+Fl_Double_Window *print_panel=(Fl_Double_Window *)0;
+
+Fl_Group *print_panel_controls=(Fl_Group *)0;
+
+Fl_Choice *print_choice=(Fl_Choice *)0;
+
+static void cb_print_choice(Fl_Choice*, void*) {
+ print_update_status();
+}
+
+Fl_Button *print_properties=(Fl_Button *)0;
+
+static void cb_print_properties(Fl_Button*, void*) {
+ print_properties_panel->show();
+}
+
+Fl_Box *print_status=(Fl_Box *)0;
+
+Fl_Round_Button *print_all=(Fl_Round_Button *)0;
+
+static void cb_print_all(Fl_Round_Button*, void*) {
+ print_from->deactivate();
+ print_to->deactivate();
+}
+
+Fl_Round_Button *print_pages=(Fl_Round_Button *)0;
+
+static void cb_print_pages(Fl_Round_Button*, void*) {
+ print_from->activate();
+ print_to->activate();
+}
+
+Fl_Round_Button *print_selection=(Fl_Round_Button *)0;
+
+static void cb_print_selection(Fl_Round_Button*, void*) {
+ print_from->deactivate();
+ print_to->deactivate();
+}
+
+Fl_Int_Input *print_from=(Fl_Int_Input *)0;
+
+Fl_Int_Input *print_to=(Fl_Int_Input *)0;
+
+Fl_Spinner *print_copies=(Fl_Spinner *)0;
+
+static void cb_print_copies(Fl_Spinner*, void*) {
+ if (print_copies->value() == 1) {
+ print_collate_button->deactivate();
+ print_collate_group[0]->deactivate();
+ print_collate_group[1]->deactivate();
+ } else {
+ print_collate_button->activate();
+ print_collate_group[0]->activate();
+ print_collate_group[1]->activate();
+ }
+}
+
+Fl_Check_Button *print_collate_button=(Fl_Check_Button *)0;
+
+static void cb_print_collate_button(Fl_Check_Button*, void*) {
+ int i = print_collate_button->value() != 0;
+ print_collate_group[i]->show();
+ print_collate_group[1 - i]->hide();
+}
+
+Fl_Group *print_collate_group[2]={(Fl_Group *)0};
+
+static void cb_Cancel(Fl_Button*, void*) {
+ print_panel->hide();
+}
+
+Fl_Progress *print_progress=(Fl_Progress *)0;
+
+Fl_Double_Window *print_properties_panel=(Fl_Double_Window *)0;
+
+static void cb_print_properties_panel(Fl_Double_Window*, void*) {
+ print_properties_panel->hide();
+ print_update_status();
+}
+
+Fl_Choice *print_page_size=(Fl_Choice *)0;
+
+Fl_Menu_Item menu_print_page_size[] = {
+ {"Letter", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 14, 0},
+ {"A4", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 14, 0},
+ {0,0,0,0,0,0,0,0,0}
+};
+
+#include <FL/Fl_Pixmap.H>
+
+static const char *idata_print_color[] = {
+"24 24 17 1",
+" \tc None",
+".\tc #FFFF00",
+"+\tc #C8FF00",
+"@\tc #00FF00",
+"#\tc #FFC800",
+"$\tc #FF0000",
+"%\tc #00FFFF",
+"&\tc #000000",
+"*\tc #FF00FF",
+"=\tc #00FFC8",
+"-\tc #FF00C8",
+";\tc #00C800",
+">\tc #C80000",
+",\tc #0000C8",
+"\'\tc #0000FF",
+")\tc #00C8FF",
+"!\tc #C800FF",
+" ...... ",
+" .......... ",
+" ............ ",
+" .............. ",
+" .............. ",
+" ................ ",
+" ................ ",
+" ................ ",
+" +@@@@@@+#$$$$$$# ",
+" %@@@@@@@&&$$$$$$$* ",
+" %%@@@@@@&&&&$$$$$$** ",
+" %%%=@@@@&&&&&&$$$$-*** ",
+" %%%%@@@;&&&&&&>$$$**** ",
+"%%%%%%@@&&&&&&&&$$******",
+"%%%%%%%@&&&&&&&&$*******",
+"%%%%%%%%,&&&&&&,********",
+"%%%%%%%%\'\'\'\'\'\'\'\'********",
+"%%%%%%%%\'\'\'\'\'\'\'\'********",
+"%%%%%%%%\'\'\'\'\'\'\'\'********",
+" %%%%%%%)\'\'\'\'\'\'!******* ",
+" %%%%%%%%\'\'\'\'\'\'******** ",
+" %%%%%%%%\'\'\'\'******** ",
+" %%%%%%%%\'\'******** ",
+" %%%%%% ****** "
+};
+static Fl_Image *image_print_color() {
+ static Fl_Image *image = NULL;
+ if (!image)
+ image = new Fl_Pixmap(idata_print_color);
+ return image;
+}
+
+static const char *idata_print_gray[] = {
+"24 24 17 1",
+" \tc None",
+".\tc #E3E3E3",
+"+\tc #D2D2D2",
+"@\tc #969696",
+"#\tc #C2C2C2",
+"$\tc #4C4C4C",
+"%\tc #B2B2B2",
+"&\tc #000000",
+"*\tc #696969",
+"=\tc #ACACAC",
+"-\tc #626262",
+";\tc #767676",
+">\tc #3C3C3C",
+",\tc #161616",
+"\'\tc #1C1C1C",
+")\tc #929292",
+"!\tc #585858",
+" ...... ",
+" .......... ",
+" ............ ",
+" .............. ",
+" .............. ",
+" ................ ",
+" ................ ",
+" ................ ",
+" +@@@@@@+#$$$$$$# ",
+" %@@@@@@@&&$$$$$$$* ",
+" %%@@@@@@&&&&$$$$$$** ",
+" %%%=@@@@&&&&&&$$$$-*** ",
+" %%%%@@@;&&&&&&>$$$**** ",
+"%%%%%%@@&&&&&&&&$$******",
+"%%%%%%%@&&&&&&&&$*******",
+"%%%%%%%%,&&&&&&,********",
+"%%%%%%%%\'\'\'\'\'\'\'\'********",
+"%%%%%%%%\'\'\'\'\'\'\'\'********",
+"%%%%%%%%\'\'\'\'\'\'\'\'********",
+" %%%%%%%)\'\'\'\'\'\'!******* ",
+" %%%%%%%%\'\'\'\'\'\'******** ",
+" %%%%%%%%\'\'\'\'******** ",
+" %%%%%%%%\'\'******** ",
+" %%%%%% ****** "
+};
+static Fl_Image *image_print_gray() {
+ static Fl_Image *image = NULL;
+ if (!image)
+ image = new Fl_Pixmap(idata_print_gray);
+ return image;
+}
+
+Fl_Button *print_output_mode[4]={(Fl_Button *)0};
+
+static void cb_Save(Fl_Return_Button*, void*) {
+ print_properties_panel->hide();
+
+ char name[1024];
+ int val;
+ const char *printer = (const char *)print_choice->menu()[print_choice->value()].user_data();
+
+ snprintf(name, sizeof(name), "%s/page_size", printer);
+ fluid_prefs.set(name, print_page_size->value());
+
+ snprintf(name, sizeof(name), "%s/output_mode", printer);
+ for (val = 0; val < 4; val ++) {
+ if (print_output_mode[val]->value()) break;
+ }
+ fluid_prefs.set(name, val);
+}
+
+static void cb_Cancel1(Fl_Button*, void*) {
+ print_properties_panel->hide();
+ print_update_status();
+}
+
+static void cb_Use(Fl_Button*, void*) {
+ print_properties_panel->hide();
+}
+
+Fl_Double_Window* make_print_panel() {
+ { print_panel = new Fl_Double_Window(465, 235, "Print");
+ { print_panel_controls = new Fl_Group(10, 10, 447, 216);
+ { print_choice = new Fl_Choice(113, 10, 181, 25, "Printer:");
+ print_choice->down_box(FL_BORDER_BOX);
+ print_choice->labelfont(1);
+ print_choice->callback((Fl_Callback*)cb_print_choice);
+ print_choice->when(FL_WHEN_CHANGED);
+ } // Fl_Choice* print_choice
+ { print_properties = new Fl_Button(294, 10, 105, 25, "Properties...");
+ print_properties->callback((Fl_Callback*)cb_print_properties);
+ } // Fl_Button* print_properties
+ { print_status = new Fl_Box(111, 41, 288, 17, "printer/job status");
+ print_status->align(Fl_Align(68|FL_ALIGN_INSIDE));
+ } // Fl_Box* print_status
+ { Fl_Group* o = new Fl_Group(10, 86, 227, 105, "Print Range");
+ o->box(FL_THIN_DOWN_BOX);
+ o->labelfont(1);
+ o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ { print_all = new Fl_Round_Button(20, 96, 38, 25, "All");
+ print_all->type(102);
+ print_all->down_box(FL_ROUND_DOWN_BOX);
+ print_all->value(1);
+ print_all->callback((Fl_Callback*)cb_print_all);
+ } // Fl_Round_Button* print_all
+ { print_pages = new Fl_Round_Button(20, 126, 64, 25, "Pages");
+ print_pages->type(102);
+ print_pages->down_box(FL_ROUND_DOWN_BOX);
+ print_pages->callback((Fl_Callback*)cb_print_pages);
+ } // Fl_Round_Button* print_pages
+ { print_selection = new Fl_Round_Button(20, 156, 82, 25, "Selection");
+ print_selection->type(102);
+ print_selection->down_box(FL_ROUND_DOWN_BOX);
+ print_selection->callback((Fl_Callback*)cb_print_selection);
+ } // Fl_Round_Button* print_selection
+ { print_from = new Fl_Int_Input(136, 126, 28, 25, "From:");
+ print_from->type(2);
+ print_from->textfont(4);
+ print_from->deactivate();
+ } // Fl_Int_Input* print_from
+ { print_to = new Fl_Int_Input(199, 126, 28, 25, "To:");
+ print_to->type(2);
+ print_to->textfont(4);
+ print_to->deactivate();
+ } // Fl_Int_Input* print_to
+ o->end();
+ } // Fl_Group* o
+ { Fl_Group* o = new Fl_Group(247, 86, 210, 105, "Copies");
+ o->box(FL_THIN_DOWN_BOX);
+ o->labelfont(1);
+ o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ { print_copies = new Fl_Spinner(321, 96, 45, 25, "# Copies:");
+ print_copies->callback((Fl_Callback*)cb_print_copies);
+ print_copies->when(FL_WHEN_CHANGED);
+ } // Fl_Spinner* print_copies
+ { print_collate_button = new Fl_Check_Button(376, 96, 64, 25, "Collate");
+ print_collate_button->down_box(FL_DOWN_BOX);
+ print_collate_button->callback((Fl_Callback*)cb_print_collate_button);
+ print_collate_button->when(FL_WHEN_CHANGED);
+ print_collate_button->deactivate();
+ } // Fl_Check_Button* print_collate_button
+ { print_collate_group[0] = new Fl_Group(257, 131, 191, 50);
+ print_collate_group[0]->deactivate();
+ { Fl_Box* o = new Fl_Box(287, 141, 30, 40, "1");
+ o->box(FL_BORDER_BOX);
+ o->color(FL_BACKGROUND2_COLOR);
+ o->labelsize(11);
+ o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
+ o->deactivate();
+ } // Fl_Box* o
+ { Fl_Box* o = new Fl_Box(272, 136, 30, 40, "1");
+ o->box(FL_BORDER_BOX);
+ o->color(FL_BACKGROUND2_COLOR);
+ o->labelsize(11);
+ o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
+ o->deactivate();
+ } // Fl_Box* o
+ { Fl_Box* o = new Fl_Box(257, 131, 30, 40, "1");
+ o->box(FL_BORDER_BOX);
+ o->color(FL_BACKGROUND2_COLOR);
+ o->labelsize(11);
+ o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
+ o->deactivate();
+ } // Fl_Box* o
+ { Fl_Box* o = new Fl_Box(352, 141, 30, 40, "2");
+ o->box(FL_BORDER_BOX);
+ o->color(FL_BACKGROUND2_COLOR);
+ o->labelsize(11);
+ o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
+ o->deactivate();
+ } // Fl_Box* o
+ { Fl_Box* o = new Fl_Box(337, 136, 30, 40, "2");
+ o->box(FL_BORDER_BOX);
+ o->color(FL_BACKGROUND2_COLOR);
+ o->labelsize(11);
+ o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
+ o->deactivate();
+ } // Fl_Box* o
+ { Fl_Box* o = new Fl_Box(322, 131, 30, 40, "2");
+ o->box(FL_BORDER_BOX);
+ o->color(FL_BACKGROUND2_COLOR);
+ o->labelsize(11);
+ o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
+ o->deactivate();
+ } // Fl_Box* o
+ { Fl_Box* o = new Fl_Box(417, 141, 30, 40, "3");
+ o->box(FL_BORDER_BOX);
+ o->color(FL_BACKGROUND2_COLOR);
+ o->labelsize(11);
+ o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
+ o->deactivate();
+ } // Fl_Box* o
+ { Fl_Box* o = new Fl_Box(402, 136, 30, 40, "3");
+ o->box(FL_BORDER_BOX);
+ o->color(FL_BACKGROUND2_COLOR);
+ o->labelsize(11);
+ o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
+ o->deactivate();
+ } // Fl_Box* o
+ { Fl_Box* o = new Fl_Box(387, 131, 30, 40, "3");
+ o->box(FL_BORDER_BOX);
+ o->color(FL_BACKGROUND2_COLOR);
+ o->labelsize(11);
+ o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
+ o->deactivate();
+ } // Fl_Box* o
+ print_collate_group[0]->end();
+ } // Fl_Group* print_collate_group[0]
+ { print_collate_group[1] = new Fl_Group(257, 131, 191, 50);
+ print_collate_group[1]->hide();
+ print_collate_group[1]->deactivate();
+ { Fl_Box* o = new Fl_Box(287, 141, 30, 40, "3");
+ o->box(FL_BORDER_BOX);
+ o->color(FL_BACKGROUND2_COLOR);
+ o->labelsize(11);
+ o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
+ } // Fl_Box* o
+ { Fl_Box* o = new Fl_Box(272, 136, 30, 40, "2");
+ o->box(FL_BORDER_BOX);
+ o->color(FL_BACKGROUND2_COLOR);
+ o->labelsize(11);
+ o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
+ } // Fl_Box* o
+ { Fl_Box* o = new Fl_Box(257, 131, 30, 40, "1");
+ o->box(FL_BORDER_BOX);
+ o->color(FL_BACKGROUND2_COLOR);
+ o->labelsize(11);
+ o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
+ } // Fl_Box* o
+ { Fl_Box* o = new Fl_Box(352, 141, 30, 40, "3");
+ o->box(FL_BORDER_BOX);
+ o->color(FL_BACKGROUND2_COLOR);
+ o->labelsize(11);
+ o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
+ } // Fl_Box* o
+ { Fl_Box* o = new Fl_Box(337, 136, 30, 40, "2");
+ o->box(FL_BORDER_BOX);
+ o->color(FL_BACKGROUND2_COLOR);
+ o->labelsize(11);
+ o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
+ } // Fl_Box* o
+ { Fl_Box* o = new Fl_Box(322, 131, 30, 40, "1");
+ o->box(FL_BORDER_BOX);
+ o->color(FL_BACKGROUND2_COLOR);
+ o->labelsize(11);
+ o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
+ } // Fl_Box* o
+ { Fl_Box* o = new Fl_Box(417, 141, 30, 40, "3");
+ o->box(FL_BORDER_BOX);
+ o->color(FL_BACKGROUND2_COLOR);
+ o->labelsize(11);
+ o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
+ } // Fl_Box* o
+ { Fl_Box* o = new Fl_Box(402, 136, 30, 40, "2");
+ o->box(FL_BORDER_BOX);
+ o->color(FL_BACKGROUND2_COLOR);
+ o->labelsize(11);
+ o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
+ } // Fl_Box* o
+ { Fl_Box* o = new Fl_Box(387, 131, 30, 40, "1");
+ o->box(FL_BORDER_BOX);
+ o->color(FL_BACKGROUND2_COLOR);
+ o->labelsize(11);
+ o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
+ } // Fl_Box* o
+ print_collate_group[1]->end();
+ } // Fl_Group* print_collate_group[1]
+ o->end();
+ } // Fl_Group* o
+ { Fl_Return_Button* o = new Fl_Return_Button(309, 201, 70, 25, "Print");
+ o->callback((Fl_Callback*)print_cb);
+ } // Fl_Return_Button* o
+ { Fl_Button* o = new Fl_Button(389, 201, 68, 25, "Cancel");
+ o->callback((Fl_Callback*)cb_Cancel);
+ } // Fl_Button* o
+ print_panel_controls->end();
+ } // Fl_Group* print_panel_controls
+ { print_progress = new Fl_Progress(10, 203, 289, 21);
+ print_progress->selection_color((Fl_Color)4);
+ print_progress->hide();
+ } // Fl_Progress* print_progress
+ print_panel->set_modal();
+ print_panel->end();
+ } // Fl_Double_Window* print_panel
+ { print_properties_panel = new Fl_Double_Window(290, 130, "Printer Properties");
+ print_properties_panel->callback((Fl_Callback*)cb_print_properties_panel);
+ { print_page_size = new Fl_Choice(110, 10, 80, 25, "Page Size:");
+ print_page_size->down_box(FL_BORDER_BOX);
+ print_page_size->labelfont(1);
+ print_page_size->labelsize(12);
+ print_page_size->menu(menu_print_page_size);
+ } // Fl_Choice* print_page_size
+ { Fl_Group* o = new Fl_Group(110, 45, 170, 40, "Output Mode:");
+ o->labelfont(1);
+ o->labelsize(12);
+ o->align(Fl_Align(FL_ALIGN_LEFT));
+ { print_output_mode[0] = new Fl_Button(110, 45, 30, 40);
+ print_output_mode[0]->type(102);
+ print_output_mode[0]->box(FL_BORDER_BOX);
+ print_output_mode[0]->down_box(FL_BORDER_BOX);
+ print_output_mode[0]->value(1);
+ print_output_mode[0]->color(FL_BACKGROUND2_COLOR);
+ print_output_mode[0]->selection_color(FL_FOREGROUND_COLOR);
+ print_output_mode[0]->image( image_print_color() );
+ } // Fl_Button* print_output_mode[0]
+ { print_output_mode[1] = new Fl_Button(150, 50, 40, 30);
+ print_output_mode[1]->type(102);
+ print_output_mode[1]->box(FL_BORDER_BOX);
+ print_output_mode[1]->down_box(FL_BORDER_BOX);
+ print_output_mode[1]->color(FL_BACKGROUND2_COLOR);
+ print_output_mode[1]->selection_color(FL_FOREGROUND_COLOR);
+ print_output_mode[1]->image( image_print_color() );
+ } // Fl_Button* print_output_mode[1]
+ { print_output_mode[2] = new Fl_Button(200, 45, 30, 40);
+ print_output_mode[2]->type(102);
+ print_output_mode[2]->box(FL_BORDER_BOX);
+ print_output_mode[2]->down_box(FL_BORDER_BOX);
+ print_output_mode[2]->color(FL_BACKGROUND2_COLOR);
+ print_output_mode[2]->selection_color(FL_FOREGROUND_COLOR);
+ print_output_mode[2]->image( image_print_gray() );
+ } // Fl_Button* print_output_mode[2]
+ { print_output_mode[3] = new Fl_Button(240, 50, 40, 30);
+ print_output_mode[3]->type(102);
+ print_output_mode[3]->box(FL_BORDER_BOX);
+ print_output_mode[3]->down_box(FL_BORDER_BOX);
+ print_output_mode[3]->color(FL_BACKGROUND2_COLOR);
+ print_output_mode[3]->selection_color(FL_FOREGROUND_COLOR);
+ print_output_mode[3]->image( image_print_gray() );
+ } // Fl_Button* print_output_mode[3]
+ o->end();
+ } // Fl_Group* o
+ { Fl_Return_Button* o = new Fl_Return_Button(123, 95, 79, 25, "Save");
+ o->callback((Fl_Callback*)cb_Save);
+ } // Fl_Return_Button* o
+ { Fl_Button* o = new Fl_Button(212, 95, 68, 25, "Cancel");
+ o->callback((Fl_Callback*)cb_Cancel1);
+ } // Fl_Button* o
+ { Fl_Button* o = new Fl_Button(60, 95, 53, 25, "Use");
+ o->callback((Fl_Callback*)cb_Use);
+ } // Fl_Button* o
+ print_properties_panel->set_modal();
+ print_properties_panel->end();
+ } // Fl_Double_Window* print_properties_panel
+ return print_properties_panel;
+}
+void print_cb(Fl_Return_Button *, void *);
+
+void print_load() {
+ FILE *lpstat;
+ char line[1024], name[1024], *nptr, qname[2048], *qptr, defname[1024];
+ int i;
+
+ if (print_choice->size() > 1) {
+ for (i = 1; print_choice->text(i); i ++) {
+ free(print_choice->menu()[i].user_data());
+ }
+ }
+
+ print_choice->clear();
+ print_choice->add("Print To File", 0, 0, 0, FL_MENU_DIVIDER);
+ print_choice->value(0);
+
+ defname[0] = '\0';
+
+ if ((lpstat = popen("LC_MESSAGES=C LANG=C lpstat -p -d", "r")) != NULL) {
+ while (fgets(line, sizeof(line), lpstat)) {
+ if (!strncmp(line, "printer ", 8) &&
+ sscanf(line + 8, "%s", name) == 1) {
+ for (nptr = name, qptr = qname; *nptr; *qptr++ = *nptr++) {
+ if (*nptr == '/') *qptr++ = '\\';
+ }
+ *qptr = '\0';
+
+ print_choice->add(qname, 0, 0, (void *)fl_strdup(name), 0);
+ } else if (!strncmp(line, "system default destination: ", 28)) {
+ if (sscanf(line + 28, "%s", defname) != 1) defname[0] = '\0';
+ }
+ }
+ pclose(lpstat);
+ }
+
+ if (defname[0]) {
+ for (i = 1; print_choice->text(i); i ++) {
+ if (!strcmp((char *)print_choice->menu()[i].user_data(), defname)) {
+ print_choice->value(i);
+ break;
+ }
+ }
+ } else if (print_choice->size() > 2) print_choice->value(1);
+
+
+ print_update_status();
+}
+
+void print_update_status() {
+ FILE *lpstat;
+ char command[1024];
+ static char status[1024];
+ const char *printer = (const char *)print_choice->menu()[print_choice->value()].user_data();
+
+ if (print_choice->value()) {
+ snprintf(command, sizeof(command), "lpstat -p '%s'", printer);
+ if ((lpstat = popen(command, "r")) != NULL) {
+ if (fgets(status, sizeof(status), lpstat)==0) { /* ignore */ }
+ pclose(lpstat);
+ } else strcpy(status, "printer status unavailable");
+ } else status[0] = '\0';
+
+ print_status->label(status);
+
+ char name[1024];
+ int val;
+
+ snprintf(name, sizeof(name), "%s/page_size", printer);
+ fluid_prefs.get(name, val, 0);
+ print_page_size->value(val);
+
+ snprintf(name, sizeof(name), "%s/output_mode", printer);
+ fluid_prefs.get(name, val, 0);
+ print_output_mode[val]->setonly();
+}
diff --git a/fluid/panels/print_panel.fl b/fluid/panels/print_panel.fl
new file mode 100644
index 000000000..ae1899c3e
--- /dev/null
+++ b/fluid/panels/print_panel.fl
@@ -0,0 +1,358 @@
+# data file for the Fltk User Interface Designer (fluid)
+version 1.0500
+header_name {.h}
+code_name {.cxx}
+comment {//
+// FLUID print panel for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2020 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
+//
+} {in_source in_header
+}
+
+decl {\#include "app/fluid.h"} {private local
+}
+
+decl {\#include <FL/fl_string_functions.h>} {private local
+}
+
+decl {\#include "../src/flstring.h"} {private local
+}
+
+decl {\#include <stdlib.h>} {private local
+}
+
+decl {\#include <stdio.h>} {private local
+}
+
+Function {make_print_panel()} {open
+} {
+ Fl_Window print_panel {
+ label Print selected
+ xywh {465 222 465 235} type Double modal visible
+ } {
+ Fl_Group print_panel_controls {open
+ xywh {10 10 447 216}
+ } {
+ Fl_Choice print_choice {
+ label {Printer:}
+ callback {print_update_status();} open
+ xywh {113 10 181 25} down_box BORDER_BOX labelfont 1 when 1
+ } {}
+ Fl_Button print_properties {
+ label {Properties...}
+ callback {print_properties_panel->show();}
+ xywh {294 10 105 25}
+ }
+ Fl_Box print_status {
+ label {printer/job status}
+ xywh {111 41 288 17} align 84
+ }
+ Fl_Group {} {
+ label {Print Range} open
+ xywh {10 86 227 105} box THIN_DOWN_BOX labelfont 1 align 5
+ } {
+ Fl_Round_Button print_all {
+ label All
+ callback {print_from->deactivate();
+print_to->deactivate();}
+ xywh {20 96 38 25} type Radio down_box ROUND_DOWN_BOX value 1
+ }
+ Fl_Round_Button print_pages {
+ label Pages
+ callback {print_from->activate();
+print_to->activate();}
+ xywh {20 126 64 25} type Radio down_box ROUND_DOWN_BOX
+ }
+ Fl_Round_Button print_selection {
+ label Selection
+ callback {print_from->deactivate();
+print_to->deactivate();}
+ xywh {20 156 82 25} type Radio down_box ROUND_DOWN_BOX
+ }
+ Fl_Input print_from {
+ label {From:}
+ xywh {136 126 28 25} type Int textfont 4 deactivate
+ }
+ Fl_Input print_to {
+ label {To:}
+ xywh {199 126 28 25} type Int textfont 4 deactivate
+ }
+ }
+ Fl_Group {} {
+ label Copies open
+ xywh {247 86 210 105} box THIN_DOWN_BOX labelfont 1 align 5
+ } {
+ Fl_Spinner print_copies {
+ label {\# Copies:}
+ callback {if (print_copies->value() == 1) {
+ print_collate_button->deactivate();
+ print_collate_group[0]->deactivate();
+ print_collate_group[1]->deactivate();
+} else {
+ print_collate_button->activate();
+ print_collate_group[0]->activate();
+ print_collate_group[1]->activate();
+}}
+ xywh {321 96 45 25} when 1
+ }
+ Fl_Check_Button print_collate_button {
+ label Collate
+ callback {int i = print_collate_button->value() != 0;
+print_collate_group[i]->show();
+print_collate_group[1 - i]->hide();}
+ xywh {376 96 64 25} down_box DOWN_BOX when 1 deactivate
+ }
+ Fl_Group {print_collate_group[0]} {
+ xywh {257 131 191 50} deactivate
+ } {
+ Fl_Box {} {
+ label 1
+ xywh {287 141 30 40} box BORDER_BOX color 7 labelsize 11 align 26 deactivate
+ }
+ Fl_Box {} {
+ label 1
+ xywh {272 136 30 40} box BORDER_BOX color 7 labelsize 11 align 26 deactivate
+ }
+ Fl_Box {} {
+ label 1
+ xywh {257 131 30 40} box BORDER_BOX color 7 labelsize 11 align 26 deactivate
+ }
+ Fl_Box {} {
+ label 2
+ xywh {352 141 30 40} box BORDER_BOX color 7 labelsize 11 align 26 deactivate
+ }
+ Fl_Box {} {
+ label 2
+ xywh {337 136 30 40} box BORDER_BOX color 7 labelsize 11 align 26 deactivate
+ }
+ Fl_Box {} {
+ label 2
+ xywh {322 131 30 40} box BORDER_BOX color 7 labelsize 11 align 26 deactivate
+ }
+ Fl_Box {} {
+ label 3
+ xywh {417 141 30 40} box BORDER_BOX color 7 labelsize 11 align 26 deactivate
+ }
+ Fl_Box {} {
+ label 3
+ xywh {402 136 30 40} box BORDER_BOX color 7 labelsize 11 align 26 deactivate
+ }
+ Fl_Box {} {
+ label 3
+ xywh {387 131 30 40} box BORDER_BOX color 7 labelsize 11 align 26 deactivate
+ }
+ }
+ Fl_Group {print_collate_group[1]} {
+ xywh {257 131 191 50} hide deactivate
+ } {
+ Fl_Box {} {
+ label 3
+ xywh {287 141 30 40} box BORDER_BOX color 7 labelsize 11 align 26
+ }
+ Fl_Box {} {
+ label 2
+ xywh {272 136 30 40} box BORDER_BOX color 7 labelsize 11 align 26
+ }
+ Fl_Box {} {
+ label 1
+ xywh {257 131 30 40} box BORDER_BOX color 7 labelsize 11 align 26
+ }
+ Fl_Box {} {
+ label 3
+ xywh {352 141 30 40} box BORDER_BOX color 7 labelsize 11 align 26
+ }
+ Fl_Box {} {
+ label 2
+ xywh {337 136 30 40} box BORDER_BOX color 7 labelsize 11 align 26
+ }
+ Fl_Box {} {
+ label 1
+ xywh {322 131 30 40} box BORDER_BOX color 7 labelsize 11 align 26
+ }
+ Fl_Box {} {
+ label 3
+ xywh {417 141 30 40} box BORDER_BOX color 7 labelsize 11 align 26
+ }
+ Fl_Box {} {
+ label 2
+ xywh {402 136 30 40} box BORDER_BOX color 7 labelsize 11 align 26
+ }
+ Fl_Box {} {
+ label 1
+ xywh {387 131 30 40} box BORDER_BOX color 7 labelsize 11 align 26
+ }
+ }
+ }
+ Fl_Return_Button {} {
+ label Print
+ callback print_cb
+ xywh {309 201 70 25}
+ }
+ Fl_Button {} {
+ label Cancel
+ callback {print_panel->hide();}
+ xywh {389 201 68 25}
+ }
+ }
+ Fl_Progress print_progress {
+ xywh {10 203 289 21} selection_color 4 hide
+ }
+ }
+ Fl_Window print_properties_panel {
+ label {Printer Properties}
+ callback {print_properties_panel->hide();
+print_update_status();}
+ xywh {462 486 290 130} type Double modal visible
+ } {
+ Fl_Choice print_page_size {
+ label {Page Size:}
+ xywh {110 10 80 25} down_box BORDER_BOX labelfont 1 labelsize 12
+ } {
+ MenuItem {} {
+ label Letter
+ xywh {0 0 35 25}
+ }
+ MenuItem {} {
+ label A4
+ xywh {0 0 35 25}
+ }
+ }
+ Fl_Group {} {
+ label {Output Mode:} open
+ xywh {110 45 170 40} labelfont 1 labelsize 12 align 4
+ } {
+ Fl_Button {print_output_mode[0]} {
+ image {../pixmaps/print_color.xpm} compress_image 0 xywh {110 45 30 40} type Radio box BORDER_BOX down_box BORDER_BOX value 1 color 7 selection_color 0
+ }
+ Fl_Button {print_output_mode[1]} {
+ image {../pixmaps/print_color.xpm} compress_image 0 xywh {150 50 40 30} type Radio box BORDER_BOX down_box BORDER_BOX color 7 selection_color 0
+ }
+ Fl_Button {print_output_mode[2]} {
+ image {../pixmaps/print_gray.xpm} compress_image 0 xywh {200 45 30 40} type Radio box BORDER_BOX down_box BORDER_BOX color 7 selection_color 0
+ }
+ Fl_Button {print_output_mode[3]} {
+ image {../pixmaps/print_gray.xpm} compress_image 0 xywh {240 50 40 30} type Radio box BORDER_BOX down_box BORDER_BOX color 7 selection_color 0
+ }
+ }
+ Fl_Return_Button {} {
+ label Save
+ callback {print_properties_panel->hide();
+
+char name[1024];
+int val;
+const char *printer = (const char *)print_choice->menu()[print_choice->value()].user_data();
+
+snprintf(name, sizeof(name), "%s/page_size", printer);
+fluid_prefs.set(name, print_page_size->value());
+
+snprintf(name, sizeof(name), "%s/output_mode", printer);
+for (val = 0; val < 4; val ++) {
+ if (print_output_mode[val]->value()) break;
+}
+fluid_prefs.set(name, val);}
+ xywh {123 95 79 25}
+ }
+ Fl_Button {} {
+ label Cancel
+ callback {print_properties_panel->hide();
+print_update_status();}
+ xywh {212 95 68 25}
+ }
+ Fl_Button {} {
+ label Use
+ callback {print_properties_panel->hide();}
+ xywh {60 95 53 25}
+ }
+ }
+}
+
+decl {void print_cb(Fl_Return_Button *, void *);} {public local
+}
+
+Function {print_load()} {open return_type void
+} {
+ code {FILE *lpstat;
+char line[1024], name[1024], *nptr, qname[2048], *qptr, defname[1024];
+int i;
+
+if (print_choice->size() > 1) {
+ for (i = 1; print_choice->text(i); i ++) {
+ free(print_choice->menu()[i].user_data());
+ }
+}
+
+print_choice->clear();
+print_choice->add("Print To File", 0, 0, 0, FL_MENU_DIVIDER);
+print_choice->value(0);
+
+defname[0] = '\\0';
+
+if ((lpstat = popen("LC_MESSAGES=C LANG=C lpstat -p -d", "r")) != NULL) {
+ while (fgets(line, sizeof(line), lpstat)) {
+ if (!strncmp(line, "printer ", 8) &&
+ sscanf(line + 8, "%s", name) == 1) {
+ for (nptr = name, qptr = qname; *nptr; *qptr++ = *nptr++) {
+ if (*nptr == '/') *qptr++ = '\\\\';
+ }
+ *qptr = '\\0';
+
+ print_choice->add(qname, 0, 0, (void *)fl_strdup(name), 0);
+ } else if (!strncmp(line, "system default destination: ", 28)) {
+ if (sscanf(line + 28, "%s", defname) != 1) defname[0] = '\\0';
+ }
+ }
+ pclose(lpstat);
+}
+
+if (defname[0]) {
+ for (i = 1; print_choice->text(i); i ++) {
+ if (!strcmp((char *)print_choice->menu()[i].user_data(), defname)) {
+ print_choice->value(i);
+ break;
+ }
+ }
+} else if (print_choice->size() > 2) print_choice->value(1);
+
+
+print_update_status();} {}
+}
+
+Function {print_update_status()} {open return_type void
+} {
+ code {FILE *lpstat;
+char command[1024];
+static char status[1024];
+const char *printer = (const char *)print_choice->menu()[print_choice->value()].user_data();
+
+if (print_choice->value()) {
+ snprintf(command, sizeof(command), "lpstat -p '%s'", printer);
+ if ((lpstat = popen(command, "r")) != NULL) {
+ if (fgets(status, sizeof(status), lpstat)==0) { /* ignore */ }
+ pclose(lpstat);
+ } else strcpy(status, "printer status unavailable");
+} else status[0] = '\\0';
+
+print_status->label(status);
+
+char name[1024];
+int val;
+
+snprintf(name, sizeof(name), "%s/page_size", printer);
+fluid_prefs.get(name, val, 0);
+print_page_size->value(val);
+
+snprintf(name, sizeof(name), "%s/output_mode", printer);
+fluid_prefs.get(name, val, 0);
+print_output_mode[val]->setonly();} {}
+}
diff --git a/fluid/panels/print_panel.h b/fluid/panels/print_panel.h
new file mode 100644
index 000000000..fed8fd3c0
--- /dev/null
+++ b/fluid/panels/print_panel.h
@@ -0,0 +1,56 @@
+//
+// FLUID print panel for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2020 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
+
+#ifndef print_panel_h
+#define print_panel_h
+#include <FL/Fl.H>
+#include <FL/Fl_Double_Window.H>
+extern Fl_Double_Window *print_panel;
+#include <FL/Fl_Group.H>
+extern Fl_Group *print_panel_controls;
+#include <FL/Fl_Choice.H>
+extern Fl_Choice *print_choice;
+#include <FL/Fl_Button.H>
+extern Fl_Button *print_properties;
+#include <FL/Fl_Box.H>
+extern Fl_Box *print_status;
+#include <FL/Fl_Round_Button.H>
+extern Fl_Round_Button *print_all;
+extern Fl_Round_Button *print_pages;
+extern Fl_Round_Button *print_selection;
+#include <FL/Fl_Int_Input.H>
+extern Fl_Int_Input *print_from;
+extern Fl_Int_Input *print_to;
+#include <FL/Fl_Spinner.H>
+extern Fl_Spinner *print_copies;
+#include <FL/Fl_Check_Button.H>
+extern Fl_Check_Button *print_collate_button;
+extern Fl_Group *print_collate_group[2];
+#include <FL/Fl_Return_Button.H>
+extern void print_cb(Fl_Return_Button*, void*);
+#include <FL/Fl_Progress.H>
+extern Fl_Progress *print_progress;
+extern Fl_Double_Window *print_properties_panel;
+extern Fl_Choice *print_page_size;
+extern Fl_Button *print_output_mode[4];
+Fl_Double_Window* make_print_panel();
+extern Fl_Menu_Item menu_print_page_size[];
+extern void print_cb(Fl_Return_Button *, void *);
+void print_load();
+void print_update_status();
+#endif
diff --git a/fluid/panels/settings_panel.cxx b/fluid/panels/settings_panel.cxx
new file mode 100644
index 000000000..a0e2092a8
--- /dev/null
+++ b/fluid/panels/settings_panel.cxx
@@ -0,0 +1,3551 @@
+//
+// Setting and shell dialogs for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2023 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 "settings_panel.h"
+#include "app/undo.h"
+#include <FL/Fl_Preferences.H>
+#include <FL/Fl_Tooltip.H>
+#include <FL/fl_ask.H>
+#include "../src/flstring.h"
+#include <string.h>
+void scheme_cb(Fl_Scheme_Choice *, void *);
+int w_settings_shell_list_selected;
+
+static void cb_Comments(Fl_Choice* o, void* v) {
+ Fl_Font *font = (Fl_Font*)o->user_data();
+ if (v == LOAD) {
+ o->value(*font);
+ } else {
+ *font = (int)o->value();
+ widget_browser->redraw();
+ widget_browser->save_prefs();
+ }
+}
+
+static void cb_Color_Chip(Fl_Button* o, void* v) {
+ Fl_Color *color = (Fl_Color*)o->user_data();
+ if (v == LOAD) {
+ o->color(*color);
+ o->redraw();
+ } else {
+ Fl_Color d = fl_show_colormap(*color);
+ *color = d;
+ o->color(d);
+ widget_browser->redraw();
+ widget_browser->save_prefs();
+ }
+}
+
+static void cb_Color_Choice(Fl_Menu_Button* o, void* v) {
+ if (v != LOAD) {
+ Fl_Color *color = (Fl_Color*)o->user_data();
+ Fl_Color d = (Fl_Color)(o->mvalue()->argument());
+ *color = d;
+ o->parent()->do_callback(o->parent(), LOAD);
+ widget_browser->redraw();
+ widget_browser->save_prefs();
+ }
+}
+
+Fl_Double_Window *script_panel=(Fl_Double_Window *)0;
+
+static void cb_script_panel(Fl_Double_Window*, void*) {
+ if (Fl::event()==FL_SHORTCUT && Fl::event_key()==FL_Escape)
+ return; // ignore Escape
+ script_panel->hide(); // otherwise hide..;
+}
+
+Fl_Text_Editor *script_input=(Fl_Text_Editor *)0;
+
+Fl_Return_Button *script_panel_ok=(Fl_Return_Button *)0;
+
+Fl_Button *script_panel_cancel=(Fl_Button *)0;
+
+Fl_Double_Window* make_script_panel() {
+ { Fl_Double_Window* o = script_panel = new Fl_Double_Window(540, 180, "Shell Script Editor");
+ script_panel->labelsize(11);
+ script_panel->callback((Fl_Callback*)cb_script_panel);
+ { script_input = new Fl_Text_Editor(10, 10, 520, 130);
+ script_input->box(FL_DOWN_BOX);
+ script_input->labelsize(11);
+ script_input->textfont(4);
+ script_input->textsize(11);
+ script_input->when(FL_WHEN_RELEASE | FL_WHEN_CHANGED | FL_WHEN_ENTER_KEY);
+ Fl_Group::current()->resizable(script_input);
+ script_input->buffer(new Fl_Text_Buffer);
+ } // Fl_Text_Editor* script_input
+ { Fl_Group* o = new Fl_Group(10, 150, 520, 20);
+ o->labelsize(11);
+ o->callback((Fl_Callback*)propagate_load);
+ { script_panel_ok = new Fl_Return_Button(400, 150, 60, 20, "OK");
+ script_panel_ok->labelsize(11);
+ script_panel_ok->window()->hotspot(script_panel_ok);
+ } // Fl_Return_Button* script_panel_ok
+ { script_panel_cancel = new Fl_Button(470, 150, 60, 20, "Cancel");
+ script_panel_cancel->labelsize(11);
+ } // Fl_Button* script_panel_cancel
+ { Fl_Box* o = new Fl_Box(10, 150, 380, 20);
+ o->labelsize(11);
+ Fl_Group::current()->resizable(o);
+ } // Fl_Box* o
+ o->end();
+ } // Fl_Group* o
+ script_panel->set_modal();
+ o->size_range(200, 150);
+ script_panel->end();
+ } // Fl_Double_Window* script_panel
+ // Enable line numbers
+ script_input->linenumber_width(60);
+ script_input->linenumber_size(script_input->Fl_Text_Display::textsize());
+ return script_panel;
+}
+
+Fl_Double_Window *settings_window=(Fl_Double_Window *)0;
+
+Fl_Tabs *w_settings_tabs=(Fl_Tabs *)0;
+
+static void cb_w_settings_tabs(Fl_Tabs* o, void* v) {
+ propagate_load(o, v);
+}
+
+Fl_Group *w_settings_general_tab=(Fl_Group *)0;
+
+#include <FL/Fl_PNG_Image.H>
+
+static const unsigned char idata_general_64[] =
+{137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,96,0,0,0,64,8,4,0,0,0,
+79,61,186,133,0,0,8,57,73,68,65,84,104,222,205,154,107,112,85,213,21,199,127,
+151,60,185,36,18,66,204,131,120,155,82,136,163,131,4,41,180,130,36,2,117,8,15,
+173,58,109,103,168,97,42,67,135,78,167,84,16,59,118,192,41,29,201,244,3,14,182,
+14,62,74,77,149,42,12,226,180,160,130,19,32,136,144,34,193,240,104,136,52,193,
+18,196,16,200,131,128,121,191,47,185,247,158,126,72,206,221,251,60,238,189,39,
+112,46,115,247,249,178,207,217,123,159,179,214,218,107,173,255,90,107,31,176,
+187,37,81,72,13,237,184,25,196,135,130,130,143,65,220,180,83,67,33,73,68,120,
+203,162,114,152,108,179,203,199,89,178,34,155,129,210,128,196,171,87,73,36,147,
+63,11,119,72,6,220,60,108,231,39,71,217,204,64,108,200,57,177,204,180,243,147,
+209,182,50,112,175,191,167,188,231,72,197,65,52,224,65,225,58,43,20,28,195,99,
+223,139,92,6,114,212,206,115,142,185,196,73,3,110,86,59,222,80,111,210,34,87,
+133,198,169,157,4,162,52,3,81,36,138,155,187,35,149,129,120,225,229,83,116,12,
+140,98,172,184,153,100,231,190,223,202,171,82,153,137,135,47,185,161,123,158,41,
+196,156,233,87,120,149,1,9,193,146,201,160,94,183,54,141,217,140,226,20,141,225,
+118,148,73,108,167,29,47,30,218,216,71,174,127,7,147,216,196,13,225,44,15,40,77,
+186,107,135,236,74,27,217,64,130,95,132,115,41,166,29,47,94,58,217,65,114,56,
+201,143,231,51,157,79,175,100,5,78,150,114,69,198,95,151,114,204,192,64,137,30,
+147,107,200,39,129,149,124,201,77,205,200,49,156,225,99,96,155,73,152,224,165,
+89,71,130,50,77,57,99,96,224,164,114,191,126,229,0,205,120,77,194,141,183,71,
+66,82,212,8,230,174,96,131,201,124,135,222,229,36,243,56,15,51,90,55,109,144,
+38,174,208,175,181,191,4,157,169,12,189,47,135,58,254,107,149,40,135,101,242,
+93,156,9,237,193,103,243,20,51,112,201,78,83,69,54,186,168,231,52,123,249,79,
+232,111,53,49,203,96,230,183,189,3,219,69,8,176,148,181,164,114,141,30,205,132,
+251,89,199,175,153,77,154,6,194,132,164,226,73,101,42,115,152,200,101,58,52,99,
+233,20,176,26,39,85,234,131,68,82,248,216,222,29,152,79,137,26,231,76,103,51,83,
+232,161,150,227,236,163,122,120,66,1,203,185,143,24,11,175,114,83,205,54,246,
+162,190,237,113,114,153,72,2,213,172,163,82,76,202,231,115,59,25,40,103,150,218,
+45,98,201,240,198,221,164,145,51,236,231,48,235,249,57,169,35,48,167,38,118,
+178,133,37,60,198,116,38,12,75,198,203,62,158,21,83,62,99,129,125,12,44,96,191,
+42,220,103,88,39,34,6,192,199,13,174,49,137,187,70,232,208,218,185,194,4,82,52,
+161,64,43,47,243,190,176,250,133,148,218,101,3,69,100,15,117,156,252,129,201,6,
+39,148,97,170,245,193,219,104,210,25,163,147,159,19,39,187,5,101,99,196,205,
+237,197,66,89,252,80,237,254,130,41,97,5,250,105,252,74,222,119,11,233,167,149,
+88,104,145,240,138,249,254,8,32,120,243,209,78,61,77,12,224,32,142,76,92,36,89,
+146,85,34,243,4,142,221,197,34,138,236,96,32,93,221,105,39,221,220,12,153,116,
+41,92,163,140,35,156,160,205,15,109,121,60,202,28,241,162,32,30,106,64,214,206,
+84,123,108,96,10,75,134,190,60,72,5,9,184,12,40,43,55,15,167,120,149,55,184,40,
+161,110,63,53,28,164,137,52,210,131,238,67,43,31,179,70,150,196,238,208,168,103,
+133,129,22,86,16,63,212,237,226,48,94,238,97,92,0,89,122,56,194,70,78,153,142,
+93,228,44,46,178,2,176,160,112,137,191,179,89,235,168,126,79,167,29,12,116,16,
+71,158,248,110,5,117,164,144,97,170,125,229,108,224,155,128,47,106,227,60,57,
+100,154,170,78,25,175,242,145,252,200,203,75,28,180,203,141,30,167,139,92,161,
+252,117,156,32,1,151,33,238,109,226,117,173,244,251,248,150,30,162,5,64,183,209,
+203,15,12,142,160,133,15,249,147,31,211,1,232,225,69,94,67,177,211,195,61,194,
+37,109,224,251,182,46,96,110,80,182,200,227,189,252,153,73,196,19,79,54,175,
+211,47,70,182,42,13,186,149,127,211,135,212,53,214,107,71,214,115,226,207,153,
+195,30,124,226,193,120,3,182,150,202,178,95,198,11,124,195,0,3,124,205,26,126,
+41,220,203,33,218,13,121,146,198,3,239,33,143,47,194,145,212,95,103,169,216,
+214,100,57,77,7,160,158,195,50,118,239,213,12,126,192,187,66,31,175,27,146,105,
+167,176,229,215,88,106,200,182,109,171,74,248,168,81,187,19,12,154,220,68,159,
+144,255,91,134,181,91,212,225,54,90,117,67,99,229,90,87,141,188,203,246,151,85,
+226,84,255,25,101,88,234,22,221,78,174,26,86,54,8,151,216,106,32,34,74,128,215,
+8,195,42,123,11,91,193,223,235,184,83,31,10,142,245,138,234,166,125,134,205,
+145,138,47,247,24,86,126,71,24,77,138,65,51,189,194,6,220,225,101,224,1,85,142,
+181,116,7,54,197,209,172,54,172,124,94,141,64,146,13,254,171,131,90,177,75,83,
+71,70,211,72,38,167,113,128,85,194,78,187,12,89,127,190,184,89,201,211,154,193,
+229,44,23,128,146,22,216,252,225,55,124,66,70,56,24,152,207,41,22,203,243,91,13,
+69,187,31,201,174,253,31,188,233,7,178,34,138,132,134,45,212,100,116,67,193,
+158,134,162,199,40,231,81,187,109,229,69,250,100,172,76,87,54,43,213,134,226,85,
+133,242,99,45,162,246,210,72,147,118,229,83,74,165,97,93,149,242,178,146,174,93,
+217,199,70,107,194,181,22,11,253,145,66,57,13,152,207,75,44,48,169,253,36,146,
+202,89,127,22,0,196,144,72,162,92,170,200,102,189,116,10,34,82,201,251,152,70,
+27,151,229,149,143,16,195,81,123,24,152,200,123,114,220,182,138,231,200,9,144,
+9,165,227,226,188,204,130,166,101,179,145,135,76,5,27,141,139,7,137,149,195,
+127,7,223,103,31,223,218,193,64,1,63,81,125,79,58,27,89,70,70,64,151,62,138,44,
+166,209,195,69,147,177,39,89,207,67,1,83,64,7,227,200,97,50,135,196,163,88,234,
+57,97,71,74,121,183,74,111,50,175,144,23,34,165,140,102,6,46,22,115,80,151,82,
+46,100,54,169,33,176,108,28,63,229,119,101,228,74,229,4,91,146,250,102,134,15,
+232,218,24,109,225,24,210,65,26,79,144,199,117,90,105,193,65,10,227,73,179,152,
+212,199,176,39,247,103,226,182,214,30,6,74,232,86,235,86,37,76,53,49,94,51,85,
+26,111,128,43,43,173,151,99,114,72,126,192,30,28,184,34,52,113,23,95,133,181,
+46,84,205,54,57,15,252,202,30,6,224,21,6,85,161,236,209,1,152,66,43,103,13,168,
+28,186,245,80,73,139,46,158,234,100,191,192,100,15,127,181,15,7,234,88,132,107,
+168,91,197,84,178,135,249,246,208,72,41,239,178,137,104,38,90,44,121,169,185,
+209,78,94,224,42,110,156,36,12,191,205,199,81,10,229,250,192,122,251,24,128,75,
+20,168,246,210,192,116,82,233,231,2,197,108,229,45,254,199,32,95,208,69,186,
+174,84,27,184,114,116,158,34,182,50,200,5,14,82,69,55,177,36,18,195,5,254,66,
+131,40,237,254,150,175,173,16,102,61,70,223,141,223,61,60,205,60,170,217,171,59,
+68,121,128,101,204,39,51,168,76,124,92,163,148,247,57,167,11,3,159,224,65,142,
+179,67,60,250,132,39,173,145,101,243,17,211,92,22,51,131,239,50,198,100,172,143,
+58,42,248,148,35,86,74,105,115,76,177,240,54,219,114,6,67,254,76,163,160,184,
+148,103,149,42,67,192,118,94,121,94,113,41,86,214,227,97,101,120,242,129,237,
+108,55,41,53,41,180,227,209,86,39,254,77,175,137,252,143,234,207,237,60,180,155,
+150,174,118,241,78,184,50,178,53,148,233,72,56,199,90,238,165,128,58,249,113,
+173,137,91,237,215,135,120,87,121,134,201,172,162,82,203,62,39,229,115,38,251,
+91,10,219,232,196,135,143,46,138,89,228,143,44,82,40,164,89,168,65,177,65,133,
+62,148,149,164,133,77,254,210,121,52,249,124,68,7,62,124,244,240,175,145,100,
+99,183,90,41,112,145,11,148,209,168,195,161,108,42,212,56,99,167,156,157,1,112,
+64,40,118,47,51,185,96,72,168,231,18,67,25,151,71,86,21,186,181,191,85,234,249,
+192,244,249,101,90,85,6,26,241,233,180,179,95,6,225,6,195,218,70,118,221,153,
+178,74,112,132,234,21,65,129,86,144,94,57,51,105,212,157,144,223,209,186,80,240,
+230,167,178,75,103,153,62,249,232,168,206,206,79,218,251,207,220,57,230,13,117,
+78,83,204,120,198,18,7,12,208,73,7,21,98,86,119,228,50,224,79,64,78,115,122,56,
+93,71,174,249,12,181,139,145,203,64,57,110,109,113,182,207,56,103,144,114,34,
+184,29,10,25,40,124,74,68,183,76,202,131,254,252,125,210,238,159,191,163,108,
+102,160,155,127,210,133,147,49,68,161,224,192,1,40,120,241,208,73,37,239,176,
+150,102,123,63,248,127,27,97,180,206,27,14,172,151,0,0,0,0,73,69,78,68,174,66,
+96,130};
+static Fl_Image *image_general_64() {
+ static Fl_Image *image = NULL;
+ if (!image)
+ image = new Fl_PNG_Image("general_64.png", idata_general_64, 2162);
+ return image;
+}
+
+static void cb_(Fl_Group* o, void* v) {
+ propagate_load(o, v);
+}
+
+Fl_Scheme_Choice *scheme_choice=(Fl_Scheme_Choice *)0;
+
+Fl_Check_Button *tooltips_button=(Fl_Check_Button *)0;
+
+static void cb_tooltips_button(Fl_Check_Button*, void*) {
+ Fl_Tooltip::enable(tooltips_button->value());
+ fluid_prefs.set("show_tooltips", tooltips_button->value());
+}
+
+Fl_Check_Button *completion_button=(Fl_Check_Button *)0;
+
+static void cb_completion_button(Fl_Check_Button*, void*) {
+ fluid_prefs.set("show_completion_dialogs", completion_button->value());
+}
+
+Fl_Check_Button *openlast_button=(Fl_Check_Button *)0;
+
+static void cb_openlast_button(Fl_Check_Button*, void*) {
+ fluid_prefs.set("open_previous_file", openlast_button->value());
+}
+
+Fl_Check_Button *prevpos_button=(Fl_Check_Button *)0;
+
+static void cb_prevpos_button(Fl_Check_Button*, void*) {
+ fluid_prefs.set("prev_window_pos", prevpos_button->value());
+}
+
+Fl_Check_Button *show_comments_button=(Fl_Check_Button *)0;
+
+static void cb_show_comments_button(Fl_Check_Button*, void*) {
+ show_comments = show_comments_button->value();
+ fluid_prefs.set("show_comments", show_comments);
+ redraw_browser();
+}
+
+static void cb_1(Fl_Group* o, void* v) {
+ propagate_load(o, v);
+}
+
+Fl_Spinner *recent_spinner=(Fl_Spinner *)0;
+
+static void cb_recent_spinner(Fl_Spinner*, void*) {
+ fluid_prefs.set("recent_files", recent_spinner->value());
+ load_history();
+}
+
+Fl_Check_Button *use_external_editor_button=(Fl_Check_Button *)0;
+
+static void cb_use_external_editor_button(Fl_Check_Button*, void*) {
+ G_use_external_editor = use_external_editor_button->value();
+ fluid_prefs.set("use_external_editor", G_use_external_editor);
+ redraw_browser();
+}
+
+Fl_Input *editor_command_input=(Fl_Input *)0;
+
+static void cb_editor_command_input(Fl_Input*, void*) {
+ strncpy(G_external_editor_command, editor_command_input->value(), sizeof(G_external_editor_command)-1);
+ G_external_editor_command[sizeof(G_external_editor_command)-1] = 0;
+ fluid_prefs.set("external_editor_command", G_external_editor_command);
+ redraw_browser();
+}
+
+Fl_Check_Button *guides_button=(Fl_Check_Button *)0;
+
+Fl_Check_Button *restricted_button=(Fl_Check_Button *)0;
+
+Fl_Check_Button *ghosted_outline_button=(Fl_Check_Button *)0;
+
+Fl_Group *w_settings_project_tab=(Fl_Group *)0;
+
+static void cb_w_settings_project_tab(Fl_Group* o, void* v) {
+ propagate_load(o, v);
+}
+
+static const unsigned char idata_document_64[] =
+{137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,96,0,0,0,64,8,4,0,0,0,
+79,61,186,133,0,0,3,102,73,68,65,84,104,222,237,154,223,75,83,81,28,192,63,155,
+115,58,171,153,191,42,140,2,75,115,41,69,20,73,61,244,3,67,176,68,122,168,8,234,
+65,123,90,32,81,68,65,47,65,100,208,15,95,194,8,130,94,140,30,250,3,210,94,6,
+65,15,162,15,21,250,160,145,62,68,141,182,39,205,205,156,211,181,173,135,221,
+93,231,118,167,251,113,239,238,153,236,156,135,125,57,231,220,123,191,159,123,
+239,247,215,221,129,244,90,39,223,9,16,206,178,7,113,97,71,135,102,199,151,181,
+242,209,30,224,113,174,213,111,194,163,154,250,145,231,240,44,183,0,3,170,170,
+31,65,232,203,86,41,83,26,107,143,70,133,50,74,51,184,148,31,95,252,144,145,
+219,192,221,220,0,24,87,180,190,65,27,134,52,47,20,198,193,83,165,179,102,137,
+144,14,128,49,42,214,178,63,3,128,9,89,238,98,150,247,42,33,152,244,112,102,167,
+57,72,136,33,85,16,140,122,0,24,57,68,47,29,171,95,164,190,60,2,0,131,106,8,58,
+1,168,135,160,27,128,90,8,58,2,168,131,160,43,64,18,132,222,60,2,136,32,60,
+162,51,86,163,59,156,20,28,96,17,111,76,159,103,15,55,87,242,20,40,165,91,192,
+64,102,160,88,150,223,50,26,119,23,131,120,98,7,14,11,25,137,183,203,210,48,
+195,107,47,45,199,196,63,225,94,33,27,87,52,137,234,57,107,21,116,113,74,245,
+179,230,52,153,107,230,33,67,56,112,179,156,90,189,32,26,128,145,6,174,115,137,
+5,130,169,214,11,226,165,211,165,236,92,183,94,200,171,64,150,71,70,92,0,208,
+206,6,194,120,249,131,159,176,194,156,25,43,149,20,137,12,224,103,132,65,62,51,
+163,56,187,9,27,103,105,163,74,84,128,101,6,121,192,108,210,249,89,156,56,232,
+193,78,181,152,54,48,65,223,26,234,71,219,75,62,42,248,126,1,0,130,124,193,153,
+210,202,15,41,96,234,240,10,45,241,83,150,79,176,149,80,220,221,9,48,142,27,128,
+105,188,212,136,7,16,98,94,206,128,175,81,159,224,135,22,232,151,0,60,138,249,
+143,80,201,156,133,50,133,81,237,28,104,33,18,111,160,72,28,27,147,87,215,193,
+225,184,185,176,52,46,12,128,129,18,73,242,240,137,169,4,128,69,126,201,241,218,
+193,164,12,80,66,29,123,177,232,15,96,166,86,150,95,173,185,210,23,87,174,236,
+226,42,151,99,10,125,157,108,160,152,230,12,143,116,242,132,55,171,63,166,232,
+99,196,45,220,202,248,216,231,140,233,15,96,165,155,251,236,200,240,232,49,2,
+250,123,161,109,116,211,138,147,57,217,68,127,243,66,250,194,112,128,14,44,9,
+166,237,102,0,63,0,46,150,98,190,216,233,230,70,45,52,210,24,227,36,39,121,45,1,
+236,166,157,205,9,0,211,188,147,0,150,196,138,3,134,184,223,168,172,166,223,47,
+164,18,27,60,149,72,44,120,22,20,94,180,69,209,1,204,148,75,245,215,56,253,20,
+39,148,57,115,114,0,179,102,157,110,107,2,96,165,129,31,0,184,165,114,38,89,
+171,195,44,162,13,84,210,158,210,186,58,90,178,126,2,154,0,20,209,70,79,10,152,
+247,216,39,170,17,87,97,167,158,65,166,20,140,56,50,127,140,243,28,201,50,10,
+107,234,133,170,185,64,43,94,197,82,222,128,133,10,182,168,18,224,52,116,163,38,
+106,52,249,144,82,136,196,5,0,157,82,137,208,74,64,117,241,77,245,12,51,140,75,
+241,90,169,102,192,169,180,9,154,34,66,102,219,46,215,107,49,127,179,142,114,92,
+11,47,52,18,5,240,101,244,143,110,90,87,210,164,217,152,83,125,239,174,82,159,
+193,166,213,157,233,226,175,230,234,123,185,168,229,195,61,199,184,10,219,239,
+147,239,104,255,202,153,244,20,250,15,100,60,232,29,230,9,101,148,0,0,0,0,73,69,
+78,68,174,66,96,130};
+static Fl_Image *image_document_64() {
+ static Fl_Image *image = NULL;
+ if (!image)
+ image = new Fl_PNG_Image("document_64.png", idata_document_64, 927);
+ return image;
+}
+
+Fl_Input *header_file_input=(Fl_Input *)0;
+
+static void cb_header_file_input(Fl_Input* o, void* v) {
+ if (v == LOAD) {
+ o->value(g_project.header_file_name.c_str());
+ } else {
+ if (strcmp(g_project.header_file_name.c_str(), o->value())) {
+ g_project.header_file_name = o->value();
+ set_modflag(1);
+ }
+ }
+}
+
+Fl_Input *code_file_input=(Fl_Input *)0;
+
+static void cb_code_file_input(Fl_Input* o, void* v) {
+ if (v == LOAD) {
+ o->value(g_project.code_file_name.c_str());
+ } else {
+ if (strcmp(g_project.code_file_name.c_str(), o->value())) {
+ g_project.code_file_name = o->value();
+ set_modflag(1);
+ }
+ }
+}
+
+Fl_Check_Button *include_H_from_C_button=(Fl_Check_Button *)0;
+
+static void cb_include_H_from_C_button(Fl_Check_Button* o, void* v) {
+ if (v == LOAD) {
+ o->value(g_project.include_H_from_C);
+ } else {
+ if (g_project.include_H_from_C != o->value()) {
+ set_modflag(1);
+ g_project.include_H_from_C = o->value();
+ }
+ }
+}
+
+Fl_Check_Button *use_FL_COMMAND_button=(Fl_Check_Button *)0;
+
+static void cb_use_FL_COMMAND_button(Fl_Check_Button* o, void* v) {
+ if (v == LOAD) {
+ o->value(g_project.use_FL_COMMAND);
+ } else {
+ if (g_project.use_FL_COMMAND != o->value()) {
+ set_modflag(1);
+ g_project.use_FL_COMMAND = o->value();
+ }
+ }
+}
+
+Fl_Check_Button *utf8_in_src_button=(Fl_Check_Button *)0;
+
+static void cb_utf8_in_src_button(Fl_Check_Button* o, void* v) {
+ if (v == LOAD) {
+ o->value(g_project.utf8_in_src);
+ } else {
+ if (g_project.utf8_in_src != o->value()) {
+ set_modflag(1);
+ g_project.utf8_in_src = o->value();
+ }
+ }
+}
+
+Fl_Check_Button *avoid_early_includes_button=(Fl_Check_Button *)0;
+
+static void cb_avoid_early_includes_button(Fl_Check_Button* o, void* v) {
+ if (v == LOAD) {
+ o->value(g_project.avoid_early_includes);
+ } else {
+ if (g_project.avoid_early_includes != o->value()) {
+ set_modflag(1);
+ g_project.avoid_early_includes = o->value();
+ }
+ }
+}
+
+Fl_Check_Button *w_proj_mergeback=(Fl_Check_Button *)0;
+
+static void cb_w_proj_mergeback(Fl_Check_Button* o, void* v) {
+ if (v == LOAD) {
+ o->value(g_project.write_mergeback_data);
+ } else {
+ if (g_project.write_mergeback_data != o->value()) {
+ set_modflag(1);
+ g_project.write_mergeback_data = o->value();
+ }
+ }
+}
+
+Fl_Group *w_settings_layout_tab=(Fl_Group *)0;
+
+static void cb_w_settings_layout_tab(Fl_Group* o, void* v) {
+ propagate_load(o, v);
+}
+
+static const unsigned char idata_layout_64[] =
+{137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,96,0,0,0,64,8,4,0,0,0,
+79,61,186,133,0,0,1,168,73,68,65,84,104,222,237,154,49,75,3,49,20,199,127,119,
+84,168,109,23,197,201,209,69,116,16,197,130,159,160,123,151,226,226,42,14,98,
+29,244,35,184,56,59,250,77,244,27,88,113,171,90,144,66,41,116,180,72,75,45,120,
+92,92,122,109,167,144,75,155,35,202,123,89,18,146,123,252,127,112,239,46,47,
+121,144,206,78,232,16,161,28,181,136,14,53,28,218,21,99,103,226,147,246,205,185,
+43,249,135,12,157,203,87,40,6,28,152,139,10,83,0,92,83,36,11,43,113,106,190,56,
+151,194,241,94,210,41,144,215,46,28,51,154,246,215,141,221,207,61,85,118,1,16,
+178,154,116,47,168,16,104,22,126,112,57,17,83,161,78,17,101,224,94,241,200,109,
+50,216,32,36,94,62,192,84,243,38,59,26,0,136,201,79,0,214,216,166,100,228,94,
+209,156,13,2,115,128,144,63,110,2,32,0,2,32,0,2,176,144,229,220,186,143,24,26,
+174,84,140,125,4,104,112,195,138,209,86,2,218,62,2,116,233,74,12,72,16,47,102,
+86,249,128,63,0,150,249,128,63,0,150,249,128,4,177,0,8,128,0,8,128,0,8,128,0,8,
+128,0,8,128,0,8,128,0,184,55,171,156,184,199,155,246,146,175,109,121,76,152,25,
+192,29,247,218,121,187,3,146,12,1,70,25,10,148,32,254,151,65,92,102,75,51,27,
+208,231,193,111,128,26,85,205,87,40,224,157,103,62,125,6,200,83,210,150,26,20,
+36,6,4,64,0,4,64,0,4,192,187,31,89,60,187,171,51,207,7,250,180,140,47,249,122,
+243,131,216,84,86,144,2,182,201,110,242,167,117,92,118,249,196,145,139,173,196,
+75,2,144,38,31,176,218,19,53,220,188,110,251,12,50,41,61,254,154,149,216,46,
+219,234,153,20,127,159,185,12,250,99,90,14,203,239,127,120,165,154,78,208,47,
+215,15,118,242,56,45,94,1,0,0,0,0,73,69,78,68,174,66,96,130};
+static Fl_Image *image_layout_64() {
+ static Fl_Image *image = NULL;
+ if (!image)
+ image = new Fl_PNG_Image("layout_64.png", idata_layout_64, 481);
+ return image;
+}
+
+Fl_Choice *layout_choice=(Fl_Choice *)0;
+
+static void cb_layout_choice(Fl_Choice* o, void* v) {
+ if (v == LOAD) {
+ o->value(g_layout_list.current_suite());
+ } else {
+ int index = o->value();
+ g_layout_list.current_suite(index);
+ g_layout_list.update_dialogs();
+ }
+}
+
+Fl_Menu_Item menu_layout_choice[] = {
+ {"FLTK", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 14, 0},
+ {"Grid", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 14, 0},
+ {0,0,0,0,0,0,0,0,0}
+};
+
+static void cb_2(Fl_Button*, void* v) {
+ // Clone the current layout suite
+
+ if (v == LOAD) return;
+
+ std::string old_name = "Copy of ";
+ old_name.append(g_layout_list[g_layout_list.current_suite()].name_);
+ const char *new_name = fl_input("Enter a name for the new layout:", old_name.c_str());
+ if (new_name == NULL)
+ return;
+
+ g_layout_list.add(new_name);
+ g_layout_list.update_dialogs();
+}
+
+Fl_Menu_Button *w_layout_menu=(Fl_Menu_Button *)0;
+
+static void cb_w_layout_menu(Fl_Menu_Button*, void* v) {
+ if (v == LOAD) {
+ Fd_Layout_Suite &suite = g_layout_list[g_layout_list.current_suite()];
+ if (suite.storage_ == FD_STORE_INTERNAL) {
+ w_layout_menu_rename->deactivate();
+ for (int i=1; i<4; i++) w_layout_menu_storage[i]->deactivate();
+ w_layout_menu_delete->deactivate();
+ } else {
+ w_layout_menu_rename->activate();
+ for (int i=1; i<4; i++) w_layout_menu_storage[i]->activate();
+ w_layout_menu_delete->activate();
+ }
+ w_layout_menu_storage[suite.storage_]->setonly();
+ }
+}
+
+static void cb_w_layout_menu_rename(Fl_Menu_*, void*) {
+ // Rename the current layout suite
+
+ std::string old_name = g_layout_list[g_layout_list.current_suite()].name_;
+ const char *new_name = fl_input("Enter a new name for the layout:", old_name.c_str());
+ if (new_name == NULL)
+ return;
+
+ g_layout_list.rename(new_name);
+ g_layout_list.update_dialogs();
+}
+
+static void cb_w_layout_menu_storage(Fl_Menu_*, void*) {
+ Fd_Layout_Suite &suite = g_layout_list[g_layout_list.current_suite()];
+ suite.storage(FD_STORE_INTERNAL);
+ g_layout_list.update_dialogs();
+}
+
+static void cb_w_layout_menu_storage1(Fl_Menu_*, void*) {
+ Fd_Layout_Suite &suite = g_layout_list[g_layout_list.current_suite()];
+ suite.storage(FD_STORE_USER);
+ g_layout_list.update_dialogs();
+}
+
+static void cb_w_layout_menu_storage2(Fl_Menu_*, void*) {
+ Fd_Layout_Suite &suite = g_layout_list[g_layout_list.current_suite()];
+ suite.storage(FD_STORE_PROJECT);
+ g_layout_list.update_dialogs();
+}
+
+static void cb_w_layout_menu_storage3(Fl_Menu_*, void*) {
+ Fd_Layout_Suite &suite = g_layout_list[g_layout_list.current_suite()];
+ suite.storage(FD_STORE_FILE);
+ g_layout_list.update_dialogs();
+}
+
+static void cb_w_layout_menu_load(Fl_Menu_*, void*) {
+ // Give the user a file chooser and load that file
+ Fl_Native_File_Chooser fnfc;
+ fnfc.title("Load Layout Settings:");
+ fnfc.type(Fl_Native_File_Chooser::BROWSE_FILE);
+ fnfc.options(Fl_Native_File_Chooser::USE_FILTER_EXT);
+ fnfc.filter("FLUID Layouts\t*.fll\n");
+ if (fnfc.show() != 0) return;
+ const char *new_filename = fnfc.filename();
+ if (!new_filename) return;
+ g_layout_list.load(new_filename);
+ //g_layout_list.current_suite(n);
+ g_layout_list.update_dialogs();
+}
+
+static void cb_w_layout_menu_save(Fl_Menu_*, void*) {
+ // Give the user a file chooser with a suggested name
+ Fl_Native_File_Chooser fnfc;
+ fnfc.title("Save Layout Settings:");
+ fnfc.type(Fl_Native_File_Chooser::BROWSE_SAVE_FILE);
+ fnfc.options(Fl_Native_File_Chooser::SAVEAS_CONFIRM | Fl_Native_File_Chooser::USE_FILTER_EXT);
+ fnfc.filter("FLUID Layouts\t*.fll\n");
+ std::string filename = g_layout_list.filename_;
+ fnfc.directory(fl_filename_path(filename).c_str());
+ fnfc.preset_file(fl_filename_name(filename).c_str());
+ if (fnfc.show() != 0) return;
+ const char *new_filename = fnfc.filename();
+ if (!new_filename) return;
+ g_layout_list.filename_ = new_filename;
+ g_layout_list.save(new_filename);
+}
+
+static void cb_w_layout_menu_delete(Fl_Menu_*, void*) {
+ // remove the current suite
+
+ g_layout_list.remove(g_layout_list.current_suite());
+ g_layout_list.update_dialogs();
+}
+
+Fl_Menu_Item menu_w_layout_menu[] = {
+ {"Rename...", 0, (Fl_Callback*)cb_w_layout_menu_rename, 0, 128, (uchar)FL_NORMAL_LABEL, 0, 14, 0},
+ {"@fd_beaker FLUID Built-In", 0, (Fl_Callback*)cb_w_layout_menu_storage, 0, 9, (uchar)FL_NORMAL_LABEL, 0, 14, 0},
+ {"@fd_user User Preference", 0, (Fl_Callback*)cb_w_layout_menu_storage1, 0, 8, (uchar)FL_NORMAL_LABEL, 0, 14, 0},
+ {"@fd_project Store in .fl Project File", 0, (Fl_Callback*)cb_w_layout_menu_storage2, 0, 8, (uchar)FL_NORMAL_LABEL, 0, 14, 0},
+ {"@fd_file Store in External File", 0, (Fl_Callback*)cb_w_layout_menu_storage3, 0, 136, (uchar)FL_NORMAL_LABEL, 0, 14, 0},
+ {"Load...", 0, (Fl_Callback*)cb_w_layout_menu_load, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 14, 0},
+ {"Save...", 0, (Fl_Callback*)cb_w_layout_menu_save, 0, 128, (uchar)FL_NORMAL_LABEL, 0, 14, 0},
+ {"Delete", 0, (Fl_Callback*)cb_w_layout_menu_delete, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 14, 0},
+ {0,0,0,0,0,0,0,0,0}
+};
+
+Fl_Button *preset_choice[3]={(Fl_Button *)0};
+
+static void cb_Left(Fl_Value_Input* o, void* v) {
+ if (v == LOAD) {
+ o->value((double)layout->left_window_margin);
+ } else {
+ layout->left_window_margin = (int)o->value();
+ }
+}
+
+static void cb_Top(Fl_Value_Input* o, void* v) {
+ if (v == LOAD) {
+ o->value((double)layout->top_window_margin);
+ } else {
+ layout->top_window_margin = (int)o->value();
+ }
+}
+
+static void cb_Right(Fl_Value_Input* o, void* v) {
+ if (v == LOAD) {
+ o->value((double)layout->right_window_margin);
+ } else {
+ layout->right_window_margin = (int)o->value();
+ }
+}
+
+static void cb_Bottom(Fl_Value_Input* o, void* v) {
+ if (v == LOAD) {
+ o->value((double)layout->bottom_window_margin);
+ } else {
+ layout->bottom_window_margin = (int)o->value();
+ }
+}
+
+static void cb_Horizontal(Fl_Value_Input* o, void* v) {
+ if (v == LOAD) {
+ o->value((double)layout->window_grid_x);
+ } else {
+ layout->window_grid_x = (int)o->value();
+ }
+}
+
+static void cb_Vertical(Fl_Value_Input* o, void* v) {
+ if (v == LOAD) {
+ o->value((double)layout->window_grid_y);
+ } else {
+ layout->window_grid_y = (int)o->value();
+ }
+}
+
+static void cb_Left1(Fl_Value_Input* o, void* v) {
+ if (v == LOAD) {
+ o->value((double)layout->left_group_margin);
+ } else {
+ layout->left_group_margin = (int)o->value();
+ }
+}
+
+static void cb_Top1(Fl_Value_Input* o, void* v) {
+ if (v == LOAD) {
+ o->value((double)layout->top_group_margin);
+ } else {
+ layout->top_group_margin = (int)o->value();
+ }
+}
+
+static void cb_Right1(Fl_Value_Input* o, void* v) {
+ if (v == LOAD) {
+ o->value((double)layout->right_group_margin);
+ } else {
+ layout->right_group_margin = (int)o->value();
+ }
+}
+
+static void cb_Bottom1(Fl_Value_Input* o, void* v) {
+ if (v == LOAD) {
+ o->value((double)layout->bottom_group_margin);
+ } else {
+ layout->bottom_group_margin = (int)o->value();
+ }
+}
+
+static void cb_Horizontal1(Fl_Value_Input* o, void* v) {
+ if (v == LOAD) {
+ o->value((double)layout->group_grid_x);
+ } else {
+ layout->group_grid_x = (int)o->value();
+ }
+}
+
+static void cb_Vertical1(Fl_Value_Input* o, void* v) {
+ if (v == LOAD) {
+ o->value((double)layout->group_grid_y);
+ } else {
+ layout->group_grid_y = (int)o->value();
+ }
+}
+
+static void cb_Top2(Fl_Value_Input* o, void* v) {
+ if (v == LOAD) {
+ o->value((double)layout->top_tabs_margin);
+ } else {
+ layout->top_tabs_margin = (int)o->value();
+ }
+}
+
+static void cb_Bottom2(Fl_Value_Input* o, void* v) {
+ if (v == LOAD) {
+ o->value((double)layout->bottom_tabs_margin);
+ } else {
+ layout->bottom_tabs_margin = (int)o->value();
+ }
+}
+
+static void cb_Minimum(Fl_Value_Input* o, void* v) {
+ if (v == LOAD) {
+ o->value((double)layout->widget_min_w);
+ } else {
+ layout->widget_min_w = (int)o->value();
+ }
+}
+
+static void cb_Increment(Fl_Value_Input* o, void* v) {
+ if (v == LOAD) {
+ o->value((double)layout->widget_inc_w);
+ } else {
+ layout->widget_inc_w = (int)o->value();
+ }
+}
+
+static void cb_Gap(Fl_Value_Input* o, void* v) {
+ if (v == LOAD) {
+ o->value((double)layout->widget_gap_x);
+ } else {
+ layout->widget_gap_x = (int)o->value();
+ }
+}
+
+static void cb_3(Fl_Value_Input* o, void* v) {
+ if (v == LOAD) {
+ o->value((double)layout->widget_min_h);
+ } else {
+ layout->widget_min_h = (int)o->value();
+ }
+}
+
+static void cb_4(Fl_Value_Input* o, void* v) {
+ if (v == LOAD) {
+ o->value((double)layout->widget_inc_h);
+ } else {
+ layout->widget_inc_h = (int)o->value();
+ }
+}
+
+static void cb_5(Fl_Value_Input* o, void* v) {
+ if (v == LOAD) {
+ o->value((double)layout->widget_gap_y);
+ } else {
+ layout->widget_gap_y = (int)o->value();
+ }
+}
+
+static void cb_6(Fl_Choice* o, void* v) {
+ if (v == LOAD) {
+ o->value(layout->labelfont+1);
+ } else {
+ layout->labelfont = (int)o->value()-1;
+ }
+}
+
+static void cb_7(Fl_Value_Input* o, void* v) {
+ if (v == LOAD) {
+ o->value(layout->labelsize);
+ } else {
+ layout->labelsize = (int)o->value();
+ }
+}
+
+static void cb_8(Fl_Choice* o, void* v) {
+ if (v == LOAD) {
+ o->value(layout->textfont+1);
+ } else {
+ layout->textfont = (int)o->value()-1;
+ }
+}
+
+static void cb_9(Fl_Value_Input* o, void* v) {
+ if (v == LOAD) {
+ o->value(layout->textsize);
+ } else {
+ layout->textsize = (int)o->value();
+ }
+}
+
+Fl_Group *w_settings_shell_tab=(Fl_Group *)0;
+
+static const unsigned char idata_shell_64[] =
+{137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,96,0,0,0,64,8,4,0,0,0,
+79,61,186,133,0,0,2,233,73,68,65,84,104,222,237,154,207,107,19,65,20,199,63,
+155,196,70,235,161,154,149,104,165,148,170,104,127,252,3,30,5,43,69,130,55,15,
+222,234,77,65,240,34,182,1,127,28,2,189,181,9,120,16,244,82,240,32,210,179,162,
+69,241,170,30,196,91,107,171,208,218,94,26,161,77,218,131,182,49,38,245,80,77,
+118,67,205,254,152,113,102,87,242,114,217,101,194,240,253,236,188,247,102,230,
+205,128,179,181,145,97,141,10,219,10,127,21,86,201,208,134,4,139,49,165,88,124,
+29,98,146,152,56,64,70,147,252,29,132,180,147,60,195,17,96,141,4,250,236,43,71,
+68,1,42,68,118,30,246,18,87,164,122,163,254,88,37,42,10,176,253,71,126,134,30,
+170,10,228,71,248,98,245,28,195,41,68,93,90,156,110,78,40,26,129,170,39,220,144,
+91,11,64,183,185,142,129,18,203,68,20,5,241,178,135,127,187,206,66,245,52,106,
+73,114,116,252,19,132,18,91,174,21,122,0,208,100,70,43,136,255,147,32,134,33,
+14,42,241,39,131,34,47,229,3,36,184,78,159,34,128,57,222,83,144,63,2,237,236,
+87,228,22,237,173,153,184,5,16,200,44,100,223,114,124,96,157,227,12,176,39,140,
+0,155,60,102,12,56,198,109,206,201,41,29,168,117,161,60,83,0,44,114,135,87,
+252,8,31,128,81,27,184,60,119,53,35,248,2,56,204,69,203,104,232,69,240,5,176,
+143,75,140,4,4,193,103,26,53,25,14,8,130,239,121,32,40,8,2,19,89,48,16,132,102,
+226,32,32,8,46,37,244,35,8,175,133,116,35,72,88,204,153,12,115,211,134,240,154,
+114,184,86,163,38,151,109,163,48,198,76,216,150,211,118,71,90,100,154,205,176,
+237,7,76,134,45,69,241,55,172,135,111,67,99,114,186,182,155,45,11,22,33,11,58,0,
+62,241,136,239,181,26,134,170,141,78,76,158,252,44,79,107,111,131,202,14,214,
+36,1,204,147,179,200,79,49,40,239,203,168,0,152,39,203,179,218,219,16,55,232,
+14,250,166,222,106,115,228,108,242,71,233,119,81,244,14,12,192,28,19,60,183,
+200,79,211,167,80,190,112,22,250,104,147,127,94,154,252,132,154,17,152,37,103,
+147,63,74,175,210,175,47,8,48,203,4,211,154,229,11,0,204,144,109,42,191,76,201,
+67,111,113,223,19,95,204,175,252,113,203,33,68,138,17,78,217,228,127,230,5,75,
+84,92,246,22,165,135,148,207,123,0,190,0,10,76,54,200,239,109,104,127,192,19,
+143,125,46,113,203,215,236,237,43,11,21,121,215,68,190,189,221,173,189,165,168,
+46,141,182,211,245,251,233,194,46,242,173,237,238,173,203,211,185,140,160,11,
+37,185,194,79,22,57,203,85,78,254,181,125,222,67,143,253,92,35,169,14,32,202,
+25,6,248,198,33,14,52,105,223,112,125,36,104,208,65,210,233,102,147,220,44,20,
+163,211,177,189,51,108,59,50,61,214,2,208,109,174,99,160,192,130,178,251,66,11,
+214,235,54,142,9,192,201,42,205,71,41,33,161,178,208,216,199,86,173,56,32,227,
+218,229,42,166,70,15,89,225,168,104,12,220,87,226,55,187,91,149,123,50,162,100,
+82,219,229,239,135,114,138,14,109,164,201,83,85,44,126,133,81,55,103,232,191,0,
+145,21,211,195,226,88,204,195,0,0,0,0,73,69,78,68,174,66,96,130};
+static Fl_Image *image_shell_64() {
+ static Fl_Image *image = NULL;
+ if (!image)
+ image = new Fl_PNG_Image("shell_64.png", idata_shell_64, 802);
+ return image;
+}
+
+Fl_Browser *w_settings_shell_list=(Fl_Browser *)0;
+
+static void cb_w_settings_shell_list(Fl_Browser* o, void* v) {
+ if (v == LOAD) {
+ // load from g_shell_config
+ if (g_shell_config) {
+ o->clear();
+ w_settings_shell_list_selected = 0;
+ for (int i=0; i<g_shell_config->list_size; i++) {
+ Fd_Shell_Command *cmd = g_shell_config->list[i];
+ o->add(cmd->name.c_str());
+ if (cmd->storage == FD_STORE_USER)
+ o->icon(i+1, w_settings_shell_fd_user->image());
+ else if (cmd->storage == FD_STORE_PROJECT)
+ o->icon(i+1, w_settings_shell_fd_project->image());
+ }
+ }
+ } else {
+ // int prev_selected = w_settings_shell_list_selected;
+ w_settings_shell_list_selected = 0;
+ int selected = w_settings_shell_list->value();
+ if (selected) {
+ if (w_settings_shell_list->selected(selected))
+ w_settings_shell_list_selected = selected;
+ }
+ w_settings_shell_cmd->do_callback(w_settings_shell_cmd, LOAD);
+ w_settings_shell_toolbox->do_callback(w_settings_shell_toolbox, LOAD);
+ }
+}
+
+Fl_Group *w_settings_shell_toolbox=(Fl_Group *)0;
+
+static void cb_w_settings_shell_toolbox(Fl_Group* o, void* v) {
+ if (v==LOAD) {
+ propagate_load(o, v);
+ }
+}
+
+static void cb_a(Fl_Button*, void* v) {
+ if (v != LOAD) {
+ int selected = w_settings_shell_list_selected;
+ Fd_Shell_Command *cmd = new Fd_Shell_Command("new shell command");
+ g_shell_config->insert(selected, cmd);
+ w_settings_shell_list->insert(selected+1, cmd->name.c_str());
+ w_settings_shell_list->deselect();
+ w_settings_shell_list->value(selected+1);
+ if (cmd->storage == FD_STORE_USER) {
+ w_settings_shell_list->icon(selected+1, w_settings_shell_fd_user->image());
+ } else if (cmd->storage == FD_STORE_PROJECT) {
+ w_settings_shell_list->icon(selected+1, w_settings_shell_fd_project->image());
+ set_modflag(1);
+ }
+ w_settings_shell_list->do_callback();
+ w_settings_shell_cmd->do_callback(w_settings_shell_cmd, LOAD);
+ w_settings_shell_toolbox->do_callback(w_settings_shell_toolbox, LOAD);
+ g_shell_config->rebuild_shell_menu();
+ }
+}
+
+Fl_Button *w_settings_shell_dup=(Fl_Button *)0;
+
+static void cb_w_settings_shell_dup(Fl_Button* o, void* v) {
+ int selected = w_settings_shell_list_selected;
+ if (v==LOAD) {
+ if (selected) {
+ o->activate();
+ } else {
+ o->deactivate();
+ }
+ } else {
+ if (!selected) return;
+ Fd_Shell_Command *cmd = new Fd_Shell_Command(g_shell_config->list[selected-1]);
+ g_shell_config->insert(selected, cmd);
+ w_settings_shell_list->insert(selected+1, cmd->name.c_str());
+ w_settings_shell_list->deselect();
+ w_settings_shell_list->value(selected+1);
+ if (cmd->storage == FD_STORE_USER) {
+ w_settings_shell_list->icon(selected+1, w_settings_shell_fd_user->image());
+ } else if (cmd->storage == FD_STORE_PROJECT) {
+ w_settings_shell_list->icon(selected+1, w_settings_shell_fd_project->image());
+ set_modflag(1);
+ }
+ w_settings_shell_list->do_callback();
+ w_settings_shell_cmd->do_callback(w_settings_shell_cmd, LOAD);
+ w_settings_shell_toolbox->do_callback(w_settings_shell_toolbox, LOAD);
+ g_shell_config->rebuild_shell_menu();
+ }
+}
+
+Fl_Button *w_settings_shell_remove=(Fl_Button *)0;
+
+static void cb_w_settings_shell_remove(Fl_Button* o, void* v) {
+ int selected = w_settings_shell_list_selected;
+ if (v==LOAD) {
+ if (selected) {
+ o->activate();
+ } else {
+ o->deactivate();
+ }
+ } else {
+ if (!selected) return;
+ int ret = fl_choice("Delete the shell command\n\"%s\"?\n\nThis can not be undone.",
+ "Delete", "Cancel", NULL, g_shell_config->list[selected-1]->name.c_str());
+ if (ret==1) return;
+ if (g_shell_config->at(selected-1)->storage == FD_STORE_PROJECT) set_modflag(1);
+ g_shell_config->remove(selected-1);
+ w_settings_shell_list->remove(selected);
+ if (selected <= w_settings_shell_list->size())
+ w_settings_shell_list->value(selected);
+ else
+ w_settings_shell_list->value(0);
+ w_settings_shell_list->do_callback();
+ w_settings_shell_cmd->do_callback(w_settings_shell_cmd, LOAD);
+ w_settings_shell_toolbox->do_callback(w_settings_shell_toolbox, LOAD);
+ g_shell_config->rebuild_shell_menu();
+ }
+}
+
+Fl_Menu_Button *w_settings_shell_menu=(Fl_Menu_Button *)0;
+
+static void cb_Import(Fl_Menu_*, void* v) {
+ if (v != LOAD)
+ Fd_Shell_Command_List::import_from_file();
+}
+
+static void cb_Export(Fl_Menu_*, void* v) {
+ if (v != LOAD)
+ Fd_Shell_Command_List::export_selected();
+}
+
+Fl_Menu_Item menu_w_settings_shell_menu[] = {
+ {"Import...", 0, (Fl_Callback*)cb_Import, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
+ {"Export selected...", 0, (Fl_Callback*)cb_Export, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
+ {"Example Scripts:", 0, 0, 0, 17, (uchar)FL_NORMAL_LABEL, 1, 10, 0},
+ {"Compile with fltk-config", 0, 0, 0, 16, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
+ {"Build and run", 0, 0, 0, 16, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
+ {"Build with Xcode on macOS", 0, 0, 0, 16, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
+ {"Build with CMake", 0, 0, 0, 16, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
+ {0,0,0,0,0,0,0,0,0}
+};
+
+static void cb_T(Fl_Button*, void* v) {
+ if (v!=LOAD) show_terminal_window();
+}
+
+Fl_Button *w_settings_shell_play=(Fl_Button *)0;
+
+static void cb_w_settings_shell_play(Fl_Button* o, void* v) {
+ int selected = w_settings_shell_list_selected;
+ if (v==LOAD) {
+ if (selected) {
+ o->activate();
+ } else {
+ o->deactivate();
+ }
+ } else {
+ if (!selected) return;
+ Fd_Shell_Command *cmd = g_shell_config->list[selected-1];
+ cmd->run();
+ }
+}
+
+Fl_Group *w_settings_shell_cmd=(Fl_Group *)0;
+
+static void cb_w_settings_shell_cmd(Fl_Group* o, void* v) {
+ if (v==LOAD) {
+ int selected = w_settings_shell_list_selected;
+ if (selected) {
+ o->activate();
+ } else {
+ o->deactivate();
+ }
+ propagate_load(o, v);
+ }
+}
+
+static void cb_Name(Fl_Input* o, void* v) {
+ int selected = w_settings_shell_list_selected;
+ if (v == LOAD) {
+ if (selected) {
+ o->value(g_shell_config->list[selected-1]->name.c_str());
+ } else {
+ o->value("");
+ }
+ } else {
+ if (selected) {
+ Fd_Shell_Command *cmd = g_shell_config->list[selected-1];
+ cmd->name = o->value();
+ w_settings_shell_list->text(selected, o->value());
+ if (cmd->storage == FD_STORE_PROJECT) set_modflag(1);
+ }
+ }
+}
+
+static void cb_Menu(Fl_Input* o, void* v) {
+ int selected = w_settings_shell_list_selected;
+ if (v == LOAD) {
+ if (selected) {
+ o->value(g_shell_config->list[selected-1]->label.c_str());
+ } else {
+ o->value("");
+ }
+ } else {
+ if (selected) {
+ Fd_Shell_Command *cmd = g_shell_config->list[selected-1];
+ cmd->label = o->value();
+ cmd->update_shell_menu();
+ if (cmd->storage == FD_STORE_PROJECT) set_modflag(1);
+ }
+ }
+}
+
+static void cb_b(Fl_Group* o, void* v) {
+ propagate_load(o, v);
+}
+
+static void cb_Shortcut(Fl_Shortcut_Button* o, void* v) {
+ int selected = w_settings_shell_list_selected;
+ if (v == LOAD) {
+ if (selected) {
+ o->value(g_shell_config->list[selected-1]->shortcut);
+ //o->default_value(o->value());
+ } else {
+ o->value(0);
+ }
+ } else {
+ if (selected) {
+ Fd_Shell_Command *cmd = g_shell_config->list[selected-1];
+ cmd->shortcut = o->value();
+ cmd->update_shell_menu();
+ if (cmd->storage == FD_STORE_PROJECT) set_modflag(1);
+ }
+ }
+}
+
+static void cb_Store(Fl_Choice* o, void* v) {
+ int selected = w_settings_shell_list_selected;
+ if (v == LOAD) {
+ if (selected) {
+ Fd_Tool_Store ts = g_shell_config->list[selected-1]->storage;
+ o->value(o->find_item_with_argument((long)ts));
+ } else {
+ o->value(o->find_item_with_argument((long)FD_STORE_USER));
+ }
+ } else {
+ if (selected) {
+ Fd_Shell_Command *cmd = g_shell_config->list[selected-1];
+ Fd_Tool_Store ts = (Fd_Tool_Store)(o->mvalue()->argument());
+ if (cmd->storage == FD_STORE_PROJECT) set_modflag(1);
+ cmd->storage = ts;
+ //w_settings_shell_list->text(selected, cmd->name.c_str());
+ if (cmd->storage == FD_STORE_USER)
+ w_settings_shell_list->icon(selected, w_settings_shell_fd_user->image());
+ else if (cmd->storage == FD_STORE_PROJECT)
+ w_settings_shell_list->icon(selected, w_settings_shell_fd_project->image());
+ if (cmd->storage == FD_STORE_PROJECT) set_modflag(1);
+ }
+ }
+}
+
+Fl_Menu_Item menu_Store[] = {
+ {"@fd_user User Setting", 0, 0, (void*)(FD_STORE_USER), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
+ {"@fd_project Project File", 0, 0, (void*)(FD_STORE_PROJECT), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
+ {0,0,0,0,0,0,0,0,0}
+};
+
+static void cb_Condition(Fl_Choice* o, void* v) {
+ int selected = w_settings_shell_list_selected;
+ if (v == LOAD) {
+ if (selected) {
+ int cond = g_shell_config->list[selected-1]->condition;
+ o->value(o->find_item_with_argument(cond));
+ } else {
+ o->value(o->find_item_with_argument(0));
+ }
+ } else {
+ if (selected) {
+ Fd_Shell_Command *cmd = g_shell_config->list[selected-1];
+ int cond = (int)(o->mvalue()->argument());
+ cmd->condition = cond;
+ g_shell_config->rebuild_shell_menu();
+ if (cmd->storage == FD_STORE_PROJECT) set_modflag(1);
+ }
+ }
+}
+
+Fl_Menu_Item menu_Condition[] = {
+ {"all platforms", 0, 0, (void*)(Fd_Shell_Command::ALWAYS), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
+ {"Windows only", 0, 0, (void*)(Fd_Shell_Command::WIN_ONLY), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
+ {"Linux only", 0, 0, (void*)(Fd_Shell_Command::UX_ONLY), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
+ {"macOS only", 0, 0, (void*)(Fd_Shell_Command::MAC_ONLY), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
+ {"Linux and macOS", 0, 0, (void*)(Fd_Shell_Command::MAC_AND_UX_ONLY), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
+ {"don\'t use", 0, 0, (void*)(Fd_Shell_Command::NEVER), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
+ {0,0,0,0,0,0,0,0,0}
+};
+
+static void cb_Label(Fl_Input* o, void* v) {
+ if (v == LOAD) {
+ // o->value(g_shell_command.c_str());
+ } else {
+ // g_shell_command = o->value();
+ }
+}
+
+Fl_Text_Editor *w_settings_shell_command=(Fl_Text_Editor *)0;
+
+static void cb_w_settings_shell_command(Fl_Text_Editor* o, void* v) {
+ int selected = w_settings_shell_list_selected;
+ if (v == LOAD) {
+ if (selected) {
+ o->buffer()->text(g_shell_config->list[selected-1]->command.c_str());
+ } else {
+ o->buffer()->text("");
+ }
+ } else {
+ if (selected) {
+ Fd_Shell_Command *cmd = g_shell_config->list[selected-1];
+ cmd->command = o->buffer()->text();
+ if (cmd->storage == FD_STORE_PROJECT) set_modflag(1);
+ }
+ }
+}
+
+Fl_Menu_Button *w_settings_shell_text_macros=(Fl_Menu_Button *)0;
+
+static void cb_w_settings_shell_text_macros(Fl_Menu_Button* o, void*) {
+ const Fl_Menu_Item *mi = o->mvalue();
+ if (mi) {
+ char buffer[256];
+ fl_strlcpy(buffer, mi->label(), 255);
+ int n = (int)strlen(buffer)-1;
+ if (buffer[n]=='@') buffer[n] = 0;
+ char *word = buffer;
+ if (word[0]=='@') word++;
+ if (w_settings_shell_command->buffer()->selected()) {
+ int start = 0, end = 0;
+ w_settings_shell_command->buffer()->selection_position(&start, &end);
+ w_settings_shell_command->buffer()->replace(start, end, word);
+ } else {
+ int pos = w_settings_shell_command->insert_position();
+ w_settings_shell_command->buffer()->insert(pos, word);
+ }
+ w_settings_shell_command->do_callback(w_settings_shell_command, (void*)NULL);
+ }
+}
+
+Fl_Menu_Item menu_w_settings_shell_text_macros[] = {
+ {"@@BASENAME@@", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 4, 11, 0},
+ {"@@PROJECTFILE_PATH@@", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 4, 11, 0},
+ {"@@PROJECTFILE_NAME@@", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 4, 11, 0},
+ {"@@CODEFILE_PATH@@", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 4, 11, 0},
+ {"@@CODEFILE_NAME@@", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 4, 11, 0},
+ {"@@HEADERFILE_PATH@@", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 4, 11, 0},
+ {"@@HEADERFILE_NAME@@", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 4, 11, 0},
+ {"@@TEXTFILE_PATH@@", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 4, 11, 0},
+ {"@@TEXTFILE_NAME@@", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 4, 11, 0},
+ // Not yet implemented
+ {"@@FLTK_CONFIG@@", 0, 0, 0, 16, (uchar)FL_NORMAL_LABEL, 4, 11, 0},
+ {"@@TMPDIR@@", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 4, 11, 0},
+ {0,0,0,0,0,0,0,0,0}
+};
+
+static void cb_1fd_zoom(Fl_Button*, void*) {
+ if (!script_panel) make_script_panel();
+ script_input->buffer()->text(w_settings_shell_command->buffer()->text());
+ script_panel->show();
+
+ for (;;) {
+ Fl_Widget* w = Fl::readqueue();
+ if (w == script_panel_cancel) goto BREAK2;
+ else if (w == script_panel_ok) break;
+ else if (!w) Fl::wait();
+ }
+
+ w_settings_shell_command->buffer()->text(script_input->buffer()->text());
+ w_settings_shell_command->do_callback();
+ BREAK2:
+ script_panel->hide();
+}
+
+static void cb_save(Fl_Check_Button* o, void* v) {
+ int selected = w_settings_shell_list_selected;
+ if (v == LOAD) {
+ if (selected) {
+ o->value(g_shell_config->list[selected-1]->flags & Fd_Shell_Command::SAVE_PROJECT);
+ } else {
+ o->value(0);
+ }
+ } else {
+ if (selected) {
+ Fd_Shell_Command *cmd = g_shell_config->list[selected-1];
+ int v = o->value();
+ if (v) {
+ cmd->flags |= Fd_Shell_Command::SAVE_PROJECT;
+ } else {
+ cmd->flags &= ~Fd_Shell_Command::SAVE_PROJECT;
+ }
+ if (cmd->storage == FD_STORE_PROJECT) set_modflag(1);
+ }
+ }
+}
+
+static void cb_save1(Fl_Check_Button* o, void* v) {
+ int selected = w_settings_shell_list_selected;
+ if (v == LOAD) {
+ if (selected) {
+ o->value(g_shell_config->list[selected-1]->flags & Fd_Shell_Command::SAVE_SOURCECODE);
+ } else {
+ o->value(0);
+ }
+ } else {
+ if (selected) {
+ Fd_Shell_Command *cmd = g_shell_config->list[selected-1];
+ int v = o->value();
+ if (v) {
+ cmd->flags |= Fd_Shell_Command::SAVE_SOURCECODE;
+ } else {
+ cmd->flags &= ~Fd_Shell_Command::SAVE_SOURCECODE;
+ }
+ if (cmd->storage == FD_STORE_PROJECT) set_modflag(1);
+ }
+ }
+}
+
+static void cb_save2(Fl_Check_Button* o, void* v) {
+ int selected = w_settings_shell_list_selected;
+ if (v == LOAD) {
+ if (selected) {
+ o->value(g_shell_config->list[selected-1]->flags & Fd_Shell_Command::SAVE_STRINGS);
+ } else {
+ o->value(0);
+ }
+ } else {
+ if (selected) {
+ Fd_Shell_Command *cmd = g_shell_config->list[selected-1];
+ int v = o->value();
+ if (v) {
+ cmd->flags |= Fd_Shell_Command::SAVE_STRINGS;
+ } else {
+ cmd->flags &= ~Fd_Shell_Command::SAVE_STRINGS;
+ }
+ if (cmd->storage == FD_STORE_PROJECT) set_modflag(1);
+ }
+ }
+}
+
+static void cb_show(Fl_Check_Button* o, void* v) {
+ int selected = w_settings_shell_list_selected;
+ if (v == LOAD) {
+ if (selected) {
+ o->value(!(g_shell_config->list[selected-1]->flags & Fd_Shell_Command::DONT_SHOW_TERMINAL));
+ } else {
+ o->value(0);
+ }
+ } else {
+ if (selected) {
+ Fd_Shell_Command *cmd = g_shell_config->list[selected-1];
+ int v = o->value();
+ if (!v) {
+ cmd->flags |= Fd_Shell_Command::DONT_SHOW_TERMINAL;
+ } else {
+ cmd->flags &= ~Fd_Shell_Command::DONT_SHOW_TERMINAL;
+ }
+ if (cmd->storage == FD_STORE_PROJECT) set_modflag(1);
+ }
+ }
+}
+
+static void cb_clear(Fl_Check_Button* o, void* v) {
+ int selected = w_settings_shell_list_selected;
+ if (v == LOAD) {
+ if (selected) {
+ o->value(g_shell_config->list[selected-1]->flags & Fd_Shell_Command::CLEAR_TERMINAL);
+ } else {
+ o->value(0);
+ }
+ } else {
+ if (selected) {
+ Fd_Shell_Command *cmd = g_shell_config->list[selected-1];
+ int v = o->value();
+ if (v) {
+ cmd->flags |= Fd_Shell_Command::CLEAR_TERMINAL;
+ } else {
+ cmd->flags &= ~Fd_Shell_Command::CLEAR_TERMINAL;
+ }
+ if (cmd->storage == FD_STORE_PROJECT) set_modflag(1);
+ }
+ }
+}
+
+static void cb_clear1(Fl_Check_Button* o, void* v) {
+ int selected = w_settings_shell_list_selected;
+ if (v == LOAD) {
+ if (selected) {
+ o->value(g_shell_config->list[selected-1]->flags & Fd_Shell_Command::CLEAR_HISTORY);
+ } else {
+ o->value(0);
+ }
+ } else {
+ if (selected) {
+ Fd_Shell_Command *cmd = g_shell_config->list[selected-1];
+ int v = o->value();
+ if (v) {
+ cmd->flags |= Fd_Shell_Command::CLEAR_HISTORY;
+ } else {
+ cmd->flags &= ~Fd_Shell_Command::CLEAR_HISTORY;
+ }
+ if (cmd->storage == FD_STORE_PROJECT) set_modflag(1);
+ }
+ }
+}
+
+Fl_Box *w_settings_shell_fd_project=(Fl_Box *)0;
+
+static const unsigned char idata_fd_project[] =
+{137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,
+115,122,122,244,0,0,1,110,105,67,67,80,105,99,99,0,0,40,145,117,145,187,75,195,
+80,20,198,127,173,239,23,14,58,136,116,200,80,197,65,65,20,196,81,235,208,165,
+72,169,21,172,186,180,49,109,133,164,13,73,139,136,171,224,226,80,112,16,93,
+124,13,254,7,186,10,174,10,130,160,8,34,110,238,190,22,145,120,174,45,180,136,
+189,225,230,252,248,238,253,14,39,95,192,31,49,117,203,109,156,2,43,87,112,98,
+225,144,182,144,88,212,90,94,104,163,153,46,2,244,39,117,215,158,142,70,35,212,
+93,159,119,248,84,189,29,81,189,234,223,251,119,117,172,24,174,14,190,86,225,9,
+221,118,10,194,50,13,145,181,130,173,120,91,184,87,207,38,87,132,15,133,135,29,
+25,80,248,74,233,169,50,63,43,206,148,249,93,177,19,143,205,128,95,245,212,50,
+53,156,170,97,61,235,88,194,67,194,65,203,44,234,149,121,212,151,116,26,185,
+249,57,169,253,178,3,184,196,8,19,66,35,69,145,85,76,10,140,72,205,73,102,255,
+251,70,127,125,179,228,197,163,203,219,102,29,71,28,25,178,226,29,22,181,40,93,
+13,169,105,209,13,121,76,214,85,238,127,243,116,211,227,99,229,238,157,33,104,
+122,242,188,183,1,104,217,129,239,146,231,125,29,121,222,247,49,52,60,194,69,
+174,234,207,75,78,147,31,162,151,170,90,240,0,186,55,225,236,178,170,165,118,
+225,124,11,250,30,236,164,147,252,149,26,100,251,211,105,120,61,133,174,4,244,
+220,64,251,82,57,171,202,57,39,247,16,223,144,95,116,13,123,251,48,40,247,187,
+151,127,0,229,44,103,253,189,250,32,75,0,0,0,9,112,72,89,115,0,0,22,37,0,0,22,
+37,1,73,82,36,240,0,0,1,13,116,69,88,116,82,97,119,32,112,114,111,102,105,108,
+101,32,116,121,112,101,32,101,120,105,102,0,10,101,120,105,102,10,32,32,32,32,
+32,49,49,52,10,52,53,55,56,54,57,54,54,48,48,48,48,52,57,52,57,50,97,48,48,48,
+56,48,48,48,48,48,48,48,52,48,48,49,97,48,49,48,53,48,48,48,49,48,48,48,48,48,
+48,51,101,48,48,48,48,48,48,49,98,48,49,48,53,48,48,48,49,48,48,48,48,48,48,10,
+52,54,48,48,48,48,48,48,50,56,48,49,48,51,48,48,48,49,48,48,48,48,48,48,48,50,
+48,48,48,48,48,48,54,57,56,55,48,52,48,48,48,49,48,48,48,48,48,48,52,101,48,48,
+48,48,48,48,48,48,48,48,48,48,48,48,57,48,48,48,48,48,48,48,10,48,49,48,48,48,
+48,48,48,57,48,48,48,48,48,48,48,48,49,48,48,48,48,48,48,48,50,48,48,48,50,97,
+48,48,52,48,48,48,49,48,48,48,48,48,48,53,50,48,48,48,48,48,48,48,51,97,48,48,
+52,48,48,48,49,48,48,48,48,48,48,56,48,48,48,10,48,48,48,48,48,48,48,48,48,48,
+48,48,10,190,225,144,105,0,0,0,90,116,69,88,116,82,97,119,32,112,114,111,102,
+105,108,101,32,116,121,112,101,32,105,112,116,99,0,10,105,112,116,99,10,32,32,
+32,32,32,32,50,54,10,53,48,54,56,54,102,55,52,54,102,55,51,54,56,54,102,55,48,
+50,48,51,51,50,101,51,48,48,48,51,56,52,50,52,57,52,100,48,52,48,52,48,48,48,
+48,48,48,48,48,48,48,48,48,10,199,209,105,220,0,0,20,96,116,69,88,116,82,97,
+119,32,112,114,111,102,105,108,101,32,116,121,112,101,32,120,109,112,0,10,120,
+109,112,10,32,32,32,32,50,53,53,53,10,51,99,51,102,55,56,55,48,54,49,54,51,54,
+98,54,53,55,52,50,48,54,50,54,53,54,55,54,57,54,101,51,100,50,50,101,102,98,98,
+98,102,50,50,50,48,54,57,54,52,51,100,50,50,53,55,51,53,52,100,51,48,52,100,55,
+48,52,51,54,53,54,56,54,57,10,52,56,55,97,55,50,54,53,53,51,55,97,52,101,53,52,
+54,51,55,97,54,98,54,51,51,57,54,52,50,50,51,102,51,101,48,97,51,99,55,56,51,
+97,55,56,54,100,55,48,54,100,54,53,55,52,54,49,50,48,55,56,54,100,54,99,54,101,
+55,51,51,97,55,56,10,51,100,50,50,54,49,54,52,54,102,54,50,54,53,51,97,54,101,
+55,51,51,97,54,100,54,53,55,52,54,49,50,102,50,50,50,48,55,56,51,97,55,56,54,
+100,55,48,55,52,54,98,51,100,50,50,53,56,52,100,53,48,50,48,52,51,54,102,55,50,
+54,53,50,48,10,51,52,50,101,51,52,50,101,51,48,50,100,52,53,55,56,54,57,55,54,
+51,50,50,50,51,101,48,97,50,48,51,99,55,50,54,52,54,54,51,97,53,50,52,52,52,54,
+50,48,55,56,54,100,54,99,54,101,55,51,51,97,55,50,54,52,54,54,51,100,50,50,54,
+56,10,55,52,55,52,55,48,51,97,50,102,50,102,55,55,55,55,55,55,50,101,55,55,51,
+51,50,101,54,102,55,50,54,55,50,102,51,49,51,57,51,57,51,57,50,102,51,48,51,50,
+50,102,51,50,51,50,50,100,55,50,54,52,54,54,50,100,55,51,55,57,54,101,55,52,10,
+54,49,55,56,50,100,54,101,55,51,50,51,50,50,51,101,48,97,50,48,50,48,51,99,55,
+50,54,52,54,54,51,97,52,52,54,53,55,51,54,51,55,50,54,57,55,48,55,52,54,57,54,
+102,54,101,50,48,55,50,54,52,54,54,51,97,54,49,54,50,54,102,55,53,10,55,52,51,
+100,50,50,50,50,48,97,50,48,50,48,50,48,50,48,55,56,54,100,54,99,54,101,55,51,
+51,97,54,53,55,56,54,57,54,54,51,100,50,50,54,56,55,52,55,52,55,48,51,97,50,
+102,50,102,54,101,55,51,50,101,54,49,54,52,54,102,54,50,54,53,10,50,101,54,51,
+54,102,54,100,50,102,54,53,55,56,54,57,54,54,50,102,51,49,50,101,51,48,50,102,
+50,50,48,97,50,48,50,48,50,48,50,48,55,56,54,100,54,99,54,101,55,51,51,97,55,
+52,54,57,54,54,54,54,51,100,50,50,54,56,55,52,55,52,55,48,10,51,97,50,102,50,
+102,54,101,55,51,50,101,54,49,54,52,54,102,54,50,54,53,50,101,54,51,54,102,54,
+100,50,102,55,52,54,57,54,54,54,54,50,102,51,49,50,101,51,48,50,102,50,50,48,97,
+50,48,50,48,50,48,54,53,55,56,54,57,54,54,51,97,53,48,10,54,57,55,56,54,53,54,
+99,53,56,52,52,54,57,54,100,54,53,54,101,55,51,54,57,54,102,54,101,51,100,50,
+50,51,56,51,50,50,50,48,97,50,48,50,48,50,48,54,53,55,56,54,57,54,54,51,97,53,
+48,54,57,55,56,54,53,54,99,53,57,52,52,54,57,10,54,100,54,53,54,101,55,51,54,
+57,54,102,54,101,51,100,50,50,51,49,51,50,51,56,50,50,48,97,50,48,50,48,50,48,
+55,52,54,57,54,54,54,54,51,97,53,50,54,53,55,51,54,102,54,99,55,53,55,52,54,57,
+54,102,54,101,53,53,54,101,54,57,55,52,10,51,100,50,50,51,50,50,50,48,97,50,48,
+50,48,50,48,55,52,54,57,54,54,54,54,51,97,53,57,53,50,54,53,55,51,54,102,54,99,
+55,53,55,52,54,57,54,102,54,101,51,100,50,50,51,49,51,52,51,52,50,48,50,102,50,
+48,51,49,50,50,48,97,50,48,10,50,48,50,48,55,52,54,57,54,54,54,54,51,97,53,56,
+53,50,54,53,55,51,54,102,54,99,55,53,55,52,54,57,54,102,54,101,51,100,50,50,51,
+49,51,52,51,52,50,48,50,102,50,48,51,49,50,50,50,102,51,101,48,97,50,48,51,99,
+50,102,55,50,54,52,10,54,54,51,97,53,50,52,52,52,54,51,101,48,97,51,99,50,102,
+55,56,51,97,55,56,54,100,55,48,54,100,54,53,55,52,54,49,51,101,48,97,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,48,97,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,48,97,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,48,97,50,48,10,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,48,97,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,48,97,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,48,97,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,48,
+97,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,48,97,10,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,48,97,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,48,97,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,48,97,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,48,97,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,10,48,97,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,48,97,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,48,
+97,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,48,97,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,48,97,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,48,97,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,48,97,50,48,50,48,50,48,50,48,50,48,10,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,48,97,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,48,97,51,99,51,102,55,56,55,48,54,49,
+54,51,54,98,54,53,55,52,50,48,54,53,54,101,54,52,51,100,50,50,55,55,50,50,51,
+102,51,101,10,87,123,188,247,0,0,3,115,73,68,65,84,88,71,189,151,75,75,91,65,20,
+199,79,110,222,169,52,180,203,22,186,239,210,47,80,236,206,126,5,177,17,151,46,
+68,23,82,220,138,90,84,116,163,184,80,81,132,98,93,234,42,203,210,79,209,149,
+32,213,68,164,165,165,129,230,97,94,246,252,166,157,246,246,102,154,132,230,
+226,31,134,59,247,204,153,243,158,123,207,68,206,206,206,164,86,171,73,52,26,
+149,68,34,17,175,84,42,215,123,123,123,15,119,118,118,164,23,26,141,134,164,211,
+105,243,28,29,29,149,229,229,229,183,177,88,236,101,171,213,106,235,83,154,205,
+166,120,158,39,145,72,196,12,23,188,106,181,42,201,100,82,110,111,111,69,149,55,
+246,247,247,139,187,187,187,102,209,110,252,215,200,100,50,162,202,12,111,62,
+159,151,211,211,211,49,85,252,70,135,231,212,230,64,44,149,74,201,205,205,141,
+196,227,113,97,174,222,84,48,102,102,102,70,230,230,230,186,110,110,183,219,178,
+177,177,33,219,219,219,198,129,133,133,5,188,30,27,31,31,71,78,78,89,90,93,5,40,
+60,60,32,92,8,168,215,235,120,86,96,129,148,244,138,0,70,219,208,142,140,140,
+144,66,89,89,89,145,163,163,163,49,221,255,90,195,31,65,62,60,200,7,240,48,39,
+53,198,0,187,96,94,126,230,43,195,28,239,122,129,189,150,111,120,120,88,22,23,
+23,13,109,105,105,73,142,143,143,95,169,242,247,42,51,107,249,144,79,202,49,
+136,186,1,198,0,191,17,186,88,177,194,123,1,239,134,134,134,76,228,152,79,78,78,
+202,250,250,186,137,232,218,218,154,156,156,156,60,211,72,92,43,235,115,60,247,
+43,166,238,128,137,67,192,136,102,183,170,245,3,30,45,92,227,25,74,121,78,76,
+76,152,72,112,2,168,137,195,195,195,148,210,223,169,226,23,208,40,92,210,203,
+201,3,158,205,15,33,98,232,60,101,22,188,222,133,108,235,135,90,64,40,239,200,
+154,154,154,50,17,96,190,185,185,73,77,80,224,121,93,127,130,62,12,97,15,48,6,
+88,101,254,72,244,19,1,194,138,48,242,74,26,108,152,145,145,203,229,76,65,226,
+212,234,234,170,28,28,28,96,228,71,235,168,69,44,24,110,221,156,237,39,255,22,
+40,197,155,173,173,45,115,36,153,147,22,66,205,241,198,57,140,164,54,74,165,82,
+99,122,122,250,47,71,141,235,129,40,164,131,133,249,47,16,242,96,85,227,29,133,
+201,187,149,107,63,116,58,10,24,131,209,22,158,221,4,51,2,117,67,201,127,110,
+187,1,190,249,249,121,185,188,188,148,98,177,40,87,87,87,102,126,126,126,110,
+230,133,66,65,46,46,46,100,118,118,214,242,127,192,32,127,10,92,149,246,217,65,
+11,11,159,130,4,151,1,53,7,45,44,60,8,18,92,6,60,114,208,194,66,35,72,112,25,
+80,113,208,194,66,50,72,112,25,240,205,65,11,11,55,65,194,93,167,160,175,8,68,
+29,180,176,224,142,0,103,211,254,163,245,140,86,59,247,253,31,252,95,216,95,
+243,108,144,199,21,129,14,166,16,113,63,72,112,25,80,119,208,194,194,215,32,193,
+101,64,104,41,112,160,28,36,220,117,10,238,5,9,119,157,130,14,125,46,3,254,252,
+43,195,71,51,72,112,25,240,197,65,11,11,29,245,229,217,179,106,155,10,237,104,
+154,253,180,228,253,2,153,246,142,161,207,36,223,26,123,155,2,30,139,86,33,237,
+148,246,118,41,255,197,97,16,160,148,238,135,214,140,161,198,52,81,110,47,39,
+224,119,71,196,176,157,45,253,28,173,211,160,176,109,25,45,25,50,213,193,199,
+190,27,152,225,137,209,159,99,17,30,151,203,101,218,236,44,52,154,76,90,234,65,
+128,34,228,250,90,246,136,255,29,196,176,206,118,175,58,79,232,226,83,24,236,
+213,122,16,176,223,94,207,73,175,70,249,59,81,177,117,128,158,31,49,127,246,30,
+207,181,170,20,0,0,0,0,73,69,78,68,174,66,96,130};
+static Fl_Image *image_fd_project() {
+ static Fl_Image *image = NULL;
+ if (!image)
+ image = new Fl_PNG_Image("fd_project.png", idata_fd_project, 6950);
+ return image;
+}
+
+Fl_Box *w_settings_shell_fd_user=(Fl_Box *)0;
+
+static const unsigned char idata_fd_user[] =
+{137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,
+115,122,122,244,0,0,1,110,105,67,67,80,105,99,99,0,0,40,145,117,145,187,75,195,
+80,20,198,127,173,239,23,14,58,136,116,200,80,197,65,65,20,196,81,235,208,165,
+72,169,21,172,186,180,49,109,133,164,13,73,139,136,171,224,226,80,112,16,93,
+124,13,254,7,186,10,174,10,130,160,8,34,110,238,190,22,145,120,174,45,180,136,
+189,225,230,252,248,238,253,14,39,95,192,31,49,117,203,109,156,2,43,87,112,98,
+225,144,182,144,88,212,90,94,104,163,153,46,2,244,39,117,215,158,142,70,35,212,
+93,159,119,248,84,189,29,81,189,234,223,251,119,117,172,24,174,14,190,86,225,9,
+221,118,10,194,50,13,145,181,130,173,120,91,184,87,207,38,87,132,15,133,135,29,
+25,80,248,74,233,169,50,63,43,206,148,249,93,177,19,143,205,128,95,245,212,50,
+53,156,170,97,61,235,88,194,67,194,65,203,44,234,149,121,212,151,116,26,185,
+249,57,169,253,178,3,184,196,8,19,66,35,69,145,85,76,10,140,72,205,73,102,255,
+251,70,127,125,179,228,197,163,203,219,102,29,71,28,25,178,226,29,22,181,40,93,
+13,169,105,209,13,121,76,214,85,238,127,243,116,211,227,99,229,238,157,33,104,
+122,242,188,183,1,104,217,129,239,146,231,125,29,121,222,247,49,52,60,194,69,
+174,234,207,75,78,147,31,162,151,170,90,240,0,186,55,225,236,178,170,165,118,
+225,124,11,250,30,236,164,147,252,149,26,100,251,211,105,120,61,133,174,4,244,
+220,64,251,82,57,171,202,57,39,247,16,223,144,95,116,13,123,251,48,40,247,187,
+151,127,0,229,44,103,253,189,250,32,75,0,0,0,9,112,72,89,115,0,0,22,37,0,0,22,
+37,1,73,82,36,240,0,0,1,13,116,69,88,116,82,97,119,32,112,114,111,102,105,108,
+101,32,116,121,112,101,32,101,120,105,102,0,10,101,120,105,102,10,32,32,32,32,
+32,49,49,52,10,52,53,55,56,54,57,54,54,48,48,48,48,52,57,52,57,50,97,48,48,48,
+56,48,48,48,48,48,48,48,52,48,48,49,97,48,49,48,53,48,48,48,49,48,48,48,48,48,
+48,51,101,48,48,48,48,48,48,49,98,48,49,48,53,48,48,48,49,48,48,48,48,48,48,10,
+52,54,48,48,48,48,48,48,50,56,48,49,48,51,48,48,48,49,48,48,48,48,48,48,48,50,
+48,48,48,48,48,48,54,57,56,55,48,52,48,48,48,49,48,48,48,48,48,48,52,101,48,48,
+48,48,48,48,48,48,48,48,48,48,48,48,57,48,48,48,48,48,48,48,10,48,49,48,48,48,
+48,48,48,57,48,48,48,48,48,48,48,48,49,48,48,48,48,48,48,48,50,48,48,48,50,97,
+48,48,52,48,48,48,49,48,48,48,48,48,48,53,50,48,48,48,48,48,48,48,51,97,48,48,
+52,48,48,48,49,48,48,48,48,48,48,56,48,48,48,10,48,48,48,48,48,48,48,48,48,48,
+48,48,10,190,225,144,105,0,0,0,90,116,69,88,116,82,97,119,32,112,114,111,102,
+105,108,101,32,116,121,112,101,32,105,112,116,99,0,10,105,112,116,99,10,32,32,
+32,32,32,32,50,54,10,53,48,54,56,54,102,55,52,54,102,55,51,54,56,54,102,55,48,
+50,48,51,51,50,101,51,48,48,48,51,56,52,50,52,57,52,100,48,52,48,52,48,48,48,
+48,48,48,48,48,48,48,48,48,10,199,209,105,220,0,0,20,96,116,69,88,116,82,97,
+119,32,112,114,111,102,105,108,101,32,116,121,112,101,32,120,109,112,0,10,120,
+109,112,10,32,32,32,32,50,53,53,53,10,51,99,51,102,55,56,55,48,54,49,54,51,54,
+98,54,53,55,52,50,48,54,50,54,53,54,55,54,57,54,101,51,100,50,50,101,102,98,98,
+98,102,50,50,50,48,54,57,54,52,51,100,50,50,53,55,51,53,52,100,51,48,52,100,55,
+48,52,51,54,53,54,56,54,57,10,52,56,55,97,55,50,54,53,53,51,55,97,52,101,53,52,
+54,51,55,97,54,98,54,51,51,57,54,52,50,50,51,102,51,101,48,97,51,99,55,56,51,
+97,55,56,54,100,55,48,54,100,54,53,55,52,54,49,50,48,55,56,54,100,54,99,54,101,
+55,51,51,97,55,56,10,51,100,50,50,54,49,54,52,54,102,54,50,54,53,51,97,54,101,
+55,51,51,97,54,100,54,53,55,52,54,49,50,102,50,50,50,48,55,56,51,97,55,56,54,
+100,55,48,55,52,54,98,51,100,50,50,53,56,52,100,53,48,50,48,52,51,54,102,55,50,
+54,53,50,48,10,51,52,50,101,51,52,50,101,51,48,50,100,52,53,55,56,54,57,55,54,
+51,50,50,50,51,101,48,97,50,48,51,99,55,50,54,52,54,54,51,97,53,50,52,52,52,54,
+50,48,55,56,54,100,54,99,54,101,55,51,51,97,55,50,54,52,54,54,51,100,50,50,54,
+56,10,55,52,55,52,55,48,51,97,50,102,50,102,55,55,55,55,55,55,50,101,55,55,51,
+51,50,101,54,102,55,50,54,55,50,102,51,49,51,57,51,57,51,57,50,102,51,48,51,50,
+50,102,51,50,51,50,50,100,55,50,54,52,54,54,50,100,55,51,55,57,54,101,55,52,10,
+54,49,55,56,50,100,54,101,55,51,50,51,50,50,51,101,48,97,50,48,50,48,51,99,55,
+50,54,52,54,54,51,97,52,52,54,53,55,51,54,51,55,50,54,57,55,48,55,52,54,57,54,
+102,54,101,50,48,55,50,54,52,54,54,51,97,54,49,54,50,54,102,55,53,10,55,52,51,
+100,50,50,50,50,48,97,50,48,50,48,50,48,50,48,55,56,54,100,54,99,54,101,55,51,
+51,97,54,53,55,56,54,57,54,54,51,100,50,50,54,56,55,52,55,52,55,48,51,97,50,
+102,50,102,54,101,55,51,50,101,54,49,54,52,54,102,54,50,54,53,10,50,101,54,51,
+54,102,54,100,50,102,54,53,55,56,54,57,54,54,50,102,51,49,50,101,51,48,50,102,
+50,50,48,97,50,48,50,48,50,48,50,48,55,56,54,100,54,99,54,101,55,51,51,97,55,
+52,54,57,54,54,54,54,51,100,50,50,54,56,55,52,55,52,55,48,10,51,97,50,102,50,
+102,54,101,55,51,50,101,54,49,54,52,54,102,54,50,54,53,50,101,54,51,54,102,54,
+100,50,102,55,52,54,57,54,54,54,54,50,102,51,49,50,101,51,48,50,102,50,50,48,97,
+50,48,50,48,50,48,54,53,55,56,54,57,54,54,51,97,53,48,10,54,57,55,56,54,53,54,
+99,53,56,52,52,54,57,54,100,54,53,54,101,55,51,54,57,54,102,54,101,51,100,50,
+50,51,56,51,50,50,50,48,97,50,48,50,48,50,48,54,53,55,56,54,57,54,54,51,97,53,
+48,54,57,55,56,54,53,54,99,53,57,52,52,54,57,10,54,100,54,53,54,101,55,51,54,
+57,54,102,54,101,51,100,50,50,51,49,51,50,51,56,50,50,48,97,50,48,50,48,50,48,
+55,52,54,57,54,54,54,54,51,97,53,50,54,53,55,51,54,102,54,99,55,53,55,52,54,57,
+54,102,54,101,53,53,54,101,54,57,55,52,10,51,100,50,50,51,50,50,50,48,97,50,48,
+50,48,50,48,55,52,54,57,54,54,54,54,51,97,53,57,53,50,54,53,55,51,54,102,54,99,
+55,53,55,52,54,57,54,102,54,101,51,100,50,50,51,49,51,52,51,52,50,48,50,102,50,
+48,51,49,50,50,48,97,50,48,10,50,48,50,48,55,52,54,57,54,54,54,54,51,97,53,56,
+53,50,54,53,55,51,54,102,54,99,55,53,55,52,54,57,54,102,54,101,51,100,50,50,51,
+49,51,52,51,52,50,48,50,102,50,48,51,49,50,50,50,102,51,101,48,97,50,48,51,99,
+50,102,55,50,54,52,10,54,54,51,97,53,50,52,52,52,54,51,101,48,97,51,99,50,102,
+55,56,51,97,55,56,54,100,55,48,54,100,54,53,55,52,54,49,51,101,48,97,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,48,97,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,48,97,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,48,97,50,48,10,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,48,97,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,48,97,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,48,97,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,48,
+97,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,48,97,10,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,48,97,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,48,97,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,48,97,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,48,97,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,10,48,97,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,48,97,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,48,
+97,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,48,97,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,48,97,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,48,97,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,48,97,50,48,50,48,50,48,50,48,50,48,10,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,48,97,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,
+48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,
+50,48,50,48,50,48,50,48,50,48,50,48,50,48,48,97,51,99,51,102,55,56,55,48,54,49,
+54,51,54,98,54,53,55,52,50,48,54,53,54,101,54,52,51,100,50,50,55,55,50,50,51,
+102,51,101,10,87,123,188,247,0,0,9,241,73,68,65,84,88,71,109,87,105,144,85,197,
+21,254,186,239,242,222,155,25,102,88,12,14,46,227,16,96,12,26,80,118,103,16,
+113,3,5,89,203,10,70,75,42,106,170,48,196,16,141,154,20,18,177,8,41,21,149,82,
+81,244,71,48,166,42,75,37,96,22,29,5,9,155,131,37,139,16,65,113,153,25,71,8,66,
+153,165,148,137,226,204,91,238,210,55,223,233,251,30,49,58,77,53,115,223,237,
+190,167,207,249,206,57,223,57,173,218,59,223,128,163,92,104,147,32,138,12,84,
+162,225,58,62,100,36,137,66,38,147,65,177,88,4,31,225,186,46,130,56,134,210,9,
+188,140,139,158,82,30,78,198,65,20,26,238,5,60,237,91,57,242,157,231,184,8,75,1,
+148,82,118,130,223,12,168,27,152,62,127,97,104,3,23,9,52,226,242,76,228,173,50,
+118,81,169,4,249,124,15,5,198,86,160,85,138,135,185,78,22,189,61,37,104,30,104,
+98,5,87,103,184,158,227,51,191,113,249,206,24,132,97,152,202,41,79,101,13,74,
+240,229,225,26,83,131,68,203,193,49,12,2,24,45,31,184,246,35,199,113,64,120,104,
+177,139,222,82,137,104,228,16,169,88,187,137,250,238,137,79,62,251,246,238,93,
+187,250,83,232,137,113,227,199,71,77,77,77,71,78,22,78,222,149,209,94,41,227,
+249,68,165,68,153,148,65,52,42,255,250,26,174,67,200,211,161,211,153,104,139,
+136,60,151,104,133,235,106,68,38,132,118,29,132,145,25,250,139,103,158,217,186,
+105,227,214,97,199,143,253,131,240,41,56,70,67,211,13,67,134,12,198,236,249,215,
+220,178,112,225,245,187,170,171,252,233,132,58,53,216,162,233,244,121,184,12,
+213,217,222,97,31,100,183,5,138,10,40,229,88,248,5,21,223,23,69,138,242,46,179,
+252,222,159,183,183,190,176,121,104,130,44,178,153,254,152,56,102,10,98,198,196,
+161,183,246,163,55,255,31,120,185,24,87,207,188,20,15,220,191,242,128,49,193,
+196,40,14,98,71,149,229,81,137,218,218,218,20,213,47,12,87,39,97,89,1,5,35,112,
+241,3,109,53,151,169,24,3,69,56,158,118,215,172,121,114,127,235,11,155,134,122,
+110,45,150,46,125,16,45,205,151,211,184,156,85,160,95,181,135,109,59,94,194,170,
+71,238,69,235,11,127,197,160,1,3,198,222,241,163,239,63,79,9,179,147,10,242,
+125,123,128,56,19,70,9,26,9,52,135,24,136,66,137,138,184,196,103,122,194,247,
+125,245,234,206,221,109,191,122,246,119,163,20,170,112,255,202,53,184,184,249,
+106,6,99,21,181,118,224,185,89,20,243,6,151,77,189,6,203,151,61,4,159,10,62,251,
+203,223,98,223,190,191,141,75,143,48,167,142,234,35,6,233,70,30,46,43,137,157,
+113,249,131,116,138,117,68,166,186,189,189,115,50,19,18,115,103,45,192,248,177,
+23,35,10,178,60,184,14,90,101,9,105,22,97,192,248,40,41,76,110,158,134,185,179,
+175,227,59,31,7,14,188,233,126,249,176,190,178,160,18,129,68,168,156,50,246,111,
+100,115,93,16,160,207,146,55,15,190,131,160,148,96,204,133,205,40,246,42,248,78,
+53,24,151,20,232,160,144,15,80,83,221,143,252,193,12,9,52,206,251,198,88,196,
+92,123,243,224,161,56,149,92,65,160,239,161,157,47,40,165,202,81,43,239,44,26,
+212,56,8,130,248,224,129,3,240,189,44,134,15,111,66,198,175,161,229,220,39,123,
+153,1,53,53,57,20,11,198,198,144,239,229,48,98,68,19,60,47,131,183,223,126,183,
+88,62,162,143,99,255,55,180,48,147,107,35,228,203,27,211,223,76,195,184,177,
+177,129,86,149,112,244,232,17,166,98,17,145,216,38,228,198,45,226,127,215,35,
+123,122,224,90,47,142,29,63,76,18,42,161,190,190,254,36,18,221,135,220,175,156,
+162,203,169,167,210,116,41,127,36,40,72,124,184,218,137,167,78,157,130,108,149,
+135,182,157,91,200,7,12,80,29,17,58,11,144,245,171,226,239,48,250,156,73,219,
+131,215,118,109,227,122,140,25,51,102,100,42,178,83,37,250,118,133,85,47,34,158,
+9,179,65,38,148,87,230,1,199,42,101,146,200,204,152,57,237,125,147,228,177,
+243,181,205,120,175,99,31,81,233,229,222,34,21,76,200,142,204,29,174,105,175,
+136,119,59,247,98,123,91,171,85,104,250,244,43,125,77,6,53,166,98,28,229,39,95,
+85,66,71,41,251,83,63,42,65,14,168,40,18,89,10,117,108,38,12,31,209,120,83,115,
+203,120,148,130,147,184,231,222,219,177,105,243,6,120,126,36,52,129,124,177,100,
+41,124,71,219,75,88,198,181,56,233,193,228,201,147,208,216,216,56,75,228,168,
+50,11,138,187,84,31,222,176,172,35,100,33,22,11,92,177,74,103,197,119,36,33,81,
+111,207,83,79,175,217,187,224,186,121,40,20,63,197,99,143,63,136,205,91,90,89,
+17,149,240,4,182,110,219,132,135,30,89,137,124,161,27,243,230,207,196,186,103,
+158,218,67,22,125,79,170,171,84,80,97,191,40,138,208,91,232,65,108,34,235,182,
+34,43,101,41,40,165,65,104,161,150,169,211,103,85,174,15,162,152,148,226,32,40,
+18,137,112,206,178,101,75,183,141,190,224,124,107,49,139,55,74,20,98,40,208,
+247,61,6,102,128,81,163,206,199,138,21,247,173,47,20,10,45,130,105,38,227,217,
+170,88,98,33,75,203,112,130,79,79,118,227,147,238,19,164,238,188,157,172,39,14,
+9,141,126,42,79,139,136,69,37,101,66,177,192,243,60,233,11,62,102,74,62,76,82,
+162,50,9,38,76,152,96,149,148,67,46,188,112,12,171,90,6,29,29,93,193,231,159,23,
+158,20,223,107,126,28,70,37,155,214,242,189,252,22,20,4,101,73,83,249,93,118,
+129,197,223,22,159,116,166,164,45,127,197,255,217,108,214,30,24,4,17,118,239,
+126,61,137,194,4,35,207,29,133,65,3,79,39,180,202,90,87,83,93,135,97,67,207,101,
+63,224,153,3,111,28,202,184,174,239,136,229,41,145,41,203,41,34,75,179,204,139,
+65,50,108,191,192,227,221,83,197,226,212,72,35,213,214,114,250,174,187,187,155,
+188,190,79,255,229,207,47,206,223,183,247,157,135,227,64,161,101,210,101,164,94,
+32,173,90,160,146,53,152,48,126,10,142,28,237,204,254,224,182,59,159,187,100,
+202,164,127,206,155,63,235,195,150,150,139,158,173,170,170,122,217,36,113,94,24,
+95,14,15,67,246,29,236,92,114,185,156,85,66,181,119,118,88,6,252,127,69,82,37,
+94,106,221,56,106,245,234,71,175,232,62,209,51,203,113,170,91,76,224,231,38,76,
+184,20,75,190,119,23,206,58,123,56,203,116,10,181,75,234,62,246,81,39,158,88,
+187,10,239,180,239,71,18,247,218,56,169,98,149,252,241,79,238,196,220,185,179,
+47,247,60,231,21,81,34,117,133,177,127,5,25,213,222,222,14,169,136,142,231,218,
+128,50,73,32,10,12,88,187,246,233,59,215,173,251,245,45,42,169,61,99,120,227,88,
+76,155,190,0,83,155,175,68,255,65,131,105,56,59,7,82,95,28,146,176,24,55,137,
+229,112,33,167,8,255,254,248,24,118,182,109,196,43,109,47,163,189,243,32,15,138,
+177,232,214,155,112,251,29,183,77,85,137,121,53,45,72,58,45,76,68,80,189,253,
+214,33,194,209,207,194,33,41,215,211,243,233,232,229,203,151,255,126,203,150,29,
+231,185,172,120,75,22,255,20,211,167,221,72,70,172,163,94,14,164,159,8,36,152,0,
+219,204,74,200,136,44,9,48,41,227,174,71,106,87,228,6,213,139,23,95,124,14,79,
+174,125,136,27,3,92,50,181,217,172,121,124,245,24,173,205,33,203,158,182,81,165,
+225,75,126,184,132,86,211,227,180,202,209,222,153,119,223,125,207,235,219,183,
+239,110,168,171,61,3,43,239,123,156,254,190,10,85,85,167,161,80,136,88,130,93,
+27,88,68,144,169,71,146,226,193,177,73,27,78,66,12,135,235,113,28,165,5,149,
+194,217,39,226,155,163,70,99,207,174,93,248,224,112,151,58,124,164,107,241,244,
+171,166,29,103,237,56,40,116,45,25,161,125,95,160,15,108,239,199,96,187,97,103,
+219,158,129,190,219,31,171,87,173,195,216,11,46,99,233,29,192,146,27,157,138,
+222,82,41,141,232,56,182,201,99,93,32,214,136,95,77,148,240,119,134,41,153,35,
+186,213,136,131,12,198,140,190,24,143,174,94,135,154,220,215,176,99,251,107,120,
+125,239,254,7,136,182,170,196,154,14,216,239,101,115,210,5,71,151,175,88,249,
+179,165,33,133,44,188,97,49,154,190,62,142,66,171,73,48,20,200,86,91,14,9,73,54,
+174,207,190,136,133,73,44,141,227,52,88,45,205,10,141,11,125,115,198,180,44,138,
+121,71,64,127,148,242,62,70,142,156,136,57,115,174,167,66,46,86,63,242,196,32,
+130,214,84,9,119,45,36,81,40,244,158,182,97,195,134,223,124,208,245,193,192,179,
+207,26,134,111,93,187,144,13,8,157,29,123,105,59,109,42,221,140,177,129,26,210,
+223,18,197,158,167,109,129,137,152,86,202,94,92,202,118,73,185,230,118,135,37,
+211,247,170,17,20,20,22,222,120,11,59,231,6,116,117,29,118,159,127,190,117,69,
+84,142,35,29,209,145,142,155,61,255,15,235,255,116,70,93,221,233,184,249,59,
+139,104,5,153,138,157,175,133,88,167,80,11,2,162,172,237,106,89,5,227,40,96,239,
+79,74,54,129,205,0,197,12,136,19,42,39,237,16,247,243,106,192,192,78,121,223,
+146,26,207,91,116,235,98,42,31,99,195,31,215,79,114,41,75,134,155,48,178,185,
+195,59,114,248,56,130,162,143,230,139,166,216,194,164,43,209,29,167,85,76,243,
+191,48,76,155,28,199,241,108,76,164,205,108,74,90,70,114,154,123,36,150,4,21,
+113,179,40,171,29,9,204,34,41,187,26,227,199,93,100,255,190,223,113,204,72,44,
+249,76,101,22,35,15,135,187,62,26,98,34,31,67,234,207,177,27,148,244,134,210,
+116,136,134,101,4,36,215,229,224,180,175,55,246,112,197,158,80,131,190,86,25,72,
+95,85,25,210,97,185,90,89,235,131,82,104,175,114,48,164,97,93,139,51,235,155,
+104,168,151,251,232,248,103,20,202,119,212,86,31,61,122,108,149,4,80,67,67,131,
+189,136,228,195,30,114,127,129,26,74,235,205,128,67,234,83,200,83,249,222,152,
+118,58,94,249,89,242,46,172,108,42,95,195,180,101,87,47,35,233,202,106,232,196,
+168,98,176,15,30,124,26,254,254,161,170,233,234,234,194,208,198,122,81,52,202,
+53,156,51,196,44,186,245,230,127,13,169,111,200,38,186,23,253,6,120,82,231,221,
+176,196,226,159,208,145,112,107,172,97,9,97,81,9,159,217,14,33,166,242,18,73,
+230,4,103,29,223,243,217,94,114,184,238,68,118,63,97,36,82,174,152,47,212,204,
+238,14,243,174,189,2,19,155,135,117,203,225,246,210,218,222,241,22,3,134,23,84,
+238,147,74,103,27,19,11,113,26,120,114,249,176,150,90,139,203,237,112,5,133,83,
+163,124,159,80,105,166,84,154,25,123,221,51,105,57,150,247,65,216,203,236,81,
+116,89,108,93,41,107,255,5,119,155,194,247,64,241,254,70,0,0,0,0,73,69,78,68,
+174,66,96,130};
+static Fl_Image *image_fd_user() {
+ static Fl_Image *image = NULL;
+ if (!image)
+ image = new Fl_PNG_Image("fd_user.png", idata_fd_user, 8612);
+ return image;
+}
+
+Fl_Group *w_settings_i18n_tab=(Fl_Group *)0;
+
+static void cb_w_settings_i18n_tab(Fl_Group* o, void* v) {
+ propagate_load(o, v);
+}
+
+static const unsigned char idata_language_64[] =
+{137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,96,0,0,0,64,8,4,0,0,0,
+79,61,186,133,0,0,5,113,73,68,65,84,104,222,237,154,107,76,28,85,20,199,127,
+188,10,44,182,184,116,75,75,65,1,129,146,20,140,15,106,91,170,166,129,182,40,98,
+53,104,98,66,240,145,26,67,140,38,245,21,245,139,177,54,126,48,126,48,209,38,
+162,198,132,24,141,181,173,209,86,98,130,129,32,98,1,91,196,214,90,181,136,20,
+90,160,32,10,8,88,96,11,44,227,7,102,239,206,46,236,206,238,236,206,204,154,
+120,246,195,158,123,103,231,222,243,223,123,207,255,156,251,0,117,89,193,43,140,
+226,64,210,244,89,96,154,47,72,197,52,137,230,144,102,227,93,159,78,178,204,2,
+176,63,4,230,75,72,52,154,5,96,52,36,230,75,204,82,164,207,4,81,147,171,157,74,
+28,177,26,58,152,112,42,49,220,74,147,25,0,34,157,230,239,39,131,133,128,26,
+143,96,154,26,90,156,197,181,230,140,128,44,177,92,171,193,15,167,72,116,21,162,
+244,0,16,25,124,19,14,102,152,51,145,36,131,148,113,154,57,199,90,138,200,88,
+182,249,213,174,194,80,24,2,88,160,153,87,1,24,96,175,114,186,136,137,183,133,
+134,69,203,71,248,52,140,0,56,24,225,31,192,206,247,114,77,43,219,73,101,129,56,
+214,16,167,248,229,205,188,193,69,86,83,85,78,167,30,0,34,84,127,33,45,126,37,
+242,46,57,194,252,54,62,164,199,157,38,101,154,181,114,15,229,172,92,210,204,
+166,136,48,242,129,17,14,114,122,73,173,29,59,48,193,1,242,40,48,204,137,53,177,
+208,140,138,63,254,105,32,11,105,2,96,101,147,74,204,8,115,26,77,228,65,210,232,
+195,225,230,42,221,116,201,250,42,225,43,179,174,216,189,53,160,46,254,162,159,
+89,29,89,40,131,74,143,246,175,80,35,0,196,3,115,116,241,19,3,92,118,254,224,
+120,64,29,204,49,204,219,188,201,188,110,113,32,134,24,15,0,3,178,102,195,194,
+28,245,188,47,106,52,244,20,77,6,175,147,207,99,106,16,52,166,18,14,134,185,
+160,160,80,152,18,230,166,96,225,20,175,185,155,175,205,63,31,226,57,93,156,216,
+65,27,47,241,56,111,113,65,212,13,10,61,23,7,141,216,67,67,49,207,232,26,7,106,
+73,39,149,24,64,226,146,120,154,206,44,103,68,41,73,67,251,118,166,157,234,26,
+93,0,184,226,192,143,236,38,9,152,22,14,12,89,56,24,145,245,93,236,37,193,25,
+204,253,254,219,187,121,202,9,33,82,23,0,241,88,229,25,126,142,113,146,128,63,
+104,149,159,165,145,162,224,39,43,185,92,165,33,69,140,115,141,129,30,62,144,
+200,13,98,50,245,2,18,231,196,152,220,66,82,128,255,184,9,145,56,86,177,54,107,
+101,146,9,78,186,146,182,128,167,140,9,0,34,200,37,69,214,107,233,228,23,234,68,
+128,203,53,120,69,166,49,14,92,195,46,161,31,84,172,84,118,178,238,191,1,32,158,
+109,66,111,17,251,14,113,108,115,91,204,132,49,0,216,200,158,37,117,21,100,27,
+190,168,215,12,192,66,9,121,30,9,222,78,44,126,190,61,65,19,71,57,19,130,221,
+140,32,182,85,50,20,126,0,144,185,204,66,210,91,32,252,152,74,158,164,74,193,94,
+134,3,152,166,221,163,251,38,222,161,141,73,63,222,237,162,26,128,126,142,50,
+110,206,174,68,47,95,114,204,45,27,5,168,163,137,18,74,177,120,164,218,158,169,
+254,9,198,100,253,19,42,84,86,119,186,0,24,231,35,106,189,164,97,181,116,113,
+151,79,46,186,36,162,6,64,51,121,196,27,61,133,198,57,165,40,149,242,60,215,43,
+202,157,124,231,35,153,150,232,160,93,81,254,156,126,227,71,32,158,20,57,153,
+139,99,15,101,216,40,160,142,195,178,217,54,114,124,24,53,202,215,30,147,177,
+157,172,32,246,125,53,1,176,81,201,60,253,108,225,110,242,137,7,178,121,148,219,
+105,230,56,243,84,144,69,131,215,119,207,114,108,137,231,20,179,222,88,0,81,20,
+146,195,12,86,86,137,173,189,4,110,100,3,247,1,201,244,123,77,134,167,150,89,
+219,55,113,214,104,0,16,181,236,105,133,69,14,100,222,179,209,223,57,34,107,235,
+72,17,187,123,245,108,198,106,124,32,11,92,230,56,41,8,244,14,158,37,83,144,
+233,121,51,34,113,224,162,36,208,29,108,165,76,65,166,51,225,15,64,73,160,59,
+200,35,129,219,66,64,166,126,251,192,21,250,136,244,114,200,23,193,74,108,170,
+84,168,36,208,116,70,152,4,242,249,57,72,50,85,7,176,176,56,74,118,246,249,216,
+180,189,142,71,40,84,49,64,73,160,135,100,221,30,52,153,170,3,24,195,230,76,19,
+188,199,215,211,68,147,227,243,28,213,157,64,167,151,16,173,86,50,85,247,129,
+106,255,14,135,135,84,220,176,91,16,168,55,169,15,58,51,245,54,70,31,248,117,91,
+98,150,59,21,160,229,218,7,164,46,105,80,26,148,46,74,251,252,184,142,80,43,13,
+74,131,210,160,212,40,37,185,106,131,158,66,243,84,209,206,211,164,249,204,145,
+47,115,128,175,252,35,208,18,172,110,118,245,208,17,68,102,234,15,11,205,82,77,
+13,169,62,246,41,37,250,124,157,58,41,9,180,136,151,73,118,123,122,130,135,5,
+153,238,102,131,78,52,106,231,188,246,112,57,198,55,66,47,35,221,131,173,110,
+226,126,62,147,201,180,131,236,0,67,147,33,129,108,92,100,61,57,108,94,66,182,
+73,138,123,56,191,6,188,45,111,8,0,11,105,178,86,46,52,101,24,44,160,80,214,
+215,251,116,180,16,102,163,129,73,50,85,204,211,75,49,247,46,187,216,76,227,9,
+160,151,98,74,195,19,64,20,219,217,200,20,54,215,237,169,128,158,155,14,0,162,
+197,102,176,182,231,97,146,78,235,33,255,3,48,91,244,241,1,113,7,225,111,126,
+211,112,200,215,19,64,52,208,7,128,72,43,26,248,65,195,235,138,99,214,5,115,0,
+180,48,231,36,244,177,224,90,26,54,107,106,126,27,146,219,190,14,94,52,11,64,38,
+157,33,48,255,61,163,226,212,114,146,206,17,166,130,48,126,136,23,88,161,222,
+205,191,56,75,123,84,202,251,159,166,0,0,0,0,73,69,78,68,174,66,96,130};
+static Fl_Image *image_language_64() {
+ static Fl_Image *image = NULL;
+ if (!image)
+ image = new Fl_PNG_Image("language_64.png", idata_language_64, 1450);
+ return image;
+}
+
+Fl_Choice *i18n_type_chooser=(Fl_Choice *)0;
+
+Fl_Menu_Item menu_i18n_type_chooser[] = {
+ {"None", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
+ {"GNU gettext", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
+ {"POSIX catgets", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
+ {0,0,0,0,0,0,0,0,0}
+};
+
+Fl_Group *i18n_gnu_group=(Fl_Group *)0;
+
+static void cb_i18n_gnu_group(Fl_Group* o, void* v) {
+ propagate_load(o, v);
+}
+
+Fl_Input *i18n_gnu_include_input=(Fl_Input *)0;
+
+static void cb_i18n_gnu_include_input(Fl_Input* o, void* v) {
+ if (v == LOAD) {
+ o->value(g_project.i18n_gnu_include.c_str());
+ } else {
+ undo_checkpoint();
+ g_project.i18n_gnu_include = o->value();
+ set_modflag(1);
+ }
+}
+
+Fl_Input *i18n_gnu_conditional_input=(Fl_Input *)0;
+
+static void cb_i18n_gnu_conditional_input(Fl_Input* o, void* v) {
+ if (v == LOAD) {
+ o->value(g_project.i18n_gnu_conditional.c_str());
+ } else {
+ undo_checkpoint();
+ g_project.i18n_gnu_conditional = o->value();
+ set_modflag(1);
+ }
+}
+
+Fl_Input *i18n_gnu_function_input=(Fl_Input *)0;
+
+static void cb_i18n_gnu_function_input(Fl_Input* o, void* v) {
+ if (v == LOAD) {
+ o->value(g_project.i18n_gnu_function.c_str());
+ } else {
+ undo_checkpoint();
+ g_project.i18n_gnu_function = o->value();
+ set_modflag(1);
+ }
+}
+
+Fl_Input *i18n_gnu_static_function_input=(Fl_Input *)0;
+
+static void cb_i18n_gnu_static_function_input(Fl_Input* o, void* v) {
+ if (v == LOAD) {
+ o->value(g_project.i18n_gnu_static_function.c_str());
+ } else {
+ undo_checkpoint();
+ g_project.i18n_gnu_static_function = o->value();
+ set_modflag(1);
+ }
+}
+
+Fl_Group *i18n_posix_group=(Fl_Group *)0;
+
+static void cb_i18n_posix_group(Fl_Group* o, void* v) {
+ propagate_load(o, v);
+}
+
+Fl_Input *i18n_pos_include_input=(Fl_Input *)0;
+
+static void cb_i18n_pos_include_input(Fl_Input* o, void* v) {
+ if (v == LOAD) {
+ o->value(g_project.i18n_pos_include.c_str());
+ } else {
+ undo_checkpoint();
+ g_project.i18n_pos_include = o->value();
+ set_modflag(1);
+ }
+}
+
+Fl_Input *i18n_pos_conditional_input=(Fl_Input *)0;
+
+static void cb_i18n_pos_conditional_input(Fl_Input* o, void* v) {
+ if (v == LOAD) {
+ o->value(g_project.i18n_pos_conditional.c_str());
+ } else {
+ undo_checkpoint();
+ g_project.i18n_pos_conditional = o->value();
+ set_modflag(1);
+ }
+}
+
+Fl_Input *i18n_pos_file_input=(Fl_Input *)0;
+
+static void cb_i18n_pos_file_input(Fl_Input* o, void* v) {
+ if (v == LOAD) {
+ o->value(g_project.i18n_pos_file.c_str());
+ } else {
+ undo_checkpoint();
+ g_project.i18n_pos_file = o->value();
+ set_modflag(1);
+ }
+}
+
+static void cb_c(Fl_Group* o, void* v) {
+ propagate_load(o, v);
+}
+
+Fl_Int_Input *i18n_pos_set_input=(Fl_Int_Input *)0;
+
+static void cb_i18n_pos_set_input(Fl_Int_Input* o, void* v) {
+ if (v == LOAD) {
+ o->value(g_project.i18n_pos_set.c_str());
+ } else {
+ undo_checkpoint();
+ g_project.i18n_pos_set = o->value();
+ set_modflag(1);
+ }
+}
+
+Fl_Group *w_settings_user_tab=(Fl_Group *)0;
+
+static void cb_w_settings_user_tab(Fl_Group* o, void* v) {
+ propagate_load(o, v);
+}
+
+static const unsigned char idata_user_circle_64[] =
+{137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,96,0,0,0,64,8,6,0,0,0,
+229,52,114,14,0,0,1,110,105,67,67,80,105,99,99,0,0,40,145,117,145,187,75,195,80,
+20,198,127,182,74,69,171,14,138,136,56,68,80,113,168,32,10,226,168,117,232,82,
+164,212,10,190,150,38,77,91,161,143,144,180,72,113,21,92,28,10,14,162,139,175,
+193,255,64,87,193,85,65,16,20,65,196,205,221,215,34,18,207,53,66,69,244,134,155,
+243,227,187,247,59,156,124,1,95,52,103,228,157,250,9,200,23,74,118,60,18,214,
+230,230,23,180,192,35,65,90,233,100,132,222,164,225,88,147,177,88,148,127,215,
+219,53,117,170,94,13,169,94,255,223,251,115,53,167,76,199,128,186,70,225,49,195,
+178,75,194,50,13,209,149,146,165,120,67,184,195,200,38,83,194,123,194,33,91,6,
+20,62,87,186,238,241,131,226,140,199,47,138,237,68,124,10,124,170,167,150,249,
+193,250,15,54,178,118,94,120,80,184,47,159,43,27,223,243,168,47,9,154,133,217,
+25,169,221,178,123,112,136,19,33,140,134,78,153,101,114,148,24,146,90,144,204,
+254,246,13,127,249,166,41,138,199,144,183,69,5,91,28,25,178,226,13,137,90,150,
+174,166,212,180,232,166,60,57,42,42,247,223,121,58,233,209,17,175,123,48,12,13,
+247,174,251,220,15,129,77,248,168,186,238,251,190,235,126,28,128,255,14,78,11,
+53,127,81,114,26,127,21,189,90,211,250,118,161,109,13,142,207,106,154,190,5,39,
+235,208,117,107,37,237,228,151,228,151,237,75,167,225,233,8,90,230,161,253,18,
+154,22,189,172,190,207,57,188,129,196,170,252,162,11,216,222,129,1,185,223,182,
+244,9,79,172,104,46,25,119,193,26,0,0,0,9,112,72,89,115,0,0,59,14,0,0,59,14,1,
+204,182,161,131,0,0,13,125,73,68,65,84,120,94,213,156,9,236,86,197,17,192,7,4,
+20,177,10,8,2,162,96,16,209,130,40,136,82,4,27,174,214,139,195,8,8,166,73,1,5,
+194,77,75,64,1,141,28,81,74,72,56,203,101,61,138,130,137,82,3,104,64,52,16,16,
+218,130,28,22,149,163,9,1,4,148,163,30,92,162,92,94,157,223,203,247,253,243,142,
+125,223,187,246,195,63,147,108,248,243,190,221,217,153,157,221,217,217,217,153,
+45,35,25,225,231,159,127,206,136,193,220,188,76,153,50,21,244,151,22,90,218,
+106,249,173,150,134,90,106,197,236,236,136,214,251,175,150,127,105,89,163,101,
+147,210,121,62,102,219,68,213,148,206,68,245,173,87,70,0,182,138,18,87,86,203,
+239,181,44,208,114,74,11,210,181,81,192,5,206,223,209,135,45,122,139,53,249,18,
+9,201,6,51,218,225,229,90,254,164,229,128,165,1,47,36,52,250,24,166,165,162,
+37,218,19,141,151,245,202,89,152,80,98,202,107,25,169,229,139,11,48,240,126,
+161,252,79,251,28,14,13,25,121,200,52,166,153,21,88,218,101,168,186,179,141,82,
+62,71,11,186,61,18,174,184,226,10,169,87,175,158,220,120,227,141,114,237,181,
+215,202,149,87,94,41,149,42,85,114,218,125,247,221,119,242,205,55,223,200,161,
+67,135,228,211,79,63,117,202,183,223,126,27,137,51,87,97,167,254,59,72,249,248,
+103,220,6,238,122,89,247,128,11,46,0,37,248,50,101,96,154,150,1,90,66,251,47,91,
+182,172,180,108,217,82,218,181,107,39,119,223,125,183,52,108,216,80,248,22,7,
+126,250,233,39,217,185,115,167,108,216,176,65,214,172,89,35,27,55,110,20,190,21,
+0,86,7,147,97,164,10,226,92,156,62,242,117,46,42,1,40,177,13,148,240,69,90,
+154,132,49,89,163,70,13,233,213,171,151,116,235,214,77,106,213,138,107,244,20,
+30,178,195,135,15,203,226,197,139,229,213,87,95,149,47,190,64,219,133,194,86,
+253,165,135,10,97,79,92,33,92,52,2,80,66,239,81,166,150,105,169,108,98,174,118,
+237,218,50,100,200,16,233,222,189,187,84,168,128,5,106,31,206,159,63,47,139,22,
+45,146,89,179,102,201,145,35,88,170,70,56,166,95,59,169,16,54,196,161,224,162,
+16,128,18,217,81,153,249,135,150,138,126,166,202,149,43,39,61,123,246,148,39,
+158,120,66,208,243,23,2,206,156,57,35,243,230,205,147,217,179,103,203,247,223,
+127,111,234,18,53,244,7,21,194,146,40,122,74,189,0,148,192,206,202,196,98,45,
+229,252,204,176,169,206,157,59,87,26,53,106,20,197,103,81,126,223,190,125,187,
+12,26,52,72,246,239,223,111,194,143,100,186,168,16,150,23,234,60,171,0,226,237,
+106,41,217,87,226,56,193,190,97,26,252,78,157,58,201,59,239,188,243,139,13,62,
+44,53,110,220,88,222,125,247,93,233,208,161,131,137,67,76,228,69,202,67,203,
+148,236,199,106,86,52,43,40,183,225,110,82,42,2,58,191,95,191,126,242,204,51,
+207,72,218,217,115,236,216,49,217,189,123,119,137,30,103,179,110,208,160,129,84,
+169,82,37,22,211,254,74,88,72,207,62,251,172,188,244,210,75,166,246,236,9,205,
+117,37,236,53,253,152,150,135,60,174,162,8,32,103,106,126,160,157,4,172,29,116,
+253,176,97,28,68,147,1,231,141,101,203,150,201,194,133,11,101,203,150,45,242,
+227,143,63,122,16,92,114,201,37,114,215,93,119,57,251,73,199,142,29,83,9,119,
+230,204,153,50,101,202,20,19,97,255,209,143,173,76,38,106,105,21,192,92,37,120,
+160,159,19,102,254,216,177,99,147,141,188,214,70,71,15,30,60,88,182,109,219,22,
+171,109,211,166,77,157,13,182,78,157,58,177,234,187,43,77,152,48,33,108,37,204,
+86,1,12,245,35,44,117,2,200,157,112,241,64,122,86,23,58,127,206,156,57,137,103,
+38,179,189,79,159,62,114,252,248,241,68,131,89,181,106,85,121,249,229,151,229,
+206,59,239,76,212,14,117,196,198,204,254,228,3,14,107,109,252,39,230,82,37,0,37,
+6,75,135,195,76,99,55,241,55,220,112,131,179,217,37,53,51,63,255,252,115,71,
+157,160,243,211,64,229,202,149,29,181,69,255,73,0,215,6,27,243,222,189,1,181,
+143,219,162,169,10,161,196,118,45,109,2,24,161,4,122,148,40,118,254,242,229,203,
+19,91,59,232,124,86,205,39,159,124,18,24,59,4,217,166,77,27,103,227,5,118,237,
+218,37,235,214,173,51,250,127,238,184,227,14,121,235,173,183,18,175,60,76,212,
+206,157,59,203,15,63,252,224,239,127,184,210,54,35,255,49,171,0,2,182,121,146,
+153,226,174,171,132,224,82,126,210,223,190,127,255,254,137,7,31,28,8,205,52,248,
+247,221,119,159,140,26,53,202,113,198,185,225,228,201,147,50,121,242,100,89,185,
+114,165,231,251,214,173,91,29,117,194,74,74,2,152,168,143,63,254,184,188,240,
+194,11,254,102,163,149,215,191,169,16,206,36,193,23,86,215,230,57,160,175,118,
+114,141,187,35,220,11,105,44,30,112,224,183,241,3,131,255,220,115,207,5,6,159,
+122,87,93,117,149,76,156,56,81,238,189,247,222,64,187,5,11,184,139,73,14,195,
+135,15,151,154,53,107,250,27,214,208,15,125,146,99,51,183,176,34,0,157,17,224,
+65,253,120,0,223,206,229,151,179,48,146,1,58,255,195,15,63,244,52,66,237,48,
+243,11,45,121,126,163,78,222,77,157,71,192,70,126,226,196,137,100,68,104,109,
+250,28,58,52,96,248,128,103,100,142,231,196,56,253,13,172,8,64,145,182,215,226,
+177,249,170,87,175,46,143,60,242,72,42,2,209,233,126,59,31,157,239,87,59,38,228,
+172,4,234,186,1,61,14,206,52,208,163,71,15,193,67,235,131,186,250,127,111,39,
+105,144,107,27,91,2,248,163,191,127,244,231,165,151,94,154,138,44,147,203,56,
+191,225,198,65,120,211,77,55,5,170,69,184,161,67,209,194,3,135,59,3,4,120,142,
+67,155,245,21,160,75,145,81,126,216,141,152,139,147,174,93,187,166,161,199,105,
+99,82,51,17,23,42,158,190,210,222,210,133,17,220,165,75,23,19,77,93,149,78,252,
+69,153,192,198,10,248,141,82,224,241,35,115,147,149,229,50,229,154,107,60,123,
+185,195,224,158,61,177,239,72,28,63,145,31,12,106,36,246,192,93,119,221,117,210,
+188,121,115,127,253,95,233,135,192,199,216,72,115,21,109,8,160,157,191,83,174,
+17,179,192,45,183,220,34,248,118,220,176,118,237,90,193,212,140,2,54,91,206,4,
+110,224,44,114,243,205,55,71,53,45,248,123,8,79,217,24,213,30,109,8,0,151,179,7,
+184,195,205,2,120,53,113,172,185,129,75,118,236,252,66,234,133,223,38,77,154,
+228,92,210,187,129,217,203,169,56,11,220,115,15,23,122,1,8,240,158,180,15,27,2,
+248,181,187,83,76,55,46,208,179,130,105,227,227,144,245,244,211,79,27,87,2,51,
+127,244,232,209,178,122,245,234,64,215,33,155,104,34,18,185,52,242,155,183,138,
+32,51,163,153,221,209,74,132,39,54,241,246,219,111,119,78,177,89,129,217,252,
+208,67,15,201,71,31,125,20,64,197,64,180,110,221,186,68,173,228,93,17,254,153,
+79,67,156,113,75,150,44,73,236,138,48,209,255,224,131,15,10,46,10,23,192,123,
+166,73,108,205,21,145,39,138,184,29,27,128,37,196,117,37,46,132,163,71,143,122,
+80,50,208,43,86,172,112,74,33,64,149,225,227,207,234,175,201,247,193,21,170,79,
+0,153,39,112,38,233,153,152,39,104,202,22,96,125,224,82,198,181,156,20,104,
+243,202,43,175,164,186,19,8,235,11,122,108,131,117,1,36,117,57,71,49,212,172,89,
+51,199,165,140,87,51,46,160,118,112,192,37,105,19,7,183,97,15,136,211,172,96,
+29,235,2,40,6,145,220,108,225,82,38,148,4,11,11,179,210,15,124,227,252,241,252,
+243,207,59,58,191,24,179,213,246,228,130,7,235,123,64,230,41,17,130,0,61,206,
+126,64,225,118,140,195,22,17,111,124,207,95,202,103,53,53,139,69,123,33,188,214,
+5,96,178,68,108,51,198,230,106,56,153,218,238,38,128,47,65,192,111,108,90,172,
+171,160,98,16,25,155,155,34,87,44,6,111,214,87,0,33,226,197,132,211,167,79,59,
+234,135,59,131,252,69,61,43,2,171,7,47,104,154,251,135,184,244,22,131,55,235,2,
+48,92,100,199,229,47,180,30,97,41,47,190,248,162,188,255,254,251,114,240,224,
+193,80,119,4,251,193,245,215,95,47,109,219,182,21,66,96,234,214,197,109,111,15,
+200,59,240,65,230,4,185,204,7,9,37,232,176,150,146,56,114,44,5,98,243,227,198,
+242,23,26,30,240,112,195,69,60,80,82,23,51,194,224,84,142,255,200,134,107,132,
+11,34,220,17,190,61,142,229,158,233,112,96,99,15,32,27,177,4,208,147,12,92,22,
+56,123,246,172,60,245,212,83,242,192,3,15,56,23,243,73,7,159,190,105,243,241,
+199,31,203,253,247,223,47,99,198,140,145,115,231,18,229,93,4,200,223,177,99,71,
+192,201,167,149,60,188,167,225,217,134,0,72,5,245,192,7,31,16,149,152,14,208,
+235,248,92,8,65,76,51,240,1,29,161,130,120,237,181,215,132,11,253,175,191,254,
+58,29,81,218,106,253,250,245,166,182,169,210,154,220,136,108,168,32,92,178,30,
+66,90,181,106,37,111,188,65,80,116,50,192,174,103,214,23,10,196,226,98,133,208,
+67,14,90,220,255,2,220,19,16,196,133,227,238,203,47,191,12,237,180,90,181,106,
+78,128,152,33,210,33,146,80,50,118,54,109,34,214,216,3,173,244,127,177,18,57,
+194,58,176,33,0,210,89,240,150,149,220,138,161,255,89,5,73,252,66,232,214,246,
+237,219,59,137,118,126,0,31,225,38,143,62,250,168,220,122,235,173,5,7,11,103,25,
+194,199,117,109,90,65,108,210,171,86,173,50,185,150,67,241,178,241,115,202,246,
+225,227,118,168,186,22,99,134,71,164,68,115,21,50,171,32,37,138,12,116,79,38,9,
+247,183,228,100,37,129,199,30,123,204,56,248,184,33,8,27,39,30,40,106,240,233,
+143,128,42,226,131,176,154,76,193,185,172,20,98,77,147,0,174,13,131,48,23,187,
+67,20,147,224,115,215,205,44,128,28,178,133,126,2,230,207,159,47,108,166,113,
+96,233,210,165,206,138,241,3,170,6,143,230,109,183,221,22,7,141,167,78,147,38,
+77,4,26,76,109,209,231,111,191,253,118,44,156,108,222,33,129,93,1,158,99,33,
+244,85,178,37,0,162,161,63,115,227,254,234,171,175,228,205,55,223,140,164,233,
+212,169,83,142,149,226,7,14,85,248,242,227,196,2,133,117,194,30,65,66,30,126,
+124,63,96,222,198,57,217,190,254,250,235,166,204,202,253,138,47,243,6,12,77,86,
+4,160,75,145,36,220,169,126,38,97,62,202,55,132,247,210,95,135,211,236,212,
+169,83,173,156,106,241,206,78,159,62,61,128,139,62,233,187,16,32,32,242,12,12,
+48,37,199,115,228,4,139,170,96,69,0,185,78,136,98,245,228,126,146,10,58,99,70,
+73,32,113,128,22,150,55,23,46,126,32,62,63,201,6,30,197,36,49,170,3,6,144,23,
+238,5,246,137,66,106,114,218,180,105,166,217,207,19,7,127,143,234,51,238,239,
+214,4,160,51,2,133,31,200,239,97,3,245,93,227,149,208,134,107,193,63,251,25,44,
+194,1,109,3,56,253,66,197,175,68,184,139,9,56,125,179,135,24,224,47,182,34,163,
+173,169,32,23,145,127,213,191,61,121,68,196,101,50,163,209,245,126,48,221,213,
+226,195,241,199,4,217,16,6,201,223,36,6,198,161,129,119,39,6,14,28,104,202,13,
+216,161,237,11,235,173,132,196,90,91,1,244,171,51,131,108,6,194,137,61,78,42,
+156,105,36,231,249,195,11,113,154,229,55,72,108,125,254,38,41,34,73,24,98,92,
+126,241,229,112,135,128,153,90,191,126,125,105,209,162,133,211,31,52,184,129,
+190,71,140,24,33,159,125,230,177,41,28,246,180,12,180,97,122,186,251,203,124,16,
+51,29,118,116,102,207,210,78,134,248,7,167,111,223,190,50,110,220,56,207,103,
+102,27,106,136,213,192,204,47,198,224,187,59,164,143,124,228,53,127,95,125,245,
+213,158,168,9,146,8,67,84,207,76,229,245,207,113,86,80,220,73,81,12,21,148,239,
+155,55,128,200,21,243,0,251,1,166,101,30,80,79,60,27,192,236,71,0,89,6,159,246,
+224,193,130,66,221,132,169,49,119,216,59,127,187,247,32,172,165,144,193,223,162,
+52,7,178,127,146,12,116,88,221,162,172,0,58,211,1,169,175,255,224,60,9,196,148,
+176,18,208,199,188,211,144,38,113,194,179,132,115,43,199,180,159,32,224,40,135,
+30,2,195,84,29,63,126,124,216,224,227,102,33,81,59,112,25,144,227,51,147,28,
+138,38,128,28,113,164,249,175,210,18,72,147,193,227,137,173,143,25,232,79,198,
+200,196,81,130,198,172,24,226,255,209,249,239,189,247,158,169,229,105,253,216,
+94,7,127,99,232,12,206,248,104,95,81,5,144,19,2,217,113,248,138,2,177,244,164,
+143,114,24,194,103,195,83,50,134,140,196,4,195,25,191,42,171,165,98,197,138,114,
+224,192,1,33,137,208,176,225,130,12,39,219,195,58,248,129,132,97,255,10,140,223,
+115,176,102,209,5,224,18,2,15,53,5,86,130,251,185,26,234,70,157,156,211,50,203,
+108,47,95,190,188,51,240,172,56,4,95,224,185,26,102,126,247,168,193,47,245,42,
+200,55,83,80,71,60,216,100,140,51,196,71,79,66,28,15,54,1,172,6,27,234,137,217,
+78,188,16,27,51,248,112,85,51,240,5,82,150,208,249,29,11,169,157,139,110,5,228,
+9,214,193,32,114,151,149,208,44,108,38,147,29,211,187,119,111,33,45,136,83,49,
+179,21,75,41,169,48,24,120,86,23,27,44,142,65,92,202,120,86,249,187,0,96,237,
+240,100,217,190,184,43,45,107,224,239,5,81,65,190,25,67,78,25,46,139,193,90,10,
+62,218,199,193,137,204,20,110,216,184,16,71,24,249,187,93,172,27,204,86,10,127,
+163,98,242,129,0,12,60,41,77,60,218,71,190,192,230,205,155,163,172,33,14,89,156,
+226,159,204,221,111,196,29,255,204,145,215,23,92,0,174,213,192,85,38,175,170,20,
+190,226,202,53,96,38,115,114,165,224,211,193,213,236,126,182,146,107,73,110,211,
+246,237,219,231,60,91,153,96,47,193,117,50,88,7,254,223,177,71,221,85,49,235,10,
+72,211,167,167,13,179,47,109,81,68,88,70,188,152,139,23,213,198,19,197,73,112,
+16,78,195,195,69,229,210,210,31,117,198,200,60,184,113,16,100,33,62,223,86,251,
+225,49,63,92,23,232,222,36,131,152,166,46,125,160,254,46,179,68,123,156,97,42,
+94,29,27,76,184,4,129,115,16,239,24,126,96,46,189,211,12,176,169,13,239,20,224,
+195,7,119,169,122,188,251,23,219,3,162,166,68,46,9,154,60,92,82,65,243,207,215,
+215,142,106,151,251,157,208,10,130,166,184,54,228,186,116,115,206,83,27,179,121,
+252,106,89,247,128,255,3,60,207,245,248,165,38,113,147,0,0,0,0,73,69,78,68,174,
+66,96,130};
+static Fl_Image *image_user_circle_64() {
+ static Fl_Image *image = NULL;
+ if (!image)
+ image = new Fl_PNG_Image("user_circle_64.png", idata_user_circle_64, 3909);
+ return image;
+}
+
+Fl_Choice *w_settings_user_commenttext=(Fl_Choice *)0;
+
+static void cb_Close(Fl_Button*, void*) {
+ if (g_shell_config)
+ g_shell_config->write(fluid_prefs, FD_STORE_USER);
+ g_layout_list.write(fluid_prefs, FD_STORE_USER);
+ settings_window->hide();
+}
+
+Fl_Double_Window* make_settings_window() {
+ { settings_window = new Fl_Double_Window(340, 580, "FLUID Settings");
+ settings_window->align(Fl_Align(FL_ALIGN_CLIP|FL_ALIGN_INSIDE));
+ { w_settings_tabs = new Fl_Tabs(10, 10, 320, 530);
+ w_settings_tabs->selection_color((Fl_Color)12);
+ w_settings_tabs->labelsize(11);
+ w_settings_tabs->labelcolor(FL_WHITE);
+ w_settings_tabs->callback((Fl_Callback*)cb_w_settings_tabs);
+ { w_settings_general_tab = new Fl_Group(10, 60, 320, 480, "General");
+ w_settings_general_tab->image( image_general_64() );
+ w_settings_general_tab->image()->scale(36, 24, 0, 1);
+ w_settings_general_tab->labelsize(11);
+ { Fl_Group* o = new Fl_Group(120, 78, 130, 25);
+ o->callback((Fl_Callback*)cb_);
+ { scheme_choice = new Fl_Scheme_Choice(120, 78, 120, 25, "Scheme: ");
+ scheme_choice->box(FL_UP_BOX);
+ scheme_choice->down_box(FL_BORDER_BOX);
+ scheme_choice->color(FL_BACKGROUND_COLOR);
+ scheme_choice->selection_color(FL_SELECTION_COLOR);
+ scheme_choice->labeltype(FL_NORMAL_LABEL);
+ scheme_choice->labelfont(1);
+ scheme_choice->labelsize(11);
+ scheme_choice->labelcolor(FL_FOREGROUND_COLOR);
+ scheme_choice->callback((Fl_Callback*)scheme_cb);
+ scheme_choice->align(Fl_Align(FL_ALIGN_LEFT));
+ scheme_choice->when(FL_WHEN_RELEASE);
+ init_scheme();
+ } // Fl_Scheme_Choice* scheme_choice
+ { Fl_Box* o = new Fl_Box(240, 78, 10, 25);
+ o->hide();
+ Fl_Group::current()->resizable(o);
+ } // Fl_Box* o
+ o->end();
+ } // Fl_Group* o
+ { Fl_Box* o = new Fl_Box(120, 115, 0, 20, "Options: ");
+ o->labelfont(1);
+ o->labelsize(11);
+ o->align(Fl_Align(FL_ALIGN_LEFT));
+ } // Fl_Box* o
+ { tooltips_button = new Fl_Check_Button(120, 115, 200, 20, "Show Tooltips");
+ tooltips_button->down_box(FL_DOWN_BOX);
+ tooltips_button->labelsize(11);
+ tooltips_button->callback((Fl_Callback*)cb_tooltips_button);
+ int b;
+ fluid_prefs.get("show_tooltips", b, 1);
+ tooltips_button->value(b);
+ Fl_Tooltip::enable(b);
+ } // Fl_Check_Button* tooltips_button
+ { completion_button = new Fl_Check_Button(120, 135, 200, 20, "Show Completion Dialogs");
+ completion_button->down_box(FL_DOWN_BOX);
+ completion_button->labelsize(11);
+ completion_button->callback((Fl_Callback*)cb_completion_button);
+ int b;
+ fluid_prefs.get("show_completion_dialogs", b, 1);
+ completion_button->value(b);
+ } // Fl_Check_Button* completion_button
+ { openlast_button = new Fl_Check_Button(120, 155, 200, 20, "Open Previous File on Startup");
+ openlast_button->down_box(FL_DOWN_BOX);
+ openlast_button->labelsize(11);
+ openlast_button->callback((Fl_Callback*)cb_openlast_button);
+ int b;
+ fluid_prefs.get("open_previous_file", b, 0);
+ openlast_button->value(b);
+ } // Fl_Check_Button* openlast_button
+ { prevpos_button = new Fl_Check_Button(120, 175, 200, 20, "Remember Window Positions");
+ prevpos_button->down_box(FL_DOWN_BOX);
+ prevpos_button->labelsize(11);
+ prevpos_button->callback((Fl_Callback*)cb_prevpos_button);
+ int b;
+ fluid_prefs.get("prev_window_pos", b, 1);
+ prevpos_button->value(b);
+ } // Fl_Check_Button* prevpos_button
+ { show_comments_button = new Fl_Check_Button(120, 195, 200, 20, "Show Comments in Browser");
+ show_comments_button->down_box(FL_DOWN_BOX);
+ show_comments_button->labelsize(11);
+ show_comments_button->callback((Fl_Callback*)cb_show_comments_button);
+ fluid_prefs.get("show_comments", show_comments, 1);
+ show_comments_button->value(show_comments);
+ } // Fl_Check_Button* show_comments_button
+ { Fl_Group* o = new Fl_Group(120, 225, 50, 20);
+ o->callback((Fl_Callback*)cb_1);
+ { recent_spinner = new Fl_Spinner(120, 225, 40, 20, "# Recent Files:");
+ recent_spinner->labelfont(1);
+ recent_spinner->labelsize(11);
+ recent_spinner->maximum(10);
+ recent_spinner->textsize(11);
+ recent_spinner->callback((Fl_Callback*)cb_recent_spinner);
+ recent_spinner->when(FL_WHEN_CHANGED);
+ int c;
+ fluid_prefs.get("recent_files", c, 5);
+ recent_spinner->maximum(10);
+ recent_spinner->value(c);
+ } // Fl_Spinner* recent_spinner
+ { Fl_Box* o = new Fl_Box(160, 225, 10, 20);
+ o->hide();
+ Fl_Group::current()->resizable(o);
+ } // Fl_Box* o
+ o->end();
+ } // Fl_Group* o
+ { use_external_editor_button = new Fl_Check_Button(120, 275, 200, 20, "Use for Code Nodes");
+ use_external_editor_button->down_box(FL_DOWN_BOX);
+ use_external_editor_button->labelsize(11);
+ use_external_editor_button->callback((Fl_Callback*)cb_use_external_editor_button);
+ fluid_prefs.get("use_external_editor", G_use_external_editor, 0);
+ use_external_editor_button->value(G_use_external_editor);
+ } // Fl_Check_Button* use_external_editor_button
+ { editor_command_input = new Fl_Input(120, 255, 200, 20, "External Editor:");
+ editor_command_input->tooltip("The editor command to open your external text editor.\nInclude any necessary "
+"flags to ensure your editor does not background itself.\nExamples:\n gvim -"
+"f\n gedit\n emacs");
+ editor_command_input->labelfont(1);
+ editor_command_input->labelsize(11);
+ editor_command_input->textfont(4);
+ editor_command_input->textsize(11);
+ editor_command_input->callback((Fl_Callback*)cb_editor_command_input);
+ editor_command_input->when(FL_WHEN_CHANGED);
+ fluid_prefs.get("external_editor_command", G_external_editor_command, "", sizeof(G_external_editor_command)-1);
+ editor_command_input->value(G_external_editor_command);
+ } // Fl_Input* editor_command_input
+ { Fl_Box* o = new Fl_Box(120, 300, 0, 20, "Overlays: ");
+ o->labelfont(1);
+ o->labelsize(11);
+ o->align(Fl_Align(FL_ALIGN_LEFT));
+ } // Fl_Box* o
+ { Fl_Check_Button* o = guides_button = new Fl_Check_Button(120, 300, 200, 20, "Show Positioning Guides");
+ guides_button->tooltip("show guides that help to position and resize widgets and enable snapping");
+ guides_button->down_box(FL_DOWN_BOX);
+ guides_button->labelsize(11);
+ guides_button->callback((Fl_Callback*)toggle_guides_cb);
+ o->value(show_guides);
+ } // Fl_Check_Button* guides_button
+ { Fl_Check_Button* o = restricted_button = new Fl_Check_Button(120, 320, 200, 20, "Show Restricted Areas");
+ restricted_button->tooltip("show overlapping and out of bounds areas, show unfilled areas in Fl_Pack grou"
+"ps");
+ restricted_button->down_box(FL_DOWN_BOX);
+ restricted_button->labelsize(11);
+ restricted_button->callback((Fl_Callback*)toggle_restricted_cb);
+ o->value(show_restricted);
+ } // Fl_Check_Button* restricted_button
+ { Fl_Check_Button* o = ghosted_outline_button = new Fl_Check_Button(120, 340, 200, 20, "Show Ghosted Group Outlines");
+ ghosted_outline_button->tooltip("groups with no box type or flat boxtypes without contrast will be rendered wi"
+"th a dim outline in the editing window only");
+ ghosted_outline_button->down_box(FL_DOWN_BOX);
+ ghosted_outline_button->labelsize(11);
+ ghosted_outline_button->callback((Fl_Callback*)toggle_ghosted_outline_cb);
+ o->value(show_ghosted_outline);
+ } // Fl_Check_Button* ghosted_outline_button
+ { Fl_Box* o = new Fl_Box(120, 530, 200, 10);
+ o->hide();
+ Fl_Group::current()->resizable(o);
+ } // Fl_Box* o
+ w_settings_general_tab->end();
+ Fl_Group::current()->resizable(w_settings_general_tab);
+ } // Fl_Group* w_settings_general_tab
+ { w_settings_project_tab = new Fl_Group(10, 60, 320, 480, "Project");
+ w_settings_project_tab->image( image_document_64() );
+ w_settings_project_tab->image()->scale(36, 24, 0, 1);
+ w_settings_project_tab->labelsize(11);
+ w_settings_project_tab->callback((Fl_Callback*)cb_w_settings_project_tab);
+ w_settings_project_tab->hide();
+ { Fl_Group* o = new Fl_Group(100, 78, 220, 30);
+ { Fl_Box* o = new Fl_Box(100, 78, 210, 30, "Use \"name.ext\" to set a file name\nor just \".ext\" to set extension.");
+ o->labelsize(11);
+ o->align(Fl_Align(132|FL_ALIGN_INSIDE));
+ } // Fl_Box* o
+ { Fl_Box* o = new Fl_Box(310, 78, 10, 30);
+ o->hide();
+ Fl_Group::current()->resizable(o);
+ } // Fl_Box* o
+ o->end();
+ } // Fl_Group* o
+ { header_file_input = new Fl_Input(100, 112, 220, 20, "Header File:");
+ header_file_input->tooltip("The name of the generated header file.");
+ header_file_input->box(FL_THIN_DOWN_BOX);
+ header_file_input->labelfont(1);
+ header_file_input->labelsize(11);
+ header_file_input->textfont(4);
+ header_file_input->textsize(11);
+ header_file_input->callback((Fl_Callback*)cb_header_file_input, (void*)(1));
+ header_file_input->when(FL_WHEN_CHANGED);
+ } // Fl_Input* header_file_input
+ { code_file_input = new Fl_Input(100, 137, 220, 20, "Code File:");
+ code_file_input->tooltip("The name of the generated code file.");
+ code_file_input->box(FL_THIN_DOWN_BOX);
+ code_file_input->labelfont(1);
+ code_file_input->labelsize(11);
+ code_file_input->textfont(4);
+ code_file_input->textsize(11);
+ code_file_input->callback((Fl_Callback*)cb_code_file_input, (void*)(1));
+ code_file_input->when(FL_WHEN_CHANGED);
+ } // Fl_Input* code_file_input
+ { include_H_from_C_button = new Fl_Check_Button(100, 162, 220, 20, "Include Header from Code");
+ include_H_from_C_button->tooltip("Include the header file from the code file.");
+ include_H_from_C_button->down_box(FL_DOWN_BOX);
+ include_H_from_C_button->labelsize(11);
+ include_H_from_C_button->callback((Fl_Callback*)cb_include_H_from_C_button);
+ } // Fl_Check_Button* include_H_from_C_button
+ { Fl_Box* o = new Fl_Box(100, 205, 0, 20, "Options: ");
+ o->labelfont(1);
+ o->labelsize(11);
+ o->align(Fl_Align(FL_ALIGN_LEFT));
+ } // Fl_Box* o
+ { use_FL_COMMAND_button = new Fl_Check_Button(100, 205, 220, 20, "Menu shortcuts use FL_COMMAND");
+ use_FL_COMMAND_button->tooltip("Replace FL_CTRL and FL_META with FL_COMMAND when generating menu shortcuts");
+ use_FL_COMMAND_button->down_box(FL_DOWN_BOX);
+ use_FL_COMMAND_button->labelsize(11);
+ use_FL_COMMAND_button->callback((Fl_Callback*)cb_use_FL_COMMAND_button);
+ } // Fl_Check_Button* use_FL_COMMAND_button
+ { utf8_in_src_button = new Fl_Check_Button(100, 230, 220, 20, "allow Unicode UTF-8 in source code");
+ utf8_in_src_button->tooltip("For older compilers, characters outside of the printable ASCII range are esca"
+"ped using octal notation `\\0123`. If this option is checked, Fluid will write"
+" UTF-8 characters unchanged.");
+ utf8_in_src_button->down_box(FL_DOWN_BOX);
+ utf8_in_src_button->labelsize(11);
+ utf8_in_src_button->callback((Fl_Callback*)cb_utf8_in_src_button);
+ } // Fl_Check_Button* utf8_in_src_button
+ { avoid_early_includes_button = new Fl_Check_Button(100, 255, 220, 20, "avoid early include of Fl.H");
+ avoid_early_includes_button->tooltip("Do not emit #include <FL//Fl.H> until it is needed by another include file.");
+ avoid_early_includes_button->down_box(FL_DOWN_BOX);
+ avoid_early_includes_button->labelsize(11);
+ avoid_early_includes_button->callback((Fl_Callback*)cb_avoid_early_includes_button);
+ } // Fl_Check_Button* avoid_early_includes_button
+ { Fl_Box* o = new Fl_Box(100, 283, 0, 20, "Experimental: ");
+ o->labelfont(1);
+ o->labelsize(11);
+ o->align(Fl_Align(FL_ALIGN_LEFT));
+ o->hide();
+ } // Fl_Box* o
+ { // // Matt: disabled
+ w_proj_mergeback = new Fl_Check_Button(100, 283, 220, 20, "generate MergeBack data");
+ w_proj_mergeback->tooltip("MergeBack is a feature under construction that allows changes in code files t"
+"o be merged back into the project file. Checking this option will generate add"
+"itional data in code and project files.");
+ w_proj_mergeback->down_box(FL_DOWN_BOX);
+ w_proj_mergeback->labelsize(11);
+ w_proj_mergeback->callback((Fl_Callback*)cb_w_proj_mergeback);
+ w_proj_mergeback->hide();
+ } // Fl_Check_Button* w_proj_mergeback
+ { Fl_Box* o = new Fl_Box(100, 530, 220, 10);
+ o->hide();
+ Fl_Group::current()->resizable(o);
+ } // Fl_Box* o
+ w_settings_project_tab->end();
+ } // Fl_Group* w_settings_project_tab
+ { w_settings_layout_tab = new Fl_Group(10, 60, 320, 480, "Layout");
+ w_settings_layout_tab->image( image_layout_64() );
+ w_settings_layout_tab->image()->scale(36, 24, 0, 1);
+ w_settings_layout_tab->labelsize(11);
+ w_settings_layout_tab->callback((Fl_Callback*)cb_w_settings_layout_tab);
+ w_settings_layout_tab->hide();
+ { Fl_Box* o = new Fl_Box(25, 78, 60, 24, "Layout:");
+ o->labelfont(1);
+ o->labelsize(11);
+ o->align(Fl_Align(FL_ALIGN_RIGHT|FL_ALIGN_INSIDE));
+ } // Fl_Box* o
+ { layout_choice = new Fl_Choice(85, 78, 187, 24);
+ layout_choice->down_box(FL_BORDER_BOX);
+ layout_choice->callback((Fl_Callback*)cb_layout_choice);
+ layout_choice->menu(menu_layout_choice);
+ } // Fl_Choice* layout_choice
+ { Fl_Button* o = new Fl_Button(272, 78, 24, 24, "+");
+ o->callback((Fl_Callback*)cb_2);
+ } // Fl_Button* o
+ { w_layout_menu = new Fl_Menu_Button(296, 78, 24, 24);
+ w_layout_menu->callback((Fl_Callback*)cb_w_layout_menu);
+ w_layout_menu_storage[0] = &menu_w_layout_menu[1];
+ w_layout_menu_storage[1] = &menu_w_layout_menu[2];
+ w_layout_menu_storage[2] = &menu_w_layout_menu[3];
+ w_layout_menu_storage[3] = &menu_w_layout_menu[4];
+ w_layout_menu->menu(menu_w_layout_menu);
+ } // Fl_Menu_Button* w_layout_menu
+ { Fl_Box* o = new Fl_Box(25, 107, 60, 20, "Preset:");
+ o->labelfont(1);
+ o->labelsize(11);
+ o->align(Fl_Align(FL_ALIGN_RIGHT|FL_ALIGN_INSIDE));
+ } // Fl_Box* o
+ { Fl_Group* o = new Fl_Group(85, 107, 235, 20);
+ o->labelsize(11);
+ o->callback((Fl_Callback*)propagate_load);
+ { preset_choice[0] = new Fl_Button(85, 107, 78, 20, "Application");
+ preset_choice[0]->type(102);
+ preset_choice[0]->value(1);
+ preset_choice[0]->compact(1);
+ preset_choice[0]->selection_color(FL_DARK2);
+ preset_choice[0]->labelsize(11);
+ preset_choice[0]->callback((Fl_Callback*)edit_layout_preset_cb, (void*)(0));
+ } // Fl_Button* preset_choice[0]
+ { preset_choice[1] = new Fl_Button(163, 107, 79, 20, "Dialog");
+ preset_choice[1]->type(102);
+ preset_choice[1]->compact(1);
+ preset_choice[1]->selection_color(FL_DARK2);
+ preset_choice[1]->labelsize(11);
+ preset_choice[1]->callback((Fl_Callback*)edit_layout_preset_cb, (void*)(1));
+ } // Fl_Button* preset_choice[1]
+ { preset_choice[2] = new Fl_Button(242, 107, 78, 20, "Toolbox");
+ preset_choice[2]->type(102);
+ preset_choice[2]->compact(1);
+ preset_choice[2]->selection_color(FL_DARK2);
+ preset_choice[2]->labelsize(11);
+ preset_choice[2]->callback((Fl_Callback*)edit_layout_preset_cb, (void*)(2));
+ } // Fl_Button* preset_choice[2]
+ o->end();
+ } // Fl_Group* o
+ { Fl_Box* o = new Fl_Box(85, 132, 235, 20, "---- Window ----");
+ o->labelfont(1);
+ o->labelsize(11);
+ o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
+ } // Fl_Box* o
+ { Fl_Box* o = new Fl_Box(25, 167, 60, 20, "Margins:");
+ o->labelsize(11);
+ o->align(Fl_Align(FL_ALIGN_RIGHT|FL_ALIGN_INSIDE));
+ } // Fl_Box* o
+ { Fl_Value_Input* o = new Fl_Value_Input(85, 167, 55, 20, "Left:");
+ o->labelsize(11);
+ o->maximum(32767);
+ o->step(1);
+ 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(145, 167, 55, 20, "Top:");
+ o->labelsize(11);
+ o->maximum(32767);
+ o->step(1);
+ 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(205, 167, 55, 20, "Right:");
+ o->labelsize(11);
+ o->maximum(32767);
+ o->step(1);
+ 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(265, 167, 55, 20, "Bottom:");
+ o->labelsize(11);
+ o->maximum(32767);
+ o->step(1);
+ o->textsize(11);
+ o->callback((Fl_Callback*)cb_Bottom);
+ o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ } // Fl_Value_Input* o
+ { Fl_Box* o = new Fl_Box(32, 201, 53, 20, "Grid:");
+ o->labelsize(11);
+ o->align(Fl_Align(FL_ALIGN_RIGHT|FL_ALIGN_INSIDE));
+ } // Fl_Box* o
+ { Fl_Value_Input* o = new Fl_Value_Input(85, 201, 55, 20, "Horizontal:");
+ o->labelsize(11);
+ o->maximum(32767);
+ 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(145, 201, 55, 20, "Vertical:");
+ o->labelsize(11);
+ o->maximum(32767);
+ 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_Box* o = new Fl_Box(85, 226, 235, 20, "---- Group ----");
+ o->labelfont(1);
+ o->labelsize(11);
+ o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
+ } // Fl_Box* o
+ { Fl_Box* o = new Fl_Box(25, 261, 60, 20, "Margins:");
+ o->labelsize(11);
+ o->align(Fl_Align(FL_ALIGN_RIGHT|FL_ALIGN_INSIDE));
+ } // Fl_Box* o
+ { Fl_Value_Input* o = new Fl_Value_Input(85, 261, 55, 20, "Left:");
+ o->labelsize(11);
+ o->maximum(32767);
+ o->step(1);
+ o->textsize(11);
+ o->callback((Fl_Callback*)cb_Left1);
+ o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ } // Fl_Value_Input* o
+ { Fl_Value_Input* o = new Fl_Value_Input(145, 261, 55, 20, "Top:");
+ o->labelsize(11);
+ o->maximum(32767);
+ o->step(1);
+ o->textsize(11);
+ o->callback((Fl_Callback*)cb_Top1);
+ o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ } // Fl_Value_Input* o
+ { Fl_Value_Input* o = new Fl_Value_Input(205, 261, 55, 20, "Right:");
+ o->labelsize(11);
+ o->maximum(32767);
+ o->step(1);
+ o->textsize(11);
+ o->callback((Fl_Callback*)cb_Right1);
+ o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ } // Fl_Value_Input* o
+ { Fl_Value_Input* o = new Fl_Value_Input(265, 261, 55, 20, "Bottom:");
+ o->labelsize(11);
+ o->maximum(32767);
+ o->step(1);
+ o->textsize(11);
+ o->callback((Fl_Callback*)cb_Bottom1);
+ o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ } // Fl_Value_Input* o
+ { Fl_Box* o = new Fl_Box(32, 295, 53, 20, "Grid:");
+ o->labelsize(11);
+ o->align(Fl_Align(FL_ALIGN_RIGHT|FL_ALIGN_INSIDE));
+ } // Fl_Box* o
+ { Fl_Value_Input* o = new Fl_Value_Input(85, 295, 55, 20, "Horizontal:");
+ o->labelsize(11);
+ o->maximum(32767);
+ o->step(1);
+ o->textsize(11);
+ o->callback((Fl_Callback*)cb_Horizontal1);
+ o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ } // Fl_Value_Input* o
+ { Fl_Value_Input* o = new Fl_Value_Input(145, 295, 55, 20, "Vertical:");
+ o->labelsize(11);
+ o->maximum(32767);
+ o->step(1);
+ o->textsize(11);
+ o->callback((Fl_Callback*)cb_Vertical1);
+ o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ } // Fl_Value_Input* o
+ { Fl_Box* o = new Fl_Box(85, 320, 235, 20, "---- Tabs ----");
+ o->labelfont(1);
+ o->labelsize(11);
+ o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
+ } // Fl_Box* o
+ { Fl_Box* o = new Fl_Box(25, 355, 60, 20, "Margins:");
+ o->labelsize(11);
+ o->align(Fl_Align(FL_ALIGN_RIGHT|FL_ALIGN_INSIDE));
+ } // Fl_Box* o
+ { Fl_Value_Input* o = new Fl_Value_Input(85, 355, 55, 20, "Top:");
+ o->labelsize(11);
+ o->maximum(32767);
+ o->step(1);
+ o->textsize(11);
+ o->callback((Fl_Callback*)cb_Top2);
+ o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ } // Fl_Value_Input* o
+ { Fl_Value_Input* o = new Fl_Value_Input(145, 355, 55, 20, "Bottom:");
+ o->labelsize(11);
+ o->maximum(32767);
+ o->step(1);
+ o->textsize(11);
+ o->callback((Fl_Callback*)cb_Bottom2);
+ o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ } // Fl_Value_Input* o
+ { Fl_Box* o = new Fl_Box(85, 380, 235, 20, "---- Widget ----");
+ o->labelfont(1);
+ o->labelsize(11);
+ o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
+ } // Fl_Box* o
+ { Fl_Box* o = new Fl_Box(25, 415, 60, 20, "Horizontal:");
+ o->labelsize(11);
+ o->align(Fl_Align(FL_ALIGN_RIGHT|FL_ALIGN_INSIDE));
+ } // Fl_Box* o
+ { Fl_Value_Input* o = new Fl_Value_Input(85, 414, 55, 20, "Minimum:");
+ o->labelsize(11);
+ o->maximum(32767);
+ o->step(1);
+ 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(145, 414, 55, 20, "Increment:");
+ o->labelsize(11);
+ o->maximum(32767);
+ o->step(1);
+ o->textsize(11);
+ o->callback((Fl_Callback*)cb_Increment);
+ o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ } // Fl_Value_Input* o
+ { Fl_Value_Input* o = new Fl_Value_Input(205, 414, 55, 20, "Gap:");
+ o->labelsize(11);
+ o->maximum(32767);
+ o->step(1);
+ 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(32, 440, 53, 20, "Vertical:");
+ o->labelsize(11);
+ o->align(Fl_Align(FL_ALIGN_RIGHT|FL_ALIGN_INSIDE));
+ } // Fl_Box* o
+ { Fl_Value_Input* o = new Fl_Value_Input(85, 440, 55, 20);
+ o->labelsize(11);
+ o->maximum(32767);
+ o->step(1);
+ o->textsize(11);
+ o->callback((Fl_Callback*)cb_3);
+ } // Fl_Value_Input* o
+ { Fl_Value_Input* o = new Fl_Value_Input(145, 440, 55, 20);
+ o->labelsize(11);
+ o->maximum(32767);
+ o->step(1);
+ o->textsize(11);
+ o->callback((Fl_Callback*)cb_4);
+ o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ } // Fl_Value_Input* o
+ { Fl_Value_Input* o = new Fl_Value_Input(205, 440, 55, 20);
+ o->labelsize(11);
+ o->maximum(32767);
+ o->step(1);
+ o->textsize(11);
+ o->callback((Fl_Callback*)cb_5);
+ o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ } // Fl_Value_Input* o
+ { Fl_Group* o = new Fl_Group(85, 465, 201, 20, "Label Font:");
+ o->labelsize(11);
+ o->callback((Fl_Callback*)propagate_load);
+ o->align(Fl_Align(FL_ALIGN_LEFT));
+ { Fl_Choice* o = new Fl_Choice(85, 465, 150, 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_6);
+ Fl_Group::current()->resizable(o);
+ o->menu(fontmenu_w_default);
+ } // Fl_Choice* o
+ { Fl_Value_Input* o = new Fl_Value_Input(235, 465, 50, 20);
+ o->tooltip("The size of the label text.");
+ o->labelsize(11);
+ o->minimum(1);
+ o->maximum(1000);
+ o->step(1);
+ o->value(14);
+ o->textsize(11);
+ o->callback((Fl_Callback*)cb_7);
+ } // Fl_Value_Input* o
+ o->end();
+ } // Fl_Group* o
+ { Fl_Group* o = new Fl_Group(85, 490, 200, 20, "Text Font:");
+ o->labelsize(11);
+ o->callback((Fl_Callback*)propagate_load);
+ o->align(Fl_Align(FL_ALIGN_LEFT));
+ { Fl_Choice* o = new Fl_Choice(85, 490, 150, 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_8);
+ o->menu(fontmenu_w_default);
+ } // Fl_Choice* o
+ { Fl_Value_Input* o = new Fl_Value_Input(235, 490, 50, 20);
+ o->tooltip("The value text size.");
+ o->labelsize(11);
+ o->maximum(1000);
+ o->step(1);
+ o->value(14);
+ o->textsize(11);
+ o->callback((Fl_Callback*)cb_9);
+ } // Fl_Value_Input* o
+ o->end();
+ } // Fl_Group* o
+ { Fl_Box* o = new Fl_Box(325, 535, 5, 5);
+ o->hide();
+ Fl_Group::current()->resizable(o);
+ } // Fl_Box* o
+ w_settings_layout_tab->end();
+ } // Fl_Group* w_settings_layout_tab
+ { w_settings_shell_tab = new Fl_Group(10, 60, 320, 480, "Shell");
+ w_settings_shell_tab->image( image_shell_64() );
+ w_settings_shell_tab->image()->scale(36, 24, 0, 1);
+ w_settings_shell_tab->labelsize(11);
+ w_settings_shell_tab->callback((Fl_Callback*)propagate_load);
+ w_settings_shell_tab->hide();
+ { Fl_Group* o = new Fl_Group(10, 90, 320, 132);
+ o->callback((Fl_Callback*)propagate_load);
+ { w_settings_shell_list = new Fl_Browser(100, 90, 220, 110, "Shell\ncommand\nlist:");
+ w_settings_shell_list->type(3);
+ w_settings_shell_list->labelfont(1);
+ w_settings_shell_list->labelsize(11);
+ w_settings_shell_list->textsize(13);
+ w_settings_shell_list->callback((Fl_Callback*)cb_w_settings_shell_list);
+ w_settings_shell_list->align(Fl_Align(FL_ALIGN_LEFT));
+ Fl_Group::current()->resizable(w_settings_shell_list);
+ } // Fl_Browser* w_settings_shell_list
+ { w_settings_shell_toolbox = new Fl_Group(100, 200, 220, 22);
+ w_settings_shell_toolbox->callback((Fl_Callback*)cb_w_settings_shell_toolbox);
+ { Fl_Button* o = new Fl_Button(100, 200, 24, 22, "+");
+ o->tooltip("insert a new shell command into the list after the selected command");
+ o->labelfont(1);
+ o->labelsize(11);
+ o->callback((Fl_Callback*)cb_a);
+ } // Fl_Button* o
+ { w_settings_shell_dup = new Fl_Button(124, 200, 24, 22, "++");
+ w_settings_shell_dup->tooltip("duplicate the selected shell command and insert it into the list");
+ w_settings_shell_dup->labelfont(1);
+ w_settings_shell_dup->labelsize(11);
+ w_settings_shell_dup->callback((Fl_Callback*)cb_w_settings_shell_dup);
+ w_settings_shell_dup->deactivate();
+ } // Fl_Button* w_settings_shell_dup
+ { w_settings_shell_remove = new Fl_Button(148, 200, 24, 22, "DEL");
+ w_settings_shell_remove->tooltip("remove the selected shell command - this can not be undone");
+ w_settings_shell_remove->labelsize(10);
+ w_settings_shell_remove->callback((Fl_Callback*)cb_w_settings_shell_remove);
+ w_settings_shell_remove->deactivate();
+ } // Fl_Button* w_settings_shell_remove
+ { w_settings_shell_menu = new Fl_Menu_Button(172, 200, 24, 22);
+ w_settings_shell_menu->labelsize(11);
+ w_settings_shell_menu->textsize(11);
+ w_settings_shell_menu->menu(menu_w_settings_shell_menu);
+ } // Fl_Menu_Button* w_settings_shell_menu
+ { Fl_Box* o = new Fl_Box(253, 200, 13, 22);
+ o->hide();
+ Fl_Group::current()->resizable(o);
+ } // Fl_Box* o
+ { Fl_Button* o = new Fl_Button(246, 200, 24, 22, "T");
+ o->tooltip("show terminal window");
+ o->labelfont(5);
+ o->labelsize(11);
+ o->callback((Fl_Callback*)cb_T);
+ } // Fl_Button* o
+ { w_settings_shell_play = new Fl_Button(270, 200, 50, 22, "Run");
+ w_settings_shell_play->tooltip("run the selected shell command");
+ w_settings_shell_play->labelsize(11);
+ w_settings_shell_play->callback((Fl_Callback*)cb_w_settings_shell_play);
+ w_settings_shell_play->deactivate();
+ } // Fl_Button* w_settings_shell_play
+ w_settings_shell_toolbox->end();
+ } // Fl_Group* w_settings_shell_toolbox
+ o->end();
+ } // Fl_Group* o
+ { w_settings_shell_cmd = new Fl_Group(10, 235, 320, 291);
+ w_settings_shell_cmd->callback((Fl_Callback*)cb_w_settings_shell_cmd);
+ { Fl_Input* o = new Fl_Input(100, 246, 220, 20, "Name:");
+ o->tooltip("file the shell command under this name in the shell command list");
+ o->labelfont(1);
+ o->labelsize(11);
+ o->textfont(4);
+ o->textsize(11);
+ o->callback((Fl_Callback*)cb_Name);
+ o->when(FL_WHEN_RELEASE | FL_WHEN_CHANGED | FL_WHEN_ENTER_KEY);
+ } // Fl_Input* o
+ { Fl_Input* o = new Fl_Input(100, 272, 220, 20, "Menu Label:");
+ o->tooltip("label text for the Shell menu in the main menu bar");
+ o->labelfont(1);
+ o->labelsize(11);
+ o->textfont(4);
+ o->textsize(11);
+ o->callback((Fl_Callback*)cb_Menu);
+ } // Fl_Input* o
+ { Fl_Group* o = new Fl_Group(100, 297, 140, 71);
+ o->callback((Fl_Callback*)cb_b);
+ { Fl_Shortcut_Button* o = new Fl_Shortcut_Button(100, 297, 130, 20, "Shortcut");
+ o->tooltip("an optional keyboard shortcut to run this shell command");
+ o->box(FL_UP_BOX);
+ o->color(FL_BACKGROUND_COLOR);
+ o->selection_color(FL_BACKGROUND_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(11);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->callback((Fl_Callback*)cb_Shortcut);
+ o->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE));
+ o->when(FL_WHEN_RELEASE);
+ } // Fl_Shortcut_Button* o
+ { Fl_Choice* o = new Fl_Choice(100, 322, 130, 20, "Store:");
+ o->tooltip("store this shell command as a user setting or save it with the .fl project fi"
+"le");
+ o->down_box(FL_BORDER_BOX);
+ o->labelfont(1);
+ o->labelsize(11);
+ o->textsize(11);
+ o->callback((Fl_Callback*)cb_Store);
+ o->menu(menu_Store);
+ } // Fl_Choice* o
+ { Fl_Choice* o = new Fl_Choice(100, 348, 130, 20, "Condition:");
+ o->tooltip("add this command to the main menu bar only if this condition is true");
+ o->down_box(FL_BORDER_BOX);
+ o->labelfont(1);
+ o->labelsize(11);
+ o->textsize(11);
+ o->callback((Fl_Callback*)cb_Condition);
+ o->menu(menu_Condition);
+ } // Fl_Choice* o
+ { Fl_Box* o = new Fl_Box(230, 297, 10, 71);
+ o->hide();
+ Fl_Group::current()->resizable(o);
+ } // Fl_Box* o
+ o->end();
+ } // Fl_Group* o
+ { Fl_Input* o = new Fl_Input(230, 348, 90, 20, "Label:");
+ o->labelfont(1);
+ o->labelsize(11);
+ o->textfont(4);
+ o->textsize(11);
+ o->callback((Fl_Callback*)cb_Label);
+ o->hide();
+ } // Fl_Input* o
+ { Fl_Group* o = new Fl_Group(100, 373, 220, 80);
+ o->callback((Fl_Callback*)propagate_load);
+ { Fl_Text_Editor* o = w_settings_shell_command = new Fl_Text_Editor(100, 373, 196, 80, "Shell script:");
+ w_settings_shell_command->labelfont(1);
+ w_settings_shell_command->labelsize(11);
+ w_settings_shell_command->textfont(4);
+ w_settings_shell_command->textsize(12);
+ w_settings_shell_command->callback((Fl_Callback*)cb_w_settings_shell_command);
+ w_settings_shell_command->align(Fl_Align(FL_ALIGN_LEFT));
+ Fl_Group::current()->resizable(w_settings_shell_command);
+ o->buffer(new Fl_Text_Buffer);
+ } // Fl_Text_Editor* w_settings_shell_command
+ { Fl_Group* o = new Fl_Group(296, 373, 24, 80);
+ { w_settings_shell_text_macros = new Fl_Menu_Button(296, 373, 24, 22);
+ w_settings_shell_text_macros->tooltip("a list of text replacements available for the shell script");
+ w_settings_shell_text_macros->labelsize(11);
+ w_settings_shell_text_macros->textsize(11);
+ w_settings_shell_text_macros->callback((Fl_Callback*)cb_w_settings_shell_text_macros);
+ w_settings_shell_text_macros->menu(menu_w_settings_shell_text_macros);
+ } // Fl_Menu_Button* w_settings_shell_text_macros
+ { Fl_Button* o = new Fl_Button(296, 395, 24, 22, "@+1fd_zoom");
+ o->tooltip("open the big code editor");
+ o->labelsize(11);
+ o->callback((Fl_Callback*)cb_1fd_zoom);
+ } // Fl_Button* o
+ { Fl_Box* o = new Fl_Box(296, 417, 24, 10);
+ o->hide();
+ Fl_Group::current()->resizable(o);
+ } // Fl_Box* o
+ o->end();
+ } // Fl_Group* o
+ o->end();
+ Fl_Group::current()->resizable(o);
+ } // Fl_Group* o
+ { Fl_Check_Button* o = new Fl_Check_Button(100, 458, 110, 20, "save .fl project file");
+ o->tooltip("save the project to the .fl file before running the command");
+ o->down_box(FL_DOWN_BOX);
+ o->labelsize(11);
+ o->callback((Fl_Callback*)cb_save);
+ } // Fl_Check_Button* o
+ { Fl_Check_Button* o = new Fl_Check_Button(100, 478, 110, 19, "save source code");
+ o->tooltip("generate the source code and header file before running the command");
+ o->down_box(FL_DOWN_BOX);
+ o->labelsize(11);
+ o->callback((Fl_Callback*)cb_save1);
+ } // Fl_Check_Button* o
+ { Fl_Check_Button* o = new Fl_Check_Button(100, 498, 110, 20, "save i18n strings");
+ o->tooltip("save the internationalisation strings before running the command");
+ o->down_box(FL_DOWN_BOX);
+ o->labelsize(11);
+ o->callback((Fl_Callback*)cb_save2);
+ } // Fl_Check_Button* o
+ { Fl_Check_Button* o = new Fl_Check_Button(214, 458, 106, 20, "show terminal");
+ o->tooltip("show the terminal window when launching this script");
+ o->down_box(FL_DOWN_BOX);
+ o->labelsize(11);
+ o->callback((Fl_Callback*)cb_show);
+ } // Fl_Check_Button* o
+ { Fl_Check_Button* o = new Fl_Check_Button(214, 478, 106, 19, "clear terminal");
+ o->tooltip("clear the teminal window before running this script");
+ o->down_box(FL_DOWN_BOX);
+ o->labelsize(11);
+ o->callback((Fl_Callback*)cb_clear);
+ } // Fl_Check_Button* o
+ { Fl_Check_Button* o = new Fl_Check_Button(214, 498, 106, 19, "clear term history");
+ o->tooltip("clear the teminal history in the terminal window");
+ o->down_box(FL_DOWN_BOX);
+ o->labelsize(11);
+ o->callback((Fl_Callback*)cb_clear1);
+ } // Fl_Check_Button* o
+ w_settings_shell_cmd->end();
+ Fl_Group::current()->resizable(w_settings_shell_cmd);
+ } // Fl_Group* w_settings_shell_cmd
+ { Fl_Box* o = w_settings_shell_fd_project = new Fl_Box(20, 70, 16, 15);
+ w_settings_shell_fd_project->bind_image( image_fd_project() );
+ w_settings_shell_fd_project->labelsize(11);
+ w_settings_shell_fd_project->hide();
+ w_settings_shell_fd_project->deactivate();
+ o->image()->scale(16, 16);
+ } // Fl_Box* w_settings_shell_fd_project
+ { Fl_Box* o = w_settings_shell_fd_user = new Fl_Box(20, 70, 16, 15);
+ w_settings_shell_fd_user->bind_image( image_fd_user() );
+ w_settings_shell_fd_user->labelsize(11);
+ w_settings_shell_fd_user->hide();
+ w_settings_shell_fd_user->deactivate();
+ o->image()->scale(16, 16);
+ } // Fl_Box* w_settings_shell_fd_user
+ w_settings_shell_tab->end();
+ } // Fl_Group* w_settings_shell_tab
+ { w_settings_i18n_tab = new Fl_Group(10, 60, 320, 480, "Locale");
+ w_settings_i18n_tab->image( image_language_64() );
+ w_settings_i18n_tab->image()->scale(36, 24, 0, 1);
+ w_settings_i18n_tab->labelsize(11);
+ w_settings_i18n_tab->callback((Fl_Callback*)cb_w_settings_i18n_tab);
+ w_settings_i18n_tab->hide();
+ { Fl_Group* o = new Fl_Group(100, 78, 170, 20);
+ o->callback((Fl_Callback*)propagate_load);
+ { i18n_type_chooser = new Fl_Choice(100, 78, 160, 20, "i18n Library:");
+ i18n_type_chooser->tooltip("Type of internationalization to use.");
+ i18n_type_chooser->box(FL_THIN_UP_BOX);
+ i18n_type_chooser->down_box(FL_BORDER_BOX);
+ i18n_type_chooser->labelsize(11);
+ i18n_type_chooser->textsize(11);
+ i18n_type_chooser->callback((Fl_Callback*)i18n_type_cb);
+ i18n_type_chooser->menu(menu_i18n_type_chooser);
+ } // Fl_Choice* i18n_type_chooser
+ { Fl_Box* o = new Fl_Box(260, 78, 10, 20);
+ o->hide();
+ Fl_Group::current()->resizable(o);
+ } // Fl_Box* o
+ o->end();
+ } // Fl_Group* o
+ { i18n_gnu_group = new Fl_Group(100, 103, 220, 95);
+ i18n_gnu_group->callback((Fl_Callback*)cb_i18n_gnu_group);
+ { i18n_gnu_include_input = new Fl_Input(100, 103, 220, 20, "#include:");
+ i18n_gnu_include_input->tooltip("The include file for internationalization.");
+ i18n_gnu_include_input->box(FL_THIN_DOWN_BOX);
+ i18n_gnu_include_input->labelsize(11);
+ i18n_gnu_include_input->textfont(4);
+ i18n_gnu_include_input->textsize(11);
+ i18n_gnu_include_input->callback((Fl_Callback*)cb_i18n_gnu_include_input);
+ } // Fl_Input* i18n_gnu_include_input
+ { i18n_gnu_conditional_input = new Fl_Input(100, 128, 220, 20, "Conditional:");
+ i18n_gnu_conditional_input->tooltip("only include the header file if this preprocessor macro is defined, for examp"
+"le FLTK_GETTEXT_FOUND");
+ i18n_gnu_conditional_input->box(FL_THIN_DOWN_BOX);
+ i18n_gnu_conditional_input->labelsize(11);
+ i18n_gnu_conditional_input->textfont(4);
+ i18n_gnu_conditional_input->textsize(11);
+ i18n_gnu_conditional_input->callback((Fl_Callback*)cb_i18n_gnu_conditional_input);
+ } // Fl_Input* i18n_gnu_conditional_input
+ { i18n_gnu_function_input = new Fl_Input(100, 153, 220, 20, "Function:");
+ i18n_gnu_function_input->tooltip("The function to call to translate labels and tooltips, usually \"gettext\" or"
+" \"_\"");
+ i18n_gnu_function_input->box(FL_THIN_DOWN_BOX);
+ i18n_gnu_function_input->labelsize(11);
+ i18n_gnu_function_input->textfont(4);
+ i18n_gnu_function_input->textsize(11);
+ i18n_gnu_function_input->callback((Fl_Callback*)cb_i18n_gnu_function_input);
+ } // Fl_Input* i18n_gnu_function_input
+ { i18n_gnu_static_function_input = new Fl_Input(100, 178, 220, 20, "Static Function:");
+ i18n_gnu_static_function_input->tooltip("function to call to translate static text, The function to call to internatio"
+"nalize labels and tooltips, usually \"gettext_noop\" or \"N_\"");
+ i18n_gnu_static_function_input->box(FL_THIN_DOWN_BOX);
+ i18n_gnu_static_function_input->labelsize(11);
+ i18n_gnu_static_function_input->textfont(4);
+ i18n_gnu_static_function_input->textsize(11);
+ i18n_gnu_static_function_input->callback((Fl_Callback*)cb_i18n_gnu_static_function_input);
+ } // Fl_Input* i18n_gnu_static_function_input
+ i18n_gnu_group->end();
+ } // Fl_Group* i18n_gnu_group
+ { i18n_posix_group = new Fl_Group(100, 103, 220, 95);
+ i18n_posix_group->callback((Fl_Callback*)cb_i18n_posix_group);
+ i18n_posix_group->hide();
+ { i18n_pos_include_input = new Fl_Input(100, 103, 220, 20, "#include:");
+ i18n_pos_include_input->tooltip("The include file for internationalization.");
+ i18n_pos_include_input->box(FL_THIN_DOWN_BOX);
+ i18n_pos_include_input->labelsize(11);
+ i18n_pos_include_input->textfont(4);
+ i18n_pos_include_input->textsize(11);
+ i18n_pos_include_input->callback((Fl_Callback*)cb_i18n_pos_include_input);
+ } // Fl_Input* i18n_pos_include_input
+ { i18n_pos_conditional_input = new Fl_Input(100, 128, 220, 20, "Conditional:");
+ i18n_pos_conditional_input->tooltip("only include the header file if this preprocessor macro is defined, for examp"
+"le FLTK_GETTEXT_FOUND");
+ i18n_pos_conditional_input->box(FL_THIN_DOWN_BOX);
+ i18n_pos_conditional_input->labelsize(11);
+ i18n_pos_conditional_input->textfont(4);
+ i18n_pos_conditional_input->textsize(11);
+ i18n_pos_conditional_input->callback((Fl_Callback*)cb_i18n_pos_conditional_input);
+ } // Fl_Input* i18n_pos_conditional_input
+ { i18n_pos_file_input = new Fl_Input(100, 153, 220, 20, "Catalog:");
+ i18n_pos_file_input->tooltip("The name of the message catalog.");
+ i18n_pos_file_input->box(FL_THIN_DOWN_BOX);
+ i18n_pos_file_input->labelsize(11);
+ i18n_pos_file_input->textfont(4);
+ i18n_pos_file_input->textsize(11);
+ i18n_pos_file_input->callback((Fl_Callback*)cb_i18n_pos_file_input);
+ } // Fl_Input* i18n_pos_file_input
+ { Fl_Group* o = new Fl_Group(100, 178, 90, 20);
+ o->callback((Fl_Callback*)cb_c);
+ { i18n_pos_set_input = new Fl_Int_Input(100, 178, 80, 20, "Set:");
+ i18n_pos_set_input->tooltip("The message set number.");
+ i18n_pos_set_input->type(2);
+ i18n_pos_set_input->box(FL_THIN_DOWN_BOX);
+ i18n_pos_set_input->labelsize(11);
+ i18n_pos_set_input->textfont(4);
+ i18n_pos_set_input->textsize(11);
+ i18n_pos_set_input->callback((Fl_Callback*)cb_i18n_pos_set_input);
+ } // Fl_Int_Input* i18n_pos_set_input
+ { Fl_Box* o = new Fl_Box(180, 178, 10, 20);
+ o->hide();
+ Fl_Group::current()->resizable(o);
+ } // Fl_Box* o
+ o->end();
+ } // Fl_Group* o
+ i18n_posix_group->end();
+ } // Fl_Group* i18n_posix_group
+ { Fl_Box* o = new Fl_Box(100, 530, 220, 10);
+ o->hide();
+ Fl_Group::current()->resizable(o);
+ } // Fl_Box* o
+ w_settings_i18n_tab->end();
+ } // Fl_Group* w_settings_i18n_tab
+ { w_settings_user_tab = new Fl_Group(10, 60, 320, 480, "User");
+ w_settings_user_tab->image( image_user_circle_64() );
+ w_settings_user_tab->image()->scale(36, 24, 0, 1);
+ w_settings_user_tab->labelsize(11);
+ w_settings_user_tab->callback((Fl_Callback*)cb_w_settings_user_tab);
+ w_settings_user_tab->hide();
+ { Fl_Box* o = new Fl_Box(100, 84, 220, 20, "---- Widget Browser ----");
+ o->labelfont(1);
+ o->labelsize(11);
+ o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
+ } // Fl_Box* o
+ { Fl_Group* o = new Fl_Group(100, 112, 220, 20);
+ o->callback((Fl_Callback*)propagate_load);
+ { Fl_Choice* o = new Fl_Choice(100, 112, 151, 20, "Label:");
+ 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_Comments, (void*)(&Widget_Browser::label_font));
+ Fl_Group::current()->resizable(o);
+ o->menu(fontmenu);
+ } // Fl_Choice* o
+ { Fl_Button* o = new Fl_Button(251, 112, 51, 20);
+ o->labelsize(11);
+ o->callback((Fl_Callback*)cb_Color_Chip, (void*)(&Widget_Browser::label_color));
+ } // Fl_Button* o
+ { Fl_Menu_Button* o = new Fl_Menu_Button(302, 112, 18, 20);
+ o->callback((Fl_Callback*)cb_Color_Choice, (void*)(&Widget_Browser::label_color));
+ o->menu(colormenu);
+ } // Fl_Menu_Button* o
+ o->end();
+ } // Fl_Group* o
+ { Fl_Group* o = new Fl_Group(100, 137, 220, 20);
+ o->callback((Fl_Callback*)propagate_load);
+ { Fl_Choice* o = new Fl_Choice(100, 137, 151, 20, "Class:");
+ 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_Comments, (void*)(&Widget_Browser::class_font));
+ Fl_Group::current()->resizable(o);
+ o->menu(fontmenu);
+ } // Fl_Choice* o
+ { Fl_Button* o = new Fl_Button(251, 137, 51, 20);
+ o->labelsize(11);
+ o->callback((Fl_Callback*)cb_Color_Chip, (void*)(&Widget_Browser::class_color));
+ } // Fl_Button* o
+ { Fl_Menu_Button* o = new Fl_Menu_Button(302, 137, 18, 20);
+ o->callback((Fl_Callback*)cb_Color_Choice, (void*)(&Widget_Browser::class_color));
+ o->menu(colormenu);
+ } // Fl_Menu_Button* o
+ o->end();
+ } // Fl_Group* o
+ { Fl_Group* o = new Fl_Group(100, 162, 220, 20);
+ o->callback((Fl_Callback*)propagate_load);
+ { Fl_Choice* o = new Fl_Choice(100, 162, 151, 20, "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_Comments, (void*)(&Widget_Browser::func_font));
+ Fl_Group::current()->resizable(o);
+ o->menu(fontmenu);
+ } // Fl_Choice* o
+ { Fl_Button* o = new Fl_Button(251, 162, 51, 20);
+ o->labelsize(11);
+ o->callback((Fl_Callback*)cb_Color_Chip, (void*)(&Widget_Browser::func_color));
+ } // Fl_Button* o
+ { Fl_Menu_Button* o = new Fl_Menu_Button(302, 162, 18, 20);
+ o->callback((Fl_Callback*)cb_Color_Choice, (void*)(&Widget_Browser::func_color));
+ o->menu(colormenu);
+ } // Fl_Menu_Button* o
+ o->end();
+ } // Fl_Group* o
+ { Fl_Group* o = new Fl_Group(100, 187, 220, 20);
+ o->callback((Fl_Callback*)propagate_load);
+ { Fl_Choice* o = new Fl_Choice(100, 187, 151, 20, "Name:");
+ 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_Comments, (void*)(&Widget_Browser::name_font));
+ Fl_Group::current()->resizable(o);
+ o->menu(fontmenu);
+ } // Fl_Choice* o
+ { Fl_Button* o = new Fl_Button(251, 187, 51, 20);
+ o->labelsize(11);
+ o->callback((Fl_Callback*)cb_Color_Chip, (void*)(&Widget_Browser::name_color));
+ } // Fl_Button* o
+ { Fl_Menu_Button* o = new Fl_Menu_Button(302, 187, 18, 20);
+ o->callback((Fl_Callback*)cb_Color_Choice, (void*)(&Widget_Browser::name_color));
+ o->menu(colormenu);
+ } // Fl_Menu_Button* o
+ o->end();
+ } // Fl_Group* o
+ { Fl_Group* o = new Fl_Group(100, 212, 220, 20);
+ o->callback((Fl_Callback*)propagate_load);
+ { Fl_Choice* o = new Fl_Choice(100, 212, 151, 20, "Code:");
+ 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_Comments, (void*)(&Widget_Browser::code_font));
+ Fl_Group::current()->resizable(o);
+ o->menu(fontmenu);
+ } // Fl_Choice* o
+ { Fl_Button* o = new Fl_Button(251, 212, 51, 20);
+ o->labelsize(11);
+ o->callback((Fl_Callback*)cb_Color_Chip, (void*)(&Widget_Browser::code_color));
+ } // Fl_Button* o
+ { Fl_Menu_Button* o = new Fl_Menu_Button(302, 212, 18, 20);
+ o->callback((Fl_Callback*)cb_Color_Choice, (void*)(&Widget_Browser::code_color));
+ o->menu(colormenu);
+ } // Fl_Menu_Button* o
+ o->end();
+ } // Fl_Group* o
+ { Fl_Group* o = new Fl_Group(100, 237, 220, 20);
+ o->callback((Fl_Callback*)propagate_load);
+ { Fl_Choice* o = w_settings_user_commenttext = new Fl_Choice(100, 237, 151, 20, "Comments:");
+ w_settings_user_commenttext->box(FL_THIN_UP_BOX);
+ w_settings_user_commenttext->down_box(FL_BORDER_BOX);
+ w_settings_user_commenttext->labelfont(1);
+ w_settings_user_commenttext->labelsize(11);
+ w_settings_user_commenttext->textsize(11);
+ w_settings_user_commenttext->callback((Fl_Callback*)cb_Comments, (void*)(&Widget_Browser::comment_font));
+ Fl_Group::current()->resizable(w_settings_user_commenttext);
+ o->menu(fontmenu);
+ } // Fl_Choice* w_settings_user_commenttext
+ { Fl_Button* o = new Fl_Button(251, 237, 51, 20);
+ o->labelsize(11);
+ o->callback((Fl_Callback*)cb_Color_Chip, (void*)(&Widget_Browser::comment_color));
+ } // Fl_Button* o
+ { Fl_Menu_Button* o = new Fl_Menu_Button(302, 237, 18, 20);
+ o->callback((Fl_Callback*)cb_Color_Choice, (void*)(&Widget_Browser::comment_color));
+ o->menu(colormenu);
+ } // Fl_Menu_Button* o
+ o->end();
+ } // Fl_Group* o
+ w_settings_user_tab->end();
+ } // Fl_Group* w_settings_user_tab
+ w_settings_tabs->end();
+ Fl_Group::current()->resizable(w_settings_tabs);
+ } // Fl_Tabs* w_settings_tabs
+ { Fl_Group* o = new Fl_Group(10, 550, 320, 20);
+ { Fl_Button* o = new Fl_Button(230, 550, 100, 20, "Close");
+ o->tooltip("Close this dialog.");
+ o->labelsize(11);
+ o->callback((Fl_Callback*)cb_Close);
+ } // Fl_Button* o
+ { Fl_Box* o = new Fl_Box(220, 550, 10, 20);
+ o->hide();
+ Fl_Group::current()->resizable(o);
+ } // Fl_Box* o
+ o->end();
+ } // Fl_Group* o
+ settings_window->size_range(340, 580);
+ settings_window->end();
+ } // Fl_Double_Window* settings_window
+ w_settings_tabs->do_callback(w_settings_tabs, LOAD);
+ return settings_window;
+}
+
+Fl_Double_Window *shell_run_window=(Fl_Double_Window *)0;
+
+Fl_Terminal *shell_run_terminal=(Fl_Terminal *)0;
+
+static void cb_Clear(Fl_Button*, void*) {
+ // clear screen, clear scrollback, home cursor
+ shell_run_terminal->append("\033[2J\033[3J\033[H");
+}
+
+Fl_Return_Button *shell_run_button=(Fl_Return_Button *)0;
+
+static void cb_shell_run_button(Fl_Return_Button*, void*) {
+ Fl_Preferences pos(fluid_prefs, "shell_run_Window_pos");
+ pos.set("x", shell_run_window->x());
+ pos.set("y", shell_run_window->y());
+ pos.set("w", shell_run_window->w());
+ pos.set("h", shell_run_window->h());
+ shell_run_window->hide();
+}
+
+Fl_Double_Window* make_shell_window() {
+ { shell_run_window = new Fl_Double_Window(555, 430, "Shell Command Output");
+ shell_run_window->align(Fl_Align(FL_ALIGN_CLIP|FL_ALIGN_INSIDE));
+ { shell_run_terminal = new Fl_Terminal(10, 10, 535, 375);
+ Fl_Group::current()->resizable(shell_run_terminal);
+ shell_run_terminal->ansi(1);
+ shell_run_terminal->history_lines(1000);
+ } // Fl_Terminal* shell_run_terminal
+ { Fl_Group* o = new Fl_Group(10, 395, 535, 25);
+ { Fl_Button* o = new Fl_Button(10, 395, 94, 25, "Clear");
+ o->callback((Fl_Callback*)cb_Clear);
+ } // Fl_Button* o
+ { Fl_Box* o = new Fl_Box(104, 395, 341, 25);
+ o->hide();
+ Fl_Group::current()->resizable(o);
+ } // Fl_Box* o
+ { shell_run_button = new Fl_Return_Button(445, 395, 100, 25, "Close");
+ shell_run_button->callback((Fl_Callback*)cb_shell_run_button);
+ } // Fl_Return_Button* shell_run_button
+ o->end();
+ } // Fl_Group* o
+ shell_run_window->end();
+ } // Fl_Double_Window* shell_run_window
+ return shell_run_window;
+}
+Fl_Menu_Item *w_layout_menu_storage[4];
diff --git a/fluid/panels/settings_panel.fl b/fluid/panels/settings_panel.fl
new file mode 100644
index 000000000..a53e96b4b
--- /dev/null
+++ b/fluid/panels/settings_panel.fl
@@ -0,0 +1,1883 @@
+# data file for the Fltk User Interface Designer (fluid)
+version 1.0500
+header_name {.h}
+code_name {.cxx}
+snap {
+ ver 1
+ current_suite {FLUID (based on FLTK)}
+ current_preset 0
+ suite {
+ name {FLUID (based on FLTK)}
+ preset { 1
+ 15 15 15 15 0 0
+ 10 10 10 10 0 0
+ 25 25
+ 20 10 4 20 4 8
+ 0 14 0 14
+ }
+ preset { 1
+ 10 10 10 10 0 0
+ 10 10 10 10 0 0
+ 20 20
+ 20 10 5 20 5 5
+ 0 11 0 11
+ }
+ preset { 1
+ 10 10 10 10 0 0
+ 10 10 10 10 0 0
+ 18 18
+ 16 8 2 16 4 2
+ 0 10 0 10
+ }
+ }
+}
+comment {//
+// Setting and shell dialogs for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2023 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
+//
+} {in_source in_header
+}
+
+decl {\#include "app/fluid.h"} {public global
+}
+
+decl {\#include "app/undo.h"} {private global
+}
+
+decl {\#include "app/Fd_Snap_Action.h"} {public global
+}
+
+decl {\#include "app/shell_command.h"} {public global
+}
+
+decl {\#include "tools/fluid_filename.h"} {public local
+}
+
+decl {\#include "widgets/widget_browser.h"} {public global
+}
+
+decl {\#include <FL/Fl_Text_Buffer.H>} {public local
+}
+
+decl {\#include <FL/Fl_Text_Display.H>} {public local
+}
+
+decl {\#include <FL/fl_string_functions.h>} {public local
+}
+
+decl {\#include <FL/Fl_Scheme_Choice.H>} {public local
+}
+
+decl {\#include <FL/Fl_Preferences.H>} {private global
+}
+
+decl {\#include <FL/Fl_Tooltip.H>} {private global
+}
+
+decl {\#include <FL/fl_ask.H>} {private global
+}
+
+decl {\#include "../src/flstring.h"} {selected private global
+}
+
+decl {\#include <string.h>} {private global
+}
+
+decl {void init_scheme(void);} {
+ comment {// initialize the scheme from preferences} public global
+}
+
+decl {extern struct Fl_Menu_Item *dbmanager_item;} {public local
+}
+
+decl {extern void i18n_cb(Fl_Choice *,void *);} {public local
+}
+
+decl {void scheme_cb(Fl_Scheme_Choice *, void *);} {public local
+}
+
+decl {int w_settings_shell_list_selected;} {public local
+}
+
+Function {cb_Comments(Fl_Choice* o, void* v)} {open private return_type void
+} {
+ code {Fl_Font *font = (Fl_Font*)o->user_data();
+if (v == LOAD) {
+ o->value(*font);
+} else {
+ *font = (int)o->value();
+ widget_browser->redraw();
+ widget_browser->save_prefs();
+}} {}
+}
+
+Function {cb_Color_Chip(Fl_Button* o, void* v)} {open private return_type void
+} {
+ code {Fl_Color *color = (Fl_Color*)o->user_data();
+if (v == LOAD) {
+ o->color(*color);
+ o->redraw();
+} else {
+ Fl_Color d = fl_show_colormap(*color);
+ *color = d;
+ o->color(d);
+ widget_browser->redraw();
+ widget_browser->save_prefs();
+}} {}
+}
+
+Function {cb_Color_Choice(Fl_Menu_Button* o, void* v)} {open private return_type void
+} {
+ code {if (v != LOAD) {
+ Fl_Color *color = (Fl_Color*)o->user_data();
+ Fl_Color d = (Fl_Color)(o->mvalue()->argument());
+ *color = d;
+ o->parent()->do_callback(o->parent(), LOAD);
+ widget_browser->redraw();
+ widget_browser->save_prefs();
+}} {}
+}
+
+Function {make_script_panel()} {open
+} {
+ Fl_Window script_panel {
+ label {Shell Script Editor}
+ callback {if (Fl::event()==FL_SHORTCUT && Fl::event_key()==FL_Escape)
+ return; // ignore Escape
+script_panel->hide(); // otherwise hide..} open
+ xywh {764 319 540 180} type Double labelsize 11 resizable
+ code0 {o->size_range(200, 150);} modal visible
+ } {
+ Fl_Text_Editor script_input {
+ xywh {10 10 520 130} box DOWN_BOX labelsize 11 when 13 textfont 4 textsize 11 resizable
+ code0 {script_input->buffer(new Fl_Text_Buffer);}
+ }
+ Fl_Group {} {
+ callback propagate_load open
+ xywh {10 150 520 20} labelsize 11
+ } {
+ Fl_Return_Button script_panel_ok {
+ label OK
+ xywh {400 150 60 20} labelsize 11 hotspot
+ }
+ Fl_Button script_panel_cancel {
+ label Cancel
+ xywh {470 150 60 20} labelsize 11
+ }
+ Fl_Box {} {
+ xywh {10 150 380 20} labelsize 11 resizable
+ }
+ }
+ }
+ code {// Enable line numbers
+script_input->linenumber_width(60);
+script_input->linenumber_size(script_input->Fl_Text_Display::textsize());} {}
+}
+
+Function {make_settings_window()} {open
+} {
+ Fl_Window settings_window {
+ label {FLUID Settings} open
+ xywh {392 362 340 580} type Double align 80 resizable size_range {340 580 0 0} visible
+ } {
+ Fl_Tabs w_settings_tabs {
+ callback {propagate_load(o, v);} open
+ xywh {10 10 320 530} selection_color 12 labelsize 11 labelcolor 255 resizable
+ } {
+ Fl_Group w_settings_general_tab {
+ label General open
+ scale_image {36 24} image {../icons/general_64.png} compress_image 1 xywh {10 60 320 480} labelsize 11 resizable
+ } {
+ Fl_Group {} {
+ callback {propagate_load(o, v);} open
+ xywh {120 78 130 25}
+ } {
+ Fl_Choice scheme_choice {
+ label {Scheme: }
+ callback scheme_cb open
+ xywh {120 78 120 25} down_box BORDER_BOX labelfont 1 labelsize 11
+ code0 {init_scheme();}
+ class Fl_Scheme_Choice
+ } {}
+ Fl_Box {} {
+ xywh {240 78 10 25} hide resizable
+ }
+ }
+ Fl_Box {} {
+ label {Options: }
+ xywh {120 115 0 20} labelfont 1 labelsize 11 align 4
+ }
+ Fl_Check_Button tooltips_button {
+ label {Show Tooltips}
+ callback {Fl_Tooltip::enable(tooltips_button->value());
+fluid_prefs.set("show_tooltips", tooltips_button->value());}
+ xywh {120 115 200 20} down_box DOWN_BOX labelsize 11
+ code0 {int b;}
+ code1 {fluid_prefs.get("show_tooltips", b, 1);}
+ code2 {tooltips_button->value(b);}
+ code3 {Fl_Tooltip::enable(b);}
+ }
+ Fl_Check_Button completion_button {
+ label {Show Completion Dialogs}
+ callback {fluid_prefs.set("show_completion_dialogs", completion_button->value());}
+ xywh {120 135 200 20} down_box DOWN_BOX labelsize 11
+ code0 {int b;}
+ code1 {fluid_prefs.get("show_completion_dialogs", b, 1);}
+ code2 {completion_button->value(b);}
+ }
+ Fl_Check_Button openlast_button {
+ label {Open Previous File on Startup}
+ callback {fluid_prefs.set("open_previous_file", openlast_button->value());}
+ xywh {120 155 200 20} down_box DOWN_BOX labelsize 11
+ code0 {int b;}
+ code1 {fluid_prefs.get("open_previous_file", b, 0);}
+ code2 {openlast_button->value(b);}
+ }
+ Fl_Check_Button prevpos_button {
+ label {Remember Window Positions}
+ callback {fluid_prefs.set("prev_window_pos", prevpos_button->value());}
+ xywh {120 175 200 20} down_box DOWN_BOX labelsize 11
+ code0 {int b;}
+ code1 {fluid_prefs.get("prev_window_pos", b, 1);}
+ code2 {prevpos_button->value(b);}
+ }
+ Fl_Check_Button show_comments_button {
+ label {Show Comments in Browser}
+ callback {show_comments = show_comments_button->value();
+fluid_prefs.set("show_comments", show_comments);
+redraw_browser();}
+ xywh {120 195 200 20} down_box DOWN_BOX labelsize 11
+ code1 {fluid_prefs.get("show_comments", show_comments, 1);}
+ code2 {show_comments_button->value(show_comments);}
+ }
+ Fl_Group {} {
+ callback {propagate_load(o, v);} open
+ xywh {120 225 50 20}
+ } {
+ Fl_Spinner recent_spinner {
+ label {\# Recent Files:}
+ callback {fluid_prefs.set("recent_files", recent_spinner->value());
+load_history();}
+ xywh {120 225 40 20} labelfont 1 labelsize 11 when 1 maximum 10 textsize 11
+ code0 {int c;}
+ code1 {fluid_prefs.get("recent_files", c, 5);}
+ code2 {recent_spinner->maximum(10);}
+ code3 {recent_spinner->value(c);}
+ }
+ Fl_Box {} {
+ xywh {160 225 10 20} hide resizable
+ }
+ }
+ Fl_Check_Button use_external_editor_button {
+ label {Use for Code Nodes}
+ callback {G_use_external_editor = use_external_editor_button->value();
+fluid_prefs.set("use_external_editor", G_use_external_editor);
+redraw_browser();}
+ xywh {120 275 200 20} down_box DOWN_BOX labelsize 11
+ code1 {fluid_prefs.get("use_external_editor", G_use_external_editor, 0);}
+ code2 {use_external_editor_button->value(G_use_external_editor);}
+ }
+ Fl_Input editor_command_input {
+ label {External Editor:}
+ callback {strncpy(G_external_editor_command, editor_command_input->value(), sizeof(G_external_editor_command)-1);
+G_external_editor_command[sizeof(G_external_editor_command)-1] = 0;
+fluid_prefs.set("external_editor_command", G_external_editor_command);
+redraw_browser();}
+ tooltip {The editor command to open your external text editor.
+Include any necessary flags to ensure your editor does not background itself.
+Examples:
+ gvim -f
+ gedit
+ emacs} xywh {120 255 200 20} labelfont 1 labelsize 11 when 1 textfont 4 textsize 11
+ code1 {fluid_prefs.get("external_editor_command", G_external_editor_command, "", sizeof(G_external_editor_command)-1);}
+ code2 {editor_command_input->value(G_external_editor_command);}
+ }
+ Fl_Box {} {
+ label {Overlays: }
+ xywh {120 300 0 20} labelfont 1 labelsize 11 align 4
+ }
+ Fl_Check_Button guides_button {
+ label {Show Positioning Guides}
+ callback toggle_guides_cb
+ tooltip {show guides that help to position and resize widgets and enable snapping} xywh {120 300 200 20} down_box DOWN_BOX labelsize 11
+ code0 {o->value(show_guides);}
+ }
+ Fl_Check_Button restricted_button {
+ label {Show Restricted Areas}
+ callback toggle_restricted_cb
+ tooltip {show overlapping and out of bounds areas, show unfilled areas in Fl_Pack groups} xywh {120 320 200 20} down_box DOWN_BOX labelsize 11
+ code0 {o->value(show_restricted);}
+ }
+ Fl_Check_Button ghosted_outline_button {
+ label {Show Ghosted Group Outlines}
+ callback toggle_ghosted_outline_cb
+ tooltip {groups with no box type or flat boxtypes without contrast will be rendered with a dim outline in the editing window only} xywh {120 340 200 20} down_box DOWN_BOX labelsize 11
+ code0 {o->value(show_ghosted_outline);}
+ }
+ Fl_Box {} {
+ xywh {120 530 200 10} hide resizable
+ }
+ }
+ Fl_Group w_settings_project_tab {
+ label Project
+ callback {propagate_load(o, v);} open
+ scale_image {36 24} image {../icons/document_64.png} compress_image 1 xywh {10 60 320 480} labelsize 11 hide
+ } {
+ Fl_Group {} {open
+ xywh {100 78 220 30}
+ } {
+ Fl_Box {} {
+ label {Use "name.ext" to set a file name
+or just ".ext" to set extension.}
+ xywh {100 78 210 30} labelsize 11 align 148
+ }
+ Fl_Box {} {
+ xywh {310 78 10 30} hide resizable
+ }
+ }
+ Fl_Input header_file_input {
+ label {Header File:}
+ user_data 1 user_data_type {void*}
+ callback {if (v == LOAD) {
+ o->value(g_project.header_file_name.c_str());
+} else {
+ if (strcmp(g_project.header_file_name.c_str(), o->value())) {
+ g_project.header_file_name = o->value();
+ set_modflag(1);
+ }
+}}
+ tooltip {The name of the generated header file.} xywh {100 112 220 20} box THIN_DOWN_BOX labelfont 1 labelsize 11 when 1 textfont 4 textsize 11
+ }
+ Fl_Input code_file_input {
+ label {Code File:}
+ user_data 1 user_data_type {void*}
+ callback {if (v == LOAD) {
+ o->value(g_project.code_file_name.c_str());
+} else {
+ if (strcmp(g_project.code_file_name.c_str(), o->value())) {
+ g_project.code_file_name = o->value();
+ set_modflag(1);
+ }
+}}
+ tooltip {The name of the generated code file.} xywh {100 137 220 20} box THIN_DOWN_BOX labelfont 1 labelsize 11 when 1 textfont 4 textsize 11
+ }
+ Fl_Check_Button include_H_from_C_button {
+ label {Include Header from Code}
+ callback {if (v == LOAD) {
+ o->value(g_project.include_H_from_C);
+} else {
+ if (g_project.include_H_from_C != o->value()) {
+ set_modflag(1);
+ g_project.include_H_from_C = o->value();
+ }
+}}
+ tooltip {Include the header file from the code file.} xywh {100 162 220 20} down_box DOWN_BOX labelsize 11
+ }
+ Fl_Box {} {
+ label {Options: }
+ xywh {100 205 0 20} labelfont 1 labelsize 11 align 4
+ }
+ Fl_Check_Button use_FL_COMMAND_button {
+ label {Menu shortcuts use FL_COMMAND}
+ callback {if (v == LOAD) {
+ o->value(g_project.use_FL_COMMAND);
+} else {
+ if (g_project.use_FL_COMMAND != o->value()) {
+ set_modflag(1);
+ g_project.use_FL_COMMAND = o->value();
+ }
+}}
+ tooltip {Replace FL_CTRL and FL_META with FL_COMMAND when generating menu shortcuts} xywh {100 205 220 20} down_box DOWN_BOX labelsize 11
+ }
+ Fl_Check_Button utf8_in_src_button {
+ label {allow Unicode UTF-8 in source code}
+ callback {if (v == LOAD) {
+ o->value(g_project.utf8_in_src);
+} else {
+ if (g_project.utf8_in_src != o->value()) {
+ set_modflag(1);
+ g_project.utf8_in_src = o->value();
+ }
+}}
+ tooltip {For older compilers, characters outside of the printable ASCII range are escaped using octal notation `\\0123`. If this option is checked, Fluid will write UTF-8 characters unchanged.} xywh {100 230 220 20} down_box DOWN_BOX labelsize 11
+ }
+ Fl_Check_Button avoid_early_includes_button {
+ label {avoid early include of Fl.H}
+ callback {if (v == LOAD) {
+ o->value(g_project.avoid_early_includes);
+} else {
+ if (g_project.avoid_early_includes != o->value()) {
+ set_modflag(1);
+ g_project.avoid_early_includes = o->value();
+ }
+}}
+ tooltip {Do not emit \#include <FL//Fl.H> until it is needed by another include file.} xywh {100 255 220 20} down_box DOWN_BOX labelsize 11
+ }
+ Fl_Box {} {
+ label {Experimental: }
+ xywh {100 283 0 20} labelfont 1 labelsize 11 align 4 hide
+ }
+ Fl_Check_Button w_proj_mergeback {
+ label {generate MergeBack data}
+ callback {if (v == LOAD) {
+ o->value(g_project.write_mergeback_data);
+} else {
+ if (g_project.write_mergeback_data != o->value()) {
+ set_modflag(1);
+ g_project.write_mergeback_data = o->value();
+ }
+}}
+ comment {// Matt: disabled}
+ tooltip {MergeBack is a feature under construction that allows changes in code files to be merged back into the project file. Checking this option will generate additional data in code and project files.} xywh {100 283 220 20} down_box DOWN_BOX labelsize 11 hide
+ }
+ Fl_Box {} {
+ xywh {100 530 220 10} hide resizable
+ }
+ }
+ Fl_Group w_settings_layout_tab {
+ label Layout
+ callback {propagate_load(o, v);} open
+ scale_image {36 24} image {../icons/layout_64.png} compress_image 1 xywh {10 60 320 480} labelsize 11 hide
+ } {
+ Fl_Box {} {
+ label {Layout:}
+ xywh {25 78 60 24} labelfont 1 labelsize 11 align 24
+ }
+ Fl_Choice layout_choice {
+ callback {if (v == LOAD) {
+ o->value(g_layout_list.current_suite());
+ } else {
+ int index = o->value();
+ g_layout_list.current_suite(index);
+ g_layout_list.update_dialogs();
+ }}
+ xywh {85 78 187 24} down_box BORDER_BOX
+ } {
+ MenuItem {} {
+ label FLTK
+ xywh {0 0 31 20}
+ }
+ MenuItem {} {
+ label Grid
+ xywh {0 0 31 20}
+ }
+ }
+ Fl_Button {} {
+ label {+}
+ callback {// Clone the current layout suite
+
+if (v == LOAD) return;
+
+std::string old_name = "Copy of ";
+old_name.append(g_layout_list[g_layout_list.current_suite()].name_);
+const char *new_name = fl_input("Enter a name for the new layout:", old_name.c_str());
+if (new_name == NULL)
+ return;
+
+g_layout_list.add(new_name);
+g_layout_list.update_dialogs();}
+ xywh {272 78 24 24}
+ }
+ Fl_Menu_Button w_layout_menu {
+ callback {if (v == LOAD) {
+ Fd_Layout_Suite &suite = g_layout_list[g_layout_list.current_suite()];
+ if (suite.storage_ == FD_STORE_INTERNAL) {
+ w_layout_menu_rename->deactivate();
+ for (int i=1; i<4; i++) w_layout_menu_storage[i]->deactivate();
+ w_layout_menu_delete->deactivate();
+ } else {
+ w_layout_menu_rename->activate();
+ for (int i=1; i<4; i++) w_layout_menu_storage[i]->activate();
+ w_layout_menu_delete->activate();
+ }
+ w_layout_menu_storage[suite.storage_]->setonly();
+}} open
+ xywh {296 78 24 24}
+ } {
+ MenuItem w_layout_menu_rename {
+ label {Rename...}
+ callback {// Rename the current layout suite
+
+std::string old_name = g_layout_list[g_layout_list.current_suite()].name_;
+const char *new_name = fl_input("Enter a new name for the layout:", old_name.c_str());
+if (new_name == NULL)
+ return;
+
+g_layout_list.rename(new_name);
+g_layout_list.update_dialogs();}
+ xywh {0 0 31 20} divider
+ }
+ MenuItem {w_layout_menu_storage[0]} {
+ label {@fd_beaker FLUID Built-In}
+ callback {Fd_Layout_Suite &suite = g_layout_list[g_layout_list.current_suite()];
+suite.storage(FD_STORE_INTERNAL);
+g_layout_list.update_dialogs();}
+ xywh {0 0 31 20} type Radio deactivate
+ }
+ MenuItem {w_layout_menu_storage[1]} {
+ label {@fd_user User Preference}
+ callback {Fd_Layout_Suite &suite = g_layout_list[g_layout_list.current_suite()];
+suite.storage(FD_STORE_USER);
+g_layout_list.update_dialogs();}
+ xywh {0 0 31 20} type Radio
+ }
+ MenuItem {w_layout_menu_storage[2]} {
+ label {@fd_project Store in .fl Project File}
+ callback {Fd_Layout_Suite &suite = g_layout_list[g_layout_list.current_suite()];
+suite.storage(FD_STORE_PROJECT);
+g_layout_list.update_dialogs();}
+ xywh {0 0 31 20} type Radio
+ }
+ MenuItem {w_layout_menu_storage[3]} {
+ label {@fd_file Store in External File}
+ callback {Fd_Layout_Suite &suite = g_layout_list[g_layout_list.current_suite()];
+suite.storage(FD_STORE_FILE);
+g_layout_list.update_dialogs();}
+ xywh {0 0 31 20} type Radio divider
+ }
+ MenuItem w_layout_menu_load {
+ label {Load...}
+ callback {// Give the user a file chooser and load that file
+Fl_Native_File_Chooser fnfc;
+fnfc.title("Load Layout Settings:");
+fnfc.type(Fl_Native_File_Chooser::BROWSE_FILE);
+fnfc.options(Fl_Native_File_Chooser::USE_FILTER_EXT);
+fnfc.filter("FLUID Layouts\\t*.fll\\n");
+if (fnfc.show() != 0) return;
+const char *new_filename = fnfc.filename();
+if (!new_filename) return;
+g_layout_list.load(new_filename);
+//g_layout_list.current_suite(n);
+g_layout_list.update_dialogs();}
+ xywh {0 0 31 20}
+ }
+ MenuItem w_layout_menu_save {
+ label {Save...}
+ callback {// Give the user a file chooser with a suggested name
+ Fl_Native_File_Chooser fnfc;
+ fnfc.title("Save Layout Settings:");
+ fnfc.type(Fl_Native_File_Chooser::BROWSE_SAVE_FILE);
+ fnfc.options(Fl_Native_File_Chooser::SAVEAS_CONFIRM | Fl_Native_File_Chooser::USE_FILTER_EXT);
+ fnfc.filter("FLUID Layouts\\t*.fll\\n");
+ std::string filename = g_layout_list.filename_;
+ fnfc.directory(fl_filename_path(filename).c_str());
+ fnfc.preset_file(fl_filename_name(filename).c_str());
+ if (fnfc.show() != 0) return;
+ const char *new_filename = fnfc.filename();
+ if (!new_filename) return;
+ g_layout_list.filename_ = new_filename;
+ g_layout_list.save(new_filename);}
+ xywh {0 0 31 20} divider
+ code0 {\#include <FL/Fl_Native_File_Chooser.H>}
+ }
+ MenuItem w_layout_menu_delete {
+ label Delete
+ callback {// remove the current suite
+
+g_layout_list.remove(g_layout_list.current_suite());
+g_layout_list.update_dialogs();}
+ xywh {0 0 31 20}
+ }
+ }
+ Fl_Box {} {
+ label {Preset:}
+ xywh {25 107 60 20} labelfont 1 labelsize 11 align 24
+ }
+ Fl_Group {} {
+ callback propagate_load open
+ xywh {85 107 235 20} labelsize 11
+ } {
+ Fl_Button {preset_choice[0]} {
+ label Application
+ user_data 0 user_data_type long
+ callback edit_layout_preset_cb
+ xywh {85 107 78 20} type Radio value 1 selection_color 45 labelsize 11 compact 1
+ }
+ Fl_Button {preset_choice[1]} {
+ label Dialog
+ user_data 1 user_data_type long
+ callback edit_layout_preset_cb
+ xywh {163 107 79 20} type Radio selection_color 45 labelsize 11 compact 1
+ }
+ Fl_Button {preset_choice[2]} {
+ label Toolbox
+ user_data 2 user_data_type long
+ callback edit_layout_preset_cb
+ xywh {242 107 78 20} type Radio selection_color 45 labelsize 11 compact 1
+ }
+ }
+ Fl_Box {} {
+ label {---- Window ----}
+ xywh {85 132 235 20} labelfont 1 labelsize 11 align 20
+ }
+ Fl_Box {} {
+ label {Margins:}
+ xywh {25 167 60 20} labelsize 11 align 24
+ }
+ Fl_Value_Input {} {
+ label {Left:}
+ callback {if (v == LOAD) {
+ o->value((double)layout->left_window_margin);
+} else {
+ layout->left_window_margin = (int)o->value();
+}}
+ xywh {85 167 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11
+ }
+ Fl_Value_Input {} {
+ label {Top:}
+ callback {if (v == LOAD) {
+ o->value((double)layout->top_window_margin);
+} else {
+ layout->top_window_margin = (int)o->value();
+}}
+ xywh {145 167 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11
+ }
+ Fl_Value_Input {} {
+ label {Right:}
+ callback {if (v == LOAD) {
+ o->value((double)layout->right_window_margin);
+} else {
+ layout->right_window_margin = (int)o->value();
+}}
+ xywh {205 167 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11
+ }
+ Fl_Value_Input {} {
+ label {Bottom:}
+ callback {if (v == LOAD) {
+ o->value((double)layout->bottom_window_margin);
+} else {
+ layout->bottom_window_margin = (int)o->value();
+}}
+ xywh {265 167 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11
+ }
+ Fl_Box {} {
+ label {Grid:}
+ xywh {32 201 53 20} labelsize 11 align 24
+ }
+ Fl_Value_Input {} {
+ label {Horizontal:}
+ callback {if (v == LOAD) {
+ o->value((double)layout->window_grid_x);
+} else {
+ layout->window_grid_x = (int)o->value();
+}}
+ xywh {85 201 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11
+ }
+ Fl_Value_Input {} {
+ label {Vertical:}
+ callback {if (v == LOAD) {
+ o->value((double)layout->window_grid_y);
+} else {
+ layout->window_grid_y = (int)o->value();
+}}
+ xywh {145 201 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11
+ }
+ Fl_Box {} {
+ label {---- Group ----}
+ xywh {85 226 235 20} labelfont 1 labelsize 11 align 20
+ }
+ Fl_Box {} {
+ label {Margins:}
+ xywh {25 261 60 20} labelsize 11 align 24
+ }
+ Fl_Value_Input {} {
+ label {Left:}
+ callback {if (v == LOAD) {
+ o->value((double)layout->left_group_margin);
+} else {
+ layout->left_group_margin = (int)o->value();
+}}
+ xywh {85 261 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11
+ }
+ Fl_Value_Input {} {
+ label {Top:}
+ callback {if (v == LOAD) {
+ o->value((double)layout->top_group_margin);
+} else {
+ layout->top_group_margin = (int)o->value();
+}}
+ xywh {145 261 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11
+ }
+ Fl_Value_Input {} {
+ label {Right:}
+ callback {if (v == LOAD) {
+ o->value((double)layout->right_group_margin);
+} else {
+ layout->right_group_margin = (int)o->value();
+}}
+ xywh {205 261 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11
+ }
+ Fl_Value_Input {} {
+ label {Bottom:}
+ callback {if (v == LOAD) {
+ o->value((double)layout->bottom_group_margin);
+} else {
+ layout->bottom_group_margin = (int)o->value();
+}}
+ xywh {265 261 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11
+ }
+ Fl_Box {} {
+ label {Grid:}
+ xywh {32 295 53 20} labelsize 11 align 24
+ }
+ Fl_Value_Input {} {
+ label {Horizontal:}
+ callback {if (v == LOAD) {
+ o->value((double)layout->group_grid_x);
+} else {
+ layout->group_grid_x = (int)o->value();
+}}
+ xywh {85 295 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11
+ }
+ Fl_Value_Input {} {
+ label {Vertical:}
+ callback {if (v == LOAD) {
+ o->value((double)layout->group_grid_y);
+} else {
+ layout->group_grid_y = (int)o->value();
+}}
+ xywh {145 295 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11
+ }
+ Fl_Box {} {
+ label {---- Tabs ----}
+ xywh {85 320 235 20} labelfont 1 labelsize 11 align 20
+ }
+ Fl_Box {} {
+ label {Margins:}
+ xywh {25 355 60 20} labelsize 11 align 24
+ }
+ Fl_Value_Input {} {
+ label {Top:}
+ callback {if (v == LOAD) {
+ o->value((double)layout->top_tabs_margin);
+} else {
+ layout->top_tabs_margin = (int)o->value();
+}}
+ xywh {85 355 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11
+ }
+ Fl_Value_Input {} {
+ label {Bottom:}
+ callback {if (v == LOAD) {
+ o->value((double)layout->bottom_tabs_margin);
+} else {
+ layout->bottom_tabs_margin = (int)o->value();
+}}
+ xywh {145 355 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11
+ }
+ Fl_Box {} {
+ label {---- Widget ----}
+ xywh {85 380 235 20} labelfont 1 labelsize 11 align 20
+ }
+ Fl_Box {} {
+ label {Horizontal:}
+ xywh {25 415 60 20} labelsize 11 align 24
+ }
+ Fl_Value_Input {} {
+ label {Minimum:}
+ callback {if (v == LOAD) {
+ o->value((double)layout->widget_min_w);
+} else {
+ layout->widget_min_w = (int)o->value();
+}}
+ xywh {85 414 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11
+ }
+ Fl_Value_Input {} {
+ label {Increment:}
+ callback {if (v == LOAD) {
+ o->value((double)layout->widget_inc_w);
+} else {
+ layout->widget_inc_w = (int)o->value();
+}}
+ xywh {145 414 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11
+ }
+ Fl_Value_Input {} {
+ label {Gap:}
+ callback {if (v == LOAD) {
+ o->value((double)layout->widget_gap_x);
+} else {
+ layout->widget_gap_x = (int)o->value();
+}}
+ xywh {205 414 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11
+ }
+ Fl_Box {} {
+ label {Vertical:}
+ xywh {32 440 53 20} labelsize 11 align 24
+ }
+ Fl_Value_Input {} {
+ callback {if (v == LOAD) {
+ o->value((double)layout->widget_min_h);
+} else {
+ layout->widget_min_h = (int)o->value();
+}}
+ xywh {85 440 55 20} labelsize 11 maximum 32767 step 1 textsize 11
+ }
+ Fl_Value_Input {} {
+ callback {if (v == LOAD) {
+ o->value((double)layout->widget_inc_h);
+} else {
+ layout->widget_inc_h = (int)o->value();
+}}
+ xywh {145 440 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11
+ }
+ Fl_Value_Input {} {
+ callback {if (v == LOAD) {
+ o->value((double)layout->widget_gap_y);
+} else {
+ layout->widget_gap_y = (int)o->value();
+}}
+ xywh {205 440 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11
+ }
+ Fl_Group {} {
+ label {Label Font:}
+ callback propagate_load open
+ xywh {85 465 201 20} labelsize 11 align 4
+ } {
+ Fl_Choice {} {
+ callback {if (v == LOAD) {
+ o->value(layout->labelfont+1);
+} else {
+ layout->labelfont = (int)o->value()-1;
+}} open
+ tooltip {The style of the label text.} xywh {85 465 150 20} box THIN_UP_BOX down_box BORDER_BOX labelfont 1 labelsize 11 textsize 11 resizable
+ code0 {extern Fl_Menu_Item fontmenu_w_default[];}
+ code1 {o->menu(fontmenu_w_default);}
+ } {}
+ Fl_Value_Input {} {
+ callback {if (v == LOAD) {
+ o->value(layout->labelsize);
+} else {
+ layout->labelsize = (int)o->value();
+}}
+ tooltip {The size of the label text.} xywh {235 465 50 20} labelsize 11 minimum 1 maximum 1000 step 1 value 14 textsize 11
+ }
+ }
+ Fl_Group {} {
+ label {Text Font:}
+ callback propagate_load open
+ xywh {85 490 200 20} labelsize 11 align 4
+ } {
+ Fl_Choice {} {
+ callback {if (v == LOAD) {
+ o->value(layout->textfont+1);
+} else {
+ layout->textfont = (int)o->value()-1;
+}} open
+ tooltip {The value text style.} xywh {85 490 150 20} box DOWN_BOX down_box BORDER_BOX labelfont 1 labelsize 11 textsize 11
+ code0 {extern Fl_Menu_Item fontmenu_w_default[];}
+ code1 {o->menu(fontmenu_w_default);}
+ } {}
+ Fl_Value_Input {} {
+ callback {if (v == LOAD) {
+ o->value(layout->textsize);
+} else {
+ layout->textsize = (int)o->value();
+}}
+ tooltip {The value text size.} xywh {235 490 50 20} labelsize 11 maximum 1000 step 1 value 14 textsize 11
+ }
+ }
+ Fl_Box {} {
+ xywh {325 535 5 5} hide resizable
+ }
+ }
+ Fl_Group w_settings_shell_tab {
+ label Shell
+ callback propagate_load open
+ scale_image {36 24} image {../icons/shell_64.png} compress_image 1 xywh {10 60 320 480} labelsize 11 hide
+ } {
+ Fl_Group {} {
+ callback propagate_load open
+ xywh {10 90 320 132}
+ } {
+ Fl_Browser w_settings_shell_list {
+ label {Shell
+command
+list:}
+ callback {if (v == LOAD) {
+ // load from g_shell_config
+ if (g_shell_config) {
+ o->clear();
+ w_settings_shell_list_selected = 0;
+ for (int i=0; i<g_shell_config->list_size; i++) {
+ Fd_Shell_Command *cmd = g_shell_config->list[i];
+ o->add(cmd->name.c_str());
+ if (cmd->storage == FD_STORE_USER)
+ o->icon(i+1, w_settings_shell_fd_user->image());
+ else if (cmd->storage == FD_STORE_PROJECT)
+ o->icon(i+1, w_settings_shell_fd_project->image());
+ }
+ }
+} else {
+// int prev_selected = w_settings_shell_list_selected;
+ w_settings_shell_list_selected = 0;
+ int selected = w_settings_shell_list->value();
+ if (selected) {
+ if (w_settings_shell_list->selected(selected))
+ w_settings_shell_list_selected = selected;
+ }
+ w_settings_shell_cmd->do_callback(w_settings_shell_cmd, LOAD);
+ w_settings_shell_toolbox->do_callback(w_settings_shell_toolbox, LOAD);
+}}
+ xywh {100 90 220 110} type Multi labelfont 1 labelsize 11 align 4 textsize 13 resizable
+ }
+ Fl_Group w_settings_shell_toolbox {
+ callback {if (v==LOAD) {
+ propagate_load(o, v);
+}} open
+ xywh {100 200 220 22}
+ } {
+ Fl_Button {} {
+ label {+}
+ callback {if (v != LOAD) {
+ int selected = w_settings_shell_list_selected;
+ Fd_Shell_Command *cmd = new Fd_Shell_Command("new shell command");
+ g_shell_config->insert(selected, cmd);
+ w_settings_shell_list->insert(selected+1, cmd->name.c_str());
+ w_settings_shell_list->deselect();
+ w_settings_shell_list->value(selected+1);
+ if (cmd->storage == FD_STORE_USER) {
+ w_settings_shell_list->icon(selected+1, w_settings_shell_fd_user->image());
+ } else if (cmd->storage == FD_STORE_PROJECT) {
+ w_settings_shell_list->icon(selected+1, w_settings_shell_fd_project->image());
+ set_modflag(1);
+ }
+ w_settings_shell_list->do_callback();
+ w_settings_shell_cmd->do_callback(w_settings_shell_cmd, LOAD);
+ w_settings_shell_toolbox->do_callback(w_settings_shell_toolbox, LOAD);
+ g_shell_config->rebuild_shell_menu();
+}}
+ tooltip {insert a new shell command into the list after the selected command} xywh {100 200 24 22} labelfont 1 labelsize 11
+ }
+ Fl_Button w_settings_shell_dup {
+ label {++}
+ callback {int selected = w_settings_shell_list_selected;
+if (v==LOAD) {
+ if (selected) {
+ o->activate();
+ } else {
+ o->deactivate();
+ }
+} else {
+ if (!selected) return;
+ Fd_Shell_Command *cmd = new Fd_Shell_Command(g_shell_config->list[selected-1]);
+ g_shell_config->insert(selected, cmd);
+ w_settings_shell_list->insert(selected+1, cmd->name.c_str());
+ w_settings_shell_list->deselect();
+ w_settings_shell_list->value(selected+1);
+ if (cmd->storage == FD_STORE_USER) {
+ w_settings_shell_list->icon(selected+1, w_settings_shell_fd_user->image());
+ } else if (cmd->storage == FD_STORE_PROJECT) {
+ w_settings_shell_list->icon(selected+1, w_settings_shell_fd_project->image());
+ set_modflag(1);
+ }
+ w_settings_shell_list->do_callback();
+ w_settings_shell_cmd->do_callback(w_settings_shell_cmd, LOAD);
+ w_settings_shell_toolbox->do_callback(w_settings_shell_toolbox, LOAD);
+ g_shell_config->rebuild_shell_menu();
+}}
+ tooltip {duplicate the selected shell command and insert it into the list} xywh {124 200 24 22} labelfont 1 labelsize 11 deactivate
+ }
+ Fl_Button w_settings_shell_remove {
+ label DEL
+ callback {int selected = w_settings_shell_list_selected;
+if (v==LOAD) {
+ if (selected) {
+ o->activate();
+ } else {
+ o->deactivate();
+ }
+} else {
+ if (!selected) return;
+ int ret = fl_choice("Delete the shell command\\n\\"%s\\"?\\n\\nThis can not be undone.",
+ "Delete", "Cancel", NULL, g_shell_config->list[selected-1]->name.c_str());
+ if (ret==1) return;
+ if (g_shell_config->at(selected-1)->storage == FD_STORE_PROJECT) set_modflag(1);
+ g_shell_config->remove(selected-1);
+ w_settings_shell_list->remove(selected);
+ if (selected <= w_settings_shell_list->size())
+ w_settings_shell_list->value(selected);
+ else
+ w_settings_shell_list->value(0);
+ w_settings_shell_list->do_callback();
+ w_settings_shell_cmd->do_callback(w_settings_shell_cmd, LOAD);
+ w_settings_shell_toolbox->do_callback(w_settings_shell_toolbox, LOAD);
+ g_shell_config->rebuild_shell_menu();
+}}
+ tooltip {remove the selected shell command - this can not be undone} xywh {148 200 24 22} labelsize 10 deactivate
+ }
+ Fl_Menu_Button w_settings_shell_menu {open
+ xywh {172 200 24 22} labelsize 11 textsize 11
+ } {
+ MenuItem {} {
+ label {Import...}
+ callback {if (v != LOAD)
+ Fd_Shell_Command_List::import_from_file();}
+ tooltip {import shell commands from an external file} xywh {90 90 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label {Export selected...}
+ callback {if (v != LOAD)
+ Fd_Shell_Command_List::export_selected();}
+ tooltip {export selected shell commands to an external file} xywh {10 10 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label {Example Scripts:}
+ xywh {20 20 100 20} labelfont 1 labelsize 10 hide deactivate
+ }
+ MenuItem {} {
+ label {Compile with fltk-config}
+ xywh {30 30 100 20} labelsize 11 hide
+ }
+ MenuItem {} {
+ label {Build and run}
+ xywh {40 40 100 20} labelsize 11 hide
+ }
+ MenuItem {} {
+ label {Build with Xcode on macOS}
+ xywh {50 50 100 20} labelsize 11 hide
+ }
+ MenuItem {} {
+ label {Build with CMake}
+ xywh {60 60 100 20} labelsize 11 hide
+ }
+ }
+ Fl_Box {} {
+ xywh {253 200 13 22} hide resizable
+ }
+ Fl_Button {} {
+ label T
+ callback {if (v!=LOAD) show_terminal_window();}
+ tooltip {show terminal window} xywh {246 200 24 22} labelfont 5 labelsize 11
+ }
+ Fl_Button w_settings_shell_play {
+ label Run
+ callback {int selected = w_settings_shell_list_selected;
+if (v==LOAD) {
+ if (selected) {
+ o->activate();
+ } else {
+ o->deactivate();
+ }
+} else {
+ if (!selected) return;
+ Fd_Shell_Command *cmd = g_shell_config->list[selected-1];
+ cmd->run();
+}}
+ tooltip {run the selected shell command} xywh {270 200 50 22} labelsize 11 deactivate
+ }
+ }
+ }
+ Fl_Group w_settings_shell_cmd {
+ callback {if (v==LOAD) {
+ int selected = w_settings_shell_list_selected;
+ if (selected) {
+ o->activate();
+ } else {
+ o->deactivate();
+ }
+ propagate_load(o, v);
+}} open
+ xywh {10 235 320 291} resizable
+ } {
+ Fl_Input {} {
+ label {Name:}
+ callback {int selected = w_settings_shell_list_selected;
+if (v == LOAD) {
+ if (selected) {
+ o->value(g_shell_config->list[selected-1]->name.c_str());
+ } else {
+ o->value("");
+ }
+} else {
+ if (selected) {
+ Fd_Shell_Command *cmd = g_shell_config->list[selected-1];
+ cmd->name = o->value();
+ w_settings_shell_list->text(selected, o->value());
+ if (cmd->storage == FD_STORE_PROJECT) set_modflag(1);
+ }
+}}
+ tooltip {file the shell command under this name in the shell command list} xywh {100 246 220 20} labelfont 1 labelsize 11 when 13 textfont 4 textsize 11
+ }
+ Fl_Input {} {
+ label {Menu Label:}
+ callback {int selected = w_settings_shell_list_selected;
+if (v == LOAD) {
+ if (selected) {
+ o->value(g_shell_config->list[selected-1]->label.c_str());
+ } else {
+ o->value("");
+ }
+} else {
+ if (selected) {
+ Fd_Shell_Command *cmd = g_shell_config->list[selected-1];
+ cmd->label = o->value();
+ cmd->update_shell_menu();
+ if (cmd->storage == FD_STORE_PROJECT) set_modflag(1);
+ }
+}}
+ tooltip {label text for the Shell menu in the main menu bar} xywh {100 272 220 20} labelfont 1 labelsize 11 textfont 4 textsize 11
+ }
+ Fl_Group {} {
+ callback {propagate_load(o, v);} open
+ xywh {100 297 140 71}
+ } {
+ Fl_Button {} {
+ label Shortcut
+ callback {int selected = w_settings_shell_list_selected;
+if (v == LOAD) {
+ if (selected) {
+ o->value(g_shell_config->list[selected-1]->shortcut);
+ //o->default_value(o->value());
+ } else {
+ o->value(0);
+ }
+} else {
+ if (selected) {
+ Fd_Shell_Command *cmd = g_shell_config->list[selected-1];
+ cmd->shortcut = o->value();
+ cmd->update_shell_menu();
+ if (cmd->storage == FD_STORE_PROJECT) set_modflag(1);
+ }
+}}
+ tooltip {an optional keyboard shortcut to run this shell command} xywh {100 297 130 20} labelsize 11 align 16
+ code0 {\#include <FL/Fl_Shortcut_Button.H>}
+ class Fl_Shortcut_Button
+ }
+ Fl_Choice {} {
+ label {Store:}
+ callback {int selected = w_settings_shell_list_selected;
+if (v == LOAD) {
+ if (selected) {
+ Fd_Tool_Store ts = g_shell_config->list[selected-1]->storage;
+ o->value(o->find_item_with_argument((long)ts));
+ } else {
+ o->value(o->find_item_with_argument((long)FD_STORE_USER));
+ }
+} else {
+ if (selected) {
+ Fd_Shell_Command *cmd = g_shell_config->list[selected-1];
+ Fd_Tool_Store ts = (Fd_Tool_Store)(o->mvalue()->argument());
+ if (cmd->storage == FD_STORE_PROJECT) set_modflag(1);
+ cmd->storage = ts;
+ //w_settings_shell_list->text(selected, cmd->name.c_str());
+ if (cmd->storage == FD_STORE_USER)
+ w_settings_shell_list->icon(selected, w_settings_shell_fd_user->image());
+ else if (cmd->storage == FD_STORE_PROJECT)
+ w_settings_shell_list->icon(selected, w_settings_shell_fd_project->image());
+ if (cmd->storage == FD_STORE_PROJECT) set_modflag(1);
+ }
+}} open
+ tooltip {store this shell command as a user setting or save it with the .fl project file} xywh {100 322 130 20} down_box BORDER_BOX labelfont 1 labelsize 11 textsize 11
+ } {
+ MenuItem {} {
+ label {@fd_user User Setting}
+ user_data FD_STORE_USER user_data_type long
+ xywh {0 0 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label {@fd_project Project File}
+ user_data FD_STORE_PROJECT user_data_type long
+ xywh {0 0 100 20} labelsize 11
+ }
+ }
+ Fl_Choice {} {
+ label {Condition:}
+ callback {int selected = w_settings_shell_list_selected;
+if (v == LOAD) {
+ if (selected) {
+ int cond = g_shell_config->list[selected-1]->condition;
+ o->value(o->find_item_with_argument(cond));
+ } else {
+ o->value(o->find_item_with_argument(0));
+ }
+} else {
+ if (selected) {
+ Fd_Shell_Command *cmd = g_shell_config->list[selected-1];
+ int cond = (int)(o->mvalue()->argument());
+ cmd->condition = cond;
+ g_shell_config->rebuild_shell_menu();
+ if (cmd->storage == FD_STORE_PROJECT) set_modflag(1);
+ }
+}} open
+ tooltip {add this command to the main menu bar only if this condition is true} xywh {100 348 130 20} down_box BORDER_BOX labelfont 1 labelsize 11 textsize 11
+ } {
+ MenuItem {} {
+ label {all platforms}
+ user_data {Fd_Shell_Command::ALWAYS} user_data_type long
+ xywh {0 0 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label {Windows only}
+ user_data {Fd_Shell_Command::WIN_ONLY} user_data_type long
+ xywh {0 0 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label {Linux only}
+ user_data {Fd_Shell_Command::UX_ONLY} user_data_type long
+ xywh {0 0 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label {macOS only}
+ user_data {Fd_Shell_Command::MAC_ONLY} user_data_type long
+ xywh {0 0 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label {Linux and macOS}
+ user_data {Fd_Shell_Command::MAC_AND_UX_ONLY} user_data_type long
+ xywh {0 0 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label {don't use}
+ user_data {Fd_Shell_Command::NEVER} user_data_type long
+ xywh {0 0 100 20} labelsize 11
+ }
+ }
+ Fl_Box {} {
+ xywh {230 297 10 71} hide resizable
+ }
+ }
+ Fl_Input {} {
+ label {Label:}
+ callback {if (v == LOAD) {
+// o->value(g_shell_command.c_str());
+} else {
+// g_shell_command = o->value();
+}}
+ xywh {230 348 90 20} labelfont 1 labelsize 11 textfont 4 textsize 11 hide
+ }
+ Fl_Group {} {
+ callback propagate_load open
+ xywh {100 373 220 80} resizable
+ } {
+ Fl_Text_Editor w_settings_shell_command {
+ label {Shell script:}
+ callback {int selected = w_settings_shell_list_selected;
+if (v == LOAD) {
+ if (selected) {
+ o->buffer()->text(g_shell_config->list[selected-1]->command.c_str());
+ } else {
+ o->buffer()->text("");
+ }
+} else {
+ if (selected) {
+ Fd_Shell_Command *cmd = g_shell_config->list[selected-1];
+ cmd->command = o->buffer()->text();
+ if (cmd->storage == FD_STORE_PROJECT) set_modflag(1);
+ }
+}}
+ xywh {100 373 196 80} labelfont 1 labelsize 11 align 4 textfont 4 textsize 12 resizable
+ code0 {o->buffer(new Fl_Text_Buffer);}
+ }
+ Fl_Group {} {open
+ xywh {296 373 24 80}
+ } {
+ Fl_Menu_Button w_settings_shell_text_macros {
+ callback {const Fl_Menu_Item *mi = o->mvalue();
+if (mi) {
+ char buffer[256];
+ fl_strlcpy(buffer, mi->label(), 255);
+ int n = (int)strlen(buffer)-1;
+ if (buffer[n]=='@') buffer[n] = 0;
+ char *word = buffer;
+ if (word[0]=='@') word++;
+ if (w_settings_shell_command->buffer()->selected()) {
+ int start = 0, end = 0;
+ w_settings_shell_command->buffer()->selection_position(&start, &end);
+ w_settings_shell_command->buffer()->replace(start, end, word);
+ } else {
+ int pos = w_settings_shell_command->insert_position();
+ w_settings_shell_command->buffer()->insert(pos, word);
+ }
+ w_settings_shell_command->do_callback(w_settings_shell_command, (void*)NULL);
+}} open
+ tooltip {a list of text replacements available for the shell script} xywh {296 373 24 22} labelsize 11 textsize 11
+ } {
+ MenuItem {} {
+ label {@@BASENAME@@}
+ xywh {80 80 100 20} labelfont 4 labelsize 11
+ }
+ MenuItem {} {
+ label {@@PROJECTFILE_PATH@@}
+ xywh {0 0 100 20} labelfont 4 labelsize 11
+ }
+ MenuItem {} {
+ label {@@PROJECTFILE_NAME@@}
+ xywh {10 10 100 20} labelfont 4 labelsize 11
+ }
+ MenuItem {} {
+ label {@@CODEFILE_PATH@@}
+ xywh {20 20 100 20} labelfont 4 labelsize 11
+ }
+ MenuItem {} {
+ label {@@CODEFILE_NAME@@}
+ xywh {30 30 100 20} labelfont 4 labelsize 11
+ }
+ MenuItem {} {
+ label {@@HEADERFILE_PATH@@}
+ xywh {40 40 100 20} labelfont 4 labelsize 11
+ }
+ MenuItem {} {
+ label {@@HEADERFILE_NAME@@}
+ xywh {50 50 100 20} labelfont 4 labelsize 11
+ }
+ MenuItem {} {
+ label {@@TEXTFILE_PATH@@}
+ xywh {60 60 100 20} labelfont 4 labelsize 11
+ }
+ MenuItem {} {
+ label {@@TEXTFILE_NAME@@}
+ xywh {70 70 100 20} labelfont 4 labelsize 11
+ }
+ MenuItem {} {
+ label {@@FLTK_CONFIG@@}
+ comment {Not yet implemented}
+ xywh {70 70 100 20} labelfont 4 labelsize 11 hide
+ }
+ MenuItem {} {
+ label {@@TMPDIR@@}
+ xywh {70 70 100 20} labelfont 4 labelsize 11
+ }
+ }
+ Fl_Button {} {
+ label {@+1fd_zoom}
+ callback {if (!script_panel) make_script_panel();
+script_input->buffer()->text(w_settings_shell_command->buffer()->text());
+script_panel->show();
+
+for (;;) {
+ Fl_Widget* w = Fl::readqueue();
+ if (w == script_panel_cancel) goto BREAK2;
+ else if (w == script_panel_ok) break;
+ else if (!w) Fl::wait();
+}
+
+w_settings_shell_command->buffer()->text(script_input->buffer()->text());
+w_settings_shell_command->do_callback();
+BREAK2:
+script_panel->hide();}
+ tooltip {open the big code editor} xywh {296 395 24 22} labelsize 11
+ }
+ Fl_Box {} {
+ xywh {296 417 24 10} hide resizable
+ }
+ }
+ }
+ Fl_Check_Button {} {
+ label {save .fl project file}
+ callback {int selected = w_settings_shell_list_selected;
+if (v == LOAD) {
+ if (selected) {
+ o->value(g_shell_config->list[selected-1]->flags & Fd_Shell_Command::SAVE_PROJECT);
+ } else {
+ o->value(0);
+ }
+} else {
+ if (selected) {
+ Fd_Shell_Command *cmd = g_shell_config->list[selected-1];
+ int v = o->value();
+ if (v) {
+ cmd->flags |= Fd_Shell_Command::SAVE_PROJECT;
+ } else {
+ cmd->flags &= ~Fd_Shell_Command::SAVE_PROJECT;
+ }
+ if (cmd->storage == FD_STORE_PROJECT) set_modflag(1);
+ }
+}}
+ tooltip {save the project to the .fl file before running the command} xywh {100 458 110 20} down_box DOWN_BOX labelsize 11
+ }
+ Fl_Check_Button {} {
+ label {save source code}
+ callback {int selected = w_settings_shell_list_selected;
+if (v == LOAD) {
+ if (selected) {
+ o->value(g_shell_config->list[selected-1]->flags & Fd_Shell_Command::SAVE_SOURCECODE);
+ } else {
+ o->value(0);
+ }
+} else {
+ if (selected) {
+ Fd_Shell_Command *cmd = g_shell_config->list[selected-1];
+ int v = o->value();
+ if (v) {
+ cmd->flags |= Fd_Shell_Command::SAVE_SOURCECODE;
+ } else {
+ cmd->flags &= ~Fd_Shell_Command::SAVE_SOURCECODE;
+ }
+ if (cmd->storage == FD_STORE_PROJECT) set_modflag(1);
+ }
+}}
+ tooltip {generate the source code and header file before running the command} xywh {100 478 110 19} down_box DOWN_BOX labelsize 11
+ }
+ Fl_Check_Button {} {
+ label {save i18n strings}
+ callback {int selected = w_settings_shell_list_selected;
+if (v == LOAD) {
+ if (selected) {
+ o->value(g_shell_config->list[selected-1]->flags & Fd_Shell_Command::SAVE_STRINGS);
+ } else {
+ o->value(0);
+ }
+} else {
+ if (selected) {
+ Fd_Shell_Command *cmd = g_shell_config->list[selected-1];
+ int v = o->value();
+ if (v) {
+ cmd->flags |= Fd_Shell_Command::SAVE_STRINGS;
+ } else {
+ cmd->flags &= ~Fd_Shell_Command::SAVE_STRINGS;
+ }
+ if (cmd->storage == FD_STORE_PROJECT) set_modflag(1);
+ }
+}}
+ tooltip {save the internationalisation strings before running the command} xywh {100 498 110 20} down_box DOWN_BOX labelsize 11
+ }
+ Fl_Check_Button {} {
+ label {show terminal}
+ callback {int selected = w_settings_shell_list_selected;
+if (v == LOAD) {
+ if (selected) {
+ o->value(!(g_shell_config->list[selected-1]->flags & Fd_Shell_Command::DONT_SHOW_TERMINAL));
+ } else {
+ o->value(0);
+ }
+} else {
+ if (selected) {
+ Fd_Shell_Command *cmd = g_shell_config->list[selected-1];
+ int v = o->value();
+ if (!v) {
+ cmd->flags |= Fd_Shell_Command::DONT_SHOW_TERMINAL;
+ } else {
+ cmd->flags &= ~Fd_Shell_Command::DONT_SHOW_TERMINAL;
+ }
+ if (cmd->storage == FD_STORE_PROJECT) set_modflag(1);
+ }
+}}
+ tooltip {show the terminal window when launching this script} xywh {214 458 106 20} down_box DOWN_BOX labelsize 11
+ }
+ Fl_Check_Button {} {
+ label {clear terminal}
+ callback {int selected = w_settings_shell_list_selected;
+if (v == LOAD) {
+ if (selected) {
+ o->value(g_shell_config->list[selected-1]->flags & Fd_Shell_Command::CLEAR_TERMINAL);
+ } else {
+ o->value(0);
+ }
+} else {
+ if (selected) {
+ Fd_Shell_Command *cmd = g_shell_config->list[selected-1];
+ int v = o->value();
+ if (v) {
+ cmd->flags |= Fd_Shell_Command::CLEAR_TERMINAL;
+ } else {
+ cmd->flags &= ~Fd_Shell_Command::CLEAR_TERMINAL;
+ }
+ if (cmd->storage == FD_STORE_PROJECT) set_modflag(1);
+ }
+}}
+ tooltip {clear the teminal window before running this script} xywh {214 478 106 19} down_box DOWN_BOX labelsize 11
+ }
+ Fl_Check_Button {} {
+ label {clear term history}
+ callback {int selected = w_settings_shell_list_selected;
+if (v == LOAD) {
+ if (selected) {
+ o->value(g_shell_config->list[selected-1]->flags & Fd_Shell_Command::CLEAR_HISTORY);
+ } else {
+ o->value(0);
+ }
+} else {
+ if (selected) {
+ Fd_Shell_Command *cmd = g_shell_config->list[selected-1];
+ int v = o->value();
+ if (v) {
+ cmd->flags |= Fd_Shell_Command::CLEAR_HISTORY;
+ } else {
+ cmd->flags &= ~Fd_Shell_Command::CLEAR_HISTORY;
+ }
+ if (cmd->storage == FD_STORE_PROJECT) set_modflag(1);
+ }
+}}
+ tooltip {clear the teminal history in the terminal window} xywh {214 498 106 19} down_box DOWN_BOX labelsize 11
+ }
+ }
+ Fl_Box w_settings_shell_fd_project {
+ image {../pixmaps/fd_project.png} compress_image 1 bind_image 1 bind_deimage 1 xywh {20 70 16 15} labelsize 11 hide deactivate
+ code0 {o->image()->scale(16, 16);}
+ }
+ Fl_Box w_settings_shell_fd_user {
+ image {../pixmaps/fd_user.png} compress_image 1 bind_image 1 bind_deimage 1 xywh {20 70 16 15} labelsize 11 hide deactivate
+ code0 {o->image()->scale(16, 16);}
+ }
+ }
+ Fl_Group w_settings_i18n_tab {
+ label Locale
+ callback {propagate_load(o, v);} open
+ scale_image {36 24} image {../icons/language_64.png} compress_image 1 xywh {10 60 320 480} labelsize 11 hide
+ } {
+ Fl_Group {} {
+ callback propagate_load open
+ xywh {100 78 170 20}
+ } {
+ Fl_Choice i18n_type_chooser {
+ label {i18n Library:}
+ callback i18n_type_cb open
+ tooltip {Type of internationalization to use.} xywh {100 78 160 20} box THIN_UP_BOX down_box BORDER_BOX labelsize 11 textsize 11
+ } {
+ MenuItem {} {
+ label None
+ xywh {0 -11 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label {GNU gettext}
+ xywh {0 -11 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label {POSIX catgets}
+ xywh {0 -11 100 20} labelsize 11
+ }
+ }
+ Fl_Box {} {
+ xywh {260 78 10 20} hide resizable
+ }
+ }
+ Fl_Group i18n_gnu_group {
+ callback {propagate_load(o, v);} open
+ xywh {100 103 220 95}
+ } {
+ Fl_Input i18n_gnu_include_input {
+ label {\#include:}
+ callback {if (v == LOAD) {
+ o->value(g_project.i18n_gnu_include.c_str());
+} else {
+ undo_checkpoint();
+ g_project.i18n_gnu_include = o->value();
+ set_modflag(1);
+}}
+ tooltip {The include file for internationalization.} xywh {100 103 220 20} box THIN_DOWN_BOX labelsize 11 textfont 4 textsize 11
+ }
+ Fl_Input i18n_gnu_conditional_input {
+ label {Conditional:}
+ callback {if (v == LOAD) {
+ o->value(g_project.i18n_gnu_conditional.c_str());
+} else {
+ undo_checkpoint();
+ g_project.i18n_gnu_conditional = o->value();
+ set_modflag(1);
+}}
+ tooltip {only include the header file if this preprocessor macro is defined, for example FLTK_GETTEXT_FOUND} xywh {100 128 220 20} box THIN_DOWN_BOX labelsize 11 textfont 4 textsize 11
+ }
+ Fl_Input i18n_gnu_function_input {
+ label {Function:}
+ callback {if (v == LOAD) {
+ o->value(g_project.i18n_gnu_function.c_str());
+} else {
+ undo_checkpoint();
+ g_project.i18n_gnu_function = o->value();
+ set_modflag(1);
+}}
+ tooltip {The function to call to translate labels and tooltips, usually "gettext" or "_"} xywh {100 153 220 20} box THIN_DOWN_BOX labelsize 11 textfont 4 textsize 11
+ }
+ Fl_Input i18n_gnu_static_function_input {
+ label {Static Function:}
+ callback {if (v == LOAD) {
+ o->value(g_project.i18n_gnu_static_function.c_str());
+} else {
+ undo_checkpoint();
+ g_project.i18n_gnu_static_function = o->value();
+ set_modflag(1);
+}}
+ tooltip {function to call to translate static text, The function to call to internationalize labels and tooltips, usually "gettext_noop" or "N_"} xywh {100 178 220 20} box THIN_DOWN_BOX labelsize 11 textfont 4 textsize 11
+ }
+ }
+ Fl_Group i18n_posix_group {
+ callback {propagate_load(o, v);} open
+ xywh {100 103 220 95} hide
+ } {
+ Fl_Input i18n_pos_include_input {
+ label {\#include:}
+ callback {if (v == LOAD) {
+ o->value(g_project.i18n_pos_include.c_str());
+} else {
+ undo_checkpoint();
+ g_project.i18n_pos_include = o->value();
+ set_modflag(1);
+}}
+ tooltip {The include file for internationalization.} xywh {100 103 220 20} box THIN_DOWN_BOX labelsize 11 textfont 4 textsize 11
+ }
+ Fl_Input i18n_pos_conditional_input {
+ label {Conditional:}
+ callback {if (v == LOAD) {
+ o->value(g_project.i18n_pos_conditional.c_str());
+} else {
+ undo_checkpoint();
+ g_project.i18n_pos_conditional = o->value();
+ set_modflag(1);
+}}
+ tooltip {only include the header file if this preprocessor macro is defined, for example FLTK_GETTEXT_FOUND} xywh {100 128 220 20} box THIN_DOWN_BOX labelsize 11 textfont 4 textsize 11
+ }
+ Fl_Input i18n_pos_file_input {
+ label {Catalog:}
+ callback {if (v == LOAD) {
+ o->value(g_project.i18n_pos_file.c_str());
+} else {
+ undo_checkpoint();
+ g_project.i18n_pos_file = o->value();
+ set_modflag(1);
+}}
+ tooltip {The name of the message catalog.} xywh {100 153 220 20} box THIN_DOWN_BOX labelsize 11 textfont 4 textsize 11
+ }
+ Fl_Group {} {
+ callback {propagate_load(o, v);} open
+ xywh {100 178 90 20}
+ } {
+ Fl_Input i18n_pos_set_input {
+ label {Set:}
+ callback {if (v == LOAD) {
+ o->value(g_project.i18n_pos_set.c_str());
+} else {
+ undo_checkpoint();
+ g_project.i18n_pos_set = o->value();
+ set_modflag(1);
+}}
+ tooltip {The message set number.} xywh {100 178 80 20} type Int box THIN_DOWN_BOX labelsize 11 textfont 4 textsize 11
+ }
+ Fl_Box {} {
+ xywh {180 178 10 20} hide resizable
+ }
+ }
+ }
+ Fl_Box {} {
+ xywh {100 530 220 10} hide resizable
+ }
+ }
+ Fl_Group w_settings_user_tab {
+ label User
+ callback {propagate_load(o, v);} open
+ scale_image {36 24} image {../icons/user_circle_64.png} compress_image 1 xywh {10 60 320 480} labelsize 11 hide
+ code0 {\#include <FL/fl_show_colormap.H>}
+ } {
+ Fl_Box {} {
+ label {---- Widget Browser ----}
+ xywh {100 84 220 20} labelfont 1 labelsize 11 align 20
+ }
+ Fl_Group {} {
+ callback propagate_load open
+ xywh {100 112 220 20}
+ } {
+ Fl_Choice {} {
+ label {Label:}
+ user_data {&Widget_Browser::label_font}
+ callback cb_Comments open
+ xywh {100 112 151 20} box THIN_UP_BOX down_box BORDER_BOX labelfont 1 labelsize 11 textsize 11 resizable
+ code0 {extern Fl_Menu_Item fontmenu[];}
+ code1 {o->menu(fontmenu);}
+ } {}
+ Fl_Button {} {
+ user_data {&Widget_Browser::label_color}
+ callback cb_Color_Chip
+ xywh {251 112 51 20} labelsize 11
+ }
+ Fl_Menu_Button {} {
+ user_data {&Widget_Browser::label_color}
+ callback cb_Color_Choice open
+ xywh {302 112 18 20}
+ code0 {extern Fl_Menu_Item colormenu[];}
+ code1 {o->menu(colormenu);}
+ } {}
+ }
+ Fl_Group {} {
+ callback propagate_load open
+ xywh {100 137 220 20}
+ } {
+ Fl_Choice {} {
+ label {Class:}
+ user_data {&Widget_Browser::class_font}
+ callback cb_Comments open
+ xywh {100 137 151 20} box THIN_UP_BOX down_box BORDER_BOX labelfont 1 labelsize 11 textsize 11 resizable
+ code0 {extern Fl_Menu_Item fontmenu[];}
+ code1 {o->menu(fontmenu);}
+ } {}
+ Fl_Button {} {
+ user_data {&Widget_Browser::class_color}
+ callback cb_Color_Chip
+ xywh {251 137 51 20} labelsize 11
+ }
+ Fl_Menu_Button {} {
+ user_data {&Widget_Browser::class_color}
+ callback cb_Color_Choice open
+ xywh {302 137 18 20}
+ code0 {extern Fl_Menu_Item colormenu[];}
+ code1 {o->menu(colormenu);}
+ } {}
+ }
+ Fl_Group {} {
+ callback propagate_load open
+ xywh {100 162 220 20}
+ } {
+ Fl_Choice {} {
+ label {Function:}
+ user_data {&Widget_Browser::func_font}
+ callback cb_Comments open
+ xywh {100 162 151 20} box THIN_UP_BOX down_box BORDER_BOX labelfont 1 labelsize 11 textsize 11 resizable
+ code0 {extern Fl_Menu_Item fontmenu[];}
+ code1 {o->menu(fontmenu);}
+ } {}
+ Fl_Button {} {
+ user_data {&Widget_Browser::func_color}
+ callback cb_Color_Chip
+ xywh {251 162 51 20} labelsize 11
+ }
+ Fl_Menu_Button {} {
+ user_data {&Widget_Browser::func_color}
+ callback cb_Color_Choice open
+ xywh {302 162 18 20}
+ code0 {extern Fl_Menu_Item colormenu[];}
+ code1 {o->menu(colormenu);}
+ } {}
+ }
+ Fl_Group {} {
+ callback propagate_load open
+ xywh {100 187 220 20}
+ } {
+ Fl_Choice {} {
+ label {Name:}
+ user_data {&Widget_Browser::name_font}
+ callback cb_Comments open
+ xywh {100 187 151 20} box THIN_UP_BOX down_box BORDER_BOX labelfont 1 labelsize 11 textsize 11 resizable
+ code0 {extern Fl_Menu_Item fontmenu[];}
+ code1 {o->menu(fontmenu);}
+ } {}
+ Fl_Button {} {
+ user_data {&Widget_Browser::name_color}
+ callback cb_Color_Chip
+ xywh {251 187 51 20} labelsize 11
+ }
+ Fl_Menu_Button {} {
+ user_data {&Widget_Browser::name_color}
+ callback cb_Color_Choice open
+ xywh {302 187 18 20}
+ code0 {extern Fl_Menu_Item colormenu[];}
+ code1 {o->menu(colormenu);}
+ } {}
+ }
+ Fl_Group {} {
+ callback propagate_load open
+ xywh {100 212 220 20}
+ } {
+ Fl_Choice {} {
+ label {Code:}
+ user_data {&Widget_Browser::code_font}
+ callback cb_Comments open
+ xywh {100 212 151 20} box THIN_UP_BOX down_box BORDER_BOX labelfont 1 labelsize 11 textsize 11 resizable
+ code0 {extern Fl_Menu_Item fontmenu[];}
+ code1 {o->menu(fontmenu);}
+ } {}
+ Fl_Button {} {
+ user_data {&Widget_Browser::code_color}
+ callback cb_Color_Chip
+ xywh {251 212 51 20} labelsize 11
+ }
+ Fl_Menu_Button {} {
+ user_data {&Widget_Browser::code_color}
+ callback cb_Color_Choice open
+ xywh {302 212 18 20}
+ code0 {extern Fl_Menu_Item colormenu[];}
+ code1 {o->menu(colormenu);}
+ } {}
+ }
+ Fl_Group {} {
+ callback propagate_load open
+ xywh {100 237 220 20}
+ } {
+ Fl_Choice w_settings_user_commenttext {
+ label {Comments:}
+ user_data {&Widget_Browser::comment_font}
+ callback cb_Comments open
+ xywh {100 237 151 20} box THIN_UP_BOX down_box BORDER_BOX labelfont 1 labelsize 11 textsize 11 resizable
+ code0 {extern Fl_Menu_Item fontmenu[];}
+ code1 {o->menu(fontmenu);}
+ } {}
+ Fl_Button {} {
+ user_data {&Widget_Browser::comment_color}
+ callback cb_Color_Chip
+ xywh {251 237 51 20} labelsize 11
+ }
+ Fl_Menu_Button {} {
+ user_data {&Widget_Browser::comment_color}
+ callback cb_Color_Choice open
+ xywh {302 237 18 20}
+ code0 {extern Fl_Menu_Item colormenu[];}
+ code1 {o->menu(colormenu);}
+ } {}
+ }
+ }
+ }
+ Fl_Group {} {open
+ xywh {10 550 320 20}
+ } {
+ Fl_Button {} {
+ label Close
+ callback {if (g_shell_config)
+ g_shell_config->write(fluid_prefs, FD_STORE_USER);
+g_layout_list.write(fluid_prefs, FD_STORE_USER);
+settings_window->hide();}
+ tooltip {Close this dialog.} xywh {230 550 100 20} labelsize 11
+ }
+ Fl_Box {} {
+ xywh {220 550 10 20} hide resizable
+ }
+ }
+ }
+ code {w_settings_tabs->do_callback(w_settings_tabs, LOAD);} {}
+}
+
+Function {make_shell_window()} {open
+} {
+ Fl_Window shell_run_window {
+ label {Shell Command Output} open
+ xywh {769 584 555 430} type Double align 80 resizable visible
+ } {
+ Fl_Terminal shell_run_terminal {
+ xywh {10 10 535 375} resizable
+ code0 {shell_run_terminal->ansi(1);}
+ code1 {shell_run_terminal->history_lines(1000);}
+ }
+ Fl_Group {} {open
+ xywh {10 395 535 25}
+ } {
+ Fl_Button {} {
+ label Clear
+ callback {// clear screen, clear scrollback, home cursor
+shell_run_terminal->append("\\033[2J\\033[3J\\033[H");}
+ xywh {10 395 94 25}
+ }
+ Fl_Box {} {
+ xywh {104 395 341 25} hide resizable
+ }
+ Fl_Return_Button shell_run_button {
+ label Close
+ callback {Fl_Preferences pos(fluid_prefs, "shell_run_Window_pos");
+pos.set("x", shell_run_window->x());
+pos.set("y", shell_run_window->y());
+pos.set("w", shell_run_window->w());
+pos.set("h", shell_run_window->h());
+shell_run_window->hide();}
+ xywh {445 395 100 25}
+ }
+ }
+ }
+}
+
+decl {Fl_Menu_Item *w_layout_menu_storage[4];} {private global
+}
diff --git a/fluid/panels/settings_panel.h b/fluid/panels/settings_panel.h
new file mode 100644
index 000000000..918e69c8a
--- /dev/null
+++ b/fluid/panels/settings_panel.h
@@ -0,0 +1,143 @@
+//
+// Setting and shell dialogs for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2023 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
+
+#ifndef settings_panel_h
+#define settings_panel_h
+#include <FL/Fl.H>
+#include "app/fluid.h"
+#include "app/Fd_Snap_Action.h"
+#include "app/shell_command.h"
+#include "tools/fluid_filename.h"
+#include "widgets/widget_browser.h"
+#include <FL/Fl_Text_Buffer.H>
+#include <FL/Fl_Text_Display.H>
+#include <FL/fl_string_functions.h>
+#include <FL/Fl_Scheme_Choice.H>
+/**
+ // initialize the scheme from preferences
+*/
+void init_scheme(void);
+extern struct Fl_Menu_Item *dbmanager_item;
+extern void i18n_cb(Fl_Choice *,void *);
+extern void scheme_cb(Fl_Scheme_Choice *, void *);
+extern int w_settings_shell_list_selected;
+#include <FL/Fl_Double_Window.H>
+extern Fl_Double_Window *script_panel;
+#include <FL/Fl_Text_Editor.H>
+extern Fl_Text_Editor *script_input;
+#include <FL/Fl_Group.H>
+extern void propagate_load(Fl_Group*, void*);
+#include <FL/Fl_Return_Button.H>
+extern Fl_Return_Button *script_panel_ok;
+#include <FL/Fl_Button.H>
+extern Fl_Button *script_panel_cancel;
+#include <FL/Fl_Box.H>
+Fl_Double_Window* make_script_panel();
+extern Fl_Double_Window *settings_window;
+#include <FL/Fl_Tabs.H>
+extern Fl_Tabs *w_settings_tabs;
+extern Fl_Group *w_settings_general_tab;
+extern void scheme_cb(Fl_Scheme_Choice*, void*);
+extern Fl_Scheme_Choice *scheme_choice;
+#include <FL/Fl_Check_Button.H>
+extern Fl_Check_Button *tooltips_button;
+extern Fl_Check_Button *completion_button;
+extern Fl_Check_Button *openlast_button;
+extern Fl_Check_Button *prevpos_button;
+extern Fl_Check_Button *show_comments_button;
+#include <FL/Fl_Spinner.H>
+extern Fl_Spinner *recent_spinner;
+extern Fl_Check_Button *use_external_editor_button;
+#include <FL/Fl_Input.H>
+extern Fl_Input *editor_command_input;
+extern void toggle_guides_cb(Fl_Check_Button*, void*);
+extern Fl_Check_Button *guides_button;
+extern void toggle_restricted_cb(Fl_Check_Button*, void*);
+extern Fl_Check_Button *restricted_button;
+extern void toggle_ghosted_outline_cb(Fl_Check_Button*, void*);
+extern Fl_Check_Button *ghosted_outline_button;
+extern Fl_Group *w_settings_project_tab;
+extern Fl_Input *header_file_input;
+extern Fl_Input *code_file_input;
+extern Fl_Check_Button *include_H_from_C_button;
+extern Fl_Check_Button *use_FL_COMMAND_button;
+extern Fl_Check_Button *utf8_in_src_button;
+extern Fl_Check_Button *avoid_early_includes_button;
+extern Fl_Check_Button *w_proj_mergeback;
+extern Fl_Group *w_settings_layout_tab;
+#include <FL/Fl_Choice.H>
+extern Fl_Choice *layout_choice;
+#include <FL/Fl_Menu_Button.H>
+extern Fl_Menu_Button *w_layout_menu;
+#include <FL/Fl_Native_File_Chooser.H>
+extern void edit_layout_preset_cb(Fl_Button*, long);
+extern Fl_Button *preset_choice[3];
+#include <FL/Fl_Value_Input.H>
+extern Fl_Menu_Item fontmenu_w_default[];
+extern Fl_Group *w_settings_shell_tab;
+#include <FL/Fl_Browser.H>
+extern Fl_Browser *w_settings_shell_list;
+extern Fl_Group *w_settings_shell_toolbox;
+extern Fl_Button *w_settings_shell_dup;
+extern Fl_Button *w_settings_shell_remove;
+extern Fl_Menu_Button *w_settings_shell_menu;
+extern Fl_Button *w_settings_shell_play;
+extern Fl_Group *w_settings_shell_cmd;
+#include <FL/Fl_Shortcut_Button.H>
+extern Fl_Text_Editor *w_settings_shell_command;
+extern Fl_Menu_Button *w_settings_shell_text_macros;
+extern Fl_Box *w_settings_shell_fd_project;
+extern Fl_Box *w_settings_shell_fd_user;
+extern Fl_Group *w_settings_i18n_tab;
+extern void i18n_type_cb(Fl_Choice*, void*);
+extern Fl_Choice *i18n_type_chooser;
+extern Fl_Group *i18n_gnu_group;
+extern Fl_Input *i18n_gnu_include_input;
+extern Fl_Input *i18n_gnu_conditional_input;
+extern Fl_Input *i18n_gnu_function_input;
+extern Fl_Input *i18n_gnu_static_function_input;
+extern Fl_Group *i18n_posix_group;
+extern Fl_Input *i18n_pos_include_input;
+extern Fl_Input *i18n_pos_conditional_input;
+extern Fl_Input *i18n_pos_file_input;
+#include <FL/Fl_Int_Input.H>
+extern Fl_Int_Input *i18n_pos_set_input;
+#include <FL/fl_show_colormap.H>
+extern Fl_Group *w_settings_user_tab;
+extern Fl_Menu_Item fontmenu[];
+extern Fl_Menu_Item colormenu[];
+extern Fl_Choice *w_settings_user_commenttext;
+Fl_Double_Window* make_settings_window();
+extern Fl_Menu_Item menu_layout_choice[];
+extern Fl_Menu_Item menu_w_layout_menu[];
+#define w_layout_menu_rename (menu_w_layout_menu+0)
+extern Fl_Menu_Item *w_layout_menu_storage[4];
+#define w_layout_menu_load (menu_w_layout_menu+5)
+#define w_layout_menu_save (menu_w_layout_menu+6)
+#define w_layout_menu_delete (menu_w_layout_menu+7)
+extern Fl_Menu_Item menu_w_settings_shell_menu[];
+extern Fl_Menu_Item menu_Store[];
+extern Fl_Menu_Item menu_Condition[];
+extern Fl_Menu_Item menu_w_settings_shell_text_macros[];
+extern Fl_Menu_Item menu_i18n_type_chooser[];
+extern Fl_Double_Window *shell_run_window;
+#include <FL/Fl_Terminal.H>
+extern Fl_Terminal *shell_run_terminal;
+extern Fl_Return_Button *shell_run_button;
+Fl_Double_Window* make_shell_window();
+#endif
diff --git a/fluid/panels/template_panel.cxx b/fluid/panels/template_panel.cxx
new file mode 100644
index 000000000..ec4a5e29a
--- /dev/null
+++ b/fluid/panels/template_panel.cxx
@@ -0,0 +1,340 @@
+//
+// FLUID template support for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2020 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 "template_panel.h"
+#include "app/fluid.h"
+#include "tools/fluid_filename.h"
+#include <FL/Fl_Shared_Image.H>
+#include <FL/fl_ask.H>
+#include <FL/fl_string_functions.h>
+#include "../src/flstring.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <zlib.h>
+#if defined(_WIN32) && !defined(__CYGWIN__)
+#include <io.h>
+#else
+#include <unistd.h>
+#endif // _WIN32 && !__CYGWIN__
+
+Fl_Double_Window *template_panel=(Fl_Double_Window *)0;
+
+static void cb_template_panel(Fl_Double_Window*, void*) {
+ Fl_Shared_Image *img = (Fl_Shared_Image *)template_preview->image();
+ if (img) img->release();
+ template_preview->image(0);
+
+ template_browser->deselect();
+ template_name->value("");
+ template_instance->value("");
+ template_panel->hide();
+}
+
+Fl_Browser *template_browser=(Fl_Browser *)0;
+
+static void cb_template_browser(Fl_Browser*, void*) {
+ if (Fl::event_clicks()) {
+ template_panel->hide();
+ return;
+ }
+ Fl_Shared_Image *img = (Fl_Shared_Image *)template_preview->image();
+ if (img) img->release();
+ template_preview->image(0);
+ template_preview->redraw();
+
+ int item = template_browser->value();
+
+ if (item <= 1) template_instance->deactivate();
+ else template_instance->activate();
+
+ if (item < 1) {
+ template_submit->deactivate();
+ template_delete->deactivate();
+ return;
+ }
+
+ template_submit->activate();
+
+ const char *flfile = (const char *)template_browser->data(item);
+ if (!flfile) {
+ template_delete->deactivate();
+ return;
+ }
+
+ template_name->value(template_browser->text(item));
+
+ template_delete->activate();
+
+ char pngfile[1024], *ext;
+
+ strlcpy(pngfile, flfile, sizeof(pngfile));
+ if ((ext = strrchr(pngfile, '.')) == NULL) return;
+ strcpy(ext, ".png");
+
+ img = Fl_Shared_Image::get(pngfile);
+
+ if (img) {
+ template_preview->image(img);
+ template_preview->redraw();
+ }
+}
+
+Fl_Box *template_preview=(Fl_Box *)0;
+
+Fl_Input *template_name=(Fl_Input *)0;
+
+static void cb_template_name(Fl_Input*, void*) {
+ if (strlen(template_name->value())) {
+ template_submit->activate();
+ if (Fl::event_key() == FL_Enter) template_panel->hide();
+ } else template_submit->deactivate();
+}
+
+Fl_Input *template_instance=(Fl_Input *)0;
+
+Fl_Button *template_delete=(Fl_Button *)0;
+
+static void cb_Cancel(Fl_Button*, void*) {
+ Fl_Shared_Image *img = (Fl_Shared_Image *)template_preview->image();
+ if (img) img->release();
+ template_preview->image(0);
+
+ template_browser->deselect();
+ template_name->value("");
+ template_instance->value("");
+ template_panel->hide();
+}
+
+Fl_Return_Button *template_submit=(Fl_Return_Button *)0;
+
+static void cb_template_submit(Fl_Return_Button*, void*) {
+ Fl_Shared_Image *img = (Fl_Shared_Image *)template_preview->image();
+ if (img) img->release();
+ template_preview->image(0);
+
+ template_panel->hide();
+}
+
+Fl_Double_Window* make_template_panel() {
+ { template_panel = new Fl_Double_Window(460, 355, "New/Save Template");
+ template_panel->callback((Fl_Callback*)cb_template_panel);
+ { template_browser = new Fl_Browser(10, 28, 180, 250, "Available Templates:");
+ template_browser->type(2);
+ template_browser->labelfont(1);
+ template_browser->callback((Fl_Callback*)cb_template_browser);
+ template_browser->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ template_browser->when(FL_WHEN_CHANGED | FL_WHEN_NOT_CHANGED);
+ } // Fl_Browser* template_browser
+ { template_preview = new Fl_Box(200, 28, 250, 250);
+ template_preview->box(FL_THIN_DOWN_BOX);
+ template_preview->align(Fl_Align(FL_ALIGN_CLIP|FL_ALIGN_INSIDE));
+ Fl_Group::current()->resizable(template_preview);
+ } // Fl_Box* template_preview
+ { template_name = new Fl_Input(198, 288, 252, 25, "Template Name:");
+ template_name->labelfont(1);
+ template_name->textfont(4);
+ template_name->callback((Fl_Callback*)cb_template_name);
+ template_name->when(FL_WHEN_CHANGED | FL_WHEN_NOT_CHANGED);
+ } // Fl_Input* template_name
+ { template_instance = new Fl_Input(198, 288, 252, 25, "Instance Name:");
+ template_instance->labelfont(1);
+ template_instance->textfont(4);
+ template_instance->hide();
+ } // Fl_Input* template_instance
+ { Fl_Group* o = new Fl_Group(10, 323, 440, 25);
+ { template_delete = new Fl_Button(10, 323, 143, 25, "Delete Template");
+ template_delete->callback((Fl_Callback*)template_delete_cb);
+ } // Fl_Button* template_delete
+ { Fl_Box* o = new Fl_Box(153, 323, 126, 25);
+ Fl_Group::current()->resizable(o);
+ } // Fl_Box* o
+ { Fl_Button* o = new Fl_Button(289, 323, 72, 25, "Cancel");
+ o->callback((Fl_Callback*)cb_Cancel);
+ } // Fl_Button* o
+ { template_submit = new Fl_Return_Button(371, 323, 79, 25, "Save");
+ template_submit->callback((Fl_Callback*)cb_template_submit);
+ } // Fl_Return_Button* template_submit
+ o->end();
+ } // Fl_Group* o
+ template_panel->set_modal();
+ template_panel->end();
+ } // Fl_Double_Window* template_panel
+ return template_panel;
+}
+
+void template_clear() {
+ int i;
+ void *filename;
+
+ for (i = 1; i <= template_browser->size(); i ++) {
+ if ((filename = template_browser->data(i)) != NULL) free(filename);
+ }
+
+ template_browser->deselect();
+ template_browser->clear();
+}
+
+void template_delete_cb(Fl_Button *, void *) {
+ int item = template_browser->value();
+ if (item < 1) return;
+
+ const char *name = template_browser->text(item);
+ const char *flfile = (const char *)template_browser->data(item);
+ if (!flfile) return;
+
+ if (!fl_choice("Are you sure you want to delete the template \"%s\"?",
+ "Cancel", "Delete", 0, name)) return;
+
+ if (fl_unlink(flfile)) {
+ fl_alert("Unable to delete template \"%s\":\n%s", name, strerror(errno));
+ return;
+ }
+
+ char pngfile[1024], *ext;
+ strlcpy(pngfile, flfile, sizeof(pngfile));
+ if ((ext = strrchr(pngfile, '.')) != NULL) {
+ strcpy(ext, ".png");
+ fl_unlink(pngfile);
+ }
+
+ template_browser->remove(item);
+ template_browser->do_callback();
+}
+
+static int tmpl_FLTK_License_fl_size = 614;
+static unsigned char tmpl_FLTK_License_fl[397] = /* data compressed and inlined from ../templates/FLTK_License.fl */
+{120,156,133,82,77,79,27,49,16,189,239,175,120,162,23,144,202,110,130,56,20,
+78,208,80,170,8,148,34,17,14,61,33,239,122,118,61,194,177,87,246,44,75,26,229,
+191,215,94,18,245,88,159,236,241,251,154,177,191,64,43,81,104,217,18,90,31,32,
+134,112,111,229,13,47,145,2,150,78,40,180,170,33,220,81,228,206,165,210,105,107,
+7,214,103,197,59,133,200,222,97,94,206,46,103,243,194,144,210,20,94,157,218,
+16,118,165,217,23,141,215,116,60,54,31,31,185,176,217,144,19,236,170,170,168,
+42,220,44,87,207,235,219,213,226,199,205,63,95,21,5,143,220,25,193,218,123,139,
+7,22,156,222,63,174,31,206,202,226,147,180,240,253,54,76,128,249,213,213,183,
+243,139,217,197,37,234,45,190,179,181,120,238,89,254,168,55,40,167,225,147,92,
+136,71,214,218,112,132,229,58,168,176,69,218,182,129,8,209,183,50,170,64,37,238,
+56,74,224,122,144,220,78,102,15,145,48,185,68,36,0,252,32,150,29,105,176,203,
+106,57,233,52,174,147,197,175,167,223,203,213,207,19,140,134,27,131,104,252,96,
+53,140,122,39,212,68,46,225,27,59,232,68,28,89,76,226,101,235,68,44,129,101,59,
+29,179,220,36,149,110,54,28,35,187,14,105,22,90,109,84,71,250,43,98,202,153,
+237,44,55,228,82,40,37,215,135,150,242,50,34,125,188,174,170,113,28,203,54,61,
+89,233,67,87,29,50,149,189,233,15,208,39,75,42,113,143,90,173,183,214,143,217,
+169,79,38,72,45,27,63,66,60,2,245,62,8,234,161,139,211,20,82,158,129,226,127,13,
+51,254,232,182,199,142,221,107,244,67,72,63,38,237,62,63,69,177,47,254,2,228,
+190,201,192};
+
+static int tmpl_1of7GUIs_fl_size = 763;
+static unsigned char tmpl_1of7GUIs_fl[486] = /* data compressed and inlined from ../templates/1of7GUIs.fl */
+{120,156,109,82,203,138,219,64,16,188,207,87,52,228,178,102,177,45,25,59,
+187,142,73,14,121,56,187,36,224,92,76,142,102,36,181,164,206,142,102,196,60,252,
+88,33,216,223,200,61,127,146,63,201,151,164,37,69,176,9,97,4,163,26,122,170,
+170,171,231,5,100,210,75,200,73,33,228,198,130,47,17,182,202,63,192,222,161,133,
+123,237,209,230,50,69,120,143,142,10,205,71,87,185,10,148,77,4,28,209,58,50,26,
+226,89,180,140,34,1,37,202,12,237,65,203,10,161,153,149,173,72,77,134,35,76,207,
+231,86,64,106,170,10,181,135,70,196,96,114,184,249,184,191,119,66,244,27,156,
+164,131,4,81,67,106,81,122,204,128,177,4,87,147,158,154,60,239,202,59,107,149,
+116,236,232,215,211,119,39,24,58,114,240,206,84,181,180,228,216,9,215,236,146,
+111,152,250,233,206,18,235,116,36,58,131,109,208,169,103,167,82,137,47,214,20,
+86,86,21,233,162,239,150,149,185,179,35,42,83,247,198,146,11,124,8,5,155,248,
+68,142,229,125,167,41,238,66,37,245,180,211,9,126,204,68,246,140,80,88,19,234,
+209,219,103,164,68,211,163,216,107,234,179,241,63,127,120,184,147,90,27,134,64,
+26,22,81,188,156,9,81,122,95,187,87,243,249,77,17,200,205,10,242,101,72,102,
+100,6,60,23,45,52,14,21,119,193,246,73,31,156,9,150,243,215,198,31,24,13,33,139,
+86,136,177,43,104,248,130,169,81,119,23,197,86,29,190,146,206,204,169,63,22,74,
+38,168,56,162,208,121,134,190,234,124,57,149,208,44,111,95,194,98,189,128,120,
+189,132,213,170,5,127,169,121,198,38,36,252,12,44,231,250,40,187,191,35,57,226,
+125,100,222,5,207,17,240,20,123,186,195,137,178,2,187,97,14,148,241,10,248,187,
+141,96,177,24,102,31,65,243,119,233,244,205,81,170,128,87,209,100,211,114,11,
+204,248,54,120,255,167,133,231,94,69,42,149,74,100,250,0,13,241,84,8,94,195,191,
+76,52,80,77,54,130,174,175,55,226,255,66,212,9,13,238,214,235,103,238,134,245,
+27,226,34,7,2};
+
+void template_install(const char *path, const char *name, const uchar *inSrc, int inSrcLen, int inDstLen) {
+ char filename[FL_PATH_MAX];
+ strcpy(filename, path);
+ strcat(filename, name);
+ FILE *f = fopen(filename, "wb");
+ if (!f) return;
+ uLong dstLen = inDstLen;
+ Bytef *dst = (Bytef*)::malloc(inDstLen);
+ if (uncompress(dst, &dstLen, (Bytef*)inSrc, (uLong)inSrcLen) != Z_OK) { /* error */ }
+ if (fwrite(dst, dstLen, 1, f) <= 0) { /* error */ }
+ fclose(f);
+}
+
+void template_load() {
+ int i;
+ char name[1024], filename[1400], path[1024], *ptr;
+ struct dirent **files;
+ int num_files;
+
+ fluid_prefs.getUserdataPath(path, sizeof(path));
+ strlcat(path, "templates", sizeof(path));
+ fl_make_path(path);
+
+ int sample_templates_generated = 0;
+ fluid_prefs.get("sample_templates_generated", sample_templates_generated, 0);
+
+ if (sample_templates_generated < 2) {
+ strcpy(filename, path);
+ strcat(filename, "/FLTK_License.fl");
+ FILE *f = fopen(filename, "wb");
+ if (f) {
+ fputs(
+ "# data file for the Fltk User Interface Designer (fluid)\nversion 1.0400\nheader_name {.h}\n"
+ "code_name {.cxx}\ncomment {//\n// @INSTANCE@ for the Fast Light Tool Kit (FLT"
+ "K).\n//\n// Copyright 1998-2023 by Bill Spitzak and others.\n//\n// This library is free sof"
+ "tware. Distribution and use rights are outlined in\n// the file \"COPYING\" which should have "
+ "been included with this file. If this\n// file is missing or damaged, see the license at:\n"
+ "//\n// https://www.fltk.org/COPYING.php\n//\n// Please see the following page on how to report "
+ "bugs and issues:\n//\n// https://www.fltk.org/bugs.php\n//\n} {selected in_source in_head"
+ "er\n}\n", f);
+ fclose(f);
+ }
+
+ template_install(path, "/FLTK_License.fl", tmpl_FLTK_License_fl, sizeof(tmpl_FLTK_License_fl), tmpl_FLTK_License_fl_size);
+ template_install(path, "/1of7GUIs.fl", tmpl_1of7GUIs_fl, sizeof(tmpl_1of7GUIs_fl), tmpl_1of7GUIs_fl_size);
+ sample_templates_generated = 2;
+ fluid_prefs.set("sample_templates_generated", sample_templates_generated);
+ fluid_prefs.flush();
+ }
+
+ num_files = fl_filename_list(path, &files);
+
+ for (i = 0; i < num_files; i ++) {
+ if (fl_filename_match(files[i]->d_name, "*.fl")) {
+ // Format the name as the filename with "_" replaced with " "
+ // and without the trailing ".fl"...
+ strlcpy(name, files[i]->d_name, sizeof(name));
+ *strstr(name, ".fl") = '\0';
+
+ for (ptr = name; *ptr; ptr ++) {
+ if (*ptr == '_') *ptr = ' ';
+ }
+
+ // Add the template to the browser...
+ snprintf(filename, sizeof(filename), "%s/%s", path, files[i]->d_name);
+ template_browser->add(name, fl_strdup(filename));
+ }
+
+ free(files[i]);
+ }
+
+ if (num_files > 0) free(files);
+}
diff --git a/fluid/panels/template_panel.fl b/fluid/panels/template_panel.fl
new file mode 100644
index 000000000..cbbb5c7ff
--- /dev/null
+++ b/fluid/panels/template_panel.fl
@@ -0,0 +1,297 @@
+# data file for the Fltk User Interface Designer (fluid)
+version 1.0500
+header_name {.h}
+code_name {.cxx}
+comment {//
+// FLUID template support for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2020 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
+//
+} {in_source in_header
+}
+
+decl {\#include "app/fluid.h"} {private local
+}
+
+decl {\#include "tools/fluid_filename.h"} {selected private local
+}
+
+decl {\#include <FL/Fl_Shared_Image.H>} {private local
+}
+
+decl {\#include <FL/fl_ask.H>} {private local
+}
+
+decl {\#include <FL/fl_string_functions.h>} {private local
+}
+
+decl {\#include "../src/flstring.h"} {private local
+}
+
+decl {\#include <stdio.h>} {private local
+}
+
+decl {\#include <stdlib.h>} {private local
+}
+
+decl {\#include <errno.h>} {private local
+}
+
+decl {\#include <zlib.h>} {private local
+}
+
+declblock {\#if defined(_WIN32) && !defined(__CYGWIN__)} {after {\#endif // _WIN32 && !__CYGWIN__}
+} {
+ decl {\#include <io.h>} {private local
+ }
+ decl {\#else} {private local
+ }
+ decl {\#include <unistd.h>} {private local
+ }
+}
+
+Function {make_template_panel()} {open
+} {
+ Fl_Window template_panel {
+ label {New/Save Template}
+ callback {Fl_Shared_Image *img = (Fl_Shared_Image *)template_preview->image();
+if (img) img->release();
+template_preview->image(0);
+
+template_browser->deselect();
+template_name->value("");
+template_instance->value("");
+template_panel->hide();} open
+ xywh {478 284 460 355} type Double resizable modal visible
+ } {
+ Fl_Browser template_browser {
+ label {Available Templates:}
+ callback {if (Fl::event_clicks()) {
+ template_panel->hide();
+ return;
+}
+Fl_Shared_Image *img = (Fl_Shared_Image *)template_preview->image();
+if (img) img->release();
+template_preview->image(0);
+template_preview->redraw();
+
+int item = template_browser->value();
+
+if (item <= 1) template_instance->deactivate();
+else template_instance->activate();
+
+if (item < 1) {
+ template_submit->deactivate();
+ template_delete->deactivate();
+ return;
+}
+
+template_submit->activate();
+
+const char *flfile = (const char *)template_browser->data(item);
+if (!flfile) {
+ template_delete->deactivate();
+ return;
+}
+
+template_name->value(template_browser->text(item));
+
+template_delete->activate();
+
+char pngfile[1024], *ext;
+
+strlcpy(pngfile, flfile, sizeof(pngfile));
+if ((ext = strrchr(pngfile, '.')) == NULL) return;
+strcpy(ext, ".png");
+
+img = Fl_Shared_Image::get(pngfile);
+
+if (img) {
+ template_preview->image(img);
+ template_preview->redraw();
+}}
+ xywh {10 28 180 250} type Hold labelfont 1 align 5 when 3
+ }
+ Fl_Box template_preview {
+ xywh {200 28 250 250} box THIN_DOWN_BOX align 80 resizable
+ }
+ Fl_Input template_name {
+ label {Template Name:}
+ callback {if (strlen(template_name->value())) {
+ template_submit->activate();
+ if (Fl::event_key() == FL_Enter) template_panel->hide();
+} else template_submit->deactivate();}
+ xywh {198 288 252 25} labelfont 1 when 3 textfont 4
+ }
+ Fl_Input template_instance {
+ label {Instance Name:}
+ xywh {198 288 252 25} labelfont 1 textfont 4 hide
+ }
+ Fl_Group {} {open
+ xywh {10 323 440 25}
+ } {
+ Fl_Button template_delete {
+ label {Delete Template}
+ callback template_delete_cb
+ xywh {10 323 143 25}
+ }
+ Fl_Box {} {
+ xywh {153 323 126 25} resizable
+ }
+ Fl_Button {} {
+ label Cancel
+ callback {Fl_Shared_Image *img = (Fl_Shared_Image *)template_preview->image();
+if (img) img->release();
+template_preview->image(0);
+
+template_browser->deselect();
+template_name->value("");
+template_instance->value("");
+template_panel->hide();}
+ xywh {289 323 72 25}
+ }
+ Fl_Return_Button template_submit {
+ label Save
+ callback {Fl_Shared_Image *img = (Fl_Shared_Image *)template_preview->image();
+if (img) img->release();
+template_preview->image(0);
+
+template_panel->hide();}
+ xywh {371 323 79 25}
+ }
+ }
+ }
+}
+
+Function {template_clear()} {return_type void
+} {
+ code {int i;
+void *filename;
+
+for (i = 1; i <= template_browser->size(); i ++) {
+ if ((filename = template_browser->data(i)) != NULL) free(filename);
+}
+
+template_browser->deselect();
+template_browser->clear();} {}
+}
+
+Function {template_delete_cb(Fl_Button *, void *)} {open return_type void
+} {
+ code {int item = template_browser->value();
+if (item < 1) return;
+
+const char *name = template_browser->text(item);
+const char *flfile = (const char *)template_browser->data(item);
+if (!flfile) return;
+
+if (!fl_choice("Are you sure you want to delete the template \\"%s\\"?",
+ "Cancel", "Delete", 0, name)) return;
+
+if (fl_unlink(flfile)) {
+ fl_alert("Unable to delete template \\"%s\\":\\n%s", name, strerror(errno));
+ return;
+}
+
+char pngfile[1024], *ext;
+strlcpy(pngfile, flfile, sizeof(pngfile));
+if ((ext = strrchr(pngfile, '.')) != NULL) {
+ strcpy(ext, ".png");
+ fl_unlink(pngfile);
+}
+
+template_browser->remove(item);
+template_browser->do_callback();} {}
+}
+
+data tmpl_FLTK_License_fl {private local filename {../templates/FLTK_License.fl} compressed
+}
+
+data tmpl_1of7GUIs_fl {private local filename {../templates/1of7GUIs.fl} compressed
+}
+
+Function {template_install(const char *path, const char *name, const uchar *inSrc, int inSrcLen, int inDstLen)} {open return_type void
+} {
+ code {char filename[FL_PATH_MAX];
+ strcpy(filename, path);
+ strcat(filename, name);
+ FILE *f = fopen(filename, "wb");
+ if (!f) return;
+ uLong dstLen = inDstLen;
+ Bytef *dst = (Bytef*)::malloc(inDstLen);
+ if (uncompress(dst, &dstLen, (Bytef*)inSrc, (uLong)inSrcLen) != Z_OK) { /* error */ }
+ if (fwrite(dst, dstLen, 1, f) <= 0) { /* error */ }
+ fclose(f);} {}
+}
+
+Function {template_load()} {open return_type void
+} {
+ code {int i;
+char name[1024], filename[1400], path[1024], *ptr;
+struct dirent **files;
+int num_files;
+
+fluid_prefs.getUserdataPath(path, sizeof(path));
+strlcat(path, "templates", sizeof(path));
+fl_make_path(path);
+
+int sample_templates_generated = 0;
+fluid_prefs.get("sample_templates_generated", sample_templates_generated, 0);
+
+if (sample_templates_generated < 2) {
+ strcpy(filename, path);
+ strcat(filename, "/FLTK_License.fl");
+ FILE *f = fopen(filename, "wb");
+ if (f) {
+ fputs(
+"\# data file for the Fltk User Interface Designer (fluid)\\nversion 1.0400\\nheader_name {.h}\\n"
+"code_name {.cxx}\\ncomment {//\\n// @INSTANCE@ for the Fast Light Tool Kit (FLT"
+"K).\\n//\\n// Copyright 1998-2023 by Bill Spitzak and others.\\n//\\n// This library is free sof"
+"tware. Distribution and use rights are outlined in\\n// the file \\"COPYING\\" which should have "
+"been included with this file. If this\\n// file is missing or damaged, see the license at:\\n"
+"//\\n// https://www.fltk.org/COPYING.php\\n//\\n// Please see the following page on how to report "
+"bugs and issues:\\n//\\n// https://www.fltk.org/bugs.php\\n//\\n} {selected in_source in_head"
+"er\\n}\\n", f);
+ fclose(f);
+ }
+
+ template_install(path, "/FLTK_License.fl", tmpl_FLTK_License_fl, sizeof(tmpl_FLTK_License_fl), tmpl_FLTK_License_fl_size);
+ template_install(path, "/1of7GUIs.fl", tmpl_1of7GUIs_fl, sizeof(tmpl_1of7GUIs_fl), tmpl_1of7GUIs_fl_size);
+ sample_templates_generated = 2;
+ fluid_prefs.set("sample_templates_generated", sample_templates_generated);
+ fluid_prefs.flush();
+}
+
+num_files = fl_filename_list(path, &files);
+
+for (i = 0; i < num_files; i ++) {
+ if (fl_filename_match(files[i]->d_name, "*.fl")) {
+ // Format the name as the filename with "_" replaced with " "
+ // and without the trailing ".fl"...
+ strlcpy(name, files[i]->d_name, sizeof(name));
+ *strstr(name, ".fl") = '\\0';
+
+ for (ptr = name; *ptr; ptr ++) {
+ if (*ptr == '_') *ptr = ' ';
+ }
+
+ // Add the template to the browser...
+ snprintf(filename, sizeof(filename), "%s/%s", path, files[i]->d_name);
+ template_browser->add(name, fl_strdup(filename));
+ }
+
+ free(files[i]);
+}
+
+if (num_files > 0) free(files);} {}
+}
diff --git a/fluid/panels/template_panel.h b/fluid/panels/template_panel.h
new file mode 100644
index 000000000..172e4c7de
--- /dev/null
+++ b/fluid/panels/template_panel.h
@@ -0,0 +1,41 @@
+//
+// FLUID template support for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2020 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
+
+#ifndef template_panel_h
+#define template_panel_h
+#include <FL/Fl.H>
+#include <FL/Fl_Double_Window.H>
+extern Fl_Double_Window *template_panel;
+#include <FL/Fl_Browser.H>
+extern Fl_Browser *template_browser;
+#include <FL/Fl_Box.H>
+extern Fl_Box *template_preview;
+#include <FL/Fl_Input.H>
+extern Fl_Input *template_name;
+extern Fl_Input *template_instance;
+#include <FL/Fl_Group.H>
+#include <FL/Fl_Button.H>
+extern Fl_Button *template_delete;
+#include <FL/Fl_Return_Button.H>
+extern Fl_Return_Button *template_submit;
+Fl_Double_Window* make_template_panel();
+void template_clear();
+void template_delete_cb(Fl_Button *, void *);
+void template_install(const char *path, const char *name, const uchar *inSrc, int inSrcLen, int inDstLen);
+void template_load();
+#endif
diff --git a/fluid/panels/widget_panel.cxx b/fluid/panels/widget_panel.cxx
new file mode 100644
index 000000000..cd3779851
--- /dev/null
+++ b/fluid/panels/widget_panel.cxx
@@ -0,0 +1,2497 @@
+//
+// 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 "app/undo.h"
+#include "nodes/Fl_Widget_Type.h"
+#include "nodes/Fl_Grid_Type.h"
+#include <FL/Fl_Grid.H>
+extern void set_modflag(int mf, int mfc=-1);
+
+Fl_Double_Window *image_panel_window=(Fl_Double_Window *)0;
+
+static void cb_image_panel_window(Fl_Double_Window* o, void* v) {
+ propagate_load(o, v);
+}
+
+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) {
+ 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();
+ }
+ }
+}
+
+Fluid_Coord_Input *image_panel_imagew=(Fluid_Coord_Input *)0;
+
+static void cb_image_panel_imagew(Fluid_Coord_Input* o, void* v) {
+ if (v == LOAD) {
+ if (current_widget->is_widget() && !current_widget->is_a(ID_Window)) {
+ o->value(current_widget->scale_image_w_);
+ }
+ } else {
+ int mod = 0;
+ for (Fl_Type *t = Fl_Type::first; t; t = t->next) {
+ if (t->selected && t->is_widget()) {
+ Fl_Widget_Type* wt = ((Fl_Widget_Type*)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) set_modflag(1);
+ }
+}
+
+Fluid_Coord_Input *image_panel_imageh=(Fluid_Coord_Input *)0;
+
+static void cb_image_panel_imageh(Fluid_Coord_Input* o, void* v) {
+ if (v == LOAD) {
+ if (current_widget->is_widget() && !current_widget->is_a(ID_Window)) {
+ o->value(current_widget->scale_image_h_);
+ }
+ } else {
+ int mod = 0;
+ for (Fl_Type *t = Fl_Type::first; t; t = t->next) {
+ if (t->selected && t->is_widget()) {
+ Fl_Widget_Type* wt = ((Fl_Widget_Type*)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) set_modflag(1);
+ }
+}
+
+static void cb_Reset(Fl_Button*, void* v) {
+ if (v != LOAD) {
+ image_panel_imagew->value(0);
+ image_panel_imageh->value(0);
+ image_panel_imagew->do_callback();
+ image_panel_imageh->do_callback();
+ }
+}
+
+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) {
+ 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();
+ }
+ }
+}
+
+Fluid_Coord_Input *image_panel_deimagew=(Fluid_Coord_Input *)0;
+
+static void cb_image_panel_deimagew(Fluid_Coord_Input* o, void* v) {
+ if (v == LOAD) {
+ if (current_widget->is_widget() && !current_widget->is_a(ID_Window)) {
+ o->value(current_widget->scale_deimage_w_);
+ }
+ } else {
+ int mod = 0;
+ for (Fl_Type *t = Fl_Type::first; t; t = t->next) {
+ if (t->selected && t->is_widget()) {
+ Fl_Widget_Type* wt = ((Fl_Widget_Type*)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) set_modflag(1);
+ }
+}
+
+Fluid_Coord_Input *image_panel_deimageh=(Fluid_Coord_Input *)0;
+
+static void cb_image_panel_deimageh(Fluid_Coord_Input* o, void* v) {
+ if (v == LOAD) {
+ if (current_widget->is_widget() && !current_widget->is_a(ID_Window)) {
+ o->value(current_widget->scale_deimage_h_);
+ }
+ } else {
+ int mod = 0;
+ for (Fl_Type *t = Fl_Type::first; t; t = t->next) {
+ if (t->selected && t->is_widget()) {
+ Fl_Widget_Type* wt = ((Fl_Widget_Type*)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) set_modflag(1);
+ }
+}
+
+static void cb_Reset1(Fl_Button*, void* v) {
+ if (v != LOAD) {
+ image_panel_deimagew->value(0);
+ image_panel_deimageh->value(0);
+ image_panel_deimagew->do_callback();
+ image_panel_deimageh->do_callback();
+ }
+}
+
+Fl_Button *image_panel_close=(Fl_Button *)0;
+
+static void cb_image_panel_close(Fl_Button*, void* v) {
+ if (v != LOAD)
+ image_panel_window->hide();
+}
+
+/**
+ 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 Fluid_Coord_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);
+ } // Fluid_Coord_Input* image_panel_imagew
+ { image_panel_imageh = new Fluid_Coord_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);
+ } // Fluid_Coord_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*)compress_image_cb);
+ } // 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 automatically");
+ o->down_box(FL_DOWN_BOX);
+ o->labelsize(11);
+ o->callback((Fl_Callback*)bind_image_cb);
+ 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 Fluid_Coord_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);
+ } // Fluid_Coord_Input* image_panel_deimagew
+ { image_panel_deimageh = new Fluid_Coord_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);
+ } // Fluid_Coord_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*)compress_deimage_cb);
+ } // 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 automatically");
+ o->down_box(FL_DOWN_BOX);
+ o->labelsize(11);
+ o->callback((Fl_Callback*)bind_deimage_cb);
+ } // 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() {
+ 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(NULL);
+ }
+}
+
+Fl_Tabs *widget_tabs=(Fl_Tabs *)0;
+
+static void cb_widget_tabs(Fl_Tabs* o, void* v) {
+ propagate_load((Fl_Group *)o,v);
+}
+
+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_(Fl_Button*, void* v) {
+ if (v != LOAD) {
+ run_image_panel();
+ }
+}
+
+Fl_Input *widget_deimage_input=(Fl_Input *)0;
+
+Fl_Group *wp_gui_alignment=(Fl_Group *)0;
+
+Fl_Menu_Item menu_[] = {
+ {" Image Alignment ", 0, 0, (void*)((fl_intptr_t)0xFFFFFFFF), 1, (uchar)FL_NORMAL_LABEL, 2, 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)0xFFFFFFFF), 1, (uchar)FL_NORMAL_LABEL, 2, 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)0xFFFFFFFF), 1, (uchar)FL_NORMAL_LABEL, 2, 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}
+};
+
+Fluid_Coord_Input *widget_x_input=(Fluid_Coord_Input *)0;
+
+Fluid_Coord_Input *widget_y_input=(Fluid_Coord_Input *)0;
+
+Fluid_Coord_Input *widget_w_input=(Fluid_Coord_Input *)0;
+
+Fluid_Coord_Input *widget_h_input=(Fluid_Coord_Input *)0;
+
+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;
+
+Fl_Value_Input *widget_flex_size=(Fl_Value_Input *)0;
+
+Fl_Check_Button *widget_flex_fixed=(Fl_Check_Button *)0;
+
+Fl_Group *wp_gui_values=(Fl_Group *)0;
+
+Fl_Group *wp_gui_margins=(Fl_Group *)0;
+
+Fl_Group *wp_gui_sizerange=(Fl_Group *)0;
+
+Fl_Shortcut_Button *wp_gui_shortcut=(Fl_Shortcut_Button *)0;
+
+Fl_Group *wp_gui_xclass=(Fl_Group *)0;
+
+Fl_Group *wp_gui_attributes=(Fl_Group *)0;
+
+Fl_Input *wp_gui_tooltip=(Fl_Input *)0;
+
+Fl_Group *wp_style_tab=(Fl_Group *)0;
+
+Fl_Group *wp_style_label=(Fl_Group *)0;
+
+Fl_Button *w_labelcolor=(Fl_Button *)0;
+
+Fl_Group *wp_style_box=(Fl_Group *)0;
+
+Fl_Button *w_color=(Fl_Button *)0;
+
+Fl_Group *wp_style_downbox=(Fl_Group *)0;
+
+Fl_Button *w_selectcolor=(Fl_Button *)0;
+
+Fl_Group *wp_style_text=(Fl_Group *)0;
+
+Fl_Button *w_textcolor=(Fl_Button *)0;
+
+Fl_Group *wp_cpp_tab=(Fl_Group *)0;
+
+Fl_Group *wp_cpp_class=(Fl_Group *)0;
+
+Fl_Group *wp_cpp_name=(Fl_Group *)0;
+
+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}
+};
+
+Fl_Input *v_input[4]={(Fl_Input *)0};
+
+static void cb_1(Fl_Tile*, void* v) {
+ wComment->do_callback(wComment, v);
+ wCallback->do_callback(wCallback, v);
+}
+
+Fl_Text_Editor *wComment=(Fl_Text_Editor *)0;
+
+CodeEditor *wCallback=(CodeEditor *)0;
+
+Fl_Group *wp_cpp_callback=(Fl_Group *)0;
+
+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;
+
+Fl_Group *widget_tab_grid_child=(Fl_Group *)0;
+
+Fluid_Coord_Input *widget_grid_row_input=(Fluid_Coord_Input *)0;
+
+Fluid_Coord_Input *widget_grid_col_input=(Fluid_Coord_Input *)0;
+
+Fl_Box *widget_grid_transient=(Fl_Box *)0;
+
+static void cb_widget_grid_transient(Fl_Box* o, void* v) {
+ if (v==LOAD) {
+ Fl_Widget *child = ((Fl_Widget_Type*)current_widget)->o;
+ Fl_Grid_Proxy *g = ((Fl_Grid_Proxy*)((Fl_Widget_Type*)current_widget->parent)->o);
+ // Fl_Grid::Cell *cell = g->cell(child);
+ // Fl_Grid::Cell *tcell = g->transient_cell(child);
+ widget_grid_transient->hide();
+ widget_grid_unlinked->hide();
+ if (g->transient_cell(child)) {
+ widget_grid_transient->show();
+ } else if (!g->cell(child)) {
+ widget_grid_unlinked->show();
+ }
+ }
+}
+
+Fl_Box *widget_grid_unlinked=(Fl_Box *)0;
+
+Fl_Group *wp_gridc_align=(Fl_Group *)0;
+
+Fl_Menu_Item menu_Horizontal[] = {
+ {"GRID_LEFT", 0, 0, (void*)((fl_intptr_t)FL_GRID_LEFT), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
+ {"GRID_CENTER", 0, 0, (void*)((fl_intptr_t)FL_GRID_CENTER), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
+ {"GRID_RIGHT", 0, 0, (void*)((fl_intptr_t)FL_GRID_RIGHT), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
+ {"GRID_FILL", 0, 0, (void*)((fl_intptr_t)FL_GRID_HORIZONTAL), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
+ {0,0,0,0,0,0,0,0,0}
+};
+
+Fl_Menu_Item menu_Vertical[] = {
+ {"GRID_TOP", 0, 0, (void*)((fl_intptr_t)FL_GRID_TOP), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
+ {"GRID_CENTER", 0, 0, (void*)((fl_intptr_t)FL_GRID_CENTER), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
+ {"GRID_BOTTOM", 0, 0, (void*)((fl_intptr_t)FL_GRID_BOTTOM), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
+ {"GRID_FILL", 0, 0, (void*)((fl_intptr_t)FL_GRID_VERTICAL), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
+ {0,0,0,0,0,0,0,0,0}
+};
+
+Fl_Group *wp_gridc_size=(Fl_Group *)0;
+
+Fluid_Coord_Input *widget_grid_rowspan_input=(Fluid_Coord_Input *)0;
+
+Fluid_Coord_Input *widget_grid_colspan_input=(Fluid_Coord_Input *)0;
+
+Fl_Group *widget_tab_grid=(Fl_Group *)0;
+
+Fluid_Coord_Input *widget_grid_rows=(Fluid_Coord_Input *)0;
+
+static void cb_widget_grid_rows(Fluid_Coord_Input* o, void* v) {
+ // grid_rows_cb
+ Fl_Grid *grid = Fl_Grid_Type::selected();
+ if (!grid) return;
+ if (v == LOAD) {
+ o->value(grid->rows());
+ } else {
+ int m = o->value(), old_m = grid->rows();
+ if (m < 1) {
+ m = 1;
+ o->value(m);
+ }
+ if (m < old_m) {
+ // TODO: verify that this will not unlink existings cells
+ // Offer a dialog with "delete children", "unlink cells", "cancel"
+ }
+ if (m != old_m) {
+ undo_checkpoint();
+ grid->layout(m, grid->cols());
+ grid->need_layout(true);
+ set_modflag(1);
+ widget_tab_grid->do_callback(widget_tab_grid, LOAD);
+ }
+ }
+}
+
+static void cb_2(Fl_Button*, void* v) {
+ if (v != LOAD) {
+ widget_grid_rows->value( widget_grid_rows->value()-1 );
+ widget_grid_rows->do_callback();
+ }
+}
+
+static void cb_3(Fl_Button*, void* v) {
+ if (v != LOAD) {
+ widget_grid_rows->value( widget_grid_rows->value()+1 );
+ widget_grid_rows->do_callback();
+ }
+}
+
+Fluid_Coord_Input *widget_grid_cols=(Fluid_Coord_Input *)0;
+
+static void cb_widget_grid_cols(Fluid_Coord_Input* o, void* v) {
+ // grid_rows_cb
+ Fl_Grid *grid = Fl_Grid_Type::selected();
+ if (!grid) return;
+ if (v == LOAD) {
+ o->value(grid->cols());
+ } else {
+ int m = o->value(), old_m = grid->cols();
+ if (m < 1) {
+ m = 1;
+ o->value(m);
+ }
+ if (m < old_m) {
+ // TODO: verify that this will not unlink existings cells
+ // Offer a dialog with "delete children", "unlink cells", "cancel"
+ }
+ if (m != old_m) {
+ undo_checkpoint();
+ grid->layout(grid->rows(), m);
+ grid->need_layout(true);
+ set_modflag(1);
+ widget_tab_grid->do_callback(widget_tab_grid, LOAD);
+ }
+ }
+}
+
+static void cb_4(Fl_Button*, void* v) {
+ if (v != LOAD) {
+ widget_grid_cols->value( widget_grid_cols->value()-1 );
+ widget_grid_cols->do_callback();
+ }
+}
+
+static void cb_5(Fl_Button*, void* v) {
+ if (v != LOAD) {
+ widget_grid_cols->value( widget_grid_cols->value()+1 );
+ widget_grid_cols->do_callback();
+ }
+}
+
+Fl_Group *wp_grid_margin=(Fl_Group *)0;
+
+static void cb_Left(Fl_Value_Input* o, void* v) {
+ Fl_Grid *grid = Fl_Grid_Type::selected();
+ if (!grid) return;
+ int m = 0;
+ if (v == LOAD) {
+ grid->margin(&m, NULL, NULL, NULL);
+ o->value(m);
+ } else {
+ int m = (int)o->value(), old_m;
+ grid->margin(&old_m, NULL, NULL, NULL);
+ if (m != old_m) {
+ undo_checkpoint();
+ grid->margin(m, -1, -1, -1);
+ grid->need_layout(true);
+ set_modflag(1);
+ }
+ }
+}
+
+static void cb_Top(Fl_Value_Input* o, void* v) {
+ Fl_Grid *grid = Fl_Grid_Type::selected();
+ if (!grid) return;
+ int m = 0;
+ if (v == LOAD) {
+ grid->margin(NULL, &m, NULL, NULL);
+ o->value(m);
+ } else {
+ int m = (int)o->value(), old_m;
+ grid->margin(NULL, &old_m, NULL, NULL);
+ if (m != old_m) {
+ undo_checkpoint();
+ grid->margin(-1, m, -1, -1);
+ grid->need_layout(true);
+ set_modflag(1);
+ }
+ }
+}
+
+static void cb_Right(Fl_Value_Input* o, void* v) {
+ Fl_Grid *grid = Fl_Grid_Type::selected();
+ if (!grid) return;
+ int m = 0;
+ if (v == LOAD) {
+ grid->margin(NULL, NULL, &m, NULL);
+ o->value(m);
+ } else {
+ int m = (int)o->value(), old_m;
+ grid->margin(NULL, NULL, &old_m, NULL);
+ if (m != old_m) {
+ undo_checkpoint();
+ grid->margin(-1, -1, m, -1);
+ grid->need_layout(true);
+ set_modflag(1);
+ }
+ }
+}
+
+static void cb_Bottom(Fl_Value_Input* o, void* v) {
+ Fl_Grid *grid = Fl_Grid_Type::selected();
+ if (!grid) return;
+ int m = 0;
+ if (v == LOAD) {
+ grid->margin(NULL, NULL, NULL, &m);
+ o->value(m);
+ } else {
+ int m = (int)o->value(), old_m;
+ grid->margin(NULL, NULL, NULL, &old_m);
+ if (m != old_m) {
+ undo_checkpoint();
+ grid->margin(-1, -1, -1, m);
+ grid->need_layout(true);
+ set_modflag(1);
+ }
+ }
+}
+
+Fl_Group *wp_grid_gaps=(Fl_Group *)0;
+
+static void cb_Row(Fl_Value_Input* o, void* v) {
+ Fl_Grid *grid = Fl_Grid_Type::selected();
+ if (!grid) return;
+ if (v == LOAD) {
+ int m = 0;
+ grid->gap(&m, NULL);
+ o->value(m);
+ } else {
+ int m = (int)o->value(), old_m, m2;
+ grid->gap(&old_m, &m2);
+ if (m != old_m) {
+ undo_checkpoint();
+ grid->gap(m, m2);
+ grid->need_layout(true);
+ set_modflag(1);
+ }
+ }
+}
+
+static void cb_Col(Fl_Value_Input* o, void* v) {
+ Fl_Grid *grid = Fl_Grid_Type::selected();
+ if (!grid) return;
+ if (v == LOAD) {
+ int m = 0;
+ grid->gap(NULL, &m);
+ o->value(m);
+ } else {
+ int m = (int)o->value(), old_m, m2;
+ grid->gap(&m2, &old_m);
+ if (m != old_m) {
+ undo_checkpoint();
+ grid->gap(m2, m);
+ grid->need_layout(true);
+ set_modflag(1);
+ }
+ }
+}
+
+static void cb_Row1(Fl_Group* o, void* v) {
+ if (v == LOAD) {
+ Fl_Grid *grid = Fl_Grid_Type::selected();
+ if (grid)
+ o->activate();
+ else
+ o->deactivate();
+ propagate_load(o, v);
+ }
+}
+
+Fluid_Coord_Input *widget_grid_curr_row=(Fluid_Coord_Input *)0;
+
+static void cb_widget_grid_curr_row(Fluid_Coord_Input* o, void* v) {
+ Fl_Grid *grid = Fl_Grid_Type::selected();
+ if (!grid) return;
+ int r = o->value(), old_r = r;
+ if (r < 0) r = 0;
+ if (r >= grid->rows()) r = grid->rows()-1;
+ if (r != old_r) o->value(r);
+ if (v == LOAD) {
+ // will automatically propagate
+ } else {
+ widget_grid_curr_row_attributes->do_callback(widget_grid_curr_row_attributes, LOAD);
+ }
+}
+
+static void cb_6(Fl_Button*, void* v) {
+ if (v != LOAD) {
+ widget_grid_curr_row->value( widget_grid_curr_row->value()-1 );
+ widget_grid_curr_row->do_callback();
+ }
+}
+
+static void cb_7(Fl_Button*, void* v) {
+ if (v != LOAD) {
+ widget_grid_curr_row->value( widget_grid_curr_row->value()+1 );
+ widget_grid_curr_row->do_callback();
+ }
+}
+
+Fl_Group *widget_grid_curr_row_attributes=(Fl_Group *)0;
+
+static void cb_Height(Fluid_Coord_Input* o, void* v) {
+ Fl_Grid *grid = Fl_Grid_Type::selected();
+ if (!grid) return;
+ int r = widget_grid_curr_row->value();
+ if (v == LOAD) {
+ o->value(grid->row_height(r));
+ } else {
+ int h = o->value(), old_h = grid->row_height(r);
+ if (h < 0) h = 0;
+ if (h != old_h) {
+ undo_checkpoint();
+ grid->row_height(r, h);
+ grid->need_layout(true);
+ set_modflag(1);
+ }
+ }
+}
+
+static void cb_Weight(Fluid_Coord_Input* o, void* v) {
+ Fl_Grid *grid = Fl_Grid_Type::selected();
+ if (!grid) return;
+ int r = widget_grid_curr_row->value();
+ if (v == LOAD) {
+ o->value(grid->row_weight(r));
+ } else {
+ int h = o->value(), old_h = grid->row_weight(r);
+ if (h < 0) h = 0;
+ if (h != old_h) {
+ undo_checkpoint();
+ grid->row_weight(r, h);
+ grid->need_layout(true);
+ set_modflag(1);
+ }
+ }
+}
+
+static void cb_Gap(Fluid_Coord_Input* o, void* v) {
+ Fl_Grid *grid = Fl_Grid_Type::selected();
+ if (!grid) return;
+ int r = widget_grid_curr_row->value();
+ if (v == LOAD) {
+ o->value(grid->row_gap(r));
+ } else {
+ int h = o->value(), old_h = grid->row_gap(r);
+ if (h < -1) h = -1;
+ if (h != old_h) {
+ undo_checkpoint();
+ grid->row_gap(r, h);
+ grid->need_layout(true);
+ set_modflag(1);
+ }
+ }
+}
+
+Fluid_Coord_Input *widget_grid_curr_col=(Fluid_Coord_Input *)0;
+
+static void cb_widget_grid_curr_col(Fluid_Coord_Input* o, void* v) {
+ Fl_Grid *grid = Fl_Grid_Type::selected();
+ if (!grid) return;
+ int c = o->value(), old_c = c;
+ if (c < 0) c = 0;
+ if (c >= grid->cols()) c = grid->cols()-1;
+ if (c != old_c) o->value(c);
+ if (v == LOAD) {
+ // will automatically propagate
+ } else {
+ widget_grid_curr_col_attributes->do_callback(widget_grid_curr_col_attributes, LOAD);
+ }
+}
+
+static void cb_8(Fl_Button*, void* v) {
+ if (v != LOAD) {
+ widget_grid_curr_col->value( widget_grid_curr_col->value()-1 );
+ widget_grid_curr_col->do_callback();
+ }
+}
+
+static void cb_9(Fl_Button*, void* v) {
+ if (v != LOAD) {
+ widget_grid_curr_col->value( widget_grid_curr_col->value()+1 );
+ widget_grid_curr_col->do_callback();
+ }
+}
+
+Fl_Group *widget_grid_curr_col_attributes=(Fl_Group *)0;
+
+static void cb_Width(Fluid_Coord_Input* o, void* v) {
+ Fl_Grid *grid = Fl_Grid_Type::selected();
+ if (!grid) return;
+ int c = widget_grid_curr_col->value();
+ if (v == LOAD) {
+ o->value(grid->col_width(c));
+ } else {
+ int h = o->value(), old_h = grid->col_width(c);
+ if (h < 0) h = 0;
+ if (h != old_h) {
+ undo_checkpoint();
+ grid->col_width(c, h);
+ grid->need_layout(true);
+ set_modflag(1);
+ }
+ }
+}
+
+static void cb_Weight1(Fluid_Coord_Input* o, void* v) {
+ Fl_Grid *grid = Fl_Grid_Type::selected();
+ if (!grid) return;
+ int c = widget_grid_curr_col->value();
+ if (v == LOAD) {
+ o->value(grid->col_weight(c));
+ } else {
+ int h = o->value(), old_h = grid->col_weight(c);
+ if (h < 0) h = 0;
+ if (h != old_h) {
+ undo_checkpoint();
+ grid->col_weight(c, h);
+ grid->need_layout(true);
+ set_modflag(1);
+ }
+ }
+}
+
+static void cb_Gap1(Fluid_Coord_Input* o, void* v) {
+ Fl_Grid *grid = Fl_Grid_Type::selected();
+ if (!grid) return;
+ int c = widget_grid_curr_col->value();
+ if (v == LOAD) {
+ o->value(grid->col_gap(c));
+ } else {
+ int h = o->value(), old_h = grid->col_gap(c);
+ if (h < -1) h = -1;
+ if (h != old_h) {
+ undo_checkpoint();
+ grid->col_gap(c, h);
+ grid->need_layout(true);
+ set_modflag(1);
+ }
+ }
+}
+
+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);
+ { 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*)image_cb);
+ 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*)image_browse_cb);
+ 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*)inactive_cb);
+ 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*)inactive_browse_cb);
+ } // 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 Fluid_Coord_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*)x_cb);
+ widget_x_input->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ widget_x_input->when(FL_WHEN_RELEASE);
+ } // Fluid_Coord_Input* widget_x_input
+ { widget_y_input = new Fluid_Coord_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*)y_cb);
+ widget_y_input->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ widget_y_input->when(FL_WHEN_RELEASE);
+ } // Fluid_Coord_Input* widget_y_input
+ { widget_w_input = new Fluid_Coord_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*)w_cb);
+ widget_w_input->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ widget_w_input->when(FL_WHEN_RELEASE);
+ } // Fluid_Coord_Input* widget_w_input
+ { widget_h_input = new Fluid_Coord_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*)h_cb);
+ widget_h_input->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ widget_h_input->when(FL_WHEN_RELEASE);
+ } // Fluid_Coord_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*)wc_relative_cb);
+ 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*)flex_size_group_cb);
+ 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*)flex_size_cb);
+ 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*)flex_fixed_cb);
+ } // 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*)values_group_cb);
+ 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*)slider_size_cb);
+ 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*)min_cb);
+ 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*)max_cb);
+ 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*)step_cb);
+ 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*)value_cb);
+ 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*)flex_margin_group_cb);
+ 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*)flex_margin_left_cb);
+ 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*)flex_margin_top_cb);
+ 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*)flex_margin_right_cb);
+ 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*)flex_margin_bottom_cb);
+ 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*)flex_margin_gap_cb);
+ 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*)size_range_group_cb);
+ 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*)min_w_cb);
+ 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*)min_h_cb);
+ 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*)set_min_size_cb);
+ } // 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*)max_w_cb);
+ 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*)max_h_cb);
+ 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*)set_max_size_cb);
+ } // 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*)shortcut_in_cb);
+ 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*)xclass_cb);
+ 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*)border_cb);
+ } // 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*)modal_cb);
+ } // 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*)non_modal_cb);
+ 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*)visible_cb);
+ } // 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*)active_cb);
+ } // 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*)resizable_cb);
+ o->when(FL_WHEN_CHANGED);
+ } // 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*)hotspot_cb);
+ 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*)tooltip_cb);
+ } // 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*)labelfont_cb);
+ 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*)labelsize_cb);
+ } // 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*)labelcolor_cb);
+ } // Fl_Button* w_labelcolor
+ { Fl_Menu_Button* o = new Fl_Menu_Button(386, 40, 18, 20);
+ o->callback((Fl_Callback*)labelcolor_menu_cb);
+ 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*)box_cb);
+ 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*)color_cb);
+ } // Fl_Button* w_color
+ { Fl_Menu_Button* o = new Fl_Menu_Button(386, 65, 18, 20);
+ o->callback((Fl_Callback*)color_menu_cb);
+ 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*)down_box_cb);
+ 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*)color2_cb);
+ } // Fl_Button* w_selectcolor
+ { Fl_Menu_Button* o = new Fl_Menu_Button(386, 90, 18, 20);
+ o->callback((Fl_Callback*)color2_menu_cb);
+ 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*)textfont_cb);
+ 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*)textsize_cb);
+ } // 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*)textcolor_cb);
+ } // Fl_Button* w_textcolor
+ { Fl_Menu_Button* o = new Fl_Menu_Button(386, 115, 18, 20);
+ o->callback((Fl_Callback*)textcolor_menu_cb);
+ 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*)h_label_margin_cb);
+ 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*)v_label_margin_cb);
+ o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ } // Fl_Value_Input* o
+ { Fl_Value_Input* o = new Fl_Value_Input(219, 150, 55, 20, "Text to Image:");
+ 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*)image_spacing_cb);
+ 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*)compact_cb);
+ } // 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*)subclass_cb, (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*)subtype_cb);
+ } // 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*)name_cb);
+ 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*)name_public_member_cb);
+ 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*)v_input_cb, (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*)v_input_cb, (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*)v_input_cb, (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*)v_input_cb, (void*)(3));
+ } // Fl_Input* v_input[3]
+ { Fl_Tile* o = new Fl_Tile(95, 175, 310, 130);
+ o->callback((Fl_Callback*)cb_1);
+ { 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->align(Fl_Align(FL_ALIGN_LEFT));
+ wComment->when(FL_WHEN_CHANGED);
+ Fl_Group::current()->resizable(wComment);
+ wComment->buffer(new Fl_Text_Buffer());
+ wComment->callback((Fl_Callback*)comment_cb);
+ } // 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 CodeEditor(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*)callback_cb);
+ wCallback->align(Fl_Align(FL_ALIGN_LEFT));
+ wCallback->when(FL_WHEN_RELEASE);
+ Fl_Group::current()->resizable(wCallback);
+ } // CodeEditor* 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*)user_data_cb);
+ 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*)when_cb);
+ 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*)user_data_type_cb);
+ 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_child = new Fl_Group(10, 30, 400, 330, "Grid Child");
+ widget_tab_grid_child->labelsize(11);
+ widget_tab_grid_child->callback((Fl_Callback*)propagate_load);
+ widget_tab_grid_child->hide();
+ { Fl_Group* o = new Fl_Group(95, 60, 315, 20, "Location:");
+ o->box(FL_FLAT_BOX);
+ o->labelfont(1);
+ o->labelsize(11);
+ o->callback((Fl_Callback*)propagate_load);
+ o->align(Fl_Align(FL_ALIGN_LEFT));
+ { widget_grid_row_input = new Fluid_Coord_Input(95, 60, 40, 20, "Row:");
+ widget_grid_row_input->box(FL_DOWN_BOX);
+ widget_grid_row_input->color(FL_BACKGROUND2_COLOR);
+ widget_grid_row_input->selection_color(FL_SELECTION_COLOR);
+ widget_grid_row_input->labeltype(FL_NORMAL_LABEL);
+ widget_grid_row_input->labelfont(0);
+ widget_grid_row_input->labelsize(11);
+ widget_grid_row_input->labelcolor(FL_FOREGROUND_COLOR);
+ widget_grid_row_input->textsize(11);
+ widget_grid_row_input->callback((Fl_Callback*)grid_set_row_cb);
+ widget_grid_row_input->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ widget_grid_row_input->when(FL_WHEN_RELEASE);
+ } // Fluid_Coord_Input* widget_grid_row_input
+ { Fl_Group* o = new Fl_Group(135, 60, 30, 20);
+ { Fl_Button* o = new Fl_Button(135, 60, 15, 20, "-");
+ o->compact(1);
+ o->labelsize(11);
+ o->callback((Fl_Callback*)grid_dec_row_cb);
+ o->clear_visible_focus();
+ } // Fl_Button* o
+ { Fl_Button* o = new Fl_Button(150, 60, 15, 20, "+");
+ o->compact(1);
+ o->labelsize(11);
+ o->callback((Fl_Callback*)grid_inc_row_cb);
+ o->clear_visible_focus();
+ } // Fl_Button* o
+ o->end();
+ } // Fl_Group* o
+ { widget_grid_col_input = new Fluid_Coord_Input(175, 60, 40, 20, "Column:");
+ widget_grid_col_input->box(FL_DOWN_BOX);
+ widget_grid_col_input->color(FL_BACKGROUND2_COLOR);
+ widget_grid_col_input->selection_color(FL_SELECTION_COLOR);
+ widget_grid_col_input->labeltype(FL_NORMAL_LABEL);
+ widget_grid_col_input->labelfont(0);
+ widget_grid_col_input->labelsize(11);
+ widget_grid_col_input->labelcolor(FL_FOREGROUND_COLOR);
+ widget_grid_col_input->textsize(11);
+ widget_grid_col_input->callback((Fl_Callback*)grid_set_col_cb);
+ widget_grid_col_input->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ widget_grid_col_input->when(FL_WHEN_RELEASE);
+ } // Fluid_Coord_Input* widget_grid_col_input
+ { Fl_Group* o = new Fl_Group(215, 60, 30, 20);
+ { Fl_Button* o = new Fl_Button(215, 60, 15, 20, "-");
+ o->compact(1);
+ o->labelsize(11);
+ o->callback((Fl_Callback*)grid_dec_col_cb);
+ o->clear_visible_focus();
+ } // Fl_Button* o
+ { Fl_Button* o = new Fl_Button(230, 60, 15, 20, "+");
+ o->compact(1);
+ o->labelsize(11);
+ o->callback((Fl_Callback*)grid_inc_col_cb);
+ o->clear_visible_focus();
+ } // Fl_Button* o
+ o->end();
+ } // Fl_Group* o
+ { Fl_Box* o = new Fl_Box(395, 60, 1, 20);
+ o->hide();
+ Fl_Group::current()->resizable(o);
+ } // Fl_Box* o
+ { widget_grid_transient = new Fl_Box(250, 60, 80, 20, "TRANSIENT");
+ widget_grid_transient->labelsize(11);
+ widget_grid_transient->labelcolor((Fl_Color)1);
+ widget_grid_transient->callback((Fl_Callback*)cb_widget_grid_transient);
+ } // Fl_Box* widget_grid_transient
+ { widget_grid_unlinked = new Fl_Box(250, 60, 80, 20, "UNLINKED");
+ widget_grid_unlinked->labelsize(11);
+ widget_grid_unlinked->labelcolor((Fl_Color)1);
+ widget_grid_unlinked->hide();
+ } // Fl_Box* widget_grid_unlinked
+ o->end();
+ } // Fl_Group* o
+ { wp_gridc_align = new Fl_Group(95, 100, 315, 20, "Align:");
+ wp_gridc_align->labelfont(1);
+ wp_gridc_align->labelsize(11);
+ wp_gridc_align->callback((Fl_Callback*)propagate_load);
+ wp_gridc_align->align(Fl_Align(FL_ALIGN_LEFT));
+ { Fl_Choice* o = new Fl_Choice(95, 100, 115, 20, "Horizontal");
+ o->down_box(FL_BORDER_BOX);
+ o->labelsize(11);
+ o->textsize(11);
+ o->callback((Fl_Callback*)grid_align_horizontal_cb);
+ o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ o->menu(menu_Horizontal);
+ } // Fl_Choice* o
+ { Fl_Choice* o = new Fl_Choice(215, 100, 115, 20, "Vertical");
+ o->down_box(FL_BORDER_BOX);
+ o->labelsize(11);
+ o->textsize(11);
+ o->callback((Fl_Callback*)grid_align_vertical_cb);
+ o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ o->menu(menu_Vertical);
+ } // Fl_Choice* o
+ { Fl_Box* o = new Fl_Box(395, 100, 1, 20);
+ o->hide();
+ Fl_Group::current()->resizable(o);
+ } // Fl_Box* o
+ wp_gridc_align->end();
+ } // Fl_Group* wp_gridc_align
+ { wp_gridc_size = new Fl_Group(95, 135, 315, 20, "Min. Size:");
+ wp_gridc_size->labelfont(1);
+ wp_gridc_size->labelsize(11);
+ wp_gridc_size->callback((Fl_Callback*)propagate_load);
+ wp_gridc_size->align(Fl_Align(FL_ALIGN_LEFT));
+ { Fluid_Coord_Input* o = new Fluid_Coord_Input(95, 135, 55, 20, "Width:");
+ 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->textsize(11);
+ o->callback((Fl_Callback*)grid_set_min_wdt_cb);
+ o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ o->when(FL_WHEN_RELEASE);
+ } // Fluid_Coord_Input* o
+ { Fluid_Coord_Input* o = new Fluid_Coord_Input(155, 135, 55, 20, "Height:");
+ 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->textsize(11);
+ o->callback((Fl_Callback*)grid_set_min_hgt_cb);
+ o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ o->when(FL_WHEN_RELEASE);
+ } // Fluid_Coord_Input* o
+ { Fl_Box* o = new Fl_Box(395, 135, 1, 20);
+ o->hide();
+ Fl_Group::current()->resizable(o);
+ } // Fl_Box* o
+ wp_gridc_size->end();
+ } // Fl_Group* wp_gridc_size
+ { Fl_Group* o = new Fl_Group(95, 170, 315, 20, "Span:");
+ o->labelfont(1);
+ o->labelsize(11);
+ o->callback((Fl_Callback*)propagate_load);
+ o->align(Fl_Align(FL_ALIGN_LEFT));
+ { widget_grid_rowspan_input = new Fluid_Coord_Input(95, 170, 40, 20, "Row Span:");
+ widget_grid_rowspan_input->box(FL_DOWN_BOX);
+ widget_grid_rowspan_input->color(FL_BACKGROUND2_COLOR);
+ widget_grid_rowspan_input->selection_color(FL_SELECTION_COLOR);
+ widget_grid_rowspan_input->labeltype(FL_NORMAL_LABEL);
+ widget_grid_rowspan_input->labelfont(0);
+ widget_grid_rowspan_input->labelsize(11);
+ widget_grid_rowspan_input->labelcolor(FL_FOREGROUND_COLOR);
+ widget_grid_rowspan_input->textsize(11);
+ widget_grid_rowspan_input->callback((Fl_Callback*)grid_set_rowspan_cb);
+ widget_grid_rowspan_input->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ widget_grid_rowspan_input->when(FL_WHEN_RELEASE);
+ } // Fluid_Coord_Input* widget_grid_rowspan_input
+ { Fl_Group* o = new Fl_Group(135, 170, 30, 20);
+ { Fl_Button* o = new Fl_Button(135, 170, 15, 20, "-");
+ o->compact(1);
+ o->labelsize(11);
+ o->callback((Fl_Callback*)grid_dec_rowspan_cb);
+ o->clear_visible_focus();
+ } // Fl_Button* o
+ { Fl_Button* o = new Fl_Button(150, 170, 15, 20, "+");
+ o->compact(1);
+ o->labelsize(11);
+ o->callback((Fl_Callback*)grid_inc_rowspan_cb);
+ o->clear_visible_focus();
+ } // Fl_Button* o
+ o->end();
+ } // Fl_Group* o
+ { widget_grid_colspan_input = new Fluid_Coord_Input(175, 170, 40, 20, "Col. Span:");
+ widget_grid_colspan_input->box(FL_DOWN_BOX);
+ widget_grid_colspan_input->color(FL_BACKGROUND2_COLOR);
+ widget_grid_colspan_input->selection_color(FL_SELECTION_COLOR);
+ widget_grid_colspan_input->labeltype(FL_NORMAL_LABEL);
+ widget_grid_colspan_input->labelfont(0);
+ widget_grid_colspan_input->labelsize(11);
+ widget_grid_colspan_input->labelcolor(FL_FOREGROUND_COLOR);
+ widget_grid_colspan_input->textsize(11);
+ widget_grid_colspan_input->callback((Fl_Callback*)grid_set_colspan_cb);
+ widget_grid_colspan_input->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ widget_grid_colspan_input->when(FL_WHEN_RELEASE);
+ } // Fluid_Coord_Input* widget_grid_colspan_input
+ { Fl_Group* o = new Fl_Group(215, 170, 30, 20);
+ { Fl_Button* o = new Fl_Button(215, 170, 15, 20, "-");
+ o->compact(1);
+ o->labelsize(11);
+ o->callback((Fl_Callback*)grid_dec_colspan_cb);
+ o->clear_visible_focus();
+ } // Fl_Button* o
+ { Fl_Button* o = new Fl_Button(230, 170, 15, 20, "+");
+ o->compact(1);
+ o->labelsize(11);
+ o->callback((Fl_Callback*)grid_inc_colspan_cb);
+ o->clear_visible_focus();
+ } // Fl_Button* o
+ o->end();
+ } // Fl_Group* o
+ { Fl_Box* o = new Fl_Box(395, 170, 1, 20);
+ o->hide();
+ Fl_Group::current()->resizable(o);
+ } // Fl_Box* o
+ o->end();
+ } // Fl_Group* o
+ { Fl_Box* o = new Fl_Box(95, 350, 300, 5);
+ o->labelsize(11);
+ o->hide();
+ Fl_Group::current()->resizable(o);
+ } // Fl_Box* o
+ widget_tab_grid_child->end();
+ } // Fl_Group* widget_tab_grid_child
+ { widget_tab_grid = new Fl_Group(10, 30, 400, 330, "Grid");
+ widget_tab_grid->labelsize(11);
+ widget_tab_grid->callback((Fl_Callback*)propagate_load);
+ widget_tab_grid->hide();
+ { Fl_Group* o = new Fl_Group(95, 60, 315, 20, "Grid Layout:");
+ o->labelfont(1);
+ o->labelsize(11);
+ o->callback((Fl_Callback*)propagate_load);
+ o->align(Fl_Align(FL_ALIGN_LEFT));
+ { widget_grid_rows = new Fluid_Coord_Input(95, 60, 40, 20, "Rows:");
+ widget_grid_rows->tooltip("Number of horizontal rows in the Grid group");
+ widget_grid_rows->box(FL_DOWN_BOX);
+ widget_grid_rows->color(FL_BACKGROUND2_COLOR);
+ widget_grid_rows->selection_color(FL_SELECTION_COLOR);
+ widget_grid_rows->labeltype(FL_NORMAL_LABEL);
+ widget_grid_rows->labelfont(0);
+ widget_grid_rows->labelsize(11);
+ widget_grid_rows->labelcolor(FL_FOREGROUND_COLOR);
+ widget_grid_rows->textsize(11);
+ widget_grid_rows->callback((Fl_Callback*)cb_widget_grid_rows);
+ widget_grid_rows->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ widget_grid_rows->when(FL_WHEN_RELEASE);
+ } // Fluid_Coord_Input* widget_grid_rows
+ { Fl_Group* o = new Fl_Group(135, 60, 30, 20);
+ { Fl_Button* o = new Fl_Button(135, 60, 15, 20, "-");
+ o->compact(1);
+ o->labelsize(11);
+ o->callback((Fl_Callback*)cb_2);
+ o->clear_visible_focus();
+ } // Fl_Button* o
+ { Fl_Button* o = new Fl_Button(150, 60, 15, 20, "+");
+ o->compact(1);
+ o->labelsize(11);
+ o->callback((Fl_Callback*)cb_3);
+ o->clear_visible_focus();
+ } // Fl_Button* o
+ o->end();
+ } // Fl_Group* o
+ { widget_grid_cols = new Fluid_Coord_Input(175, 60, 40, 20, "Columns:");
+ widget_grid_cols->tooltip("Number of vertical columns in the Grid group");
+ widget_grid_cols->box(FL_DOWN_BOX);
+ widget_grid_cols->color(FL_BACKGROUND2_COLOR);
+ widget_grid_cols->selection_color(FL_SELECTION_COLOR);
+ widget_grid_cols->labeltype(FL_NORMAL_LABEL);
+ widget_grid_cols->labelfont(0);
+ widget_grid_cols->labelsize(11);
+ widget_grid_cols->labelcolor(FL_FOREGROUND_COLOR);
+ widget_grid_cols->textsize(11);
+ widget_grid_cols->callback((Fl_Callback*)cb_widget_grid_cols);
+ widget_grid_cols->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ widget_grid_cols->when(FL_WHEN_RELEASE);
+ } // Fluid_Coord_Input* widget_grid_cols
+ { Fl_Group* o = new Fl_Group(215, 60, 30, 20);
+ { Fl_Button* o = new Fl_Button(215, 60, 15, 20, "-");
+ o->compact(1);
+ o->labelsize(11);
+ o->callback((Fl_Callback*)cb_4);
+ o->clear_visible_focus();
+ } // Fl_Button* o
+ { Fl_Button* o = new Fl_Button(230, 60, 15, 20, "+");
+ o->compact(1);
+ o->labelsize(11);
+ o->callback((Fl_Callback*)cb_5);
+ o->clear_visible_focus();
+ } // Fl_Button* o
+ o->end();
+ } // Fl_Group* o
+ { Fl_Box* o = new Fl_Box(396, 60, 0, 20);
+ Fl_Group::current()->resizable(o);
+ } // Fl_Box* o
+ o->end();
+ } // Fl_Group* o
+ { wp_grid_margin = new Fl_Group(95, 100, 315, 20, "Margins:");
+ wp_grid_margin->labelfont(1);
+ wp_grid_margin->labelsize(11);
+ wp_grid_margin->callback((Fl_Callback*)propagate_load);
+ wp_grid_margin->align(Fl_Align(FL_ALIGN_LEFT));
+ { Fl_Value_Input* o = new Fl_Value_Input(95, 100, 55, 20, "Left:");
+ o->tooltip("Left margin in group.");
+ o->labelsize(11);
+ o->maximum(1000);
+ o->step(1);
+ 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, 100, 55, 20, "Top:");
+ o->tooltip("Top margin in group.");
+ o->labelsize(11);
+ o->maximum(1000);
+ o->step(1);
+ 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, 100, 55, 20, "Right:");
+ o->tooltip("Right margin in group.");
+ o->labelsize(11);
+ o->maximum(1000);
+ o->step(1);
+ 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, 100, 55, 20, "Bottom:");
+ o->tooltip("Bottom margin in group.");
+ o->labelsize(11);
+ o->maximum(1000);
+ o->step(1);
+ o->textsize(11);
+ o->callback((Fl_Callback*)cb_Bottom);
+ o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ } // Fl_Value_Input* o
+ { Fl_Box* o = new Fl_Box(396, 100, 0, 20);
+ Fl_Group::current()->resizable(o);
+ } // Fl_Box* o
+ wp_grid_margin->end();
+ } // Fl_Group* wp_grid_margin
+ { wp_grid_gaps = new Fl_Group(95, 135, 315, 20, "Gaps:");
+ wp_grid_gaps->labelfont(1);
+ wp_grid_gaps->labelsize(11);
+ wp_grid_gaps->callback((Fl_Callback*)propagate_load);
+ wp_grid_gaps->align(Fl_Align(FL_ALIGN_LEFT));
+ { Fl_Value_Input* o = new Fl_Value_Input(95, 135, 55, 20, "Row:");
+ o->tooltip("Gap between children.");
+ o->labelsize(11);
+ o->maximum(1000);
+ o->step(1);
+ o->textsize(11);
+ o->callback((Fl_Callback*)cb_Row);
+ o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ } // Fl_Value_Input* o
+ { Fl_Value_Input* o = new Fl_Value_Input(155, 135, 55, 20, "Col:");
+ o->tooltip("Gap between children.");
+ o->labelsize(11);
+ o->maximum(1000);
+ o->step(1);
+ o->textsize(11);
+ o->callback((Fl_Callback*)cb_Col);
+ o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ } // Fl_Value_Input* o
+ { Fl_Box* o = new Fl_Box(396, 135, 0, 20);
+ Fl_Group::current()->resizable(o);
+ } // Fl_Box* o
+ wp_grid_gaps->end();
+ } // Fl_Group* wp_grid_gaps
+ { Fl_Group* o = new Fl_Group(95, 175, 315, 20, "Row:");
+ o->labelfont(1);
+ o->labelsize(11);
+ o->callback((Fl_Callback*)cb_Row1);
+ o->align(Fl_Align(FL_ALIGN_LEFT));
+ { widget_grid_curr_row = new Fluid_Coord_Input(95, 175, 40, 20, "Index");
+ widget_grid_curr_row->box(FL_DOWN_BOX);
+ widget_grid_curr_row->color(FL_BACKGROUND2_COLOR);
+ widget_grid_curr_row->selection_color(FL_SELECTION_COLOR);
+ widget_grid_curr_row->labeltype(FL_NORMAL_LABEL);
+ widget_grid_curr_row->labelfont(0);
+ widget_grid_curr_row->labelsize(11);
+ widget_grid_curr_row->labelcolor(FL_FOREGROUND_COLOR);
+ widget_grid_curr_row->textsize(11);
+ widget_grid_curr_row->callback((Fl_Callback*)cb_widget_grid_curr_row);
+ widget_grid_curr_row->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ widget_grid_curr_row->when(FL_WHEN_RELEASE);
+ } // Fluid_Coord_Input* widget_grid_curr_row
+ { Fl_Group* o = new Fl_Group(135, 175, 30, 20);
+ o->callback((Fl_Callback*)propagate_load);
+ { Fl_Button* o = new Fl_Button(135, 175, 15, 20, "-");
+ o->compact(1);
+ o->labelsize(11);
+ o->callback((Fl_Callback*)cb_6);
+ o->clear_visible_focus();
+ } // Fl_Button* o
+ { Fl_Button* o = new Fl_Button(150, 175, 15, 20, "+");
+ o->compact(1);
+ o->labelsize(11);
+ o->callback((Fl_Callback*)cb_7);
+ o->clear_visible_focus();
+ } // Fl_Button* o
+ o->end();
+ } // Fl_Group* o
+ { Fl_Box* o = new Fl_Box(165, 175, 15, 20, ":");
+ o->labelsize(11);
+ } // Fl_Box* o
+ { widget_grid_curr_row_attributes = new Fl_Group(180, 175, 175, 20);
+ widget_grid_curr_row_attributes->callback((Fl_Callback*)propagate_load);
+ { Fluid_Coord_Input* o = new Fluid_Coord_Input(180, 175, 55, 20, "Height:");
+ 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->textsize(11);
+ o->callback((Fl_Callback*)cb_Height);
+ o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ o->when(FL_WHEN_RELEASE);
+ } // Fluid_Coord_Input* o
+ { Fluid_Coord_Input* o = new Fluid_Coord_Input(240, 175, 55, 20, "Weight:");
+ 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->textsize(11);
+ o->callback((Fl_Callback*)cb_Weight);
+ o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ o->when(FL_WHEN_RELEASE);
+ } // Fluid_Coord_Input* o
+ { Fluid_Coord_Input* o = new Fluid_Coord_Input(300, 175, 55, 20, "Gap:");
+ 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->textsize(11);
+ o->callback((Fl_Callback*)cb_Gap);
+ o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ o->when(FL_WHEN_RELEASE);
+ } // Fluid_Coord_Input* o
+ widget_grid_curr_row_attributes->end();
+ } // Fl_Group* widget_grid_curr_row_attributes
+ { Fl_Box* o = new Fl_Box(400, 175, 1, 20);
+ o->hide();
+ Fl_Group::current()->resizable(o);
+ } // Fl_Box* o
+ o->end();
+ } // Fl_Group* o
+ { Fl_Group* o = new Fl_Group(95, 210, 315, 20, "Column:");
+ o->labelfont(1);
+ o->labelsize(11);
+ o->callback((Fl_Callback*)propagate_load);
+ o->align(Fl_Align(FL_ALIGN_LEFT));
+ { widget_grid_curr_col = new Fluid_Coord_Input(95, 210, 40, 20, "Index");
+ widget_grid_curr_col->box(FL_DOWN_BOX);
+ widget_grid_curr_col->color(FL_BACKGROUND2_COLOR);
+ widget_grid_curr_col->selection_color(FL_SELECTION_COLOR);
+ widget_grid_curr_col->labeltype(FL_NORMAL_LABEL);
+ widget_grid_curr_col->labelfont(0);
+ widget_grid_curr_col->labelsize(11);
+ widget_grid_curr_col->labelcolor(FL_FOREGROUND_COLOR);
+ widget_grid_curr_col->textsize(11);
+ widget_grid_curr_col->callback((Fl_Callback*)cb_widget_grid_curr_col);
+ widget_grid_curr_col->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ widget_grid_curr_col->when(FL_WHEN_RELEASE);
+ } // Fluid_Coord_Input* widget_grid_curr_col
+ { Fl_Group* o = new Fl_Group(135, 210, 30, 20);
+ { Fl_Button* o = new Fl_Button(135, 210, 15, 20, "-");
+ o->compact(1);
+ o->labelsize(11);
+ o->callback((Fl_Callback*)cb_8);
+ o->clear_visible_focus();
+ } // Fl_Button* o
+ { Fl_Button* o = new Fl_Button(150, 210, 15, 20, "+");
+ o->compact(1);
+ o->labelsize(11);
+ o->callback((Fl_Callback*)cb_9);
+ o->clear_visible_focus();
+ } // Fl_Button* o
+ o->end();
+ } // Fl_Group* o
+ { Fl_Box* o = new Fl_Box(165, 210, 15, 20, ":");
+ o->labelsize(11);
+ } // Fl_Box* o
+ { widget_grid_curr_col_attributes = new Fl_Group(180, 210, 175, 20);
+ widget_grid_curr_col_attributes->callback((Fl_Callback*)propagate_load);
+ { Fluid_Coord_Input* o = new Fluid_Coord_Input(180, 210, 55, 20, "Width:");
+ 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->textsize(11);
+ o->callback((Fl_Callback*)cb_Width);
+ o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ o->when(FL_WHEN_RELEASE);
+ } // Fluid_Coord_Input* o
+ { Fluid_Coord_Input* o = new Fluid_Coord_Input(240, 210, 55, 20, "Weight:");
+ 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->textsize(11);
+ o->callback((Fl_Callback*)cb_Weight1);
+ o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ o->when(FL_WHEN_RELEASE);
+ } // Fluid_Coord_Input* o
+ { Fluid_Coord_Input* o = new Fluid_Coord_Input(300, 210, 55, 20, "Gap:");
+ 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->textsize(11);
+ o->callback((Fl_Callback*)cb_Gap1);
+ o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ o->when(FL_WHEN_RELEASE);
+ } // Fluid_Coord_Input* o
+ widget_grid_curr_col_attributes->end();
+ } // Fl_Group* widget_grid_curr_col_attributes
+ { Fl_Box* o = new Fl_Box(400, 210, 1, 20);
+ o->hide();
+ Fl_Group::current()->resizable(o);
+ } // Fl_Box* o
+ o->end();
+ } // Fl_Group* o
+ { Fl_Box* o = new Fl_Box(95, 350, 300, 5);
+ o->labelsize(11);
+ o->hide();
+ Fl_Group::current()->resizable(o);
+ } // Fl_Box* o
+ widget_tab_grid->end();
+ } // Fl_Group* widget_tab_grid
+ o->show();
+ widget_tabs->end();
+ Fl_Group::current()->resizable(widget_tabs);
+ } // Fl_Tabs* widget_tabs
+ { 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;
+}
diff --git a/fluid/panels/widget_panel.fl b/fluid/panels/widget_panel.fl
new file mode 100644
index 000000000..57ae30273
--- /dev/null
+++ b/fluid/panels/widget_panel.fl
@@ -0,0 +1,1872 @@
+# data file for the Fltk User Interface Designer (fluid)
+version 1.0500
+header_name {.h}
+code_name {.cxx}
+snap {
+ ver 1
+ current_suite FLTK
+ current_preset 1
+}
+comment {//
+// 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
+//
+} {in_source in_header
+}
+
+decl {\#include "app/undo.h"} {private global
+}
+
+decl {\#include "nodes/Fl_Widget_Type.h"} {private global
+}
+
+decl {\#include "nodes/Fl_Grid_Type.h"} {private global
+}
+
+decl {\#include "widgets/custom_widgets.h"} {selected public global
+}
+
+decl {\#include <FL/Fl_Grid.H>} {private global
+}
+
+decl {extern void set_modflag(int mf, int mfc=-1);} {private local
+}
+
+Function {make_image_panel()} {
+ comment {Create a panel for editing widget image data} open
+} {
+ Fl_Window image_panel_window {
+ label {Image Options}
+ callback {propagate_load(o, v);} open
+ xywh {527 684 260 332} type Double modal visible
+ } {
+ Fl_Group image_panel_imagegroup {
+ callback propagate_load open
+ xywh {10 15 235 125}
+ } {
+ Fl_Box {} {
+ label { ---- Active Image ----}
+ xywh {75 15 170 20} labelfont 1 labelsize 11 align 20
+ }
+ Fl_Box image_panel_data {
+ label {... x ... pixels, ...}
+ callback {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();
+ }
+}}
+ xywh {75 35 170 20} labelsize 11 align 20
+ code0 {\#include <FL/Fl_Shared_Image.H>}
+ }
+ Fl_Group {} {
+ callback propagate_load open
+ xywh {75 75 170 20}
+ } {
+ Fl_Input image_panel_imagew {
+ label {Width:}
+ callback {if (v == LOAD) {
+ if (current_widget->is_widget() && !current_widget->is_a(ID_Window)) {
+ o->value(current_widget->scale_image_w_);
+ }
+ } else {
+ int mod = 0;
+ for (Fl_Type *t = Fl_Type::first; t; t = t->next) {
+ if (t->selected && t->is_widget()) {
+ Fl_Widget_Type* wt = ((Fl_Widget_Type*)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) set_modflag(1);
+ }}
+ tooltip {Scale image to this width in pixel units} xywh {75 75 55 20} labelsize 11 align 5 textsize 11
+ class Fluid_Coord_Input
+ }
+ Fl_Input image_panel_imageh {
+ label {Height:}
+ callback {if (v == LOAD) {
+ if (current_widget->is_widget() && !current_widget->is_a(ID_Window)) {
+ o->value(current_widget->scale_image_h_);
+ }
+ } else {
+ int mod = 0;
+ for (Fl_Type *t = Fl_Type::first; t; t = t->next) {
+ if (t->selected && t->is_widget()) {
+ Fl_Widget_Type* wt = ((Fl_Widget_Type*)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) set_modflag(1);
+ }}
+ tooltip {Scale image to this height in pixel units} xywh {135 75 55 20} labelsize 11 align 5 textsize 11
+ class Fluid_Coord_Input
+ }
+ Fl_Button {} {
+ label Reset
+ callback {if (v != LOAD) {
+ image_panel_imagew->value(0);
+ image_panel_imageh->value(0);
+ image_panel_imagew->do_callback();
+ image_panel_imageh->do_callback();
+}}
+ tooltip {Reset scale to original size} xywh {195 75 50 20} labelsize 11
+ }
+ }
+ Fl_Box {} {
+ label {Scale:}
+ xywh {10 75 60 20} labelfont 1 labelsize 11 align 24
+ }
+ Fl_Box {} {
+ label {Storage:}
+ xywh {10 100 60 20} labelfont 1 labelsize 11 align 24
+ }
+ Fl_Check_Button {} {
+ label {convert to raw pixel data}
+ callback compress_image_cb
+ 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 pixel data} xywh {75 100 170 20} down_box DOWN_BOX labelsize 11
+ }
+ Fl_Check_Button {} {
+ label {bind to widget}
+ callback bind_image_cb
+ tooltip {bind the image to the widget, so it will be deleted automatically} xywh {75 120 170 20} down_box DOWN_BOX labelsize 11 hotspot
+ }
+ }
+ Fl_Group image_panel_deimagegroup {
+ callback propagate_load open
+ xywh {10 155 235 125}
+ } {
+ Fl_Box {} {
+ label { ---- Inactive Image ----}
+ xywh {75 155 170 20} labelfont 1 labelsize 11 align 20
+ }
+ Fl_Box image_panel_dedata {
+ label {... x ... pixels, ...}
+ callback {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();
+ }
+}}
+ xywh {75 175 170 20} labelsize 11 align 20
+ }
+ Fl_Group {} {
+ callback propagate_load open
+ xywh {75 215 170 20}
+ } {
+ Fl_Input image_panel_deimagew {
+ label {Width:}
+ callback {if (v == LOAD) {
+ if (current_widget->is_widget() && !current_widget->is_a(ID_Window)) {
+ o->value(current_widget->scale_deimage_w_);
+ }
+ } else {
+ int mod = 0;
+ for (Fl_Type *t = Fl_Type::first; t; t = t->next) {
+ if (t->selected && t->is_widget()) {
+ Fl_Widget_Type* wt = ((Fl_Widget_Type*)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) set_modflag(1);
+ }}
+ tooltip {Scale image to this width in pixel units} xywh {75 215 55 20} labelsize 11 align 5 textsize 11
+ class Fluid_Coord_Input
+ }
+ Fl_Input image_panel_deimageh {
+ label {Height:}
+ callback {if (v == LOAD) {
+ if (current_widget->is_widget() && !current_widget->is_a(ID_Window)) {
+ o->value(current_widget->scale_deimage_h_);
+ }
+ } else {
+ int mod = 0;
+ for (Fl_Type *t = Fl_Type::first; t; t = t->next) {
+ if (t->selected && t->is_widget()) {
+ Fl_Widget_Type* wt = ((Fl_Widget_Type*)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) set_modflag(1);
+ }}
+ tooltip {Scale image to this height in pixel units} xywh {135 215 55 20} labelsize 11 align 5 textsize 11
+ class Fluid_Coord_Input
+ }
+ Fl_Button {} {
+ label Reset
+ callback {if (v != LOAD) {
+ image_panel_deimagew->value(0);
+ image_panel_deimageh->value(0);
+ image_panel_deimagew->do_callback();
+ image_panel_deimageh->do_callback();
+}}
+ tooltip {Reset scale to original size} xywh {195 215 50 20} labelsize 11
+ }
+ }
+ Fl_Box {} {
+ label {Scale:}
+ xywh {10 215 60 20} labelfont 1 labelsize 11 align 24
+ }
+ Fl_Box {} {
+ label {Storage:}
+ xywh {10 240 60 20} labelfont 1 labelsize 11 align 24
+ }
+ Fl_Check_Button {} {
+ label {convert to raw pixel data}
+ callback compress_deimage_cb
+ 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 pixel data} xywh {75 240 170 20} down_box DOWN_BOX labelsize 11
+ }
+ Fl_Check_Button {} {
+ label {bind to widget}
+ callback bind_deimage_cb
+ tooltip {bind the image to the widget, so it will be deleted automatically} xywh {75 260 170 20} down_box DOWN_BOX labelsize 11
+ }
+ }
+ Fl_Button image_panel_close {
+ label Close
+ callback {if (v != LOAD)
+ image_panel_window->hide();}
+ xywh {165 295 80 20} labelsize 11
+ }
+ }
+}
+
+Function {run_image_panel()} {open return_type void
+} {
+ code {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(NULL);
+}} {}
+}
+
+Function {make_widget_panel()} {
+ comment {Create a panel that can be used with all known widgets} open
+} {
+ Fl_Window {} {
+ comment {Use a Double Window to avoid flickering.} open
+ xywh {372 208 420 400} type Double labelsize 11 align 80 resizable hotspot
+ code0 {o->size_range(o->w(), o->h());} size_range {420 400 0 0} visible
+ } {
+ Fl_Tabs widget_tabs {
+ callback {propagate_load((Fl_Group *)o,v);} open
+ xywh {10 10 400 350} selection_color 12 labelsize 11 labelcolor 7 when 0 resizable
+ code0 {o->show();}
+ } {
+ Fl_Group wp_gui_tab {
+ label GUI
+ callback propagate_load open
+ xywh {10 30 400 330} labelsize 11 when 0 resizable
+ } {
+ Fl_Group {} {
+ label {Label:}
+ callback propagate_load open
+ xywh {95 40 309 20} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Input wp_gui_label {
+ callback label_cb
+ tooltip {The label text for the widget.
+Use Ctrl-J for newlines.} xywh {95 40 190 20} labelfont 1 labelsize 11 when 15 textsize 11 resizable
+ }
+ Fl_Choice {} {
+ callback labeltype_cb open
+ tooltip {The label style for the widget.} xywh {285 40 119 20} box THIN_UP_BOX down_box BORDER_BOX labelfont 1 labelsize 11 textsize 11
+ code0 {extern Fl_Menu_Item labeltypemenu[];}
+ code1 {o->menu(labeltypemenu);}
+ } {}
+ }
+ Fl_Group {} {
+ label {Image:}
+ callback propagate_load open
+ xywh {95 65 309 20} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Input widget_image_input {
+ callback image_cb
+ tooltip {The active image for the widget.} xywh {95 65 200 20} labelfont 1 labelsize 11 textsize 11 resizable
+ }
+ Fl_Button {} {
+ label {Browse...}
+ callback image_browse_cb
+ tooltip {Click to choose the active image.} xywh {295 65 89 20} labelsize 11 align 256
+ }
+ Fl_Button {} {
+ label {...}
+ callback {if (v != LOAD) {
+ run_image_panel();
+}}
+ tooltip {more image options} bind_image 1 xywh {384 65 20 20}
+ }
+ }
+ Fl_Group {} {
+ label {Inactive:}
+ callback propagate_load open
+ xywh {95 90 309 20} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Input widget_deimage_input {
+ callback inactive_cb
+ tooltip {The inactive image for the widget.} xywh {95 90 200 20} labelfont 1 labelsize 11 textsize 11 resizable
+ }
+ Fl_Button {} {
+ label {Browse...}
+ callback inactive_browse_cb
+ tooltip {Click to choose the inactive image.} xywh {295 90 89 20} labelsize 11
+ }
+ }
+ Fl_Group wp_gui_alignment {
+ label {Alignment:}
+ callback propagate_load open
+ xywh {95 115 312 20} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Button {} {
+ label Clip
+ user_data {(fl_intptr_t)FL_ALIGN_CLIP}
+ callback align_cb
+ tooltip {Clip the label to the inside of the widget.} xywh {95 115 30 20} type Toggle selection_color 8 labelsize 11 align 16
+ }
+ Fl_Button {} {
+ label Wrap
+ user_data {(fl_intptr_t)FL_ALIGN_WRAP}
+ callback align_cb
+ tooltip {Wrap the label text.} xywh {130 115 38 20} type Toggle selection_color 8 labelsize 11
+ }
+ Fl_Button {} {
+ label {@-1<-}
+ user_data {(fl_intptr_t)FL_ALIGN_LEFT}
+ callback align_cb
+ tooltip {Left-align the label.} xywh {278 115 20 20} type Toggle selection_color 8 labelsize 11 labelcolor 8 hide
+ }
+ Fl_Button {} {
+ label {@-1->}
+ user_data {(fl_intptr_t)FL_ALIGN_RIGHT}
+ callback align_cb
+ tooltip {Right-align the label.} xywh {303 115 20 20} type Toggle selection_color 8 labelsize 11 labelcolor 8 hide
+ }
+ Fl_Button {} {
+ label {@-18}
+ user_data {(fl_intptr_t)FL_ALIGN_TOP}
+ callback align_cb
+ tooltip {Top-align the label.} xywh {328 115 20 20} type Toggle selection_color 8 labelsize 11 labelcolor 8 hide
+ }
+ Fl_Button {} {
+ label {@-12}
+ user_data {(fl_intptr_t)FL_ALIGN_BOTTOM}
+ callback align_cb
+ tooltip {Bottom-align the label.} xywh {353 115 20 20} type Toggle selection_color 8 labelsize 11 labelcolor 8 hide
+ }
+ Fl_Choice {} {
+ callback align_text_image_cb
+ xywh {172 115 116 20} down_box BORDER_BOX labelsize 11 textsize 11
+ } {
+ MenuItem {} {
+ label { Image Alignment }
+ user_data {(fl_intptr_t)0xFFFFFFFF}
+ xywh {145 145 100 20} labelfont 2 labelsize 10 deactivate
+ }
+ MenuItem {} {
+ label {image over text}
+ user_data {(fl_intptr_t)FL_ALIGN_IMAGE_OVER_TEXT}
+ xywh {25 25 100 20} labelsize 9
+ }
+ MenuItem {} {
+ label {text over image}
+ user_data {(fl_intptr_t)FL_ALIGN_TEXT_OVER_IMAGE}
+ xywh {15 15 100 20} labelsize 9
+ }
+ MenuItem {} {
+ label {text next to image}
+ user_data {(fl_intptr_t)FL_ALIGN_TEXT_NEXT_TO_IMAGE}
+ xywh {35 35 100 20} labelsize 9
+ }
+ MenuItem {} {
+ label {image next to text}
+ user_data {(fl_intptr_t)FL_ALIGN_IMAGE_NEXT_TO_TEXT}
+ xywh {45 45 100 20} labelsize 9
+ }
+ MenuItem {} {
+ label {image is backdrop}
+ user_data {(fl_intptr_t)FL_ALIGN_IMAGE_BACKDROP}
+ xywh {55 55 100 20} labelsize 9
+ }
+ }
+ Fl_Choice {} {
+ callback align_position_cb
+ xywh {293 115 86 20} down_box BORDER_BOX labelsize 11 textsize 11
+ } {
+ MenuItem {} {
+ label { Inside && Outside }
+ user_data {(fl_intptr_t)0xFFFFFFFF}
+ xywh {135 135 100 20} labelfont 2 labelsize 10 deactivate
+ }
+ MenuItem {} {
+ label {top left}
+ user_data {(fl_intptr_t)FL_ALIGN_TOP_LEFT}
+ xywh {45 45 100 20} labelsize 9
+ }
+ MenuItem {} {
+ label top
+ user_data {(fl_intptr_t)FL_ALIGN_TOP}
+ xywh {55 55 100 20} labelsize 9
+ }
+ MenuItem {} {
+ label {top right}
+ user_data {(fl_intptr_t)FL_ALIGN_TOP_RIGHT}
+ xywh {65 65 100 20} labelsize 9
+ }
+ MenuItem {} {
+ label left
+ user_data {(fl_intptr_t)FL_ALIGN_LEFT}
+ xywh {75 75 100 20} labelsize 9
+ }
+ MenuItem {} {
+ label center
+ user_data {(fl_intptr_t)FL_ALIGN_CENTER}
+ xywh {35 35 100 20} labelsize 9
+ }
+ MenuItem {} {
+ label right
+ user_data {(fl_intptr_t)FL_ALIGN_RIGHT}
+ xywh {85 85 100 20} labelsize 9
+ }
+ MenuItem {} {
+ label {bottom left}
+ user_data {(fl_intptr_t)FL_ALIGN_BOTTOM_LEFT}
+ xywh {95 95 100 20} labelsize 9
+ }
+ MenuItem {} {
+ label bottom
+ user_data {(fl_intptr_t)FL_ALIGN_BOTTOM}
+ xywh {105 105 100 20} labelsize 9
+ }
+ MenuItem {} {
+ label {bottom right}
+ user_data {(fl_intptr_t)FL_ALIGN_BOTTOM_RIGHT}
+ xywh {115 115 100 20} labelsize 9
+ }
+ MenuItem {} {
+ label { Outside Alignment }
+ user_data {(fl_intptr_t)0xFFFFFFFF}
+ xywh {125 125 100 20} labelfont 2 labelsize 10 deactivate
+ }
+ MenuItem {} {
+ label {left top}
+ user_data {(fl_intptr_t)FL_ALIGN_LEFT_TOP}
+ xywh {135 135 100 20} labelsize 9
+ }
+ MenuItem {} {
+ label {right top}
+ user_data {(fl_intptr_t)FL_ALIGN_RIGHT_TOP}
+ xywh {145 145 100 20} labelsize 9
+ }
+ MenuItem {} {
+ label {left bottom}
+ user_data {(fl_intptr_t)FL_ALIGN_LEFT_BOTTOM}
+ xywh {155 155 100 20} labelsize 9
+ }
+ MenuItem {} {
+ label {right bottom}
+ user_data {(fl_intptr_t)FL_ALIGN_RIGHT_BOTTOM}
+ xywh {45 45 100 20} labelsize 9
+ }
+ }
+ Fl_Button {} {
+ label {@-3square}
+ user_data {(fl_intptr_t)FL_ALIGN_INSIDE}
+ callback align_cb
+ tooltip {Show the label inside the widget.} xywh {384 115 20 20} type Toggle selection_color 8 labelsize 11 labelcolor 8
+ }
+ Fl_Box {} {
+ xywh {406 115 1 20} labelsize 11 resizable
+ }
+ }
+ Fl_Group {} {
+ label {Position:}
+ callback position_group_cb open
+ xywh {95 150 314 20} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Input widget_x_input {
+ label {X:}
+ callback x_cb
+ tooltip {The X position of the widget as a number or formula.
+Formulas can be simple math, including the variables
+x, px, sx, cx, and i} xywh {95 150 55 20} labelsize 11 align 5 textsize 11
+ class Fluid_Coord_Input
+ }
+ Fl_Input widget_y_input {
+ label {Y:}
+ callback y_cb
+ tooltip {The Y position of the widget as a number or formula.
+Formulas can be simple math, including the variables
+y, py, sy, cy, and i} xywh {155 150 55 20} labelsize 11 align 5 textsize 11
+ class Fluid_Coord_Input
+ }
+ Fl_Input widget_w_input {
+ label {Width:}
+ callback w_cb
+ tooltip {The width of the widget as a number or formula.
+Formulas can be simple math, including the variables
+w, pw, sw, cw, and i} xywh {215 150 55 20} labelsize 11 align 5 textsize 11
+ class Fluid_Coord_Input
+ }
+ Fl_Input widget_h_input {
+ label {Height:}
+ callback h_cb
+ tooltip {The height of the widget as a number or formula.
+Formulas can be simple math, including the variables
+h, ph, sh, ch, and i} xywh {275 150 55 20} labelsize 11 align 5 textsize 11
+ class Fluid_Coord_Input
+ }
+ Fl_Choice {} {
+ label {Children:}
+ callback wc_relative_cb open
+ tooltip {When instantiating a widget class, the children can either be fixed in their original position, automatically be repositioned, or both repsositioned and resized to fit the container.} xywh {335 150 64 20} down_box BORDER_BOX labelsize 11 align 5 textsize 11
+ } {
+ MenuItem {} {
+ label Fixed
+ xywh {0 0 31 20} labelsize 11
+ }
+ MenuItem {} {
+ label Reposition
+ xywh {0 0 31 20} labelsize 11
+ }
+ MenuItem {} {
+ label Resize
+ xywh {0 0 31 20} labelsize 11
+ }
+ }
+ Fl_Box {} {
+ xywh {399 150 1 20} hide resizable
+ }
+ }
+ Fl_Group wp_gui_flexp {
+ label {Flex Parent:}
+ callback flex_size_group_cb
+ comment {This group is only visible if the parent is an Fl_Flex widget}
+ xywh {95 150 314 20} labelfont 1 labelsize 11 align 4 hide
+ } {
+ Fl_Value_Input widget_flex_size {
+ label {Size:}
+ callback flex_size_cb
+ tooltip {Fixed Width or Height for a horizontal or vertical Fl_Flex Parent.} xywh {95 150 55 20} labelsize 11 align 5 textsize 11
+ }
+ Fl_Check_Button widget_flex_fixed {
+ label fixed
+ callback flex_fixed_cb
+ tooltip {If checked, the size of the widget stays fixed.} xywh {155 150 55 20} down_box DOWN_BOX labelsize 11
+ }
+ Fl_Box {} {
+ xywh {398 150 1 20} resizable
+ }
+ }
+ Fl_Group wp_gui_values {
+ label {Values:}
+ callback values_group_cb open
+ xywh {95 185 300 20} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Value_Input {} {
+ label {Size:}
+ callback slider_size_cb
+ tooltip {The size of the slider.} xywh {95 185 55 20} labelsize 11 align 5 textsize 11
+ }
+ Fl_Value_Input {} {
+ label {Minimum:}
+ callback min_cb
+ tooltip {The minimum value of the widget.} xywh {155 185 55 20} labelsize 11 align 5 textsize 11
+ }
+ Fl_Value_Input {} {
+ label {Maximum:}
+ callback max_cb
+ tooltip {The maximum value of the widget.} xywh {215 185 55 20} labelsize 11 align 5 value 1 textsize 11
+ }
+ Fl_Value_Input {} {
+ label {Step:}
+ callback step_cb
+ tooltip {The resolution of the widget value.} xywh {275 185 55 20} labelsize 11 align 5 textsize 11
+ }
+ Fl_Value_Input {} {
+ label {Value:}
+ callback value_cb
+ tooltip {The current widget value.} xywh {335 185 55 20} labelsize 11 align 5 textsize 11
+ }
+ Fl_Box {} {
+ xywh {395 185 0 20} resizable
+ }
+ }
+ Fl_Group wp_gui_margins {
+ label {Margins:}
+ callback flex_margin_group_cb
+ comment {This group is only visible for Fl_Flex widgets}
+ xywh {95 185 300 20} labelfont 1 labelsize 11 align 4 hide
+ } {
+ Fl_Value_Input {} {
+ label {Left:}
+ callback flex_margin_left_cb
+ tooltip {Left margin in group.} xywh {95 185 55 20} labelsize 11 align 5 textsize 11
+ }
+ Fl_Value_Input {} {
+ label {Top:}
+ callback flex_margin_top_cb
+ tooltip {Top margin in group.} xywh {155 185 55 20} labelsize 11 align 5 textsize 11
+ }
+ Fl_Value_Input {} {
+ label {Right:}
+ callback flex_margin_right_cb
+ tooltip {Right margin in group.} xywh {215 185 55 20} labelsize 11 align 5 textsize 11
+ }
+ Fl_Value_Input {} {
+ label {Bottom:}
+ callback flex_margin_bottom_cb
+ tooltip {Bottom margin in group.} xywh {275 185 55 20} labelsize 11 align 5 textsize 11
+ }
+ Fl_Value_Input {} {
+ label {Gap:}
+ callback flex_margin_gap_cb
+ tooltip {Gap between children.} xywh {335 185 55 20} labelsize 11 align 5 textsize 11
+ }
+ Fl_Box {} {
+ xywh {395 185 0 20} resizable
+ }
+ }
+ Fl_Group wp_gui_sizerange {
+ label {Size Range:}
+ callback size_range_group_cb open
+ xywh {95 185 300 20} labelfont 1 labelsize 11 align 4 hide
+ } {
+ Fl_Value_Input {} {
+ label {Minimum Size:}
+ callback min_w_cb
+ tooltip {The size of the slider.} xywh {95 185 55 20} labelsize 11 align 5 maximum 2048 step 1 textsize 11
+ }
+ Fl_Value_Input {} {
+ callback min_h_cb
+ tooltip {The minimum value of the widget.} xywh {155 185 55 20} labelsize 11 align 5 maximum 2048 step 1 textsize 11
+ }
+ Fl_Button {} {
+ label set
+ callback set_min_size_cb
+ xywh {215 185 25 20} labelsize 11
+ }
+ Fl_Value_Input {} {
+ label {Maximum Size:}
+ callback max_w_cb
+ tooltip {The maximum value of the widget.} xywh {245 185 55 20} labelsize 11 align 5 maximum 2048 step 1 textsize 11
+ }
+ Fl_Value_Input {} {
+ callback max_h_cb
+ tooltip {The resolution of the widget value.} xywh {305 185 55 20} labelsize 11 align 5 maximum 2048 step 1 textsize 11
+ }
+ Fl_Button {} {
+ label set
+ callback set_max_size_cb
+ xywh {365 185 25 20} labelsize 11
+ }
+ Fl_Box {} {
+ xywh {395 185 0 20} resizable
+ }
+ }
+ Fl_Group {} {
+ label {Shortcut:}
+ callback propagate_load open
+ xywh {95 210 310 20} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Button wp_gui_shortcut {
+ callback shortcut_in_cb
+ comment {This is a special button that grabs keystrokes directly}
+ tooltip {The shortcut key for the widget.
+Use 'Backspace' key to clear.} xywh {95 210 310 20} box DOWN_BOX color 7 selection_color 12 labelsize 11 when 1
+ code0 {\#include <FL/Fl_Shortcut_Button.H>}
+ class Fl_Shortcut_Button
+ }
+ }
+ Fl_Group wp_gui_xclass {
+ label {X Class:}
+ callback propagate_load
+ xywh {95 235 300 20} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Input {} {
+ label {:}
+ callback xclass_cb
+ tooltip {The X resource class.} xywh {95 235 95 20} labelfont 1 labelsize 11 textsize 11 resizable
+ }
+ Fl_Light_Button {} {
+ label Border
+ callback border_cb
+ tooltip {Add a border around the window.} xywh {195 235 60 20} selection_color 1 labelsize 11
+ }
+ Fl_Light_Button {} {
+ label Modal
+ callback modal_cb
+ tooltip {Make the window modal.} xywh {260 235 55 20} selection_color 1 labelsize 11
+ }
+ Fl_Light_Button {} {
+ label Nonmodal
+ callback non_modal_cb
+ tooltip {Make the window non-modal.} xywh {320 235 75 20} selection_color 1 labelsize 11 align 148
+ }
+ }
+ Fl_Group wp_gui_attributes {
+ label {Attributes:}
+ callback propagate_load
+ xywh {95 260 305 20} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Light_Button {} {
+ label Visible
+ callback visible_cb
+ tooltip {Show the widget.} xywh {95 260 60 20} selection_color 1 labelsize 11
+ }
+ Fl_Light_Button {} {
+ label Active
+ callback active_cb
+ tooltip {Activate the widget.} xywh {160 260 60 20} selection_color 1 labelsize 11
+ }
+ Fl_Light_Button {} {
+ label Resizable
+ callback resizable_cb
+ tooltip {Make the widget resizable.} xywh {225 260 75 20} selection_color 1 labelsize 11 when 1
+ }
+ Fl_Light_Button {} {
+ label Hotspot
+ callback hotspot_cb
+ tooltip {Center the window under this widget.} xywh {305 260 70 20} selection_color 1 labelsize 11 when 1
+ }
+ Fl_Box {} {
+ xywh {395 260 0 20} labelsize 11 resizable
+ }
+ }
+ Fl_Input wp_gui_tooltip {
+ label {Tooltip:}
+ callback tooltip_cb
+ tooltip {The tooltip text for the widget.
+Use Ctrl-J for newlines.} xywh {95 285 310 20} labelfont 1 labelsize 11 textsize 11
+ }
+ Fl_Box {} {
+ xywh {95 305 300 5} hide resizable
+ }
+ }
+ Fl_Group wp_style_tab {
+ label Style
+ callback propagate_load open
+ xywh {10 30 400 330} labelsize 11 when 0 hide
+ } {
+ Fl_Group wp_style_label {
+ label {Label Font:}
+ callback propagate_load open
+ xywh {99 40 305 20} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Choice {} {
+ callback labelfont_cb open
+ tooltip {The style of the label text.} xywh {99 40 148 20} box THIN_UP_BOX down_box BORDER_BOX labelfont 1 labelsize 11 textsize 11 resizable
+ code0 {extern Fl_Menu_Item fontmenu[];}
+ code1 {o->menu(fontmenu);}
+ } {}
+ Fl_Value_Input {} {
+ callback labelsize_cb
+ tooltip {The size of the label text.} xywh {247 40 49 20} labelsize 11 maximum 100 step 1 value 14 textsize 11
+ }
+ Fl_Button w_labelcolor {
+ label {Label Color}
+ callback labelcolor_cb
+ tooltip {The color of the label text.} xywh {296 40 90 20} labelsize 11
+ }
+ Fl_Menu_Button {} {
+ callback labelcolor_menu_cb open
+ xywh {386 40 18 20}
+ code0 {extern Fl_Menu_Item colormenu[];}
+ code1 {o->menu(colormenu);}
+ } {}
+ }
+ Fl_Group wp_style_box {
+ label {Box:}
+ callback propagate_load open
+ xywh {99 65 305 20} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Choice {} {
+ callback box_cb open
+ tooltip {The "up" box of the widget.} xywh {100 65 196 20} box THIN_UP_BOX down_box BORDER_BOX labelfont 1 labelsize 11 textsize 11 resizable
+ code0 {extern Fl_Menu_Item boxmenu[];}
+ code1 {o->menu(boxmenu);}
+ } {}
+ Fl_Button w_color {
+ label Color
+ callback color_cb
+ tooltip {The background color of the widget.} xywh {296 65 90 20} labelsize 11
+ }
+ Fl_Menu_Button {} {
+ callback color_menu_cb open
+ xywh {386 65 18 20}
+ code0 {extern Fl_Menu_Item colormenu[];}
+ code1 {o->menu(colormenu);}
+ } {}
+ }
+ Fl_Group wp_style_downbox {
+ label {Down Box:}
+ callback propagate_load open
+ xywh {99 90 305 20} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Choice {} {
+ callback down_box_cb open
+ tooltip {The "down" box of the widget.} xywh {99 90 197 20} box THIN_UP_BOX down_box BORDER_BOX labelfont 1 labelsize 11 textsize 11 resizable
+ code0 {extern Fl_Menu_Item boxmenu[];}
+ code1 {o->menu(boxmenu);}
+ } {}
+ Fl_Button w_selectcolor {
+ label {Select Color}
+ callback color2_cb
+ tooltip {The selection color of the widget.} xywh {296 90 90 20} labelsize 11
+ }
+ Fl_Menu_Button {} {
+ callback color2_menu_cb open
+ xywh {386 90 18 20}
+ code0 {extern Fl_Menu_Item colormenu[];}
+ code1 {o->menu(colormenu);}
+ } {}
+ }
+ Fl_Group wp_style_text {
+ label {Text Font:}
+ callback propagate_load open
+ xywh {99 115 305 20} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Choice {} {
+ callback textfont_cb open
+ tooltip {The value text style.} xywh {99 115 148 20} box DOWN_BOX down_box BORDER_BOX labelfont 1 labelsize 11 textsize 11 resizable
+ code0 {extern Fl_Menu_Item fontmenu[];}
+ code1 {o->menu(fontmenu);}
+ } {}
+ Fl_Value_Input {} {
+ callback textsize_cb
+ tooltip {The value text size.} xywh {247 115 49 20} labelsize 11 maximum 100 step 1 value 14 textsize 11
+ }
+ Fl_Button w_textcolor {
+ label {Text Color}
+ callback textcolor_cb
+ tooltip {The value text color.} xywh {296 115 90 20} labelsize 11
+ }
+ Fl_Menu_Button {} {
+ callback textcolor_menu_cb open
+ xywh {386 115 18 20}
+ code0 {extern Fl_Menu_Item colormenu[];}
+ code1 {o->menu(colormenu);}
+ } {}
+ }
+ Fl_Group {} {
+ label {Label Margin:}
+ callback propagate_load open
+ xywh {99 150 242 20} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Value_Input {} {
+ label {Horizontal:}
+ callback h_label_margin_cb
+ tooltip {Spacing between label and the horizontally aligned side of the widget.} xywh {99 150 55 20} labelsize 11 align 5 minimum -127 maximum 128 step 1 textsize 11
+ }
+ Fl_Value_Input {} {
+ label {Vertical:}
+ callback v_label_margin_cb
+ tooltip {Spacing between label and the vertically aligned side of the widget.} xywh {159 150 55 20} labelsize 11 align 5 minimum -127 maximum 127 step 1 textsize 11
+ }
+ Fl_Value_Input {} {
+ label {Text to Image:}
+ callback image_spacing_cb
+ tooltip {Gap between label image and text in pixels} xywh {219 150 55 20} labelsize 11 align 5 maximum 255 step 1 textsize 11
+ }
+ Fl_Box {} {
+ xywh {281 150 60 20} labelsize 11 hide resizable
+ }
+ }
+ Fl_Light_Button {} {
+ label Compact
+ callback compact_cb
+ tooltip {use compact box types for closely set buttons} xywh {99 175 90 20} selection_color 1 labelsize 11
+ }
+ Fl_Box {} {
+ xywh {195 205 40 40} labelsize 11 resizable
+ }
+ }
+ Fl_Group wp_cpp_tab {
+ label {C++}
+ callback propagate_load open
+ xywh {10 30 400 330} labelsize 11 when 0 hide
+ } {
+ Fl_Group wp_cpp_class {
+ label {Class:}
+ callback propagate_load open
+ xywh {95 40 310 20} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Input {} {
+ user_data 4
+ callback subclass_cb
+ tooltip {The widget subclass.} xywh {95 40 172 20} labelfont 1 labelsize 11 textfont 4 textsize 11 resizable
+ }
+ Fl_Choice {} {
+ callback subtype_cb open
+ tooltip {The widget subtype.} xywh {267 40 138 20} box THIN_UP_BOX down_box BORDER_BOX labelsize 11 textsize 11
+ } {}
+ }
+ Fl_Group wp_cpp_name {
+ label {Name:}
+ callback propagate_load
+ xywh {95 65 310 20} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Input {} {
+ callback name_cb
+ tooltip {The name of the widget.} xywh {95 65 235 20} labelfont 1 labelsize 11 textsize 11 resizable
+ }
+ Fl_Choice {} {
+ callback name_public_member_cb open
+ tooltip {Change member access attribute.} xywh {330 65 75 20} down_box BORDER_BOX labelsize 11 when 1 textsize 11
+ } {
+ MenuItem {} {
+ label private
+ user_data 0 user_data_type long
+ xywh {0 0 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label public
+ user_data 1 user_data_type long
+ xywh {0 0 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label protected
+ user_data 2 user_data_type long
+ xywh {0 0 100 20} labelsize 11
+ }
+ }
+ Fl_Choice {} {
+ callback name_public_cb open
+ tooltip {Change widget accessibility.} xywh {330 65 75 20} down_box BORDER_BOX labelsize 11 when 1 textsize 11 hide
+ } {
+ MenuItem {} {
+ label local
+ user_data 0 user_data_type long
+ xywh {10 10 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label global
+ user_data 1 user_data_type long
+ xywh {10 10 100 20} labelsize 11
+ }
+ }
+ }
+ Fl_Input {v_input[0]} {
+ label {Extra Code:}
+ user_data 0
+ callback v_input_cb
+ tooltip {Extra initialization code for the widget.} xywh {95 90 310 20} labelfont 1 labelsize 11 textfont 4 textsize 11
+ }
+ Fl_Input {v_input[1]} {
+ user_data 1
+ callback v_input_cb
+ tooltip {Extra initialization code for the widget.} xywh {95 110 310 20} labelsize 11 textfont 4 textsize 11
+ }
+ Fl_Input {v_input[2]} {
+ user_data 2
+ callback v_input_cb
+ tooltip {Extra initialization code for the widget.} xywh {95 130 310 20} labelsize 11 textfont 4 textsize 11
+ }
+ Fl_Input {v_input[3]} {
+ user_data 3
+ callback v_input_cb
+ tooltip {Extra initialization code for the widget.} xywh {95 150 310 20} labelsize 11 textfont 4 textsize 11
+ }
+ Fl_Tile {} {
+ callback {wComment->do_callback(wComment, v);
+wCallback->do_callback(wCallback, v);} open
+ xywh {95 175 310 130} resizable
+ } {
+ Fl_Group {} {open
+ xywh {95 175 310 48} box FLAT_BOX
+ } {
+ Fl_Text_Editor wComment {
+ label {Comment:}
+ tooltip {Write a comment that will appear in the source code and in the widget tree overview.} xywh {95 175 310 45} box DOWN_BOX labelfont 1 labelsize 11 align 4 when 1 textfont 6 textsize 11 textcolor 59 resizable
+ code0 {wComment->buffer(new Fl_Text_Buffer());}
+ code1 {wComment->callback((Fl_Callback*)comment_cb);}
+ }
+ }
+ Fl_Group {} {open
+ xywh {95 223 310 82} box FLAT_BOX
+ } {
+ Fl_Text_Editor wCallback {
+ label {Callback:}
+ callback callback_cb
+ 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.} xywh {95 225 310 80} box DOWN_BOX labelfont 1 labelsize 11 align 4 textfont 4 textsize 11 resizable
+ code0 {\#include "widgets/CodeEditor.h"}
+ class CodeEditor
+ }
+ }
+ }
+ Fl_Group wp_cpp_callback {
+ label {User Data:}
+ callback propagate_load open
+ xywh {95 310 310 20} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Input {} {
+ callback user_data_cb
+ tooltip {The user data to pass into the callback code.} xywh {95 310 158 20} labelfont 1 labelsize 11 textfont 4 textsize 11 resizable
+ }
+ Fl_Menu_Button {} {
+ label When
+ callback when_cb open
+ tooltip {When to call the callback function.} xywh {260 310 145 20} box THIN_UP_BOX down_box BORDER_BOX labelfont 1 labelsize 11 when 1 textsize 11
+ code0 {extern Fl_Menu_Item whenmenu[];}
+ code1 {o->menu(whenmenu);}
+ } {}
+ }
+ Fl_Group {} {
+ label {Type:}
+ callback propagate_load open
+ xywh {95 332 310 26} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Input_Choice {} {
+ callback user_data_type_cb open
+ tooltip {The type of the user data.} xywh {95 335 158 20} labelfont 1 labelsize 11 textfont 4 textsize 11 resizable
+ } {
+ MenuItem {} {
+ label {void*}
+ xywh {0 0 31 20} labelfont 4 labelsize 11
+ }
+ MenuItem {} {
+ label long
+ xywh {0 0 31 20} labelfont 4 labelsize 11
+ }
+ }
+ Fl_Box w_when_box {
+ label FL_WHEN_NEVER
+ xywh {260 332 145 26} box FLAT_BOX selection_color 1 labelsize 8 align 209
+ }
+ }
+ }
+ Fl_Group widget_tab_grid_child {
+ label {Grid Child}
+ callback propagate_load open
+ xywh {10 30 400 330} labelsize 11 hide
+ } {
+ Fl_Group {} {
+ label {Location:}
+ callback propagate_load open
+ xywh {95 60 315 20} box FLAT_BOX labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Input widget_grid_row_input {
+ label {Row:}
+ callback grid_set_row_cb
+ xywh {95 60 40 20} labelsize 11 align 5 textsize 11
+ class Fluid_Coord_Input
+ }
+ Fl_Group {} {open
+ xywh {135 60 30 20}
+ } {
+ Fl_Button {} {
+ label {-}
+ callback grid_dec_row_cb
+ xywh {135 60 15 20} labelsize 11
+ code0 {o->clear_visible_focus();} compact 1
+ }
+ Fl_Button {} {
+ label {+}
+ callback grid_inc_row_cb
+ xywh {150 60 15 20} labelsize 11
+ code0 {o->clear_visible_focus();} compact 1
+ }
+ }
+ Fl_Input widget_grid_col_input {
+ label {Column:}
+ callback grid_set_col_cb
+ xywh {175 60 40 20} labelsize 11 align 5 textsize 11
+ class Fluid_Coord_Input
+ }
+ Fl_Group {} {open
+ xywh {215 60 30 20}
+ } {
+ Fl_Button {} {
+ label {-}
+ callback grid_dec_col_cb
+ xywh {215 60 15 20} labelsize 11
+ code0 {o->clear_visible_focus();} compact 1
+ }
+ Fl_Button {} {
+ label {+}
+ callback grid_inc_col_cb
+ xywh {230 60 15 20} labelsize 11
+ code0 {o->clear_visible_focus();} compact 1
+ }
+ }
+ Fl_Box {} {
+ xywh {395 60 1 20} hide resizable
+ }
+ Fl_Box widget_grid_transient {
+ label TRANSIENT
+ callback {if (v==LOAD) {
+ Fl_Widget *child = ((Fl_Widget_Type*)current_widget)->o;
+ Fl_Grid_Proxy *g = ((Fl_Grid_Proxy*)((Fl_Widget_Type*)current_widget->parent)->o);
+// Fl_Grid::Cell *cell = g->cell(child);
+// Fl_Grid::Cell *tcell = g->transient_cell(child);
+ widget_grid_transient->hide();
+ widget_grid_unlinked->hide();
+ if (g->transient_cell(child)) {
+ widget_grid_transient->show();
+ } else if (!g->cell(child)) {
+ widget_grid_unlinked->show();
+ }
+}}
+ xywh {250 60 80 20} labelsize 11 labelcolor 1
+ }
+ Fl_Box widget_grid_unlinked {
+ label UNLINKED
+ xywh {250 60 80 20} labelsize 11 labelcolor 1 hide
+ }
+ }
+ Fl_Group wp_gridc_align {
+ label {Align:}
+ callback propagate_load open
+ xywh {95 100 315 20} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Choice {} {
+ label Horizontal
+ callback grid_align_horizontal_cb open
+ xywh {95 100 115 20} down_box BORDER_BOX labelsize 11 align 5 textsize 11
+ } {
+ MenuItem GRID_LEFT {
+ label GRID_LEFT
+ user_data {(fl_intptr_t)FL_GRID_LEFT} user_data_type long
+ xywh {10 10 31 20} labelsize 11
+ }
+ MenuItem {} {
+ label GRID_CENTER
+ user_data {(fl_intptr_t)FL_GRID_CENTER} user_data_type long
+ xywh {10 10 31 20} labelsize 11
+ }
+ MenuItem {} {
+ label GRID_RIGHT
+ user_data {(fl_intptr_t)FL_GRID_RIGHT} user_data_type long
+ xywh {10 10 31 20} labelsize 11
+ }
+ MenuItem {} {
+ label GRID_FILL
+ user_data {(fl_intptr_t)FL_GRID_HORIZONTAL} user_data_type long
+ xywh {10 10 31 20} labelsize 11
+ }
+ }
+ Fl_Choice {} {
+ label Vertical
+ callback grid_align_vertical_cb open
+ xywh {215 100 115 20} down_box BORDER_BOX labelsize 11 align 5 textsize 11
+ } {
+ MenuItem {} {
+ label GRID_TOP
+ user_data {(fl_intptr_t)FL_GRID_TOP} user_data_type long
+ xywh {10 10 31 20} labelsize 11
+ }
+ MenuItem {} {
+ label GRID_CENTER
+ user_data {(fl_intptr_t)FL_GRID_CENTER} user_data_type long
+ xywh {10 10 31 20} labelsize 11
+ }
+ MenuItem {} {
+ label GRID_BOTTOM
+ user_data {(fl_intptr_t)FL_GRID_BOTTOM} user_data_type long
+ xywh {10 10 31 20} labelsize 11
+ }
+ MenuItem {} {
+ label GRID_FILL
+ user_data {(fl_intptr_t)FL_GRID_VERTICAL} user_data_type long
+ xywh {10 10 31 20} labelsize 11
+ }
+ }
+ Fl_Box {} {
+ xywh {395 100 1 20} hide resizable
+ }
+ }
+ Fl_Group wp_gridc_size {
+ label {Min. Size:}
+ callback propagate_load open
+ xywh {95 135 315 20} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Input {} {
+ label {Width:}
+ callback grid_set_min_wdt_cb
+ xywh {95 135 55 20} labelsize 11 align 5 textsize 11
+ class Fluid_Coord_Input
+ }
+ Fl_Input {} {
+ label {Height:}
+ callback grid_set_min_hgt_cb
+ xywh {155 135 55 20} labelsize 11 align 5 textsize 11
+ class Fluid_Coord_Input
+ }
+ Fl_Box {} {
+ xywh {395 135 1 20} hide resizable
+ }
+ }
+ Fl_Group {} {
+ label {Span:}
+ callback propagate_load open
+ xywh {95 170 315 20} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Input widget_grid_rowspan_input {
+ label {Row Span:}
+ callback grid_set_rowspan_cb
+ xywh {95 170 40 20} labelsize 11 align 5 textsize 11
+ class Fluid_Coord_Input
+ }
+ Fl_Group {} {open
+ xywh {135 170 30 20}
+ } {
+ Fl_Button {} {
+ label {-}
+ callback grid_dec_rowspan_cb
+ xywh {135 170 15 20} labelsize 11
+ code0 {o->clear_visible_focus();} compact 1
+ }
+ Fl_Button {} {
+ label {+}
+ callback grid_inc_rowspan_cb
+ xywh {150 170 15 20} labelsize 11
+ code0 {o->clear_visible_focus();} compact 1
+ }
+ }
+ Fl_Input widget_grid_colspan_input {
+ label {Col. Span:}
+ callback grid_set_colspan_cb
+ xywh {175 170 40 20} labelsize 11 align 5 textsize 11
+ class Fluid_Coord_Input
+ }
+ Fl_Group {} {open
+ xywh {215 170 30 20}
+ } {
+ Fl_Button {} {
+ label {-}
+ callback grid_dec_colspan_cb
+ xywh {215 170 15 20} labelsize 11
+ code0 {o->clear_visible_focus();} compact 1
+ }
+ Fl_Button {} {
+ label {+}
+ callback grid_inc_colspan_cb
+ xywh {230 170 15 20} labelsize 11
+ code0 {o->clear_visible_focus();} compact 1
+ }
+ }
+ Fl_Box {} {
+ xywh {395 170 1 20} hide resizable
+ }
+ }
+ Fl_Box {} {
+ xywh {95 350 300 5} labelsize 11 hide resizable
+ }
+ }
+ Fl_Group widget_tab_grid {
+ label Grid
+ callback propagate_load open
+ xywh {10 30 400 330} labelsize 11 hide
+ } {
+ Fl_Group {} {
+ label {Grid Layout:}
+ callback propagate_load open
+ xywh {95 60 315 20} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Input widget_grid_rows {
+ label {Rows:}
+ callback {// grid_rows_cb
+Fl_Grid *grid = Fl_Grid_Type::selected();
+if (!grid) return;
+if (v == LOAD) {
+ o->value(grid->rows());
+} else {
+ int m = o->value(), old_m = grid->rows();
+ if (m < 1) {
+ m = 1;
+ o->value(m);
+ }
+ if (m < old_m) {
+ // TODO: verify that this will not unlink existings cells
+ // Offer a dialog with "delete children", "unlink cells", "cancel"
+ }
+ if (m != old_m) {
+ undo_checkpoint();
+ grid->layout(m, grid->cols());
+ grid->need_layout(true);
+ set_modflag(1);
+ widget_tab_grid->do_callback(widget_tab_grid, LOAD);
+ }
+}}
+ tooltip {Number of horizontal rows in the Grid group} xywh {95 60 40 20} labelsize 11 align 5 textsize 11
+ class Fluid_Coord_Input
+ }
+ Fl_Group {} {open
+ xywh {135 60 30 20}
+ } {
+ Fl_Button {} {
+ label {-}
+ callback {if (v != LOAD) {
+ widget_grid_rows->value( widget_grid_rows->value()-1 );
+ widget_grid_rows->do_callback();
+}}
+ xywh {135 60 15 20} labelsize 11
+ code0 {o->clear_visible_focus();} compact 1
+ }
+ Fl_Button {} {
+ label {+}
+ callback {if (v != LOAD) {
+ widget_grid_rows->value( widget_grid_rows->value()+1 );
+ widget_grid_rows->do_callback();
+}}
+ xywh {150 60 15 20} labelsize 11
+ code0 {o->clear_visible_focus();} compact 1
+ }
+ }
+ Fl_Input widget_grid_cols {
+ label {Columns:}
+ callback {// grid_rows_cb
+Fl_Grid *grid = Fl_Grid_Type::selected();
+if (!grid) return;
+if (v == LOAD) {
+ o->value(grid->cols());
+} else {
+ int m = o->value(), old_m = grid->cols();
+ if (m < 1) {
+ m = 1;
+ o->value(m);
+ }
+ if (m < old_m) {
+ // TODO: verify that this will not unlink existings cells
+ // Offer a dialog with "delete children", "unlink cells", "cancel"
+ }
+ if (m != old_m) {
+ undo_checkpoint();
+ grid->layout(grid->rows(), m);
+ grid->need_layout(true);
+ set_modflag(1);
+ widget_tab_grid->do_callback(widget_tab_grid, LOAD);
+ }
+}}
+ tooltip {Number of vertical columns in the Grid group} xywh {175 60 40 20} labelsize 11 align 5 textsize 11
+ class Fluid_Coord_Input
+ }
+ Fl_Group {} {open
+ xywh {215 60 30 20}
+ } {
+ Fl_Button {} {
+ label {-}
+ callback {if (v != LOAD) {
+ widget_grid_cols->value( widget_grid_cols->value()-1 );
+ widget_grid_cols->do_callback();
+}}
+ xywh {215 60 15 20} labelsize 11
+ code0 {o->clear_visible_focus();} compact 1
+ }
+ Fl_Button {} {
+ label {+}
+ callback {if (v != LOAD) {
+ widget_grid_cols->value( widget_grid_cols->value()+1 );
+ widget_grid_cols->do_callback();
+}}
+ xywh {230 60 15 20} labelsize 11
+ code0 {o->clear_visible_focus();} compact 1
+ }
+ }
+ Fl_Box {} {
+ xywh {396 60 0 20} resizable
+ }
+ }
+ Fl_Group wp_grid_margin {
+ label {Margins:}
+ callback propagate_load open
+ xywh {95 100 315 20} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Value_Input {} {
+ label {Left:}
+ callback {Fl_Grid *grid = Fl_Grid_Type::selected();
+if (!grid) return;
+int m = 0;
+if (v == LOAD) {
+ grid->margin(&m, NULL, NULL, NULL);
+ o->value(m);
+} else {
+ int m = (int)o->value(), old_m;
+ grid->margin(&old_m, NULL, NULL, NULL);
+ if (m != old_m) {
+ undo_checkpoint();
+ grid->margin(m, -1, -1, -1);
+ grid->need_layout(true);
+ set_modflag(1);
+ }
+}}
+ tooltip {Left margin in group.} xywh {95 100 55 20} labelsize 11 align 5 maximum 1000 step 1 textsize 11
+ }
+ Fl_Value_Input {} {
+ label {Top:}
+ callback {Fl_Grid *grid = Fl_Grid_Type::selected();
+if (!grid) return;
+int m = 0;
+if (v == LOAD) {
+ grid->margin(NULL, &m, NULL, NULL);
+ o->value(m);
+} else {
+ int m = (int)o->value(), old_m;
+ grid->margin(NULL, &old_m, NULL, NULL);
+ if (m != old_m) {
+ undo_checkpoint();
+ grid->margin(-1, m, -1, -1);
+ grid->need_layout(true);
+ set_modflag(1);
+ }
+}}
+ tooltip {Top margin in group.} xywh {155 100 55 20} labelsize 11 align 5 maximum 1000 step 1 textsize 11
+ }
+ Fl_Value_Input {} {
+ label {Right:}
+ callback {Fl_Grid *grid = Fl_Grid_Type::selected();
+if (!grid) return;
+int m = 0;
+if (v == LOAD) {
+ grid->margin(NULL, NULL, &m, NULL);
+ o->value(m);
+} else {
+ int m = (int)o->value(), old_m;
+ grid->margin(NULL, NULL, &old_m, NULL);
+ if (m != old_m) {
+ undo_checkpoint();
+ grid->margin(-1, -1, m, -1);
+ grid->need_layout(true);
+ set_modflag(1);
+ }
+}}
+ tooltip {Right margin in group.} xywh {215 100 55 20} labelsize 11 align 5 maximum 1000 step 1 textsize 11
+ }
+ Fl_Value_Input {} {
+ label {Bottom:}
+ callback {Fl_Grid *grid = Fl_Grid_Type::selected();
+if (!grid) return;
+int m = 0;
+if (v == LOAD) {
+ grid->margin(NULL, NULL, NULL, &m);
+ o->value(m);
+} else {
+ int m = (int)o->value(), old_m;
+ grid->margin(NULL, NULL, NULL, &old_m);
+ if (m != old_m) {
+ undo_checkpoint();
+ grid->margin(-1, -1, -1, m);
+ grid->need_layout(true);
+ set_modflag(1);
+ }
+}}
+ tooltip {Bottom margin in group.} xywh {275 100 55 20} labelsize 11 align 5 maximum 1000 step 1 textsize 11
+ }
+ Fl_Box {} {
+ xywh {396 100 0 20} resizable
+ }
+ }
+ Fl_Group wp_grid_gaps {
+ label {Gaps:}
+ callback propagate_load open
+ xywh {95 135 315 20} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Value_Input {} {
+ label {Row:}
+ callback {Fl_Grid *grid = Fl_Grid_Type::selected();
+if (!grid) return;
+if (v == LOAD) {
+ int m = 0;
+ grid->gap(&m, NULL);
+ o->value(m);
+} else {
+ int m = (int)o->value(), old_m, m2;
+ grid->gap(&old_m, &m2);
+ if (m != old_m) {
+ undo_checkpoint();
+ grid->gap(m, m2);
+ grid->need_layout(true);
+ set_modflag(1);
+ }
+}}
+ tooltip {Gap between children.} xywh {95 135 55 20} labelsize 11 align 5 maximum 1000 step 1 textsize 11
+ }
+ Fl_Value_Input {} {
+ label {Col:}
+ callback {Fl_Grid *grid = Fl_Grid_Type::selected();
+if (!grid) return;
+if (v == LOAD) {
+ int m = 0;
+ grid->gap(NULL, &m);
+ o->value(m);
+} else {
+ int m = (int)o->value(), old_m, m2;
+ grid->gap(&m2, &old_m);
+ if (m != old_m) {
+ undo_checkpoint();
+ grid->gap(m2, m);
+ grid->need_layout(true);
+ set_modflag(1);
+ }
+}}
+ tooltip {Gap between children.} xywh {155 135 55 20} labelsize 11 align 5 maximum 1000 step 1 textsize 11
+ }
+ Fl_Box {} {
+ xywh {396 135 0 20} resizable
+ }
+ }
+ Fl_Group {} {
+ label {Row:}
+ callback {if (v == LOAD) {
+ Fl_Grid *grid = Fl_Grid_Type::selected();
+ if (grid)
+ o->activate();
+ else
+ o->deactivate();
+ propagate_load(o, v);
+}} open
+ xywh {95 175 315 20} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Input widget_grid_curr_row {
+ label Index
+ callback {Fl_Grid *grid = Fl_Grid_Type::selected();
+if (!grid) return;
+int r = o->value(), old_r = r;
+if (r < 0) r = 0;
+if (r >= grid->rows()) r = grid->rows()-1;
+if (r != old_r) o->value(r);
+if (v == LOAD) {
+ // will automatically propagate
+} else {
+ widget_grid_curr_row_attributes->do_callback(widget_grid_curr_row_attributes, LOAD);
+}}
+ xywh {95 175 40 20} labelsize 11 align 5 textsize 11
+ class Fluid_Coord_Input
+ }
+ Fl_Group {} {
+ callback propagate_load open
+ xywh {135 175 30 20}
+ } {
+ Fl_Button {} {
+ label {-}
+ callback {if (v != LOAD) {
+ widget_grid_curr_row->value( widget_grid_curr_row->value()-1 );
+ widget_grid_curr_row->do_callback();
+}}
+ xywh {135 175 15 20} labelsize 11
+ code0 {o->clear_visible_focus();} compact 1
+ }
+ Fl_Button {} {
+ label {+}
+ callback {if (v != LOAD) {
+ widget_grid_curr_row->value( widget_grid_curr_row->value()+1 );
+ widget_grid_curr_row->do_callback();
+}}
+ xywh {150 175 15 20} labelsize 11
+ code0 {o->clear_visible_focus();} compact 1
+ }
+ }
+ Fl_Box {} {
+ label {:}
+ xywh {165 175 15 20} labelsize 11
+ }
+ Fl_Group widget_grid_curr_row_attributes {
+ callback propagate_load open
+ xywh {180 175 175 20}
+ } {
+ Fl_Input {} {
+ label {Height:}
+ callback {Fl_Grid *grid = Fl_Grid_Type::selected();
+if (!grid) return;
+int r = widget_grid_curr_row->value();
+if (v == LOAD) {
+ o->value(grid->row_height(r));
+} else {
+ int h = o->value(), old_h = grid->row_height(r);
+ if (h < 0) h = 0;
+ if (h != old_h) {
+ undo_checkpoint();
+ grid->row_height(r, h);
+ grid->need_layout(true);
+ set_modflag(1);
+ }
+}}
+ xywh {180 175 55 20} labelsize 11 align 5 textsize 11
+ class Fluid_Coord_Input
+ }
+ Fl_Input {} {
+ label {Weight:}
+ callback {Fl_Grid *grid = Fl_Grid_Type::selected();
+if (!grid) return;
+int r = widget_grid_curr_row->value();
+if (v == LOAD) {
+ o->value(grid->row_weight(r));
+} else {
+ int h = o->value(), old_h = grid->row_weight(r);
+ if (h < 0) h = 0;
+ if (h != old_h) {
+ undo_checkpoint();
+ grid->row_weight(r, h);
+ grid->need_layout(true);
+ set_modflag(1);
+ }
+}}
+ xywh {240 175 55 20} labelsize 11 align 5 textsize 11
+ class Fluid_Coord_Input
+ }
+ Fl_Input {} {
+ label {Gap:}
+ callback {Fl_Grid *grid = Fl_Grid_Type::selected();
+if (!grid) return;
+int r = widget_grid_curr_row->value();
+if (v == LOAD) {
+ o->value(grid->row_gap(r));
+} else {
+ int h = o->value(), old_h = grid->row_gap(r);
+ if (h < -1) h = -1;
+ if (h != old_h) {
+ undo_checkpoint();
+ grid->row_gap(r, h);
+ grid->need_layout(true);
+ set_modflag(1);
+ }
+}}
+ xywh {300 175 55 20} labelsize 11 align 5 textsize 11
+ class Fluid_Coord_Input
+ }
+ }
+ Fl_Box {} {
+ xywh {400 175 1 20} hide resizable
+ }
+ }
+ Fl_Group {} {
+ label {Column:}
+ callback propagate_load open
+ xywh {95 210 315 20} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Input widget_grid_curr_col {
+ label Index
+ callback {Fl_Grid *grid = Fl_Grid_Type::selected();
+if (!grid) return;
+int c = o->value(), old_c = c;
+if (c < 0) c = 0;
+if (c >= grid->cols()) c = grid->cols()-1;
+if (c != old_c) o->value(c);
+if (v == LOAD) {
+ // will automatically propagate
+} else {
+ widget_grid_curr_col_attributes->do_callback(widget_grid_curr_col_attributes, LOAD);
+}}
+ xywh {95 210 40 20} labelsize 11 align 5 textsize 11
+ class Fluid_Coord_Input
+ }
+ Fl_Group {} {open
+ xywh {135 210 30 20}
+ } {
+ Fl_Button {} {
+ label {-}
+ callback {if (v != LOAD) {
+ widget_grid_curr_col->value( widget_grid_curr_col->value()-1 );
+ widget_grid_curr_col->do_callback();
+}}
+ xywh {135 210 15 20} labelsize 11
+ code0 {o->clear_visible_focus();} compact 1
+ }
+ Fl_Button {} {
+ label {+}
+ callback {if (v != LOAD) {
+ widget_grid_curr_col->value( widget_grid_curr_col->value()+1 );
+ widget_grid_curr_col->do_callback();
+}}
+ xywh {150 210 15 20} labelsize 11
+ code0 {o->clear_visible_focus();} compact 1
+ }
+ }
+ Fl_Box {} {
+ label {:}
+ xywh {165 210 15 20} labelsize 11
+ }
+ Fl_Group widget_grid_curr_col_attributes {
+ callback propagate_load open
+ xywh {180 210 175 20}
+ } {
+ Fl_Input {} {
+ label {Width:}
+ callback {Fl_Grid *grid = Fl_Grid_Type::selected();
+if (!grid) return;
+int c = widget_grid_curr_col->value();
+if (v == LOAD) {
+ o->value(grid->col_width(c));
+} else {
+ int h = o->value(), old_h = grid->col_width(c);
+ if (h < 0) h = 0;
+ if (h != old_h) {
+ undo_checkpoint();
+ grid->col_width(c, h);
+ grid->need_layout(true);
+ set_modflag(1);
+ }
+}}
+ xywh {180 210 55 20} labelsize 11 align 5 textsize 11
+ class Fluid_Coord_Input
+ }
+ Fl_Input {} {
+ label {Weight:}
+ callback {Fl_Grid *grid = Fl_Grid_Type::selected();
+if (!grid) return;
+int c = widget_grid_curr_col->value();
+if (v == LOAD) {
+ o->value(grid->col_weight(c));
+} else {
+ int h = o->value(), old_h = grid->col_weight(c);
+ if (h < 0) h = 0;
+ if (h != old_h) {
+ undo_checkpoint();
+ grid->col_weight(c, h);
+ grid->need_layout(true);
+ set_modflag(1);
+ }
+}}
+ xywh {240 210 55 20} labelsize 11 align 5 textsize 11
+ class Fluid_Coord_Input
+ }
+ Fl_Input {} {
+ label {Gap:}
+ callback {Fl_Grid *grid = Fl_Grid_Type::selected();
+if (!grid) return;
+int c = widget_grid_curr_col->value();
+if (v == LOAD) {
+ o->value(grid->col_gap(c));
+} else {
+ int h = o->value(), old_h = grid->col_gap(c);
+ if (h < -1) h = -1;
+ if (h != old_h) {
+ undo_checkpoint();
+ grid->col_gap(c, h);
+ grid->need_layout(true);
+ set_modflag(1);
+ }
+}}
+ xywh {300 210 55 20} labelsize 11 align 5 textsize 11
+ class Fluid_Coord_Input
+ }
+ }
+ Fl_Box {} {
+ xywh {400 210 1 20} hide resizable
+ }
+ }
+ Fl_Box {} {
+ xywh {95 350 300 5} labelsize 11 hide resizable
+ }
+ }
+ }
+ Fl_Tabs widget_tabs_repo {
+ xywh {10 10 400 350} hide
+ code0 {o->hide();}
+ } {
+ Fl_Group {} {open
+ xywh {10 30 400 330} resizable
+ } {}
+ }
+ Fl_Group {} {
+ xywh {10 370 400 20} labelsize 11
+ } {
+ Fl_Button wLiveMode {
+ label {Live &Resize}
+ callback live_mode_cb
+ tooltip {Create a live duplicate of the selected widgets to test resizing and menu behavior.} xywh {10 370 80 20} type Toggle labelsize 10
+ }
+ Fl_Button overlay_button {
+ label {Hide &Overlays}
+ callback overlay_cb
+ tooltip {Hide the widget overlay box.} xywh {94 370 80 20} labelsize 10
+ }
+ Fl_Box {} {
+ comment {Hidden resizable box}
+ xywh {258 370 72 20} labelsize 11 hide resizable
+ }
+ Fl_Return_Button {} {
+ label Close
+ callback ok_cb
+ xywh {330 370 80 20} labelsize 11
+ }
+ }
+ }
+}
diff --git a/fluid/panels/widget_panel.h b/fluid/panels/widget_panel.h
new file mode 100644
index 000000000..de827464e
--- /dev/null
+++ b/fluid/panels/widget_panel.h
@@ -0,0 +1,225 @@
+//
+// 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
+
+#ifndef widget_panel_h
+#define widget_panel_h
+#include <FL/Fl.H>
+#include "widgets/custom_widgets.h"
+#include <FL/Fl_Double_Window.H>
+extern Fl_Double_Window *image_panel_window;
+#include <FL/Fl_Group.H>
+extern void propagate_load(Fl_Group*, void*);
+extern Fl_Group *image_panel_imagegroup;
+#include <FL/Fl_Box.H>
+#include <FL/Fl_Shared_Image.H>
+extern Fl_Box *image_panel_data;
+extern Fluid_Coord_Input *image_panel_imagew;
+extern Fluid_Coord_Input *image_panel_imageh;
+#include <FL/Fl_Button.H>
+#include <FL/Fl_Check_Button.H>
+extern void compress_image_cb(Fl_Check_Button*, void*);
+extern void bind_image_cb(Fl_Check_Button*, void*);
+extern Fl_Group *image_panel_deimagegroup;
+extern Fl_Box *image_panel_dedata;
+extern Fluid_Coord_Input *image_panel_deimagew;
+extern Fluid_Coord_Input *image_panel_deimageh;
+extern void compress_deimage_cb(Fl_Check_Button*, void*);
+extern void bind_deimage_cb(Fl_Check_Button*, void*);
+extern Fl_Button *image_panel_close;
+Fl_Double_Window* make_image_panel();
+void run_image_panel();
+#include <FL/Fl_Tabs.H>
+extern Fl_Tabs *widget_tabs;
+extern Fl_Group *wp_gui_tab;
+#include <FL/Fl_Input.H>
+extern void label_cb(Fl_Input*, void*);
+extern Fl_Input *wp_gui_label;
+#include <FL/Fl_Choice.H>
+extern Fl_Menu_Item labeltypemenu[];
+extern void labeltype_cb(Fl_Choice*, void*);
+extern void image_cb(Fl_Input*, void*);
+extern Fl_Input *widget_image_input;
+extern void image_browse_cb(Fl_Button*, void*);
+extern void inactive_cb(Fl_Input*, void*);
+extern Fl_Input *widget_deimage_input;
+extern void inactive_browse_cb(Fl_Button*, void*);
+extern Fl_Group *wp_gui_alignment;
+extern void align_cb(Fl_Button*, void*);
+extern void align_text_image_cb(Fl_Choice*, void*);
+extern void align_position_cb(Fl_Choice*, void*);
+extern void position_group_cb(Fl_Group*, void*);
+extern void x_cb(Fluid_Coord_Input*, void*);
+extern Fluid_Coord_Input *widget_x_input;
+extern void y_cb(Fluid_Coord_Input*, void*);
+extern Fluid_Coord_Input *widget_y_input;
+extern void w_cb(Fluid_Coord_Input*, void*);
+extern Fluid_Coord_Input *widget_w_input;
+extern void h_cb(Fluid_Coord_Input*, void*);
+extern Fluid_Coord_Input *widget_h_input;
+extern void wc_relative_cb(Fl_Choice*, void*);
+extern void flex_size_group_cb(Fl_Group*, void*);
+extern Fl_Group *wp_gui_flexp;
+#include <FL/Fl_Value_Input.H>
+extern void flex_size_cb(Fl_Value_Input*, void*);
+extern Fl_Value_Input *widget_flex_size;
+extern void flex_fixed_cb(Fl_Check_Button*, void*);
+extern Fl_Check_Button *widget_flex_fixed;
+extern void values_group_cb(Fl_Group*, void*);
+extern Fl_Group *wp_gui_values;
+extern void slider_size_cb(Fl_Value_Input*, void*);
+extern void min_cb(Fl_Value_Input*, void*);
+extern void max_cb(Fl_Value_Input*, void*);
+extern void step_cb(Fl_Value_Input*, void*);
+extern void value_cb(Fl_Value_Input*, void*);
+extern void flex_margin_group_cb(Fl_Group*, void*);
+extern Fl_Group *wp_gui_margins;
+extern void flex_margin_left_cb(Fl_Value_Input*, void*);
+extern void flex_margin_top_cb(Fl_Value_Input*, void*);
+extern void flex_margin_right_cb(Fl_Value_Input*, void*);
+extern void flex_margin_bottom_cb(Fl_Value_Input*, void*);
+extern void flex_margin_gap_cb(Fl_Value_Input*, void*);
+extern void size_range_group_cb(Fl_Group*, void*);
+extern Fl_Group *wp_gui_sizerange;
+extern void min_w_cb(Fl_Value_Input*, void*);
+extern void min_h_cb(Fl_Value_Input*, void*);
+extern void set_min_size_cb(Fl_Button*, void*);
+extern void max_w_cb(Fl_Value_Input*, void*);
+extern void max_h_cb(Fl_Value_Input*, void*);
+extern void set_max_size_cb(Fl_Button*, void*);
+#include <FL/Fl_Shortcut_Button.H>
+extern void shortcut_in_cb(Fl_Shortcut_Button*, void*);
+extern Fl_Shortcut_Button *wp_gui_shortcut;
+extern Fl_Group *wp_gui_xclass;
+extern void xclass_cb(Fl_Input*, void*);
+#include <FL/Fl_Light_Button.H>
+extern void border_cb(Fl_Light_Button*, void*);
+extern void modal_cb(Fl_Light_Button*, void*);
+extern void non_modal_cb(Fl_Light_Button*, void*);
+extern Fl_Group *wp_gui_attributes;
+extern void visible_cb(Fl_Light_Button*, void*);
+extern void active_cb(Fl_Light_Button*, void*);
+extern void resizable_cb(Fl_Light_Button*, void*);
+extern void hotspot_cb(Fl_Light_Button*, void*);
+extern void tooltip_cb(Fl_Input*, void*);
+extern Fl_Input *wp_gui_tooltip;
+extern Fl_Group *wp_style_tab;
+extern Fl_Group *wp_style_label;
+extern Fl_Menu_Item fontmenu[];
+extern void labelfont_cb(Fl_Choice*, void*);
+extern void labelsize_cb(Fl_Value_Input*, void*);
+extern void labelcolor_cb(Fl_Button*, void*);
+extern Fl_Button *w_labelcolor;
+#include <FL/Fl_Menu_Button.H>
+extern Fl_Menu_Item colormenu[];
+extern void labelcolor_menu_cb(Fl_Menu_Button*, void*);
+extern Fl_Group *wp_style_box;
+extern Fl_Menu_Item boxmenu[];
+extern void box_cb(Fl_Choice*, void*);
+extern void color_cb(Fl_Button*, void*);
+extern Fl_Button *w_color;
+extern void color_menu_cb(Fl_Menu_Button*, void*);
+extern Fl_Group *wp_style_downbox;
+extern void down_box_cb(Fl_Choice*, void*);
+extern void color2_cb(Fl_Button*, void*);
+extern Fl_Button *w_selectcolor;
+extern void color2_menu_cb(Fl_Menu_Button*, void*);
+extern Fl_Group *wp_style_text;
+extern void textfont_cb(Fl_Choice*, void*);
+extern void textsize_cb(Fl_Value_Input*, void*);
+extern void textcolor_cb(Fl_Button*, void*);
+extern Fl_Button *w_textcolor;
+extern void textcolor_menu_cb(Fl_Menu_Button*, void*);
+extern void h_label_margin_cb(Fl_Value_Input*, void*);
+extern void v_label_margin_cb(Fl_Value_Input*, void*);
+extern void image_spacing_cb(Fl_Value_Input*, void*);
+extern void compact_cb(Fl_Light_Button*, void*);
+extern Fl_Group *wp_cpp_tab;
+extern Fl_Group *wp_cpp_class;
+extern void subclass_cb(Fl_Input*, void*);
+extern void subtype_cb(Fl_Choice*, void*);
+extern Fl_Group *wp_cpp_name;
+extern void name_cb(Fl_Input*, void*);
+extern void name_public_member_cb(Fl_Choice*, void*);
+extern void name_public_cb(Fl_Choice*, void*);
+extern void v_input_cb(Fl_Input*, void*);
+extern Fl_Input *v_input[4];
+#include <FL/Fl_Tile.H>
+#include <FL/Fl_Text_Editor.H>
+extern Fl_Text_Editor *wComment;
+#include "widgets/CodeEditor.h"
+extern void callback_cb(CodeEditor*, void*);
+extern CodeEditor *wCallback;
+extern Fl_Group *wp_cpp_callback;
+extern void user_data_cb(Fl_Input*, void*);
+extern Fl_Menu_Item whenmenu[];
+extern void when_cb(Fl_Menu_Button*, void*);
+#include <FL/Fl_Input_Choice.H>
+extern void user_data_type_cb(Fl_Input_Choice*, void*);
+extern Fl_Box *w_when_box;
+extern Fl_Group *widget_tab_grid_child;
+extern void grid_set_row_cb(Fluid_Coord_Input*, void*);
+extern Fluid_Coord_Input *widget_grid_row_input;
+extern void grid_dec_row_cb(Fl_Button*, void*);
+extern void grid_inc_row_cb(Fl_Button*, void*);
+extern void grid_set_col_cb(Fluid_Coord_Input*, void*);
+extern Fluid_Coord_Input *widget_grid_col_input;
+extern void grid_dec_col_cb(Fl_Button*, void*);
+extern void grid_inc_col_cb(Fl_Button*, void*);
+extern Fl_Box *widget_grid_transient;
+extern Fl_Box *widget_grid_unlinked;
+extern Fl_Group *wp_gridc_align;
+extern void grid_align_horizontal_cb(Fl_Choice*, void*);
+extern void grid_align_vertical_cb(Fl_Choice*, void*);
+extern Fl_Group *wp_gridc_size;
+extern void grid_set_min_wdt_cb(Fluid_Coord_Input*, void*);
+extern void grid_set_min_hgt_cb(Fluid_Coord_Input*, void*);
+extern void grid_set_rowspan_cb(Fluid_Coord_Input*, void*);
+extern Fluid_Coord_Input *widget_grid_rowspan_input;
+extern void grid_dec_rowspan_cb(Fl_Button*, void*);
+extern void grid_inc_rowspan_cb(Fl_Button*, void*);
+extern void grid_set_colspan_cb(Fluid_Coord_Input*, void*);
+extern Fluid_Coord_Input *widget_grid_colspan_input;
+extern void grid_dec_colspan_cb(Fl_Button*, void*);
+extern void grid_inc_colspan_cb(Fl_Button*, void*);
+extern Fl_Group *widget_tab_grid;
+extern Fluid_Coord_Input *widget_grid_rows;
+extern Fluid_Coord_Input *widget_grid_cols;
+extern Fl_Group *wp_grid_margin;
+extern Fl_Group *wp_grid_gaps;
+extern Fluid_Coord_Input *widget_grid_curr_row;
+extern Fl_Group *widget_grid_curr_row_attributes;
+extern Fluid_Coord_Input *widget_grid_curr_col;
+extern Fl_Group *widget_grid_curr_col_attributes;
+extern Fl_Tabs *widget_tabs_repo;
+extern void live_mode_cb(Fl_Button*, void*);
+extern Fl_Button *wLiveMode;
+extern void overlay_cb(Fl_Button*, void*);
+extern Fl_Button *overlay_button;
+#include <FL/Fl_Return_Button.H>
+extern void ok_cb(Fl_Return_Button*, void*);
+Fl_Double_Window* make_widget_panel();
+extern Fl_Menu_Item menu_[];
+extern Fl_Menu_Item menu_1[];
+extern Fl_Menu_Item menu_Children[];
+extern Fl_Menu_Item menu_2[];
+extern Fl_Menu_Item menu_3[];
+extern Fl_Menu_Item menu_4[];
+extern Fl_Menu_Item menu_Horizontal[];
+#define GRID_LEFT (menu_Horizontal+0)
+extern Fl_Menu_Item menu_Vertical[];
+#endif