diff options
Diffstat (limited to 'fluid')
| -rw-r--r-- | fluid/README_fl.txt | 3 | ||||
| -rw-r--r-- | fluid/app/shell_command.cxx | 10 | ||||
| -rw-r--r-- | fluid/io/Project_Reader.cxx | 7 | ||||
| -rw-r--r-- | fluid/nodes/Function_Node.cxx | 786 | ||||
| -rw-r--r-- | fluid/nodes/Function_Node.h | 48 | ||||
| -rw-r--r-- | fluid/nodes/Group_Node.cxx | 26 | ||||
| -rw-r--r-- | fluid/nodes/Group_Node.h | 2 | ||||
| -rw-r--r-- | fluid/nodes/Node.cxx | 2 | ||||
| -rw-r--r-- | fluid/nodes/Widget_Node.cxx | 92 | ||||
| -rw-r--r-- | fluid/nodes/Widget_Node.h | 3 | ||||
| -rw-r--r-- | fluid/panels/about_panel.fl | 1 | ||||
| -rw-r--r-- | fluid/panels/codeview_panel.fl | 1 | ||||
| -rw-r--r-- | fluid/panels/function_panel.cxx | 738 | ||||
| -rw-r--r-- | fluid/panels/function_panel.fl | 544 | ||||
| -rw-r--r-- | fluid/panels/function_panel.h | 90 | ||||
| -rw-r--r-- | fluid/panels/template_panel.fl | 1 | ||||
| -rw-r--r-- | fluid/panels/widget_panel.cxx | 3311 | ||||
| -rw-r--r-- | fluid/panels/widget_panel.fl | 2722 | ||||
| -rw-r--r-- | fluid/panels/widget_panel.h | 32 | ||||
| -rw-r--r-- | fluid/panels/widget_panel/Grid_Child_Tab.fl | 1 | ||||
| -rw-r--r-- | fluid/panels/widget_panel/Grid_Tab.fl | 1 | ||||
| -rw-r--r-- | fluid/tools/autodoc.cxx | 78 |
22 files changed, 4771 insertions, 3728 deletions
diff --git a/fluid/README_fl.txt b/fluid/README_fl.txt index eeb2b6d56..975de0177 100644 --- a/fluid/README_fl.txt +++ b/fluid/README_fl.txt @@ -412,6 +412,7 @@ Type "data" <word> : C++ variable name "filename" <word> : name or path as entered by user, forward slashes "textmode" : defaults to binary mode "compressed" : defaults to not compressed + "std_binary", "std_textmode", "std_compressed" ... : inherits more from decl Type "declblock" <word> : C++ code @@ -431,7 +432,7 @@ Type "comment" <word> : comment text Type "class" <word> <word> : prefix, class name none or "private" or "protected" : defaults to public - ":" <word> : name of super class + ":" <word> : name of base class ... : inherits more from Node Type "Fl_Widget" <word> : C++ variable name diff --git a/fluid/app/shell_command.cxx b/fluid/app/shell_command.cxx index e0080dfd5..337d17e2f 100644 --- a/fluid/app/shell_command.cxx +++ b/fluid/app/shell_command.cxx @@ -79,12 +79,12 @@ On macOS, we can write Apple Scripts: - #!/usr/bin/env osascript - say "@BASENAME@" + #!/usr/bin/env osascript + say "@BASENAME@" - osascript <<EOD - say "spark" - EOD + osascript <<EOD + say "spark" + EOD osascript <<EOD tell application "Xcode" diff --git a/fluid/io/Project_Reader.cxx b/fluid/io/Project_Reader.cxx index 0e2809685..0eeee8014 100644 --- a/fluid/io/Project_Reader.cxx +++ b/fluid/io/Project_Reader.cxx @@ -319,9 +319,12 @@ Node *Project_Reader::read_children(Node *p, int merge, Strategy strategy, char t->name(read_word()); c = read_word(1); + // There can actually be two keywords here. The first one used to be a + // "prefix" in Fluid < 1.5.0, but is no longer supported. So if we still + // find the prefix in files, it will simply be prefixed to the name. if (strcmp(c,"{") && t->is_class()) { // <prefix> <name> - ((Class_Node*)t)->prefix(t->name()); - t->name(c); + std::string tmp = std::string {t->name() } + " " + c; + t->name(tmp.c_str()); c = read_word(1); } diff --git a/fluid/nodes/Function_Node.cxx b/fluid/nodes/Function_Node.cxx index a70b10462..095b3fc5f 100644 --- a/fluid/nodes/Function_Node.cxx +++ b/fluid/nodes/Function_Node.cxx @@ -35,6 +35,8 @@ #include <zlib.h> +extern void open_panel(); + using namespace fld; using namespace fld::io; using namespace fld::proj; @@ -191,9 +193,9 @@ Function_Node Function_Node::prototype; */ Function_Node::Function_Node() : Node(), - return_type(nullptr), + return_type_(nullptr), public_(0), - cdecl_(0), + declare_c_(0), constructor(0), havewidgets(0) { } @@ -202,7 +204,7 @@ Function_Node::Function_Node() : Destructor. */ Function_Node::~Function_Node() { - if (return_type) free((void*)return_type); + if (return_type_) free((void*)return_type_); } /** @@ -221,11 +223,11 @@ Node *Function_Node::make(Strategy strategy) { } Function_Node *o = new Function_Node(); o->name("make_window()"); - o->return_type = nullptr; + o->return_type_ = nullptr; o->add(anchor, strategy); o->factory = this; o->public_ = 1; - o->cdecl_ = 0; + o->declare_c_ = 0; return o; } @@ -241,10 +243,10 @@ void Function_Node::write_properties(fld::io::Project_Writer &f) { case 0: f.write_string("private"); break; case 2: f.write_string("protected"); break; } - if (cdecl_) f.write_string("C"); - if (return_type) { + if (declare_c_) f.write_string("C"); + if (return_type_) { f.write_string("return_type"); - f.write_word(return_type); + f.write_word(return_type_); } } @@ -258,9 +260,9 @@ void Function_Node::read_property(fld::io::Project_Reader &f, const char *c) { } else if (!strcmp(c,"protected")) { public_ = 2; } else if (!strcmp(c,"C")) { - cdecl_ = 1; + declare_c_ = 1; } else if (!strcmp(c,"return_type")) { - storestring(f.read_word(),return_type); + storestring(f.read_word(),return_type_); } else { Node::read_property(f, c); } @@ -270,90 +272,7 @@ void Function_Node::read_property(fld::io::Project_Reader &f, const char *c) { Open the function_panel dialog box to edit this function. */ void Function_Node::open() { - // fill dialog box - if (!function_panel) make_function_panel(); - f_return_type_input->value(return_type); - f_name_input->value(name()); - if (is_in_class()) { - f_public_member_choice->value(public_); - f_public_member_choice->show(); - f_public_choice->hide(); - f_c_button->hide(); - } else { - f_public_choice->value(public_); - f_public_choice->show(); - f_public_member_choice->hide(); - f_c_button->show(); - } - f_c_button->value(cdecl_); - const char *c = comment(); - f_comment_input->buffer()->text(c?c:""); - function_panel->show(); - const char* message = nullptr; - for (;;) { // repeat as long as there are errors - // - message loop until OK or cancel is pressed - for (;;) { - Fl_Widget* w = Fl::readqueue(); - if (w == f_panel_cancel) goto BREAK2; - else if (w == f_panel_ok) break; - else if (!w) Fl::wait(); - } - // - check syntax - const char *c = f_name_input->value(); - while (isspace(*c)) c++; - message = c_check(c); - if (!message) { - const char *d = c; - for (; *d != '('; d++) if (isspace(*d) || !*d) break; - if (*c && *d != '(') - message = "must be 'name(arguments)'"; - } - if (!message) { - c = f_return_type_input->value(); - message = c_check(c); - } - // - alert user - if (message) { - int v = fl_choice("Potential syntax error detected: %s", - "Continue Editing", "Ignore Error", nullptr, message); - if (v==0) continue; // Continue Editing - //if (v==1) { } // Ignore Error and close dialog - } - // - copy dialog data to target variables - int mod = 0; - name(f_name_input->value()); - storestring(f_return_type_input->value(), return_type); - if (is_in_class()) { - if (public_ != f_public_member_choice->value()) { - mod = 1; - public_ = f_public_member_choice->value(); - redraw_browser(); - } - } else { - if (public_ != f_public_choice->value()) { - mod = 1; - public_ = f_public_choice->value(); - redraw_browser(); - } - } - if (cdecl_ != f_c_button->value()) { - mod = 1; - cdecl_ = f_c_button->value(); - } - c = f_comment_input->buffer()->text(); - if (c && *c) { - if (!comment() || strcmp(c, comment())) { Fluid.proj.set_modflag(1); redraw_browser(); } - comment(c); - } else { - if (comment()) { Fluid.proj.set_modflag(1); redraw_browser(); } - comment(nullptr); - } - if (c) free((void*)c); - if (mod) Fluid.proj.set_modflag(1); - break; - } -BREAK2: - function_panel->hide(); + open_panel(); } /** @@ -435,7 +354,7 @@ void Function_Node::write_code1(fld::io::Code_Writer& f) { if (havechildren) f.write_c("int main(int argc, char **argv) {\n"); } else { - const char* rtype = return_type; + const char* rtype = return_type_; const char* star = ""; // from matt: let the user type "static " at the start of type // in order to declare a static method; @@ -503,7 +422,7 @@ void Function_Node::write_code1(fld::io::Code_Writer& f) { if (havechildren) write_comment_c(f); if (public_==1) { - if (cdecl_) + if (declare_c_) f.write_h("extern \"C\" { %s%s %s; }\n", rtype, star, name()); else f.write_h("%s%s %s;\n", rtype, star, name()); @@ -547,7 +466,7 @@ void Function_Node::write_code2(fld::io::Code_Writer& f) { f.write_c("%s%s->show(argc, argv);\n", f.indent(1), var); if (havechildren) f.write_c("%sreturn Fl::run();\n", f.indent(1)); - } else if (havewidgets && !constructor && !return_type) { + } else if (havewidgets && !constructor && !return_type_) { f.write_c("%sreturn %s;\n", f.indent(1), var); } if (havechildren) @@ -562,9 +481,9 @@ void Function_Node::write_code2(fld::io::Code_Writer& f) { \return 1 if they match, 0 if not */ int Function_Node::has_signature(const char *rtype, const char *sig) const { - if (rtype && !return_type) return 0; + if (rtype && !return_type_) return 0; if (!name()) return 0; - if ( (rtype==nullptr || strcmp(return_type, rtype)==0) + if ( (rtype==nullptr || strcmp(return_type_, rtype)==0) && fl_filename_match(name(), sig)) { return 1; } @@ -632,38 +551,7 @@ void Code_Node::open() { if ( editor_.open_editor(cmd, code) == 0 ) return; // return if editor opened ok, fall thru to built-in if not } - // Use built-in code editor.. - if (!code_panel) make_code_panel(); - const char *text = name(); - code_input->buffer()->text( text ? text : "" ); - code_input->insert_position(cursor_position_); - code_input->scroll(code_input_scroll_row, code_input_scroll_col); - code_panel->show(); - const char* message = nullptr; - for (;;) { // repeat as long as there are errors - for (;;) { - Fl_Widget* w = Fl::readqueue(); - if (w == code_panel_cancel) goto BREAK2; - else if (w == code_panel_ok) break; - else if (!w) Fl::wait(); - } - char*c = code_input->buffer()->text(); - message = c_check(c); - if (message) { - int v = fl_choice("Potential syntax error detected: %s", - "Continue Editing", "Ignore Error", nullptr, message); - if (v==0) continue; // Continue Editing - //if (v==1) { } // Ignore Error and close dialog - } - name(c); - free(c); - break; - } - cursor_position_ = code_input->insert_position(); - code_input_scroll_row = code_input->scroll_row(); - code_input_scroll_col = code_input->scroll_col(); -BREAK2: - code_panel->hide(); + open_panel(); } /** @@ -817,38 +705,7 @@ void CodeBlock_Node::read_property(fld::io::Project_Reader &f, const char *c) { Open the codeblock_panel. */ void CodeBlock_Node::open() { - if (!codeblock_panel) make_codeblock_panel(); - code_before_input->value(name()); - code_after_input->value(after); - codeblock_panel->show(); - const char* message = nullptr; - for (;;) { // repeat as long as there are errors - // event loop - for (;;) { - Fl_Widget* w = Fl::readqueue(); - if (w == codeblock_panel_cancel) goto BREAK2; - else if (w == codeblock_panel_ok) break; - else if (!w) Fl::wait(); - } - // check for syntax errors - message = c_check(code_before_input->value()); - if (!message) { - message = c_check(code_after_input->value()); - } - // alert user - if (message) { - int v = fl_choice("Potential syntax error detected: %s", - "Continue Editing", "Ignore Error", nullptr, message); - if (v==0) continue; // Continue Editing - //if (v==1) { } // Ignore Error and close dialog - } - // write to variables - name(code_before_input->value()); - storestring(code_after_input->value(), after); - break; - } -BREAK2: - codeblock_panel->hide(); + open_panel(); } /** @@ -969,70 +826,7 @@ void Decl_Node::read_property(fld::io::Project_Reader &f, const char *c) { Open the decl_panel to edit this node. */ void Decl_Node::open() { - if (!decl_panel) make_decl_panel(); - decl_input->buffer()->text(name()); - if (is_in_class()) { - decl_class_choice->value(public_); - decl_class_choice->show(); - decl_choice->hide(); - } else { - decl_choice->value((public_&1)|((static_&1)<<1)); - decl_choice->show(); - decl_class_choice->hide(); - } - const char *c = comment(); - decl_comment_input->buffer()->text(c?c:""); - decl_panel->show(); - const char* message = nullptr; - for (;;) { // repeat as long as there are errors - // event loop - for (;;) { - Fl_Widget* w = Fl::readqueue(); - if (w == decl_panel_cancel) goto BREAK2; - else if (w == decl_panel_ok) break; - else if (!w) Fl::wait(); - } - // check values - const char*c = decl_input->buffer()->text(); - while (isspace(*c)) c++; - message = c_check(c&&c[0]=='#' ? c+1 : c); - // alert user - if (message) { - int v = fl_choice("Potential syntax error detected: %s", - "Continue Editing", "Ignore Error", nullptr, message); - if (v==0) continue; // Continue Editing - //if (v==1) { } // Ignore Error and close dialog - } - // copy vlaues - name(c); - if (is_in_class()) { - if (public_!=decl_class_choice->value()) { - Fluid.proj.set_modflag(1); - public_ = decl_class_choice->value(); - } - } else { - if (public_!=(decl_choice->value()&1)) { - Fluid.proj.set_modflag(1); - public_ = (decl_choice->value()&1); - } - if (static_!=((decl_choice->value()>>1)&1)) { - Fluid.proj.set_modflag(1); - static_ = ((decl_choice->value()>>1)&1); - } - } - c = decl_comment_input->buffer()->text(); - if (c && *c) { - if (!comment() || strcmp(c, comment())) { Fluid.proj.set_modflag(1); redraw_browser(); } - comment(c); - } else { - if (comment()) { Fluid.proj.set_modflag(1); redraw_browser(); } - comment(nullptr); - } - if (c) free((void*)c); - break; - } -BREAK2: - decl_panel->hide(); + open_panel(); } /** @@ -1120,9 +914,7 @@ Data_Node Data_Node::prototype; Constructor. */ Data_Node::Data_Node() : - Decl_Node(), - filename_(nullptr), - text_mode_(0) + Decl_Node() { } /** @@ -1151,7 +943,7 @@ Node *Data_Node::make(Strategy strategy) { o->public_ = 1; o->static_ = 1; o->filename_ = nullptr; - o->text_mode_ = 0; + o->output_format_ = 0; o->name("myInlineData"); o->add(anchor, strategy); o->factory = this; @@ -1169,11 +961,12 @@ void Data_Node::write_properties(fld::io::Project_Writer &f) { f.write_string("filename"); f.write_word(filename_); } - if (text_mode_ == 1) { - f.write_string("textmode"); - } - if (text_mode_ == 2) { - f.write_string("compressed"); + switch (output_format_) { + case 1: f.write_string("textmode"); break; + case 2: f.write_string("compressed"); break; + case 3: f.write_string("std_binary"); break; + case 4: f.write_string("std_textmode"); break; + case 5: f.write_string("std_compressed"); break; } } @@ -1184,9 +977,15 @@ void Data_Node::read_property(fld::io::Project_Reader &f, const char *c) { if (!strcmp(c,"filename")) { storestring(f.read_word(), filename_, 1); } else if (!strcmp(c,"textmode")) { - text_mode_ = 1; + output_format_ = 1; } else if (!strcmp(c,"compressed")) { - text_mode_ = 2; + output_format_ = 2; + } else if (!strcmp(c,"std_binary")) { + output_format_ = 3; + } else if (!strcmp(c,"std_textmode")) { + output_format_ = 4; + } else if (!strcmp(c,"std_compressed")) { + output_format_ = 5; } else { Decl_Node::read_property(f, c); } @@ -1196,110 +995,7 @@ void Data_Node::read_property(fld::io::Project_Reader &f, const char *c) { Open the data_panel to edit this node. */ void Data_Node::open() { - if (!data_panel) make_data_panel(); - data_input->value(name()); - if (is_in_class()) { - data_class_choice->value(public_); - data_class_choice->show(); - data_choice->hide(); - } else { - data_choice->value((public_&1)|((static_&1)<<1)); - data_choice->show(); - data_class_choice->hide(); - } - data_mode->value(text_mode_); - data_filename->value(filename_?filename_:""); - const char *c = comment(); - data_comment_input->buffer()->text(c?c:""); - data_panel->show(); - for (;;) { // repeat as long as there are errors - for (;;) { - Fl_Widget* w = Fl::readqueue(); - if (w == data_panel_cancel) goto BREAK2; - else if (w == data_panel_ok) break; - else if (w == data_filebrowser) { - Fluid.proj.enter_project_dir(); - const char *fn = fl_file_chooser("Load Inline Data", nullptr, data_filename->value(), 1); - Fluid.proj.leave_project_dir(); - if (fn) { - if (strcmp(fn, data_filename->value())) - Fluid.proj.set_modflag(1); - data_filename->value(fn); - } - } - else if (!w) Fl::wait(); - } - // store the variable name: - const char*c = data_input->value(); - char *s = fl_strdup(c), *p = s, *q, *n; - for (;;++p) { // remove leading spaces - if (!isspace((unsigned char)(*p))) break; - } - n = p; - if ( (!isalpha((unsigned char)(*p))) && ((*p)!='_') && ((*p)!=':') ) goto OOPS; - ++p; - for (;;++p) { - if ( (!isalnum((unsigned char)(*p))) && ((*p)!='_') && ((*p)!=':') ) break; - } - q = p; - for (;;++q) { - if (!*q) break; - if (!isspace((unsigned char)(*q))) goto OOPS; - } - *p = 0; // remove trailing spaces - if (n==q) { - OOPS: - int v = fl_choice("%s", - "Continue Editing", "Ignore Error", nullptr, - "Variable name must be a C identifier"); - if (v==0) { free(s); continue; } // Continue Editing - //if (v==1) { } // Ignore Error and close dialog - } - Fluid.proj.undo.checkpoint(); - name(n); - free(s); - // store flags - if (is_in_class()) { - if (public_!=data_class_choice->value()) { - Fluid.proj.set_modflag(1); - public_ = data_class_choice->value(); - } - } else { - if (public_!=(data_choice->value()&1)) { - Fluid.proj.set_modflag(1); - public_ = (data_choice->value()&1); - } - if (static_!=((data_choice->value()>>1)&1)) { - Fluid.proj.set_modflag(1); - static_ = ((data_choice->value()>>1)&1); - } - } - text_mode_ = data_mode->value(); - if (text_mode_ < 0) text_mode_ = 0; - if (text_mode_ > 2) text_mode_ = 2; - // store the filename - c = data_filename->value(); - if (filename_ && strcmp(filename_, data_filename->value())) - Fluid.proj.set_modflag(1); - else if (!filename_ && *c) - Fluid.proj.set_modflag(1); - if (filename_) { free((void*)filename_); filename_ = nullptr; } - if (c && *c) filename_ = fl_strdup(c); - // store the comment - c = data_comment_input->buffer()->text(); - if (c && *c) { - if (!comment() || strcmp(c, comment())) { Fluid.proj.set_modflag(1); redraw_browser(); } - comment(c); - } else { - if (comment()) { Fluid.proj.set_modflag(1); redraw_browser(); } - comment(nullptr); - } - if (c) free((void*)c); - Fluid.proj.set_modflag(1); - break; - } -BREAK2: - data_panel->hide(); + open_panel(); } /** @@ -1327,7 +1023,7 @@ void Data_Node::write_code1(fld::io::Code_Writer& f) { if (nData) { data = (char*)calloc(nData, 1); if (fread(data, nData, 1, f)==0) { /* use default */ } - if (text_mode_ == 2) { + if ((output_format_ == 2) || (output_format_ == 5)) { uncompressedDataSize = nData; uLong nzData = compressBound(nData); Bytef *zdata = (Bytef*)::malloc(nzData); @@ -1344,27 +1040,47 @@ void Data_Node::write_code1(fld::io::Code_Writer& f) { } if (is_in_class()) { f.write_public(public_); - if (text_mode_ == 1) { - f.write_h("%sstatic const char *%s;\n", f.indent(1), c); + if ((output_format_ == 1) || (output_format_ == 4)) { f.write_c("\n"); write_comment_c(f); - f.write_c("const char *%s::%s = /* text inlined from %s */\n", class_name(1), c, fn); + if (output_format_ == 1) { + f.write_h("%sstatic const char *%s;\n", f.indent(1), c); + f.write_c("const char *%s::%s = /* text inlined from %s */\n", class_name(1), c, fn); + } else { + f.write_h_once("#include <string>"); + f.write_h("%sstatic const std::string %s;\n", f.indent(1), c); + f.write_c("const std::string %s::%s = /* text inlined from %s */\n", class_name(1), c, fn); + } if (message) f.write_c("#error %s %s\n", message, fn); f.write_cstring(data, nData); - } else if (text_mode_ == 2) { + } else if ((output_format_ == 2) || (output_format_ == 5)) { f.write_h("%sstatic int %s_size;\n", f.indent(1), c); - f.write_h("%sstatic unsigned char %s[%d];\n", f.indent(1), c, nData); f.write_c("\n"); write_comment_c(f); f.write_c("int %s::%s_size = %d;\n", class_name(1), c, uncompressedDataSize); - f.write_c("unsigned char %s::%s[%d] = /* data compressed and inlined from %s */\n", class_name(1), c, nData, fn); + if (output_format_ == 2) { + f.write_h("%sstatic unsigned char %s[%d];\n", f.indent(1), c, nData); + f.write_c("unsigned char %s::%s[%d] = /* data compressed and inlined from %s */\n", class_name(1), c, nData, fn); + } else { + f.write_h_once("#include <stdint.h>"); + f.write_h_once("#include <vector>"); + f.write_h("%sstatic std::vector<uint8_t> %s;\n", f.indent(1), c); + f.write_c("std::vector<uint8_t> %s::%s = /* data compressed and inlined from %s */\n", class_name(1), c, fn); + } if (message) f.write_c("#error %s %s\n", message, fn); f.write_cdata(data, nData); } else { - f.write_h("%sstatic unsigned char %s[%d];\n", f.indent(1), c, nData); f.write_c("\n"); write_comment_c(f); - f.write_c("unsigned char %s::%s[%d] = /* data inlined from %s */\n", class_name(1), c, nData, fn); + if (output_format_ == 0) { + f.write_h("%sstatic unsigned char %s[%d];\n", f.indent(1), c, nData); + f.write_c("unsigned char %s::%s[%d] = /* data inlined from %s */\n", class_name(1), c, nData, fn); + } else { + f.write_h_once("#include <stdint.h>"); + f.write_h_once("#include <vector>"); + f.write_h("%sstatic std::vector<uint8_t> %s;\n", f.indent(1), c); + f.write_c("std::vector<uint8_t> %s::%s = /* data inlined from %s */\n", class_name(1), c, fn); + } if (message) f.write_c("#error %s %s\n", message, fn); f.write_cdata(data, nData); } @@ -1373,27 +1089,47 @@ void Data_Node::write_code1(fld::io::Code_Writer& f) { // the "header only" option does not apply here! if (public_) { if (static_) { - if (text_mode_ == 1) { - f.write_h("extern const char *%s;\n", c); + if ((output_format_ == 1) || (output_format_ == 4)) { f.write_c("\n"); write_comment_c(f); - f.write_c("const char *%s = /* text inlined from %s */\n", c, fn); + if (output_format_ == 1) { + f.write_h("extern const char *%s;\n", c); + f.write_c("const char *%s = /* text inlined from %s */\n", c, fn); + } else { + f.write_h_once("#include <string>"); + f.write_h("extern const std::string %s;\n", c); + f.write_c("const std::string %s = /* text inlined from %s */\n", c, fn); + } if (message) f.write_c("#error %s %s\n", message, fn); f.write_cstring(data, nData); - } else if (text_mode_ == 2) { + } else if ((output_format_ == 2) || (output_format_ == 5)) { f.write_h("extern int %s_size;\n", c); - f.write_h("extern unsigned char %s[%d];\n", c, nData); f.write_c("\n"); write_comment_c(f); f.write_c("int %s_size = %d;\n", c, uncompressedDataSize); - f.write_c("unsigned char %s[%d] = /* data compressed and inlined from %s */\n", c, nData, fn); + if (output_format_ == 2) { + f.write_h("extern unsigned char %s[%d];\n", c, nData); + f.write_c("unsigned char %s[%d] = /* data compressed and inlined from %s */\n", c, nData, fn); + } else { + f.write_h_once("#include <stdint.h>"); + f.write_h_once("#include <vector>"); + f.write_h("extern std::vector<uint8_t> %s;\n", c); + f.write_c("std::vector<uint8_t> %s = /* data compressed and inlined from %s */\n", c, fn); + } if (message) f.write_c("#error %s %s\n", message, fn); f.write_cdata(data, nData); } else { - f.write_h("extern unsigned char %s[%d];\n", c, nData); f.write_c("\n"); write_comment_c(f); - f.write_c("unsigned char %s[%d] = /* data inlined from %s */\n", c, nData, fn); + if (output_format_ == 0) { + f.write_h("extern unsigned char %s[%d];\n", c, nData); + f.write_c("unsigned char %s[%d] = /* data inlined from %s */\n", c, nData, fn); + } else { + f.write_h_once("#include <stdint.h>"); + f.write_h_once("#include <vector>"); + f.write_h("extern std::vector<uint8_t> %s;\n", c); + f.write_c("std::vector<uint8_t> %s = /* data inlined from %s */\n", c, fn); + } if (message) f.write_c("#error %s %s\n", message, fn); f.write_cdata(data, nData); } @@ -1401,7 +1137,7 @@ void Data_Node::write_code1(fld::io::Code_Writer& f) { } else { write_comment_h(f); f.write_h("#error Unsupported declaration loading inline data %s\n", fn); - if (text_mode_ == 1) + if (output_format_ == 1) f.write_h("const char *%s = \"abc...\";\n", c); else f.write_h("unsigned char %s[3] = { 1, 2, 3 };\n", c); @@ -1409,20 +1145,41 @@ void Data_Node::write_code1(fld::io::Code_Writer& f) { } else { f.write_c("\n"); write_comment_c(f); - if (static_) - f.write_c("static "); - if (text_mode_ == 1) { - f.write_c("const char *%s = /* text inlined from %s */\n", c, fn); + if ((output_format_ == 1) || (output_format_ == 4)) { + if (output_format_ == 1) { + if (static_) f.write_c("static "); + f.write_c("const char *%s = /* text inlined from %s */\n", c, fn); + } else { + f.write_c_once("#include <string>"); + if (static_) f.write_c("static "); + f.write_c("const std::string %s = /* text inlined from %s */\n", c, fn); + } if (message) f.write_c("#error %s %s\n", message, fn); f.write_cstring(data, nData); - } else if (text_mode_ == 2) { - f.write_c("int %s_size = %d;\n", c, uncompressedDataSize); + } else if ((output_format_ == 2) || (output_format_ == 5)) { if (static_) f.write_c("static "); - f.write_c("unsigned char %s[%d] = /* data compressed and inlined from %s */\n", c, nData, fn); + f.write_c("int %s_size = %d;\n", c, uncompressedDataSize); + if (output_format_ == 2) { + if (static_) f.write_c("static "); + f.write_c("unsigned char %s[%d] = /* data compressed and inlined from %s */\n", c, nData, fn); + } else { + f.write_c_once("#include <stdint.h>"); + f.write_c_once("#include <vector>"); + if (static_) f.write_c("static "); + f.write_c("std::vector<uint8_t> %s = /* data compressed and inlined from %s */\n", c, fn); + } if (message) f.write_c("#error %s %s\n", message, fn); f.write_cdata(data, nData); } else { - f.write_c("unsigned char %s[%d] = /* data inlined from %s */\n", c, nData, fn); + if (output_format_ == 0) { + if (static_) f.write_c("static "); + f.write_c("unsigned char %s[%d] = /* data inlined from %s */\n", c, nData, fn); + } else { + f.write_c_once("#include <stdint.h>"); + f.write_c_once("#include <vector>"); + if (static_) f.write_c("static "); + f.write_c("std::vector<uint8_t> %s = /* data inlined from %s */\n", c, fn); + } if (message) f.write_c("#error %s %s\n", message, fn); f.write_cdata(data, nData); } @@ -1440,6 +1197,11 @@ void Data_Node::write_code1(fld::io::Code_Writer& f) { if (data) free(data); } +void Data_Node::filename(const char* fn) { + storestring(fn, filename_); +} + + // ---- DeclBlock_Node declaration /** \class DeclBlock_Node @@ -1456,10 +1218,8 @@ DeclBlock_Node DeclBlock_Node::prototype; /** Constructor. */ -DeclBlock_Node::DeclBlock_Node() : - Node(), - after(nullptr), - write_map_(CODE_IN_SOURCE) +DeclBlock_Node::DeclBlock_Node() +: Node() { } /** @@ -1536,101 +1296,7 @@ void DeclBlock_Node::read_property(fld::io::Project_Reader &f, const char *c) { Open the declblock_panel to edit this node. */ void DeclBlock_Node::open() { - // build dialog box - if (!declblock_panel) make_declblock_panel(); - // preset all values - declblock_before_input->value(name()); - declblock_after_input->value(after); - declblock_static_header->value(write_map_ & STATIC_IN_HEADER); - declblock_static_source->value(write_map_ & STATIC_IN_SOURCE); - declblock_code_header->value(write_map_ & CODE_IN_HEADER); - declblock_code_source->value(write_map_ & CODE_IN_SOURCE); - const char *c = comment(); - declblock_comment_input->buffer()->text(c?c:""); - // show modal dialog and loop until satisfied - declblock_panel->show(); - const char* message = nullptr; - for (;;) { // repeat as long as there are errors - for (;;) { - Fl_Widget* w = Fl::readqueue(); - if (w == declblock_panel_cancel) goto BREAK2; - else if (w == declblock_panel_ok) break; - else if (!w) Fl::wait(); - } - // verify user input - const char* a = declblock_before_input->value(); - while (isspace(*a)) a++; - const char* b = declblock_after_input->value(); - while (isspace(*b)) b++; - message = c_check(a&&a[0]=='#' ? a+1 : a); - if (!message) - message = c_check(b&&b[0]=='#' ? b+1 : b); - if (message) { - int v = fl_choice("Potential syntax error detected: %s", - "Continue Editing", "Ignore Error", nullptr, message); - if (v==0) continue; // Continue Editing - //if (v==1) { } // Ignore Error and close dialog - } - // store user choices in data structure - name(a); - storestring(b, after); - if (write_map_ & STATIC_IN_HEADER) { - if (declblock_static_header->value()==0) { - write_map_ &= ~STATIC_IN_HEADER; - Fluid.proj.set_modflag(1); - } - } else { - if (declblock_static_header->value()) { - write_map_ |= STATIC_IN_HEADER; - Fluid.proj.set_modflag(1); - } - } - if (write_map_ & STATIC_IN_SOURCE) { - if (declblock_static_source->value()==0) { - write_map_ &= ~STATIC_IN_SOURCE; - Fluid.proj.set_modflag(1); - } - } else { - if (declblock_static_source->value()) { - write_map_ |= STATIC_IN_SOURCE; - Fluid.proj.set_modflag(1); - } - } - if (write_map_ & CODE_IN_HEADER) { - if (declblock_code_header->value()==0) { - write_map_ &= ~CODE_IN_HEADER; - Fluid.proj.set_modflag(1); - } - } else { - if (declblock_code_header->value()) { - write_map_ |= CODE_IN_HEADER; - Fluid.proj.set_modflag(1); - } - } - if (write_map_ & CODE_IN_SOURCE) { - if (declblock_code_source->value()==0) { - write_map_ &= ~CODE_IN_SOURCE; - Fluid.proj.set_modflag(1); - } - } else { - if (declblock_code_source->value()) { - write_map_ |= CODE_IN_SOURCE; - Fluid.proj.set_modflag(1); - } - } - c = declblock_comment_input->buffer()->text(); - if (c && *c) { - if (!comment() || strcmp(c, comment())) { Fluid.proj.set_modflag(1); redraw_browser(); } - comment(c); - } else { - if (comment()) { Fluid.proj.set_modflag(1); redraw_browser(); } - comment(nullptr); - } - if (c) free((void*)c); - break; - } -BREAK2: - declblock_panel->hide(); + open_panel(); } /** @@ -1767,7 +1433,7 @@ void Comment_Node::read_property(fld::io::Project_Reader &f, const char *c) { add their own presets which are stored per user in a separate preferences database. */ -static void load_comments_preset(Fl_Preferences &menu) { +void load_comments_preset(Fl_Preferences &menu) { static const char * const predefined_comment[] = { "GNU Public License v3/GPL Header", "GNU Public License v3/GPL Footer", "GNU Public License v3/LGPL Header", "GNU Public License v3/LGPL Footer", @@ -1787,119 +1453,7 @@ static void load_comments_preset(Fl_Preferences &menu) { Open the comment_panel to edit this node. */ void Comment_Node::open() { - if (!comment_panel) make_comment_panel(); - const char *text = name(); - { - int i=0, n=0, version = 0; - Fl_Preferences menu(Fl_Preferences::USER_L, "fltk.org", "fluid_comments_menu"); - comment_predefined->clear(); - comment_predefined->add("_Edit/Add current comment..."); - comment_predefined->add("_Edit/Remove last selection..."); - menu.get("version", version, -1); - if (version < 10400) load_comments_preset(menu); - menu.get("n", n, 0); - for (i=0;i<n;i++) { - char *text; - menu.get(Fl_Preferences::Name(i), text, ""); - comment_predefined->add(text); - free(text); - } - } - comment_input->buffer()->text( text ? text : "" ); - comment_in_source->value(in_c_); - comment_in_header->value(in_h_); - comment_panel->show(); - char itempath[FL_PATH_MAX]; itempath[0] = 0; - int last_selected_item = 0; - for (;;) { // repeat as long as there are errors - for (;;) { - Fl_Widget* w = Fl::readqueue(); - if (w == comment_panel_cancel) goto BREAK2; - else if (w == comment_panel_ok) break; - else if (w == comment_predefined) { - if (comment_predefined->value()==1) { - // add the current comment to the database - const char *xname = fl_input( - "Please enter a name to reference the current\ncomment in your database.\n\n" - "Use forward slashes '/' to create submenus.", - "My Comment"); - if (xname) { - char *name = fl_strdup(xname); - for (char*s=name;*s;s++) if (*s==':') *s = ';'; - int n; - Fl_Preferences db(Fl_Preferences::USER_L, "fltk.org", "fluid_comments"); - db.set(name, comment_input->buffer()->text()); - Fl_Preferences menu(Fl_Preferences::USER_L, "fltk.org", "fluid_comments_menu"); - menu.get("n", n, 0); - menu.set(Fl_Preferences::Name(n), name); - menu.set("n", ++n); - comment_predefined->add(name); - free(name); - } - } else if (comment_predefined->value()==2) { - // remove the last selected comment from the database - if (itempath[0]==0 || last_selected_item==0) { - fl_message("Please select an entry from this menu first."); - } else if (fl_choice("Are you sure that you want to delete the entry\n" - "\"%s\"\nfrom the database?", "Cancel", "Delete", - nullptr, itempath)) { - Fl_Preferences db(Fl_Preferences::USER_L, "fltk.org", "fluid_comments"); - db.deleteEntry(itempath); - comment_predefined->remove(last_selected_item); - Fl_Preferences menu(Fl_Preferences::USER_L, "fltk.org", "fluid_comments_menu"); - int i, n; - for (i=4, n=0; i<comment_predefined->size(); i++) { - const Fl_Menu_Item *mi = comment_predefined->menu()+i; - if (comment_predefined->item_pathname(itempath, 255, mi)==0) { - if (itempath[0]=='/') memmove(itempath, itempath+1, 255); - if (itempath[0]) menu.set(Fl_Preferences::Name(n++), itempath); - } - } - menu.set("n", n); - } - } else { - // load the selected comment from the database - if (comment_predefined->item_pathname(itempath, 255)==0) { - if (itempath[0]=='/') memmove(itempath, itempath+1, 255); - Fl_Preferences db(Fl_Preferences::USER_L, "fltk.org", "fluid_comments"); - char *text; - db.get(itempath, text, "(no text found in data base)"); - comment_input->buffer()->text(text); - free(text); - last_selected_item = comment_predefined->value(); - } - } - } - else if (w == comment_load) { - // load a comment from disk - fl_file_chooser_ok_label("Use File"); - const char *fname = fl_file_chooser("Pick a comment", nullptr, nullptr); - fl_file_chooser_ok_label(nullptr); - if (fname) { - if (comment_input->buffer()->loadfile(fname)) { - fl_alert("Error loading file\n%s", fname); - } - } - } - else if (!w) Fl::wait(); - } - char*c = comment_input->buffer()->text(); - name(c); - free(c); - int mod = 0; - if (in_c_ != comment_in_source->value()) { - in_c_ = comment_in_source->value(); - mod = 1; - } - if (in_h_ != comment_in_header->value()) { - in_h_ = comment_in_header->value(); - mod = 1; - } - if (mod) Fluid.proj.set_modflag(1); - break; - } -BREAK2: - comment_panel->hide(); + open_panel(); } /** @@ -2049,75 +1603,7 @@ void Class_Node::read_property(fld::io::Project_Reader &f, const char *c) { Open the class_panel to edit the class name and superclass name. */ void Class_Node::open() { - if (!class_panel) make_class_panel(); - char fullname[FL_PATH_MAX]=""; - if (prefix() && strlen(prefix())) - sprintf(fullname,"%s %s",prefix(),name()); - else - strcpy(fullname, name()); - c_name_input->value(fullname); - c_subclass_input->value(subclass_of); - c_public_button->value(public_); - const char *c = comment(); - c_comment_input->buffer()->text(c?c:""); - class_panel->show(); - const char* message = nullptr; - - char *na=nullptr,*pr=nullptr,*p=nullptr; // name and prefix substrings - - for (;;) { // repeat as long as there are errors - // we don;t give the option to ignore this error here because code depends - // on this being a C++ identifier - if (message) fl_alert("%s", message); - for (;;) { - Fl_Widget* w = Fl::readqueue(); - if (w == c_panel_cancel) goto BREAK2; - else if (w == c_panel_ok) break; - else if (!w) Fl::wait(); - } - const char*c = c_name_input->value(); - char *s = fl_strdup(c); - size_t len = strlen(s); - if (!*s) goto OOPS; - p = (char*) (s+len-1); - while (p>=s && isspace(*p)) *(p--)='\0'; - if (p<s) goto OOPS; - while (p>=s && is_id(*p)) p--; - if ( (p<s && !is_id(*(p+1))) || !*(p+1) ) { - OOPS: message = "class name must be C++ identifier"; - free((void*)s); - continue; - } - na=p+1; // now we have the name - if(p>s) *p--='\0'; - while (p>=s && isspace(*p)) *(p--)='\0'; - while (p>=s && is_id(*p)) p--; - if (p<s) p++; - if (is_id(*p) && p<na) pr=p; // prefix detected - c = c_subclass_input->value(); - message = c_check(c); - if (message) { free((void*)s);continue;} - name(na); - prefix(pr); - free((void*)s); - storestring(c, subclass_of); - if (public_ != c_public_button->value()) { - public_ = c_public_button->value(); - Fluid.proj.set_modflag(1); - } - c = c_comment_input->buffer()->text(); - if (c && *c) { - if (!comment() || strcmp(c, comment())) { Fluid.proj.set_modflag(1); redraw_browser(); } - comment(c); - } else { - if (comment()) { Fluid.proj.set_modflag(1); redraw_browser(); } - comment(nullptr); - } - if (c) free((void*)c); - break; - } -BREAK2: - class_panel->hide(); + open_panel(); } /** diff --git a/fluid/nodes/Function_Node.h b/fluid/nodes/Function_Node.h index ac8bcdcc2..56a0046e0 100644 --- a/fluid/nodes/Function_Node.h +++ b/fluid/nodes/Function_Node.h @@ -48,8 +48,8 @@ public: typedef Node super; static Function_Node prototype; private: - const char* return_type; - char public_, cdecl_, constructor, havewidgets; + const char* return_type_; + char public_, declare_c_, constructor, havewidgets; public: Function_Node(); ~Function_Node(); @@ -70,6 +70,12 @@ public: void write_properties(fld::io::Project_Writer &f) override; void read_property(fld::io::Project_Reader &f, const char *) override; int has_signature(const char *, const char*) const; + const char *return_type() { return return_type_; } + void return_type(const char *t) { storestring(t, return_type_); } + char visibility() { return public_; } + void visibility(char v) { public_ = v; } + char declare_c() { return declare_c_; } + void declare_c(char v) { declare_c_ = v; } }; // ---- Code_Node declaration @@ -79,11 +85,11 @@ class Code_Node : public Node public: typedef Node super; static Code_Node prototype; -private: - ExternalCodeEditor editor_; int cursor_position_; int code_input_scroll_row; int code_input_scroll_col; +private: + ExternalCodeEditor editor_; public: Code_Node(); Node *make(Strategy strategy) override; @@ -125,6 +131,8 @@ public: bool is_a(Type inType) const override { return (inType==Type::CodeBlock) ? true : super::is_a(inType); } void write_properties(fld::io::Project_Writer &f) override; void read_property(fld::io::Project_Reader &f, const char *) override; + const char *end_code() { return after; } + void end_code(const char *c) { storestring(c, after); } }; // ---- Decl_Node declaration @@ -135,7 +143,7 @@ public: typedef Node super; static Decl_Node prototype; protected: - char public_; + char public_; // public = 0, private = 1, protected = 2 char static_; public: @@ -150,6 +158,10 @@ public: int is_public() const override; Type type() const override { return Type::Decl; } bool is_a(Type inType) const override { return (inType==Type::Decl) ? true : super::is_a(inType); } + char visibility() { return public_; } + void visibility(char v) { public_ = v; } + char output_file() { return (public_&1)|((static_&1)<<1); } + void output_file(char f) { public_ = (f&1); static_ = ((f>>1)&1); } }; // ---- Data_Node declaration @@ -160,8 +172,8 @@ public: typedef Decl_Node super; static Data_Node prototype; private: - const char *filename_; - int text_mode_; + const char *filename_ { nullptr }; + int output_format_ { 0 }; public: Data_Node(); @@ -175,6 +187,10 @@ public: void read_property(fld::io::Project_Reader &f, const char *) override; Type type() const override { return Type::Data; } bool is_a(Type inType) const override { return (inType==Type::Data) ? true : super::is_a(inType); } + void filename(const char* fn); + const char* filename() { return filename_; } + int output_format() { return output_format_; } + void output_format(int fmt) { output_format_ = fmt; } }; // ---- DeclBlock_Node declaration @@ -184,15 +200,15 @@ class DeclBlock_Node : public Node public: typedef Node super; static DeclBlock_Node prototype; -private: enum { CODE_IN_HEADER = 1, CODE_IN_SOURCE = 2, STATIC_IN_HEADER = 4, STATIC_IN_SOURCE = 8 }; - const char* after; ///< code after all children of this block - int write_map_; ///< see enum above +private: + const char* after { nullptr }; ///< code after all children of this block + int write_map_ { CODE_IN_SOURCE }; ///< see enum above public: DeclBlock_Node(); @@ -211,6 +227,10 @@ public: int is_public() const override; Type type() const override { return Type::DeclBlock; } bool is_a(Type inType) const override { return (inType==Type::DeclBlock) ? true : super::is_a(inType); } + const char *end_code() { return after; } + void end_code(const char *c) { storestring(c, after); } + int write_map() { return write_map_; } + void write_map(int v) { write_map_ = v; } }; // ---- Comment_Node declaration @@ -235,6 +255,10 @@ public: int is_public() const override { return 1; } Type type() const override { return Type::Comment; } bool is_a(Type inType) const override { return (inType==Type::Comment) ? true : super::is_a(inType); } + bool in_h() { return in_h_; } + void in_h(bool v) { in_h_ = v; } + bool in_c() { return in_c_; } + void in_c(bool v) { in_c_ = v; } }; // ---- Class_Node declaration @@ -268,6 +292,10 @@ public: bool is_a(Type inType) const override { return (inType==Type::Class) ? true : super::is_a(inType); } void write_properties(fld::io::Project_Writer &f) override; void read_property(fld::io::Project_Reader &f, const char *) override; + const char* base_class_name() { return subclass_of; } + void base_class_name(const char* name) { storestring(name, subclass_of); } + char visibility() { return public_; } + void visibility(char v) { public_ = v; } // class prefix attribute access void prefix(const char* p); diff --git a/fluid/nodes/Group_Node.cxx b/fluid/nodes/Group_Node.cxx index d269b62ab..7565a5552 100644 --- a/fluid/nodes/Group_Node.cxx +++ b/fluid/nodes/Group_Node.cxx @@ -30,6 +30,7 @@ #include <FL/Fl.H> #include <FL/Fl_Group.H> +#include <FL/Fl_Tile.H> #include <FL/Fl_Table.H> #include <FL/Fl_Menu_Item.H> #include <FL/fl_message.H> @@ -222,8 +223,10 @@ void Group_Node::add_child(Node* cc, Node* before) { // This is called when o is deleted. If it is in the tab group make // sure it is not visible: void Group_Node::remove_child(Node* cc) { - Widget_Node* c = (Widget_Node*)cc; - ((Fl_Group*)o)->remove(c->o); + if (cc->is_widget()) { + Widget_Node* c = (Widget_Node*)cc; + ((Fl_Group*)o)->remove(c->o); + } o->redraw(); } @@ -764,10 +767,12 @@ void Tabs_Node::add_child(Node* c, Node* before) { } void Tabs_Node::remove_child(Node* cc) { - Widget_Node* c = (Widget_Node*)cc; - Fl_Tabs *t = (Fl_Tabs*)o; - if (t->value() == c->o) t->value(nullptr); - Group_Node::remove_child(c); + if (cc->is_widget()) { + Widget_Node* c = (Widget_Node*)cc; + Fl_Tabs *t = (Fl_Tabs*)o; + if (t->value() == c->o) t->value(nullptr); + } + Group_Node::remove_child(cc); } Fl_Widget *Tabs_Node::enter_live_mode(int) { @@ -816,6 +821,15 @@ Tile_Node Tile_Node::prototype; // the "factory" const char tile_type_name[] = "Fl_Tile"; +// live mode support +Fl_Widget* Tile_Node::enter_live_mode(int) { + Fl_Group *grp = new Fl_Tile(o->x(), o->y(), o->w(), o->h()); + return propagate_live_mode(grp); +} + +void Tile_Node::leave_live_mode() { +} + void Tile_Node::copy_properties() { Group_Node::copy_properties(); // no additional properties diff --git a/fluid/nodes/Group_Node.h b/fluid/nodes/Group_Node.h index 6b6fe9fcd..1aea39df5 100644 --- a/fluid/nodes/Group_Node.h +++ b/fluid/nodes/Group_Node.h @@ -229,6 +229,8 @@ public: Widget_Node *_make() override {return new Tile_Node();} Type type() const override { return Type::Tile; } bool is_a(Type inType) const override { return (inType==Type::Tile) ? true : super::is_a(inType); } + Fl_Widget *enter_live_mode(int top=0) override; + void leave_live_mode() override; void copy_properties() override; }; diff --git a/fluid/nodes/Node.cxx b/fluid/nodes/Node.cxx index 86c5d16f7..0b1cb2d4d 100644 --- a/fluid/nodes/Node.cxx +++ b/fluid/nodes/Node.cxx @@ -537,6 +537,8 @@ Node::~Node() { if (Fluid.proj.tree.last == this) Fluid.proj.tree.last = prev; if (Fluid.proj.tree.first == this) Fluid.proj.tree.first = next; if (Fluid.proj.tree.current == this) Fluid.proj.tree.current = nullptr; + if (current_widget == this) current_widget = nullptr; + if (current_node == this) current_node = nullptr; if (parent) parent->remove_child(this); if (name_) free((void*)name_); if (label_) free((void*)label_); diff --git a/fluid/nodes/Widget_Node.cxx b/fluid/nodes/Widget_Node.cxx index 3d076b29b..7a2a7c98a 100644 --- a/fluid/nodes/Widget_Node.cxx +++ b/fluid/nodes/Widget_Node.cxx @@ -321,6 +321,7 @@ Fl_Window *the_panel; // with any actual useful values for the argument. I also use this to // initialized parts of the widget that are nyi by fluid. +Node* current_node { nullptr }; Widget_Node *current_widget; // one of the selected ones void* const LOAD = (void *)"LOAD"; // "magic" pointer to indicate that we need to load values into the dialog int numselected; // number selected @@ -1192,12 +1193,18 @@ void overlay_cb(Fl_Button*o,void *v) { void leave_live_mode_cb(Fl_Widget*, void*); -void live_mode_cb(Fl_Button*o,void *) { +void live_mode_cb(Fl_Button* o, void *) { /// \todo live mode should end gracefully when the application quits /// or when the user closes the live widget static Node *live_type = nullptr; static Fl_Widget *live_widget = nullptr; static Fl_Window *live_window = nullptr; + + if (!current_widget) { + o->value(0); + return; + } + // if 'o' is 0, we must quit live mode if (!o) { o = wLiveMode; @@ -1263,29 +1270,67 @@ void load_panel() { numselected = 0; current_widget = nullptr; if (Fluid.proj.tree.current) { - if (Fluid.proj.tree.current->is_widget()) - current_widget=(Widget_Node*)Fluid.proj.tree.current; - for (Node *o = Fluid.proj.tree.first; o; o = o->next) { - if (o->is_widget() && o->selected) { - numselected++; - if (!current_widget) current_widget = (Widget_Node*)o; + if (Fluid.proj.tree.current->is_a(Type::Data)) { + current_node = Fluid.proj.tree.current; + tabs_wizard->value(data_tabs); + numselected = 1; + } else if (Fluid.proj.tree.current->is_a(Type::Comment)) { + current_node = Fluid.proj.tree.current; + tabs_wizard->value(comment_tabs); + numselected = 1; + } else if (Fluid.proj.tree.current->is_a(Type::Class)) { + current_node = Fluid.proj.tree.current; + tabs_wizard->value(class_tabs); + numselected = 1; + } else if (Fluid.proj.tree.current->is_a(Type::DeclBlock)) { + current_node = Fluid.proj.tree.current; + tabs_wizard->value(declblock_tabs); + numselected = 1; + } else if (Fluid.proj.tree.current->is_a(Type::Decl)) { + current_node = Fluid.proj.tree.current; + tabs_wizard->value(decl_tabs); + numselected = 1; + } else if (Fluid.proj.tree.current->is_a(Type::CodeBlock)) { + current_node = Fluid.proj.tree.current; + tabs_wizard->value(codeblock_tabs); + numselected = 1; + } else if (Fluid.proj.tree.current->is_a(Type::Code)) { + current_node = Fluid.proj.tree.current; + tabs_wizard->value(code_tabs); + numselected = 1; + } else if (Fluid.proj.tree.current->is_a(Type::Function)) { + current_node = Fluid.proj.tree.current; + tabs_wizard->value(func_tabs); + numselected = 1; + } else { + current_node = nullptr; + if (Fluid.proj.tree.current->is_widget()) + current_widget=(Widget_Node*)Fluid.proj.tree.current; + for (Node *o = Fluid.proj.tree.first; o; o = o->next) { + if (o->is_widget() && o->selected) { + numselected++; + if (!current_widget) current_widget = (Widget_Node*)o; + } } } } - if (current_widget && current_widget->is_a(Type::Grid)) { - if (widget_tab_grid->parent()!=widget_tabs) - widget_tabs->add(widget_tab_grid); - } else { - if (widget_tab_grid->parent()==widget_tabs) { - widget_tabs_repo->add(widget_tab_grid); + if (current_widget) { + tabs_wizard->value(widget_tabs); + if (current_widget && current_widget->is_a(Type::Grid)) { + if (widget_tab_grid->parent()!=widget_tabs) + widget_tabs->add(widget_tab_grid); + } else { + if (widget_tab_grid->parent()==widget_tabs) { + widget_tabs_repo->add(widget_tab_grid); + } } - } - if (current_widget && current_widget->parent && current_widget->parent->is_a(Type::Grid)) { - if (widget_tab_grid_child->parent()!=widget_tabs) - widget_tabs->add(widget_tab_grid_child); - } else { - if (widget_tab_grid_child->parent()==widget_tabs) { - widget_tabs_repo->add(widget_tab_grid_child); + if (current_widget && current_widget->parent && current_widget->parent->is_a(Type::Grid)) { + if (widget_tab_grid_child->parent()!=widget_tabs) + widget_tabs->add(widget_tab_grid_child); + } else { + if (widget_tab_grid_child->parent()==widget_tabs) { + widget_tabs_repo->add(widget_tab_grid_child); + } } } if (numselected) @@ -1297,7 +1342,7 @@ void load_panel() { extern Fl_Window *widgetbin_panel; // This is called when user double-clicks an item, open or update the panel: -void Widget_Node::open() { +void open_panel() { bool adjust_position = false; if (!the_panel) { the_panel = make_widget_panel(); @@ -1323,6 +1368,11 @@ void Widget_Node::open() { } } +// This is called when user double-clicks an item, open or update the panel: +void Widget_Node::open() { + open_panel(); +} + extern void redraw_overlays(); extern void check_redraw_corresponding_parent(Node*); extern void redraw_browser(); diff --git a/fluid/nodes/Widget_Node.h b/fluid/nodes/Widget_Node.h index fd0b7ddbe..0276cbcdf 100644 --- a/fluid/nodes/Widget_Node.h +++ b/fluid/nodes/Widget_Node.h @@ -29,7 +29,8 @@ class Widget_Node; class Image_Asset; extern void* const LOAD; -extern Widget_Node *current_widget; // one of the selected ones +extern Node* current_node; // one of the selected ones +extern Widget_Node* current_widget; // one of the selected ones extern const char* subclassname(Node* l); extern int is_name(const char *c); diff --git a/fluid/panels/about_panel.fl b/fluid/panels/about_panel.fl index 7e7feba5f..7ed5f1b4a 100644 --- a/fluid/panels/about_panel.fl +++ b/fluid/panels/about_panel.fl @@ -2,6 +2,7 @@ version 1.0500 header_name {.h} code_name {.cxx} +include_guard {} comment {// // About dialog for the Fast Light Tool Kit (FLTK). // diff --git a/fluid/panels/codeview_panel.fl b/fluid/panels/codeview_panel.fl index 15aa8b818..1d5a0cad6 100644 --- a/fluid/panels/codeview_panel.fl +++ b/fluid/panels/codeview_panel.fl @@ -2,6 +2,7 @@ version 1.0500 header_name {.h} code_name {.cxx} +include_guard {} comment {// // Code dialogs for the Fast Light Tool Kit (FLTK). // diff --git a/fluid/panels/function_panel.cxx b/fluid/panels/function_panel.cxx index 3703cb157..4fea9aa1e 100644 --- a/fluid/panels/function_panel.cxx +++ b/fluid/panels/function_panel.cxx @@ -25,744 +25,6 @@ #include "widgets/Bin_Button.h" #include "widgets/Node_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..; -} - -fld::widget::Code_Editor *code_input=(fld::widget::Code_Editor *)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); - { fld::widget::Code_Editor* o = code_input = new fld::widget::Code_Editor(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); - } // fld::widget::Code_Editor* 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} -}; - -fld::widget::Code_Editor *decl_input=(fld::widget::Code_Editor *)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 fld::widget::Code_Editor(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); - } // fld::widget::Code_Editor* 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 (Fluid.proj.tree.current && Fluid.proj.tree.current->can_have_children()) diff --git a/fluid/panels/function_panel.fl b/fluid/panels/function_panel.fl index d07af5c8c..23240f469 100644 --- a/fluid/panels/function_panel.fl +++ b/fluid/panels/function_panel.fl @@ -2,6 +2,7 @@ version 1.0500 header_name {.h} code_name {.cxx} +include_guard {} snap { ver 1 current_suite FLTK @@ -46,545 +47,6 @@ decl {\#include "widgets/Bin_Button.h"} {private global decl {\#include "widgets/Node_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/Code_Editor.h"} - class {fld::widget::Code_Editor} - } - 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/Code_Editor.h"} - class {fld::widget::Code_Editor} - } - 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; @@ -601,7 +63,7 @@ Function {make_widgetbin()} {open callback {if (Fl::event()==FL_SHORTCUT && Fl::event_key()==FL_Escape) Fluid.quit(); else - Fluid.toggle_widget_bin();} open + Fluid.toggle_widget_bin();} xywh {395 227 600 102} type Single align 80 non_modal visible } { Fl_Group {} { @@ -677,7 +139,7 @@ else } Fl_Button {} { user_data {"Fl_Group"} - callback type_make_cb selected + callback type_make_cb tooltip Group xywh {114 21 24 24} box THIN_UP_BOX code0 {o->image(pixmap[(int)Type::Group]);} class {fld::widget::Bin_Button} diff --git a/fluid/panels/function_panel.h b/fluid/panels/function_panel.h index b7c9f749d..207a9ee84 100644 --- a/fluid/panels/function_panel.h +++ b/fluid/panels/function_panel.h @@ -19,97 +19,11 @@ #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/Code_Editor.h" -extern fld::widget::Code_Editor *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 fld::widget::Code_Editor *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; +#include <FL/Fl_Group.H> +#include <FL/Fl_Button.H> Fl_Window* make_widgetbin(); #endif diff --git a/fluid/panels/template_panel.fl b/fluid/panels/template_panel.fl index be0376c2c..31b54a697 100644 --- a/fluid/panels/template_panel.fl +++ b/fluid/panels/template_panel.fl @@ -2,6 +2,7 @@ version 1.0500 header_name {.h} code_name {.cxx} +include_guard {} comment {// // FLUID template support for the Fast Light Tool Kit (FLTK). // diff --git a/fluid/panels/widget_panel.cxx b/fluid/panels/widget_panel.cxx index 049667d69..5bbde2fec 100644 --- a/fluid/panels/widget_panel.cxx +++ b/fluid/panels/widget_panel.cxx @@ -24,16 +24,17 @@ #include "proj/undo.h" #include "nodes/Window_Node.h" #include "nodes/Grid_Node.h" +#include "nodes/Function_Node.h" #include <FL/Fl_Spinner.H> #include <FL/Fl_Grid.H> #include <FL/Fl_Flex.H> #include <FL/fl_ask.H> #include <FL/Fl_Menu_Item.H> +#include <FL/Fl_File_Chooser.H> #define ZERO_ENTRY 1000 extern const char* when_symbol_name(int n); extern void set_whenmenu(int n); extern void redraw_browser(); -const char *c_check(const char *c, int type=0); extern Fl_Color fl_show_colormap(Fl_Color oldcol); extern void labelcolor_common(Fl_Color c); extern void color_common(Fl_Color c); @@ -45,6 +46,13 @@ extern int numselected; extern Fl_Menu_Item boxmenu[]; extern int haderror; +/** + Allow widget navigation on text fields with Tab. +*/ +static int use_tab_navigation(int, Fl_Text_Editor*) { + return 0; +} + Fl_Double_Window *image_panel_window=(Fl_Double_Window *)0; static void cb_image_panel_window(Fl_Double_Window* o, void* v) { @@ -388,7 +396,7 @@ Fl_Double_Window* make_image_panel() { o->callback((Fl_Callback*)cb_convert); } // Fl_Check_Button* o { Fl_Check_Button* o = new Fl_Check_Button(75, 120, 170, 20, "bind to widget"); - o->tooltip("bind the image to the widget, so it will be deleted automatically"); + o->tooltip("bind the image to the widget, so it will be deleted with the widget"); o->down_box(FL_DOWN_BOX); o->labelsize(11); o->callback((Fl_Callback*)cb_bind); @@ -464,7 +472,7 @@ Fl_Double_Window* make_image_panel() { o->callback((Fl_Callback*)cb_convert1); } // Fl_Check_Button* o { Fl_Check_Button* o = new Fl_Check_Button(75, 260, 170, 20, "bind to widget"); - o->tooltip("bind the image to the widget, so it will be deleted automatically"); + o->tooltip("bind the image to the widget, so it will be deleted with the widget"); o->down_box(FL_DOWN_BOX); o->labelsize(11); o->callback((Fl_Callback*)cb_bind1); @@ -525,10 +533,17 @@ void flex_margin_cb(Fl_Value_Input* i, void* v, void (*load_margin)(Fl_Flex*,Fl_ } } +Fl_Wizard *tabs_wizard=(Fl_Wizard *)0; + +static void cb_tabs_wizard(Fl_Wizard* o, void* v) { + propagate_load((Fl_Group *)o,v); +} + Fl_Tabs *widget_tabs=(Fl_Tabs *)0; static void cb_widget_tabs(Fl_Tabs* o, void* v) { - propagate_load((Fl_Group *)o,v); + if (current_widget) + propagate_load((Fl_Group *)o,v); } Fl_Group *wp_gui_tab=(Fl_Group *)0; @@ -620,7 +635,7 @@ static void cb_Browse1(Fl_Button* o, void* v) { Fl_Group *wp_gui_alignment=(Fl_Group *)0; Fl_Menu_Item menu_[] = { - {" Image Alignment ", 0, 0, (void*)((fl_intptr_t)-1), 1024, (uchar)FL_NORMAL_LABEL, 1, 10, 0}, + {" Image Alignment ", 0, 0, (void*)((fl_intptr_t)-1), 0, (uchar)FL_NORMAL_LABEL, 1, 10, 0}, {"image over text", 0, 0, (void*)((fl_intptr_t)FL_ALIGN_IMAGE_OVER_TEXT), 0, (uchar)FL_NORMAL_LABEL, 0, 9, 0}, {"text over image", 0, 0, (void*)((fl_intptr_t)FL_ALIGN_TEXT_OVER_IMAGE), 0, (uchar)FL_NORMAL_LABEL, 0, 9, 0}, {"text next to image", 0, 0, (void*)((fl_intptr_t)FL_ALIGN_TEXT_NEXT_TO_IMAGE), 0, (uchar)FL_NORMAL_LABEL, 0, 9, 0}, @@ -630,7 +645,7 @@ Fl_Menu_Item menu_[] = { }; Fl_Menu_Item menu_1[] = { - {" Inside && Outside ", 0, 0, (void*)((fl_intptr_t)-1), 1024, (uchar)FL_NORMAL_LABEL, 1, 10, 0}, + {" Inside && Outside ", 0, 0, (void*)((fl_intptr_t)-1), 0, (uchar)FL_NORMAL_LABEL, 1, 10, 0}, {"top left", 0, 0, (void*)((fl_intptr_t)FL_ALIGN_TOP_LEFT), 0, (uchar)FL_NORMAL_LABEL, 0, 9, 0}, {"top", 0, 0, (void*)((fl_intptr_t)FL_ALIGN_TOP), 0, (uchar)FL_NORMAL_LABEL, 0, 9, 0}, {"top right", 0, 0, (void*)((fl_intptr_t)FL_ALIGN_TOP_RIGHT), 0, (uchar)FL_NORMAL_LABEL, 0, 9, 0}, @@ -640,7 +655,7 @@ Fl_Menu_Item menu_1[] = { {"bottom left", 0, 0, (void*)((fl_intptr_t)FL_ALIGN_BOTTOM_LEFT), 0, (uchar)FL_NORMAL_LABEL, 0, 9, 0}, {"bottom", 0, 0, (void*)((fl_intptr_t)FL_ALIGN_BOTTOM), 0, (uchar)FL_NORMAL_LABEL, 0, 9, 0}, {"bottom right", 0, 0, (void*)((fl_intptr_t)FL_ALIGN_BOTTOM_RIGHT), 0, (uchar)FL_NORMAL_LABEL, 0, 9, 0}, - {" Outside Alignment ", 0, 0, (void*)((fl_intptr_t)-1), 1024, (uchar)FL_NORMAL_LABEL, 1, 10, 0}, + {" Outside Alignment ", 0, 0, (void*)((fl_intptr_t)-1), 0, (uchar)FL_NORMAL_LABEL, 1, 10, 0}, {"left top", 0, 0, (void*)((fl_intptr_t)FL_ALIGN_LEFT_TOP), 0, (uchar)FL_NORMAL_LABEL, 0, 9, 0}, {"right top", 0, 0, (void*)((fl_intptr_t)FL_ALIGN_RIGHT_TOP), 0, (uchar)FL_NORMAL_LABEL, 0, 9, 0}, {"left bottom", 0, 0, (void*)((fl_intptr_t)FL_ALIGN_LEFT_BOTTOM), 0, (uchar)FL_NORMAL_LABEL, 0, 9, 0}, @@ -1455,12 +1470,16 @@ static void cb_Active(Fl_Light_Button* o, void* v) { static void cb_Resizable(Fl_Light_Button* o, void* v) { if (v == LOAD) { if (current_widget->is_a(Type::Menu_Item)) { - o->hide(); + o->hide(); return; } - if (numselected > 1) {o->deactivate(); return;} o->show(); o->value(current_widget->resizable()); + if (numselected > 1) { + o->deactivate(); + return; + } + o->activate(); } else { Fluid.proj.undo.checkpoint(); current_widget->resizable(o->value()); @@ -1471,7 +1490,7 @@ static void cb_Resizable(Fl_Light_Button* o, void* v) { static void cb_Headline(Fl_Light_Button* o, void* v) { if (v == LOAD) { if (!current_widget->is_a(Type::Menu_Item)) { - o->hide(); + o->hide(); return; } o->show(); @@ -2247,6 +2266,952 @@ static void cb_widget_tab_grid_child(Grid_Child_Tab* o, void*) { o->callback((Fl_Callback*)propagate_load); } +Fl_Tabs *data_tabs=(Fl_Tabs *)0; + +static void cb_data_tabs(Fl_Tabs* o, void* v) { + if (current_node && current_node->is_a(Type::Data)) + propagate_load((Fl_Group *)o,v); +} + +Fl_Group *data_tabs_data=(Fl_Group *)0; + +static void cb_15(Fl_Choice* o, void* v) { + if (!current_node || !current_node->is_a(Type::Data)) return; + Data_Node* nd = (Data_Node*)current_node; + + if (v == LOAD) { + if (!nd->is_in_class()) { + o->value(nd->output_file()); + o->show(); + } else { + o->hide(); + } + } else { + if (!nd->is_in_class()) { + if (nd->output_file() != o->value()) { + nd->output_file(o->value()); + Fluid.proj.set_modflag(1); + redraw_browser(); + } + } + } +} + +Fl_Menu_Item menu_5[] = { + {"in source file only", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, + {"in header file only", 0, 0, 0, 16, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, + {"\"static\" in source file", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, + {"in source and \"extern\" in header", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, + {0,0,0,0,0,0,0,0,0} +}; + +static void cb_16(Fl_Choice* o, void* v) { + if (!current_node || !current_node->is_a(Type::Data)) return; + Data_Node* nd = (Data_Node*)current_node; + + if (v == LOAD) { + if (nd->is_in_class()) { + o->value(nd->visibility()); + o->show(); + } else { + o->hide(); + } + } else { + if (nd->is_in_class()) { + if (nd->visibility() != o->value()) { + nd->visibility(o->value()); + Fluid.proj.set_modflag(1); + redraw_browser(); + } + } + } +} + +Fl_Menu_Item menu_6[] = { + {"private", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, + {"public", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, + {"protected", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, + {0,0,0,0,0,0,0,0,0} +}; + +static void cb_17(Fl_Choice* o, void* v) { + if (!current_node || !current_node->is_a(Type::Data)) return; + Data_Node* nd = (Data_Node*)current_node; + + if (v == LOAD) { + o->value(nd->output_format()); + } else { + if (nd->output_format() != o->value()) { + nd->output_format( o->value() ); + Fluid.proj.set_modflag(1); + } + } +} + +Fl_Menu_Item menu_7[] = { + {"binary: unsigned char[]", 0, 0, (void*)(0), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, + {"text: const char*", 0, 0, (void*)(1), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, + {"compressed: unsigned char[]", 0, 0, (void*)(2), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, + {"binary: std::vector<uint8_t>", 0, 0, (void*)(3), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, + {"text: std::string", 0, 0, (void*)(4), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, + {"compressed: std::vector<uint8_t>", 0, 0, (void*)(5), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, + {0,0,0,0,0,0,0,0,0} +}; + +static void cb_Name(Fl_Input* o, void* v) { + if (!current_node || !current_node->is_a(Type::Data)) return; + Data_Node* nd = (Data_Node*)current_node; + + if (v == LOAD) { + o->value( nd->name() ); + the_panel->label("Inline Data Properties"); + } else { + const char *nn = nd->name(); + if ( ( nn && (strcmp(nn, o->value()) != 0)) + || (!nn && (strcmp("", o->value()) != 0)) ) + { + nd->name( o->value() ); + Fluid.proj.set_modflag(1); + redraw_browser(); + } + } +} + +Fl_Input *wp_data_filename=(Fl_Input *)0; + +static void cb_wp_data_filename(Fl_Input* o, void* v) { + if (!current_node || !current_node->is_a(Type::Data)) return; + Data_Node* nd = (Data_Node*)current_node; + + if (v == LOAD) { + const char *fn = nd->filename(); + o->value( fn ? fn : "" ); + } else { + const char *c = o->value(); + const char *fn = nd->filename(); + if ( ( fn && (strcmp(fn, c) != 0)) + || (!fn && (strcmp("", c) != 0)) ) + { + nd->filename(c); + Fluid.proj.set_modflag(1); + } + } +} + +static void cb_fileopen(Fl_Button*, void* v) { + if (v != LOAD) { + Fluid.proj.enter_project_dir(); + const char *fn = fl_file_chooser("Load Inline Data", + nullptr, wp_data_filename->value(), 1); + Fluid.proj.leave_project_dir(); + if (fn) { + if (strcmp(fn, wp_data_filename->value())) { + Fluid.proj.set_modflag(1); + wp_data_filename->value(fn); + wp_data_filename->do_callback(); + } + } + } +} + +static void cb_Comment(Fl_Text_Editor* o, void* v) { + if (!current_node || !current_node->is_a(Type::Data)) return; + Data_Node* nd = (Data_Node*)current_node; + + if (v == LOAD) { + const char *cmttext = nd->comment(); + o->buffer()->text( cmttext ? cmttext : "" ); + } else { + char *c = o->buffer()->text(); + const char *nn = nd->comment(); + if ( ( nn && (strcmp(nn, c) != 0)) + || (!nn && (strcmp("", c) != 0)) ) + { + nd->comment(c); + Fluid.proj.set_modflag(1); + redraw_browser(); + } + free(c); + } +} + +Fl_Tabs *comment_tabs=(Fl_Tabs *)0; + +static void cb_comment_tabs(Fl_Tabs* o, void* v) { + if (current_node && current_node->is_a(Type::Comment)) + propagate_load((Fl_Group *)o,v); +} + +Fl_Group *comment_tabs_comment=(Fl_Group *)0; + +Fl_Text_Editor *comment_tabs_name=(Fl_Text_Editor *)0; + +static void cb_comment_tabs_name(Fl_Text_Editor* o, void* v) { + if (!current_node || !current_node->is_a(Type::Comment)) return; + Comment_Node* nd = (Comment_Node*)current_node; + + if (v == LOAD) { + the_panel->label("Comment Properties"); + const char *cmttext = nd->name(); + o->buffer()->text( cmttext ? cmttext : "" ); + } else { + char *c = o->buffer()->text(); + const char *nn = nd->name(); + if ( ( nn && (strcmp(nn, c) != 0)) + || (!nn && (strcmp("", c) != 0)) ) + { + nd->name(c); + Fluid.proj.set_modflag(1); + redraw_browser(); + } + free(c); + } +} + +Fl_Menu_Button *comment_predefined_2=(Fl_Menu_Button *)0; + +static void cb_comment_predefined_2(Fl_Menu_Button* o, void* v) { + if (!current_node || !current_node->is_a(Type::Comment)) return; + + static char itempath[256]; + static int last_selected_item { 0 }; + + if (v == LOAD) { + int i=0, n=0, version = 0; + Fl_Preferences menu(Fl_Preferences::USER_L, "fltk.org", "fluid_comments_menu"); + o->clear(); + o->add("_Edit/Add current comment..."); + o->add("_Edit/Remove last selection..."); + menu.get("version", version, -1); + if (version < 10400) load_comments_preset(menu); + menu.get("n", n, 0); + for (i=0;i<n;i++) { + char *text; + menu.get(Fl_Preferences::Name(i), text, ""); + o->add(text); + free(text); + } + } else { + if (o->value()==1) { + // add the current comment to the database + const char *xname = fl_input( + "Please enter a name to reference the current\ncomment in your database.\n\n" + "Use forward slashes '/' to create submenus.", + "My Comment"); + if (xname) { + char *name = fl_strdup(xname); + for (char*s=name;*s;s++) if (*s==':') *s = ';'; + int n; + Fl_Preferences db(Fl_Preferences::USER_L, "fltk.org", "fluid_comments"); + db.set(name, comment_tabs_name->buffer()->text()); + Fl_Preferences menu(Fl_Preferences::USER_L, "fltk.org", "fluid_comments_menu"); + menu.get("n", n, 0); + menu.set(Fl_Preferences::Name(n), name); + menu.set("n", ++n); + o->add(name); + free(name); + } + } else if (o->value()==2) { + // remove the last selected comment from the database + if (itempath[0]==0 || last_selected_item==0) { + fl_message("Please select an entry from this menu first."); + } else if (fl_choice("Are you sure that you want to delete the entry\n" + "\"%s\"\nfrom the database?", "Cancel", "Delete", + nullptr, itempath)) { + Fl_Preferences db(Fl_Preferences::USER_L, "fltk.org", "fluid_comments"); + db.deleteEntry(itempath); + o->remove(last_selected_item); + Fl_Preferences menu(Fl_Preferences::USER_L, "fltk.org", "fluid_comments_menu"); + int i, n; + for (i=4, n=0; i<o->size(); i++) { + const Fl_Menu_Item *mi = o->menu()+i; + if (o->item_pathname(itempath, 255, mi)==0) { + if (itempath[0]=='/') memmove(itempath, itempath+1, 255); + if (itempath[0]) menu.set(Fl_Preferences::Name(n++), itempath); + } + } + menu.set("n", n); + } + } else { + // load the selected comment from the database + if (o->item_pathname(itempath, 255)==0) { + if (itempath[0]=='/') memmove(itempath, itempath+1, 255); + Fl_Preferences db(Fl_Preferences::USER_L, "fltk.org", "fluid_comments"); + char *text; + db.get(itempath, text, "(no text found in data base)"); + comment_tabs_name->buffer()->text(text); + comment_tabs_name->do_callback(); + free(text); + last_selected_item = o->value(); + } + } + } +} + +Fl_Button *comment_load_2=(Fl_Button *)0; + +static void cb_comment_load_2(Fl_Button*, void* v) { + // load a comment from disk + if (v != LOAD) { + fl_file_chooser_ok_label("Load"); + const char *fname = fl_file_chooser("Pick a comment", nullptr, nullptr); + fl_file_chooser_ok_label(nullptr); + if (fname) { + if (comment_tabs_name->buffer()->loadfile(fname)) { + fl_alert("Error loading file\n%s", fname); + } + comment_tabs_name->do_callback(); + } + } +} + +static void cb_output(Fl_Check_Button* o, void* v) { + if (!current_node || !current_node->is_a(Type::Comment)) return; + Comment_Node* nd = (Comment_Node*)current_node; + + if (v == LOAD) { + o->value(nd->in_h()); + } else { + if (((int)nd->in_h()) != o->value()) { + nd->in_h( o->value() ); + Fluid.proj.set_modflag(1); + } + } +} + +static void cb_output1(Fl_Check_Button* o, void* v) { + if (!current_node || !current_node->is_a(Type::Comment)) return; + Comment_Node* nd = (Comment_Node*)current_node; + + if (v == LOAD) { + o->value(nd->in_c()); + } else { + if (((int)nd->in_c()) != o->value()) { + nd->in_c( o->value() ); + Fluid.proj.set_modflag(1); + } + } +} + +Fl_Tabs *class_tabs=(Fl_Tabs *)0; + +static void cb_class_tabs(Fl_Tabs* o, void* v) { + if (current_node && current_node->is_a(Type::Class)) + propagate_load((Fl_Group *)o,v); +} + +Fl_Group *class_tabs_main=(Fl_Group *)0; + +static void cb_18(Fl_Choice* o, void* v) { + if (!current_node || !current_node->is_a(Type::Class)) return; + Class_Node* nd = (Class_Node*)current_node; + + if (v == LOAD) { + if (nd->is_in_class()) { + o->value(nd->visibility()); + o->activate(); + } else { + o->deactivate(); + } + } else { + if (nd->is_in_class()) { + if (nd->visibility() != o->value()) { + nd->visibility(o->value()); + Fluid.proj.set_modflag(1); + redraw_browser(); + } + } + } +} + +Fl_Menu_Item menu_8[] = { + {"private", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, + {"public", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, + {"protected", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, + {0,0,0,0,0,0,0,0,0} +}; + +static void cb_Attribute(Fl_Input* o, void* v) { + if (!current_node || !current_node->is_a(Type::Class)) return; + Class_Node* nd = (Class_Node*)current_node; + + if (v == LOAD) { + o->value( nd->prefix() ); + } else { + const char *nn = nd->prefix(); + if ( ( nn && (strcmp(nn, o->value()) != 0)) + || (!nn && (strcmp("", o->value()) != 0)) ) + { + nd->prefix( o->value() ); + Fluid.proj.set_modflag(1); + } + } +} + +static void cb_Class(Fl_Input* o, void* v) { + if (!current_node || !current_node->is_a(Type::Class)) return; + Class_Node* nd = (Class_Node*)current_node; + + if (v == LOAD) { + the_panel->label("Class Properties"); + o->value( nd->name() ); + } else { + const char *nn = nd->name(); + if ( ( nn && (strcmp(nn, o->value()) != 0)) + || (!nn && (strcmp("", o->value()) != 0)) ) + { + nd->name( o->value() ); + Fluid.proj.set_modflag(1); + redraw_browser(); + } + } +} + +static void cb_Base(Fl_Input* o, void* v) { + if (!current_node || !current_node->is_a(Type::Class)) return; + Class_Node* nd = (Class_Node*)current_node; + + if (v == LOAD) { + o->value( nd->base_class_name() ); + } else { + const char *nn = nd->base_class_name(); + if ( ( nn && (strcmp(nn, o->value()) != 0)) + || (!nn && (strcmp("", o->value()) != 0)) ) + { + nd->base_class_name( o->value() ); + Fluid.proj.set_modflag(1); + } + } +} + +static void cb_Comment1(Fl_Text_Editor* o, void* v) { + if (!current_node || !current_node->is_a(Type::Class)) return; + Class_Node* nd = (Class_Node*)current_node; + + if (v == LOAD) { + const char *cmttext = nd->comment(); + o->buffer()->text( cmttext ? cmttext : "" ); + } else { + char *c = o->buffer()->text(); + const char *nn = nd->comment(); + if ( ( nn && (strcmp(nn, c) != 0)) + || (!nn && (strcmp("", c) != 0)) ) + { + nd->comment(c); + Fluid.proj.set_modflag(1); + redraw_browser(); + } + free(c); + } +} + +Fl_Tabs *declblock_tabs=(Fl_Tabs *)0; + +static void cb_declblock_tabs(Fl_Tabs* o, void* v) { + if (current_node && current_node->is_a(Type::DeclBlock)) + propagate_load((Fl_Group *)o,v); +} + +Fl_Group *declblock_tabs_main=(Fl_Group *)0; + +static void cb_Start(Fl_Input* o, void* v) { + if (!current_node || !current_node->is_a(Type::DeclBlock)) return; + DeclBlock_Node* nd = (DeclBlock_Node*)current_node; + + if (v == LOAD) { + the_panel->label("Declaration Block Properties"); + o->value( nd->name() ); + } else { + const char *nn = nd->name(); + if ( ( nn && (strcmp(nn, o->value()) != 0)) + || (!nn && (strcmp("", o->value()) != 0)) ) + { + nd->name( o->value() ); + Fluid.proj.set_modflag(1); + redraw_browser(); + } + } +} + +static void cb_End(Fl_Input* o, void* v) { + if (!current_node || !current_node->is_a(Type::DeclBlock)) return; + DeclBlock_Node* nd = (DeclBlock_Node*)current_node; + + if (v == LOAD) { + o->value( nd->end_code() ); + } else { + const char *nn = nd->end_code(); + if ( ( nn && (strcmp(nn, o->value()) != 0)) + || (!nn && (strcmp("", o->value()) != 0)) ) + { + nd->end_code( o->value() ); + Fluid.proj.set_modflag(1); + } + } +} + +static void cb_implementations(Fl_Check_Button* o, void* v) { + if (!current_node || !current_node->is_a(Type::DeclBlock)) return; + DeclBlock_Node* nd = (DeclBlock_Node*)current_node; + + if (v == LOAD) { + int f = ((nd->write_map() & DeclBlock_Node::CODE_IN_SOURCE) != 0); + o->value(f); + } else { + int f = ((nd->write_map() & DeclBlock_Node::CODE_IN_SOURCE) != 0); + if (f != o->value()) { + if (o->value()) + nd->write_map( nd->write_map() | DeclBlock_Node::CODE_IN_SOURCE ); + else + nd->write_map( nd->write_map() & ~DeclBlock_Node::CODE_IN_SOURCE ); + Fluid.proj.set_modflag(1); + } + } +} + +static void cb_static(Fl_Check_Button* o, void* v) { + if (!current_node || !current_node->is_a(Type::DeclBlock)) return; + DeclBlock_Node* nd = (DeclBlock_Node*)current_node; + + if (v == LOAD) { + int f = ((nd->write_map() & DeclBlock_Node::STATIC_IN_SOURCE) != 0); + o->value(f); + } else { + int f = ((nd->write_map() & DeclBlock_Node::STATIC_IN_SOURCE) != 0); + if (f != o->value()) { + if (o->value()) + nd->write_map( nd->write_map() | DeclBlock_Node::STATIC_IN_SOURCE ); + else + nd->write_map( nd->write_map() & ~DeclBlock_Node::STATIC_IN_SOURCE ); + Fluid.proj.set_modflag(1); + } + } +} + +static void cb_forward(Fl_Check_Button* o, void* v) { + if (!current_node || !current_node->is_a(Type::DeclBlock)) return; + DeclBlock_Node* nd = (DeclBlock_Node*)current_node; + + if (v == LOAD) { + int f = ((nd->write_map() & DeclBlock_Node::CODE_IN_HEADER) != 0); + o->value(f); + } else { + int f = ((nd->write_map() & DeclBlock_Node::CODE_IN_HEADER) != 0); + if (f != o->value()) { + if (o->value()) + nd->write_map( nd->write_map() | DeclBlock_Node::CODE_IN_HEADER ); + else + nd->write_map( nd->write_map() & ~DeclBlock_Node::CODE_IN_HEADER ); + Fluid.proj.set_modflag(1); + } + } +} + +static void cb_preprecessor(Fl_Check_Button* o, void* v) { + if (!current_node || !current_node->is_a(Type::DeclBlock)) return; + DeclBlock_Node* nd = (DeclBlock_Node*)current_node; + + if (v == LOAD) { + int f = ((nd->write_map() & DeclBlock_Node::STATIC_IN_HEADER) != 0); + o->value(f); + } else { + int f = ((nd->write_map() & DeclBlock_Node::STATIC_IN_HEADER) != 0); + if (f != o->value()) { + if (o->value()) + nd->write_map( nd->write_map() | DeclBlock_Node::STATIC_IN_HEADER ); + else + nd->write_map( nd->write_map() & ~DeclBlock_Node::STATIC_IN_HEADER ); + Fluid.proj.set_modflag(1); + } + } +} + +static void cb_Comment2(Fl_Text_Editor* o, void* v) { + if (!current_node || !current_node->is_a(Type::DeclBlock)) return; + DeclBlock_Node* nd = (DeclBlock_Node*)current_node; + + if (v == LOAD) { + const char *cmttext = nd->comment(); + o->buffer()->text( cmttext ? cmttext : "" ); + } else { + char *c = o->buffer()->text(); + const char *nn = nd->comment(); + if ( ( nn && (strcmp(nn, c) != 0)) + || (!nn && (strcmp("", c) != 0)) ) + { + nd->comment(c); + Fluid.proj.set_modflag(1); + redraw_browser(); + } + free(c); + } +} + +Fl_Tabs *decl_tabs=(Fl_Tabs *)0; + +static void cb_decl_tabs(Fl_Tabs* o, void* v) { + if (current_node && current_node->is_a(Type::Decl)) + propagate_load((Fl_Group *)o,v); +} + +Fl_Group *decl_tabs_main=(Fl_Group *)0; + +static void cb_19(Fl_Choice* o, void* v) { + if (!current_node || !current_node->is_a(Type::Decl)) return; + Decl_Node* nd = (Decl_Node*)current_node; + + if (v == LOAD) { + if (!nd->is_in_class()) { + o->value(nd->output_file()); + o->show(); + } else { + o->hide(); + } + } else { + if (!nd->is_in_class()) { + if (nd->output_file() != o->value()) { + nd->output_file(o->value()); + Fluid.proj.set_modflag(1); + redraw_browser(); + } + } + } +} + +Fl_Menu_Item menu_9[] = { + {"in source file only", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, + {"in header file only", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, + {"\"static\" in source file", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, + {"in source and \"extern\" in header", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, + {0,0,0,0,0,0,0,0,0} +}; + +static void cb_1a(Fl_Choice* o, void* v) { + if (!current_node || !current_node->is_a(Type::Decl)) return; + Decl_Node* nd = (Decl_Node*)current_node; + + if (v == LOAD) { + if (nd->is_in_class()) { + o->value(nd->visibility()); + o->show(); + } else { + o->hide(); + } + } else { + if (nd->is_in_class()) { + if (nd->visibility() != o->value()) { + nd->visibility(o->value()); + Fluid.proj.set_modflag(1); + redraw_browser(); + } + } + } +} + +Fl_Menu_Item menu_a[] = { + {"private", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, + {"public", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, + {"protected", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, + {0,0,0,0,0,0,0,0,0} +}; + +static void cb_1b(Fl_Tile* o, void* v) { + propagate_load(o, v); +} + +static void cb_Declaration(fld::widget::Code_Editor* o, void* v) { + if (!current_node || !current_node->is_a(Type::Decl)) return; + Decl_Node* nd = (Decl_Node*)current_node; + + if (v == LOAD) { + the_panel->label("Declaration Properties"); + const char *cmttext = nd->name(); + o->buffer()->text( cmttext ? cmttext : "" ); + } else { + char *c = o->buffer()->text(); + const char *nn = nd->name(); + if ( ( nn && (strcmp(nn, c) != 0)) + || (!nn && (strcmp("", c) != 0)) ) + { + nd->name(c); + Fluid.proj.set_modflag(1); + redraw_browser(); + } + free(c); + } +} + +static void cb_Comment3(Fl_Text_Editor* o, void* v) { + if (!current_node || !current_node->is_a(Type::Decl)) return; + Decl_Node* nd = (Decl_Node*)current_node; + + if (v == LOAD) { + const char *cmttext = nd->comment(); + o->buffer()->text( cmttext ? cmttext : "" ); + } else { + char *c = o->buffer()->text(); + const char *nn = nd->comment(); + if ( ( nn && (strcmp(nn, c) != 0)) + || (!nn && (strcmp("", c) != 0)) ) + { + nd->comment(c); + Fluid.proj.set_modflag(1); + redraw_browser(); + } + free(c); + } +} + +Fl_Tabs *codeblock_tabs=(Fl_Tabs *)0; + +static void cb_codeblock_tabs(Fl_Tabs* o, void* v) { + if (current_node && current_node->is_a(Type::CodeBlock)) + propagate_load((Fl_Group *)o,v); +} + +Fl_Group *codeblock_tabs_main=(Fl_Group *)0; + +static void cb_Start1(Fl_Input* o, void* v) { + if (!current_node || !current_node->is_a(Type::CodeBlock)) return; + CodeBlock_Node* nd = (CodeBlock_Node*)current_node; + + if (v == LOAD) { + o->value( nd->name() ); + the_panel->label("Code Block Properties"); + } else { + const char *nn = nd->name(); + if ( ( nn && (strcmp(nn, o->value()) != 0)) + || (!nn && (strcmp("", o->value()) != 0)) ) + { + nd->name( o->value() ); + Fluid.proj.set_modflag(1); + redraw_browser(); + } + } +} + +static void cb_End1(Fl_Input* o, void* v) { + if (!current_node || !current_node->is_a(Type::CodeBlock)) return; + CodeBlock_Node* nd = (CodeBlock_Node*)current_node; + + if (v == LOAD) { + o->value( nd->end_code() ); + } else { + const char *nn = nd->end_code(); + if ( ( nn && (strcmp(nn, o->value()) != 0)) + || (!nn && (strcmp("", o->value()) != 0)) ) + { + nd->end_code( o->value() ); + Fluid.proj.set_modflag(1); + } + } +} + +static void cb_Comment4(Fl_Text_Editor* o, void* v) { + if (!current_node || !current_node->is_a(Type::CodeBlock)) return; + CodeBlock_Node* nd = (CodeBlock_Node*)current_node; + + if (v == LOAD) { + const char *cmttext = nd->comment(); + o->buffer()->text( cmttext ? cmttext : "" ); + } else { + char *c = o->buffer()->text(); + const char *nn = nd->comment(); + if ( ( nn && (strcmp(nn, c) != 0)) + || (!nn && (strcmp("", c) != 0)) ) + { + nd->comment(c); + Fluid.proj.set_modflag(1); + redraw_browser(); + } + free(c); + } +} + +Fl_Tabs *code_tabs=(Fl_Tabs *)0; + +static void cb_code_tabs(Fl_Tabs* o, void* v) { + if (current_node && current_node->is_a(Type::Code)) + propagate_load((Fl_Group *)o,v); +} + +Fl_Group *code_tabs_main=(Fl_Group *)0; + +static void cb_1c(fld::widget::Code_Editor* o, void* v) { + if (!current_node || !current_node->is_a(Type::Code)) return; + Code_Node* nd = (Code_Node*)current_node; + + if (v == LOAD) { + the_panel->label("Code Editor"); + const char *cmttext = nd->name(); + o->buffer()->text( cmttext ? cmttext : "" ); + o->insert_position(nd->cursor_position_); + o->scroll(nd->code_input_scroll_row, nd->code_input_scroll_col); + } else { + char *c = o->buffer()->text(); + const char *nn = nd->name(); + if ( ( nn && (strcmp(nn, c) != 0)) + || (!nn && (strcmp("", c) != 0)) ) + { + nd->name(c); + Fluid.proj.set_modflag(1); + redraw_browser(); + } + nd->cursor_position_ = o->insert_position(); + nd->code_input_scroll_row = o->scroll_row(); + nd->code_input_scroll_col = o->scroll_col(); + free(c); + } +} + +Fl_Tabs *func_tabs=(Fl_Tabs *)0; + +static void cb_func_tabs(Fl_Tabs* o, void* v) { + if (current_node && current_node->is_a(Type::Function)) + propagate_load((Fl_Group *)o,v); +} + +Fl_Group *func_tabs_main=(Fl_Group *)0; + +static void cb_1d(Fl_Choice* o, void* v) { + if (!current_node || !current_node->is_a(Type::Function)) return; + Function_Node* nd = (Function_Node*)current_node; + + if (v == LOAD) { + if (!nd->is_in_class()) { + o->value(nd->visibility()); + o->show(); + } else { + o->hide(); + } + } else { + if (!nd->is_in_class()) { + if (nd->visibility() != o->value()) { + nd->visibility(o->value()); + Fluid.proj.set_modflag(1); + redraw_browser(); + } + } + } +} + +Fl_Menu_Item menu_b[] = { + {"static", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, + {"global", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, + {"local", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, + {0,0,0,0,0,0,0,0,0} +}; + +static void cb_1e(Fl_Choice* o, void* v) { + if (!current_node || !current_node->is_a(Type::Function)) return; + Function_Node* nd = (Function_Node*)current_node; + + if (v == LOAD) { + if (nd->is_in_class()) { + o->value(nd->visibility()); + o->show(); + } else { + o->hide(); + } + } else { + if (nd->is_in_class()) { + if (nd->visibility() != o->value()) { + nd->visibility(o->value()); + Fluid.proj.set_modflag(1); + redraw_browser(); + } + } + } +} + +Fl_Menu_Item menu_c[] = { + {"private", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, + {"public", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, + {"protected", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, + {0,0,0,0,0,0,0,0,0} +}; + +static void cb_declare(Fl_Check_Button* o, void* v) { + if (!current_node || !current_node->is_a(Type::Function)) return; + Function_Node* nd = (Function_Node*)current_node; + + if (v == LOAD) { + o->value(nd->declare_c()); + } else { + if (nd->declare_c() != o->value()) { + nd->declare_c( o->value() ); + Fluid.proj.set_modflag(1); + } + } +} + +static void cb_1f(Fl_Tile* o, void* v) { + propagate_load(o, v); +} + +static void cb_Function(fld::widget::Code_Editor* o, void* v) { + if (!current_node || !current_node->is_a(Type::Function)) return; + Function_Node* nd = (Function_Node*)current_node; + + if (v == LOAD) { + the_panel->label("Function Properties"); + const char *cmttext = nd->name(); + o->buffer()->text( cmttext ? cmttext : "" ); + } else { + char *c = o->buffer()->text(); + const char *nn = nd->name(); + if ( ( nn && (strcmp(nn, c) != 0)) + || (!nn && (strcmp("", c) != 0)) ) + { + nd->name(c); + Fluid.proj.set_modflag(1); + redraw_browser(); + } + free(c); + } +} + +static void cb_Return(fld::widget::Code_Editor* o, void* v) { + if (!current_node || !current_node->is_a(Type::Function)) return; + Function_Node* nd = (Function_Node*)current_node; + + if (v == LOAD) { + const char *cmttext = nd->return_type(); + o->buffer()->text( cmttext ? cmttext : "" ); + } else { + char *c = o->buffer()->text(); + const char *nn = nd->return_type(); + if ( ( nn && (strcmp(nn, c) != 0)) + || (!nn && (strcmp("", c) != 0)) ) + { + nd->return_type(c); + Fluid.proj.set_modflag(1); + } + free(c); + } +} + +static void cb_Comment5(Fl_Text_Editor* o, void* v) { + if (!current_node || !current_node->is_a(Type::Function)) return; + Function_Node* nd = (Function_Node*)current_node; + + if (v == LOAD) { + const char *cmttext = nd->comment(); + o->buffer()->text( cmttext ? cmttext : "" ); + } else { + char *c = o->buffer()->text(); + const char *nn = nd->comment(); + if ( ( nn && (strcmp(nn, c) != 0)) + || (!nn && (strcmp("", c) != 0)) ) + { + nd->comment(c); + Fluid.proj.set_modflag(1); + redraw_browser(); + } + free(c); + } +} + Fl_Tabs *widget_tabs_repo=(Fl_Tabs *)0; Fl_Button *wLiveMode=(Fl_Button *)0; @@ -2264,944 +3229,1544 @@ Fl_Double_Window* make_widget_panel() { 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); + { tabs_wizard = new Fl_Wizard(10, 10, 400, 350); + tabs_wizard->box(FL_NO_BOX); + tabs_wizard->labelsize(11); + tabs_wizard->callback((Fl_Callback*)cb_tabs_wizard); + { Fl_Tabs* o = widget_tabs = new Fl_Tabs(10, 10, 400, 350); + widget_tabs->selection_color((Fl_Color)12); + widget_tabs->labelsize(11); + widget_tabs->labelcolor(FL_BACKGROUND2_COLOR); + widget_tabs->callback((Fl_Callback*)cb_widget_tabs); + widget_tabs->when(FL_WHEN_NEVER); + { wp_gui_tab = new Fl_Group(10, 30, 400, 330, "GUI"); + wp_gui_tab->labelsize(11); + wp_gui_tab->callback((Fl_Callback*)propagate_load); + wp_gui_tab->when(FL_WHEN_NEVER); + { Fl_Group* o = new Fl_Group(95, 40, 309, 20, "Label:"); o->labelfont(1); o->labelsize(11); - o->textsize(11); - o->callback((Fl_Callback*)labeltype_cb); - o->menu(labeltypemenu); - } // Fl_Choice* o - o->end(); - } // Fl_Group* o - { Fl_Group* o = new Fl_Group(95, 65, 309, 20, "Image:"); - o->labelfont(1); - o->labelsize(11); - o->callback((Fl_Callback*)propagate_load); - o->align(Fl_Align(FL_ALIGN_LEFT)); - { widget_image_input = new Fl_Input(95, 65, 200, 20); - widget_image_input->tooltip("The active image for the widget."); - widget_image_input->labelfont(1); - widget_image_input->labelsize(11); - widget_image_input->textsize(11); - widget_image_input->callback((Fl_Callback*)cb_widget_image_input); - Fl_Group::current()->resizable(widget_image_input); - } // Fl_Input* widget_image_input - { Fl_Button* o = new Fl_Button(295, 65, 89, 20, "Browse..."); - o->tooltip("Click to choose the active image."); - o->labelsize(11); - o->callback((Fl_Callback*)cb_Browse); - o->align(Fl_Align(256)); - } // Fl_Button* o - { Fl_Button* o = new Fl_Button(384, 65, 20, 20, "..."); - o->tooltip("more image options"); - o->callback((Fl_Callback*)cb_); - } // Fl_Button* o - o->end(); - } // Fl_Group* o - { Fl_Group* o = new Fl_Group(95, 90, 309, 20, "Inactive:"); - o->labelfont(1); - o->labelsize(11); - o->callback((Fl_Callback*)propagate_load); - o->align(Fl_Align(FL_ALIGN_LEFT)); - { widget_deimage_input = new Fl_Input(95, 90, 200, 20); - widget_deimage_input->tooltip("The inactive image for the widget."); - widget_deimage_input->labelfont(1); - widget_deimage_input->labelsize(11); - widget_deimage_input->textsize(11); - widget_deimage_input->callback((Fl_Callback*)cb_widget_deimage_input); - Fl_Group::current()->resizable(widget_deimage_input); - } // Fl_Input* widget_deimage_input - { Fl_Button* o = new Fl_Button(295, 90, 89, 20, "Browse..."); - o->tooltip("Click to choose the inactive image."); - o->labelsize(11); - o->callback((Fl_Callback*)cb_Browse1); - } // Fl_Button* o - o->end(); - } // Fl_Group* o - { wp_gui_alignment = new Fl_Group(95, 115, 312, 20, "Alignment:"); - wp_gui_alignment->labelfont(1); - wp_gui_alignment->labelsize(11); - wp_gui_alignment->callback((Fl_Callback*)propagate_load); - wp_gui_alignment->align(Fl_Align(FL_ALIGN_LEFT)); - { Fl_Button* o = new Fl_Button(95, 115, 30, 20, "Clip"); - o->tooltip("Clip the label to the inside of the widget."); - o->type(1); - o->selection_color(FL_INACTIVE_COLOR); - o->labelsize(11); - o->callback((Fl_Callback*)align_cb, (void*)((fl_intptr_t)FL_ALIGN_CLIP)); - o->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); - } // Fl_Button* o - { Fl_Button* o = new Fl_Button(130, 115, 38, 20, "Wrap"); - o->tooltip("Wrap the label text."); - o->type(1); - o->selection_color(FL_INACTIVE_COLOR); - o->labelsize(11); - o->callback((Fl_Callback*)align_cb, (void*)((fl_intptr_t)FL_ALIGN_WRAP)); - } // Fl_Button* o - { Fl_Button* o = new Fl_Button(278, 115, 20, 20, "@-1<-"); - o->tooltip("Left-align the label."); - o->type(1); - o->selection_color(FL_INACTIVE_COLOR); - o->labelsize(11); - o->labelcolor(FL_INACTIVE_COLOR); - o->callback((Fl_Callback*)align_cb, (void*)((fl_intptr_t)FL_ALIGN_LEFT)); - o->hide(); - } // Fl_Button* o - { Fl_Button* o = new Fl_Button(303, 115, 20, 20, "@-1->"); - o->tooltip("Right-align the label."); - o->type(1); - o->selection_color(FL_INACTIVE_COLOR); - o->labelsize(11); - o->labelcolor(FL_INACTIVE_COLOR); - o->callback((Fl_Callback*)align_cb, (void*)((fl_intptr_t)FL_ALIGN_RIGHT)); - o->hide(); - } // Fl_Button* o - { Fl_Button* o = new Fl_Button(328, 115, 20, 20, "@-18"); - o->tooltip("Top-align the label."); - o->type(1); - o->selection_color(FL_INACTIVE_COLOR); - o->labelsize(11); - o->labelcolor(FL_INACTIVE_COLOR); - o->callback((Fl_Callback*)align_cb, (void*)((fl_intptr_t)FL_ALIGN_TOP)); - o->hide(); - } // Fl_Button* o - { Fl_Button* o = new Fl_Button(353, 115, 20, 20, "@-12"); - o->tooltip("Bottom-align the label."); - o->type(1); - o->selection_color(FL_INACTIVE_COLOR); - o->labelsize(11); - o->labelcolor(FL_INACTIVE_COLOR); - o->callback((Fl_Callback*)align_cb, (void*)((fl_intptr_t)FL_ALIGN_BOTTOM)); - o->hide(); - } // Fl_Button* o - { Fl_Choice* o = new Fl_Choice(172, 115, 116, 20); - o->down_box(FL_BORDER_BOX); - o->labelsize(11); - o->textsize(11); - o->callback((Fl_Callback*)align_text_image_cb); - o->menu(menu_); - } // Fl_Choice* o - { Fl_Choice* o = new Fl_Choice(293, 115, 86, 20); - o->down_box(FL_BORDER_BOX); + o->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->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->callback((Fl_Callback*)propagate_load); + o->align(Fl_Align(FL_ALIGN_LEFT)); + { widget_image_input = new Fl_Input(95, 65, 200, 20); + widget_image_input->tooltip("The active image for the widget."); + widget_image_input->labelfont(1); + widget_image_input->labelsize(11); + widget_image_input->textsize(11); + widget_image_input->callback((Fl_Callback*)cb_widget_image_input); + Fl_Group::current()->resizable(widget_image_input); + } // Fl_Input* widget_image_input + { Fl_Button* o = new Fl_Button(295, 65, 89, 20, "Browse..."); + o->tooltip("Click to choose the active image."); + o->labelsize(11); + o->callback((Fl_Callback*)cb_Browse); + o->align(Fl_Align(256)); + } // Fl_Button* o + { Fl_Button* o = new Fl_Button(384, 65, 20, 20, "..."); + o->tooltip("more image options"); + o->callback((Fl_Callback*)cb_); + } // Fl_Button* o + o->end(); + } // Fl_Group* o + { Fl_Group* o = new Fl_Group(95, 90, 309, 20, "Inactive:"); + o->labelfont(1); o->labelsize(11); - o->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->callback((Fl_Callback*)propagate_load); + o->align(Fl_Align(FL_ALIGN_LEFT)); + { widget_deimage_input = new Fl_Input(95, 90, 200, 20); + widget_deimage_input->tooltip("The inactive image for the widget."); + widget_deimage_input->labelfont(1); + widget_deimage_input->labelsize(11); + widget_deimage_input->textsize(11); + widget_deimage_input->callback((Fl_Callback*)cb_widget_deimage_input); + Fl_Group::current()->resizable(widget_deimage_input); + } // Fl_Input* widget_deimage_input + { Fl_Button* o = new Fl_Button(295, 90, 89, 20, "Browse..."); + o->tooltip("Click to choose the inactive image."); + o->labelsize(11); + o->callback((Fl_Callback*)cb_Browse1); + } // Fl_Button* o + o->end(); + } // Fl_Group* o + { wp_gui_alignment = new Fl_Group(95, 115, 312, 20, "Alignment:"); + wp_gui_alignment->labelfont(1); + wp_gui_alignment->labelsize(11); + wp_gui_alignment->callback((Fl_Callback*)propagate_load); + wp_gui_alignment->align(Fl_Align(FL_ALIGN_LEFT)); + { Fl_Button* o = new Fl_Button(95, 115, 30, 20, "Clip"); + o->tooltip("Clip the label to the inside of the widget."); + o->type(1); + o->selection_color(FL_INACTIVE_COLOR); + o->labelsize(11); + o->callback((Fl_Callback*)align_cb, (void*)((fl_intptr_t)FL_ALIGN_CLIP)); + o->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); + } // Fl_Button* o + { Fl_Button* o = new Fl_Button(130, 115, 38, 20, "Wrap"); + o->tooltip("Wrap the label text."); + o->type(1); + o->selection_color(FL_INACTIVE_COLOR); + o->labelsize(11); + o->callback((Fl_Callback*)align_cb, (void*)((fl_intptr_t)FL_ALIGN_WRAP)); + } // Fl_Button* o + { Fl_Button* o = new Fl_Button(278, 115, 20, 20, "@-1<-"); + o->tooltip("Left-align the label."); + o->type(1); + o->selection_color(FL_INACTIVE_COLOR); + o->labelsize(11); + o->labelcolor(FL_INACTIVE_COLOR); + o->callback((Fl_Callback*)align_cb, (void*)((fl_intptr_t)FL_ALIGN_LEFT)); + o->hide(); + } // Fl_Button* o + { Fl_Button* o = new Fl_Button(303, 115, 20, 20, "@-1->"); + o->tooltip("Right-align the label."); + o->type(1); + o->selection_color(FL_INACTIVE_COLOR); + o->labelsize(11); + o->labelcolor(FL_INACTIVE_COLOR); + o->callback((Fl_Callback*)align_cb, (void*)((fl_intptr_t)FL_ALIGN_RIGHT)); + o->hide(); + } // Fl_Button* o + { Fl_Button* o = new Fl_Button(328, 115, 20, 20, "@-18"); + o->tooltip("Top-align the label."); + o->type(1); + o->selection_color(FL_INACTIVE_COLOR); + o->labelsize(11); + o->labelcolor(FL_INACTIVE_COLOR); + o->callback((Fl_Callback*)align_cb, (void*)((fl_intptr_t)FL_ALIGN_TOP)); + o->hide(); + } // Fl_Button* o + { Fl_Button* o = new Fl_Button(353, 115, 20, 20, "@-12"); + o->tooltip("Bottom-align the label."); + o->type(1); + o->selection_color(FL_INACTIVE_COLOR); + o->labelsize(11); + o->labelcolor(FL_INACTIVE_COLOR); + o->callback((Fl_Callback*)align_cb, (void*)((fl_intptr_t)FL_ALIGN_BOTTOM)); + o->hide(); + } // Fl_Button* o + { Fl_Choice* o = new Fl_Choice(172, 115, 116, 20); + o->down_box(FL_BORDER_BOX); + o->labelsize(11); + o->textsize(11); + o->callback((Fl_Callback*)align_text_image_cb); + o->menu(menu_); + } // Fl_Choice* o + { Fl_Choice* o = new Fl_Choice(293, 115, 86, 20); + o->down_box(FL_BORDER_BOX); + o->labelsize(11); + o->textsize(11); + o->callback((Fl_Callback*)align_position_cb); + o->menu(menu_1); + } // Fl_Choice* o + { Fl_Button* o = new Fl_Button(384, 115, 20, 20, "@-3square"); + o->tooltip("Show the label inside the widget."); + o->type(1); + o->selection_color(FL_INACTIVE_COLOR); + o->labelsize(11); + o->labelcolor(FL_INACTIVE_COLOR); + o->callback((Fl_Callback*)align_cb, (void*)((fl_intptr_t)FL_ALIGN_INSIDE)); + } // Fl_Button* o + { Fl_Box* o = new Fl_Box(406, 115, 1, 20); + o->labelsize(11); + Fl_Group::current()->resizable(o); + } // Fl_Box* o + wp_gui_alignment->end(); + } // Fl_Group* wp_gui_alignment + { Fl_Group* o = new Fl_Group(95, 150, 314, 20, "Position:"); + o->labelfont(1); o->labelsize(11); - Fl_Group::current()->resizable(o); - } // Fl_Box* o - wp_gui_alignment->end(); - } // Fl_Group* wp_gui_alignment - { Fl_Group* o = new Fl_Group(95, 150, 314, 20, "Position:"); - o->labelfont(1); - o->labelsize(11); - o->callback((Fl_Callback*)position_group_cb); - o->align(Fl_Align(FL_ALIGN_LEFT)); - { widget_x_input = new fld::widget::Formula_Input(95, 150, 55, 20, "X:"); - widget_x_input->tooltip("The X position of the widget as a number or formula.\nFormulas can be simple " + o->callback((Fl_Callback*)position_group_cb); + o->align(Fl_Align(FL_ALIGN_LEFT)); + { widget_x_input = new fld::widget::Formula_Input(95, 150, 55, 20, "X:"); + widget_x_input->tooltip("The X position of the widget as a number or formula.\nFormulas can be simple " "math, including the variables\nx, px, sx, cx, and i"); - widget_x_input->box(FL_DOWN_BOX); - widget_x_input->color(FL_BACKGROUND2_COLOR); - widget_x_input->selection_color(FL_SELECTION_COLOR); - widget_x_input->labeltype(FL_NORMAL_LABEL); - widget_x_input->labelfont(0); - widget_x_input->labelsize(11); - widget_x_input->labelcolor(FL_FOREGROUND_COLOR); - widget_x_input->textsize(11); - widget_x_input->callback((Fl_Callback*)cb_widget_x_input); - widget_x_input->align(Fl_Align(FL_ALIGN_TOP_LEFT)); - widget_x_input->when(FL_WHEN_RELEASE); - } // fld::widget::Formula_Input* widget_x_input - { widget_y_input = new fld::widget::Formula_Input(155, 150, 55, 20, "Y:"); - widget_y_input->tooltip("The Y position of the widget as a number or formula.\nFormulas can be simple " + widget_x_input->box(FL_DOWN_BOX); + widget_x_input->color(FL_BACKGROUND2_COLOR); + widget_x_input->selection_color(FL_SELECTION_COLOR); + widget_x_input->labeltype(FL_NORMAL_LABEL); + widget_x_input->labelfont(0); + widget_x_input->labelsize(11); + widget_x_input->labelcolor(FL_FOREGROUND_COLOR); + widget_x_input->textsize(11); + widget_x_input->callback((Fl_Callback*)cb_widget_x_input); + widget_x_input->align(Fl_Align(FL_ALIGN_TOP_LEFT)); + widget_x_input->when(FL_WHEN_RELEASE); + } // fld::widget::Formula_Input* widget_x_input + { widget_y_input = new fld::widget::Formula_Input(155, 150, 55, 20, "Y:"); + widget_y_input->tooltip("The Y position of the widget as a number or formula.\nFormulas can be simple " "math, including the variables\ny, py, sy, cy, and i"); - widget_y_input->box(FL_DOWN_BOX); - widget_y_input->color(FL_BACKGROUND2_COLOR); - widget_y_input->selection_color(FL_SELECTION_COLOR); - widget_y_input->labeltype(FL_NORMAL_LABEL); - widget_y_input->labelfont(0); - widget_y_input->labelsize(11); - widget_y_input->labelcolor(FL_FOREGROUND_COLOR); - widget_y_input->textsize(11); - widget_y_input->callback((Fl_Callback*)cb_widget_y_input); - widget_y_input->align(Fl_Align(FL_ALIGN_TOP_LEFT)); - widget_y_input->when(FL_WHEN_RELEASE); - } // fld::widget::Formula_Input* widget_y_input - { widget_w_input = new fld::widget::Formula_Input(215, 150, 55, 20, "Width:"); - widget_w_input->tooltip("The width of the widget as a number or formula.\nFormulas can be simple math," + widget_y_input->box(FL_DOWN_BOX); + widget_y_input->color(FL_BACKGROUND2_COLOR); + widget_y_input->selection_color(FL_SELECTION_COLOR); + widget_y_input->labeltype(FL_NORMAL_LABEL); + widget_y_input->labelfont(0); + widget_y_input->labelsize(11); + widget_y_input->labelcolor(FL_FOREGROUND_COLOR); + widget_y_input->textsize(11); + widget_y_input->callback((Fl_Callback*)cb_widget_y_input); + widget_y_input->align(Fl_Align(FL_ALIGN_TOP_LEFT)); + widget_y_input->when(FL_WHEN_RELEASE); + } // fld::widget::Formula_Input* widget_y_input + { widget_w_input = new fld::widget::Formula_Input(215, 150, 55, 20, "Width:"); + widget_w_input->tooltip("The width of the widget as a number or formula.\nFormulas can be simple math," " including the variables\nw, pw, sw, cw, and i"); - widget_w_input->box(FL_DOWN_BOX); - widget_w_input->color(FL_BACKGROUND2_COLOR); - widget_w_input->selection_color(FL_SELECTION_COLOR); - widget_w_input->labeltype(FL_NORMAL_LABEL); - widget_w_input->labelfont(0); - widget_w_input->labelsize(11); - widget_w_input->labelcolor(FL_FOREGROUND_COLOR); - widget_w_input->textsize(11); - widget_w_input->callback((Fl_Callback*)cb_widget_w_input); - widget_w_input->align(Fl_Align(FL_ALIGN_TOP_LEFT)); - widget_w_input->when(FL_WHEN_RELEASE); - } // fld::widget::Formula_Input* widget_w_input - { widget_h_input = new fld::widget::Formula_Input(275, 150, 55, 20, "Height:"); - widget_h_input->tooltip("The height of the widget as a number or formula.\nFormulas can be simple math" + widget_w_input->box(FL_DOWN_BOX); + widget_w_input->color(FL_BACKGROUND2_COLOR); + widget_w_input->selection_color(FL_SELECTION_COLOR); + widget_w_input->labeltype(FL_NORMAL_LABEL); + widget_w_input->labelfont(0); + widget_w_input->labelsize(11); + widget_w_input->labelcolor(FL_FOREGROUND_COLOR); + widget_w_input->textsize(11); + widget_w_input->callback((Fl_Callback*)cb_widget_w_input); + widget_w_input->align(Fl_Align(FL_ALIGN_TOP_LEFT)); + widget_w_input->when(FL_WHEN_RELEASE); + } // fld::widget::Formula_Input* widget_w_input + { widget_h_input = new fld::widget::Formula_Input(275, 150, 55, 20, "Height:"); + widget_h_input->tooltip("The height of the widget as a number or formula.\nFormulas can be simple math" ", including the variables\nh, ph, sh, ch, and i"); - widget_h_input->box(FL_DOWN_BOX); - widget_h_input->color(FL_BACKGROUND2_COLOR); - widget_h_input->selection_color(FL_SELECTION_COLOR); - widget_h_input->labeltype(FL_NORMAL_LABEL); - widget_h_input->labelfont(0); - widget_h_input->labelsize(11); - widget_h_input->labelcolor(FL_FOREGROUND_COLOR); - widget_h_input->textsize(11); - widget_h_input->callback((Fl_Callback*)cb_widget_h_input); - widget_h_input->align(Fl_Align(FL_ALIGN_TOP_LEFT)); - widget_h_input->when(FL_WHEN_RELEASE); - } // fld::widget::Formula_Input* widget_h_input - { Fl_Choice* o = new Fl_Choice(335, 150, 64, 20, "Children:"); - o->tooltip("When instantiating a widget class, the children can either be fixed in their " + widget_h_input->box(FL_DOWN_BOX); + widget_h_input->color(FL_BACKGROUND2_COLOR); + widget_h_input->selection_color(FL_SELECTION_COLOR); + widget_h_input->labeltype(FL_NORMAL_LABEL); + widget_h_input->labelfont(0); + widget_h_input->labelsize(11); + widget_h_input->labelcolor(FL_FOREGROUND_COLOR); + widget_h_input->textsize(11); + widget_h_input->callback((Fl_Callback*)cb_widget_h_input); + widget_h_input->align(Fl_Align(FL_ALIGN_TOP_LEFT)); + widget_h_input->when(FL_WHEN_RELEASE); + } // fld::widget::Formula_Input* widget_h_input + { Fl_Choice* o = new Fl_Choice(335, 150, 64, 20, "Children:"); + o->tooltip("When instantiating a widget class, the children can either be fixed in their " "original position, automatically be repositioned, or both repsositioned and re" "sized to fit the container."); - o->down_box(FL_BORDER_BOX); + o->down_box(FL_BORDER_BOX); + o->labelsize(11); + o->textsize(11); + o->callback((Fl_Callback*)cb_Children); + o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); + o->menu(menu_Children); + } // Fl_Choice* o + { Fl_Box* o = new Fl_Box(399, 150, 1, 20); + o->hide(); + Fl_Group::current()->resizable(o); + } // Fl_Box* o + o->end(); + } // Fl_Group* o + { // This group is only visible if the parent is an Fl_Flex widget + wp_gui_flexp = new Fl_Group(95, 150, 314, 20, "Flex Parent:"); + wp_gui_flexp->labelfont(1); + wp_gui_flexp->labelsize(11); + wp_gui_flexp->callback((Fl_Callback*)cb_wp_gui_flexp); + wp_gui_flexp->align(Fl_Align(FL_ALIGN_LEFT)); + wp_gui_flexp->hide(); + { widget_flex_size = new Fl_Value_Input(95, 150, 55, 20, "Size:"); + widget_flex_size->tooltip("Fixed Width or Height for a horizontal or vertical Fl_Flex Parent."); + widget_flex_size->labelsize(11); + widget_flex_size->textsize(11); + widget_flex_size->callback((Fl_Callback*)cb_widget_flex_size); + widget_flex_size->align(Fl_Align(FL_ALIGN_TOP_LEFT)); + } // Fl_Value_Input* widget_flex_size + { widget_flex_fixed = new Fl_Check_Button(155, 150, 55, 20, "fixed"); + widget_flex_fixed->tooltip("If checked, the size of the widget stays fixed."); + widget_flex_fixed->down_box(FL_DOWN_BOX); + widget_flex_fixed->labelsize(11); + widget_flex_fixed->callback((Fl_Callback*)cb_widget_flex_fixed); + } // Fl_Check_Button* widget_flex_fixed + { Fl_Box* o = new Fl_Box(398, 150, 1, 20); + Fl_Group::current()->resizable(o); + } // Fl_Box* o + wp_gui_flexp->end(); + } // Fl_Group* wp_gui_flexp + { wp_gui_values = new Fl_Group(95, 185, 300, 20, "Values:"); + wp_gui_values->labelfont(1); + wp_gui_values->labelsize(11); + wp_gui_values->callback((Fl_Callback*)cb_wp_gui_values); + wp_gui_values->align(Fl_Align(FL_ALIGN_LEFT)); + { Fl_Value_Input* o = new Fl_Value_Input(95, 185, 55, 20, "Size:"); + o->tooltip("The size of the slider."); + o->labelsize(11); + o->textsize(11); + o->callback((Fl_Callback*)cb_Size); + o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); + } // Fl_Value_Input* o + { Fl_Value_Input* o = new Fl_Value_Input(155, 185, 55, 20, "Minimum:"); + o->tooltip("The minimum value of the widget."); + o->labelsize(11); + o->textsize(11); + o->callback((Fl_Callback*)cb_Minimum); + o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); + } // Fl_Value_Input* o + { Fl_Value_Input* o = new Fl_Value_Input(215, 185, 55, 20, "Maximum:"); + o->tooltip("The maximum value of the widget."); + o->labelsize(11); + o->value(1); + o->textsize(11); + o->callback((Fl_Callback*)cb_Maximum); + o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); + } // Fl_Value_Input* o + { Fl_Value_Input* o = new Fl_Value_Input(275, 185, 55, 20, "Step:"); + o->tooltip("The resolution of the widget value."); + o->labelsize(11); + o->textsize(11); + o->callback((Fl_Callback*)cb_Step); + o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); + } // Fl_Value_Input* o + { Fl_Value_Input* o = new Fl_Value_Input(335, 185, 55, 20, "Value:"); + o->tooltip("The current widget value."); + o->labelsize(11); + o->textsize(11); + o->callback((Fl_Callback*)cb_Value); + o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); + } // Fl_Value_Input* o + { Fl_Box* o = new Fl_Box(395, 185, 0, 20); + Fl_Group::current()->resizable(o); + } // Fl_Box* o + wp_gui_values->end(); + } // Fl_Group* wp_gui_values + { // This group is only visible for Fl_Flex widgets + wp_gui_margins = new Fl_Group(95, 185, 300, 20, "Margins:"); + wp_gui_margins->labelfont(1); + wp_gui_margins->labelsize(11); + wp_gui_margins->callback((Fl_Callback*)cb_wp_gui_margins); + wp_gui_margins->align(Fl_Align(FL_ALIGN_LEFT)); + wp_gui_margins->hide(); + { Fl_Value_Input* o = new Fl_Value_Input(95, 185, 55, 20, "Left:"); + o->tooltip("Left margin in group."); + o->labelsize(11); + o->textsize(11); + o->callback((Fl_Callback*)cb_Left); + o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); + } // Fl_Value_Input* o + { Fl_Value_Input* o = new Fl_Value_Input(155, 185, 55, 20, "Top:"); + o->tooltip("Top margin in group."); + o->labelsize(11); + o->textsize(11); + o->callback((Fl_Callback*)cb_Top); + o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); + } // Fl_Value_Input* o + { Fl_Value_Input* o = new Fl_Value_Input(215, 185, 55, 20, "Right:"); + o->tooltip("Right margin in group."); + o->labelsize(11); + o->textsize(11); + o->callback((Fl_Callback*)cb_Right); + o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); + } // Fl_Value_Input* o + { Fl_Value_Input* o = new Fl_Value_Input(275, 185, 55, 20, "Bottom:"); + o->tooltip("Bottom margin in group."); + o->labelsize(11); + o->textsize(11); + o->callback((Fl_Callback*)cb_Bottom); + o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); + } // Fl_Value_Input* o + { Fl_Value_Input* o = new Fl_Value_Input(335, 185, 55, 20, "Gap:"); + o->tooltip("Gap between children."); + o->labelsize(11); + o->textsize(11); + o->callback((Fl_Callback*)cb_Gap); + o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); + } // Fl_Value_Input* o + { Fl_Box* o = new Fl_Box(395, 185, 0, 20); + Fl_Group::current()->resizable(o); + } // Fl_Box* o + wp_gui_margins->end(); + } // Fl_Group* wp_gui_margins + { wp_gui_sizerange = new Fl_Group(95, 185, 300, 20, "Size Range:"); + wp_gui_sizerange->labelfont(1); + wp_gui_sizerange->labelsize(11); + wp_gui_sizerange->callback((Fl_Callback*)cb_wp_gui_sizerange); + wp_gui_sizerange->align(Fl_Align(FL_ALIGN_LEFT)); + wp_gui_sizerange->hide(); + { Fl_Value_Input* o = new Fl_Value_Input(95, 185, 55, 20, "Minimum Size:"); + o->tooltip("The size of the slider."); + o->labelsize(11); + o->maximum(2048); + o->step(1); + o->textsize(11); + o->callback((Fl_Callback*)cb_Minimum1); + o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); + } // Fl_Value_Input* o + { Fl_Value_Input* o = new Fl_Value_Input(155, 185, 55, 20); + o->tooltip("The minimum value of the widget."); + o->labelsize(11); + o->maximum(2048); + o->step(1); + o->textsize(11); + o->callback((Fl_Callback*)cb_1); + o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); + } // Fl_Value_Input* o + { Fl_Button* o = new Fl_Button(215, 185, 25, 20, "set"); + o->labelsize(11); + o->callback((Fl_Callback*)cb_set); + } // Fl_Button* o + { Fl_Value_Input* o = new Fl_Value_Input(245, 185, 55, 20, "Maximum Size:"); + o->tooltip("The maximum value of the widget."); + o->labelsize(11); + o->maximum(2048); + o->step(1); + o->textsize(11); + o->callback((Fl_Callback*)cb_Maximum1); + o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); + } // Fl_Value_Input* o + { Fl_Value_Input* o = new Fl_Value_Input(305, 185, 55, 20); + o->tooltip("The resolution of the widget value."); + o->labelsize(11); + o->maximum(2048); + o->step(1); + o->textsize(11); + o->callback((Fl_Callback*)cb_2); + o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); + } // Fl_Value_Input* o + { Fl_Button* o = new Fl_Button(365, 185, 25, 20, "set"); + o->labelsize(11); + o->callback((Fl_Callback*)cb_set1); + } // Fl_Button* o + { Fl_Box* o = new Fl_Box(395, 185, 0, 20); + Fl_Group::current()->resizable(o); + } // Fl_Box* o + wp_gui_sizerange->end(); + } // Fl_Group* wp_gui_sizerange + { Fl_Group* o = new Fl_Group(95, 210, 310, 20, "Shortcut:"); + o->labelfont(1); o->labelsize(11); - o->textsize(11); - o->callback((Fl_Callback*)cb_Children); - o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); - o->menu(menu_Children); - } // Fl_Choice* o - { Fl_Box* o = new Fl_Box(399, 150, 1, 20); + o->callback((Fl_Callback*)propagate_load); + o->align(Fl_Align(FL_ALIGN_LEFT)); + { // This is a special button that grabs keystrokes directly + wp_gui_shortcut = new Fl_Shortcut_Button(95, 210, 310, 20); + wp_gui_shortcut->tooltip("The shortcut key for the widget.\nUse \'Backspace\' key to clear."); + wp_gui_shortcut->box(FL_DOWN_BOX); + wp_gui_shortcut->color(FL_BACKGROUND2_COLOR); + wp_gui_shortcut->selection_color((Fl_Color)12); + wp_gui_shortcut->labeltype(FL_NORMAL_LABEL); + wp_gui_shortcut->labelfont(0); + wp_gui_shortcut->labelsize(11); + wp_gui_shortcut->labelcolor(FL_FOREGROUND_COLOR); + wp_gui_shortcut->callback((Fl_Callback*)cb_wp_gui_shortcut); + wp_gui_shortcut->align(Fl_Align(FL_ALIGN_CENTER)); + wp_gui_shortcut->when(FL_WHEN_CHANGED); + } // Fl_Shortcut_Button* wp_gui_shortcut + o->end(); + } // Fl_Group* o + { wp_gui_xclass = new Fl_Group(95, 235, 300, 20, "X Class:"); + wp_gui_xclass->labelfont(1); + wp_gui_xclass->labelsize(11); + wp_gui_xclass->callback((Fl_Callback*)propagate_load); + wp_gui_xclass->align(Fl_Align(FL_ALIGN_LEFT)); + { Fl_Input* o = new Fl_Input(95, 235, 95, 20, ":"); + o->tooltip("The X resource class."); + o->labelfont(1); + o->labelsize(11); + o->textsize(11); + o->callback((Fl_Callback*)cb_3); + Fl_Group::current()->resizable(o); + } // Fl_Input* o + { Fl_Light_Button* o = new Fl_Light_Button(195, 235, 60, 20, "Border"); + o->tooltip("Add a border around the window."); + o->selection_color((Fl_Color)1); + o->labelsize(11); + o->callback((Fl_Callback*)cb_Border); + } // Fl_Light_Button* o + { Fl_Light_Button* o = new Fl_Light_Button(260, 235, 55, 20, "Modal"); + o->tooltip("Make the window modal."); + o->selection_color((Fl_Color)1); + o->labelsize(11); + o->callback((Fl_Callback*)cb_Modal); + } // Fl_Light_Button* o + { Fl_Light_Button* o = new Fl_Light_Button(320, 235, 75, 20, "Nonmodal"); + o->tooltip("Make the window non-modal."); + o->selection_color((Fl_Color)1); + o->labelsize(11); + o->callback((Fl_Callback*)cb_Nonmodal); + o->align(Fl_Align(132|FL_ALIGN_INSIDE)); + } // Fl_Light_Button* o + wp_gui_xclass->end(); + } // Fl_Group* wp_gui_xclass + { wp_gui_attributes = new Fl_Group(95, 260, 305, 20, "Attributes:"); + wp_gui_attributes->labelfont(1); + wp_gui_attributes->labelsize(11); + wp_gui_attributes->callback((Fl_Callback*)propagate_load); + wp_gui_attributes->align(Fl_Align(FL_ALIGN_LEFT)); + { Fl_Light_Button* o = new Fl_Light_Button(95, 260, 60, 20, "Visible"); + o->tooltip("Show the widget."); + o->selection_color((Fl_Color)1); + o->labelsize(11); + o->callback((Fl_Callback*)cb_Visible); + } // Fl_Light_Button* o + { Fl_Light_Button* o = new Fl_Light_Button(160, 260, 60, 20, "Active"); + o->tooltip("Activate the widget."); + o->selection_color((Fl_Color)1); + o->labelsize(11); + o->callback((Fl_Callback*)cb_Active); + } // Fl_Light_Button* o + { Fl_Light_Button* o = new Fl_Light_Button(225, 260, 75, 20, "Resizable"); + o->tooltip("Make the widget resizable."); + o->selection_color((Fl_Color)1); + o->labelsize(11); + o->callback((Fl_Callback*)cb_Resizable); + o->when(FL_WHEN_CHANGED); + } // Fl_Light_Button* o + { Fl_Light_Button* o = new Fl_Light_Button(225, 260, 75, 20, "Headline"); + o->tooltip("Make a menu item the headline of a menu\nunselectable, but not grayed out"); + o->selection_color((Fl_Color)1); + o->labelsize(11); + o->callback((Fl_Callback*)cb_Headline); + o->when(FL_WHEN_CHANGED); + o->hide(); + } // Fl_Light_Button* o + { Fl_Light_Button* o = new Fl_Light_Button(305, 260, 70, 20, "Hotspot"); + o->tooltip("Center the window under this widget."); + o->selection_color((Fl_Color)1); + o->labelsize(11); + o->callback((Fl_Callback*)cb_Hotspot); + o->when(FL_WHEN_CHANGED); + } // Fl_Light_Button* o + { Fl_Box* o = new Fl_Box(395, 260, 0, 20); + o->labelsize(11); + Fl_Group::current()->resizable(o); + } // Fl_Box* o + wp_gui_attributes->end(); + } // Fl_Group* wp_gui_attributes + { wp_gui_tooltip = new Fl_Input(95, 285, 310, 20, "Tooltip:"); + wp_gui_tooltip->tooltip("The tooltip text for the widget.\nUse Ctrl-J for newlines."); + wp_gui_tooltip->labelfont(1); + wp_gui_tooltip->labelsize(11); + wp_gui_tooltip->textsize(11); + wp_gui_tooltip->callback((Fl_Callback*)cb_wp_gui_tooltip); + } // Fl_Input* wp_gui_tooltip + { Fl_Box* o = new Fl_Box(95, 305, 300, 5); o->hide(); Fl_Group::current()->resizable(o); } // Fl_Box* o - o->end(); - } // Fl_Group* o - { // This group is only visible if the parent is an Fl_Flex widget - wp_gui_flexp = new Fl_Group(95, 150, 314, 20, "Flex Parent:"); - wp_gui_flexp->labelfont(1); - wp_gui_flexp->labelsize(11); - wp_gui_flexp->callback((Fl_Callback*)cb_wp_gui_flexp); - wp_gui_flexp->align(Fl_Align(FL_ALIGN_LEFT)); - wp_gui_flexp->hide(); - { widget_flex_size = new Fl_Value_Input(95, 150, 55, 20, "Size:"); - widget_flex_size->tooltip("Fixed Width or Height for a horizontal or vertical Fl_Flex Parent."); - widget_flex_size->labelsize(11); - widget_flex_size->textsize(11); - widget_flex_size->callback((Fl_Callback*)cb_widget_flex_size); - widget_flex_size->align(Fl_Align(FL_ALIGN_TOP_LEFT)); - } // Fl_Value_Input* widget_flex_size - { widget_flex_fixed = new Fl_Check_Button(155, 150, 55, 20, "fixed"); - widget_flex_fixed->tooltip("If checked, the size of the widget stays fixed."); - widget_flex_fixed->down_box(FL_DOWN_BOX); - widget_flex_fixed->labelsize(11); - widget_flex_fixed->callback((Fl_Callback*)cb_widget_flex_fixed); - } // Fl_Check_Button* widget_flex_fixed - { Fl_Box* o = new Fl_Box(398, 150, 1, 20); - Fl_Group::current()->resizable(o); - } // Fl_Box* o - wp_gui_flexp->end(); - } // Fl_Group* wp_gui_flexp - { wp_gui_values = new Fl_Group(95, 185, 300, 20, "Values:"); - wp_gui_values->labelfont(1); - wp_gui_values->labelsize(11); - wp_gui_values->callback((Fl_Callback*)cb_wp_gui_values); - wp_gui_values->align(Fl_Align(FL_ALIGN_LEFT)); - { Fl_Value_Input* o = new Fl_Value_Input(95, 185, 55, 20, "Size:"); - o->tooltip("The size of the slider."); - o->labelsize(11); - o->textsize(11); - o->callback((Fl_Callback*)cb_Size); - o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); - } // Fl_Value_Input* o - { Fl_Value_Input* o = new Fl_Value_Input(155, 185, 55, 20, "Minimum:"); - o->tooltip("The minimum value of the widget."); - o->labelsize(11); - o->textsize(11); - o->callback((Fl_Callback*)cb_Minimum); - o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); - } // Fl_Value_Input* o - { Fl_Value_Input* o = new Fl_Value_Input(215, 185, 55, 20, "Maximum:"); - o->tooltip("The maximum value of the widget."); + wp_gui_tab->end(); + Fl_Group::current()->resizable(wp_gui_tab); + } // Fl_Group* wp_gui_tab + { wp_style_tab = new Fl_Group(10, 30, 400, 330, "Style"); + wp_style_tab->labelsize(11); + wp_style_tab->callback((Fl_Callback*)propagate_load); + wp_style_tab->when(FL_WHEN_NEVER); + wp_style_tab->hide(); + { wp_style_label = new Fl_Group(99, 40, 305, 20, "Label Font:"); + wp_style_label->labelfont(1); + wp_style_label->labelsize(11); + wp_style_label->callback((Fl_Callback*)propagate_load); + wp_style_label->align(Fl_Align(FL_ALIGN_LEFT)); + { Fl_Choice* o = new Fl_Choice(99, 40, 148, 20); + o->tooltip("The style of the label text."); + o->box(FL_THIN_UP_BOX); + o->down_box(FL_BORDER_BOX); + o->labelfont(1); + o->labelsize(11); + o->textsize(11); + o->callback((Fl_Callback*)cb_4); + Fl_Group::current()->resizable(o); + o->menu(fontmenu); + } // Fl_Choice* o + { Fl_Value_Input* o = new Fl_Value_Input(247, 40, 49, 20); + o->tooltip("The size of the label text."); + o->labelsize(11); + o->maximum(100); + o->step(1); + o->value(14); + o->textsize(11); + o->callback((Fl_Callback*)cb_5); + } // Fl_Value_Input* o + { w_labelcolor = new Fl_Button(296, 40, 90, 20, "Label Color"); + w_labelcolor->tooltip("The color of the label text."); + w_labelcolor->labelsize(11); + w_labelcolor->callback((Fl_Callback*)cb_w_labelcolor); + } // Fl_Button* w_labelcolor + { Fl_Menu_Button* o = new Fl_Menu_Button(386, 40, 18, 20); + o->callback((Fl_Callback*)cb_6); + o->menu(colormenu); + } // Fl_Menu_Button* o + wp_style_label->end(); + } // Fl_Group* wp_style_label + { wp_style_box = new Fl_Group(99, 65, 305, 20, "Box:"); + wp_style_box->labelfont(1); + wp_style_box->labelsize(11); + wp_style_box->callback((Fl_Callback*)propagate_load); + wp_style_box->align(Fl_Align(FL_ALIGN_LEFT)); + { Fl_Choice* o = new Fl_Choice(100, 65, 196, 20); + o->tooltip("The \"up\" box of the widget."); + o->box(FL_THIN_UP_BOX); + o->down_box(FL_BORDER_BOX); + o->labelfont(1); + o->labelsize(11); + o->textsize(11); + o->callback((Fl_Callback*)cb_7); + Fl_Group::current()->resizable(o); + o->menu(boxmenu); + } // Fl_Choice* o + { w_color = new Fl_Button(296, 65, 90, 20, "Color"); + w_color->tooltip("The background color of the widget."); + w_color->labelsize(11); + w_color->callback((Fl_Callback*)cb_w_color); + } // Fl_Button* w_color + { Fl_Menu_Button* o = new Fl_Menu_Button(386, 65, 18, 20); + o->callback((Fl_Callback*)cb_8); + o->menu(colormenu); + } // Fl_Menu_Button* o + wp_style_box->end(); + } // Fl_Group* wp_style_box + { wp_style_downbox = new Fl_Group(99, 90, 305, 20, "Down Box:"); + wp_style_downbox->labelfont(1); + wp_style_downbox->labelsize(11); + wp_style_downbox->callback((Fl_Callback*)propagate_load); + wp_style_downbox->align(Fl_Align(FL_ALIGN_LEFT)); + { Fl_Choice* o = new Fl_Choice(99, 90, 197, 20); + o->tooltip("The \"down\" box of the widget."); + o->box(FL_THIN_UP_BOX); + o->down_box(FL_BORDER_BOX); + o->labelfont(1); + o->labelsize(11); + o->textsize(11); + o->callback((Fl_Callback*)cb_9); + Fl_Group::current()->resizable(o); + o->menu(boxmenu); + } // Fl_Choice* o + { w_selectcolor = new Fl_Button(296, 90, 90, 20, "Select Color"); + w_selectcolor->tooltip("The selection color of the widget."); + w_selectcolor->labelsize(11); + w_selectcolor->callback((Fl_Callback*)cb_w_selectcolor); + } // Fl_Button* w_selectcolor + { Fl_Menu_Button* o = new Fl_Menu_Button(386, 90, 18, 20); + o->callback((Fl_Callback*)cb_a); + o->menu(colormenu); + } // Fl_Menu_Button* o + wp_style_downbox->end(); + } // Fl_Group* wp_style_downbox + { wp_style_text = new Fl_Group(99, 115, 305, 20, "Text Font:"); + wp_style_text->labelfont(1); + wp_style_text->labelsize(11); + wp_style_text->callback((Fl_Callback*)propagate_load); + wp_style_text->align(Fl_Align(FL_ALIGN_LEFT)); + { Fl_Choice* o = new Fl_Choice(99, 115, 148, 20); + o->tooltip("The value text style."); + o->box(FL_DOWN_BOX); + o->down_box(FL_BORDER_BOX); + o->labelfont(1); + o->labelsize(11); + o->textsize(11); + o->callback((Fl_Callback*)cb_b); + Fl_Group::current()->resizable(o); + o->menu(fontmenu); + } // Fl_Choice* o + { Fl_Value_Input* o = new Fl_Value_Input(247, 115, 49, 20); + o->tooltip("The value text size."); + o->labelsize(11); + o->maximum(100); + o->step(1); + o->value(14); + o->textsize(11); + o->callback((Fl_Callback*)cb_c); + } // Fl_Value_Input* o + { w_textcolor = new Fl_Button(296, 115, 90, 20, "Text Color"); + w_textcolor->tooltip("The value text color."); + w_textcolor->labelsize(11); + w_textcolor->callback((Fl_Callback*)cb_w_textcolor); + } // Fl_Button* w_textcolor + { Fl_Menu_Button* o = new Fl_Menu_Button(386, 115, 18, 20); + o->callback((Fl_Callback*)cb_d); + o->menu(colormenu); + } // Fl_Menu_Button* o + wp_style_text->end(); + } // Fl_Group* wp_style_text + { Fl_Group* o = new Fl_Group(99, 150, 242, 20, "Label Margin:"); + o->labelfont(1); o->labelsize(11); - o->value(1); - o->textsize(11); - o->callback((Fl_Callback*)cb_Maximum); - o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); - } // Fl_Value_Input* o - { Fl_Value_Input* o = new Fl_Value_Input(275, 185, 55, 20, "Step:"); - o->tooltip("The resolution of the widget value."); + o->callback((Fl_Callback*)propagate_load); + o->align(Fl_Align(FL_ALIGN_LEFT)); + { Fl_Value_Input* o = new Fl_Value_Input(99, 150, 55, 20, "Horizontal:"); + o->tooltip("Spacing between label and the horizontally aligned side of the widget."); + o->labelsize(11); + o->minimum(-127); + o->maximum(128); + o->step(1); + o->textsize(11); + o->callback((Fl_Callback*)cb_Horizontal); + o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); + } // Fl_Value_Input* o + { Fl_Value_Input* o = new Fl_Value_Input(159, 150, 55, 20, "Vertical:"); + o->tooltip("Spacing between label and the vertically aligned side of the widget."); + o->labelsize(11); + o->minimum(-127); + o->maximum(127); + o->step(1); + o->textsize(11); + o->callback((Fl_Callback*)cb_Vertical); + o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); + } // Fl_Value_Input* o + { Fl_Value_Input* o = new Fl_Value_Input(219, 150, 55, 20, "Image Gap:"); + o->tooltip("Gap between label image and text in pixels"); + o->labelsize(11); + o->maximum(255); + o->step(1); + o->textsize(11); + o->callback((Fl_Callback*)cb_Image); + o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); + } // Fl_Value_Input* o + { Fl_Box* o = new Fl_Box(281, 150, 60, 20); + o->labelsize(11); + o->hide(); + Fl_Group::current()->resizable(o); + } // Fl_Box* o + o->end(); + } // Fl_Group* o + { Fl_Light_Button* o = new Fl_Light_Button(99, 175, 90, 20, "Compact"); + o->tooltip("use compact box types for closely set buttons"); + o->selection_color((Fl_Color)1); o->labelsize(11); - o->textsize(11); - o->callback((Fl_Callback*)cb_Step); - o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); - } // Fl_Value_Input* o - { Fl_Value_Input* o = new Fl_Value_Input(335, 185, 55, 20, "Value:"); - o->tooltip("The current widget value."); + o->callback((Fl_Callback*)cb_Compact); + } // Fl_Light_Button* o + { Fl_Box* o = new Fl_Box(195, 205, 40, 40); o->labelsize(11); - o->textsize(11); - o->callback((Fl_Callback*)cb_Value); - o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); - } // Fl_Value_Input* o - { Fl_Box* o = new Fl_Box(395, 185, 0, 20); Fl_Group::current()->resizable(o); } // Fl_Box* o - wp_gui_values->end(); - } // Fl_Group* wp_gui_values - { // This group is only visible for Fl_Flex widgets - wp_gui_margins = new Fl_Group(95, 185, 300, 20, "Margins:"); - wp_gui_margins->labelfont(1); - wp_gui_margins->labelsize(11); - wp_gui_margins->callback((Fl_Callback*)cb_wp_gui_margins); - wp_gui_margins->align(Fl_Align(FL_ALIGN_LEFT)); - wp_gui_margins->hide(); - { Fl_Value_Input* o = new Fl_Value_Input(95, 185, 55, 20, "Left:"); - o->tooltip("Left margin in group."); - o->labelsize(11); - o->textsize(11); - o->callback((Fl_Callback*)cb_Left); - o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); - } // Fl_Value_Input* o - { Fl_Value_Input* o = new Fl_Value_Input(155, 185, 55, 20, "Top:"); - o->tooltip("Top margin in group."); - o->labelsize(11); - o->textsize(11); - o->callback((Fl_Callback*)cb_Top); - o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); - } // Fl_Value_Input* o - { Fl_Value_Input* o = new Fl_Value_Input(215, 185, 55, 20, "Right:"); - o->tooltip("Right margin in group."); - o->labelsize(11); - o->textsize(11); - o->callback((Fl_Callback*)cb_Right); - o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); - } // Fl_Value_Input* o - { Fl_Value_Input* o = new Fl_Value_Input(275, 185, 55, 20, "Bottom:"); - o->tooltip("Bottom margin in group."); - o->labelsize(11); - o->textsize(11); - o->callback((Fl_Callback*)cb_Bottom); - o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); - } // Fl_Value_Input* o - { Fl_Value_Input* o = new Fl_Value_Input(335, 185, 55, 20, "Gap:"); - o->tooltip("Gap between children."); - o->labelsize(11); - o->textsize(11); - o->callback((Fl_Callback*)cb_Gap); - o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); - } // Fl_Value_Input* o - { Fl_Box* o = new Fl_Box(395, 185, 0, 20); + wp_style_tab->end(); + } // Fl_Group* wp_style_tab + { wp_cpp_tab = new Fl_Group(10, 30, 400, 330, "C++"); + wp_cpp_tab->labelsize(11); + wp_cpp_tab->callback((Fl_Callback*)propagate_load); + wp_cpp_tab->when(FL_WHEN_NEVER); + wp_cpp_tab->hide(); + { wp_cpp_class = new Fl_Group(95, 40, 310, 20, "Class:"); + wp_cpp_class->labelfont(1); + wp_cpp_class->labelsize(11); + wp_cpp_class->callback((Fl_Callback*)propagate_load); + wp_cpp_class->align(Fl_Align(FL_ALIGN_LEFT)); + { Fl_Input* o = new Fl_Input(95, 40, 172, 20); + o->tooltip("The widget subclass."); + o->labelfont(1); + o->labelsize(11); + o->textfont(4); + o->textsize(11); + o->callback((Fl_Callback*)cb_e, (void*)(4)); + Fl_Group::current()->resizable(o); + } // Fl_Input* o + { Fl_Choice* o = new Fl_Choice(267, 40, 138, 20); + o->tooltip("The widget subtype."); + o->box(FL_THIN_UP_BOX); + o->down_box(FL_BORDER_BOX); + o->labelsize(11); + o->textsize(11); + o->callback((Fl_Callback*)cb_f); + } // Fl_Choice* o + wp_cpp_class->end(); + } // Fl_Group* wp_cpp_class + { wp_cpp_name = new Fl_Group(95, 65, 310, 20, "Name:"); + wp_cpp_name->labelfont(1); + wp_cpp_name->labelsize(11); + wp_cpp_name->callback((Fl_Callback*)propagate_load); + wp_cpp_name->align(Fl_Align(FL_ALIGN_LEFT)); + { Fl_Input* o = new Fl_Input(95, 65, 235, 20); + o->tooltip("The name of the widget."); + o->labelfont(1); + o->labelsize(11); + o->textsize(11); + o->callback((Fl_Callback*)cb_10); + Fl_Group::current()->resizable(o); + } // Fl_Input* o + { Fl_Choice* o = new Fl_Choice(330, 65, 75, 20); + o->tooltip("Change member access attribute."); + o->down_box(FL_BORDER_BOX); + o->labelsize(11); + o->textsize(11); + o->callback((Fl_Callback*)cb_11); + o->when(FL_WHEN_CHANGED); + o->menu(menu_2); + } // Fl_Choice* o + { Fl_Choice* o = new Fl_Choice(330, 65, 75, 20); + o->tooltip("Change widget accessibility."); + o->down_box(FL_BORDER_BOX); + o->labelsize(11); + o->textsize(11); + o->callback((Fl_Callback*)name_public_cb); + o->when(FL_WHEN_CHANGED); + o->hide(); + o->menu(menu_3); + } // Fl_Choice* o + wp_cpp_name->end(); + } // Fl_Group* wp_cpp_name + { v_input[0] = new Fl_Input(95, 90, 310, 20, "Extra Code:"); + v_input[0]->tooltip("Extra initialization code for the widget."); + v_input[0]->labelfont(1); + v_input[0]->labelsize(11); + v_input[0]->textfont(4); + v_input[0]->textsize(11); + v_input[0]->callback((Fl_Callback*)cb_v_input, (void*)(0)); + } // Fl_Input* v_input[0] + { v_input[1] = new Fl_Input(95, 110, 310, 20); + v_input[1]->tooltip("Extra initialization code for the widget."); + v_input[1]->labelsize(11); + v_input[1]->textfont(4); + v_input[1]->textsize(11); + v_input[1]->callback((Fl_Callback*)cb_v_input1, (void*)(1)); + } // Fl_Input* v_input[1] + { v_input[2] = new Fl_Input(95, 130, 310, 20); + v_input[2]->tooltip("Extra initialization code for the widget."); + v_input[2]->labelsize(11); + v_input[2]->textfont(4); + v_input[2]->textsize(11); + v_input[2]->callback((Fl_Callback*)cb_v_input2, (void*)(2)); + } // Fl_Input* v_input[2] + { v_input[3] = new Fl_Input(95, 150, 310, 20); + v_input[3]->tooltip("Extra initialization code for the widget."); + v_input[3]->labelsize(11); + v_input[3]->textfont(4); + v_input[3]->textsize(11); + v_input[3]->callback((Fl_Callback*)cb_v_input3, (void*)(3)); + } // Fl_Input* v_input[3] + { Fl_Tile* o = new Fl_Tile(95, 175, 310, 130); + o->callback((Fl_Callback*)cb_12); + { Fl_Group* o = new Fl_Group(95, 175, 310, 48); + o->box(FL_FLAT_BOX); + { wComment = new Fl_Text_Editor(95, 175, 310, 45, "Comment:"); + wComment->tooltip("Write a comment that will appear in the source code and in the widget tree ov" +"erview."); + wComment->box(FL_DOWN_BOX); + wComment->labelfont(1); + wComment->labelsize(11); + wComment->textfont(6); + wComment->textsize(11); + wComment->textcolor((Fl_Color)59); + wComment->callback((Fl_Callback*)cb_wComment); + wComment->align(Fl_Align(FL_ALIGN_LEFT)); + wComment->when(FL_WHEN_CHANGED); + Fl_Group::current()->resizable(wComment); + wComment->buffer(new Fl_Text_Buffer()); + } // Fl_Text_Editor* wComment + o->end(); + } // Fl_Group* o + { Fl_Group* o = new Fl_Group(95, 223, 310, 82); + o->box(FL_FLAT_BOX); + { wCallback = new fld::widget::Code_Editor(95, 225, 310, 80, "Callback:"); + wCallback->tooltip("The callback function or code for the widget. Use the variable name \'o\' to " +"access the Widget pointer and \'v\' to access the user value."); + wCallback->box(FL_DOWN_BOX); + wCallback->color(FL_BACKGROUND2_COLOR); + wCallback->selection_color(FL_SELECTION_COLOR); + wCallback->labeltype(FL_NORMAL_LABEL); + wCallback->labelfont(1); + wCallback->labelsize(11); + wCallback->labelcolor(FL_FOREGROUND_COLOR); + wCallback->textfont(4); + wCallback->textsize(11); + wCallback->callback((Fl_Callback*)cb_wCallback); + wCallback->align(Fl_Align(FL_ALIGN_LEFT)); + wCallback->when(FL_WHEN_RELEASE); + Fl_Group::current()->resizable(wCallback); + } // fld::widget::Code_Editor* wCallback + o->end(); + } // Fl_Group* o + o->end(); Fl_Group::current()->resizable(o); - } // Fl_Box* o - wp_gui_margins->end(); - } // Fl_Group* wp_gui_margins - { wp_gui_sizerange = new Fl_Group(95, 185, 300, 20, "Size Range:"); - wp_gui_sizerange->labelfont(1); - wp_gui_sizerange->labelsize(11); - wp_gui_sizerange->callback((Fl_Callback*)cb_wp_gui_sizerange); - wp_gui_sizerange->align(Fl_Align(FL_ALIGN_LEFT)); - wp_gui_sizerange->hide(); - { Fl_Value_Input* o = new Fl_Value_Input(95, 185, 55, 20, "Minimum Size:"); - o->tooltip("The size of the slider."); - o->labelsize(11); - o->maximum(2048); - o->step(1); - o->textsize(11); - o->callback((Fl_Callback*)cb_Minimum1); - o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); - } // Fl_Value_Input* o - { Fl_Value_Input* o = new Fl_Value_Input(155, 185, 55, 20); - o->tooltip("The minimum value of the widget."); + } // Fl_Tile* o + { wp_cpp_callback = new Fl_Group(95, 310, 310, 20, "User Data:"); + wp_cpp_callback->labelfont(1); + wp_cpp_callback->labelsize(11); + wp_cpp_callback->callback((Fl_Callback*)propagate_load); + wp_cpp_callback->align(Fl_Align(FL_ALIGN_LEFT)); + { Fl_Input* o = new Fl_Input(95, 310, 158, 20); + o->tooltip("The user data to pass into the callback code."); + o->labelfont(1); + o->labelsize(11); + o->textfont(4); + o->textsize(11); + o->callback((Fl_Callback*)cb_13); + Fl_Group::current()->resizable(o); + } // Fl_Input* o + { Fl_Menu_Button* o = new Fl_Menu_Button(260, 310, 145, 20, "When"); + o->tooltip("When to call the callback function."); + o->box(FL_THIN_UP_BOX); + o->down_box(FL_BORDER_BOX); + o->labelfont(1); + o->labelsize(11); + o->textsize(11); + o->callback((Fl_Callback*)cb_When); + o->when(FL_WHEN_CHANGED); + o->menu(whenmenu); + } // Fl_Menu_Button* o + wp_cpp_callback->end(); + } // Fl_Group* wp_cpp_callback + { Fl_Group* o = new Fl_Group(95, 332, 310, 26, "Type:"); + o->labelfont(1); o->labelsize(11); - o->maximum(2048); - o->step(1); - o->textsize(11); - o->callback((Fl_Callback*)cb_1); - o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); - } // Fl_Value_Input* o - { Fl_Button* o = new Fl_Button(215, 185, 25, 20, "set"); + o->callback((Fl_Callback*)propagate_load); + o->align(Fl_Align(FL_ALIGN_LEFT)); + { Fl_Input_Choice* o = new Fl_Input_Choice(95, 335, 158, 20); + o->tooltip("The type of the user data."); + o->labelfont(1); + o->labelsize(11); + o->textfont(4); + o->textsize(11); + o->callback((Fl_Callback*)cb_14); + Fl_Group::current()->resizable(o); + o->menu(menu_4); + } // Fl_Input_Choice* o + { w_when_box = new Fl_Box(260, 332, 145, 26, "FL_WHEN_NEVER"); + w_when_box->box(FL_FLAT_BOX); + w_when_box->selection_color((Fl_Color)1); + w_when_box->labelsize(8); + w_when_box->align(Fl_Align(193|FL_ALIGN_INSIDE)); + } // Fl_Box* w_when_box + o->end(); + } // Fl_Group* o + wp_cpp_tab->end(); + } // Fl_Group* wp_cpp_tab + { widget_tab_grid = new Grid_Tab(10, 30, 400, 330, "Grid"); + widget_tab_grid->box(FL_NO_BOX); + widget_tab_grid->color(FL_BACKGROUND_COLOR); + widget_tab_grid->selection_color(FL_BACKGROUND_COLOR); + widget_tab_grid->labeltype(FL_NORMAL_LABEL); + widget_tab_grid->labelfont(0); + widget_tab_grid->labelsize(11); + widget_tab_grid->labelcolor(FL_FOREGROUND_COLOR); + widget_tab_grid->callback((Fl_Callback*)cb_widget_tab_grid); + widget_tab_grid->align(Fl_Align(FL_ALIGN_TOP)); + widget_tab_grid->when(FL_WHEN_RELEASE); + widget_tab_grid->hide(); + widget_tab_grid->end(); + } // Grid_Tab* widget_tab_grid + { widget_tab_grid_child = new Grid_Child_Tab(10, 30, 400, 330, "Grid Child"); + widget_tab_grid_child->box(FL_NO_BOX); + widget_tab_grid_child->color(FL_BACKGROUND_COLOR); + widget_tab_grid_child->selection_color(FL_BACKGROUND_COLOR); + widget_tab_grid_child->labeltype(FL_NORMAL_LABEL); + widget_tab_grid_child->labelfont(0); + widget_tab_grid_child->labelsize(11); + widget_tab_grid_child->labelcolor(FL_FOREGROUND_COLOR); + widget_tab_grid_child->callback((Fl_Callback*)cb_widget_tab_grid_child); + widget_tab_grid_child->align(Fl_Align(FL_ALIGN_TOP)); + widget_tab_grid_child->when(FL_WHEN_RELEASE); + widget_tab_grid_child->hide(); + widget_tab_grid_child->end(); + } // Grid_Child_Tab* widget_tab_grid_child + o->show(); + widget_tabs->end(); + } // Fl_Tabs* widget_tabs + { data_tabs = new Fl_Tabs(10, 10, 400, 350); + data_tabs->selection_color((Fl_Color)12); + data_tabs->labelsize(11); + data_tabs->labelcolor(FL_WHITE); + data_tabs->callback((Fl_Callback*)cb_data_tabs); + data_tabs->hide(); + { data_tabs_data = new Fl_Group(10, 30, 400, 330, "Inline Data"); + data_tabs_data->labelsize(11); + data_tabs_data->callback((Fl_Callback*)propagate_load); + { Fl_Group* o = new Fl_Group(95, 49, 310, 21, "Visibility:"); + o->labelfont(1); o->labelsize(11); - o->callback((Fl_Callback*)cb_set); - } // Fl_Button* o - { Fl_Value_Input* o = new Fl_Value_Input(245, 185, 55, 20, "Maximum Size:"); - o->tooltip("The maximum value of the widget."); + o->callback((Fl_Callback*)propagate_load); + o->align(Fl_Align(FL_ALIGN_LEFT)); + { Fl_Choice* o = new Fl_Choice(95, 50, 210, 20); + o->down_box(FL_BORDER_BOX); + o->labelsize(11); + o->textsize(11); + o->callback((Fl_Callback*)cb_15); + o->menu(menu_5); + } // Fl_Choice* o + { Fl_Choice* o = new Fl_Choice(95, 50, 75, 20); + o->down_box(FL_BORDER_BOX); + o->labelsize(11); + o->textsize(11); + o->callback((Fl_Callback*)cb_16); + o->menu(menu_6); + } // Fl_Choice* o + { Fl_Box* o = new Fl_Box(363, 49, 42, 20); + Fl_Group::current()->resizable(o); + } // Fl_Box* o + o->end(); + } // Fl_Group* o + { Fl_Group* o = new Fl_Group(95, 75, 310, 20, "Output: "); + o->labelfont(1); o->labelsize(11); - o->maximum(2048); - o->step(1); - o->textsize(11); - o->callback((Fl_Callback*)cb_Maximum1); - o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); - } // Fl_Value_Input* o - { Fl_Value_Input* o = new Fl_Value_Input(305, 185, 55, 20); - o->tooltip("The resolution of the widget value."); + o->callback((Fl_Callback*)propagate_load); + o->align(Fl_Align(FL_ALIGN_LEFT)); + { Fl_Choice* o = new Fl_Choice(95, 75, 210, 20); + o->tooltip("text mode generates a \"const char*\" and a trailing NUL, compressed mode use" +"s zlib to generate a binary block"); + o->down_box(FL_BORDER_BOX); + o->labelsize(11); + o->textsize(11); + o->callback((Fl_Callback*)cb_17); + o->menu(menu_7); + } // Fl_Choice* o + { Fl_Box* o = new Fl_Box(363, 75, 42, 20); + Fl_Group::current()->resizable(o); + } // Fl_Box* o + o->end(); + } // Fl_Group* o + { Fl_Input* o = new Fl_Input(95, 100, 310, 20, "Name:"); + o->tooltip("Inline Data variables are declared \"const unsigned char []\" in binary mode " +"and \"const char*\" in text mode."); + o->labelfont(1); o->labelsize(11); - o->maximum(2048); - o->step(1); + o->textfont(4); o->textsize(11); - o->callback((Fl_Callback*)cb_2); - o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); - } // Fl_Value_Input* o - { Fl_Button* o = new Fl_Button(365, 185, 25, 20, "set"); - o->labelsize(11); - o->callback((Fl_Callback*)cb_set1); + o->callback((Fl_Callback*)cb_Name); + o->align(Fl_Align(132)); + } // Fl_Input* o + { wp_data_filename = new Fl_Input(95, 125, 270, 20, "Filename:"); + wp_data_filename->tooltip("name and path of file that will be inlined"); + wp_data_filename->labelfont(1); + wp_data_filename->labelsize(11); + wp_data_filename->textfont(4); + wp_data_filename->textsize(11); + wp_data_filename->callback((Fl_Callback*)cb_wp_data_filename); + wp_data_filename->align(Fl_Align(132)); + } // Fl_Input* wp_data_filename + { Fl_Button* o = new Fl_Button(365, 125, 40, 20, "@fileopen"); + o->labelcolor((Fl_Color)134); + o->callback((Fl_Callback*)cb_fileopen); } // Fl_Button* o - { Fl_Box* o = new Fl_Box(395, 185, 0, 20); - Fl_Group::current()->resizable(o); - } // Fl_Box* o - wp_gui_sizerange->end(); - } // Fl_Group* wp_gui_sizerange - { Fl_Group* o = new Fl_Group(95, 210, 310, 20, "Shortcut:"); - o->labelfont(1); - o->labelsize(11); - o->callback((Fl_Callback*)propagate_load); - o->align(Fl_Align(FL_ALIGN_LEFT)); - { // This is a special button that grabs keystrokes directly - wp_gui_shortcut = new Fl_Shortcut_Button(95, 210, 310, 20); - wp_gui_shortcut->tooltip("The shortcut key for the widget.\nUse \'Backspace\' key to clear."); - wp_gui_shortcut->box(FL_DOWN_BOX); - wp_gui_shortcut->color(FL_BACKGROUND2_COLOR); - wp_gui_shortcut->selection_color((Fl_Color)12); - wp_gui_shortcut->labeltype(FL_NORMAL_LABEL); - wp_gui_shortcut->labelfont(0); - wp_gui_shortcut->labelsize(11); - wp_gui_shortcut->labelcolor(FL_FOREGROUND_COLOR); - wp_gui_shortcut->callback((Fl_Callback*)cb_wp_gui_shortcut); - wp_gui_shortcut->align(Fl_Align(FL_ALIGN_CENTER)); - wp_gui_shortcut->when(FL_WHEN_CHANGED); - } // Fl_Shortcut_Button* wp_gui_shortcut - o->end(); - } // Fl_Group* o - { wp_gui_xclass = new Fl_Group(95, 235, 300, 20, "X Class:"); - wp_gui_xclass->labelfont(1); - wp_gui_xclass->labelsize(11); - wp_gui_xclass->callback((Fl_Callback*)propagate_load); - wp_gui_xclass->align(Fl_Align(FL_ALIGN_LEFT)); - { Fl_Input* o = new Fl_Input(95, 235, 95, 20, ":"); - o->tooltip("The X resource class."); + { Fl_Text_Editor* o = new Fl_Text_Editor(95, 150, 310, 105, "Comment:"); + o->box(FL_DOWN_BOX); o->labelfont(1); o->labelsize(11); + o->textfont(4); o->textsize(11); - o->callback((Fl_Callback*)cb_3); + o->callback((Fl_Callback*)cb_Comment); + o->align(Fl_Align(FL_ALIGN_LEFT)); Fl_Group::current()->resizable(o); - } // Fl_Input* o - { Fl_Light_Button* o = new Fl_Light_Button(195, 235, 60, 20, "Border"); - o->tooltip("Add a border around the window."); - o->selection_color((Fl_Color)1); - o->labelsize(11); - o->callback((Fl_Callback*)cb_Border); - } // Fl_Light_Button* o - { Fl_Light_Button* o = new Fl_Light_Button(260, 235, 55, 20, "Modal"); - o->tooltip("Make the window modal."); - o->selection_color((Fl_Color)1); - o->labelsize(11); - o->callback((Fl_Callback*)cb_Modal); - } // Fl_Light_Button* o - { Fl_Light_Button* o = new Fl_Light_Button(320, 235, 75, 20, "Nonmodal"); - o->tooltip("Make the window non-modal."); - o->selection_color((Fl_Color)1); - o->labelsize(11); - o->callback((Fl_Callback*)cb_Nonmodal); - o->align(Fl_Align(132|FL_ALIGN_INSIDE)); - } // Fl_Light_Button* o - wp_gui_xclass->end(); - } // Fl_Group* wp_gui_xclass - { wp_gui_attributes = new Fl_Group(95, 260, 305, 20, "Attributes:"); - wp_gui_attributes->labelfont(1); - wp_gui_attributes->labelsize(11); - wp_gui_attributes->callback((Fl_Callback*)propagate_load); - wp_gui_attributes->align(Fl_Align(FL_ALIGN_LEFT)); - { Fl_Light_Button* o = new Fl_Light_Button(95, 260, 60, 20, "Visible"); - o->tooltip("Show the widget."); - o->selection_color((Fl_Color)1); - o->labelsize(11); - o->callback((Fl_Callback*)cb_Visible); - } // Fl_Light_Button* o - { Fl_Light_Button* o = new Fl_Light_Button(160, 260, 60, 20, "Active"); - o->tooltip("Activate the widget."); - o->selection_color((Fl_Color)1); - o->labelsize(11); - o->callback((Fl_Callback*)cb_Active); - } // Fl_Light_Button* o - { Fl_Light_Button* o = new Fl_Light_Button(225, 260, 75, 20, "Resizable"); - o->tooltip("Make the widget resizable."); - o->selection_color((Fl_Color)1); - o->labelsize(11); - o->callback((Fl_Callback*)cb_Resizable); - o->when(FL_WHEN_CHANGED); - } // Fl_Light_Button* o - { Fl_Light_Button* o = new Fl_Light_Button(225, 260, 75, 20, "Headline"); - o->tooltip("Make a menu item the headline of a menu\nunselectable, but not grayed out"); - o->selection_color((Fl_Color)1); + o->buffer(new Fl_Text_Buffer()); + o->add_key_binding(FL_Tab, 0, use_tab_navigation); + } // Fl_Text_Editor* o + data_tabs_data->end(); + Fl_Group::current()->resizable(data_tabs_data); + } // Fl_Group* data_tabs_data + data_tabs->end(); + } // Fl_Tabs* data_tabs + { comment_tabs = new Fl_Tabs(10, 10, 400, 350); + comment_tabs->selection_color((Fl_Color)12); + comment_tabs->labelsize(11); + comment_tabs->labelcolor(FL_WHITE); + comment_tabs->callback((Fl_Callback*)cb_comment_tabs); + comment_tabs->hide(); + { comment_tabs_comment = new Fl_Group(10, 30, 400, 330, "Comment"); + comment_tabs_comment->labelsize(11); + comment_tabs_comment->callback((Fl_Callback*)propagate_load); + { Fl_Text_Editor* o = comment_tabs_name = new Fl_Text_Editor(95, 45, 310, 235, "Comment:"); + comment_tabs_name->box(FL_DOWN_BOX); + comment_tabs_name->labelfont(1); + comment_tabs_name->labelsize(11); + comment_tabs_name->textfont(4); + comment_tabs_name->textsize(11); + comment_tabs_name->textcolor((Fl_Color)58); + comment_tabs_name->callback((Fl_Callback*)cb_comment_tabs_name); + comment_tabs_name->align(Fl_Align(FL_ALIGN_LEFT)); + Fl_Group::current()->resizable(comment_tabs_name); + o->when(FL_WHEN_ENTER_KEY_CHANGED|FL_WHEN_RELEASE); + o->buffer(new Fl_Text_Buffer()); + } // Fl_Text_Editor* comment_tabs_name + { Fl_Group* o = new Fl_Group(95, 285, 310, 65); + o->callback((Fl_Callback*)propagate_load); + { comment_predefined_2 = new Fl_Menu_Button(95, 285, 90, 20, "Predefined"); + comment_predefined_2->labelsize(11); + comment_predefined_2->textsize(11); + comment_predefined_2->callback((Fl_Callback*)cb_comment_predefined_2); + } // Fl_Menu_Button* comment_predefined_2 + { comment_load_2 = new Fl_Button(190, 285, 90, 20, "Import..."); + comment_load_2->labelsize(11); + comment_load_2->callback((Fl_Callback*)cb_comment_load_2); + } // Fl_Button* comment_load_2 + { Fl_Check_Button* o = new Fl_Check_Button(95, 310, 120, 20, "output to header file"); + o->tooltip("write the comment into the header (.h) file"); + o->down_box(FL_DOWN_BOX); + o->labelsize(11); + o->callback((Fl_Callback*)cb_output); + o->when(FL_WHEN_CHANGED); + } // Fl_Check_Button* o + { Fl_Check_Button* o = new Fl_Check_Button(95, 330, 120, 20, "output to source file"); + o->tooltip("write the comment into the source (.cxx) file"); + o->down_box(FL_DOWN_BOX); + o->labelsize(11); + o->callback((Fl_Callback*)cb_output1); + o->when(FL_WHEN_CHANGED); + } // Fl_Check_Button* o + { Fl_Box* o = new Fl_Box(404, 285, 1, 65); + o->labelsize(11); + Fl_Group::current()->resizable(o); + } // Fl_Box* o + o->end(); + } // Fl_Group* o + comment_tabs_comment->end(); + Fl_Group::current()->resizable(comment_tabs_comment); + } // Fl_Group* comment_tabs_comment + comment_tabs->end(); + } // Fl_Tabs* comment_tabs + { class_tabs = new Fl_Tabs(10, 10, 400, 350); + class_tabs->selection_color((Fl_Color)12); + class_tabs->labelsize(11); + class_tabs->labelcolor(FL_WHITE); + class_tabs->callback((Fl_Callback*)cb_class_tabs); + class_tabs->hide(); + { class_tabs_main = new Fl_Group(10, 30, 400, 330, "Class"); + class_tabs_main->labelsize(11); + class_tabs_main->callback((Fl_Callback*)propagate_load); + { /* + This elemnt is hidden because we don't + support a class inside a class at this point + */ + Fl_Group* o = new Fl_Group(95, 50, 310, 21, "Visibility:"); + o->labelfont(1); o->labelsize(11); - o->callback((Fl_Callback*)cb_Headline); - o->when(FL_WHEN_CHANGED); + o->callback((Fl_Callback*)propagate_load); + o->align(Fl_Align(FL_ALIGN_LEFT)); o->hide(); - } // Fl_Light_Button* o - { Fl_Light_Button* o = new Fl_Light_Button(305, 260, 70, 20, "Hotspot"); - o->tooltip("Center the window under this widget."); - o->selection_color((Fl_Color)1); - o->labelsize(11); - o->callback((Fl_Callback*)cb_Hotspot); - o->when(FL_WHEN_CHANGED); - } // Fl_Light_Button* o - { Fl_Box* o = new Fl_Box(395, 260, 0, 20); - o->labelsize(11); - } // Fl_Box* o - wp_gui_attributes->end(); - } // Fl_Group* wp_gui_attributes - { wp_gui_tooltip = new Fl_Input(95, 285, 310, 20, "Tooltip:"); - wp_gui_tooltip->tooltip("The tooltip text for the widget.\nUse Ctrl-J for newlines."); - wp_gui_tooltip->labelfont(1); - wp_gui_tooltip->labelsize(11); - wp_gui_tooltip->textsize(11); - wp_gui_tooltip->callback((Fl_Callback*)cb_wp_gui_tooltip); - } // Fl_Input* wp_gui_tooltip - { Fl_Box* o = new Fl_Box(95, 305, 300, 5); - o->hide(); - Fl_Group::current()->resizable(o); - } // Fl_Box* o - wp_gui_tab->end(); - Fl_Group::current()->resizable(wp_gui_tab); - } // Fl_Group* wp_gui_tab - { wp_style_tab = new Fl_Group(10, 30, 400, 330, "Style"); - wp_style_tab->labelsize(11); - wp_style_tab->callback((Fl_Callback*)propagate_load); - wp_style_tab->when(FL_WHEN_NEVER); - wp_style_tab->hide(); - { wp_style_label = new Fl_Group(99, 40, 305, 20, "Label Font:"); - wp_style_label->labelfont(1); - wp_style_label->labelsize(11); - wp_style_label->callback((Fl_Callback*)propagate_load); - wp_style_label->align(Fl_Align(FL_ALIGN_LEFT)); - { Fl_Choice* o = new Fl_Choice(99, 40, 148, 20); - o->tooltip("The style of the label text."); - o->box(FL_THIN_UP_BOX); - o->down_box(FL_BORDER_BOX); + { Fl_Choice* o = new Fl_Choice(95, 50, 75, 20); + o->tooltip("visibility for a class inside a class"); + o->down_box(FL_BORDER_BOX); + o->labelsize(11); + o->textsize(11); + o->callback((Fl_Callback*)cb_18); + o->menu(menu_8); + } // Fl_Choice* o + { Fl_Box* o = new Fl_Box(363, 50, 42, 20); + Fl_Group::current()->resizable(o); + } // Fl_Box* o + o->end(); + } // Fl_Group* o + { Fl_Input* o = new Fl_Input(95, 50, 305, 20, "Attribute:"); + o->tooltip("class attribute or `alignas()`"); o->labelfont(1); o->labelsize(11); + o->textfont(4); o->textsize(11); - o->callback((Fl_Callback*)cb_4); - Fl_Group::current()->resizable(o); - o->menu(fontmenu); - } // Fl_Choice* o - { Fl_Value_Input* o = new Fl_Value_Input(247, 40, 49, 20); - o->tooltip("The size of the label text."); - o->labelsize(11); - o->maximum(100); - o->step(1); - o->value(14); - o->textsize(11); - o->callback((Fl_Callback*)cb_5); - } // Fl_Value_Input* o - { w_labelcolor = new Fl_Button(296, 40, 90, 20, "Label Color"); - w_labelcolor->tooltip("The color of the label text."); - w_labelcolor->labelsize(11); - w_labelcolor->callback((Fl_Callback*)cb_w_labelcolor); - } // Fl_Button* w_labelcolor - { Fl_Menu_Button* o = new Fl_Menu_Button(386, 40, 18, 20); - o->callback((Fl_Callback*)cb_6); - o->menu(colormenu); - } // Fl_Menu_Button* o - wp_style_label->end(); - } // Fl_Group* wp_style_label - { wp_style_box = new Fl_Group(99, 65, 305, 20, "Box:"); - wp_style_box->labelfont(1); - wp_style_box->labelsize(11); - wp_style_box->callback((Fl_Callback*)propagate_load); - wp_style_box->align(Fl_Align(FL_ALIGN_LEFT)); - { Fl_Choice* o = new Fl_Choice(100, 65, 196, 20); - o->tooltip("The \"up\" box of the widget."); - o->box(FL_THIN_UP_BOX); - o->down_box(FL_BORDER_BOX); + o->callback((Fl_Callback*)cb_Attribute); + } // Fl_Input* o + { Fl_Input* o = new Fl_Input(95, 75, 305, 20, "Class Name:"); + o->tooltip("class name, must be a single C++ keyword"); o->labelfont(1); o->labelsize(11); + o->textfont(4); o->textsize(11); - o->callback((Fl_Callback*)cb_7); - Fl_Group::current()->resizable(o); - o->menu(boxmenu); - } // Fl_Choice* o - { w_color = new Fl_Button(296, 65, 90, 20, "Color"); - w_color->tooltip("The background color of the widget."); - w_color->labelsize(11); - w_color->callback((Fl_Callback*)cb_w_color); - } // Fl_Button* w_color - { Fl_Menu_Button* o = new Fl_Menu_Button(386, 65, 18, 20); - o->callback((Fl_Callback*)cb_8); - o->menu(colormenu); - } // Fl_Menu_Button* o - wp_style_box->end(); - } // Fl_Group* wp_style_box - { wp_style_downbox = new Fl_Group(99, 90, 305, 20, "Down Box:"); - wp_style_downbox->labelfont(1); - wp_style_downbox->labelsize(11); - wp_style_downbox->callback((Fl_Callback*)propagate_load); - wp_style_downbox->align(Fl_Align(FL_ALIGN_LEFT)); - { Fl_Choice* o = new Fl_Choice(99, 90, 197, 20); - o->tooltip("The \"down\" box of the widget."); - o->box(FL_THIN_UP_BOX); - o->down_box(FL_BORDER_BOX); + o->callback((Fl_Callback*)cb_Class); + } // Fl_Input* o + { Fl_Input* o = new Fl_Input(95, 100, 305, 20, "Base Class:"); + o->tooltip("visibility and name of base class or classes\ne.g. `public Fl_Widget`"); o->labelfont(1); o->labelsize(11); + o->textfont(4); o->textsize(11); - o->callback((Fl_Callback*)cb_9); - Fl_Group::current()->resizable(o); - o->menu(boxmenu); - } // Fl_Choice* o - { w_selectcolor = new Fl_Button(296, 90, 90, 20, "Select Color"); - w_selectcolor->tooltip("The selection color of the widget."); - w_selectcolor->labelsize(11); - w_selectcolor->callback((Fl_Callback*)cb_w_selectcolor); - } // Fl_Button* w_selectcolor - { Fl_Menu_Button* o = new Fl_Menu_Button(386, 90, 18, 20); - o->callback((Fl_Callback*)cb_a); - o->menu(colormenu); - } // Fl_Menu_Button* o - wp_style_downbox->end(); - } // Fl_Group* wp_style_downbox - { wp_style_text = new Fl_Group(99, 115, 305, 20, "Text Font:"); - wp_style_text->labelfont(1); - wp_style_text->labelsize(11); - wp_style_text->callback((Fl_Callback*)propagate_load); - wp_style_text->align(Fl_Align(FL_ALIGN_LEFT)); - { Fl_Choice* o = new Fl_Choice(99, 115, 148, 20); - o->tooltip("The value text style."); + o->callback((Fl_Callback*)cb_Base); + } // Fl_Input* o + { Fl_Text_Editor* o = new Fl_Text_Editor(95, 125, 305, 110, "Comment:"); o->box(FL_DOWN_BOX); - o->down_box(FL_BORDER_BOX); o->labelfont(1); o->labelsize(11); + o->textfont(4); o->textsize(11); - o->callback((Fl_Callback*)cb_b); - Fl_Group::current()->resizable(o); - o->menu(fontmenu); - } // Fl_Choice* o - { Fl_Value_Input* o = new Fl_Value_Input(247, 115, 49, 20); - o->tooltip("The value text size."); - o->labelsize(11); - o->maximum(100); - o->step(1); - o->value(14); - o->textsize(11); - o->callback((Fl_Callback*)cb_c); - } // Fl_Value_Input* o - { w_textcolor = new Fl_Button(296, 115, 90, 20, "Text Color"); - w_textcolor->tooltip("The value text color."); - w_textcolor->labelsize(11); - w_textcolor->callback((Fl_Callback*)cb_w_textcolor); - } // Fl_Button* w_textcolor - { Fl_Menu_Button* o = new Fl_Menu_Button(386, 115, 18, 20); - o->callback((Fl_Callback*)cb_d); - o->menu(colormenu); - } // Fl_Menu_Button* o - wp_style_text->end(); - } // Fl_Group* wp_style_text - { Fl_Group* o = new Fl_Group(99, 150, 242, 20, "Label Margin:"); - o->labelfont(1); - o->labelsize(11); - o->callback((Fl_Callback*)propagate_load); - o->align(Fl_Align(FL_ALIGN_LEFT)); - { Fl_Value_Input* o = new Fl_Value_Input(99, 150, 55, 20, "Horizontal:"); - o->tooltip("Spacing between label and the horizontally aligned side of the widget."); - o->labelsize(11); - o->minimum(-127); - o->maximum(128); - o->step(1); - o->textsize(11); - o->callback((Fl_Callback*)cb_Horizontal); - o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); - } // Fl_Value_Input* o - { Fl_Value_Input* o = new Fl_Value_Input(159, 150, 55, 20, "Vertical:"); - o->tooltip("Spacing between label and the vertically aligned side of the widget."); - o->labelsize(11); - o->minimum(-127); - o->maximum(127); - o->step(1); - o->textsize(11); - o->callback((Fl_Callback*)cb_Vertical); - o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); - } // Fl_Value_Input* o - { Fl_Value_Input* o = new Fl_Value_Input(219, 150, 55, 20, "Image Gap:"); - o->tooltip("Gap between label image and text in pixels"); - o->labelsize(11); - o->maximum(255); - o->step(1); - o->textsize(11); - o->callback((Fl_Callback*)cb_Image); - o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); - } // Fl_Value_Input* o - { Fl_Box* o = new Fl_Box(281, 150, 60, 20); - o->labelsize(11); - o->hide(); + o->callback((Fl_Callback*)cb_Comment1); + o->align(Fl_Align(FL_ALIGN_LEFT)); Fl_Group::current()->resizable(o); - } // Fl_Box* o - o->end(); - } // Fl_Group* o - { Fl_Light_Button* o = new Fl_Light_Button(99, 175, 90, 20, "Compact"); - o->tooltip("use compact box types for closely set buttons"); - o->selection_color((Fl_Color)1); - o->labelsize(11); - o->callback((Fl_Callback*)cb_Compact); - } // Fl_Light_Button* o - { Fl_Box* o = new Fl_Box(195, 205, 40, 40); - o->labelsize(11); - Fl_Group::current()->resizable(o); - } // Fl_Box* o - wp_style_tab->end(); - } // Fl_Group* wp_style_tab - { wp_cpp_tab = new Fl_Group(10, 30, 400, 330, "C++"); - wp_cpp_tab->labelsize(11); - wp_cpp_tab->callback((Fl_Callback*)propagate_load); - wp_cpp_tab->when(FL_WHEN_NEVER); - wp_cpp_tab->hide(); - { wp_cpp_class = new Fl_Group(95, 40, 310, 20, "Class:"); - wp_cpp_class->labelfont(1); - wp_cpp_class->labelsize(11); - wp_cpp_class->callback((Fl_Callback*)propagate_load); - wp_cpp_class->align(Fl_Align(FL_ALIGN_LEFT)); - { Fl_Input* o = new Fl_Input(95, 40, 172, 20); - o->tooltip("The widget subclass."); + o->buffer(new Fl_Text_Buffer()); + o->add_key_binding(FL_Tab, 0, use_tab_navigation); + } // Fl_Text_Editor* o + class_tabs_main->end(); + Fl_Group::current()->resizable(class_tabs_main); + } // Fl_Group* class_tabs_main + class_tabs->end(); + } // Fl_Tabs* class_tabs + { declblock_tabs = new Fl_Tabs(10, 10, 400, 350); + declblock_tabs->selection_color((Fl_Color)12); + declblock_tabs->labelsize(11); + declblock_tabs->labelcolor(FL_WHITE); + declblock_tabs->callback((Fl_Callback*)cb_declblock_tabs); + declblock_tabs->hide(); + { declblock_tabs_main = new Fl_Group(10, 30, 400, 330, "Declaration Block"); + declblock_tabs_main->labelsize(11); + declblock_tabs_main->callback((Fl_Callback*)propagate_load); + { Fl_Input* o = new Fl_Input(95, 50, 305, 20, "Start Code:"); + o->tooltip("`#ifdef` or similar conditional declaration block"); o->labelfont(1); o->labelsize(11); o->textfont(4); o->textsize(11); - o->callback((Fl_Callback*)cb_e, (void*)(4)); - Fl_Group::current()->resizable(o); + o->callback((Fl_Callback*)cb_Start); } // Fl_Input* o - { Fl_Choice* o = new Fl_Choice(267, 40, 138, 20); - o->tooltip("The widget subtype."); - o->box(FL_THIN_UP_BOX); - o->down_box(FL_BORDER_BOX); - o->labelsize(11); - o->textsize(11); - o->callback((Fl_Callback*)cb_f); - } // Fl_Choice* o - wp_cpp_class->end(); - } // Fl_Group* wp_cpp_class - { wp_cpp_name = new Fl_Group(95, 65, 310, 20, "Name:"); - wp_cpp_name->labelfont(1); - wp_cpp_name->labelsize(11); - wp_cpp_name->callback((Fl_Callback*)propagate_load); - wp_cpp_name->align(Fl_Align(FL_ALIGN_LEFT)); - { Fl_Input* o = new Fl_Input(95, 65, 235, 20); - o->tooltip("The name of the widget."); + { Fl_Input* o = new Fl_Input(95, 75, 305, 20, "End Code:"); + o->tooltip("`#endif` or similar declaration code block"); o->labelfont(1); o->labelsize(11); + o->textfont(4); o->textsize(11); - o->callback((Fl_Callback*)cb_10); - Fl_Group::current()->resizable(o); + o->callback((Fl_Callback*)cb_End); } // 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); + { Fl_Group* o = new Fl_Group(95, 100, 305, 120); + o->callback((Fl_Callback*)propagate_load); + { Fl_Box* o = new Fl_Box(95, 100, 270, 20, "Enclose code generated by children in source file:"); + o->labelsize(11); + o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE)); + } // Fl_Box* o + { Fl_Check_Button* o = new Fl_Check_Button(105, 120, 260, 20, "implementations"); + o->down_box(FL_DOWN_BOX); + o->labelsize(11); + o->callback((Fl_Callback*)cb_implementations); + } // Fl_Check_Button* o + { Fl_Check_Button* o = new Fl_Check_Button(105, 140, 260, 20, "static initializations and callbacks"); + o->down_box(FL_DOWN_BOX); + o->labelsize(11); + o->callback((Fl_Callback*)cb_static); + } // Fl_Check_Button* o + { Fl_Box* o = new Fl_Box(95, 160, 270, 20, "Enclose code in header file:"); + o->labelsize(11); + o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE)); + } // Fl_Box* o + { Fl_Check_Button* o = new Fl_Check_Button(105, 180, 260, 20, "forward declarations"); + o->down_box(FL_DOWN_BOX); + o->labelsize(11); + o->callback((Fl_Callback*)cb_forward); + } // Fl_Check_Button* o + { Fl_Check_Button* o = new Fl_Check_Button(105, 200, 260, 20, "preprecessor and callback declarations"); + o->down_box(FL_DOWN_BOX); + o->labelsize(11); + o->callback((Fl_Callback*)cb_preprecessor); + } // Fl_Check_Button* o + { Fl_Box* o = new Fl_Box(365, 100, 35, 120); + o->labelsize(11); + o->hide(); + Fl_Group::current()->resizable(o); + } // Fl_Box* o + o->end(); + } // Fl_Group* o + { Fl_Text_Editor* o = new Fl_Text_Editor(95, 225, 305, 117, "Comment:"); + o->box(FL_DOWN_BOX); + o->labelfont(1); o->labelsize(11); + o->textfont(4); o->textsize(11); - o->callback((Fl_Callback*)cb_11); - o->when(FL_WHEN_CHANGED); - o->menu(menu_2); - } // Fl_Choice* o - { Fl_Choice* o = new Fl_Choice(330, 65, 75, 20); - o->tooltip("Change widget accessibility."); - o->down_box(FL_BORDER_BOX); + o->callback((Fl_Callback*)cb_Comment2); + o->align(Fl_Align(FL_ALIGN_LEFT)); + Fl_Group::current()->resizable(o); + o->buffer(new Fl_Text_Buffer()); + o->add_key_binding(FL_Tab, 0, use_tab_navigation); + } // Fl_Text_Editor* o + declblock_tabs_main->end(); + Fl_Group::current()->resizable(declblock_tabs_main); + } // Fl_Group* declblock_tabs_main + declblock_tabs->end(); + } // Fl_Tabs* declblock_tabs + { decl_tabs = new Fl_Tabs(10, 10, 400, 350); + decl_tabs->selection_color((Fl_Color)12); + decl_tabs->labelsize(11); + decl_tabs->labelcolor(FL_WHITE); + decl_tabs->callback((Fl_Callback*)cb_decl_tabs); + decl_tabs->hide(); + { decl_tabs_main = new Fl_Group(10, 30, 400, 330, "Declaration"); + decl_tabs_main->labelsize(11); + decl_tabs_main->callback((Fl_Callback*)propagate_load); + { Fl_Group* o = new Fl_Group(15, 50, 390, 20); + o->labelfont(1); o->labelsize(11); - o->textsize(11); - o->callback((Fl_Callback*)name_public_cb); - o->when(FL_WHEN_CHANGED); - o->hide(); - o->menu(menu_3); - } // Fl_Choice* o - wp_cpp_name->end(); - } // Fl_Group* wp_cpp_name - { v_input[0] = new Fl_Input(95, 90, 310, 20, "Extra Code:"); - v_input[0]->tooltip("Extra initialization code for the widget."); - v_input[0]->labelfont(1); - v_input[0]->labelsize(11); - v_input[0]->textfont(4); - v_input[0]->textsize(11); - v_input[0]->callback((Fl_Callback*)cb_v_input, (void*)(0)); - } // Fl_Input* v_input[0] - { v_input[1] = new Fl_Input(95, 110, 310, 20); - v_input[1]->tooltip("Extra initialization code for the widget."); - v_input[1]->labelsize(11); - v_input[1]->textfont(4); - v_input[1]->textsize(11); - v_input[1]->callback((Fl_Callback*)cb_v_input1, (void*)(1)); - } // Fl_Input* v_input[1] - { v_input[2] = new Fl_Input(95, 130, 310, 20); - v_input[2]->tooltip("Extra initialization code for the widget."); - v_input[2]->labelsize(11); - v_input[2]->textfont(4); - v_input[2]->textsize(11); - v_input[2]->callback((Fl_Callback*)cb_v_input2, (void*)(2)); - } // Fl_Input* v_input[2] - { v_input[3] = new Fl_Input(95, 150, 310, 20); - v_input[3]->tooltip("Extra initialization code for the widget."); - v_input[3]->labelsize(11); - v_input[3]->textfont(4); - v_input[3]->textsize(11); - v_input[3]->callback((Fl_Callback*)cb_v_input3, (void*)(3)); - } // Fl_Input* v_input[3] - { Fl_Tile* o = new Fl_Tile(95, 175, 310, 130); - o->callback((Fl_Callback*)cb_12); - { Fl_Group* o = new Fl_Group(95, 175, 310, 48); - o->box(FL_FLAT_BOX); - { wComment = new Fl_Text_Editor(95, 175, 310, 45, "Comment:"); - wComment->tooltip("Write a comment that will appear in the source code and in the widget tree ov" -"erview."); - wComment->box(FL_DOWN_BOX); - wComment->labelfont(1); - wComment->labelsize(11); - wComment->textfont(6); - wComment->textsize(11); - wComment->textcolor((Fl_Color)59); - wComment->callback((Fl_Callback*)cb_wComment); - wComment->align(Fl_Align(FL_ALIGN_LEFT)); - wComment->when(FL_WHEN_CHANGED); - Fl_Group::current()->resizable(wComment); - wComment->buffer(new Fl_Text_Buffer()); - } // Fl_Text_Editor* wComment + o->callback((Fl_Callback*)propagate_load); + o->align(Fl_Align(FL_ALIGN_LEFT)); + { Fl_Box* o = new Fl_Box(404, 50, 1, 20); + o->hide(); + Fl_Group::current()->resizable(o); + } // Fl_Box* o + { Fl_Box* o = new Fl_Box(95, 50, 1, 20, "Visibility:"); + o->labelfont(1); + o->labelsize(11); + o->align(Fl_Align(FL_ALIGN_LEFT)); + } // Fl_Box* o + { Fl_Choice* o = new Fl_Choice(95, 50, 185, 20); + o->down_box(FL_BORDER_BOX); + o->labelsize(11); + o->textsize(11); + o->callback((Fl_Callback*)cb_19); + o->menu(menu_9); + } // Fl_Choice* o + { Fl_Choice* o = new Fl_Choice(95, 50, 75, 20); + o->down_box(FL_BORDER_BOX); + o->labelsize(11); + o->textsize(11); + o->callback((Fl_Callback*)cb_1a); + o->menu(menu_a); + } // Fl_Choice* o o->end(); } // Fl_Group* o - { Fl_Group* o = new Fl_Group(95, 223, 310, 82); - o->box(FL_FLAT_BOX); - { wCallback = new fld::widget::Code_Editor(95, 225, 310, 80, "Callback:"); - wCallback->tooltip("The callback function or code for the widget. Use the variable name \'o\' to " -"access the Widget pointer and \'v\' to access the user value."); - wCallback->box(FL_DOWN_BOX); - wCallback->color(FL_BACKGROUND2_COLOR); - wCallback->selection_color(FL_SELECTION_COLOR); - wCallback->labeltype(FL_NORMAL_LABEL); - wCallback->labelfont(1); - wCallback->labelsize(11); - wCallback->labelcolor(FL_FOREGROUND_COLOR); - wCallback->textfont(4); - wCallback->textsize(11); - wCallback->callback((Fl_Callback*)cb_wCallback); - wCallback->align(Fl_Align(FL_ALIGN_LEFT)); - wCallback->when(FL_WHEN_RELEASE); - Fl_Group::current()->resizable(wCallback); - } // fld::widget::Code_Editor* wCallback + { Fl_Tile* o = new Fl_Tile(15, 75, 390, 210); + o->callback((Fl_Callback*)cb_1b); + { Fl_Group* o = new Fl_Group(15, 75, 390, 105); + o->box(FL_FLAT_BOX); + o->labelfont(1); + o->labelsize(11); + o->callback((Fl_Callback*)propagate_load); + o->align(Fl_Align(FL_ALIGN_LEFT)); + { fld::widget::Code_Editor* o = new fld::widget::Code_Editor(95, 75, 310, 100, "Declaration:"); + o->tooltip("a declaration: `int x;`, an external symbol: `extern int foo();`,\na `#` dire" +"ctive: `#include <foo.h>`, a typedef `typedef char byte;`,\n or a `using` stat" +"ement, etc."); + o->box(FL_DOWN_FRAME); + o->color(FL_BACKGROUND2_COLOR); + o->selection_color(FL_SELECTION_COLOR); + o->labeltype(FL_NORMAL_LABEL); + o->labelfont(1); + o->labelsize(11); + o->labelcolor(FL_FOREGROUND_COLOR); + o->textsize(11); + o->callback((Fl_Callback*)cb_Declaration); + o->align(Fl_Align(132)); + o->when(FL_WHEN_RELEASE); + Fl_Group::current()->resizable(o); + o->add_key_binding(FL_Tab, 0, use_tab_navigation); + } // fld::widget::Code_Editor* o + o->end(); + } // Fl_Group* o + { Fl_Group* o = new Fl_Group(15, 180, 390, 105); + o->box(FL_FLAT_BOX); + o->callback((Fl_Callback*)propagate_load); + { Fl_Text_Editor* o = new Fl_Text_Editor(95, 185, 310, 100, "Comment:"); + o->box(FL_DOWN_BOX); + o->labelfont(1); + o->labelsize(11); + o->textfont(4); + o->textsize(11); + o->callback((Fl_Callback*)cb_Comment3); + o->align(Fl_Align(FL_ALIGN_LEFT)); + Fl_Group::current()->resizable(o); + o->buffer(new Fl_Text_Buffer()); + o->add_key_binding(FL_Tab, 0, use_tab_navigation); + } // Fl_Text_Editor* o + o->end(); + } // Fl_Group* o + o->size_range(0, 25, 55); + o->size_range(1, 25, 55); o->end(); - } // Fl_Group* 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."); + Fl_Group::current()->resizable(o); + } // Fl_Tile* o + decl_tabs_main->end(); + Fl_Group::current()->resizable(decl_tabs_main); + } // Fl_Group* decl_tabs_main + decl_tabs->end(); + } // Fl_Tabs* decl_tabs + { codeblock_tabs = new Fl_Tabs(10, 10, 400, 350); + codeblock_tabs->selection_color((Fl_Color)12); + codeblock_tabs->labelsize(11); + codeblock_tabs->labelcolor(FL_WHITE); + codeblock_tabs->callback((Fl_Callback*)cb_codeblock_tabs); + codeblock_tabs->hide(); + { codeblock_tabs_main = new Fl_Group(10, 30, 400, 330, "Code Block"); + codeblock_tabs_main->labelsize(11); + codeblock_tabs_main->callback((Fl_Callback*)propagate_load); + { Fl_Input* o = new Fl_Input(95, 50, 305, 20, "Start Code:"); + o->tooltip("condition statement: `if (x==1)`, or empty"); o->labelfont(1); o->labelsize(11); o->textfont(4); o->textsize(11); - o->callback((Fl_Callback*)cb_13); - Fl_Group::current()->resizable(o); + o->callback((Fl_Callback*)cb_Start1); } // 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); + { Fl_Input* o = new Fl_Input(95, 75, 305, 20, "End Code:"); + o->tooltip("condition end: `while (x==1);`, or empty"); o->labelfont(1); o->labelsize(11); + o->textfont(4); o->textsize(11); - o->callback((Fl_Callback*)cb_When); - o->when(FL_WHEN_CHANGED); - o->menu(whenmenu); - } // Fl_Menu_Button* o - wp_cpp_callback->end(); - } // Fl_Group* wp_cpp_callback - { Fl_Group* o = new Fl_Group(95, 332, 310, 26, "Type:"); - o->labelfont(1); - o->labelsize(11); - o->callback((Fl_Callback*)propagate_load); - o->align(Fl_Align(FL_ALIGN_LEFT)); - { Fl_Input_Choice* o = new Fl_Input_Choice(95, 335, 158, 20); - o->tooltip("The type of the user data."); + o->callback((Fl_Callback*)cb_End1); + } // Fl_Input* o + { Fl_Text_Editor* o = new Fl_Text_Editor(95, 100, 305, 117, "Comment:"); + o->tooltip("code block comment"); + o->box(FL_DOWN_BOX); o->labelfont(1); o->labelsize(11); o->textfont(4); o->textsize(11); - o->callback((Fl_Callback*)cb_14); + o->callback((Fl_Callback*)cb_Comment4); + o->align(Fl_Align(FL_ALIGN_LEFT)); Fl_Group::current()->resizable(o); - o->menu(menu_4); - } // Fl_Input_Choice* o - { w_when_box = new Fl_Box(260, 332, 145, 26, "FL_WHEN_NEVER"); - w_when_box->box(FL_FLAT_BOX); - w_when_box->selection_color((Fl_Color)1); - w_when_box->labelsize(8); - w_when_box->align(Fl_Align(193|FL_ALIGN_INSIDE)); - } // Fl_Box* w_when_box - o->end(); - } // Fl_Group* o - wp_cpp_tab->end(); - } // Fl_Group* wp_cpp_tab - { widget_tab_grid = new Grid_Tab(10, 30, 400, 330, "Grid"); - widget_tab_grid->box(FL_NO_BOX); - widget_tab_grid->color(FL_BACKGROUND_COLOR); - widget_tab_grid->selection_color(FL_BACKGROUND_COLOR); - widget_tab_grid->labeltype(FL_NORMAL_LABEL); - widget_tab_grid->labelfont(0); - widget_tab_grid->labelsize(11); - widget_tab_grid->labelcolor(FL_FOREGROUND_COLOR); - widget_tab_grid->callback((Fl_Callback*)cb_widget_tab_grid); - widget_tab_grid->align(Fl_Align(FL_ALIGN_TOP)); - widget_tab_grid->when(FL_WHEN_RELEASE); - widget_tab_grid->hide(); - widget_tab_grid->end(); - } // Grid_Tab* widget_tab_grid - { widget_tab_grid_child = new Grid_Child_Tab(10, 30, 400, 330, "Grid Child"); - widget_tab_grid_child->box(FL_NO_BOX); - widget_tab_grid_child->color(FL_BACKGROUND_COLOR); - widget_tab_grid_child->selection_color(FL_BACKGROUND_COLOR); - widget_tab_grid_child->labeltype(FL_NORMAL_LABEL); - widget_tab_grid_child->labelfont(0); - widget_tab_grid_child->labelsize(11); - widget_tab_grid_child->labelcolor(FL_FOREGROUND_COLOR); - widget_tab_grid_child->callback((Fl_Callback*)cb_widget_tab_grid_child); - widget_tab_grid_child->align(Fl_Align(FL_ALIGN_TOP)); - widget_tab_grid_child->when(FL_WHEN_RELEASE); - widget_tab_grid_child->hide(); - widget_tab_grid_child->end(); - } // Grid_Child_Tab* widget_tab_grid_child - o->show(); - widget_tabs->end(); - Fl_Group::current()->resizable(widget_tabs); - } // Fl_Tabs* widget_tabs + o->buffer(new Fl_Text_Buffer()); + o->add_key_binding(FL_Tab, 0, use_tab_navigation); + } // Fl_Text_Editor* o + codeblock_tabs_main->end(); + Fl_Group::current()->resizable(codeblock_tabs_main); + } // Fl_Group* codeblock_tabs_main + codeblock_tabs->end(); + } // Fl_Tabs* codeblock_tabs + { code_tabs = new Fl_Tabs(10, 10, 400, 350); + code_tabs->selection_color((Fl_Color)12); + code_tabs->labelsize(11); + code_tabs->labelcolor(FL_WHITE); + code_tabs->callback((Fl_Callback*)cb_code_tabs); + code_tabs->hide(); + { code_tabs_main = new Fl_Group(10, 30, 400, 330, "Code"); + code_tabs_main->labelsize(11); + code_tabs_main->callback((Fl_Callback*)propagate_load); + { fld::widget::Code_Editor* o = new fld::widget::Code_Editor(15, 40, 390, 315); + o->box(FL_DOWN_BOX); + o->color(FL_BACKGROUND2_COLOR); + o->selection_color(FL_SELECTION_COLOR); + o->labeltype(FL_NORMAL_LABEL); + o->labelfont(0); + o->labelsize(11); + o->labelcolor(FL_FOREGROUND_COLOR); + o->textfont(4); + o->textsize(11); + o->callback((Fl_Callback*)cb_1c); + o->align(Fl_Align(FL_ALIGN_TOP)); + o->when(FL_WHEN_RELEASE | FL_WHEN_ENTER_KEY_CHANGED); + Fl_Group::current()->resizable(o); + o->linenumber_width(60); +o->linenumber_size(o->Fl_Text_Display::textsize()); + } // fld::widget::Code_Editor* o + code_tabs_main->end(); + Fl_Group::current()->resizable(code_tabs_main); + } // Fl_Group* code_tabs_main + code_tabs->end(); + } // Fl_Tabs* code_tabs + { func_tabs = new Fl_Tabs(10, 10, 400, 350); + func_tabs->selection_color((Fl_Color)12); + func_tabs->labelsize(11); + func_tabs->labelcolor(FL_WHITE); + func_tabs->callback((Fl_Callback*)cb_func_tabs); + func_tabs->hide(); + { func_tabs_main = new Fl_Group(10, 30, 400, 330, "Function"); + func_tabs_main->labelsize(11); + func_tabs_main->callback((Fl_Callback*)propagate_load); + { Fl_Group* o = new Fl_Group(15, 50, 390, 45); + o->labelfont(1); + o->labelsize(11); + o->callback((Fl_Callback*)propagate_load); + o->align(Fl_Align(FL_ALIGN_LEFT)); + { Fl_Box* o = new Fl_Box(404, 50, 1, 20); + o->hide(); + Fl_Group::current()->resizable(o); + } // Fl_Box* o + { Fl_Box* o = new Fl_Box(95, 50, 1, 20, "Visibility:"); + o->labelfont(1); + o->labelsize(11); + o->align(Fl_Align(FL_ALIGN_LEFT)); + } // Fl_Box* o + { Fl_Choice* o = new Fl_Choice(95, 50, 80, 20); + o->down_box(FL_BORDER_BOX); + o->labelsize(11); + o->textsize(11); + o->callback((Fl_Callback*)cb_1d); + o->menu(menu_b); + } // Fl_Choice* o + { Fl_Choice* o = new Fl_Choice(95, 50, 75, 20); + o->down_box(FL_BORDER_BOX); + o->labelsize(11); + o->textsize(11); + o->callback((Fl_Callback*)cb_1e); + o->menu(menu_c); + } // Fl_Choice* o + { Fl_Check_Button* o = new Fl_Check_Button(95, 75, 90, 20, "declare \"C\""); + o->down_box(FL_DOWN_BOX); + o->labelsize(11); + o->callback((Fl_Callback*)cb_declare); + } // Fl_Check_Button* o + o->end(); + } // Fl_Group* o + { Fl_Tile* o = new Fl_Tile(15, 100, 390, 220); + o->callback((Fl_Callback*)cb_1f); + { Fl_Group* o = new Fl_Group(15, 100, 390, 55); + o->box(FL_FLAT_BOX); + o->labelfont(1); + o->labelsize(11); + o->callback((Fl_Callback*)propagate_load); + o->align(Fl_Align(FL_ALIGN_LEFT)); + { fld::widget::Code_Editor* o = new fld::widget::Code_Editor(95, 100, 310, 50, "Function\nName and\nArgs:"); + o->tooltip("function name and args, or blank for `main(..)`"); + o->box(FL_DOWN_FRAME); + o->color(FL_BACKGROUND2_COLOR); + o->selection_color(FL_SELECTION_COLOR); + o->labeltype(FL_NORMAL_LABEL); + o->labelfont(1); + o->labelsize(11); + o->labelcolor(FL_FOREGROUND_COLOR); + o->textsize(11); + o->callback((Fl_Callback*)cb_Function); + o->align(Fl_Align(132)); + o->when(FL_WHEN_RELEASE); + Fl_Group::current()->resizable(o); + o->add_key_binding(FL_Tab, 0, use_tab_navigation); + } // fld::widget::Code_Editor* o + o->end(); + } // Fl_Group* o + { Fl_Group* o = new Fl_Group(15, 155, 390, 60); + o->box(FL_FLAT_BOX); + o->labelfont(1); + o->labelsize(11); + o->callback((Fl_Callback*)propagate_load); + o->align(Fl_Align(FL_ALIGN_LEFT)); + { fld::widget::Code_Editor* o = new fld::widget::Code_Editor(95, 160, 310, 50, "Return Type:"); + o->tooltip("return type, or blank to return outermost widget"); + o->box(FL_DOWN_FRAME); + o->color(FL_BACKGROUND2_COLOR); + o->selection_color(FL_SELECTION_COLOR); + o->labeltype(FL_NORMAL_LABEL); + o->labelfont(1); + o->labelsize(11); + o->labelcolor(FL_FOREGROUND_COLOR); + o->textsize(11); + o->callback((Fl_Callback*)cb_Return); + o->align(Fl_Align(132)); + o->when(FL_WHEN_RELEASE); + Fl_Group::current()->resizable(o); + o->add_key_binding(FL_Tab, 0, use_tab_navigation); + } // fld::widget::Code_Editor* o + o->end(); + } // Fl_Group* o + { Fl_Group* o = new Fl_Group(15, 215, 390, 105); + o->box(FL_FLAT_BOX); + o->callback((Fl_Callback*)propagate_load); + { Fl_Text_Editor* o = new Fl_Text_Editor(95, 220, 310, 100, "Comment:"); + o->box(FL_DOWN_BOX); + o->labelfont(1); + o->labelsize(11); + o->textfont(4); + o->textsize(11); + o->callback((Fl_Callback*)cb_Comment5); + o->align(Fl_Align(FL_ALIGN_LEFT)); + Fl_Group::current()->resizable(o); + o->buffer(new Fl_Text_Buffer()); + o->add_key_binding(FL_Tab, 0, use_tab_navigation); + } // Fl_Text_Editor* o + o->end(); + } // Fl_Group* o + o->size_range(0, 25, 50); + o->size_range(1, 25, 50); + o->size_range(2, 25, 50); + o->end(); + Fl_Group::current()->resizable(o); + } // Fl_Tile* o + func_tabs_main->end(); + Fl_Group::current()->resizable(func_tabs_main); + } // Fl_Group* func_tabs_main + func_tabs->end(); + Fl_Group::current()->resizable(func_tabs); + } // Fl_Tabs* func_tabs + tabs_wizard->end(); + Fl_Group::current()->resizable(tabs_wizard); + } // Fl_Wizard* tabs_wizard { Fl_Tabs* o = widget_tabs_repo = new Fl_Tabs(10, 10, 400, 350); widget_tabs_repo->hide(); { Fl_Group* o = new Fl_Group(10, 30, 400, 330); diff --git a/fluid/panels/widget_panel.fl b/fluid/panels/widget_panel.fl index 2c2e75a08..beba75690 100644 --- a/fluid/panels/widget_panel.fl +++ b/fluid/panels/widget_panel.fl @@ -59,6 +59,9 @@ decl {\#include "nodes/Window_Node.h"} {private global decl {\#include "nodes/Grid_Node.h"} {private global } +decl {\#include "nodes/Function_Node.h"} {private global +} + decl {\#include <FL/Fl_Spinner.H>} {private global } @@ -74,13 +77,15 @@ decl {\#include <FL/fl_ask.H>} {private global decl {\#include <FL/Fl_Menu_Item.H>} {private global } +decl {\#include <FL/Fl_File_Chooser.H>} {private global +} + decl {\#define ZERO_ENTRY 1000} {private global } decl {extern const char* when_symbol_name(int n); extern void set_whenmenu(int n); extern void redraw_browser(); -const char *c_check(const char *c, int type=0); extern Fl_Color fl_show_colormap(Fl_Color oldcol); extern void labelcolor_common(Fl_Color c); extern void color_common(Fl_Color c); @@ -97,6 +102,12 @@ extern Fl_Menu_Item boxmenu[];} {private global decl {extern int haderror;} {private global } +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_image_panel()} { comment {Create a panel for editing widget image data} } { @@ -253,7 +264,7 @@ Function {make_image_panel()} { } if (mod) Fluid.proj.set_modflag(1); }} - 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 + tooltip {bind the image to the widget, so it will be deleted with the widget} xywh {75 120 170 20} down_box DOWN_BOX labelsize 11 hotspot } } Fl_Group image_panel_deimagegroup { @@ -403,7 +414,7 @@ Function {make_image_panel()} { } if (mod) Fluid.proj.set_modflag(1); }} - tooltip {bind the image to the widget, so it will be deleted automatically} xywh {75 260 170 20} down_box DOWN_BOX labelsize 11 + tooltip {bind the image to the widget, so it will be deleted with the widget} xywh {75 260 170 20} down_box DOWN_BOX labelsize 11 } } Fl_Button image_panel_close { @@ -466,43 +477,48 @@ Function {make_widget_panel()} { } { Fl_Window {} { comment {Use a Double Window to avoid flickering.} open - xywh {372 208 420 400} type Double labelsize 11 align 80 resizable hotspot + xywh {485 255 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 { + Fl_Wizard tabs_wizard { 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();} + xywh {10 10 400 350} box NO_BOX labelsize 11 resizable } { - Fl_Group wp_gui_tab { - label GUI - callback propagate_load open - xywh {10 30 400 330} labelsize 11 when 0 resizable + Fl_Tabs widget_tabs { + callback {if (current_widget) + propagate_load((Fl_Group *)o,v);} selected + xywh {10 10 400 350} selection_color 12 labelsize 11 labelcolor 7 when 0 + code0 {o->show();} } { - Fl_Group {} { - label {Label:} + Fl_Group wp_gui_tab { + label GUI callback propagate_load open - xywh {95 40 309 20} labelfont 1 labelsize 11 align 4 + xywh {10 30 400 330} labelsize 11 when 0 resizable } { - Fl_Input wp_gui_label { - callback label_cb - tooltip {The label text for the widget. + 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 {if (v == LOAD) { + } + 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 {if (v == LOAD) { if (current_widget->is_widget() && !current_widget->is_a(Type::Window)) { o->activate(); o->value(((Widget_Node*)current_widget)->image_name()); @@ -515,11 +531,11 @@ Use Ctrl-J for newlines.} xywh {95 40 190 20} labelfont 1 labelsize 11 when 15 t } if (mod) Fluid.proj.set_modflag(1); }} - tooltip {The active image for the widget.} xywh {95 65 200 20} labelfont 1 labelsize 11 textsize 11 resizable - } - Fl_Button {} { - label {Browse...} - callback {if (v == LOAD) { + tooltip {The active image for the widget.} xywh {95 65 200 20} labelfont 1 labelsize 11 textsize 11 resizable + } + Fl_Button {} { + label {Browse...} + callback {if (v == LOAD) { if (current_widget->is_widget() && !current_widget->is_a(Type::Window)) o->activate(); else @@ -536,23 +552,23 @@ Use Ctrl-J for newlines.} xywh {95 40 190 20} labelfont 1 labelsize 11 when 15 t if (mod) Fluid.proj.set_modflag(1); } }} - tooltip {Click to choose the active image.} xywh {295 65 89 20} labelsize 11 align 256 - } - Fl_Button {} { - label {...} - callback {if (v != LOAD) { + 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} + 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 {if (v == LOAD) { + 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 {if (v == LOAD) { if (current_widget->is_widget() && !current_widget->is_a(Type::Window)) { o->activate(); o->value(((Widget_Node*)current_widget)->inactive_name()); @@ -565,11 +581,11 @@ Use Ctrl-J for newlines.} xywh {95 40 190 20} labelfont 1 labelsize 11 when 15 t } if (mod) Fluid.proj.set_modflag(1); }} - tooltip {The inactive image for the widget.} xywh {95 90 200 20} labelfont 1 labelsize 11 textsize 11 resizable - } - Fl_Button {} { - label {Browse...} - callback {if (v == LOAD) { + tooltip {The inactive image for the widget.} xywh {95 90 200 20} labelfont 1 labelsize 11 textsize 11 resizable + } + Fl_Button {} { + label {Browse...} + callback {if (v == LOAD) { if (current_widget->is_widget() && !current_widget->is_a(Type::Window)) o->activate(); else @@ -586,183 +602,183 @@ Use Ctrl-J for newlines.} xywh {95 40 190 20} labelfont 1 labelsize 11 when 15 t if (mod) Fluid.proj.set_modflag(1); } }} - 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 open - xywh {172 115 116 20} down_box BORDER_BOX labelsize 11 textsize 11 - } { - MenuItem {} { - label { Image Alignment } - user_data {(fl_intptr_t)-1} selected - xywh {145 145 100 20} labelfont 1 labelsize 10 headline - } - 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 + tooltip {Click to choose the inactive image.} xywh {295 90 89 20} labelsize 11 } } - Fl_Choice {} { - callback align_position_cb open - xywh {293 115 86 20} down_box BORDER_BOX labelsize 11 textsize 11 + Fl_Group wp_gui_alignment { + label {Alignment:} + callback propagate_load open + xywh {95 115 312 20} labelfont 1 labelsize 11 align 4 } { - MenuItem {} { - label { Inside && Outside } - user_data {(fl_intptr_t)-1} - xywh {135 135 100 20} labelfont 1 labelsize 10 headline - } - 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 + 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 } - MenuItem {} { - label {top right} - user_data {(fl_intptr_t)FL_ALIGN_TOP_RIGHT} - xywh {65 65 100 20} labelsize 9 + 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 } - MenuItem {} { - label left + Fl_Button {} { + label {@-1<-} 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 + callback align_cb + tooltip {Left-align the label.} xywh {278 115 20 20} type Toggle selection_color 8 labelsize 11 labelcolor 8 hide } - MenuItem {} { - label right + Fl_Button {} { + label {@-1->} user_data {(fl_intptr_t)FL_ALIGN_RIGHT} - xywh {85 85 100 20} labelsize 9 + callback align_cb + tooltip {Right-align the label.} xywh {303 115 20 20} type Toggle selection_color 8 labelsize 11 labelcolor 8 hide } - MenuItem {} { - label {bottom left} - user_data {(fl_intptr_t)FL_ALIGN_BOTTOM_LEFT} - xywh {95 95 100 20} labelsize 9 + 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 } - MenuItem {} { - label bottom + Fl_Button {} { + label {@-12} 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)-1} - xywh {125 125 100 20} labelfont 1 labelsize 10 headline - } - 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 + 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)-1} + xywh {145 145 100 20} labelfont 1 labelsize 10 + } + 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)-1} + xywh {135 135 100 20} labelfont 1 labelsize 10 + } + 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)-1} + xywh {125 125 100 20} labelfont 1 labelsize 10 + } + 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_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 {if (v == LOAD) { + 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 {if (v == LOAD) { if (current_widget->is_true_widget()) { o->value(((Widget_Node *)current_widget)->o->x()); o->activate(); @@ -789,14 +805,14 @@ Use Ctrl-J for newlines.} xywh {95 40 190 20} labelfont 1 labelsize 11 when 15 t // calculation. Keep the formula if it was not used. } }} - tooltip {The X position of the widget as a number or formula. + 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 {fld::widget::Formula_Input} - } - Fl_Input widget_y_input { - label {Y:} - callback {if (v == LOAD) { + class {fld::widget::Formula_Input} + } + Fl_Input widget_y_input { + label {Y:} + callback {if (v == LOAD) { if (current_widget->is_true_widget()) { o->value(((Widget_Node *)current_widget)->o->y()); o->activate(); @@ -822,14 +838,14 @@ x, px, sx, cx, and i} xywh {95 150 55 20} labelsize 11 align 5 textsize 11 o->value(v); } }} - tooltip {The Y position of the widget as a number or formula. + 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 {fld::widget::Formula_Input} - } - Fl_Input widget_w_input { - label {Width:} - callback {if (v == LOAD) { + class {fld::widget::Formula_Input} + } + Fl_Input widget_w_input { + label {Width:} + callback {if (v == LOAD) { if (current_widget->is_true_widget()) { o->value(((Widget_Node *)current_widget)->o->w()); o->activate(); @@ -855,14 +871,14 @@ y, py, sy, cy, and i} xywh {155 150 55 20} labelsize 11 align 5 textsize 11 o->value(v); } }} - tooltip {The width of the widget as a number or formula. + 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 {fld::widget::Formula_Input} - } - Fl_Input widget_h_input { - label {Height:} - callback {if (v == LOAD) { + class {fld::widget::Formula_Input} + } + Fl_Input widget_h_input { + label {Height:} + callback {if (v == LOAD) { if (current_widget->is_true_widget()) { o->value(((Widget_Node *)current_widget)->o->h()); o->activate(); @@ -888,14 +904,14 @@ w, pw, sw, cw, and i} xywh {215 150 55 20} labelsize 11 align 5 textsize 11 o->value(v); } }} - tooltip {The height of the widget as a number or formula. + 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 {fld::widget::Formula_Input} - } - Fl_Choice {} { - label {Children:} - callback {if (v == LOAD) { + class {fld::widget::Formula_Input} + } + Fl_Choice {} { + label {Children:} + callback {if (v == LOAD) { if (current_widget->is_a(Type::Widget_Class)) { o->show(); o->value(((Widget_Class_Node *)current_widget)->wc_relative); @@ -914,28 +930,28 @@ h, ph, sh, ch, and i} xywh {275 150 55 20} labelsize 11 align 5 textsize 11 } if (mod) Fluid.proj.set_modflag(1); }} - 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 + 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 + } } - MenuItem {} { - label Reposition - xywh {0 0 31 20} labelsize 11 + Fl_Box {} { + xywh {399 150 1 20} hide resizable } - 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 {if (v == LOAD) { + Fl_Group wp_gui_flexp { + label {Flex Parent:} + callback {if (v == LOAD) { if (Flex_Node::parent_is_flex(current_widget)) { o->show(); propagate_load(o, v); @@ -943,12 +959,12 @@ h, ph, sh, ch, and i} xywh {275 150 55 20} labelsize 11 align 5 textsize 11 o->hide(); } }} - 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 {if (v == LOAD) { + 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 {if (v == LOAD) { if (Flex_Node::parent_is_flex(current_widget)) { o->value(Flex_Node::size(current_widget)); } @@ -980,11 +996,11 @@ h, ph, sh, ch, and i} xywh {275 150 55 20} labelsize 11 align 5 textsize 11 } if (mod) Fluid.proj.set_modflag(1); }} - 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 {if (v == LOAD) { + 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 {if (v == LOAD) { if (Flex_Node::parent_is_flex(current_widget)) { o->value(Flex_Node::is_fixed(current_widget)); } @@ -1013,15 +1029,15 @@ h, ph, sh, ch, and i} xywh {275 150 55 20} labelsize 11 align 5 textsize 11 } if (mod) Fluid.proj.set_modflag(1); }} - 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 + 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 {if (v == LOAD) { + Fl_Group wp_gui_values { + label {Values:} + callback {if (v == LOAD) { if ( current_widget->is_a(Type::Flex) || current_widget->is_a(Type::Grid) || current_widget->is_a(Type::Window)) @@ -1031,12 +1047,12 @@ h, ph, sh, ch, and i} xywh {275 150 55 20} labelsize 11 align 5 textsize 11 o->show(); propagate_load(o, v); } -}} open - xywh {95 185 300 20} labelfont 1 labelsize 11 align 4 - } { - Fl_Value_Input {} { - label {Size:} - callback {if (v == LOAD) { +}} + xywh {95 185 300 20} labelfont 1 labelsize 11 align 4 + } { + Fl_Value_Input {} { + label {Size:} + callback {if (v == LOAD) { if (!current_widget->is_a(Type::Slider)) {o->deactivate(); return;} o->activate(); o->value(((Fl_Slider*)(current_widget->o))->slider_size()); @@ -1053,11 +1069,11 @@ h, ph, sh, ch, and i} xywh {275 150 55 20} labelsize 11 align 5 textsize 11 } if (mod) Fluid.proj.set_modflag(1); }} - tooltip {The size of the slider.} xywh {95 185 55 20} labelsize 11 align 5 textsize 11 - } - Fl_Value_Input {} { - label {Minimum:} - callback {if (v == LOAD) { + tooltip {The size of the slider.} xywh {95 185 55 20} labelsize 11 align 5 textsize 11 + } + Fl_Value_Input {} { + label {Minimum:} + callback {if (v == LOAD) { if (current_widget->is_a(Type::Valuator_)) { o->activate(); o->value(((Fl_Valuator*)(current_widget->o))->minimum()); @@ -1085,11 +1101,11 @@ h, ph, sh, ch, and i} xywh {275 150 55 20} labelsize 11 align 5 textsize 11 } if (mod) Fluid.proj.set_modflag(1); }} - tooltip {The minimum value of the widget.} xywh {155 185 55 20} labelsize 11 align 5 textsize 11 - } - Fl_Value_Input {} { - label {Maximum:} - callback {if (v == LOAD) { + tooltip {The minimum value of the widget.} xywh {155 185 55 20} labelsize 11 align 5 textsize 11 + } + Fl_Value_Input {} { + label {Maximum:} + callback {if (v == LOAD) { if (current_widget->is_a(Type::Valuator_)) { o->activate(); o->value(((Fl_Valuator*)(current_widget->o))->maximum()); @@ -1117,11 +1133,11 @@ h, ph, sh, ch, and i} xywh {275 150 55 20} labelsize 11 align 5 textsize 11 } if (mod) Fluid.proj.set_modflag(1); }} - 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 {if (v == LOAD) { + 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 {if (v == LOAD) { if (current_widget->is_a(Type::Valuator_)) { o->activate(); o->value(((Fl_Valuator*)(current_widget->o))->step()); @@ -1149,11 +1165,11 @@ h, ph, sh, ch, and i} xywh {275 150 55 20} labelsize 11 align 5 textsize 11 } if (mod) Fluid.proj.set_modflag(1); }} - tooltip {The resolution of the widget value.} xywh {275 185 55 20} labelsize 11 align 5 textsize 11 - } - Fl_Value_Input {} { - label {Value:} - callback {if (v == LOAD) { + tooltip {The resolution of the widget value.} xywh {275 185 55 20} labelsize 11 align 5 textsize 11 + } + Fl_Value_Input {} { + label {Value:} + callback {if (v == LOAD) { if (current_widget->is_a(Type::Valuator_)) { o->activate(); o->value(((Fl_Valuator*)(current_widget->o))->value()); @@ -1184,15 +1200,15 @@ h, ph, sh, ch, and i} xywh {275 150 55 20} labelsize 11 align 5 textsize 11 } if (mod) Fluid.proj.set_modflag(1); }} - tooltip {The current widget value.} xywh {335 185 55 20} labelsize 11 align 5 textsize 11 - } - Fl_Box {} { - xywh {395 185 0 20} resizable + 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 {if (v == LOAD) { + Fl_Group wp_gui_margins { + label {Margins:} + callback {if (v == LOAD) { if (current_widget->is_a(Type::Flex)) { o->show(); propagate_load(o, v); @@ -1200,12 +1216,12 @@ h, ph, sh, ch, and i} xywh {275 150 55 20} labelsize 11 align 5 textsize 11 o->hide(); } }} - 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_cb(o, v, + 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_cb(o, v, [](Fl_Flex *w, Fl_Value_Input* i) -> void { int v; @@ -1224,11 +1240,11 @@ h, ph, sh, ch, and i} xywh {275 150 55 20} labelsize 11 align 5 textsize 11 } } );} - tooltip {Left margin in group.} xywh {95 185 55 20} labelsize 11 align 5 textsize 11 - } - Fl_Value_Input {} { - label {Top:} - callback {flex_margin_cb(o, v, + tooltip {Left margin in group.} xywh {95 185 55 20} labelsize 11 align 5 textsize 11 + } + Fl_Value_Input {} { + label {Top:} + callback {flex_margin_cb(o, v, [](Fl_Flex *w, Fl_Value_Input* i) -> void { int v; @@ -1247,11 +1263,11 @@ h, ph, sh, ch, and i} xywh {275 150 55 20} labelsize 11 align 5 textsize 11 } } );} - tooltip {Top margin in group.} xywh {155 185 55 20} labelsize 11 align 5 textsize 11 - } - Fl_Value_Input {} { - label {Right:} - callback {flex_margin_cb(o, v, + tooltip {Top margin in group.} xywh {155 185 55 20} labelsize 11 align 5 textsize 11 + } + Fl_Value_Input {} { + label {Right:} + callback {flex_margin_cb(o, v, [](Fl_Flex *w, Fl_Value_Input* i) -> void { int v; @@ -1270,11 +1286,11 @@ h, ph, sh, ch, and i} xywh {275 150 55 20} labelsize 11 align 5 textsize 11 } } );} - tooltip {Right margin in group.} xywh {215 185 55 20} labelsize 11 align 5 textsize 11 - } - Fl_Value_Input {} { - label {Bottom:} - callback {flex_margin_cb(o, v, + tooltip {Right margin in group.} xywh {215 185 55 20} labelsize 11 align 5 textsize 11 + } + Fl_Value_Input {} { + label {Bottom:} + callback {flex_margin_cb(o, v, [](Fl_Flex *w, Fl_Value_Input* i) -> void { int v; @@ -1293,11 +1309,11 @@ h, ph, sh, ch, and i} xywh {275 150 55 20} labelsize 11 align 5 textsize 11 } } );} - tooltip {Bottom margin in group.} xywh {275 185 55 20} labelsize 11 align 5 textsize 11 - } - Fl_Value_Input {} { - label {Gap:} - callback {flex_margin_cb(o, v, + tooltip {Bottom margin in group.} xywh {275 185 55 20} labelsize 11 align 5 textsize 11 + } + Fl_Value_Input {} { + label {Gap:} + callback {flex_margin_cb(o, v, [](Fl_Flex *w, Fl_Value_Input* o) -> void { int v = w->gap(); @@ -1314,15 +1330,15 @@ h, ph, sh, ch, and i} xywh {275 150 55 20} labelsize 11 align 5 textsize 11 } } );} - tooltip {Gap between children.} xywh {335 185 55 20} labelsize 11 align 5 textsize 11 - } - Fl_Box {} { - xywh {395 185 0 20} resizable + 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 {if (v == LOAD) { + Fl_Group wp_gui_sizerange { + label {Size Range:} + callback {if (v == LOAD) { if (current_widget->is_a(Type::Window)) { o->show(); propagate_load(o, v); @@ -1330,11 +1346,11 @@ h, ph, sh, ch, and i} xywh {275 150 55 20} labelsize 11 align 5 textsize 11 o->hide(); } }} - xywh {95 185 300 20} labelfont 1 labelsize 11 align 4 hide - } { - Fl_Value_Input {} { - label {Minimum Size:} - callback {if (v == LOAD) { + xywh {95 185 300 20} labelfont 1 labelsize 11 align 4 hide + } { + Fl_Value_Input {} { + label {Minimum Size:} + callback {if (v == LOAD) { if (!current_widget->is_a(Type::Window)) return; o->value(((Window_Node*)current_widget)->sr_min_w); } else { @@ -1349,10 +1365,10 @@ h, ph, sh, ch, and i} xywh {275 150 55 20} labelsize 11 align 5 textsize 11 } if (mod) Fluid.proj.set_modflag(1); }} - 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 {if (v == LOAD) { + 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 {if (v == LOAD) { if (!current_widget->is_a(Type::Window)) return; o->value(((Window_Node*)current_widget)->sr_min_h); } else { @@ -1367,11 +1383,11 @@ h, ph, sh, ch, and i} xywh {275 150 55 20} labelsize 11 align 5 textsize 11 } if (mod) Fluid.proj.set_modflag(1); }} - 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 {if (v == LOAD) { + 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 {if (v == LOAD) { } else { int mod = 0; Fluid.proj.undo.checkpoint(); @@ -1386,11 +1402,11 @@ h, ph, sh, ch, and i} xywh {275 150 55 20} labelsize 11 align 5 textsize 11 propagate_load(the_panel, LOAD); if (mod) Fluid.proj.set_modflag(1); }} - xywh {215 185 25 20} labelsize 11 - } - Fl_Value_Input {} { - label {Maximum Size:} - callback {if (v == LOAD) { + xywh {215 185 25 20} labelsize 11 + } + Fl_Value_Input {} { + label {Maximum Size:} + callback {if (v == LOAD) { if (!current_widget->is_a(Type::Window)) return; o->value(((Window_Node*)current_widget)->sr_max_w); } else { @@ -1405,10 +1421,10 @@ h, ph, sh, ch, and i} xywh {275 150 55 20} labelsize 11 align 5 textsize 11 } if (mod) Fluid.proj.set_modflag(1); }} - 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 {if (v == LOAD) { + 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 {if (v == LOAD) { if (!current_widget->is_a(Type::Window)) return; o->value(((Window_Node*)current_widget)->sr_max_h); } else { @@ -1423,11 +1439,11 @@ h, ph, sh, ch, and i} xywh {275 150 55 20} labelsize 11 align 5 textsize 11 } if (mod) Fluid.proj.set_modflag(1); }} - 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 {if (v == LOAD) { + 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 {if (v == LOAD) { } else { int mod = 0; Fluid.proj.undo.checkpoint(); @@ -1442,19 +1458,19 @@ h, ph, sh, ch, and i} xywh {275 150 55 20} labelsize 11 align 5 textsize 11 propagate_load(the_panel, LOAD); if (mod) Fluid.proj.set_modflag(1); }} - xywh {365 185 25 20} labelsize 11 - } - Fl_Box {} { - xywh {395 185 0 20} resizable + xywh {365 185 25 20} labelsize 11 + } + Fl_Box {} { + xywh {395 185 0 20} resizable + } } - } - Fl_Group {} { - label {Shortcut:} - callback propagate_load - xywh {95 210 310 20} labelfont 1 labelsize 11 align 4 - } { - Fl_Button wp_gui_shortcut { - callback {if (v == LOAD) { + Fl_Group {} { + label {Shortcut:} + callback propagate_load + xywh {95 210 310 20} labelfont 1 labelsize 11 align 4 + } { + Fl_Button wp_gui_shortcut { + callback {if (v == LOAD) { if (current_widget->is_button()) o->value( ((Fl_Button*)(current_widget->o))->shortcut() ); else if (current_widget->is_a(Type::Input)) @@ -1495,21 +1511,21 @@ h, ph, sh, ch, and i} xywh {275 150 55 20} labelsize 11 align 5 textsize 11 } if (mod) Fluid.proj.set_modflag(1); }} - comment {This is a special button that grabs keystrokes directly} - tooltip {The shortcut key for the widget. + 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 + 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 {if (v == LOAD) { + 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 {if (v == LOAD) { if (current_widget->is_a(Type::Window)) { o->show(); o->parent()->show(); @@ -1531,11 +1547,11 @@ Use 'Backspace' key to clear.} xywh {95 210 310 20} box DOWN_BOX color 7 selecti } if (mod) Fluid.proj.set_modflag(1); }} - tooltip {The X resource class.} xywh {95 235 95 20} labelfont 1 labelsize 11 textsize 11 resizable - } - Fl_Light_Button {} { - label Border - callback {if (v == LOAD) { + tooltip {The X resource class.} xywh {95 235 95 20} labelfont 1 labelsize 11 textsize 11 resizable + } + Fl_Light_Button {} { + label Border + callback {if (v == LOAD) { if (!current_widget->is_a(Type::Window)) {o->hide(); return;} o->show(); o->value(((Fl_Window*)(current_widget->o))->border()); @@ -1544,11 +1560,11 @@ Use 'Backspace' key to clear.} xywh {95 210 310 20} box DOWN_BOX color 7 selecti ((Fl_Window*)(current_widget->o))->border(o->value()); Fluid.proj.set_modflag(1); }} - tooltip {Add a border around the window.} xywh {195 235 60 20} selection_color 1 labelsize 11 - } - Fl_Light_Button {} { - label Modal - callback {if (v == LOAD) { + tooltip {Add a border around the window.} xywh {195 235 60 20} selection_color 1 labelsize 11 + } + Fl_Light_Button {} { + label Modal + callback {if (v == LOAD) { if (!current_widget->is_a(Type::Window)) {o->hide(); return;} o->show(); o->value(((Window_Node *)current_widget)->modal); @@ -1557,11 +1573,11 @@ Use 'Backspace' key to clear.} xywh {95 210 310 20} box DOWN_BOX color 7 selecti ((Window_Node *)current_widget)->modal = o->value(); Fluid.proj.set_modflag(1); }} - tooltip {Make the window modal.} xywh {260 235 55 20} selection_color 1 labelsize 11 - } - Fl_Light_Button {} { - label Nonmodal - callback {if (v == LOAD) { + tooltip {Make the window modal.} xywh {260 235 55 20} selection_color 1 labelsize 11 + } + Fl_Light_Button {} { + label Nonmodal + callback {if (v == LOAD) { if (!current_widget->is_a(Type::Window)) {o->hide(); return;} o->show(); o->value(((Window_Node *)current_widget)->non_modal); @@ -1570,17 +1586,17 @@ Use 'Backspace' key to clear.} xywh {95 210 310 20} box DOWN_BOX color 7 selecti ((Window_Node *)current_widget)->non_modal = o->value(); Fluid.proj.set_modflag(1); }} - tooltip {Make the window non-modal.} xywh {320 235 75 20} selection_color 1 labelsize 11 align 148 + 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 open - xywh {95 260 305 20} labelfont 1 labelsize 11 align 4 - } { - Fl_Light_Button {} { - label Visible - callback {if (v == LOAD) { + 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 {if (v == LOAD) { o->value(current_widget->o->visible()); if (current_widget->is_a(Type::Window)) o->deactivate(); else o->activate(); @@ -1607,11 +1623,11 @@ Use 'Backspace' key to clear.} xywh {95 210 310 20} box DOWN_BOX color 7 selecti redraw_browser(); } }} - tooltip {Show the widget.} xywh {95 260 60 20} selection_color 1 labelsize 11 - } - Fl_Light_Button {} { - label Active - callback {if (v == LOAD) { + tooltip {Show the widget.} xywh {95 260 60 20} selection_color 1 labelsize 11 + } + Fl_Light_Button {} { + label Active + callback {if (v == LOAD) { o->value(current_widget->o->active()); if (current_widget->is_a(Type::Window)) o->deactivate(); else o->activate(); @@ -1628,30 +1644,34 @@ Use 'Backspace' key to clear.} xywh {95 210 310 20} box DOWN_BOX color 7 selecti } if (mod) Fluid.proj.set_modflag(1); }} - tooltip {Activate the widget.} xywh {160 260 60 20} selection_color 1 labelsize 11 - } - Fl_Light_Button {} { - label Resizable - callback {if (v == LOAD) { + tooltip {Activate the widget.} xywh {160 260 60 20} selection_color 1 labelsize 11 + } + Fl_Light_Button {} { + label Resizable + callback {if (v == LOAD) { if (current_widget->is_a(Type::Menu_Item)) { - o->hide(); + o->hide(); return; } - if (numselected > 1) {o->deactivate(); return;} o->show(); o->value(current_widget->resizable()); + if (numselected > 1) { + o->deactivate(); + return; + } + o->activate(); } else { Fluid.proj.undo.checkpoint(); current_widget->resizable(o->value()); Fluid.proj.set_modflag(1); }} - tooltip {Make the widget resizable.} xywh {225 260 75 20} selection_color 1 labelsize 11 when 1 - } - Fl_Light_Button {} { - label Headline - callback {if (v == LOAD) { + tooltip {Make the widget resizable.} xywh {225 260 75 20} selection_color 1 labelsize 11 when 1 + } + Fl_Light_Button {} { + label Headline + callback {if (v == LOAD) { if (!current_widget->is_a(Type::Menu_Item)) { - o->hide(); + o->hide(); return; } o->show(); @@ -1671,12 +1691,12 @@ Use 'Backspace' key to clear.} xywh {95 210 310 20} box DOWN_BOX color 7 selecti } if (mod) Fluid.proj.set_modflag(1); }} - tooltip {Make a menu item the headline of a menu + tooltip {Make a menu item the headline of a menu unselectable, but not grayed out} xywh {225 260 75 20} selection_color 1 labelsize 11 when 1 hide - } - Fl_Light_Button {} { - label Hotspot - callback {if (v == LOAD) { + } + Fl_Light_Button {} { + label Hotspot + callback {if (v == LOAD) { if (numselected > 1) {o->deactivate(); return;} if (current_widget->is_a(Type::Menu_Item)) o->label("divider"); else o->label("hotspot"); @@ -1700,15 +1720,15 @@ unselectable, but not grayed out} xywh {225 260 75 20} selection_color 1 labelsi } Fluid.proj.set_modflag(1); }} - 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 + 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 {if (v == LOAD) { + Fl_Input wp_gui_tooltip { + label {Tooltip:} + callback {if (v == LOAD) { if (current_widget->is_widget()) { o->activate(); o->value(((Widget_Node*)current_widget)->tooltip()); @@ -1723,25 +1743,25 @@ unselectable, but not grayed out} xywh {225 260 75 20} selection_color 1 labelsi } if (mod) Fluid.proj.set_modflag(1); }} - tooltip {The tooltip text for the widget. + 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_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:} + Fl_Group wp_style_tab { + label Style callback propagate_load open - xywh {99 40 305 20} labelfont 1 labelsize 11 align 4 + xywh {10 30 400 330} labelsize 11 when 0 hide } { - Fl_Choice {} { - callback {if (v == LOAD) { + 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 {if (v == LOAD) { int n = current_widget->o->labelfont(); if (n > 15) n = 0; o->value(n); @@ -1757,12 +1777,12 @@ Use Ctrl-J for newlines.} xywh {95 285 310 20} labelfont 1 labelsize 11 textsize } if (mod) Fluid.proj.set_modflag(1); }} 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 {int n; + 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 {int n; if (v == LOAD) { n = current_widget->o->labelsize(); } else { @@ -1777,11 +1797,11 @@ if (v == LOAD) { if (mod) Fluid.proj.set_modflag(1); } o->value(n);} - 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 {Fl_Color c = current_widget->o->labelcolor(); + 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 {Fl_Color c = current_widget->o->labelcolor(); if (v != LOAD) { Fl_Color d = fl_show_colormap(c); if (d == c) return; @@ -1791,10 +1811,10 @@ if (v != LOAD) { o->color(c); o->labelcolor(fl_contrast(FL_BLACK,c)); o->redraw();} - tooltip {The color of the label text.} xywh {296 40 90 20} labelsize 11 - } - Fl_Menu_Button {} { - callback {Fl_Color c = current_widget->o->labelcolor(); + tooltip {The color of the label text.} xywh {296 40 90 20} labelsize 11 + } + Fl_Menu_Button {} { + callback {Fl_Color c = current_widget->o->labelcolor(); if (v != LOAD) { Fl_Color d = (Fl_Color)(o->mvalue()->argument()); if (d == c) return; @@ -1804,18 +1824,18 @@ if (v != LOAD) { w_labelcolor->labelcolor(fl_contrast(FL_BLACK,c)); w_labelcolor->redraw(); }} 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 {if (v == LOAD) { + 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 {if (v == LOAD) { if (current_widget->is_a(Type::Menu_Item)) {o->deactivate(); return;} else o->activate(); int n = current_widget->o->box(); if (!n) n = ZERO_ENTRY; @@ -1834,13 +1854,13 @@ if (v != LOAD) { } if (mod) Fluid.proj.set_modflag(1); }} 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 {Fl_Color c = current_widget->o->color(); + 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 {Fl_Color c = current_widget->o->color(); if (v == LOAD) { if (current_widget->is_a(Type::Menu_Item)) { o->deactivate(); @@ -1856,10 +1876,10 @@ if (v == LOAD) { o->color(c); o->labelcolor(fl_contrast(FL_BLACK,c)); o->redraw();} - tooltip {The background color of the widget.} xywh {296 65 90 20} labelsize 11 - } - Fl_Menu_Button {} { - callback {Fl_Color c = current_widget->o->color(); + tooltip {The background color of the widget.} xywh {296 65 90 20} labelsize 11 + } + Fl_Menu_Button {} { + callback {Fl_Color c = current_widget->o->color(); if (v == LOAD) { if (current_widget->is_a(Type::Menu_Item)) {o->deactivate(); return;} else o->activate(); } else { @@ -1871,18 +1891,18 @@ if (v == LOAD) { w_color->labelcolor(fl_contrast(FL_BLACK,c)); w_color->redraw(); }} 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 {if (v == LOAD) { + 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 {if (v == LOAD) { int n; if (current_widget->is_a(Type::Button)) n = ((Fl_Button*)(current_widget->o))->down_box(); @@ -1916,13 +1936,13 @@ if (v == LOAD) { } if (mod) Fluid.proj.set_modflag(1); }} 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 {Fl_Color c = current_widget->o->selection_color(); + 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 {Fl_Color c = current_widget->o->selection_color(); if (v == LOAD) { if (current_widget->is_a(Type::Menu_Item)) { o->deactivate(); @@ -1939,10 +1959,10 @@ if (v == LOAD) { o->color(c); o->labelcolor(fl_contrast(FL_BLACK,c)); o->redraw();} - tooltip {The selection color of the widget.} xywh {296 90 90 20} labelsize 11 - } - Fl_Menu_Button {} { - callback {Fl_Color c = current_widget->o->selection_color(); + tooltip {The selection color of the widget.} xywh {296 90 90 20} labelsize 11 + } + Fl_Menu_Button {} { + callback {Fl_Color c = current_widget->o->selection_color(); if (v == LOAD) { if (current_widget->is_a(Type::Menu_Item)) { o->deactivate(); @@ -1959,18 +1979,18 @@ if (v == LOAD) { w_selectcolor->labelcolor(fl_contrast(FL_BLACK,c)); w_selectcolor->redraw(); }} 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 {Fl_Font n; int s; Fl_Color c; + 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 {Fl_Font n; int s; Fl_Color c; if (v == LOAD) { if (!current_widget->textstuff(0,n,s,c)) {o->deactivate(); return;} o->activate(); @@ -1987,12 +2007,12 @@ if (v == LOAD) { } if (mod) Fluid.proj.set_modflag(1); }} 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 {Fl_Font n; int s; Fl_Color c; + 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 {Fl_Font n; int s; Fl_Color c; if (v == LOAD) { if (!current_widget->textstuff(0,n,s,c)) {o->deactivate(); return;} o->activate(); @@ -2009,11 +2029,11 @@ if (v == LOAD) { if (mod) Fluid.proj.set_modflag(1); } o->value(s);} - 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 {Fl_Font n; int s; Fl_Color c; + 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 {Fl_Font n; int s; Fl_Color c; if (v == LOAD) { if (!current_widget->textstuff(0,n,s,c)) { o->deactivate(); @@ -2030,10 +2050,10 @@ if (v == LOAD) { o->color(c); o->labelcolor(fl_contrast(FL_BLACK,c)); o->redraw();} - tooltip {The value text color.} xywh {296 115 90 20} labelsize 11 - } - Fl_Menu_Button {} { - callback {Fl_Font n; int s; Fl_Color c; + tooltip {The value text color.} xywh {296 115 90 20} labelsize 11 + } + Fl_Menu_Button {} { + callback {Fl_Font n; int s; Fl_Color c; if (v == LOAD) { if (!current_widget->textstuff(0,n,s,c)) { o->deactivate(); @@ -2050,19 +2070,19 @@ if (v == LOAD) { w_textcolor->labelcolor(fl_contrast(FL_BLACK,c)); w_textcolor->redraw(); }} 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 {int s; + 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 {int s; if (v == LOAD) { if (!current_widget->is_true_widget()) { o->deactivate(); @@ -2087,11 +2107,11 @@ if (v == LOAD) { } if (mod) Fluid.proj.set_modflag(1); }} - 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 {int s; + 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 {int s; if (v == LOAD) { if (!current_widget->is_true_widget()) { o->deactivate(); @@ -2116,11 +2136,11 @@ if (v == LOAD) { } if (mod) Fluid.proj.set_modflag(1); }} - 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 {Image Gap:} - callback {int s; + 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 {Image Gap:} + callback {int s; if (v == LOAD) { if (!current_widget->is_true_widget()) { o->deactivate(); @@ -2145,15 +2165,15 @@ if (v == LOAD) { } if (mod) Fluid.proj.set_modflag(1); }} - 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 + 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 {if (v == LOAD) { + Fl_Light_Button {} { + label Compact + callback {if (v == LOAD) { uchar n; if (current_widget->is_a(Type::Button) && !current_widget->is_a(Type::Menu_Item)) { n = ((Fl_Button*)(current_widget->o))->compact(); @@ -2180,25 +2200,25 @@ if (v == LOAD) { } if (mod) Fluid.proj.set_modflag(1); }} - 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 + 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 - xywh {10 30 400 330} labelsize 11 when 0 hide - } { - Fl_Group wp_cpp_class { - label {Class:} + Fl_Group wp_cpp_tab { + label {C++} callback propagate_load open - xywh {95 40 310 20} labelfont 1 labelsize 11 align 4 + xywh {10 30 400 330} labelsize 11 when 0 hide } { - Fl_Input {} { - user_data 4 - callback {if (v == LOAD) { + 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 {if (v == LOAD) { if (current_widget->is_a(Type::Menu_Item)) { o->deactivate(); } else { @@ -2214,10 +2234,10 @@ if (v == LOAD) { } if (mod) Fluid.proj.set_modflag(1); }} - tooltip {The widget subclass.} xywh {95 40 172 20} labelfont 1 labelsize 11 textfont 4 textsize 11 resizable - } - Fl_Choice {} { - callback {static Fl_Menu_Item empty_type_menu[] = { + tooltip {The widget subclass.} xywh {95 40 172 20} labelfont 1 labelsize 11 textfont 4 textsize 11 resizable + } + Fl_Choice {} { + callback {static Fl_Menu_Item empty_type_menu[] = { {"Normal",0,nullptr,(void*)nullptr}, {nullptr}}; @@ -2260,16 +2280,16 @@ if (v == LOAD) { } if (mod) Fluid.proj.set_modflag(1); }} 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 open - xywh {95 65 310 20} labelfont 1 labelsize 11 align 4 - } { - Fl_Input {} { - callback {if (v == LOAD) { + 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 open + xywh {95 65 310 20} labelfont 1 labelsize 11 align 4 + } { + Fl_Input {} { + callback {if (v == LOAD) { static char buf[1024]; if (numselected != 1) { snprintf(buf, sizeof(buf), "Widget Properties (%d widgets)", numselected); @@ -2290,10 +2310,10 @@ if (v == LOAD) { // ((Fl_Window*)(o->parent()->parent()->parent()))->label(current_widget->title()); } }} - tooltip {The name of the widget.} xywh {95 65 235 20} labelfont 1 labelsize 11 textsize 11 resizable - } - Fl_Choice {} { - callback {if (v == LOAD) { + tooltip {The name of the widget.} xywh {95 65 235 20} labelfont 1 labelsize 11 textsize 11 resizable + } + Fl_Choice {} { + callback {if (v == LOAD) { o->value(current_widget->public_); if (current_widget->is_in_class()) o->show(); else o->hide(); } else { @@ -2312,44 +2332,44 @@ if (v == LOAD) { redraw_browser(); } }} 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 + 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 + } } - 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_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 {int n = fl_int(o->user_data()); + Fl_Input {v_input[0]} { + label {Extra Code:} + user_data 0 + callback {int n = fl_int(o->user_data()); if (v == LOAD) { o->value(current_widget->extra_code(n)); } else { @@ -2363,34 +2383,34 @@ if (v == LOAD) { } if (mod) Fluid.proj.set_modflag(1); }} - 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 {cb_v_input(o, v);} - 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 {cb_v_input(o, v);} - 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 {cb_v_input(o, v);} - 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); + 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 {cb_v_input(o, v);} + 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 {cb_v_input(o, v);} + 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 {cb_v_input(o, v);} + 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 + xywh {95 175 310 130} resizable } { - Fl_Text_Editor wComment { - label {Comment:} - callback {if (v == LOAD) { + Fl_Group {} {open + xywh {95 175 310 48} box FLAT_BOX + } { + Fl_Text_Editor wComment { + label {Comment:} + callback {if (v == LOAD) { const char *cmttext = current_widget->comment(); o->buffer()->text( cmttext ? cmttext : "" ); } else { @@ -2403,16 +2423,16 @@ wCallback->do_callback(wCallback, v);} open if (mod) Fluid.proj.set_modflag(1); free(c); }} - 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());} + 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());} + } } - } - Fl_Group {} {open - xywh {95 223 310 82} box FLAT_BOX - } { - Fl_Text_Editor wCallback { - label {Callback:} - callback {if (v == LOAD) { + Fl_Group {} {open + xywh {95 223 310 82} box FLAT_BOX + } { + Fl_Text_Editor wCallback { + label {Callback:} + callback {if (v == LOAD) { const char *cbtext = current_widget->callback(); o->buffer()->text( cbtext ? cbtext : "" ); } else { @@ -2431,19 +2451,19 @@ wCallback->do_callback(wCallback, v);} open if (mod) Fluid.proj.set_modflag(1); free(c); }} - 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/Code_Editor.h"} - class {fld::widget::Code_Editor} + 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/Code_Editor.h"} + class {fld::widget::Code_Editor} + } } } - } - 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 {if (v == LOAD) { + 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 {if (v == LOAD) { o->value(current_widget->user_data()); } else { int mod = 0; @@ -2456,11 +2476,11 @@ wCallback->do_callback(wCallback, v);} open } if (mod) Fluid.proj.set_modflag(1); }} - 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 {if (v == LOAD) { + 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 {if (v == LOAD) { if (current_widget->is_a(Type::Menu_Item)) {o->deactivate(); return;} else o->activate(); int n = current_widget->o->when(); set_whenmenu(n); @@ -2485,18 +2505,18 @@ wCallback->do_callback(wCallback, v);} open } if (mod) Fluid.proj.set_modflag(1); }} 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 {static const char *dflt = "void*"; + 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 {static const char *dflt = "void*"; if (v == LOAD) { const char *c = current_widget->user_data_type(); if (!c) c = dflt; @@ -2518,41 +2538,1245 @@ if (v == LOAD) { } if (mod) Fluid.proj.set_modflag(1); }} open - tooltip {The type of the user data.} xywh {95 335 158 20} labelfont 1 labelsize 11 textfont 4 textsize 11 resizable + 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 { + label Grid + callback {o->callback((Fl_Callback*)propagate_load);} open + xywh {10 30 400 330} labelsize 11 hide + class Grid_Tab + } {} + Fl_Group widget_tab_grid_child { + label {Grid Child} + callback {o->callback((Fl_Callback*)propagate_load);} open + xywh {10 30 400 330} labelsize 11 hide + class Grid_Child_Tab + } {} + } + Fl_Tabs data_tabs { + callback {if (current_node && current_node->is_a(Type::Data)) + propagate_load((Fl_Group *)o,v);} + xywh {10 10 400 350} selection_color 12 labelsize 11 labelcolor 255 hide + } { + Fl_Group data_tabs_data { + label {Inline Data} + callback propagate_load open + xywh {10 30 400 330} labelsize 11 resizable + } { + Fl_Group {} { + label {Visibility:} + callback propagate_load open + xywh {95 49 310 21} labelfont 1 labelsize 11 align 4 + } { + Fl_Choice {} { + callback {if (!current_node || !current_node->is_a(Type::Data)) return; +Data_Node* nd = (Data_Node*)current_node; + +if (v == LOAD) { + if (!nd->is_in_class()) { + o->value(nd->output_file()); + o->show(); + } else { + o->hide(); + } +} else { + if (!nd->is_in_class()) { + if (nd->output_file() != o->value()) { + nd->output_file(o->value()); + Fluid.proj.set_modflag(1); + redraw_browser(); + } + } +}} open + xywh {95 50 210 20} down_box BORDER_BOX labelsize 11 textsize 11 + } { + MenuItem {} { + label {in source file only} + xywh {10 10 100 20} labelsize 11 + } + MenuItem {} { + label {in header file only} + xywh {10 10 100 20} labelsize 11 hide + } + MenuItem {} { + label {"static" in source file} + xywh {10 10 100 20} labelsize 11 + } + MenuItem {} { + label {in source and "extern" in header} + xywh {10 10 100 20} labelsize 11 + } + } + Fl_Choice {} { + callback {if (!current_node || !current_node->is_a(Type::Data)) return; +Data_Node* nd = (Data_Node*)current_node; + +if (v == LOAD) { + if (nd->is_in_class()) { + o->value(nd->visibility()); + o->show(); + } else { + o->hide(); + } +} else { + if (nd->is_in_class()) { + if (nd->visibility() != o->value()) { + nd->visibility(o->value()); + Fluid.proj.set_modflag(1); + redraw_browser(); + } + } +}} open + xywh {95 50 75 20} down_box BORDER_BOX labelsize 11 textsize 11 + } { + MenuItem {} { + label private + xywh {20 20 100 20} labelsize 11 + } + MenuItem {} { + label public + xywh {20 20 100 20} labelsize 11 + } + MenuItem {} { + label protected + xywh {20 20 100 20} labelsize 11 + } + } + Fl_Box {} { + xywh {363 49 42 20} resizable + } + } + Fl_Group {} { + label {Output: } + callback propagate_load open + xywh {95 75 310 20} labelfont 1 labelsize 11 align 4 } { - MenuItem {} { - label {void*} - xywh {0 0 31 20} labelfont 4 labelsize 11 + Fl_Choice {} { + callback {if (!current_node || !current_node->is_a(Type::Data)) return; +Data_Node* nd = (Data_Node*)current_node; + +if (v == LOAD) { + o->value(nd->output_format()); +} else { + if (nd->output_format() != o->value()) { + nd->output_format( o->value() ); + Fluid.proj.set_modflag(1); + } +}} open + tooltip {text mode generates a "const char*" and a trailing NUL, compressed mode uses zlib to generate a binary block} xywh {95 75 210 20} down_box BORDER_BOX labelsize 11 textsize 11 + } { + MenuItem {} { + label {binary: unsigned char[]} + user_data 0 user_data_type long + xywh {10 10 100 20} labelsize 11 + } + MenuItem {} { + label {text: const char*} + user_data 1 user_data_type long + xywh {10 10 100 20} labelsize 11 + } + MenuItem {} { + label {compressed: unsigned char[]} + user_data 2 user_data_type long + xywh {10 10 100 20} labelsize 11 + } + MenuItem {} { + label {binary: std::vector<uint8_t>} + user_data 3 user_data_type long + xywh {10 10 100 20} labelsize 11 + } + MenuItem {} { + label {text: std::string} + user_data 4 user_data_type long + xywh {10 10 100 20} labelsize 11 + } + MenuItem {} { + label {compressed: std::vector<uint8_t>} + user_data 5 user_data_type long + xywh {10 10 100 20} labelsize 11 + } } - MenuItem {} { - label long - xywh {0 0 31 20} labelfont 4 labelsize 11 + Fl_Box {} { + xywh {363 75 42 20} resizable } } - 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_Input {} { + label {Name:} + callback {if (!current_node || !current_node->is_a(Type::Data)) return; +Data_Node* nd = (Data_Node*)current_node; + +if (v == LOAD) { + o->value( nd->name() ); + the_panel->label("Inline Data Properties"); +} else { + const char *nn = nd->name(); + if ( ( nn && (strcmp(nn, o->value()) != 0)) + || (!nn && (strcmp("", o->value()) != 0)) ) + { + nd->name( o->value() ); + Fluid.proj.set_modflag(1); + redraw_browser(); + } +}} + tooltip {Inline Data variables are declared "const unsigned char []" in binary mode and "const char*" in text mode.} xywh {95 100 310 20} labelfont 1 labelsize 11 align 132 textfont 4 textsize 11 + } + Fl_Input wp_data_filename { + label {Filename:} + callback {if (!current_node || !current_node->is_a(Type::Data)) return; +Data_Node* nd = (Data_Node*)current_node; + +if (v == LOAD) { + const char *fn = nd->filename(); + o->value( fn ? fn : "" ); +} else { + const char *c = o->value(); + const char *fn = nd->filename(); + if ( ( fn && (strcmp(fn, c) != 0)) + || (!fn && (strcmp("", c) != 0)) ) + { + nd->filename(c); + Fluid.proj.set_modflag(1); + } +}} + tooltip {name and path of file that will be inlined} xywh {95 125 270 20} labelfont 1 labelsize 11 align 132 textfont 4 textsize 11 + } + Fl_Button {} { + label {@fileopen} + callback {if (v != LOAD) { + Fluid.proj.enter_project_dir(); + const char *fn = fl_file_chooser("Load Inline Data", + nullptr, wp_data_filename->value(), 1); + Fluid.proj.leave_project_dir(); + if (fn) { + if (strcmp(fn, wp_data_filename->value())) { + Fluid.proj.set_modflag(1); + wp_data_filename->value(fn); + wp_data_filename->do_callback(); + } + } +}} + xywh {365 125 40 20} labelcolor 134 + } + Fl_Text_Editor {} { + label {Comment:} + callback {if (!current_node || !current_node->is_a(Type::Data)) return; +Data_Node* nd = (Data_Node*)current_node; + +if (v == LOAD) { + const char *cmttext = nd->comment(); + o->buffer()->text( cmttext ? cmttext : "" ); +} else { + char *c = o->buffer()->text(); + const char *nn = nd->comment(); + if ( ( nn && (strcmp(nn, c) != 0)) + || (!nn && (strcmp("", c) != 0)) ) + { + nd->comment(c); + Fluid.proj.set_modflag(1); + redraw_browser(); + } + free(c); +}} + xywh {95 150 310 105} box DOWN_BOX labelfont 1 labelsize 11 align 4 textfont 4 textsize 11 resizable + code0 {o->buffer(new Fl_Text_Buffer());} + code1 {o->add_key_binding(FL_Tab, 0, use_tab_navigation);} } } } - Fl_Group widget_tab_grid { - label Grid - callback {o->callback((Fl_Callback*)propagate_load);} open - xywh {10 30 400 330} labelsize 11 hide - class Grid_Tab - } {} - Fl_Group widget_tab_grid_child { - label {Grid Child} - callback {o->callback((Fl_Callback*)propagate_load);} open - xywh {10 30 400 330} labelsize 11 hide - class Grid_Child_Tab - } {} + Fl_Tabs comment_tabs { + callback {if (current_node && current_node->is_a(Type::Comment)) + propagate_load((Fl_Group *)o,v);} + xywh {10 10 400 350} selection_color 12 labelsize 11 labelcolor 255 hide + } { + Fl_Group comment_tabs_comment { + label Comment + callback propagate_load open + xywh {10 30 400 330} labelsize 11 resizable + } { + Fl_Text_Editor comment_tabs_name { + label {Comment:} + callback {if (!current_node || !current_node->is_a(Type::Comment)) return; +Comment_Node* nd = (Comment_Node*)current_node; + +if (v == LOAD) { + the_panel->label("Comment Properties"); + const char *cmttext = nd->name(); + o->buffer()->text( cmttext ? cmttext : "" ); +} else { + char *c = o->buffer()->text(); + const char *nn = nd->name(); + if ( ( nn && (strcmp(nn, c) != 0)) + || (!nn && (strcmp("", c) != 0)) ) + { + nd->name(c); + Fluid.proj.set_modflag(1); + redraw_browser(); + } + free(c); +}} + xywh {95 45 310 235} box DOWN_BOX labelfont 1 labelsize 11 align 4 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 {} { + callback propagate_load open + xywh {95 285 310 65} + } { + Fl_Menu_Button comment_predefined_2 { + label Predefined + callback {if (!current_node || !current_node->is_a(Type::Comment)) return; + +static char itempath[256]; +static int last_selected_item { 0 }; + +if (v == LOAD) { + int i=0, n=0, version = 0; + Fl_Preferences menu(Fl_Preferences::USER_L, "fltk.org", "fluid_comments_menu"); + o->clear(); + o->add("_Edit/Add current comment..."); + o->add("_Edit/Remove last selection..."); + menu.get("version", version, -1); + if (version < 10400) load_comments_preset(menu); + menu.get("n", n, 0); + for (i=0;i<n;i++) { + char *text; + menu.get(Fl_Preferences::Name(i), text, ""); + o->add(text); + free(text); + } +} else { + if (o->value()==1) { + // add the current comment to the database + const char *xname = fl_input( + "Please enter a name to reference the current\\ncomment in your database.\\n\\n" + "Use forward slashes '/' to create submenus.", + "My Comment"); + if (xname) { + char *name = fl_strdup(xname); + for (char*s=name;*s;s++) if (*s==':') *s = ';'; + int n; + Fl_Preferences db(Fl_Preferences::USER_L, "fltk.org", "fluid_comments"); + db.set(name, comment_tabs_name->buffer()->text()); + Fl_Preferences menu(Fl_Preferences::USER_L, "fltk.org", "fluid_comments_menu"); + menu.get("n", n, 0); + menu.set(Fl_Preferences::Name(n), name); + menu.set("n", ++n); + o->add(name); + free(name); + } + } else if (o->value()==2) { + // remove the last selected comment from the database + if (itempath[0]==0 || last_selected_item==0) { + fl_message("Please select an entry from this menu first."); + } else if (fl_choice("Are you sure that you want to delete the entry\\n" + "\\"%s\\"\\nfrom the database?", "Cancel", "Delete", + nullptr, itempath)) { + Fl_Preferences db(Fl_Preferences::USER_L, "fltk.org", "fluid_comments"); + db.deleteEntry(itempath); + o->remove(last_selected_item); + Fl_Preferences menu(Fl_Preferences::USER_L, "fltk.org", "fluid_comments_menu"); + int i, n; + for (i=4, n=0; i<o->size(); i++) { + const Fl_Menu_Item *mi = o->menu()+i; + if (o->item_pathname(itempath, 255, mi)==0) { + if (itempath[0]=='/') memmove(itempath, itempath+1, 255); + if (itempath[0]) menu.set(Fl_Preferences::Name(n++), itempath); + } + } + menu.set("n", n); + } + } else { + // load the selected comment from the database + if (o->item_pathname(itempath, 255)==0) { + if (itempath[0]=='/') memmove(itempath, itempath+1, 255); + Fl_Preferences db(Fl_Preferences::USER_L, "fltk.org", "fluid_comments"); + char *text; + db.get(itempath, text, "(no text found in data base)"); + comment_tabs_name->buffer()->text(text); + comment_tabs_name->do_callback(); + free(text); + last_selected_item = o->value(); + } + } +}} open + xywh {95 285 90 20} labelsize 11 textsize 11 + code0 {extern void load_comments_preset(Fl_Preferences &menu);} + code1 {\#include <FL/fl_string_functions.h>} + } {} + Fl_Button comment_load_2 { + label {Import...} + callback {// load a comment from disk +if (v != LOAD) { + fl_file_chooser_ok_label("Load"); + const char *fname = fl_file_chooser("Pick a comment", nullptr, nullptr); + fl_file_chooser_ok_label(nullptr); + if (fname) { + if (comment_tabs_name->buffer()->loadfile(fname)) { + fl_alert("Error loading file\\n%s", fname); + } + comment_tabs_name->do_callback(); + } +}} + xywh {190 285 90 20} labelsize 11 + } + Fl_Check_Button {} { + label {output to header file} + callback {if (!current_node || !current_node->is_a(Type::Comment)) return; +Comment_Node* nd = (Comment_Node*)current_node; + +if (v == LOAD) { + o->value(nd->in_h()); +} else { + if (((int)nd->in_h()) != o->value()) { + nd->in_h( o->value() ); + Fluid.proj.set_modflag(1); + } +}} + tooltip {write the comment into the header (.h) file} xywh {95 310 120 20} down_box DOWN_BOX labelsize 11 when 1 + } + Fl_Check_Button {} { + label {output to source file} + callback {if (!current_node || !current_node->is_a(Type::Comment)) return; +Comment_Node* nd = (Comment_Node*)current_node; + +if (v == LOAD) { + o->value(nd->in_c()); +} else { + if (((int)nd->in_c()) != o->value()) { + nd->in_c( o->value() ); + Fluid.proj.set_modflag(1); + } +}} + tooltip {write the comment into the source (.cxx) file} xywh {95 330 120 20} down_box DOWN_BOX labelsize 11 when 1 + } + Fl_Box {} { + xywh {404 285 1 65} labelsize 11 resizable + } + } + } + } + Fl_Tabs class_tabs { + callback {if (current_node && current_node->is_a(Type::Class)) + propagate_load((Fl_Group *)o,v);} + xywh {10 10 400 350} selection_color 12 labelsize 11 labelcolor 255 hide + } { + Fl_Group class_tabs_main { + label Class + callback propagate_load open + xywh {10 30 400 330} labelsize 11 resizable + } { + Fl_Group {} { + label {Visibility:} + callback propagate_load + comment {This elemnt is hidden because we don't +support a class inside a class at this point} open + xywh {95 50 310 21} labelfont 1 labelsize 11 align 4 hide + } { + Fl_Choice {} { + callback {if (!current_node || !current_node->is_a(Type::Class)) return; +Class_Node* nd = (Class_Node*)current_node; + +if (v == LOAD) { + if (nd->is_in_class()) { + o->value(nd->visibility()); + o->activate(); + } else { + o->deactivate(); + } +} else { + if (nd->is_in_class()) { + if (nd->visibility() != o->value()) { + nd->visibility(o->value()); + Fluid.proj.set_modflag(1); + redraw_browser(); + } + } +}} open + tooltip {visibility for a class inside a class} xywh {95 50 75 20} down_box BORDER_BOX labelsize 11 textsize 11 + } { + MenuItem {} { + label private + xywh {30 30 100 20} labelsize 11 + } + MenuItem {} { + label public + xywh {30 30 100 20} labelsize 11 + } + MenuItem {} { + label protected + xywh {30 30 100 20} labelsize 11 + } + } + Fl_Box {} { + xywh {363 50 42 20} resizable + } + } + Fl_Input {} { + label {Attribute:} + callback {if (!current_node || !current_node->is_a(Type::Class)) return; +Class_Node* nd = (Class_Node*)current_node; + +if (v == LOAD) { + o->value( nd->prefix() ); +} else { + const char *nn = nd->prefix(); + if ( ( nn && (strcmp(nn, o->value()) != 0)) + || (!nn && (strcmp("", o->value()) != 0)) ) + { + nd->prefix( o->value() ); + Fluid.proj.set_modflag(1); + } +}} + tooltip {class attribute or `alignas()`} xywh {95 50 305 20} labelfont 1 labelsize 11 textfont 4 textsize 11 + } + Fl_Input {} { + label {Class Name:} + callback {if (!current_node || !current_node->is_a(Type::Class)) return; +Class_Node* nd = (Class_Node*)current_node; + +if (v == LOAD) { + the_panel->label("Class Properties"); + o->value( nd->name() ); +} else { + const char *nn = nd->name(); + if ( ( nn && (strcmp(nn, o->value()) != 0)) + || (!nn && (strcmp("", o->value()) != 0)) ) + { + nd->name( o->value() ); + Fluid.proj.set_modflag(1); + redraw_browser(); + } +}} + tooltip {class name, must be a single C++ keyword} xywh {95 75 305 20} labelfont 1 labelsize 11 textfont 4 textsize 11 + } + Fl_Input {} { + label {Base Class:} + callback {if (!current_node || !current_node->is_a(Type::Class)) return; +Class_Node* nd = (Class_Node*)current_node; + +if (v == LOAD) { + o->value( nd->base_class_name() ); +} else { + const char *nn = nd->base_class_name(); + if ( ( nn && (strcmp(nn, o->value()) != 0)) + || (!nn && (strcmp("", o->value()) != 0)) ) + { + nd->base_class_name( o->value() ); + Fluid.proj.set_modflag(1); + } +}} + tooltip {visibility and name of base class or classes +e.g. `public Fl_Widget`} xywh {95 100 305 20} labelfont 1 labelsize 11 textfont 4 textsize 11 + } + Fl_Text_Editor {} { + label {Comment:} + callback {if (!current_node || !current_node->is_a(Type::Class)) return; +Class_Node* nd = (Class_Node*)current_node; + +if (v == LOAD) { + const char *cmttext = nd->comment(); + o->buffer()->text( cmttext ? cmttext : "" ); +} else { + char *c = o->buffer()->text(); + const char *nn = nd->comment(); + if ( ( nn && (strcmp(nn, c) != 0)) + || (!nn && (strcmp("", c) != 0)) ) + { + nd->comment(c); + Fluid.proj.set_modflag(1); + redraw_browser(); + } + free(c); +}} + xywh {95 125 305 110} box DOWN_BOX labelfont 1 labelsize 11 align 4 textfont 4 textsize 11 resizable + code0 {o->buffer(new Fl_Text_Buffer());} + code1 {o->add_key_binding(FL_Tab, 0, use_tab_navigation);} + } + } + } + Fl_Tabs declblock_tabs { + callback {if (current_node && current_node->is_a(Type::DeclBlock)) + propagate_load((Fl_Group *)o,v);} + xywh {10 10 400 350} selection_color 12 labelsize 11 labelcolor 255 hide + } { + Fl_Group declblock_tabs_main { + label {Declaration Block} + callback propagate_load open + xywh {10 30 400 330} labelsize 11 resizable + } { + Fl_Input {} { + label {Start Code:} + callback {if (!current_node || !current_node->is_a(Type::DeclBlock)) return; +DeclBlock_Node* nd = (DeclBlock_Node*)current_node; + +if (v == LOAD) { + the_panel->label("Declaration Block Properties"); + o->value( nd->name() ); +} else { + const char *nn = nd->name(); + if ( ( nn && (strcmp(nn, o->value()) != 0)) + || (!nn && (strcmp("", o->value()) != 0)) ) + { + nd->name( o->value() ); + Fluid.proj.set_modflag(1); + redraw_browser(); + } +}} + tooltip {`\#ifdef` or similar conditional declaration block} xywh {95 50 305 20} labelfont 1 labelsize 11 textfont 4 textsize 11 + } + Fl_Input {} { + label {End Code:} + callback {if (!current_node || !current_node->is_a(Type::DeclBlock)) return; +DeclBlock_Node* nd = (DeclBlock_Node*)current_node; + +if (v == LOAD) { + o->value( nd->end_code() ); +} else { + const char *nn = nd->end_code(); + if ( ( nn && (strcmp(nn, o->value()) != 0)) + || (!nn && (strcmp("", o->value()) != 0)) ) + { + nd->end_code( o->value() ); + Fluid.proj.set_modflag(1); + } +}} + tooltip {`\#endif` or similar declaration code block} xywh {95 75 305 20} labelfont 1 labelsize 11 textfont 4 textsize 11 + } + Fl_Group {} { + callback propagate_load open + xywh {95 100 305 120} + } { + Fl_Box {} { + label {Enclose code generated by children in source file:} + xywh {95 100 270 20} labelsize 11 align 20 + } + Fl_Check_Button {} { + label implementations + callback {if (!current_node || !current_node->is_a(Type::DeclBlock)) return; +DeclBlock_Node* nd = (DeclBlock_Node*)current_node; + +if (v == LOAD) { + int f = ((nd->write_map() & DeclBlock_Node::CODE_IN_SOURCE) != 0); + o->value(f); +} else { + int f = ((nd->write_map() & DeclBlock_Node::CODE_IN_SOURCE) != 0); + if (f != o->value()) { + if (o->value()) + nd->write_map( nd->write_map() | DeclBlock_Node::CODE_IN_SOURCE ); + else + nd->write_map( nd->write_map() & ~DeclBlock_Node::CODE_IN_SOURCE ); + Fluid.proj.set_modflag(1); + } +}} + xywh {105 120 260 20} down_box DOWN_BOX labelsize 11 + } + Fl_Check_Button {} { + label {static initializations and callbacks} + callback {if (!current_node || !current_node->is_a(Type::DeclBlock)) return; +DeclBlock_Node* nd = (DeclBlock_Node*)current_node; + +if (v == LOAD) { + int f = ((nd->write_map() & DeclBlock_Node::STATIC_IN_SOURCE) != 0); + o->value(f); +} else { + int f = ((nd->write_map() & DeclBlock_Node::STATIC_IN_SOURCE) != 0); + if (f != o->value()) { + if (o->value()) + nd->write_map( nd->write_map() | DeclBlock_Node::STATIC_IN_SOURCE ); + else + nd->write_map( nd->write_map() & ~DeclBlock_Node::STATIC_IN_SOURCE ); + Fluid.proj.set_modflag(1); + } +}} + xywh {105 140 260 20} down_box DOWN_BOX labelsize 11 + } + Fl_Box {} { + label {Enclose code in header file:} + xywh {95 160 270 20} labelsize 11 align 20 + } + Fl_Check_Button {} { + label {forward declarations} + callback {if (!current_node || !current_node->is_a(Type::DeclBlock)) return; +DeclBlock_Node* nd = (DeclBlock_Node*)current_node; + +if (v == LOAD) { + int f = ((nd->write_map() & DeclBlock_Node::CODE_IN_HEADER) != 0); + o->value(f); +} else { + int f = ((nd->write_map() & DeclBlock_Node::CODE_IN_HEADER) != 0); + if (f != o->value()) { + if (o->value()) + nd->write_map( nd->write_map() | DeclBlock_Node::CODE_IN_HEADER ); + else + nd->write_map( nd->write_map() & ~DeclBlock_Node::CODE_IN_HEADER ); + Fluid.proj.set_modflag(1); + } +}} + xywh {105 180 260 20} down_box DOWN_BOX labelsize 11 + } + Fl_Check_Button {} { + label {preprecessor and callback declarations} + callback {if (!current_node || !current_node->is_a(Type::DeclBlock)) return; +DeclBlock_Node* nd = (DeclBlock_Node*)current_node; + +if (v == LOAD) { + int f = ((nd->write_map() & DeclBlock_Node::STATIC_IN_HEADER) != 0); + o->value(f); +} else { + int f = ((nd->write_map() & DeclBlock_Node::STATIC_IN_HEADER) != 0); + if (f != o->value()) { + if (o->value()) + nd->write_map( nd->write_map() | DeclBlock_Node::STATIC_IN_HEADER ); + else + nd->write_map( nd->write_map() & ~DeclBlock_Node::STATIC_IN_HEADER ); + Fluid.proj.set_modflag(1); + } +}} + xywh {105 200 260 20} down_box DOWN_BOX labelsize 11 + } + Fl_Box {} { + xywh {365 100 35 120} labelsize 11 hide resizable + } + } + Fl_Text_Editor {} { + label {Comment:} + callback {if (!current_node || !current_node->is_a(Type::DeclBlock)) return; +DeclBlock_Node* nd = (DeclBlock_Node*)current_node; + +if (v == LOAD) { + const char *cmttext = nd->comment(); + o->buffer()->text( cmttext ? cmttext : "" ); +} else { + char *c = o->buffer()->text(); + const char *nn = nd->comment(); + if ( ( nn && (strcmp(nn, c) != 0)) + || (!nn && (strcmp("", c) != 0)) ) + { + nd->comment(c); + Fluid.proj.set_modflag(1); + redraw_browser(); + } + free(c); +}} + xywh {95 225 305 117} box DOWN_BOX labelfont 1 labelsize 11 align 4 textfont 4 textsize 11 resizable + code0 {o->buffer(new Fl_Text_Buffer());} + code1 {o->add_key_binding(FL_Tab, 0, use_tab_navigation);} + } + } + } + Fl_Tabs decl_tabs { + callback {if (current_node && current_node->is_a(Type::Decl)) + propagate_load((Fl_Group *)o,v);} + xywh {10 10 400 350} selection_color 12 labelsize 11 labelcolor 255 hide + } { + Fl_Group decl_tabs_main { + label Declaration + callback propagate_load open + xywh {10 30 400 330} labelsize 11 resizable + } { + Fl_Group {} { + callback propagate_load open + xywh {15 50 390 20} labelfont 1 labelsize 11 align 4 + } { + Fl_Box {} { + xywh {404 50 1 20} hide resizable + } + Fl_Box {} { + label {Visibility:} + xywh {95 50 1 20} labelfont 1 labelsize 11 align 4 + } + Fl_Choice {} { + callback {if (!current_node || !current_node->is_a(Type::Decl)) return; +Decl_Node* nd = (Decl_Node*)current_node; + +if (v == LOAD) { + if (!nd->is_in_class()) { + o->value(nd->output_file()); + o->show(); + } else { + o->hide(); + } +} else { + if (!nd->is_in_class()) { + if (nd->output_file() != o->value()) { + nd->output_file(o->value()); + Fluid.proj.set_modflag(1); + redraw_browser(); + } + } +}} + xywh {95 50 185 20} down_box BORDER_BOX labelsize 11 textsize 11 + } { + MenuItem {} { + label {in source file only} + xywh {10 10 100 20} labelsize 11 + } + MenuItem {} { + label {in header file only} + xywh {10 10 100 20} labelsize 11 + } + MenuItem {} { + label {"static" in source file} + xywh {10 10 100 20} labelsize 11 + } + MenuItem {} { + label {in source and "extern" in header} + xywh {10 10 100 20} labelsize 11 + } + } + Fl_Choice {} { + callback {if (!current_node || !current_node->is_a(Type::Decl)) return; +Decl_Node* nd = (Decl_Node*)current_node; + +if (v == LOAD) { + if (nd->is_in_class()) { + o->value(nd->visibility()); + o->show(); + } else { + o->hide(); + } +} else { + if (nd->is_in_class()) { + if (nd->visibility() != o->value()) { + nd->visibility(o->value()); + Fluid.proj.set_modflag(1); + redraw_browser(); + } + } +}} + xywh {95 50 75 20} down_box BORDER_BOX labelsize 11 textsize 11 + } { + MenuItem {} { + label private + xywh {20 20 100 20} labelsize 11 + } + MenuItem {} { + label public + xywh {20 20 100 20} labelsize 11 + } + MenuItem {} { + label protected + xywh {20 20 100 20} labelsize 11 + } + } + } + Fl_Tile {} { + callback {propagate_load(o, v);} open + xywh {15 75 390 210} resizable + code0 {o->size_range(0, 25, 55);} + code1 {o->size_range(1, 25, 55);} + } { + Fl_Group {} { + callback propagate_load open + xywh {15 75 390 105} box FLAT_BOX labelfont 1 labelsize 11 align 4 + } { + Fl_Text_Editor {} { + label {Declaration:} + callback {if (!current_node || !current_node->is_a(Type::Decl)) return; +Decl_Node* nd = (Decl_Node*)current_node; + +if (v == LOAD) { + the_panel->label("Declaration Properties"); + const char *cmttext = nd->name(); + o->buffer()->text( cmttext ? cmttext : "" ); +} else { + char *c = o->buffer()->text(); + const char *nn = nd->name(); + if ( ( nn && (strcmp(nn, c) != 0)) + || (!nn && (strcmp("", c) != 0)) ) + { + nd->name(c); + Fluid.proj.set_modflag(1); + redraw_browser(); + } + free(c); +}} + tooltip {a declaration: `int x;`, an external symbol: `extern int foo();`, +a `\#` directive: `\#include <foo.h>`, a typedef `typedef char byte;`, + or a `using` statement, etc.} xywh {95 75 310 100} labelfont 1 labelsize 11 align 132 textsize 11 resizable + code0 {\#include "widgets/Code_Editor.h"} + code1 {o->add_key_binding(FL_Tab, 0, use_tab_navigation);} + class {fld::widget::Code_Editor} + } + } + Fl_Group {} { + callback propagate_load open + xywh {15 180 390 105} box FLAT_BOX + } { + Fl_Text_Editor {} { + label {Comment:} + callback {if (!current_node || !current_node->is_a(Type::Decl)) return; +Decl_Node* nd = (Decl_Node*)current_node; + +if (v == LOAD) { + const char *cmttext = nd->comment(); + o->buffer()->text( cmttext ? cmttext : "" ); +} else { + char *c = o->buffer()->text(); + const char *nn = nd->comment(); + if ( ( nn && (strcmp(nn, c) != 0)) + || (!nn && (strcmp("", c) != 0)) ) + { + nd->comment(c); + Fluid.proj.set_modflag(1); + redraw_browser(); + } + free(c); +}} + xywh {95 185 310 100} box DOWN_BOX labelfont 1 labelsize 11 align 4 textfont 4 textsize 11 resizable + code0 {o->buffer(new Fl_Text_Buffer());} + code1 {o->add_key_binding(FL_Tab, 0, use_tab_navigation);} + } + } + } + } + } + Fl_Tabs codeblock_tabs { + callback {if (current_node && current_node->is_a(Type::CodeBlock)) + propagate_load((Fl_Group *)o,v);} + xywh {10 10 400 350} selection_color 12 labelsize 11 labelcolor 255 hide + } { + Fl_Group codeblock_tabs_main { + label {Code Block} + callback propagate_load open + xywh {10 30 400 330} labelsize 11 resizable + } { + Fl_Input {} { + label {Start Code:} + callback {if (!current_node || !current_node->is_a(Type::CodeBlock)) return; +CodeBlock_Node* nd = (CodeBlock_Node*)current_node; + +if (v == LOAD) { + o->value( nd->name() ); + the_panel->label("Code Block Properties"); +} else { + const char *nn = nd->name(); + if ( ( nn && (strcmp(nn, o->value()) != 0)) + || (!nn && (strcmp("", o->value()) != 0)) ) + { + nd->name( o->value() ); + Fluid.proj.set_modflag(1); + redraw_browser(); + } +}} + tooltip {condition statement: `if (x==1)`, or empty} xywh {95 50 305 20} labelfont 1 labelsize 11 textfont 4 textsize 11 + } + Fl_Input {} { + label {End Code:} + callback {if (!current_node || !current_node->is_a(Type::CodeBlock)) return; +CodeBlock_Node* nd = (CodeBlock_Node*)current_node; + +if (v == LOAD) { + o->value( nd->end_code() ); +} else { + const char *nn = nd->end_code(); + if ( ( nn && (strcmp(nn, o->value()) != 0)) + || (!nn && (strcmp("", o->value()) != 0)) ) + { + nd->end_code( o->value() ); + Fluid.proj.set_modflag(1); + } +}} + tooltip {condition end: `while (x==1);`, or empty} xywh {95 75 305 20} labelfont 1 labelsize 11 textfont 4 textsize 11 + } + Fl_Text_Editor {} { + label {Comment:} + callback {if (!current_node || !current_node->is_a(Type::CodeBlock)) return; +CodeBlock_Node* nd = (CodeBlock_Node*)current_node; + +if (v == LOAD) { + const char *cmttext = nd->comment(); + o->buffer()->text( cmttext ? cmttext : "" ); +} else { + char *c = o->buffer()->text(); + const char *nn = nd->comment(); + if ( ( nn && (strcmp(nn, c) != 0)) + || (!nn && (strcmp("", c) != 0)) ) + { + nd->comment(c); + Fluid.proj.set_modflag(1); + redraw_browser(); + } + free(c); +}} + tooltip {code block comment} xywh {95 100 305 117} box DOWN_BOX labelfont 1 labelsize 11 align 4 textfont 4 textsize 11 resizable + code0 {o->buffer(new Fl_Text_Buffer());} + code1 {o->add_key_binding(FL_Tab, 0, use_tab_navigation);} + } + } + } + Fl_Tabs code_tabs { + callback {if (current_node && current_node->is_a(Type::Code)) + propagate_load((Fl_Group *)o,v);} + xywh {10 10 400 350} selection_color 12 labelsize 11 labelcolor 255 hide + } { + Fl_Group code_tabs_main { + label Code + callback propagate_load open + xywh {10 30 400 330} labelsize 11 resizable + } { + Fl_Text_Editor {} { + callback {if (!current_node || !current_node->is_a(Type::Code)) return; +Code_Node* nd = (Code_Node*)current_node; + +if (v == LOAD) { + the_panel->label("Code Editor"); + const char *cmttext = nd->name(); + o->buffer()->text( cmttext ? cmttext : "" ); + o->insert_position(nd->cursor_position_); + o->scroll(nd->code_input_scroll_row, nd->code_input_scroll_col); +} else { + char *c = o->buffer()->text(); + const char *nn = nd->name(); + if ( ( nn && (strcmp(nn, c) != 0)) + || (!nn && (strcmp("", c) != 0)) ) + { + nd->name(c); + Fluid.proj.set_modflag(1); + redraw_browser(); + } + nd->cursor_position_ = o->insert_position(); + nd->code_input_scroll_row = o->scroll_row(); + nd->code_input_scroll_col = o->scroll_col(); + free(c); +}} + xywh {15 40 390 315} box DOWN_BOX labelsize 11 when 15 textfont 4 textsize 11 resizable + code1 {\#include "widgets/Code_Editor.h"} + code2 {o->linenumber_width(60); +o->linenumber_size(o->Fl_Text_Display::textsize());} + class {fld::widget::Code_Editor} + } + } + } + Fl_Tabs func_tabs { + callback {if (current_node && current_node->is_a(Type::Function)) + propagate_load((Fl_Group *)o,v);} + xywh {10 10 400 350} selection_color 12 labelsize 11 labelcolor 255 hide resizable + } { + Fl_Group func_tabs_main { + label Function + callback propagate_load open + xywh {10 30 400 330} labelsize 11 resizable + } { + Fl_Group {} { + callback propagate_load open + xywh {15 50 390 45} labelfont 1 labelsize 11 align 4 + } { + Fl_Box {} { + xywh {404 50 1 20} hide resizable + } + Fl_Box {} { + label {Visibility:} + xywh {95 50 1 20} labelfont 1 labelsize 11 align 4 + } + Fl_Choice {} { + callback {if (!current_node || !current_node->is_a(Type::Function)) return; +Function_Node* nd = (Function_Node*)current_node; + +if (v == LOAD) { + if (!nd->is_in_class()) { + o->value(nd->visibility()); + o->show(); + } else { + o->hide(); + } +} else { + if (!nd->is_in_class()) { + if (nd->visibility() != o->value()) { + nd->visibility(o->value()); + Fluid.proj.set_modflag(1); + redraw_browser(); } - Fl_Tabs widget_tabs_repo { + } +}} open + xywh {95 50 80 20} down_box BORDER_BOX labelsize 11 textsize 11 + } { + MenuItem {} { + label static + xywh {10 10 100 20} labelsize 11 + } + MenuItem {} { + label global + xywh {10 10 100 20} labelsize 11 + } + MenuItem {} { + label local + xywh {10 10 100 20} labelsize 11 + } + } + Fl_Choice {} { + callback {if (!current_node || !current_node->is_a(Type::Function)) return; +Function_Node* nd = (Function_Node*)current_node; + +if (v == LOAD) { + if (nd->is_in_class()) { + o->value(nd->visibility()); + o->show(); + } else { + o->hide(); + } +} else { + if (nd->is_in_class()) { + if (nd->visibility() != o->value()) { + nd->visibility(o->value()); + Fluid.proj.set_modflag(1); + redraw_browser(); + } + } +}} open + xywh {95 50 75 20} down_box BORDER_BOX labelsize 11 textsize 11 + } { + MenuItem {} { + label private + xywh {20 20 100 20} labelsize 11 + } + MenuItem {} { + label public + xywh {20 20 100 20} labelsize 11 + } + MenuItem {} { + label protected + xywh {20 20 100 20} labelsize 11 + } + } + Fl_Check_Button {} { + label {declare "C"} + callback {if (!current_node || !current_node->is_a(Type::Function)) return; +Function_Node* nd = (Function_Node*)current_node; + +if (v == LOAD) { + o->value(nd->declare_c()); +} else { + if (nd->declare_c() != o->value()) { + nd->declare_c( o->value() ); + Fluid.proj.set_modflag(1); + } +}} + xywh {95 75 90 20} down_box DOWN_BOX labelsize 11 + } + } + Fl_Tile {} { + callback {propagate_load(o, v);} open + xywh {15 100 390 220} resizable + code0 {o->size_range(0, 25, 50);} + code1 {o->size_range(1, 25, 50);} + code2 {o->size_range(2, 25, 50);} + } { + Fl_Group {} { + callback propagate_load open + xywh {15 100 390 55} box FLAT_BOX labelfont 1 labelsize 11 align 4 + } { + Fl_Text_Editor {} { + label {Function +Name and +Args:} + callback {if (!current_node || !current_node->is_a(Type::Function)) return; +Function_Node* nd = (Function_Node*)current_node; + +if (v == LOAD) { + the_panel->label("Function Properties"); + const char *cmttext = nd->name(); + o->buffer()->text( cmttext ? cmttext : "" ); +} else { + char *c = o->buffer()->text(); + const char *nn = nd->name(); + if ( ( nn && (strcmp(nn, c) != 0)) + || (!nn && (strcmp("", c) != 0)) ) + { + nd->name(c); + Fluid.proj.set_modflag(1); + redraw_browser(); + } + free(c); +}} + tooltip {function name and args, or blank for `main(..)`} xywh {95 100 310 50} labelfont 1 labelsize 11 align 132 textsize 11 resizable + code0 {\#include "widgets/Code_Editor.h"} + code1 {o->add_key_binding(FL_Tab, 0, use_tab_navigation);} + class {fld::widget::Code_Editor} + } + } + Fl_Group {} { + callback propagate_load open + xywh {15 155 390 60} box FLAT_BOX labelfont 1 labelsize 11 align 4 + } { + Fl_Text_Editor {} { + label {Return Type:} + callback {if (!current_node || !current_node->is_a(Type::Function)) return; +Function_Node* nd = (Function_Node*)current_node; + +if (v == LOAD) { + const char *cmttext = nd->return_type(); + o->buffer()->text( cmttext ? cmttext : "" ); +} else { + char *c = o->buffer()->text(); + const char *nn = nd->return_type(); + if ( ( nn && (strcmp(nn, c) != 0)) + || (!nn && (strcmp("", c) != 0)) ) + { + nd->return_type(c); + Fluid.proj.set_modflag(1); + } + free(c); +}} + tooltip {return type, or blank to return outermost widget} xywh {95 160 310 50} labelfont 1 labelsize 11 align 132 textsize 11 resizable + code0 {\#include "widgets/Code_Editor.h"} + code1 {o->add_key_binding(FL_Tab, 0, use_tab_navigation);} + class {fld::widget::Code_Editor} + } + } + Fl_Group {} { + callback propagate_load open + xywh {15 215 390 105} box FLAT_BOX + } { + Fl_Text_Editor {} { + label {Comment:} + callback {if (!current_node || !current_node->is_a(Type::Function)) return; +Function_Node* nd = (Function_Node*)current_node; + +if (v == LOAD) { + const char *cmttext = nd->comment(); + o->buffer()->text( cmttext ? cmttext : "" ); +} else { + char *c = o->buffer()->text(); + const char *nn = nd->comment(); + if ( ( nn && (strcmp(nn, c) != 0)) + || (!nn && (strcmp("", c) != 0)) ) + { + nd->comment(c); + Fluid.proj.set_modflag(1); + redraw_browser(); + } + free(c); +}} + xywh {95 220 310 100} box DOWN_BOX labelfont 1 labelsize 11 align 4 textfont 4 textsize 11 resizable + code0 {o->buffer(new Fl_Text_Buffer());} + code1 {o->add_key_binding(FL_Tab, 0, use_tab_navigation);} + } + } + } + } + } + } + Fl_Tabs widget_tabs_repo {open xywh {10 10 400 350} hide code0 {o->hide();} } { - Fl_Group {} {open + Fl_Group {} { xywh {10 30 400 330} resizable } {} } diff --git a/fluid/panels/widget_panel.h b/fluid/panels/widget_panel.h index 80ccd4171..98d1066b7 100644 --- a/fluid/panels/widget_panel.h +++ b/fluid/panels/widget_panel.h @@ -43,6 +43,8 @@ extern Fl_Button *image_panel_close; Fl_Double_Window* make_image_panel(); void run_image_panel(); void flex_margin_cb(Fl_Value_Input* i, void* v, void (*load_margin)(Fl_Flex*,Fl_Value_Input*), int (*update_margin)(Fl_Flex*,int)); +#include <FL/Fl_Wizard.H> +extern Fl_Wizard *tabs_wizard; #include <FL/Fl_Tabs.H> extern Fl_Tabs *widget_tabs; extern Fl_Group *wp_gui_tab; @@ -105,6 +107,28 @@ extern Fl_Menu_Item whenmenu[]; extern Fl_Box *w_when_box; extern Grid_Tab *widget_tab_grid; extern Grid_Child_Tab *widget_tab_grid_child; +extern Fl_Tabs *data_tabs; +extern Fl_Group *data_tabs_data; +extern Fl_Input *wp_data_filename; +extern Fl_Tabs *comment_tabs; +extern Fl_Group *comment_tabs_comment; +extern Fl_Text_Editor *comment_tabs_name; +extern void load_comments_preset(Fl_Preferences &menu); +#include <FL/fl_string_functions.h> +extern Fl_Menu_Button *comment_predefined_2; +extern Fl_Button *comment_load_2; +extern Fl_Tabs *class_tabs; +extern Fl_Group *class_tabs_main; +extern Fl_Tabs *declblock_tabs; +extern Fl_Group *declblock_tabs_main; +extern Fl_Tabs *decl_tabs; +extern Fl_Group *decl_tabs_main; +extern Fl_Tabs *codeblock_tabs; +extern Fl_Group *codeblock_tabs_main; +extern Fl_Tabs *code_tabs; +extern Fl_Group *code_tabs_main; +extern Fl_Tabs *func_tabs; +extern Fl_Group *func_tabs_main; extern Fl_Tabs *widget_tabs_repo; extern void live_mode_cb(Fl_Button*, void*); extern Fl_Button *wLiveMode; @@ -119,4 +143,12 @@ 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_5[]; +extern Fl_Menu_Item menu_6[]; +extern Fl_Menu_Item menu_7[]; +extern Fl_Menu_Item menu_8[]; +extern Fl_Menu_Item menu_9[]; +extern Fl_Menu_Item menu_a[]; +extern Fl_Menu_Item menu_b[]; +extern Fl_Menu_Item menu_c[]; #endif diff --git a/fluid/panels/widget_panel/Grid_Child_Tab.fl b/fluid/panels/widget_panel/Grid_Child_Tab.fl index 161eab696..0fa9ffef9 100644 --- a/fluid/panels/widget_panel/Grid_Child_Tab.fl +++ b/fluid/panels/widget_panel/Grid_Child_Tab.fl @@ -2,6 +2,7 @@ version 1.0500 header_name {.h} code_name {.cxx} +include_guard {} decl {\#include "widgets/Formula_Input.h"} {public global } diff --git a/fluid/panels/widget_panel/Grid_Tab.fl b/fluid/panels/widget_panel/Grid_Tab.fl index e37610ca5..422ddf789 100644 --- a/fluid/panels/widget_panel/Grid_Tab.fl +++ b/fluid/panels/widget_panel/Grid_Tab.fl @@ -2,6 +2,7 @@ version 1.0500 header_name {.h} code_name {.cxx} +include_guard {} decl {\#include "widgets/Formula_Input.h"} {public global } diff --git a/fluid/tools/autodoc.cxx b/fluid/tools/autodoc.cxx index ee9f289b0..4c1dc5bff 100644 --- a/fluid/tools/autodoc.cxx +++ b/fluid/tools/autodoc.cxx @@ -23,6 +23,7 @@ #include "nodes/factory.h" #include "nodes/Widget_Node.h" #include "nodes/Window_Node.h" +#include "nodes/Function_Node.h" #include "panels/widget_panel.h" #include "panels/function_panel.h" #include "panels/settings_panel.h" @@ -401,6 +402,17 @@ void run_autodoc(const std::string &target_dir) { select_only(t_grp); Node *t_grd = add_new_widget_from_user("Fl_Grid", Strategy::AS_LAST_CHILD, false); Node *t_grdc = add_new_widget_from_user("Fl_Button", Strategy::AS_LAST_CHILD, false); + Node *t_data = add_new_widget_from_user("Data", Strategy::AS_LAST_CHILD, false); + Node *t_comment = add_new_widget_from_user("Comment", Strategy::AS_LAST_CHILD, false); + t_comment->name("All work and no play make Jack a dull boy."); + Node *t_class = add_new_widget_from_user("Class", Strategy::AS_LAST_CHILD, false); + Node *t_decl = add_new_widget_from_user("Decl", Strategy::AS_LAST_CHILD, false); + t_decl->name("const char *damage = \"'tis but a scratch\";"); + Node *t_func = add_new_widget_from_user("Function", Strategy::AS_LAST_CHILD, false); + Node *t_code = add_new_widget_from_user("Code", Strategy::AS_LAST_CHILD, false); + t_code->name("// increment user count\nif (new_user) {\n user_count++;\n}\n"); + Node *t_codeblock = add_new_widget_from_user("CodeBlock", Strategy::AFTER_CURRENT, false); + Node *t_declblock = add_new_widget_from_user("DeclBlock", Strategy::AS_LAST_CHILD, false); widget_browser->rebuild(); Fluid.proj.update_settings_dialog(); @@ -487,64 +499,39 @@ void run_autodoc(const std::string &target_dir) { // ---- dialog types // list and show all non-widget types and their respective dialog boxes + // Make sure we have a widget panel + t_win->open(); + t_win->open(); + // -- Type::Function - Fl_Window *adoc_function_panel = make_function_panel(); - f_name_input->value("count_trees(const char *forest_name)"); - f_return_type_input->value("unsigned int"); - fl_snapshot((target_dir + "function_panel.png").c_str(), adoc_function_panel, win_margin, win_blend); - adoc_function_panel->hide(); + select_only(t_func); + fl_snapshot((target_dir + "function_panel.png").c_str(), func_tabs_main, tab_margin, row_blend); // -- Type::Code - Fl_Window *adoc_code_panel = make_code_panel(); - code_input->buffer()->text("// increment user count\nif (new_user) {\n user_count++;\n}\n"); - fl_snapshot((target_dir + "code_panel.png").c_str(), adoc_code_panel, win_margin, win_blend); - adoc_code_panel->hide(); + select_only(t_code); + fl_snapshot((target_dir + "code_panel.png").c_str(), code_tabs_main, tab_margin, row_blend); // -- Type::CodeBlock - Fl_Window *adoc_codeblock_panel = make_codeblock_panel(); - code_before_input->value("if (test())"); - code_after_input->value("// test widgets added..."); - fl_snapshot((target_dir + "codeblock_panel.png").c_str(), adoc_codeblock_panel, win_margin, win_blend); - adoc_codeblock_panel->hide(); + select_only(t_codeblock); + fl_snapshot((target_dir + "codeblock_panel.png").c_str(), declblock_tabs_main, tab_margin, row_blend); // -- Type::Decl - Fl_Window *adoc_decl_panel = make_decl_panel(); - decl_class_choice->hide(); - decl_input->buffer()->text("const char *damage = \"'tis but a scratch\";"); - fl_snapshot((target_dir + "decl_panel.png").c_str(), adoc_decl_panel, win_margin, win_blend); - adoc_decl_panel->hide(); + select_only(t_decl); + fl_snapshot((target_dir + "decl_panel.png").c_str(), decl_tabs_main, tab_margin, row_blend); // -- Type::DeclBlock - Fl_Window *adoc_declblock_panel = make_declblock_panel(); - declblock_before_input->value("#ifdef NDEBUG"); - declblock_after_input->value("#endif // NDEBUG"); - fl_snapshot((target_dir + "declblock_panel.png").c_str(), adoc_declblock_panel, win_margin, win_blend); - adoc_declblock_panel->hide(); + select_only(t_declblock); + fl_snapshot((target_dir + "declblock_panel.png").c_str(), declblock_tabs_main, tab_margin, row_blend); // -- Type::Class - Fl_Window *adoc_class_panel = make_class_panel(); - decl_class_choice->hide(); - c_name_input->value("Zoo_Giraffe"); - c_subclass_input->value("Zoo_Animal"); - fl_snapshot((target_dir + "class_panel.png").c_str(), adoc_class_panel, win_margin, win_blend); - adoc_class_panel->hide(); + select_only(t_class); + fl_snapshot((target_dir + "class_panel.png").c_str(), class_tabs_main, tab_margin, row_blend); // -- Type::Widget_Class is handled like Window_Node // -- Type::Comment - Fl_Window *adoc_comment_panel = make_comment_panel(); - comment_input->buffer()->text("Make sure that the giraffe gets enough hay,\nbut the monkey can't reach it."); - fl_snapshot((target_dir + "comment_panel.png").c_str(), adoc_comment_panel, win_margin, win_blend); - adoc_comment_panel->hide(); - - // -- Type::Data - Fl_Window *adoc_data_panel = make_data_panel(); - data_class_choice->hide(); - data_input->value("emulated_ROM"); - data_filename->value("./ROM.bin"); - fl_snapshot((target_dir + "data_panel.png").c_str(), adoc_data_panel, win_margin, win_blend); - adoc_data_panel->hide(); - + select_only(t_comment); + fl_snapshot((target_dir + "comment_panel.png").c_str(), comment_tabs_comment, tab_margin, row_blend); // ---- widget dialog t_win->open(); // open the window @@ -608,6 +595,11 @@ void run_autodoc(const std::string &target_dir) { select_only(t_grdc); widget_tabs->value(widget_tab_grid_child); fl_snapshot((target_dir + "wp_gridc_tab.png").c_str(), widget_tab_grid_child, tab_margin, row_blend); + + // -- Type::Data + select_only(t_data); + fl_snapshot((target_dir + "data_panel.png").c_str(), data_tabs_data, tab_margin, row_blend); + } |
