From fd791a068e39e06785adc44693f4c533d3d6c903 Mon Sep 17 00:00:00 2001 From: Matthias Melcher Date: Wed, 17 Apr 2024 17:51:32 +0200 Subject: Separate FLUID user documentation, screen shot automation (#936) * CMake integration, no autotiools * alignment panel is now correctly renamed to setting panel * source view is now correctly renamed to code view * Merge FLTK FLUID docs into FLUID user manual. * Add two simple entry tutorials * Remove FLUID chapter form FLTK docs. * GitHub action to generate HTML and PDF docs and make the available as artefacts --- fluid/CMakeLists.txt | 11 +- fluid/CodeEditor.h | 2 +- fluid/Fd_Snap_Action.cxx | 2 +- fluid/Fl_Function_Type.cxx | 22 +- fluid/Fl_Type.cxx | 14 +- fluid/Fl_Type.h | 2 +- fluid/Fl_Widget_Type.cxx | 10 +- fluid/Fl_Widget_Type.h | 1 + fluid/Fl_Window_Type.cxx | 2 +- fluid/Makefile | 9 +- fluid/alignment_panel.cxx | 3543 ------------------- fluid/alignment_panel.fl | 1879 ----------- fluid/alignment_panel.h | 141 - fluid/autodoc.cxx | 602 ++++ fluid/autodoc.h | 59 + fluid/code.cxx | 62 +- fluid/code.h | 4 +- fluid/codeview_panel.cxx | 548 +++ fluid/codeview_panel.fl | 506 +++ fluid/codeview_panel.h | 58 + fluid/custom_widgets.cxx | 2 +- fluid/documentation/CMakeLists.txt | 232 ++ fluid/documentation/Doxyfile.in | 2485 ++++++++++++++ fluid/documentation/convert_doxyfile | 44 + fluid/documentation/copyright.dox.in | 1 + fluid/documentation/generated.dox.in | 6 + fluid/documentation/make_header | 63 + fluid/documentation/make_pdf | 41 + fluid/documentation/src/1of7GUIs.png | Bin 0 -> 32692 bytes fluid/documentation/src/cubeview.png | Bin 0 -> 4482 bytes fluid/documentation/src/edit_live_resize.png | Bin 0 -> 71715 bytes fluid/documentation/src/edit_outside.png | Bin 0 -> 20358 bytes fluid/documentation/src/edit_overlap.png | Bin 0 -> 20462 bytes fluid/documentation/src/edit_select_group.png | Bin 0 -> 74343 bytes fluid/documentation/src/edit_select_multiple.png | Bin 0 -> 27736 bytes fluid/documentation/src/edit_snap_grid.png | Bin 0 -> 18025 bytes fluid/documentation/src/edit_snap_group.png | Bin 0 -> 15375 bytes fluid/documentation/src/edit_snap_sibling.png | Bin 0 -> 16034 bytes fluid/documentation/src/edit_snap_size.png | Bin 0 -> 14755 bytes fluid/documentation/src/edit_window.png | Bin 0 -> 72016 bytes fluid/documentation/src/flBox.png | Bin 0 -> 453 bytes fluid/documentation/src/flClass.png | Bin 0 -> 176 bytes fluid/documentation/src/flCode.png | Bin 0 -> 120 bytes fluid/documentation/src/flCodeBlock.png | Bin 0 -> 210 bytes fluid/documentation/src/flComment.png | Bin 0 -> 154 bytes fluid/documentation/src/flData.png | Bin 0 -> 212 bytes fluid/documentation/src/flDeclaration.png | Bin 0 -> 165 bytes fluid/documentation/src/flDeclarationBlock.png | Bin 0 -> 217 bytes fluid/documentation/src/flFunction.png | Bin 0 -> 200 bytes fluid/documentation/src/flWidgetClass.png | Bin 0 -> 202 bytes fluid/documentation/src/flWindow.png | Bin 0 -> 488 bytes fluid/documentation/src/fluid-128.png | Bin 0 -> 10179 bytes fluid/documentation/src/fluid-title.tex.in | 35 + fluid/documentation/src/fluid1.png | Bin 0 -> 41825 bytes fluid/documentation/src/fluid2.png | Bin 0 -> 101220 bytes fluid/documentation/src/fluid3-cxx.png | Bin 0 -> 44546 bytes fluid/documentation/src/fluid4.png | Bin 0 -> 31481 bytes fluid/documentation/src/fluid_flow_chart.png | Bin 0 -> 83226 bytes fluid/documentation/src/fluid_flow_chart_800.png | Bin 0 -> 41559 bytes fluid/documentation/src/fluid_gui_overview_800.png | Bin 0 -> 334048 bytes fluid/documentation/src/index.dox | 118 + fluid/documentation/src/main_titlebar.png | Bin 0 -> 14952 bytes fluid/documentation/src/page_appendices.dox | 92 + fluid/documentation/src/page_codeview_panel.dox | 76 + fluid/documentation/src/page_commandline.dox | 124 + fluid/documentation/src/page_edit_window.dox | 179 + fluid/documentation/src/page_functional_nodes.dox | 450 +++ fluid/documentation/src/page_interactive.dox | 57 + fluid/documentation/src/page_introduction.dox | 69 + fluid/documentation/src/page_main_window.dox | 371 ++ fluid/documentation/src/page_setting_dialog.dox | 338 ++ fluid/documentation/src/page_tutorial.dox | 534 +++ fluid/documentation/src/page_widget_panel.dox | 429 +++ fluid/documentation/src/page_widgetbin_panel.dox | 34 + fluid/documentation/src/widgetbin_action.png | Bin 0 -> 232128 bytes fluid/factory.cxx | 9 +- fluid/factory.h | 4 +- fluid/file.cxx | 12 +- fluid/file.h | 10 +- fluid/fluid.cxx | 80 +- fluid/fluid.h | 5 +- fluid/makedepend | 285 +- fluid/settings_panel.cxx | 3547 ++++++++++++++++++++ fluid/settings_panel.fl | 1879 +++++++++++ fluid/settings_panel.h | 143 + fluid/shell_command.cxx | 2 +- fluid/sourceview_panel.cxx | 542 --- fluid/sourceview_panel.fl | 506 --- fluid/sourceview_panel.h | 55 - fluid/widget_panel.cxx | 407 ++- fluid/widget_panel.fl | 66 +- fluid/widget_panel.h | 24 + 92 files changed, 13696 insertions(+), 7137 deletions(-) delete mode 100644 fluid/alignment_panel.cxx delete mode 100644 fluid/alignment_panel.fl delete mode 100644 fluid/alignment_panel.h create mode 100644 fluid/autodoc.cxx create mode 100644 fluid/autodoc.h create mode 100644 fluid/codeview_panel.cxx create mode 100644 fluid/codeview_panel.fl create mode 100644 fluid/codeview_panel.h create mode 100644 fluid/documentation/CMakeLists.txt create mode 100644 fluid/documentation/Doxyfile.in create mode 100755 fluid/documentation/convert_doxyfile create mode 100644 fluid/documentation/copyright.dox.in create mode 100644 fluid/documentation/generated.dox.in create mode 100755 fluid/documentation/make_header create mode 100755 fluid/documentation/make_pdf create mode 100644 fluid/documentation/src/1of7GUIs.png create mode 100644 fluid/documentation/src/cubeview.png create mode 100644 fluid/documentation/src/edit_live_resize.png create mode 100644 fluid/documentation/src/edit_outside.png create mode 100644 fluid/documentation/src/edit_overlap.png create mode 100644 fluid/documentation/src/edit_select_group.png create mode 100644 fluid/documentation/src/edit_select_multiple.png create mode 100644 fluid/documentation/src/edit_snap_grid.png create mode 100644 fluid/documentation/src/edit_snap_group.png create mode 100644 fluid/documentation/src/edit_snap_sibling.png create mode 100644 fluid/documentation/src/edit_snap_size.png create mode 100644 fluid/documentation/src/edit_window.png create mode 100644 fluid/documentation/src/flBox.png create mode 100644 fluid/documentation/src/flClass.png create mode 100644 fluid/documentation/src/flCode.png create mode 100644 fluid/documentation/src/flCodeBlock.png create mode 100644 fluid/documentation/src/flComment.png create mode 100644 fluid/documentation/src/flData.png create mode 100644 fluid/documentation/src/flDeclaration.png create mode 100644 fluid/documentation/src/flDeclarationBlock.png create mode 100644 fluid/documentation/src/flFunction.png create mode 100644 fluid/documentation/src/flWidgetClass.png create mode 100644 fluid/documentation/src/flWindow.png create mode 100644 fluid/documentation/src/fluid-128.png create mode 100644 fluid/documentation/src/fluid-title.tex.in create mode 100644 fluid/documentation/src/fluid1.png create mode 100644 fluid/documentation/src/fluid2.png create mode 100644 fluid/documentation/src/fluid3-cxx.png create mode 100644 fluid/documentation/src/fluid4.png create mode 100644 fluid/documentation/src/fluid_flow_chart.png create mode 100644 fluid/documentation/src/fluid_flow_chart_800.png create mode 100644 fluid/documentation/src/fluid_gui_overview_800.png create mode 100644 fluid/documentation/src/index.dox create mode 100644 fluid/documentation/src/main_titlebar.png create mode 100644 fluid/documentation/src/page_appendices.dox create mode 100644 fluid/documentation/src/page_codeview_panel.dox create mode 100644 fluid/documentation/src/page_commandline.dox create mode 100644 fluid/documentation/src/page_edit_window.dox create mode 100644 fluid/documentation/src/page_functional_nodes.dox create mode 100644 fluid/documentation/src/page_interactive.dox create mode 100644 fluid/documentation/src/page_introduction.dox create mode 100644 fluid/documentation/src/page_main_window.dox create mode 100644 fluid/documentation/src/page_setting_dialog.dox create mode 100644 fluid/documentation/src/page_tutorial.dox create mode 100644 fluid/documentation/src/page_widget_panel.dox create mode 100644 fluid/documentation/src/page_widgetbin_panel.dox create mode 100644 fluid/documentation/src/widgetbin_action.png create mode 100644 fluid/settings_panel.cxx create mode 100644 fluid/settings_panel.fl create mode 100644 fluid/settings_panel.h delete mode 100644 fluid/sourceview_panel.cxx delete mode 100644 fluid/sourceview_panel.fl delete mode 100644 fluid/sourceview_panel.h (limited to 'fluid') diff --git a/fluid/CMakeLists.txt b/fluid/CMakeLists.txt index bb3b9fe51..b9065616b 100644 --- a/fluid/CMakeLists.txt +++ b/fluid/CMakeLists.txt @@ -37,7 +37,8 @@ set(CPPFILES Fluid_Image.cxx about_panel.cxx align_widget.cxx - alignment_panel.cxx + settings_panel.cxx + autodoc.cxx code.cxx custom_widgets.cxx factory.cxx @@ -47,7 +48,7 @@ set(CPPFILES mergeback.cxx pixmaps.cxx shell_command.cxx - sourceview_panel.cxx + codeview_panel.cxx template_panel.cxx undo.cxx widget_browser.cxx @@ -71,19 +72,19 @@ set(HEADERFILES StyleParse.h about_panel.h align_widget.h - alignment_panel.h + settings_panel.h + autodoc.h code.h comments.h custom_widgets.h factory.h file.h - fluid.h function_panel.h mergeback.h print_panel.h pixmaps.h shell_command.h - sourceview_panel.h + codeview_panel.h template_panel.h undo.h widget_browser.h diff --git a/fluid/CodeEditor.h b/fluid/CodeEditor.h index 9886705aa..9cfa50abe 100644 --- a/fluid/CodeEditor.h +++ b/fluid/CodeEditor.h @@ -72,7 +72,7 @@ public: /** A widget derived from CodeEditor with highlighting for code blocks. - This widget is used by the SourceView system to show the design's + This widget is used by the codeview system to show the design's source and header code. The secondary highlighting show the text part that corresponds to the selected widget(s). */ diff --git a/fluid/Fd_Snap_Action.cxx b/fluid/Fd_Snap_Action.cxx index ffd944cd8..ce3d6f082 100644 --- a/fluid/Fd_Snap_Action.cxx +++ b/fluid/Fd_Snap_Action.cxx @@ -17,7 +17,7 @@ #include "Fd_Snap_Action.h" #include "Fl_Group_Type.h" -#include "alignment_panel.h" +#include "settings_panel.h" #include "shell_command.h" // get and set Fl_String preferences #include "file.h" diff --git a/fluid/Fl_Function_Type.cxx b/fluid/Fl_Function_Type.cxx index 6dc9fc927..22bcf7265 100644 --- a/fluid/Fl_Function_Type.cxx +++ b/fluid/Fl_Function_Type.cxx @@ -1279,7 +1279,7 @@ void Fl_Data_Type::write_code1(Fd_Code_Writer& f) { int nData = -1; int uncompressedDataSize = 0; // path should be set correctly already - if (filename_ && !f.write_sourceview) { + if (filename_ && !f.write_codeview) { enter_project_dir(); FILE *f = fl_fopen(filename_, "rb"); leave_project_dir(); @@ -1395,8 +1395,8 @@ void Fl_Data_Type::write_code1(Fd_Code_Writer& f) { } } // if we are in interactive mode, we pop up a warning dialog - // giving the error: (batch_mode && !write_sourceview) ??? - if (message && !f.write_sourceview) { + // giving the error: (batch_mode && !write_codeview) ??? + if (message && !f.write_codeview) { if (batch_mode) fprintf(stderr, "FLUID ERROR: %s %s\n", message, fn); else @@ -1535,9 +1535,11 @@ BREAK2: */ void Fl_DeclBlock_Type::write_code1(Fd_Code_Writer& f) { const char* c = name(); - if (public_) - f.write_h("%s\n", c); - f.write_c("%s\n", c); + if (c && *c) { + if (public_) + f.write_h("%s\n", c); + f.write_c("%s\n", c); + } } /** @@ -1545,9 +1547,11 @@ void Fl_DeclBlock_Type::write_code1(Fd_Code_Writer& f) { */ void Fl_DeclBlock_Type::write_code2(Fd_Code_Writer& f) { const char* c = after; - if (public_) - f.write_h("%s\n", c); - f.write_c("%s\n", c); + if (c && *c) { + if (public_) + f.write_h("%s\n", c); + f.write_c("%s\n", c); + } } // ---- Fl_Comment_Type declaration diff --git a/fluid/Fl_Type.cxx b/fluid/Fl_Type.cxx index e1b184327..a649ea311 100644 --- a/fluid/Fl_Type.cxx +++ b/fluid/Fl_Type.cxx @@ -696,8 +696,8 @@ void Fl_Type::move_before(Fl_Type* g) { // write a widget and all its children: void Fl_Type::write(Fd_Project_Writer &f) { - if (f.write_sourceview()) proj1_start = (int)ftell(f.file()) + 1; - if (f.write_sourceview()) proj2_start = (int)ftell(f.file()) + 1; + if (f.write_codeview()) proj1_start = (int)ftell(f.file()) + 1; + if (f.write_codeview()) proj2_start = (int)ftell(f.file()) + 1; f.write_indent(level); f.write_word(type_name()); @@ -712,9 +712,9 @@ void Fl_Type::write(Fd_Project_Writer &f) { write_properties(f); if (parent) parent->write_parent_properties(f, this, true); f.write_close(level); - if (f.write_sourceview()) proj1_end = (int)ftell(f.file()); + if (f.write_codeview()) proj1_end = (int)ftell(f.file()); if (!is_parent()) { - if (f.write_sourceview()) proj2_end = (int)ftell(f.file()); + if (f.write_codeview()) proj2_end = (int)ftell(f.file()); return; } // now do children: @@ -722,9 +722,9 @@ void Fl_Type::write(Fd_Project_Writer &f) { Fl_Type *child; for (child = next; child && child->level > level; child = child->next) if (child->level == level+1) child->write(f); - if (f.write_sourceview()) proj2_start = (int)ftell(f.file()) + 1; + if (f.write_codeview()) proj2_start = (int)ftell(f.file()) + 1; f.write_close(level); - if (f.write_sourceview()) proj2_end = (int)ftell(f.file()); + if (f.write_codeview()) proj2_end = (int)ftell(f.file()); } void Fl_Type::write_properties(Fd_Project_Writer &f) { @@ -1092,7 +1092,7 @@ Fl_Type *Fl_Type::find_by_uid(unsigned short uid) { return NULL; } -/** Find a type node by using the sourceview text positions. +/** Find a type node by using the codeview text positions. \param[in] text_type 0=source file, 1=header, 2=.fl project file \param[in] crsr cursor position in text diff --git a/fluid/Fl_Type.h b/fluid/Fl_Type.h index 39a9bb30b..67e7c8965 100644 --- a/fluid/Fl_Type.h +++ b/fluid/Fl_Type.h @@ -146,7 +146,7 @@ public: // things that should not be public: Fl_Type *factory; const char *callback_name(Fd_Code_Writer& f); - // text positions of this type in code, header, and project file (see SourceView) + // text positions of this type in code, header, and project file (see codeview) int code_static_start, code_static_end; int code1_start, code1_end; int code2_start, code2_end; diff --git a/fluid/Fl_Widget_Type.cxx b/fluid/Fl_Widget_Type.cxx index 310792d0c..485cb8d8f 100644 --- a/fluid/Fl_Widget_Type.cxx +++ b/fluid/Fl_Widget_Type.cxx @@ -24,7 +24,7 @@ #include "file.h" #include "code.h" #include "Fluid_Image.h" -#include "alignment_panel.h" +#include "settings_panel.h" #include "widget_panel.h" #include "undo.h" #include "mergeback.h" @@ -383,7 +383,7 @@ void name_public_cb(Fl_Choice* i, void* v) { /* Treating UNDO for text widget. Goal: we want to continuously update the UI while the user is typing text - (changing the label, in this case). Source View does deferred updates, and + (changing the label, in this case). Code View does deferred updates, and the widget browser and widget panel update on every keystroke. At the same time, we want to limit undo actions to few and logical units. @@ -2727,7 +2727,7 @@ void Fl_Widget_Type::open() { extern void redraw_overlays(); extern void check_redraw_corresponding_parent(Fl_Type*); extern void redraw_browser(); -extern void update_sourceview_position(); +extern void update_codeview_position(); // Called when ui changes what objects are selected: // p is selected object, null for all deletions (we must throw away @@ -2761,8 +2761,8 @@ void selection_changed(Fl_Type *p) { redraw_overlays(); // load the panel with the new settings: load_panel(); - // update the source viewer to show the code for the selected object - update_sourceview_position(); + // update the code viewer to show the code for the selected object + update_codeview_position(); } //////////////////////////////////////////////////////////////// diff --git a/fluid/Fl_Widget_Type.h b/fluid/Fl_Widget_Type.h index b1773a501..40470c544 100644 --- a/fluid/Fl_Widget_Type.h +++ b/fluid/Fl_Widget_Type.h @@ -127,5 +127,6 @@ public: void redraw(); }; +extern Fl_Window *the_panel; #endif // _FLUID_FL_WIDGET_TYPE_H diff --git a/fluid/Fl_Window_Type.cxx b/fluid/Fl_Window_Type.cxx index bc848ed75..b68af4406 100644 --- a/fluid/Fl_Window_Type.cxx +++ b/fluid/Fl_Window_Type.cxx @@ -25,7 +25,7 @@ #include "fluid.h" #include "widget_browser.h" #include "undo.h" -#include "alignment_panel.h" +#include "settings_panel.h" #include "file.h" #include "code.h" #include "widget_panel.h" diff --git a/fluid/Makefile b/fluid/Makefile index 75a785e71..eb5b8c192 100644 --- a/fluid/Makefile +++ b/fluid/Makefile @@ -31,7 +31,8 @@ CPPFILES = \ Fluid_Image.cxx \ about_panel.cxx \ align_widget.cxx \ - alignment_panel.cxx \ + settings_panel.cxx \ + autodoc.cxx \ code.cxx \ custom_widgets.cxx \ factory.cxx \ @@ -42,7 +43,7 @@ CPPFILES = \ mergeback.cxx \ pixmaps.cxx \ shell_command.cxx \ - sourceview_panel.cxx \ + codeview_panel.cxx \ template_panel.cxx \ undo.cxx \ widget_browser.cxx \ @@ -141,9 +142,9 @@ uninstall-osx: rebuild: fluid$(EXEEXT) echo 'Rebuilding fluid (.fl) and .cxx/.h files from .fl files ...' ./fluid$(EXEEXT) -u -c about_panel.fl - ./fluid$(EXEEXT) -u -c alignment_panel.fl + ./fluid$(EXEEXT) -u -c settings_panel.fl ./fluid$(EXEEXT) -u -c function_panel.fl ./fluid$(EXEEXT) -u -c print_panel.fl - ./fluid$(EXEEXT) -u -c sourceview_panel.fl + ./fluid$(EXEEXT) -u -c codeview_panel.fl ./fluid$(EXEEXT) -u -c template_panel.fl ./fluid$(EXEEXT) -u -c widget_panel.fl diff --git a/fluid/alignment_panel.cxx b/fluid/alignment_panel.cxx deleted file mode 100644 index 1ad8cfdfe..000000000 --- a/fluid/alignment_panel.cxx +++ /dev/null @@ -1,3543 +0,0 @@ -// -// Setting and shell dialogs for the Fast Light Tool Kit (FLTK). -// -// Copyright 1998-2023 by Bill Spitzak and others. -// -// This library is free software. Distribution and use rights are outlined in -// the file "COPYING" which should have been included with this file. If this -// file is missing or damaged, see the license at: -// -// https://www.fltk.org/COPYING.php -// -// Please see the following page on how to report bugs and issues: -// -// https://www.fltk.org/bugs.php -// - -// generated by Fast Light User Interface Designer (fluid) version 1.0400 - -#include "alignment_panel.h" -#include "undo.h" -#include -#include -#include -#include -#include "../src/flstring.h" -void scheme_cb(Fl_Scheme_Choice *, void *); -int w_settings_shell_list_selected; - -static void cb_Comments(Fl_Choice* o, void* v) { - Fl_Font *font = (Fl_Font*)o->user_data(); - if (v == LOAD) { - o->value(*font); - } else { - *font = (int)o->value(); - widget_browser->redraw(); - widget_browser->save_prefs(); - } -} - -static void cb_Color_Chip(Fl_Button* o, void* v) { - Fl_Color *color = (Fl_Color*)o->user_data(); - if (v == LOAD) { - o->color(*color); - o->redraw(); - } else { - Fl_Color d = fl_show_colormap(*color); - *color = d; - o->color(d); - widget_browser->redraw(); - widget_browser->save_prefs(); - } -} - -static void cb_Color_Choice(Fl_Menu_Button* o, void* v) { - if (v != LOAD) { - Fl_Color *color = (Fl_Color*)o->user_data(); - Fl_Color d = (Fl_Color)(o->mvalue()->argument()); - *color = d; - o->parent()->do_callback(o->parent(), LOAD); - widget_browser->redraw(); - widget_browser->save_prefs(); - } -} - -Fl_Double_Window *script_panel=(Fl_Double_Window *)0; - -static void cb_script_panel(Fl_Double_Window*, void*) { - if (Fl::event()==FL_SHORTCUT && Fl::event_key()==FL_Escape) - return; // ignore Escape - script_panel->hide(); // otherwise hide..; -} - -Fl_Text_Editor *script_input=(Fl_Text_Editor *)0; - -Fl_Return_Button *script_panel_ok=(Fl_Return_Button *)0; - -Fl_Button *script_panel_cancel=(Fl_Button *)0; - -Fl_Double_Window* make_script_panel() { - { Fl_Double_Window* o = script_panel = new Fl_Double_Window(540, 180, "Shell Script Editor"); - script_panel->labelsize(11); - script_panel->callback((Fl_Callback*)cb_script_panel); - { script_input = new Fl_Text_Editor(10, 10, 520, 130); - script_input->box(FL_DOWN_BOX); - script_input->labelsize(11); - script_input->textfont(4); - script_input->textsize(11); - script_input->when(FL_WHEN_RELEASE | FL_WHEN_CHANGED | FL_WHEN_ENTER_KEY); - Fl_Group::current()->resizable(script_input); - script_input->buffer(new Fl_Text_Buffer); - } // Fl_Text_Editor* script_input - { Fl_Group* o = new Fl_Group(10, 150, 520, 20); - o->labelsize(11); - o->callback((Fl_Callback*)propagate_load); - { script_panel_ok = new Fl_Return_Button(400, 150, 60, 20, "OK"); - script_panel_ok->labelsize(11); - script_panel_ok->window()->hotspot(script_panel_ok); - } // Fl_Return_Button* script_panel_ok - { script_panel_cancel = new Fl_Button(470, 150, 60, 20, "Cancel"); - script_panel_cancel->labelsize(11); - } // Fl_Button* script_panel_cancel - { Fl_Box* o = new Fl_Box(10, 150, 380, 20); - o->labelsize(11); - Fl_Group::current()->resizable(o); - } // Fl_Box* o - o->end(); - } // Fl_Group* o - script_panel->set_modal(); - o->size_range(200, 150); - script_panel->end(); - } // Fl_Double_Window* script_panel - // Enable line numbers - script_input->linenumber_width(60); - script_input->linenumber_size(script_input->Fl_Text_Display::textsize()); - return script_panel; -} - -Fl_Double_Window *settings_window=(Fl_Double_Window *)0; - -Fl_Tabs *w_settings_tabs=(Fl_Tabs *)0; - -static void cb_w_settings_tabs(Fl_Tabs* o, void* v) { - propagate_load(o, v); -} - -#include - -static const unsigned char idata_general_64[] = -{137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,96,0,0,0,64,8,4,0,0,0, -79,61,186,133,0,0,8,57,73,68,65,84,104,222,205,154,107,112,85,213,21,199,127, -151,60,185,36,18,66,204,131,120,155,82,136,163,131,4,41,180,130,36,2,117,8,15, -173,58,109,103,168,97,42,67,135,78,167,84,16,59,118,192,41,29,201,244,3,14,182, -14,62,74,77,149,42,12,226,180,160,130,19,32,136,144,34,193,240,104,136,52,193, -18,196,16,200,131,128,121,191,47,185,247,158,126,72,206,221,251,60,238,189,39, -112,46,115,247,249,178,207,217,123,159,179,214,218,107,173,255,90,107,31,176, -187,37,81,72,13,237,184,25,196,135,130,130,143,65,220,180,83,67,33,73,68,120, -203,162,114,152,108,179,203,199,89,178,34,155,129,210,128,196,171,87,73,36,147, -63,11,119,72,6,220,60,108,231,39,71,217,204,64,108,200,57,177,204,180,243,147, -209,182,50,112,175,191,167,188,231,72,197,65,52,224,65,225,58,43,20,28,195,99, -223,139,92,6,114,212,206,115,142,185,196,73,3,110,86,59,222,80,111,210,34,87, -133,198,169,157,4,162,52,3,81,36,138,155,187,35,149,129,120,225,229,83,116,12, -140,98,172,184,153,100,231,190,223,202,171,82,153,137,135,47,185,161,123,158,41, -196,156,233,87,120,149,1,9,193,146,201,160,94,183,54,141,217,140,226,20,141,225, -118,148,73,108,167,29,47,30,218,216,71,174,127,7,147,216,196,13,225,44,15,40,77, -186,107,135,236,74,27,217,64,130,95,132,115,41,166,29,47,94,58,217,65,114,56, -201,143,231,51,157,79,175,100,5,78,150,114,69,198,95,151,114,204,192,64,137,30, -147,107,200,39,129,149,124,201,77,205,200,49,156,225,99,96,155,73,152,224,165, -89,71,130,50,77,57,99,96,224,164,114,191,126,229,0,205,120,77,194,141,183,71, -66,82,212,8,230,174,96,131,201,124,135,222,229,36,243,56,15,51,90,55,109,144, -38,174,208,175,181,191,4,157,169,12,189,47,135,58,254,107,149,40,135,101,242, -93,156,9,237,193,103,243,20,51,112,201,78,83,69,54,186,168,231,52,123,249,79, -232,111,53,49,203,96,230,183,189,3,219,69,8,176,148,181,164,114,141,30,205,132, -251,89,199,175,153,77,154,6,194,132,164,226,73,101,42,115,152,200,101,58,52,99, -233,20,176,26,39,85,234,131,68,82,248,216,222,29,152,79,137,26,231,76,103,51,83, -232,161,150,227,236,163,122,120,66,1,203,185,143,24,11,175,114,83,205,54,246, -162,190,237,113,114,153,72,2,213,172,163,82,76,202,231,115,59,25,40,103,150,218, -45,98,201,240,198,221,164,145,51,236,231,48,235,249,57,169,35,48,167,38,118, -178,133,37,60,198,116,38,12,75,198,203,62,158,21,83,62,99,129,125,12,44,96,191, -42,220,103,88,39,34,6,192,199,13,174,49,137,187,70,232,208,218,185,194,4,82,52, -161,64,43,47,243,190,176,250,133,148,218,101,3,69,100,15,117,156,252,129,201,6, -39,148,97,170,245,193,219,104,210,25,163,147,159,19,39,187,5,101,99,196,205, -237,197,66,89,252,80,237,254,130,41,97,5,250,105,252,74,222,119,11,233,167,149, -88,104,145,240,138,249,254,8,32,120,243,209,78,61,77,12,224,32,142,76,92,36,89, -146,85,34,243,4,142,221,197,34,138,236,96,32,93,221,105,39,221,220,12,153,116, -41,92,163,140,35,156,160,205,15,109,121,60,202,28,241,162,32,30,106,64,214,206, -84,123,108,96,10,75,134,190,60,72,5,9,184,12,40,43,55,15,167,120,149,55,184,40, -161,110,63,53,28,164,137,52,210,131,238,67,43,31,179,70,150,196,238,208,168,103, -133,129,22,86,16,63,212,237,226,48,94,238,97,92,0,89,122,56,194,70,78,153,142, -93,228,44,46,178,2,176,160,112,137,191,179,89,235,168,126,79,167,29,12,116,16, -71,158,248,110,5,117,164,144,97,170,125,229,108,224,155,128,47,106,227,60,57, -100,154,170,78,25,175,242,145,252,200,203,75,28,180,203,141,30,167,139,92,161, -252,117,156,32,1,151,33,238,109,226,117,173,244,251,248,150,30,162,5,64,183,209, -203,15,12,142,160,133,15,249,147,31,211,1,232,225,69,94,67,177,211,195,61,194, -37,109,224,251,182,46,96,110,80,182,200,227,189,252,153,73,196,19,79,54,175, -211,47,70,182,42,13,186,149,127,211,135,212,53,214,107,71,214,115,226,207,153, -195,30,124,226,193,120,3,182,150,202,178,95,198,11,124,195,0,3,124,205,26,126, -41,220,203,33,218,13,121,146,198,3,239,33,143,47,194,145,212,95,103,169,216, -214,100,57,77,7,160,158,195,50,118,239,213,12,126,192,187,66,31,175,27,146,105, -167,176,229,215,88,106,200,182,109,171,74,248,168,81,187,19,12,154,220,68,159, -144,255,91,134,181,91,212,225,54,90,117,67,99,229,90,87,141,188,203,246,151,85, -226,84,255,25,101,88,234,22,221,78,174,26,86,54,8,151,216,106,32,34,74,128,215, -8,195,42,123,11,91,193,223,235,184,83,31,10,142,245,138,234,166,125,134,205, -145,138,47,247,24,86,126,71,24,77,138,65,51,189,194,6,220,225,101,224,1,85,142, -181,116,7,54,197,209,172,54,172,124,94,141,64,146,13,254,171,131,90,177,75,83, -71,70,211,72,38,167,113,128,85,194,78,187,12,89,127,190,184,89,201,211,154,193, -229,44,23,128,146,22,216,252,225,55,124,66,70,56,24,152,207,41,22,203,243,91,13, -69,187,31,201,174,253,31,188,233,7,178,34,138,132,134,45,212,100,116,67,193, -158,134,162,199,40,231,81,187,109,229,69,250,100,172,76,87,54,43,213,134,226,85, -133,242,99,45,162,246,210,72,147,118,229,83,74,165,97,93,149,242,178,146,174,93, -217,199,70,107,194,181,22,11,253,145,66,57,13,152,207,75,44,48,169,253,36,146, -202,89,127,22,0,196,144,72,162,92,170,200,102,189,116,10,34,82,201,251,152,70, -27,151,229,149,143,16,195,81,123,24,152,200,123,114,220,182,138,231,200,9,144, -9,165,227,226,188,204,130,166,101,179,145,135,76,5,27,141,139,7,137,149,195, -127,7,223,103,31,223,218,193,64,1,63,81,125,79,58,27,89,70,70,64,151,62,138,44, -166,209,195,69,147,177,39,89,207,67,1,83,64,7,227,200,97,50,135,196,163,88,234, -57,97,71,74,121,183,74,111,50,175,144,23,34,165,140,102,6,46,22,115,80,151,82, -46,100,54,169,33,176,108,28,63,229,119,101,228,74,229,4,91,146,250,102,134,15, -232,218,24,109,225,24,210,65,26,79,144,199,117,90,105,193,65,10,227,73,179,152, -212,199,176,39,247,103,226,182,214,30,6,74,232,86,235,86,37,76,53,49,94,51,85, -26,111,128,43,43,173,151,99,114,72,126,192,30,28,184,34,52,113,23,95,133,181, -46,84,205,54,57,15,252,202,30,6,224,21,6,85,161,236,209,1,152,66,43,103,13,168, -28,186,245,80,73,139,46,158,234,100,191,192,100,15,127,181,15,7,234,88,132,107, -168,91,197,84,178,135,249,246,208,72,41,239,178,137,104,38,90,44,121,169,185, -209,78,94,224,42,110,156,36,12,191,205,199,81,10,229,250,192,122,251,24,128,75, -20,168,246,210,192,116,82,233,231,2,197,108,229,45,254,199,32,95,208,69,186, -174,84,27,184,114,116,158,34,182,50,200,5,14,82,69,55,177,36,18,195,5,254,66, -131,40,237,254,150,175,173,16,102,61,70,223,141,223,61,60,205,60,170,217,171,59, -68,121,128,101,204,39,51,168,76,124,92,163,148,247,57,167,11,3,159,224,65,142, -179,67,60,250,132,39,173,145,101,243,17,211,92,22,51,131,239,50,198,100,172,143, -58,42,248,148,35,86,74,105,115,76,177,240,54,219,114,6,67,254,76,163,160,184, -148,103,149,42,67,192,118,94,121,94,113,41,86,214,227,97,101,120,242,129,237, -108,55,41,53,41,180,227,209,86,39,254,77,175,137,252,143,234,207,237,60,180,155, -150,174,118,241,78,184,50,178,53,148,233,72,56,199,90,238,165,128,58,249,113, -173,137,91,237,215,135,120,87,121,134,201,172,162,82,203,62,39,229,115,38,251, -91,10,219,232,196,135,143,46,138,89,228,143,44,82,40,164,89,168,65,177,65,133, -62,148,149,164,133,77,254,210,121,52,249,124,68,7,62,124,244,240,175,145,100, -99,183,90,41,112,145,11,148,209,168,195,161,108,42,212,56,99,167,156,157,1,112, -64,40,118,47,51,185,96,72,168,231,18,67,25,151,71,86,21,186,181,191,85,234,249, -192,244,249,101,90,85,6,26,241,233,180,179,95,6,225,6,195,218,70,118,221,153, -178,74,112,132,234,21,65,129,86,144,94,57,51,105,212,157,144,223,209,186,80,240, -230,167,178,75,103,153,62,249,232,168,206,206,79,218,251,207,220,57,230,13,117, -78,83,204,120,198,18,7,12,208,73,7,21,98,86,119,228,50,224,79,64,78,115,122,56, -93,71,174,249,12,181,139,145,203,64,57,110,109,113,182,207,56,103,144,114,34, -184,29,10,25,40,124,74,68,183,76,202,131,254,252,125,210,238,159,191,163,108, -102,160,155,127,210,133,147,49,68,161,224,192,1,40,120,241,208,73,37,239,176, -150,102,123,63,248,127,27,97,180,206,27,14,172,151,0,0,0,0,73,69,78,68,174,66, -96,130}; -static Fl_Image *image_general_64() { - static Fl_Image *image = NULL; - if (!image) - image = new Fl_PNG_Image("general_64.png", idata_general_64, 2162); - return image; -} - -static void cb_(Fl_Group* o, void* v) { - propagate_load(o, v); -} - -Fl_Scheme_Choice *scheme_choice=(Fl_Scheme_Choice *)0; - -Fl_Check_Button *tooltips_button=(Fl_Check_Button *)0; - -static void cb_tooltips_button(Fl_Check_Button*, void*) { - Fl_Tooltip::enable(tooltips_button->value()); - fluid_prefs.set("show_tooltips", tooltips_button->value()); -} - -Fl_Check_Button *completion_button=(Fl_Check_Button *)0; - -static void cb_completion_button(Fl_Check_Button*, void*) { - fluid_prefs.set("show_completion_dialogs", completion_button->value()); -} - -Fl_Check_Button *openlast_button=(Fl_Check_Button *)0; - -static void cb_openlast_button(Fl_Check_Button*, void*) { - fluid_prefs.set("open_previous_file", openlast_button->value()); -} - -Fl_Check_Button *prevpos_button=(Fl_Check_Button *)0; - -static void cb_prevpos_button(Fl_Check_Button*, void*) { - fluid_prefs.set("prev_window_pos", prevpos_button->value()); -} - -Fl_Check_Button *show_comments_button=(Fl_Check_Button *)0; - -static void cb_show_comments_button(Fl_Check_Button*, void*) { - show_comments = show_comments_button->value(); - fluid_prefs.set("show_comments", show_comments); - redraw_browser(); -} - -static void cb_1(Fl_Group* o, void* v) { - propagate_load(o, v); -} - -Fl_Spinner *recent_spinner=(Fl_Spinner *)0; - -static void cb_recent_spinner(Fl_Spinner*, void*) { - fluid_prefs.set("recent_files", recent_spinner->value()); - load_history(); -} - -Fl_Check_Button *use_external_editor_button=(Fl_Check_Button *)0; - -static void cb_use_external_editor_button(Fl_Check_Button*, void*) { - G_use_external_editor = use_external_editor_button->value(); - fluid_prefs.set("use_external_editor", G_use_external_editor); - redraw_browser(); -} - -Fl_Input *editor_command_input=(Fl_Input *)0; - -static void cb_editor_command_input(Fl_Input*, void*) { - strncpy(G_external_editor_command, editor_command_input->value(), sizeof(G_external_editor_command)-1); - G_external_editor_command[sizeof(G_external_editor_command)-1] = 0; - fluid_prefs.set("external_editor_command", G_external_editor_command); - redraw_browser(); -} - -Fl_Check_Button *guides_button=(Fl_Check_Button *)0; - -Fl_Check_Button *restricted_button=(Fl_Check_Button *)0; - -Fl_Check_Button *ghosted_outline_button=(Fl_Check_Button *)0; - -Fl_Group *w_settings_project_tab=(Fl_Group *)0; - -static void cb_w_settings_project_tab(Fl_Group* o, void* v) { - propagate_load(o, v); -} - -static const unsigned char idata_document_64[] = -{137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,96,0,0,0,64,8,4,0,0,0, -79,61,186,133,0,0,3,102,73,68,65,84,104,222,237,154,223,75,83,81,28,192,63,155, -115,58,171,153,191,42,140,2,75,115,41,69,20,73,61,244,3,67,176,68,122,168,8,234, -65,123,90,32,81,68,65,47,65,100,208,15,95,194,8,130,94,140,30,250,3,210,94,6, -65,15,162,15,21,250,160,145,62,68,141,182,39,205,205,156,211,181,173,135,221, -93,231,118,167,251,113,239,238,153,236,156,135,125,57,231,220,123,191,159,123, -239,247,215,221,129,244,90,39,223,9,16,206,178,7,113,97,71,135,102,199,151,181, -242,209,30,224,113,174,213,111,194,163,154,250,145,231,240,44,183,0,3,170,170, -31,65,232,203,86,41,83,26,107,143,70,133,50,74,51,184,148,31,95,252,144,145, -219,192,221,220,0,24,87,180,190,65,27,134,52,47,20,198,193,83,165,179,102,137, -144,14,128,49,42,214,178,63,3,128,9,89,238,98,150,247,42,33,152,244,112,102,167, -57,72,136,33,85,16,140,122,0,24,57,68,47,29,171,95,164,190,60,2,0,131,106,8,58, -1,168,135,160,27,128,90,8,58,2,168,131,160,43,64,18,132,222,60,2,136,32,60, -162,51,86,163,59,156,20,28,96,17,111,76,159,103,15,55,87,242,20,40,165,91,192, -64,102,160,88,150,223,50,26,119,23,131,120,98,7,14,11,25,137,183,203,210,48, -195,107,47,45,199,196,63,225,94,33,27,87,52,137,234,57,107,21,116,113,74,245, -179,230,52,153,107,230,33,67,56,112,179,156,90,189,32,26,128,145,6,174,115,137, -5,130,169,214,11,226,165,211,165,236,92,183,94,200,171,64,150,71,70,92,0,208, -206,6,194,120,249,131,159,176,194,156,25,43,149,20,137,12,224,103,132,65,62,51, -163,56,187,9,27,103,105,163,74,84,128,101,6,121,192,108,210,249,89,156,56,232, -193,78,181,152,54,48,65,223,26,234,71,219,75,62,42,248,126,1,0,130,124,193,153, -210,202,15,41,96,234,240,10,45,241,83,150,79,176,149,80,220,221,9,48,142,27,128, -105,188,212,136,7,16,98,94,206,128,175,81,159,224,135,22,232,151,0,60,138,249, -143,80,201,156,133,50,133,81,237,28,104,33,18,111,160,72,28,27,147,87,215,193, -225,184,185,176,52,46,12,128,129,18,73,242,240,137,169,4,128,69,126,201,241,218, -193,164,12,80,66,29,123,177,232,15,96,166,86,150,95,173,185,210,23,87,174,236, -226,42,151,99,10,125,157,108,160,152,230,12,143,116,242,132,55,171,63,166,232, -99,196,45,220,202,248,216,231,140,233,15,96,165,155,251,236,200,240,232,49,2, -250,123,161,109,116,211,138,147,57,217,68,127,243,66,250,194,112,128,14,44,9, -166,237,102,0,63,0,46,150,98,190,216,233,230,70,45,52,210,24,227,36,39,121,45,1, -236,166,157,205,9,0,211,188,147,0,150,196,138,3,134,184,223,168,172,166,223,47, -164,18,27,60,149,72,44,120,22,20,94,180,69,209,1,204,148,75,245,215,56,253,20, -39,148,57,115,114,0,179,102,157,110,107,2,96,165,129,31,0,184,165,114,38,89, -171,195,44,162,13,84,210,158,210,186,58,90,178,126,2,154,0,20,209,70,79,10,152, -247,216,39,170,17,87,97,167,158,65,166,20,140,56,50,127,140,243,28,201,50,10, -107,234,133,170,185,64,43,94,197,82,222,128,133,10,182,168,18,224,52,116,163,38, -106,52,249,144,82,136,196,5,0,157,82,137,208,74,64,117,241,77,245,12,51,140,75, -241,90,169,102,192,169,180,9,154,34,66,102,219,46,215,107,49,127,179,142,114,92, -11,47,52,18,5,240,101,244,143,110,90,87,210,164,217,152,83,125,239,174,82,159, -193,166,213,157,233,226,175,230,234,123,185,168,229,195,61,199,184,10,219,239, -147,239,104,255,202,153,244,20,250,15,100,60,232,29,230,9,101,148,0,0,0,0,73,69, -78,68,174,66,96,130}; -static Fl_Image *image_document_64() { - static Fl_Image *image = NULL; - if (!image) - image = new Fl_PNG_Image("document_64.png", idata_document_64, 927); - return image; -} - -Fl_Input *header_file_input=(Fl_Input *)0; - -static void cb_header_file_input(Fl_Input* o, void* v) { - if (v == LOAD) { - o->value(g_project.header_file_name.c_str()); - } else { - if (strcmp(g_project.header_file_name.c_str(), o->value())) { - g_project.header_file_name = o->value(); - set_modflag(1); - } - } -} - -Fl_Input *code_file_input=(Fl_Input *)0; - -static void cb_code_file_input(Fl_Input* o, void* v) { - if (v == LOAD) { - o->value(g_project.code_file_name.c_str()); - } else { - if (strcmp(g_project.code_file_name.c_str(), o->value())) { - g_project.code_file_name = o->value(); - set_modflag(1); - } - } -} - -Fl_Check_Button *include_H_from_C_button=(Fl_Check_Button *)0; - -static void cb_include_H_from_C_button(Fl_Check_Button* o, void* v) { - if (v == LOAD) { - o->value(g_project.include_H_from_C); - } else { - if (g_project.include_H_from_C != o->value()) { - set_modflag(1); - g_project.include_H_from_C = o->value(); - } - } -} - -Fl_Check_Button *use_FL_COMMAND_button=(Fl_Check_Button *)0; - -static void cb_use_FL_COMMAND_button(Fl_Check_Button* o, void* v) { - if (v == LOAD) { - o->value(g_project.use_FL_COMMAND); - } else { - if (g_project.use_FL_COMMAND != o->value()) { - set_modflag(1); - g_project.use_FL_COMMAND = o->value(); - } - } -} - -Fl_Check_Button *utf8_in_src_button=(Fl_Check_Button *)0; - -static void cb_utf8_in_src_button(Fl_Check_Button* o, void* v) { - if (v == LOAD) { - o->value(g_project.utf8_in_src); - } else { - if (g_project.utf8_in_src != o->value()) { - set_modflag(1); - g_project.utf8_in_src = o->value(); - } - } -} - -Fl_Check_Button *avoid_early_includes_button=(Fl_Check_Button *)0; - -static void cb_avoid_early_includes_button(Fl_Check_Button* o, void* v) { - if (v == LOAD) { - o->value(g_project.avoid_early_includes); - } else { - if (g_project.avoid_early_includes != o->value()) { - set_modflag(1); - g_project.avoid_early_includes = o->value(); - } - } -} - -Fl_Check_Button *w_proj_mergeback=(Fl_Check_Button *)0; - -static void cb_w_proj_mergeback(Fl_Check_Button* o, void* v) { - if (v == LOAD) { - o->value(g_project.write_mergeback_data); - } else { - if (g_project.write_mergeback_data != o->value()) { - set_modflag(1); - g_project.write_mergeback_data = o->value(); - } - } -} - -Fl_Group *w_settings_layout_tab=(Fl_Group *)0; - -static void cb_w_settings_layout_tab(Fl_Group* o, void* v) { - propagate_load(o, v); -} - -static const unsigned char idata_layout_64[] = -{137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,96,0,0,0,64,8,4,0,0,0, -79,61,186,133,0,0,1,168,73,68,65,84,104,222,237,154,49,75,3,49,20,199,127,119, -84,168,109,23,197,201,209,69,116,16,197,130,159,160,123,151,226,226,42,14,98, -29,244,35,184,56,59,250,77,244,27,88,113,171,90,144,66,41,116,180,72,75,45,120, -92,92,122,109,167,144,75,155,35,202,123,89,18,146,123,252,127,112,239,46,47, -121,144,206,78,232,16,161,28,181,136,14,53,28,218,21,99,103,226,147,246,205,185, -43,249,135,12,157,203,87,40,6,28,152,139,10,83,0,92,83,36,11,43,113,106,190,56, -151,194,241,94,210,41,144,215,46,28,51,154,246,215,141,221,207,61,85,118,1,16, -178,154,116,47,168,16,104,22,126,112,57,17,83,161,78,17,101,224,94,241,200,109, -50,216,32,36,94,62,192,84,243,38,59,26,0,136,201,79,0,214,216,166,100,228,94, -209,156,13,2,115,128,144,63,110,2,32,0,2,32,0,2,176,144,229,220,186,143,24,26, -174,84,140,125,4,104,112,195,138,209,86,2,218,62,2,116,233,74,12,72,16,47,102, -86,249,128,63,0,150,249,128,63,0,150,249,128,4,177,0,8,128,0,8,128,0,8,128,0,8, -128,0,8,128,0,8,128,0,184,55,171,156,184,199,155,246,146,175,109,121,76,152,25, -192,29,247,218,121,187,3,146,12,1,70,25,10,148,32,254,151,65,92,102,75,51,27, -208,231,193,111,128,26,85,205,87,40,224,157,103,62,125,6,200,83,210,150,26,20, -36,6,4,64,0,4,64,0,4,192,187,31,89,60,187,171,51,207,7,250,180,140,47,249,122, -243,131,216,84,86,144,2,182,201,110,242,167,117,92,118,249,196,145,139,173,196, -75,2,144,38,31,176,218,19,53,220,188,110,251,12,50,41,61,254,154,149,216,46, -219,234,153,20,127,159,185,12,250,99,90,14,203,239,127,120,165,154,78,208,47, -215,15,118,242,56,45,94,1,0,0,0,0,73,69,78,68,174,66,96,130}; -static Fl_Image *image_layout_64() { - static Fl_Image *image = NULL; - if (!image) - image = new Fl_PNG_Image("layout_64.png", idata_layout_64, 481); - return image; -} - -Fl_Choice *layout_choice=(Fl_Choice *)0; - -static void cb_layout_choice(Fl_Choice* o, void* v) { - if (v == LOAD) { - o->value(g_layout_list.current_suite()); - } else { - int index = o->value(); - g_layout_list.current_suite(index); - g_layout_list.update_dialogs(); - } -} - -Fl_Menu_Item menu_layout_choice[] = { - {"FLTK", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 14, 0}, - {"Grid", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 14, 0}, - {0,0,0,0,0,0,0,0,0} -}; - -static void cb_2(Fl_Button*, void* v) { - // Clone the current layout suite - - if (v == LOAD) return; - - Fl_String old_name = "Copy of "; - old_name.append(g_layout_list[g_layout_list.current_suite()].name_); - const char *new_name = fl_input("Enter a name for the new layout:", old_name.c_str()); - if (new_name == NULL) - return; - - g_layout_list.add(new_name); - g_layout_list.update_dialogs(); -} - -Fl_Menu_Button *w_layout_menu=(Fl_Menu_Button *)0; - -static void cb_w_layout_menu(Fl_Menu_Button*, void* v) { - if (v == LOAD) { - Fd_Layout_Suite &suite = g_layout_list[g_layout_list.current_suite()]; - if (suite.storage_ == FD_STORE_INTERNAL) { - w_layout_menu_rename->deactivate(); - for (int i=1; i<4; i++) w_layout_menu_storage[i]->deactivate(); - w_layout_menu_delete->deactivate(); - } else { - w_layout_menu_rename->activate(); - for (int i=1; i<4; i++) w_layout_menu_storage[i]->activate(); - w_layout_menu_delete->activate(); - } - w_layout_menu_storage[suite.storage_]->setonly(); - } -} - -static void cb_w_layout_menu_rename(Fl_Menu_*, void*) { - // Rename the current layout suite - - Fl_String old_name = g_layout_list[g_layout_list.current_suite()].name_; - const char *new_name = fl_input("Enter a new name for the layout:", old_name.c_str()); - if (new_name == NULL) - return; - - g_layout_list.rename(new_name); - g_layout_list.update_dialogs(); -} - -static void cb_w_layout_menu_storage(Fl_Menu_*, void*) { - Fd_Layout_Suite &suite = g_layout_list[g_layout_list.current_suite()]; - suite.storage(FD_STORE_INTERNAL); - g_layout_list.update_dialogs(); -} - -static void cb_w_layout_menu_storage1(Fl_Menu_*, void*) { - Fd_Layout_Suite &suite = g_layout_list[g_layout_list.current_suite()]; - suite.storage(FD_STORE_USER); - g_layout_list.update_dialogs(); -} - -static void cb_w_layout_menu_storage2(Fl_Menu_*, void*) { - Fd_Layout_Suite &suite = g_layout_list[g_layout_list.current_suite()]; - suite.storage(FD_STORE_PROJECT); - g_layout_list.update_dialogs(); -} - -static void cb_w_layout_menu_storage3(Fl_Menu_*, void*) { - Fd_Layout_Suite &suite = g_layout_list[g_layout_list.current_suite()]; - suite.storage(FD_STORE_FILE); - g_layout_list.update_dialogs(); -} - -static void cb_w_layout_menu_load(Fl_Menu_*, void*) { - // Give the user a file chooser and load that file - Fl_Native_File_Chooser fnfc; - fnfc.title("Load Layout Settings:"); - fnfc.type(Fl_Native_File_Chooser::BROWSE_FILE); - fnfc.options(Fl_Native_File_Chooser::USE_FILTER_EXT); - fnfc.filter("FLUID Layouts\t*.fll\n"); - if (fnfc.show() != 0) return; - const char *new_filename = fnfc.filename(); - if (!new_filename) return; - g_layout_list.load(new_filename); - //g_layout_list.current_suite(n); - g_layout_list.update_dialogs(); -} - -static void cb_w_layout_menu_save(Fl_Menu_*, void*) { - // Give the user a file chooser with a suggested name - Fl_Native_File_Chooser fnfc; - fnfc.title("Save Layout Settings:"); - fnfc.type(Fl_Native_File_Chooser::BROWSE_SAVE_FILE); - fnfc.options(Fl_Native_File_Chooser::SAVEAS_CONFIRM | Fl_Native_File_Chooser::USE_FILTER_EXT); - fnfc.filter("FLUID Layouts\t*.fll\n"); - Fl_String filename = g_layout_list.filename_; - fnfc.directory(fl_filename_path(filename).c_str()); - fnfc.preset_file(fl_filename_name(filename).c_str()); - if (fnfc.show() != 0) return; - const char *new_filename = fnfc.filename(); - if (!new_filename) return; - g_layout_list.filename_ = new_filename; - g_layout_list.save(new_filename); -} - -static void cb_w_layout_menu_delete(Fl_Menu_*, void*) { - // remove the current suite - - g_layout_list.remove(g_layout_list.current_suite()); - g_layout_list.update_dialogs(); -} - -Fl_Menu_Item menu_w_layout_menu[] = { - {"Rename...", 0, (Fl_Callback*)cb_w_layout_menu_rename, 0, 128, (uchar)FL_NORMAL_LABEL, 0, 14, 0}, - {"@fd_beaker FLUID Built-In", 0, (Fl_Callback*)cb_w_layout_menu_storage, 0, 9, (uchar)FL_NORMAL_LABEL, 0, 14, 0}, - {"@fd_user User Preference", 0, (Fl_Callback*)cb_w_layout_menu_storage1, 0, 8, (uchar)FL_NORMAL_LABEL, 0, 14, 0}, - {"@fd_project Store in .fl Project File", 0, (Fl_Callback*)cb_w_layout_menu_storage2, 0, 8, (uchar)FL_NORMAL_LABEL, 0, 14, 0}, - {"@fd_file Store in External File", 0, (Fl_Callback*)cb_w_layout_menu_storage3, 0, 136, (uchar)FL_NORMAL_LABEL, 0, 14, 0}, - {"Load...", 0, (Fl_Callback*)cb_w_layout_menu_load, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 14, 0}, - {"Save...", 0, (Fl_Callback*)cb_w_layout_menu_save, 0, 128, (uchar)FL_NORMAL_LABEL, 0, 14, 0}, - {"Delete", 0, (Fl_Callback*)cb_w_layout_menu_delete, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 14, 0}, - {0,0,0,0,0,0,0,0,0} -}; - -Fl_Button *preset_choice[3]={(Fl_Button *)0}; - -static void cb_Left(Fl_Value_Input* o, void* v) { - if (v == LOAD) { - o->value((double)layout->left_window_margin); - } else { - layout->left_window_margin = (int)o->value(); - } -} - -static void cb_Top(Fl_Value_Input* o, void* v) { - if (v == LOAD) { - o->value((double)layout->top_window_margin); - } else { - layout->top_window_margin = (int)o->value(); - } -} - -static void cb_Right(Fl_Value_Input* o, void* v) { - if (v == LOAD) { - o->value((double)layout->right_window_margin); - } else { - layout->right_window_margin = (int)o->value(); - } -} - -static void cb_Bottom(Fl_Value_Input* o, void* v) { - if (v == LOAD) { - o->value((double)layout->bottom_window_margin); - } else { - layout->bottom_window_margin = (int)o->value(); - } -} - -static void cb_Horizontal(Fl_Value_Input* o, void* v) { - if (v == LOAD) { - o->value((double)layout->window_grid_x); - } else { - layout->window_grid_x = (int)o->value(); - } -} - -static void cb_Vertical(Fl_Value_Input* o, void* v) { - if (v == LOAD) { - o->value((double)layout->window_grid_y); - } else { - layout->window_grid_y = (int)o->value(); - } -} - -static void cb_Left1(Fl_Value_Input* o, void* v) { - if (v == LOAD) { - o->value((double)layout->left_group_margin); - } else { - layout->left_group_margin = (int)o->value(); - } -} - -static void cb_Top1(Fl_Value_Input* o, void* v) { - if (v == LOAD) { - o->value((double)layout->top_group_margin); - } else { - layout->top_group_margin = (int)o->value(); - } -} - -static void cb_Right1(Fl_Value_Input* o, void* v) { - if (v == LOAD) { - o->value((double)layout->right_group_margin); - } else { - layout->right_group_margin = (int)o->value(); - } -} - -static void cb_Bottom1(Fl_Value_Input* o, void* v) { - if (v == LOAD) { - o->value((double)layout->bottom_group_margin); - } else { - layout->bottom_group_margin = (int)o->value(); - } -} - -static void cb_Horizontal1(Fl_Value_Input* o, void* v) { - if (v == LOAD) { - o->value((double)layout->group_grid_x); - } else { - layout->group_grid_x = (int)o->value(); - } -} - -static void cb_Vertical1(Fl_Value_Input* o, void* v) { - if (v == LOAD) { - o->value((double)layout->group_grid_y); - } else { - layout->group_grid_y = (int)o->value(); - } -} - -static void cb_Top2(Fl_Value_Input* o, void* v) { - if (v == LOAD) { - o->value((double)layout->top_tabs_margin); - } else { - layout->top_tabs_margin = (int)o->value(); - } -} - -static void cb_Bottom2(Fl_Value_Input* o, void* v) { - if (v == LOAD) { - o->value((double)layout->bottom_tabs_margin); - } else { - layout->bottom_tabs_margin = (int)o->value(); - } -} - -static void cb_Minimum(Fl_Value_Input* o, void* v) { - if (v == LOAD) { - o->value((double)layout->widget_min_w); - } else { - layout->widget_min_w = (int)o->value(); - } -} - -static void cb_Increment(Fl_Value_Input* o, void* v) { - if (v == LOAD) { - o->value((double)layout->widget_inc_w); - } else { - layout->widget_inc_w = (int)o->value(); - } -} - -static void cb_Gap(Fl_Value_Input* o, void* v) { - if (v == LOAD) { - o->value((double)layout->widget_gap_x); - } else { - layout->widget_gap_x = (int)o->value(); - } -} - -static void cb_3(Fl_Value_Input* o, void* v) { - if (v == LOAD) { - o->value((double)layout->widget_min_h); - } else { - layout->widget_min_h = (int)o->value(); - } -} - -static void cb_4(Fl_Value_Input* o, void* v) { - if (v == LOAD) { - o->value((double)layout->widget_inc_h); - } else { - layout->widget_inc_h = (int)o->value(); - } -} - -static void cb_5(Fl_Value_Input* o, void* v) { - if (v == LOAD) { - o->value((double)layout->widget_gap_y); - } else { - layout->widget_gap_y = (int)o->value(); - } -} - -static void cb_6(Fl_Choice* o, void* v) { - if (v == LOAD) { - o->value(layout->labelfont+1); - } else { - layout->labelfont = (int)o->value()-1; - } -} - -static void cb_7(Fl_Value_Input* o, void* v) { - if (v == LOAD) { - o->value(layout->labelsize); - } else { - layout->labelsize = (int)o->value(); - } -} - -static void cb_8(Fl_Choice* o, void* v) { - if (v == LOAD) { - o->value(layout->textfont+1); - } else { - layout->textfont = (int)o->value()-1; - } -} - -static void cb_9(Fl_Value_Input* o, void* v) { - if (v == LOAD) { - o->value(layout->textsize); - } else { - layout->textsize = (int)o->value(); - } -} - -Fl_Group *w_settings_shell_tab=(Fl_Group *)0; - -static const unsigned char idata_shell_64[] = -{137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,96,0,0,0,64,8,4,0,0,0, -79,61,186,133,0,0,2,233,73,68,65,84,104,222,237,154,207,107,19,65,20,199,63, -155,196,70,235,161,154,149,104,165,148,170,104,127,252,3,30,5,43,69,130,55,15, -222,234,77,65,240,34,182,1,127,28,2,189,181,9,120,16,244,82,240,32,210,179,162, -69,241,170,30,196,91,107,171,208,218,94,26,161,77,218,131,182,49,38,245,80,77, -118,67,205,254,152,113,102,87,242,114,217,101,194,240,253,236,188,247,102,230, -205,128,179,181,145,97,141,10,219,10,127,21,86,201,208,134,4,139,49,165,88,124, -29,98,146,152,56,64,70,147,252,29,132,180,147,60,195,17,96,141,4,250,236,43,71, -68,1,42,68,118,30,246,18,87,164,122,163,254,88,37,42,10,176,253,71,126,134,30, -170,10,228,71,248,98,245,28,195,41,68,93,90,156,110,78,40,26,129,170,39,220,144, -91,11,64,183,185,142,129,18,203,68,20,5,241,178,135,127,187,206,66,245,52,106, -73,114,116,252,19,132,18,91,174,21,122,0,208,100,70,43,136,255,147,32,134,33, -14,42,241,39,131,34,47,229,3,36,184,78,159,34,128,57,222,83,144,63,2,237,236, -87,228,22,237,173,153,184,5,16,200,44,100,223,114,124,96,157,227,12,176,39,140, -0,155,60,102,12,56,198,109,206,201,41,29,168,117,161,60,83,0,44,114,135,87, -252,8,31,128,81,27,184,60,119,53,35,248,2,56,204,69,203,104,232,69,240,5,176, -143,75,140,4,4,193,103,26,53,25,14,8,130,239,121,32,40,8,2,19,89,48,16,132,102, -226,32,32,8,46,37,244,35,8,175,133,116,35,72,88,204,153,12,115,211,134,240,154, -114,184,86,163,38,151,109,163,48,198,76,216,150,211,118,71,90,100,154,205,176, -237,7,76,134,45,69,241,55,172,135,111,67,99,114,186,182,155,45,11,22,33,11,58,0, -62,241,136,239,181,26,134,170,141,78,76,158,252,44,79,107,111,131,202,14,214, -36,1,204,147,179,200,79,49,40,239,203,168,0,152,39,203,179,218,219,16,55,232, -14,250,166,222,106,115,228,108,242,71,233,119,81,244,14,12,192,28,19,60,183, -200,79,211,167,80,190,112,22,250,104,147,127,94,154,252,132,154,17,152,37,103, -147,63,74,175,210,175,47,8,48,203,4,211,154,229,11,0,204,144,109,42,191,76,201, -67,111,113,223,19,95,204,175,252,113,203,33,68,138,17,78,217,228,127,230,5,75, -84,92,246,22,165,135,148,207,123,0,190,0,10,76,54,200,239,109,104,127,192,19, -143,125,46,113,203,215,236,237,43,11,21,121,215,68,190,189,221,173,189,165,168, -46,141,182,211,245,251,233,194,46,242,173,237,238,173,203,211,185,140,160,11, -37,185,194,79,22,57,203,85,78,254,181,125,222,67,143,253,92,35,169,14,32,202, -25,6,248,198,33,14,52,105,223,112,125,36,104,208,65,210,233,102,147,220,44,20, -163,211,177,189,51,108,59,50,61,214,2,208,109,174,99,160,192,130,178,251,66,11, -214,235,54,142,9,192,201,42,205,71,41,33,161,178,208,216,199,86,173,56,32,227, -218,229,42,166,70,15,89,225,168,104,12,220,87,226,55,187,91,149,123,50,162,100, -82,219,229,239,135,114,138,14,109,164,201,83,85,44,126,133,81,55,103,232,191,0, -145,21,211,195,226,88,204,195,0,0,0,0,73,69,78,68,174,66,96,130}; -static Fl_Image *image_shell_64() { - static Fl_Image *image = NULL; - if (!image) - image = new Fl_PNG_Image("shell_64.png", idata_shell_64, 802); - return image; -} - -Fl_Browser *w_settings_shell_list=(Fl_Browser *)0; - -static void cb_w_settings_shell_list(Fl_Browser* o, void* v) { - if (v == LOAD) { - // load from g_shell_config - if (g_shell_config) { - o->clear(); - w_settings_shell_list_selected = 0; - for (int i=0; ilist_size; i++) { - Fd_Shell_Command *cmd = g_shell_config->list[i]; - o->add(cmd->name.c_str()); - if (cmd->storage == FD_STORE_USER) - o->icon(i+1, w_settings_shell_fd_user->image()); - else if (cmd->storage == FD_STORE_PROJECT) - o->icon(i+1, w_settings_shell_fd_project->image()); - } - } - } else { - // int prev_selected = w_settings_shell_list_selected; - w_settings_shell_list_selected = 0; - int selected = w_settings_shell_list->value(); - if (selected) { - if (w_settings_shell_list->selected(selected)) - w_settings_shell_list_selected = selected; - } - w_settings_shell_cmd->do_callback(w_settings_shell_cmd, LOAD); - w_settings_shell_toolbox->do_callback(w_settings_shell_toolbox, LOAD); - } -} - -Fl_Group *w_settings_shell_toolbox=(Fl_Group *)0; - -static void cb_w_settings_shell_toolbox(Fl_Group* o, void* v) { - if (v==LOAD) { - propagate_load(o, v); - } -} - -static void cb_a(Fl_Button*, void* v) { - if (v != LOAD) { - int selected = w_settings_shell_list_selected; - Fd_Shell_Command *cmd = new Fd_Shell_Command("new shell command"); - g_shell_config->insert(selected, cmd); - w_settings_shell_list->insert(selected+1, cmd->name.c_str()); - w_settings_shell_list->deselect(); - w_settings_shell_list->value(selected+1); - if (cmd->storage == FD_STORE_USER) - w_settings_shell_list->icon(selected+1, w_settings_shell_fd_user->image()); - else if (cmd->storage == FD_STORE_PROJECT) - w_settings_shell_list->icon(selected+1, w_settings_shell_fd_project->image()); - w_settings_shell_list->do_callback(); - w_settings_shell_cmd->do_callback(w_settings_shell_cmd, LOAD); - w_settings_shell_toolbox->do_callback(w_settings_shell_toolbox, LOAD); - g_shell_config->rebuild_shell_menu(); - } -} - -Fl_Button *w_settings_shell_dup=(Fl_Button *)0; - -static void cb_w_settings_shell_dup(Fl_Button* o, void* v) { - int selected = w_settings_shell_list_selected; - if (v==LOAD) { - if (selected) { - o->activate(); - } else { - o->deactivate(); - } - } else { - if (!selected) return; - Fd_Shell_Command *cmd = new Fd_Shell_Command(g_shell_config->list[selected-1]); - g_shell_config->insert(selected, cmd); - w_settings_shell_list->insert(selected+1, cmd->name.c_str()); - w_settings_shell_list->deselect(); - w_settings_shell_list->deselect(); - w_settings_shell_list->value(selected+1); - if (cmd->storage == FD_STORE_USER) - w_settings_shell_list->icon(selected+1, w_settings_shell_fd_user->image()); - else if (cmd->storage == FD_STORE_PROJECT) - w_settings_shell_list->icon(selected+1, w_settings_shell_fd_project->image()); - w_settings_shell_list->do_callback(); - w_settings_shell_cmd->do_callback(w_settings_shell_cmd, LOAD); - w_settings_shell_toolbox->do_callback(w_settings_shell_toolbox, LOAD); - g_shell_config->rebuild_shell_menu(); - } -} - -Fl_Button *w_settings_shell_remove=(Fl_Button *)0; - -static void cb_w_settings_shell_remove(Fl_Button* o, void* v) { - int selected = w_settings_shell_list_selected; - if (v==LOAD) { - if (selected) { - o->activate(); - } else { - o->deactivate(); - } - } else { - if (!selected) return; - int ret = fl_choice("Delete the shell command\n\"%s\"?\n\nThis can not be undone.", - "Delete", "Cancel", NULL, g_shell_config->list[selected-1]->name.c_str()); - if (ret==1) return; - g_shell_config->remove(selected-1); - w_settings_shell_list->remove(selected); - if (selected <= w_settings_shell_list->size()) - w_settings_shell_list->value(selected); - else - w_settings_shell_list->value(0); - w_settings_shell_list->do_callback(); - w_settings_shell_cmd->do_callback(w_settings_shell_cmd, LOAD); - w_settings_shell_toolbox->do_callback(w_settings_shell_toolbox, LOAD); - g_shell_config->rebuild_shell_menu(); - } -} - -Fl_Menu_Button *w_settings_shell_menu=(Fl_Menu_Button *)0; - -static void cb_Import(Fl_Menu_*, void* v) { - if (v != LOAD) - Fd_Shell_Command_List::import_from_file(); -} - -static void cb_Export(Fl_Menu_*, void* v) { - if (v != LOAD) - Fd_Shell_Command_List::export_selected(); -} - -Fl_Menu_Item menu_w_settings_shell_menu[] = { - {"Import...", 0, (Fl_Callback*)cb_Import, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, - {"Export selected...", 0, (Fl_Callback*)cb_Export, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, - {"Example Scripts:", 0, 0, 0, 17, (uchar)FL_NORMAL_LABEL, 1, 10, 0}, - {"Compile with fltk-config", 0, 0, 0, 16, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, - {"Build and run", 0, 0, 0, 16, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, - {"Build with Xcode on macOS", 0, 0, 0, 16, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, - {"Build with CMake", 0, 0, 0, 16, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, - {0,0,0,0,0,0,0,0,0} -}; - -static void cb_T(Fl_Button*, void* v) { - if (v!=LOAD) show_terminal_window(); -} - -Fl_Button *w_settings_shell_play=(Fl_Button *)0; - -static void cb_w_settings_shell_play(Fl_Button* o, void* v) { - int selected = w_settings_shell_list_selected; - if (v==LOAD) { - if (selected) { - o->activate(); - } else { - o->deactivate(); - } - } else { - if (!selected) return; - Fd_Shell_Command *cmd = g_shell_config->list[selected-1]; - cmd->run(); - } -} - -Fl_Group *w_settings_shell_cmd=(Fl_Group *)0; - -static void cb_w_settings_shell_cmd(Fl_Group* o, void* v) { - if (v==LOAD) { - int selected = w_settings_shell_list_selected; - if (selected) { - o->activate(); - } else { - o->deactivate(); - } - propagate_load(o, v); - } -} - -static void cb_Name(Fl_Input* o, void* v) { - int selected = w_settings_shell_list_selected; - if (v == LOAD) { - if (selected) { - o->value(g_shell_config->list[selected-1]->name.c_str()); - } else { - o->value(""); - } - } else { - if (selected) { - Fd_Shell_Command *cmd = g_shell_config->list[selected-1]; - cmd->name = o->value(); - w_settings_shell_list->text(selected, o->value()); - if (cmd->storage == FD_STORE_PROJECT) set_modflag(1); - } - } -} - -static void cb_Menu(Fl_Input* o, void* v) { - int selected = w_settings_shell_list_selected; - if (v == LOAD) { - if (selected) { - o->value(g_shell_config->list[selected-1]->label.c_str()); - } else { - o->value(""); - } - } else { - if (selected) { - Fd_Shell_Command *cmd = g_shell_config->list[selected-1]; - cmd->label = o->value(); - cmd->update_shell_menu(); - if (cmd->storage == FD_STORE_PROJECT) set_modflag(1); - } - } -} - -static void cb_b(Fl_Group* o, void* v) { - propagate_load(o, v); -} - -static void cb_Shortcut(Fl_Shortcut_Button* o, void* v) { - int selected = w_settings_shell_list_selected; - if (v == LOAD) { - if (selected) { - o->value(g_shell_config->list[selected-1]->shortcut); - //o->default_value(o->value()); - } else { - o->value(0); - } - } else { - if (selected) { - Fd_Shell_Command *cmd = g_shell_config->list[selected-1]; - cmd->shortcut = o->value(); - cmd->update_shell_menu(); - if (cmd->storage == FD_STORE_PROJECT) set_modflag(1); - } - } -} - -static void cb_Store(Fl_Choice* o, void* v) { - int selected = w_settings_shell_list_selected; - if (v == LOAD) { - if (selected) { - Fd_Tool_Store ts = g_shell_config->list[selected-1]->storage; - o->value(o->find_item_with_argument((long)ts)); - } else { - o->value(o->find_item_with_argument((long)FD_STORE_USER)); - } - } else { - if (selected) { - Fd_Shell_Command *cmd = g_shell_config->list[selected-1]; - Fd_Tool_Store ts = (Fd_Tool_Store)(o->mvalue()->argument()); - if (cmd->storage == FD_STORE_PROJECT) set_modflag(1); - cmd->storage = ts; - //w_settings_shell_list->text(selected, cmd->name.c_str()); - if (cmd->storage == FD_STORE_USER) - w_settings_shell_list->icon(selected, w_settings_shell_fd_user->image()); - else if (cmd->storage == FD_STORE_PROJECT) - w_settings_shell_list->icon(selected, w_settings_shell_fd_project->image()); - if (cmd->storage == FD_STORE_PROJECT) set_modflag(1); - } - } -} - -Fl_Menu_Item menu_Store[] = { - {"@fd_user User Setting", 0, 0, (void*)(FD_STORE_USER), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, - {"@fd_project Project File", 0, 0, (void*)(FD_STORE_PROJECT), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, - {0,0,0,0,0,0,0,0,0} -}; - -static void cb_Condition(Fl_Choice* o, void* v) { - int selected = w_settings_shell_list_selected; - if (v == LOAD) { - if (selected) { - int cond = g_shell_config->list[selected-1]->condition; - o->value(o->find_item_with_argument(cond)); - } else { - o->value(o->find_item_with_argument(0)); - } - } else { - if (selected) { - Fd_Shell_Command *cmd = g_shell_config->list[selected-1]; - int cond = (int)(o->mvalue()->argument()); - cmd->condition = cond; - g_shell_config->rebuild_shell_menu(); - if (cmd->storage == FD_STORE_PROJECT) set_modflag(1); - } - } -} - -Fl_Menu_Item menu_Condition[] = { - {"all platforms", 0, 0, (void*)(Fd_Shell_Command::ALWAYS), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, - {"Windows only", 0, 0, (void*)(Fd_Shell_Command::WIN_ONLY), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, - {"Linux only", 0, 0, (void*)(Fd_Shell_Command::UX_ONLY), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, - {"macOS only", 0, 0, (void*)(Fd_Shell_Command::MAC_ONLY), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, - {"Linux and macOS", 0, 0, (void*)(Fd_Shell_Command::MAC_AND_UX_ONLY), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, - {"don\'t use", 0, 0, (void*)(Fd_Shell_Command::NEVER), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, - {0,0,0,0,0,0,0,0,0} -}; - -static void cb_Label(Fl_Input* o, void* v) { - if (v == LOAD) { - // o->value(g_shell_command.c_str()); - } else { - // g_shell_command = o->value(); - } -} - -Fl_Text_Editor *w_settings_shell_command=(Fl_Text_Editor *)0; - -static void cb_w_settings_shell_command(Fl_Text_Editor* o, void* v) { - int selected = w_settings_shell_list_selected; - if (v == LOAD) { - if (selected) { - o->buffer()->text(g_shell_config->list[selected-1]->command.c_str()); - } else { - o->buffer()->text(""); - } - } else { - if (selected) { - Fd_Shell_Command *cmd = g_shell_config->list[selected-1]; - cmd->command = o->buffer()->text(); - if (cmd->storage == FD_STORE_PROJECT) set_modflag(1); - } - } -} - -Fl_Menu_Button *w_settings_shell_text_macros=(Fl_Menu_Button *)0; - -static void cb_w_settings_shell_text_macros(Fl_Menu_Button* o, void*) { - const Fl_Menu_Item *mi = o->mvalue(); - if (mi) { - char buffer[256]; - fl_strlcpy(buffer, mi->label(), 255); - int n = (int)strlen(buffer)-1; - if (buffer[n]=='@') buffer[n] = 0; - char *word = buffer; - if (word[0]=='@') word++; - if (w_settings_shell_command->buffer()->selected()) { - int start = 0, end = 0; - w_settings_shell_command->buffer()->selection_position(&start, &end); - w_settings_shell_command->buffer()->replace(start, end, word); - } else { - int pos = w_settings_shell_command->insert_position(); - w_settings_shell_command->buffer()->insert(pos, word); - } - w_settings_shell_command->do_callback(w_settings_shell_command, (void*)NULL); - } -} - -Fl_Menu_Item menu_w_settings_shell_text_macros[] = { - {"@@BASENAME@@", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 4, 11, 0}, - {"@@PROJECTFILE_PATH@@", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 4, 11, 0}, - {"@@PROJECTFILE_NAME@@", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 4, 11, 0}, - {"@@CODEFILE_PATH@@", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 4, 11, 0}, - {"@@CODEFILE_NAME@@", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 4, 11, 0}, - {"@@HEADERFILE_PATH@@", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 4, 11, 0}, - {"@@HEADERFILE_NAME@@", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 4, 11, 0}, - {"@@TEXTFILE_PATH@@", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 4, 11, 0}, - {"@@TEXTFILE_NAME@@", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 4, 11, 0}, - // Not yet implemented - {"@@FLTK_CONFIG@@", 0, 0, 0, 16, (uchar)FL_NORMAL_LABEL, 4, 11, 0}, - {"@@TMPDIR@@", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 4, 11, 0}, - {0,0,0,0,0,0,0,0,0} -}; - -static void cb_1fd_zoom(Fl_Button*, void*) { - if (!script_panel) make_script_panel(); - script_input->buffer()->text(w_settings_shell_command->buffer()->text()); - script_panel->show(); - - for (;;) { - Fl_Widget* w = Fl::readqueue(); - if (w == script_panel_cancel) goto BREAK2; - else if (w == script_panel_ok) break; - else if (!w) Fl::wait(); - } - - w_settings_shell_command->buffer()->text(script_input->buffer()->text()); - w_settings_shell_command->do_callback(); - BREAK2: - script_panel->hide(); -} - -static void cb_save(Fl_Check_Button* o, void* v) { - int selected = w_settings_shell_list_selected; - if (v == LOAD) { - if (selected) { - o->value(g_shell_config->list[selected-1]->flags & Fd_Shell_Command::SAVE_PROJECT); - } else { - o->value(0); - } - } else { - if (selected) { - Fd_Shell_Command *cmd = g_shell_config->list[selected-1]; - int v = o->value(); - if (v) { - cmd->flags |= Fd_Shell_Command::SAVE_PROJECT; - } else { - cmd->flags &= ~Fd_Shell_Command::SAVE_PROJECT; - } - if (cmd->storage == FD_STORE_PROJECT) set_modflag(1); - } - } -} - -static void cb_save1(Fl_Check_Button* o, void* v) { - int selected = w_settings_shell_list_selected; - if (v == LOAD) { - if (selected) { - o->value(g_shell_config->list[selected-1]->flags & Fd_Shell_Command::SAVE_SOURCECODE); - } else { - o->value(0); - } - } else { - if (selected) { - Fd_Shell_Command *cmd = g_shell_config->list[selected-1]; - int v = o->value(); - if (v) { - cmd->flags |= Fd_Shell_Command::SAVE_SOURCECODE; - } else { - cmd->flags &= ~Fd_Shell_Command::SAVE_SOURCECODE; - } - if (cmd->storage == FD_STORE_PROJECT) set_modflag(1); - } - } -} - -static void cb_save2(Fl_Check_Button* o, void* v) { - int selected = w_settings_shell_list_selected; - if (v == LOAD) { - if (selected) { - o->value(g_shell_config->list[selected-1]->flags & Fd_Shell_Command::SAVE_STRINGS); - } else { - o->value(0); - } - } else { - if (selected) { - Fd_Shell_Command *cmd = g_shell_config->list[selected-1]; - int v = o->value(); - if (v) { - cmd->flags |= Fd_Shell_Command::SAVE_STRINGS; - } else { - cmd->flags &= ~Fd_Shell_Command::SAVE_STRINGS; - } - if (cmd->storage == FD_STORE_PROJECT) set_modflag(1); - } - } -} - -static void cb_show(Fl_Check_Button* o, void* v) { - int selected = w_settings_shell_list_selected; - if (v == LOAD) { - if (selected) { - o->value(!(g_shell_config->list[selected-1]->flags & Fd_Shell_Command::DONT_SHOW_TERMINAL)); - } else { - o->value(0); - } - } else { - if (selected) { - Fd_Shell_Command *cmd = g_shell_config->list[selected-1]; - int v = o->value(); - if (!v) { - cmd->flags |= Fd_Shell_Command::DONT_SHOW_TERMINAL; - } else { - cmd->flags &= ~Fd_Shell_Command::DONT_SHOW_TERMINAL; - } - if (cmd->storage == FD_STORE_PROJECT) set_modflag(1); - } - } -} - -static void cb_clear(Fl_Check_Button* o, void* v) { - int selected = w_settings_shell_list_selected; - if (v == LOAD) { - if (selected) { - o->value(g_shell_config->list[selected-1]->flags & Fd_Shell_Command::CLEAR_TERMINAL); - } else { - o->value(0); - } - } else { - if (selected) { - Fd_Shell_Command *cmd = g_shell_config->list[selected-1]; - int v = o->value(); - if (v) { - cmd->flags |= Fd_Shell_Command::CLEAR_TERMINAL; - } else { - cmd->flags &= ~Fd_Shell_Command::CLEAR_TERMINAL; - } - if (cmd->storage == FD_STORE_PROJECT) set_modflag(1); - } - } -} - -static void cb_clear1(Fl_Check_Button* o, void* v) { - int selected = w_settings_shell_list_selected; - if (v == LOAD) { - if (selected) { - o->value(g_shell_config->list[selected-1]->flags & Fd_Shell_Command::CLEAR_HISTORY); - } else { - o->value(0); - } - } else { - if (selected) { - Fd_Shell_Command *cmd = g_shell_config->list[selected-1]; - int v = o->value(); - if (v) { - cmd->flags |= Fd_Shell_Command::CLEAR_HISTORY; - } else { - cmd->flags &= ~Fd_Shell_Command::CLEAR_HISTORY; - } - if (cmd->storage == FD_STORE_PROJECT) set_modflag(1); - } - } -} - -Fl_Box *w_settings_shell_fd_project=(Fl_Box *)0; - -static const unsigned char idata_fd_project[] = -{137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0, -115,122,122,244,0,0,1,110,105,67,67,80,105,99,99,0,0,40,145,117,145,187,75,195, -80,20,198,127,173,239,23,14,58,136,116,200,80,197,65,65,20,196,81,235,208,165, -72,169,21,172,186,180,49,109,133,164,13,73,139,136,171,224,226,80,112,16,93, -124,13,254,7,186,10,174,10,130,160,8,34,110,238,190,22,145,120,174,45,180,136, -189,225,230,252,248,238,253,14,39,95,192,31,49,117,203,109,156,2,43,87,112,98, -225,144,182,144,88,212,90,94,104,163,153,46,2,244,39,117,215,158,142,70,35,212, -93,159,119,248,84,189,29,81,189,234,223,251,119,117,172,24,174,14,190,86,225,9, -221,118,10,194,50,13,145,181,130,173,120,91,184,87,207,38,87,132,15,133,135,29, -25,80,248,74,233,169,50,63,43,206,148,249,93,177,19,143,205,128,95,245,212,50, -53,156,170,97,61,235,88,194,67,194,65,203,44,234,149,121,212,151,116,26,185, -249,57,169,253,178,3,184,196,8,19,66,35,69,145,85,76,10,140,72,205,73,102,255, -251,70,127,125,179,228,197,163,203,219,102,29,71,28,25,178,226,29,22,181,40,93, -13,169,105,209,13,121,76,214,85,238,127,243,116,211,227,99,229,238,157,33,104, -122,242,188,183,1,104,217,129,239,146,231,125,29,121,222,247,49,52,60,194,69, -174,234,207,75,78,147,31,162,151,170,90,240,0,186,55,225,236,178,170,165,118, -225,124,11,250,30,236,164,147,252,149,26,100,251,211,105,120,61,133,174,4,244, -220,64,251,82,57,171,202,57,39,247,16,223,144,95,116,13,123,251,48,40,247,187, -151,127,0,229,44,103,253,189,250,32,75,0,0,0,9,112,72,89,115,0,0,22,37,0,0,22, -37,1,73,82,36,240,0,0,1,13,116,69,88,116,82,97,119,32,112,114,111,102,105,108, -101,32,116,121,112,101,32,101,120,105,102,0,10,101,120,105,102,10,32,32,32,32, -32,49,49,52,10,52,53,55,56,54,57,54,54,48,48,48,48,52,57,52,57,50,97,48,48,48, -56,48,48,48,48,48,48,48,52,48,48,49,97,48,49,48,53,48,48,48,49,48,48,48,48,48, -48,51,101,48,48,48,48,48,48,49,98,48,49,48,53,48,48,48,49,48,48,48,48,48,48,10, -52,54,48,48,48,48,48,48,50,56,48,49,48,51,48,48,48,49,48,48,48,48,48,48,48,50, -48,48,48,48,48,48,54,57,56,55,48,52,48,48,48,49,48,48,48,48,48,48,52,101,48,48, -48,48,48,48,48,48,48,48,48,48,48,48,57,48,48,48,48,48,48,48,10,48,49,48,48,48, -48,48,48,57,48,48,48,48,48,48,48,48,49,48,48,48,48,48,48,48,50,48,48,48,50,97, -48,48,52,48,48,48,49,48,48,48,48,48,48,53,50,48,48,48,48,48,48,48,51,97,48,48, -52,48,48,48,49,48,48,48,48,48,48,56,48,48,48,10,48,48,48,48,48,48,48,48,48,48, -48,48,10,190,225,144,105,0,0,0,90,116,69,88,116,82,97,119,32,112,114,111,102, -105,108,101,32,116,121,112,101,32,105,112,116,99,0,10,105,112,116,99,10,32,32, -32,32,32,32,50,54,10,53,48,54,56,54,102,55,52,54,102,55,51,54,56,54,102,55,48, -50,48,51,51,50,101,51,48,48,48,51,56,52,50,52,57,52,100,48,52,48,52,48,48,48, -48,48,48,48,48,48,48,48,48,10,199,209,105,220,0,0,20,96,116,69,88,116,82,97, -119,32,112,114,111,102,105,108,101,32,116,121,112,101,32,120,109,112,0,10,120, -109,112,10,32,32,32,32,50,53,53,53,10,51,99,51,102,55,56,55,48,54,49,54,51,54, -98,54,53,55,52,50,48,54,50,54,53,54,55,54,57,54,101,51,100,50,50,101,102,98,98, -98,102,50,50,50,48,54,57,54,52,51,100,50,50,53,55,51,53,52,100,51,48,52,100,55, -48,52,51,54,53,54,56,54,57,10,52,56,55,97,55,50,54,53,53,51,55,97,52,101,53,52, -54,51,55,97,54,98,54,51,51,57,54,52,50,50,51,102,51,101,48,97,51,99,55,56,51, -97,55,56,54,100,55,48,54,100,54,53,55,52,54,49,50,48,55,56,54,100,54,99,54,101, -55,51,51,97,55,56,10,51,100,50,50,54,49,54,52,54,102,54,50,54,53,51,97,54,101, -55,51,51,97,54,100,54,53,55,52,54,49,50,102,50,50,50,48,55,56,51,97,55,56,54, -100,55,48,55,52,54,98,51,100,50,50,53,56,52,100,53,48,50,48,52,51,54,102,55,50, -54,53,50,48,10,51,52,50,101,51,52,50,101,51,48,50,100,52,53,55,56,54,57,55,54, -51,50,50,50,51,101,48,97,50,48,51,99,55,50,54,52,54,54,51,97,53,50,52,52,52,54, -50,48,55,56,54,100,54,99,54,101,55,51,51,97,55,50,54,52,54,54,51,100,50,50,54, -56,10,55,52,55,52,55,48,51,97,50,102,50,102,55,55,55,55,55,55,50,101,55,55,51, -51,50,101,54,102,55,50,54,55,50,102,51,49,51,57,51,57,51,57,50,102,51,48,51,50, -50,102,51,50,51,50,50,100,55,50,54,52,54,54,50,100,55,51,55,57,54,101,55,52,10, -54,49,55,56,50,100,54,101,55,51,50,51,50,50,51,101,48,97,50,48,50,48,51,99,55, -50,54,52,54,54,51,97,52,52,54,53,55,51,54,51,55,50,54,57,55,48,55,52,54,57,54, -102,54,101,50,48,55,50,54,52,54,54,51,97,54,49,54,50,54,102,55,53,10,55,52,51, -100,50,50,50,50,48,97,50,48,50,48,50,48,50,48,55,56,54,100,54,99,54,101,55,51, -51,97,54,53,55,56,54,57,54,54,51,100,50,50,54,56,55,52,55,52,55,48,51,97,50, -102,50,102,54,101,55,51,50,101,54,49,54,52,54,102,54,50,54,53,10,50,101,54,51, -54,102,54,100,50,102,54,53,55,56,54,57,54,54,50,102,51,49,50,101,51,48,50,102, -50,50,48,97,50,48,50,48,50,48,50,48,55,56,54,100,54,99,54,101,55,51,51,97,55, -52,54,57,54,54,54,54,51,100,50,50,54,56,55,52,55,52,55,48,10,51,97,50,102,50, -102,54,101,55,51,50,101,54,49,54,52,54,102,54,50,54,53,50,101,54,51,54,102,54, -100,50,102,55,52,54,57,54,54,54,54,50,102,51,49,50,101,51,48,50,102,50,50,48,97, -50,48,50,48,50,48,54,53,55,56,54,57,54,54,51,97,53,48,10,54,57,55,56,54,53,54, -99,53,56,52,52,54,57,54,100,54,53,54,101,55,51,54,57,54,102,54,101,51,100,50, -50,51,56,51,50,50,50,48,97,50,48,50,48,50,48,54,53,55,56,54,57,54,54,51,97,53, -48,54,57,55,56,54,53,54,99,53,57,52,52,54,57,10,54,100,54,53,54,101,55,51,54, -57,54,102,54,101,51,100,50,50,51,49,51,50,51,56,50,50,48,97,50,48,50,48,50,48, -55,52,54,57,54,54,54,54,51,97,53,50,54,53,55,51,54,102,54,99,55,53,55,52,54,57, -54,102,54,101,53,53,54,101,54,57,55,52,10,51,100,50,50,51,50,50,50,48,97,50,48, -50,48,50,48,55,52,54,57,54,54,54,54,51,97,53,57,53,50,54,53,55,51,54,102,54,99, -55,53,55,52,54,57,54,102,54,101,51,100,50,50,51,49,51,52,51,52,50,48,50,102,50, -48,51,49,50,50,48,97,50,48,10,50,48,50,48,55,52,54,57,54,54,54,54,51,97,53,56, -53,50,54,53,55,51,54,102,54,99,55,53,55,52,54,57,54,102,54,101,51,100,50,50,51, -49,51,52,51,52,50,48,50,102,50,48,51,49,50,50,50,102,51,101,48,97,50,48,51,99, -50,102,55,50,54,52,10,54,54,51,97,53,50,52,52,52,54,51,101,48,97,51,99,50,102, -55,56,51,97,55,56,54,100,55,48,54,100,54,53,55,52,54,49,51,101,48,97,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,48,97,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,48,97,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,48,97,50,48,10,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,48,97,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,48,97,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,48,97,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,48, -97,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,48,97,10,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,48,97,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,48,97,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,48,97,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,48,97,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,10,48,97,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,48,97,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,48, -97,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,48,97,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,48,97,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,48,97,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,48,97,50,48,50,48,50,48,50,48,50,48,10,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,48,97,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,48,97,51,99,51,102,55,56,55,48,54,49, -54,51,54,98,54,53,55,52,50,48,54,53,54,101,54,52,51,100,50,50,55,55,50,50,51, -102,51,101,10,87,123,188,247,0,0,3,115,73,68,65,84,88,71,189,151,75,75,91,65,20, -199,79,110,222,169,52,180,203,22,186,239,210,47,80,236,206,126,5,177,17,151,46, -68,23,82,220,138,90,84,116,163,184,80,81,132,98,93,234,42,203,210,79,209,149, -32,213,68,164,165,165,129,230,97,94,246,252,166,157,246,246,102,154,132,230, -226,31,134,59,247,204,153,243,158,123,207,68,206,206,206,164,86,171,73,52,26, -149,68,34,17,175,84,42,215,123,123,123,15,119,118,118,164,23,26,141,134,164,211, -105,243,28,29,29,149,229,229,229,183,177,88,236,101,171,213,106,235,83,154,205, -166,120,158,39,145,72,196,12,23,188,106,181,42,201,100,82,110,111,111,69,149,55, -246,247,247,139,187,187,187,102,209,110,252,215,200,100,50,162,202,12,111,62, -159,151,211,211,211,49,85,252,70,135,231,212,230,64,44,149,74,201,205,205,141, -196,227,113,97,174,222,84,48,102,102,102,70,230,230,230,186,110,110,183,219,178, -177,177,33,219,219,219,198,129,133,133,5,188,30,27,31,31,71,78,78,89,90,93,5,40, -60,60,32,92,8,168,215,235,120,86,96,129,148,244,138,0,70,219,208,142,140,140, -144,66,89,89,89,145,163,163,163,49,221,255,90,195,31,65,62,60,200,7,240,48,39, -53,198,0,187,96,94,126,230,43,195,28,239,122,129,189,150,111,120,120,88,22,23, -23,13,109,105,105,73,142,143,143,95,169,242,247,42,51,107,249,144,79,202,49, -136,186,1,198,0,191,17,186,88,177,194,123,1,239,134,134,134,76,228,152,79,78,78, -202,250,250,186,137,232,218,218,154,156,156,156,60,211,72,92,43,235,115,60,247, -43,166,238,128,137,67,192,136,102,183,170,245,3,30,45,92,227,25,74,121,78,76, -76,152,72,112,2,168,137,195,195,195,148,210,223,169,226,23,208,40,92,210,203, -201,3,158,205,15,33,98,232,60,101,22,188,222,133,108,235,135,90,64,40,239,200, -154,154,154,50,17,96,190,185,185,73,77,80,224,121,93,127,130,62,12,97,15,48,6, -88,101,254,72,244,19,1,194,138,48,242,74,26,108,152,145,145,203,229,76,65,226, -212,234,234,170,28,28,28,96,228,71,235,168,69,44,24,110,221,156,237,39,255,22, -40,197,155,173,173,45,115,36,153,147,22,66,205,241,198,57,140,164,54,74,165,82, -99,122,122,250,47,71,141,235,129,40,164,131,133,249,47,16,242,96,85,227,29,133, -201,187,149,107,63,116,58,10,24,131,209,22,158,221,4,51,2,117,67,201,127,110, -187,1,190,249,249,121,185,188,188,148,98,177,40,87,87,87,102,126,126,126,110, -230,133,66,65,46,46,46,100,118,118,214,242,127,192,32,127,10,92,149,246,217,65, -11,11,159,130,4,151,1,53,7,45,44,60,8,18,92,6,60,114,208,194,66,35,72,112,25, -80,113,208,194,66,50,72,112,25,240,205,65,11,11,55,65,194,93,167,160,175,8,68, -29,180,176,224,142,0,103,211,254,163,245,140,86,59,247,253,31,252,95,216,95, -243,108,144,199,21,129,14,166,16,113,63,72,112,25,80,119,208,194,194,215,32,193, -101,64,104,41,112,160,28,36,220,117,10,238,5,9,119,157,130,14,125,46,3,254,252, -43,195,71,51,72,112,25,240,197,65,11,11,29,245,229,217,179,106,155,10,237,104, -154,253,180,228,253,2,153,246,142,161,207,36,223,26,123,155,2,30,139,86,33,237, -148,246,118,41,255,197,97,16,160,148,238,135,214,140,161,198,52,81,110,47,39, -224,119,71,196,176,157,45,253,28,173,211,160,176,109,25,45,25,50,213,193,199, -190,27,152,225,137,209,159,99,17,30,151,203,101,218,236,44,52,154,76,90,234,65, -128,34,228,250,90,246,136,255,29,196,176,206,118,175,58,79,232,226,83,24,236, -213,122,16,176,223,94,207,73,175,70,249,59,81,177,117,128,158,31,49,127,246,30, -207,181,170,20,0,0,0,0,73,69,78,68,174,66,96,130}; -static Fl_Image *image_fd_project() { - static Fl_Image *image = NULL; - if (!image) - image = new Fl_PNG_Image("fd_project.png", idata_fd_project, 6950); - return image; -} - -Fl_Box *w_settings_shell_fd_user=(Fl_Box *)0; - -static const unsigned char idata_fd_user[] = -{137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0, -115,122,122,244,0,0,1,110,105,67,67,80,105,99,99,0,0,40,145,117,145,187,75,195, -80,20,198,127,173,239,23,14,58,136,116,200,80,197,65,65,20,196,81,235,208,165, -72,169,21,172,186,180,49,109,133,164,13,73,139,136,171,224,226,80,112,16,93, -124,13,254,7,186,10,174,10,130,160,8,34,110,238,190,22,145,120,174,45,180,136, -189,225,230,252,248,238,253,14,39,95,192,31,49,117,203,109,156,2,43,87,112,98, -225,144,182,144,88,212,90,94,104,163,153,46,2,244,39,117,215,158,142,70,35,212, -93,159,119,248,84,189,29,81,189,234,223,251,119,117,172,24,174,14,190,86,225,9, -221,118,10,194,50,13,145,181,130,173,120,91,184,87,207,38,87,132,15,133,135,29, -25,80,248,74,233,169,50,63,43,206,148,249,93,177,19,143,205,128,95,245,212,50, -53,156,170,97,61,235,88,194,67,194,65,203,44,234,149,121,212,151,116,26,185, -249,57,169,253,178,3,184,196,8,19,66,35,69,145,85,76,10,140,72,205,73,102,255, -251,70,127,125,179,228,197,163,203,219,102,29,71,28,25,178,226,29,22,181,40,93, -13,169,105,209,13,121,76,214,85,238,127,243,116,211,227,99,229,238,157,33,104, -122,242,188,183,1,104,217,129,239,146,231,125,29,121,222,247,49,52,60,194,69, -174,234,207,75,78,147,31,162,151,170,90,240,0,186,55,225,236,178,170,165,118, -225,124,11,250,30,236,164,147,252,149,26,100,251,211,105,120,61,133,174,4,244, -220,64,251,82,57,171,202,57,39,247,16,223,144,95,116,13,123,251,48,40,247,187, -151,127,0,229,44,103,253,189,250,32,75,0,0,0,9,112,72,89,115,0,0,22,37,0,0,22, -37,1,73,82,36,240,0,0,1,13,116,69,88,116,82,97,119,32,112,114,111,102,105,108, -101,32,116,121,112,101,32,101,120,105,102,0,10,101,120,105,102,10,32,32,32,32, -32,49,49,52,10,52,53,55,56,54,57,54,54,48,48,48,48,52,57,52,57,50,97,48,48,48, -56,48,48,48,48,48,48,48,52,48,48,49,97,48,49,48,53,48,48,48,49,48,48,48,48,48, -48,51,101,48,48,48,48,48,48,49,98,48,49,48,53,48,48,48,49,48,48,48,48,48,48,10, -52,54,48,48,48,48,48,48,50,56,48,49,48,51,48,48,48,49,48,48,48,48,48,48,48,50, -48,48,48,48,48,48,54,57,56,55,48,52,48,48,48,49,48,48,48,48,48,48,52,101,48,48, -48,48,48,48,48,48,48,48,48,48,48,48,57,48,48,48,48,48,48,48,10,48,49,48,48,48, -48,48,48,57,48,48,48,48,48,48,48,48,49,48,48,48,48,48,48,48,50,48,48,48,50,97, -48,48,52,48,48,48,49,48,48,48,48,48,48,53,50,48,48,48,48,48,48,48,51,97,48,48, -52,48,48,48,49,48,48,48,48,48,48,56,48,48,48,10,48,48,48,48,48,48,48,48,48,48, -48,48,10,190,225,144,105,0,0,0,90,116,69,88,116,82,97,119,32,112,114,111,102, -105,108,101,32,116,121,112,101,32,105,112,116,99,0,10,105,112,116,99,10,32,32, -32,32,32,32,50,54,10,53,48,54,56,54,102,55,52,54,102,55,51,54,56,54,102,55,48, -50,48,51,51,50,101,51,48,48,48,51,56,52,50,52,57,52,100,48,52,48,52,48,48,48, -48,48,48,48,48,48,48,48,48,10,199,209,105,220,0,0,20,96,116,69,88,116,82,97, -119,32,112,114,111,102,105,108,101,32,116,121,112,101,32,120,109,112,0,10,120, -109,112,10,32,32,32,32,50,53,53,53,10,51,99,51,102,55,56,55,48,54,49,54,51,54, -98,54,53,55,52,50,48,54,50,54,53,54,55,54,57,54,101,51,100,50,50,101,102,98,98, -98,102,50,50,50,48,54,57,54,52,51,100,50,50,53,55,51,53,52,100,51,48,52,100,55, -48,52,51,54,53,54,56,54,57,10,52,56,55,97,55,50,54,53,53,51,55,97,52,101,53,52, -54,51,55,97,54,98,54,51,51,57,54,52,50,50,51,102,51,101,48,97,51,99,55,56,51, -97,55,56,54,100,55,48,54,100,54,53,55,52,54,49,50,48,55,56,54,100,54,99,54,101, -55,51,51,97,55,56,10,51,100,50,50,54,49,54,52,54,102,54,50,54,53,51,97,54,101, -55,51,51,97,54,100,54,53,55,52,54,49,50,102,50,50,50,48,55,56,51,97,55,56,54, -100,55,48,55,52,54,98,51,100,50,50,53,56,52,100,53,48,50,48,52,51,54,102,55,50, -54,53,50,48,10,51,52,50,101,51,52,50,101,51,48,50,100,52,53,55,56,54,57,55,54, -51,50,50,50,51,101,48,97,50,48,51,99,55,50,54,52,54,54,51,97,53,50,52,52,52,54, -50,48,55,56,54,100,54,99,54,101,55,51,51,97,55,50,54,52,54,54,51,100,50,50,54, -56,10,55,52,55,52,55,48,51,97,50,102,50,102,55,55,55,55,55,55,50,101,55,55,51, -51,50,101,54,102,55,50,54,55,50,102,51,49,51,57,51,57,51,57,50,102,51,48,51,50, -50,102,51,50,51,50,50,100,55,50,54,52,54,54,50,100,55,51,55,57,54,101,55,52,10, -54,49,55,56,50,100,54,101,55,51,50,51,50,50,51,101,48,97,50,48,50,48,51,99,55, -50,54,52,54,54,51,97,52,52,54,53,55,51,54,51,55,50,54,57,55,48,55,52,54,57,54, -102,54,101,50,48,55,50,54,52,54,54,51,97,54,49,54,50,54,102,55,53,10,55,52,51, -100,50,50,50,50,48,97,50,48,50,48,50,48,50,48,55,56,54,100,54,99,54,101,55,51, -51,97,54,53,55,56,54,57,54,54,51,100,50,50,54,56,55,52,55,52,55,48,51,97,50, -102,50,102,54,101,55,51,50,101,54,49,54,52,54,102,54,50,54,53,10,50,101,54,51, -54,102,54,100,50,102,54,53,55,56,54,57,54,54,50,102,51,49,50,101,51,48,50,102, -50,50,48,97,50,48,50,48,50,48,50,48,55,56,54,100,54,99,54,101,55,51,51,97,55, -52,54,57,54,54,54,54,51,100,50,50,54,56,55,52,55,52,55,48,10,51,97,50,102,50, -102,54,101,55,51,50,101,54,49,54,52,54,102,54,50,54,53,50,101,54,51,54,102,54, -100,50,102,55,52,54,57,54,54,54,54,50,102,51,49,50,101,51,48,50,102,50,50,48,97, -50,48,50,48,50,48,54,53,55,56,54,57,54,54,51,97,53,48,10,54,57,55,56,54,53,54, -99,53,56,52,52,54,57,54,100,54,53,54,101,55,51,54,57,54,102,54,101,51,100,50, -50,51,56,51,50,50,50,48,97,50,48,50,48,50,48,54,53,55,56,54,57,54,54,51,97,53, -48,54,57,55,56,54,53,54,99,53,57,52,52,54,57,10,54,100,54,53,54,101,55,51,54, -57,54,102,54,101,51,100,50,50,51,49,51,50,51,56,50,50,48,97,50,48,50,48,50,48, -55,52,54,57,54,54,54,54,51,97,53,50,54,53,55,51,54,102,54,99,55,53,55,52,54,57, -54,102,54,101,53,53,54,101,54,57,55,52,10,51,100,50,50,51,50,50,50,48,97,50,48, -50,48,50,48,55,52,54,57,54,54,54,54,51,97,53,57,53,50,54,53,55,51,54,102,54,99, -55,53,55,52,54,57,54,102,54,101,51,100,50,50,51,49,51,52,51,52,50,48,50,102,50, -48,51,49,50,50,48,97,50,48,10,50,48,50,48,55,52,54,57,54,54,54,54,51,97,53,56, -53,50,54,53,55,51,54,102,54,99,55,53,55,52,54,57,54,102,54,101,51,100,50,50,51, -49,51,52,51,52,50,48,50,102,50,48,51,49,50,50,50,102,51,101,48,97,50,48,51,99, -50,102,55,50,54,52,10,54,54,51,97,53,50,52,52,52,54,51,101,48,97,51,99,50,102, -55,56,51,97,55,56,54,100,55,48,54,100,54,53,55,52,54,49,51,101,48,97,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,48,97,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,48,97,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,48,97,50,48,10,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,48,97,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,48,97,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,48,97,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,48, -97,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,48,97,10,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,48,97,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,48,97,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,48,97,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,48,97,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,10,48,97,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,48,97,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,48, -97,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,48,97,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,48,97,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,48,97,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,48,97,50,48,50,48,50,48,50,48,50,48,10,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,48,97,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50, -48,50,48,50,48,50,48,50,48,10,50,48,50,48,50,48,50,48,50,48,50,48,50,48,50,48, -50,48,50,48,50,48,50,48,50,48,50,48,50,48,48,97,51,99,51,102,55,56,55,48,54,49, -54,51,54,98,54,53,55,52,50,48,54,53,54,101,54,52,51,100,50,50,55,55,50,50,51, -102,51,101,10,87,123,188,247,0,0,9,241,73,68,65,84,88,71,109,87,105,144,85,197, -21,254,186,239,242,222,155,25,102,88,12,14,46,227,16,96,12,26,80,118,103,16, -113,3,5,89,203,10,70,75,42,106,170,48,196,16,141,154,20,18,177,8,41,21,149,82, -81,244,71,48,166,42,75,37,96,22,29,5,9,155,131,37,139,16,65,113,153,25,71,8,66, -153,165,148,137,226,204,91,238,210,55,223,233,251,30,49,58,77,53,115,223,237, -190,167,207,249,206,57,223,57,173,218,59,223,128,163,92,104,147,32,138,12,84, -162,225,58,62,100,36,137,66,38,147,65,177,88,4,31,225,186,46,130,56,134,210,9, -188,140,139,158,82,30,78,198,65,20,26,238,5,60,237,91,57,242,157,231,184,8,75,1, -148,82,118,130,223,12,168,27,152,62,127,97,104,3,23,9,52,226,242,76,228,173,50, -118,81,169,4,249,124,15,5,198,86,160,85,138,135,185,78,22,189,61,37,104,30,104, -98,5,87,103,184,158,227,51,191,113,249,206,24,132,97,152,202,41,79,101,13,74, -240,229,225,26,83,131,68,203,193,49,12,2,24,45,31,184,246,35,199,113,64,120,104, -177,139,222,82,137,104,228,16,169,88,187,137,250,238,137,79,62,251,246,238,93, -187,250,83,232,137,113,227,199,71,77,77,77,71,78,22,78,222,149,209,94,41,227, -249,68,165,68,153,148,65,52,42,255,250,26,174,67,200,211,161,211,153,104,139, -136,60,151,104,133,235,106,68,38,132,118,29,132,145,25,250,139,103,158,217,186, -105,227,214,97,199,143,253,131,240,41,56,70,67,211,13,67,134,12,198,236,249,215, -220,178,112,225,245,187,170,171,252,233,132,58,53,216,162,233,244,121,184,12, -213,217,222,97,31,100,183,5,138,10,40,229,88,248,5,21,223,23,69,138,242,46,179, -252,222,159,183,183,190,176,121,104,130,44,178,153,254,152,56,102,10,98,198,196, -161,183,246,163,55,255,31,120,185,24,87,207,188,20,15,220,191,242,128,49,193, -196,40,14,98,71,149,229,81,137,218,218,218,20,213,47,12,87,39,97,89,1,5,35,112, -241,3,109,53,151,169,24,3,69,56,158,118,215,172,121,114,127,235,11,155,134,122, -110,45,150,46,125,16,45,205,151,211,184,156,85,160,95,181,135,109,59,94,194,170, -71,238,69,235,11,127,197,160,1,3,198,222,241,163,239,63,79,9,179,147,10,242, -125,123,128,56,19,70,9,26,9,52,135,24,136,66,137,138,184,196,103,122,194,247, -125,245,234,206,221,109,191,122,246,119,163,20,170,112,255,202,53,184,184,249, -106,6,99,21,181,118,224,185,89,20,243,6,151,77,189,6,203,151,61,4,159,10,62,251, -203,223,98,223,190,191,141,75,143,48,167,142,234,35,6,233,70,30,46,43,137,157, -113,249,131,116,138,117,68,166,186,189,189,115,50,19,18,115,103,45,192,248,177, -23,35,10,178,60,184,14,90,101,9,105,22,97,192,248,40,41,76,110,158,134,185,179, -175,227,59,31,7,14,188,233,126,249,176,190,178,160,18,129,68,168,156,50,246,111, -100,115,93,16,160,207,146,55,15,190,131,160,148,96,204,133,205,40,246,42,248,78, -53,24,151,20,232,160,144,15,80,83,221,143,252,193,12,9,52,206,251,198,88,196, -92,123,243,224,161,56,149,92,65,160,239,161,157,47,40,165,202,81,43,239,44,26, -212,56,8,130,248,224,129,3,240,189,44,134,15,111,66,198,175,161,229,220,39,123, -153,1,53,53,57,20,11,198,198,144,239,229,48,98,68,19,60,47,131,183,223,126,183, -88,62,162,143,99,255,55,180,48,147,107,35,228,203,27,211,223,76,195,184,177, -177,129,86,149,112,244,232,17,166,98,17,145,216,38,228,198,45,226,127,215,35, -123,122,224,90,47,142,29,63,76,18,42,161,190,190,254,36,18,221,135,220,175,156, -162,203,169,167,210,116,41,127,36,40,72,124,184,218,137,167,78,157,130,108,149, -135,182,157,91,200,7,12,80,29,17,58,11,144,245,171,226,239,48,250,156,73,219, -131,215,118,109,227,122,140,25,51,102,100,42,178,83,37,250,118,133,85,47,34,158, -9,179,65,38,148,87,230,1,199,42,101,146,200,204,152,57,237,125,147,228,177, -243,181,205,120,175,99,31,81,233,229,222,34,21,76,200,142,204,29,174,105,175, -136,119,59,247,98,123,91,171,85,104,250,244,43,125,77,6,53,166,98,28,229,39,95, -85,66,71,41,251,83,63,42,65,14,168,40,18,89,10,117,108,38,12,31,209,120,83,115, -203,120,148,130,147,184,231,222,219,177,105,243,6,120,126,36,52,129,124,177,100, -41,124,71,219,75,88,198,181,56,233,193,228,201,147,208,216,216,56,75,228,168, -50,11,138,187,84,31,222,176,172,35,100,33,22,11,92,177,74,103,197,119,36,33,81, -111,207,83,79,175,217,187,224,186,121,40,20,63,197,99,143,63,136,205,91,90,89, -17,149,240,4,182,110,219,132,135,30,89,137,124,161,27,243,230,207,196,186,103, -158,218,67,22,125,79,170,171,84,80,97,191,40,138,208,91,232,65,108,34,235,182, -34,43,101,41,40,165,65,104,161,150,169,211,103,85,174,15,162,152,148,226,32,40, -18,137,112,206,178,101,75,183,141,190,224,124,107,49,139,55,74,20,98,40,208, -247,61,6,102,128,81,163,206,199,138,21,247,173,47,20,10,45,130,105,38,227,217, -170,88,98,33,75,203,112,130,79,79,118,227,147,238,19,164,238,188,157,172,39,14, -9,141,126,42,79,139,136,69,37,101,66,177,192,243,60,233,11,62,102,74,62,76,82, -162,50,9,38,76,152,96,149,148,67,46,188,112,12,171,90,6,29,29,93,193,231,159,23, -158,20,223,107,126,28,70,37,155,214,242,189,252,22,20,4,101,73,83,249,93,118, -129,197,223,22,159,116,166,164,45,127,197,255,217,108,214,30,24,4,17,118,239, -126,61,137,194,4,35,207,29,133,65,3,79,39,180,202,90,87,83,93,135,97,67,207,101, -63,224,153,3,111,28,202,184,174,239,136,229,41,145,41,203,41,34,75,179,204,139, -65,50,108,191,192,227,221,83,197,226,212,72,35,213,214,114,250,174,187,187,155, -188,190,79,255,229,207,47,206,223,183,247,157,135,227,64,161,101,210,101,164,94, -32,173,90,160,146,53,152,48,126,10,142,28,237,204,254,224,182,59,159,187,100, -202,164,127,206,155,63,235,195,150,150,139,158,173,170,170,122,217,36,113,94,24, -95,14,15,67,246,29,236,92,114,185,156,85,66,181,119,118,88,6,252,127,69,82,37, -94,106,221,56,106,245,234,71,175,232,62,209,51,203,113,170,91,76,224,231,38,76, -184,20,75,190,119,23,206,58,123,56,203,116,10,181,75,234,62,246,81,39,158,88, -187,10,239,180,239,71,18,247,218,56,169,98,149,252,241,79,238,196,220,185,179, -47,247,60,231,21,81,34,117,133,177,127,5,25,213,222,222,14,169,136,142,231,218, -128,50,73,32,10,12,88,187,246,233,59,215,173,251,245,45,42,169,61,99,120,227,88, -76,155,190,0,83,155,175,68,255,65,131,105,56,59,7,82,95,28,146,176,24,55,137, -229,112,33,167,8,255,254,248,24,118,182,109,196,43,109,47,163,189,243,32,15,138, -177,232,214,155,112,251,29,183,77,85,137,121,53,45,72,58,45,76,68,80,189,253, -214,33,194,209,207,194,33,41,215,211,243,233,232,229,203,151,255,126,203,150,29, -231,185,172,120,75,22,255,20,211,167,221,72,70,172,163,94,14,164,159,8,36,152,0, -219,204,74,200,136,44,9,48,41,227,174,71,106,87,228,6,213,139,23,95,124,14,79, -174,125,136,27,3,92,50,181,217,172,121,124,245,24,173,205,33,203,158,182,81,165, -225,75,126,184,132,86,211,227,180,202,209,222,153,119,223,125,207,235,219,183, -239,110,168,171,61,3,43,239,123,156,254,190,10,85,85,167,161,80,136,88,130,93, -27,88,68,144,169,71,146,226,193,177,73,27,78,66,12,135,235,113,28,165,5,149, -194,217,39,226,155,163,70,99,207,174,93,248,224,112,151,58,124,164,107,241,244, -171,166,29,103,237,56,40,116,45,25,161,125,95,160,15,108,239,199,96,187,97,103, -219,158,129,190,219,31,171,87,173,195,216,11,46,99,233,29,192,146,27,157,138, -222,82,41,141,232,56,182,201,99,93,32,214,136,95,77,148,240,119,134,41,153,35, -186,213,136,131,12,198,140,190,24,143,174,94,135,154,220,215,176,99,251,107,120, -125,239,254,7,136,182,170,196,154,14,216,239,101,115,210,5,71,151,175,88,249, -179,165,33,133,44,188,97,49,154,190,62,142,66,171,73,48,20,200,86,91,14,9,73,54, -174,207,190,136,133,73,44,141,227,52,88,45,205,10,141,11,125,115,198,180,44,138, -121,71,64,127,148,242,62,70,142,156,136,57,115,174,167,66,46,86,63,242,196,32, -130,214,84,9,119,45,36,81,40,244,158,182,97,195,134,223,124,208,245,193,192,179, -207,26,134,111,93,187,144,13,8,157,29,123,105,59,109,42,221,140,177,129,26,210, -223,18,197,158,167,109,129,137,152,86,202,94,92,202,118,73,185,230,118,135,37, -211,247,170,17,20,20,22,222,120,11,59,231,6,116,117,29,118,159,127,190,117,69, -84,142,35,29,209,145,142,155,61,255,15,235,255,116,70,93,221,233,184,249,59, -139,104,5,153,138,157,175,133,88,167,80,11,2,162,172,237,106,89,5,227,40,96,239, -79,74,54,129,205,0,197,12,136,19,42,39,237,16,247,243,106,192,192,78,121,223, -146,26,207,91,116,235,98,42,31,99,195,31,215,79,114,41,75,134,155,48,178,185, -195,59,114,248,56,130,162,143,230,139,166,216,194,164,43,209,29,167,85,76,243, -191,48,76,155,28,199,241,108,76,164,205,108,74,90,70,114,154,123,36,150,4,21, -113,179,40,171,29,9,204,34,41,187,26,227,199,93,100,255,190,223,113,204,72,44, -249,76,101,22,35,15,135,187,62,26,98,34,31,67,234,207,177,27,148,244,134,210, -116,136,134,101,4,36,215,229,224,180,175,55,246,112,197,158,80,131,190,86,25,72, -95,85,25,210,97,185,90,89,235,131,82,104,175,114,48,164,97,93,139,51,235,155, -104,168,151,251,232,248,103,20,202,119,212,86,31,61,122,108,149,4,80,67,67,131, -189,136,228,195,30,114,127,129,26,74,235,205,128,67,234,83,200,83,249,222,152, -118,58,94,249,89,242,46,172,108,42,95,195,180,101,87,47,35,233,202,106,232,196, -168,98,176,15,30,124,26,254,254,161,170,233,234,234,194,208,198,122,81,52,202, -53,156,51,196,44,186,245,230,127,13,169,111,200,38,186,23,253,6,120,82,231,221, -176,196,226,159,208,145,112,107,172,97,9,97,81,9,159,217,14,33,166,242,18,73, -230,4,103,29,223,243,217,94,114,184,238,68,118,63,97,36,82,174,152,47,212,204, -238,14,243,174,189,2,19,155,135,117,203,225,246,210,218,222,241,22,3,134,23,84, -238,147,74,103,27,19,11,113,26,120,114,249,176,150,90,139,203,237,112,5,133,83, -163,124,159,80,105,166,84,154,25,123,221,51,105,57,150,247,65,216,203,236,81, -116,89,108,93,41,107,255,5,119,155,194,247,64,241,254,70,0,0,0,0,73,69,78,68, -174,66,96,130}; -static Fl_Image *image_fd_user() { - static Fl_Image *image = NULL; - if (!image) - image = new Fl_PNG_Image("fd_user.png", idata_fd_user, 8612); - return image; -} - -Fl_Group *w_settings_i18n_tab=(Fl_Group *)0; - -static void cb_w_settings_i18n_tab(Fl_Group* o, void* v) { - propagate_load(o, v); -} - -static const unsigned char idata_language_64[] = -{137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,96,0,0,0,64,8,4,0,0,0, -79,61,186,133,0,0,5,113,73,68,65,84,104,222,237,154,107,76,28,85,20,199,127, -188,10,44,182,184,116,75,75,65,1,129,146,20,140,15,106,91,170,166,129,182,40,98, -53,104,98,66,240,145,26,67,140,38,245,21,245,139,177,54,126,48,126,48,209,38, -162,198,132,24,141,181,173,209,86,98,130,129,32,98,1,91,196,214,90,181,136,20, -90,160,32,10,8,88,96,11,44,227,7,102,239,206,46,236,206,238,236,206,204,154, -120,246,195,158,123,103,231,222,243,223,123,207,255,156,251,0,117,89,193,43,140, -226,64,210,244,89,96,154,47,72,197,52,137,230,144,102,227,93,159,78,178,204,2, -176,63,4,230,75,72,52,154,5,96,52,36,230,75,204,82,164,207,4,81,147,171,157,74, -28,177,26,58,152,112,42,49,220,74,147,25,0,34,157,230,239,39,131,133,128,26, -143,96,154,26,90,156,197,181,230,140,128,44,177,92,171,193,15,167,72,116,21,162, -244,0,16,25,124,19,14,102,152,51,145,36,131,148,113,154,57,199,90,138,200,88, -182,249,213,174,194,80,24,2,88,160,153,87,1,24,96,175,114,186,136,137,183,133, -134,69,203,71,248,52,140,0,56,24,225,31,192,206,247,114,77,43,219,73,101,129,56, -214,16,167,248,229,205,188,193,69,86,83,85,78,167,30,0,34,84,127,33,45,126,37, -242,46,57,194,252,54,62,164,199,157,38,101,154,181,114,15,229,172,92,210,204, -166,136,48,242,129,17,14,114,122,73,173,29,59,48,193,1,242,40,48,204,137,53,177, -208,140,138,63,254,105,32,11,105,2,96,101,147,74,204,8,115,26,77,228,65,210,232, -195,225,230,42,221,116,201,250,42,225,43,179,174,216,189,53,160,46,254,162,159, -89,29,89,40,131,74,143,246,175,80,35,0,196,3,115,116,241,19,3,92,118,254,224, -120,64,29,204,49,204,219,188,201,188,110,113,32,134,24,15,0,3,178,102,195,194, -28,245,188,47,106,52,244,20,77,6,175,147,207,99,106,16,52,166,18,14,134,185, -160,160,80,152,18,230,166,96,225,20,175,185,155,175,205,63,31,226,57,93,156,216, -65,27,47,241,56,111,113,65,212,13,10,61,23,7,141,216,67,67,49,207,232,26,7,106, -73,39,149,24,64,226,146,120,154,206,44,103,68,41,73,67,251,118,166,157,234,26, -93,0,184,226,192,143,236,38,9,152,22,14,12,89,56,24,145,245,93,236,37,193,25, -204,253,254,219,187,121,202,9,33,82,23,0,241,88,229,25,126,142,113,146,128,63, -104,149,159,165,145,162,224,39,43,185,92,165,33,69,140,115,141,129,30,62,144, -200,13,98,50,245,2,18,231,196,152,220,66,82,128,255,184,9,145,56,86,177,54,107, -101,146,9,78,186,146,182,128,167,140,9,0,34,200,37,69,214,107,233,228,23,234,68, -128,203,53,120,69,166,49,14,92,195,46,161,31,84,172,84,118,178,238,191,1,32,158, -109,66,111,17,251,14,113,108,115,91,204,132,49,0,216,200,158,37,117,21,100,27, -190,168,215,12,192,66,9,121,30,9,222,78,44,126,190,61,65,19,71,57,19,130,221, -140,32,182,85,50,20,126,0,144,185,204,66,210,91,32,252,152,74,158,164,74,193,94, -134,3,152,166,221,163,251,38,222,161,141,73,63,222,237,162,26,128,126,142,50, -110,206,174,68,47,95,114,204,45,27,5,168,163,137,18,74,177,120,164,218,158,169, -254,9,198,100,253,19,42,84,86,119,186,0,24,231,35,106,189,164,97,181,116,113, -151,79,46,186,36,162,6,64,51,121,196,27,61,133,198,57,165,40,149,242,60,215,43, -202,157,124,231,35,153,150,232,160,93,81,254,156,126,227,71,32,158,20,57,153, -139,99,15,101,216,40,160,142,195,178,217,54,114,124,24,53,202,215,30,147,177, -157,172,32,246,125,53,1,176,81,201,60,253,108,225,110,242,137,7,178,121,148,219, -105,230,56,243,84,144,69,131,215,119,207,114,108,137,231,20,179,222,88,0,81,20, -146,195,12,86,86,137,173,189,4,110,100,3,247,1,201,244,123,77,134,167,150,89, -219,55,113,214,104,0,16,181,236,105,133,69,14,100,222,179,209,223,57,34,107,235, -72,17,187,123,245,108,198,106,124,32,11,92,230,56,41,8,244,14,158,37,83,144, -233,121,51,34,113,224,162,36,208,29,108,165,76,65,166,51,225,15,64,73,160,59, -200,35,129,219,66,64,166,126,251,192,21,250,136,244,114,200,23,193,74,108,170, -84,168,36,208,116,70,152,4,242,249,57,72,50,85,7,176,176,56,74,118,246,249,216, -180,189,142,71,40,84,49,64,73,160,135,100,221,30,52,153,170,3,24,195,230,76,19, -188,199,215,211,68,147,227,243,28,213,157,64,167,151,16,173,86,50,85,247,129, -106,255,14,135,135,84,220,176,91,16,168,55,169,15,58,51,245,54,70,31,248,117,91, -98,150,59,21,160,229,218,7,164,46,105,80,26,148,46,74,251,252,184,142,80,43,13, -74,131,210,160,212,40,37,185,106,131,158,66,243,84,209,206,211,164,249,204,145, -47,115,128,175,252,35,208,18,172,110,118,245,208,17,68,102,234,15,11,205,82,77, -13,169,62,246,41,37,250,124,157,58,41,9,180,136,151,73,118,123,122,130,135,5, -153,238,102,131,78,52,106,231,188,246,112,57,198,55,66,47,35,221,131,173,110, -226,126,62,147,201,180,131,236,0,67,147,33,129,108,92,100,61,57,108,94,66,182, -73,138,123,56,191,6,188,45,111,8,0,11,105,178,86,46,52,101,24,44,160,80,214, -215,251,116,180,16,102,163,129,73,50,85,204,211,75,49,247,46,187,216,76,227,9, -160,151,98,74,195,19,64,20,219,217,200,20,54,215,237,169,128,158,155,14,0,162, -197,102,176,182,231,97,146,78,235,33,255,3,48,91,244,241,1,113,7,225,111,126, -211,112,200,215,19,64,52,208,7,128,72,43,26,248,65,195,235,138,99,214,5,115,0, -180,48,231,36,244,177,224,90,26,54,107,106,126,27,146,219,190,14,94,52,11,64,38, -157,33,48,255,61,163,226,212,114,146,206,17,166,130,48,126,136,23,88,161,222, -205,191,56,75,123,84,202,251,159,166,0,0,0,0,73,69,78,68,174,66,96,130}; -static Fl_Image *image_language_64() { - static Fl_Image *image = NULL; - if (!image) - image = new Fl_PNG_Image("language_64.png", idata_language_64, 1450); - return image; -} - -Fl_Choice *i18n_type_chooser=(Fl_Choice *)0; - -Fl_Menu_Item menu_i18n_type_chooser[] = { - {"None", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, - {"GNU gettext", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, - {"POSIX catgets", 0, 0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, - {0,0,0,0,0,0,0,0,0} -}; - -Fl_Group *i18n_gnu_group=(Fl_Group *)0; - -static void cb_i18n_gnu_group(Fl_Group* o, void* v) { - propagate_load(o, v); -} - -Fl_Input *i18n_gnu_include_input=(Fl_Input *)0; - -static void cb_i18n_gnu_include_input(Fl_Input* o, void* v) { - if (v == LOAD) { - o->value(g_project.i18n_gnu_include.c_str()); - } else { - undo_checkpoint(); - g_project.i18n_gnu_include = o->value(); - set_modflag(1); - } -} - -Fl_Input *i18n_gnu_conditional_input=(Fl_Input *)0; - -static void cb_i18n_gnu_conditional_input(Fl_Input* o, void* v) { - if (v == LOAD) { - o->value(g_project.i18n_gnu_conditional.c_str()); - } else { - undo_checkpoint(); - g_project.i18n_gnu_conditional = o->value(); - set_modflag(1); - } -} - -Fl_Input *i18n_gnu_function_input=(Fl_Input *)0; - -static void cb_i18n_gnu_function_input(Fl_Input* o, void* v) { - if (v == LOAD) { - o->value(g_project.i18n_gnu_function.c_str()); - } else { - undo_checkpoint(); - g_project.i18n_gnu_function = o->value(); - set_modflag(1); - } -} - -Fl_Input *i18n_gnu_static_function_input=(Fl_Input *)0; - -static void cb_i18n_gnu_static_function_input(Fl_Input* o, void* v) { - if (v == LOAD) { - o->value(g_project.i18n_gnu_static_function.c_str()); - } else { - undo_checkpoint(); - g_project.i18n_gnu_static_function = o->value(); - set_modflag(1); - } -} - -Fl_Group *i18n_posix_group=(Fl_Group *)0; - -static void cb_i18n_posix_group(Fl_Group* o, void* v) { - propagate_load(o, v); -} - -Fl_Input *i18n_pos_include_input=(Fl_Input *)0; - -static void cb_i18n_pos_include_input(Fl_Input* o, void* v) { - if (v == LOAD) { - o->value(g_project.i18n_pos_include.c_str()); - } else { - undo_checkpoint(); - g_project.i18n_pos_include = o->value(); - set_modflag(1); - } -} - -Fl_Input *i18n_pos_conditional_input=(Fl_Input *)0; - -static void cb_i18n_pos_conditional_input(Fl_Input* o, void* v) { - if (v == LOAD) { - o->value(g_project.i18n_pos_conditional.c_str()); - } else { - undo_checkpoint(); - g_project.i18n_pos_conditional = o->value(); - set_modflag(1); - } -} - -Fl_Input *i18n_pos_file_input=(Fl_Input *)0; - -static void cb_i18n_pos_file_input(Fl_Input* o, void* v) { - if (v == LOAD) { - o->value(g_project.i18n_pos_file.c_str()); - } else { - undo_checkpoint(); - g_project.i18n_pos_file = o->value(); - set_modflag(1); - } -} - -static void cb_c(Fl_Group* o, void* v) { - propagate_load(o, v); -} - -Fl_Int_Input *i18n_pos_set_input=(Fl_Int_Input *)0; - -static void cb_i18n_pos_set_input(Fl_Int_Input* o, void* v) { - if (v == LOAD) { - o->value(g_project.i18n_pos_set.c_str()); - } else { - undo_checkpoint(); - g_project.i18n_pos_set = o->value(); - set_modflag(1); - } -} - -Fl_Group *w_settings_user_tab=(Fl_Group *)0; - -static void cb_w_settings_user_tab(Fl_Group* o, void* v) { - propagate_load(o, v); -} - -static const unsigned char idata_user_circle_64[] = -{137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,96,0,0,0,64,8,6,0,0,0, -229,52,114,14,0,0,1,110,105,67,67,80,105,99,99,0,0,40,145,117,145,187,75,195,80, -20,198,127,182,74,69,171,14,138,136,56,68,80,113,168,32,10,226,168,117,232,82, -164,212,10,190,150,38,77,91,161,143,144,180,72,113,21,92,28,10,14,162,139,175, -193,255,64,87,193,85,65,16,20,65,196,205,221,215,34,18,207,53,66,69,244,134,155, -243,227,187,247,59,156,124,1,95,52,103,228,157,250,9,200,23,74,118,60,18,214, -230,230,23,180,192,35,65,90,233,100,132,222,164,225,88,147,177,88,148,127,215, -219,53,117,170,94,13,169,94,255,223,251,115,53,167,76,199,128,186,70,225,49,195, -178,75,194,50,13,209,149,146,165,120,67,184,195,200,38,83,194,123,194,33,91,6, -20,62,87,186,238,241,131,226,140,199,47,138,237,68,124,10,124,170,167,150,249, -193,250,15,54,178,118,94,120,80,184,47,159,43,27,223,243,168,47,9,154,133,217, -25,169,221,178,123,112,136,19,33,140,134,78,153,101,114,148,24,146,90,144,204, -254,246,13,127,249,166,41,138,199,144,183,69,5,91,28,25,178,226,13,137,90,150, -174,166,212,180,232,166,60,57,42,42,247,223,121,58,233,209,17,175,123,48,12,13, -247,174,251,220,15,129,77,248,168,186,238,251,190,235,126,28,128,255,14,78,11, -53,127,81,114,26,127,21,189,90,211,250,118,161,109,13,142,207,106,154,190,5,39, -235,208,117,107,37,237,228,151,228,151,237,75,167,225,233,8,90,230,161,253,18, -154,22,189,172,190,207,57,188,129,196,170,252,162,11,216,222,129,1,185,223,182, -244,9,79,172,104,46,25,119,193,26,0,0,0,9,112,72,89,115,0,0,59,14,0,0,59,14,1, -204,182,161,131,0,0,13,125,73,68,65,84,120,94,213,156,9,236,86,197,17,192,7,4, -20,177,10,8,2,162,96,16,209,130,40,136,82,4,27,174,214,139,195,8,8,166,73,1,5, -194,77,75,64,1,141,28,81,74,72,56,203,101,61,138,130,137,82,3,104,64,52,16,16, -218,130,28,22,149,163,9,1,4,148,163,30,92,162,92,94,157,223,203,247,253,243,142, -125,223,187,246,195,63,147,108,248,243,190,221,217,153,157,221,217,217,217,153, -45,35,25,225,231,159,127,206,136,193,220,188,76,153,50,21,244,151,22,90,218, -106,249,173,150,134,90,106,197,236,236,136,214,251,175,150,127,105,89,163,101, -147,210,121,62,102,219,68,213,148,206,68,245,173,87,70,0,182,138,18,87,86,203, -239,181,44,208,114,74,11,210,181,81,192,5,206,223,209,135,45,122,139,53,249,18, -9,201,6,51,218,225,229,90,254,164,229,128,165,1,47,36,52,250,24,166,165,162, -37,218,19,141,151,245,202,89,152,80,98,202,107,25,169,229,139,11,48,240,126, -161,252,79,251,28,14,13,25,121,200,52,166,153,21,88,218,101,168,186,179,141,82, -62,71,11,186,61,18,174,184,226,10,169,87,175,158,220,120,227,141,114,237,181, -215,202,149,87,94,41,149,42,85,114,218,125,247,221,119,242,205,55,223,200,161, -67,135,228,211,79,63,117,202,183,223,126,27,137,51,87,97,167,254,59,72,249,248, -103,220,6,238,122,89,247,128,11,46,0,37,248,50,101,96,154,150,1,90,66,251,47,91, -182,172,180,108,217,82,218,181,107,39,119,223,125,183,52,108,216,80,248,22,7, -126,250,233,39,217,185,115,167,108,216,176,65,214,172,89,35,27,55,110,20,190,21, -0,86,7,147,97,164,10,226,92,156,62,242,117,46,42,1,40,177,13,148,240,69,90, -154,132,49,89,163,70,13,233,213,171,151,116,235,214,77,106,213,138,107,244,20, -30,178,195,135,15,203,226,197,139,229,213,87,95,149,47,190,64,219,133,194,86, -253,165,135,10,97,79,92,33,92,52,2,80,66,239,81,166,150,105,169,108,98,174,118, -237,218,50,100,200,16,233,222,189,187,84,168,128,5,106,31,206,159,63,47,139,22, -45,146,89,179,102,201,145,35,88,170,70,56,166,95,59,169,16,54,196,161,224,162, -16,128,18,217,81,153,249,135,150,138,126,166,202,149,43,39,61,123,246,148,39, -158,120,66,208,243,23,2,206,156,57,35,243,230,205,147,217,179,103,203,247,223, -127,111,234,18,53,244,7,21,194,146,40,122,74,189,0,148,192,206,202,196,98,45, -229,252,204,176,169,206,157,59,87,26,53,106,20,197,103,81,126,223,190,125,187, -12,26,52,72,246,239,223,111,194,143,100,186,168,16,150,23,234,60,171,0,226,237, -106,41,217,87,226,56,193,190,97,26,252,78,157,58,201,59,239,188,243,139,13,62, -44,53,110,220,88,222,125,247,93,233,208,161,131,137,67,76,228,69,202,67,203, -148,236,199,106,86,52,43,40,183,225,110,82,42,2,58,191,95,191,126,242,204,51, -207,72,218,217,115,236,216,49,217,189,123,119,137,30,103,179,110,208,160,129,84, -169,82,37,22,211,254,74,88,72,207,62,251,172,188,244,210,75,166,246,236,9,205, -117,37,236,53,253,152,150,135,60,174,162,8,32,103,106,126,160,157,4,172,29,116, -253,176,97,28,68,147,1,231,141,101,203,150,201,194,133,11,101,203,150,45,242, -227,143,63,122,16,92,114,201,37,114,215,93,119,57,251,73,199,142,29,83,9,119, -230,204,153,50,101,202,20,19,97,255,209,143,173,76,38,106,105,21,192,92,37,120, -160,159,19,102,254,216,177,99,147,141,188,214,70,71,15,30,60,88,182,109,219,22, -171,109,211,166,77,157,13,182,78,157,58,177,234,187,43,77,152,48,33,108,37,204, -86,1,12,245,35,44,117,2,200,157,112,241,64,122,86,23,58,127,206,156,57,137,103, -38,179,189,79,159,62,114,252,248,241,68,131,89,181,106,85,121,249,229,151,229, -206,59,239,76,212,14,117,196,198,204,254,228,3,14,107,109,252,39,230,82,37,0,37, -6,75,135,195,76,99,55,241,55,220,112,131,179,217,37,53,51,63,255,252,115,71, -157,160,243,211,64,229,202,149,29,181,69,255,73,0,215,6,27,243,222,189,1,181, -143,219,162,169,10,161,196,118,45,109,2,24,161,4,122,148,40,118,254,242,229,203, -19,91,59,232,124,86,205,39,159,124,18,24,59,4,217,166,77,27,103,227,5,118,237, -218,37,235,214,173,51,250,127,238,184,227,14,121,235,173,183,18,175,60,76,212, -206,157,59,203,15,63,252,224,239,127,184,210,54,35,255,49,171,0,2,182,121,146, -153,226,174,171,132,224,82,126,210,223,190,127,255,254,137,7,31,28,8,205,52,248, -247,221,119,159,140,26,53,202,113,198,185,225,228,201,147,50,121,242,100,89,185, -114,165,231,251,214,173,91,29,117,194,74,74,2,152,168,143,63,254,184,188,240, -194,11,254,102,163,149,215,191,169,16,206,36,193,23,86,215,230,57,160,175,118, -114,141,187,35,220,11,105,44,30,112,224,183,241,3,131,255,220,115,207,5,6,159, -122,87,93,117,149,76,156,56,81,238,189,247,222,64,187,5,11,184,139,73,14,195, -135,15,151,154,53,107,250,27,214,208,15,125,146,99,51,183,176,34,0,157,17,224, -65,253,120,0,223,206,229,151,179,48,146,1,58,255,195,15,63,244,52,66,237,48, -243,11,45,121,126,163,78,222,77,157,71,192,70,126,226,196,137,100,68,104,109, -250,28,58,52,96,248,128,103,100,142,231,196,56,253,13,172,8,64,145,182,215,226, -177,249,170,87,175,46,143,60,242,72,42,2,209,233,126,59,31,157,239,87,59,38,228, -172,4,234,186,1,61,14,206,52,208,163,71,15,193,67,235,131,186,250,127,111,39, -105,144,107,27,91,2,248,163,191,127,244,231,165,151,94,154,138,44,147,203,56, -191,225,198,65,120,211,77,55,5,170,69,184,161,67,209,194,3,135,59,3,4,120,142, -67,155,245,21,160,75,145,81,126,216,141,152,139,147,174,93,187,166,161,199,105, -99,82,51,17,23,42,158,190,210,222,210,133,17,220,165,75,23,19,77,93,149,78,252, -69,153,192,198,10,248,141,82,224,241,35,115,147,149,229,50,229,154,107,60,123, -185,195,224,158,61,177,239,72,28,63,145,31,12,106,36,246,192,93,119,221,117,210, -188,121,115,127,253,95,233,135,192,199,216,72,115,21,109,8,160,157,191,83,174, -17,179,192,45,183,220,34,248,118,220,176,118,237,90,193,212,140,2,54,91,206,4, -110,224,44,114,243,205,55,71,53,45,248,123,8,79,217,24,213,30,109,8,0,151,179,7, -184,195,205,2,120,53,113,172,185,129,75,118,236,252,66,234,133,223,38,77,154, -228,92,210,187,129,217,203,169,56,11,220,115,15,23,122,1,8,240,158,180,15,27,2, -248,181,187,83,76,55,46,208,179,130,105,227,227,144,245,244,211,79,27,87,2,51, -127,244,232,209,178,122,245,234,64,215,33,155,104,34,18,185,52,242,155,183,138, -32,51,163,153,221,209,74,132,39,54,241,246,219,111,119,78,177,89,129,217,252, -208,67,15,201,71,31,125,20,64,197,64,180,110,221,186,68,173,228,93,17,254,153, -79,67,156,113,75,150,44,73,236,138,48,209,255,224,131,15,10,46,10,23,192,123, -166,73,108,205,21,145,39,138,184,29,27,128,37,196,117,37,46,132,163,71,143,122, -80,50,208,43,86,172,112,74,33,64,149,225,227,207,234,175,201,247,193,21,170,79, -0,153,39,112,38,233,153,152,39,104,202,22,96,125,224,82,198,181,156,20,104, -243,202,43,175,164,186,19,8,235,11,122,108,131,117,1,36,117,57,71,49,212,172,89, -51,199,165,140,87,51,46,160,118,112,192,37,105,19,7,183,97,15,136,211,172,96, -29,235,2,40,6,145,220,108,225,82,38,148,4,11,11,179,210,15,124,227,252,241,252, -243,207,59,58,191,24,179,213,246,228,130,7,235,123,64,230,41,17,130,0,61,206, -126,64,225,118,140,195,22,17,111,124,207,95,202,103,53,53,139,69,123,33,188,214, -5,96,178,68,108,51,198,230,106,56,153,218,238,38,128,47,65,192,111,108,90,172, -171,160,98,16,25,155,155,34,87,44,6,111,214,87,0,33,226,197,132,211,167,79,59, -234,135,59,131,252,69,61,43,2,171,7,47,104,154,251,135,184,244,22,131,55,235,2, -48,92,100,199,229,47,180,30,97,41,47,190,248,162,188,255,254,251,114,240,224, -193,80,119,4,251,193,245,215,95,47,109,219,182,21,66,96,234,214,197,109,111,15, -200,59,240,65,230,4,185,204,7,9,37,232,176,150,146,56,114,44,5,98,243,227,198, -242,23,26,30,240,112,195,69,60,80,82,23,51,194,224,84,142,255,200,134,107,132, -11,34,220,17,190,61,142,229,158,233,112,96,99,15,32,27,177,4,208,147,12,92,22, -56,123,246,172,60,245,212,83,242,192,3,15,56,23,243,73,7,159,190,105,243,241, -199,31,203,253,247,223,47,99,198,140,145,115,231,18,229,93,4,200,223,177,99,71, -192,201,167,149,60,188,167,225,217,134,0,72,5,245,192,7,31,16,149,152,14,208, -235,248,92,8,65,76,51,240,1,29,161,130,120,237,181,215,132,11,253,175,191,254, -58,29,81,218,106,253,250,245,166,182,169,210,154,220,136,108,168,32,92,178,30, -66,90,181,106,37,111,188,65,80,116,50,192,174,103,214,23,10,196,226,98,133,208, -67,14,90,220,255,2,220,19,16,196,133,227,238,203,47,191,12,237,180,90,181,106, -78,128,152,33,210,33,146,80,50,118,54,109,34,214,216,3,173,244,127,177,18,57, -194,58,176,33,0,210,89,240,150,149,220,138,161,255,89,5,73,252,66,232,214,246, -237,219,59,137,118,126,0,31,225,38,143,62,250,168,220,122,235,173,5,7,11,103,25, -194,199,117,109,90,65,108,210,171,86,173,50,185,150,67,241,178,241,115,202,246, -225,227,118,168,186,22,99,134,71,164,68,115,21,50,171,32,37,138,12,116,79,38,9, -247,183,228,100,37,129,199,30,123,204,56,248,184,33,8,27,39,30,40,106,240,233, -143,128,42,226,131,176,154,76,193,185,172,20,98,77,147,0,174,13,131,48,23,187, -67,20,147,224,115,215,205,44,128,28,178,133,126,2,230,207,159,47,108,166,113, -96,233,210,165,206,138,241,3,170,6,143,230,109,183,221,22,7,141,167,78,147,38, -77,4,26,76,109,209,231,111,191,253,118,44,156,108,222,33,129,93,1,158,99,33, -244,85,178,37,0,162,161,63,115,227,254,234,171,175,228,205,55,223,140,164,233, -212,169,83,142,149,226,7,14,85,248,242,227,196,2,133,117,194,30,65,66,30,126, -124,63,96,222,198,57,217,190,254,250,235,166,204,202,253,138,47,243,6,12,77,86, -4,160,75,145,36,220,169,126,38,97,62,202,55,132,247,210,95,135,211,236,212, -169,83,173,156,106,241,206,78,159,62,61,128,139,62,233,187,16,32,32,242,12,12, -48,37,199,115,228,4,139,170,96,69,0,185,78,136,98,245,228,126,146,10,58,99,70, -73,32,113,128,22,150,55,23,46,126,32,62,63,201,6,30,197,36,49,170,3,6,144,23, -238,5,246,137,66,106,114,218,180,105,166,217,207,19,7,127,143,234,51,238,239, -214,4,160,51,2,133,31,200,239,97,3,245,93,227,149,208,134,107,193,63,251,25,44, -194,1,109,3,56,253,66,197,175,68,184,139,9,56,125,179,135,24,224,47,182,34,163, -173,169,32,23,145,127,213,191,61,121,68,196,101,50,163,209,245,126,48,221,213, -226,195,241,199,4,217,16,6,201,223,36,6,198,161,129,119,39,6,14,28,104,202,13, -216,161,237,11,235,173,132,196,90,91,1,244,171,51,131,108,6,194,137,61,78,42, -156,105,36,231,249,195,11,113,154,229,55,72,108,125,254,38,41,34,73,24,98,92, -126,241,229,112,135,128,153,90,191,126,125,105,209,162,133,211,31,52,184,129, -190,71,140,24,33,159,125,230,177,41,28,246,180,12,180,97,122,186,251,203,124,16, -51,29,118,116,102,207,210,78,134,248,7,167,111,223,190,50,110,220,56,207,103, -102,27,106,136,213,192,204,47,198,224,187,59,164,143,124,228,53,127,95,125,245, -213,158,168,9,146,8,67,84,207,76,229,245,207,113,86,80,220,73,81,12,21,148,239, -155,55,128,200,21,243,0,251,1,166,101,30,80,79,60,27,192,236,71,0,89,6,159,246, -224,193,130,66,221,132,169,49,119,216,59,127,187,247,32,172,165,144,193,223,162, -52,7,178,127,146,12,116,88,221,162,172,0,58,211,1,169,175,255,224,60,9,196,148, -176,18,208,199,188,211,144,38,113,194,179,132,115,43,199,180,159,32,224,40,135, -30,2,195,84,29,63,126,124,216,224,227,102,33,81,59,112,25,144,227,51,147,28, -138,38,128,28,113,164,249,175,210,18,72,147,193,227,137,173,143,25,232,79,198, -200,196,81,130,198,172,24,226,255,209,249,239,189,247,158,169,229,105,253,216, -94,7,127,99,232,12,206,248,104,95,81,5,144,19,2,217,113,248,138,2,177,244,164, -143,114,24,194,103,195,83,50,134,140,196,4,195,25,191,42,171,165,98,197,138,114, -224,192,1,33,137,208,176,225,130,12,39,219,195,58,248,129,132,97,255,10,140,223, -115,176,102,209,5,224,18,2,15,53,5,86,130,251,185,26,234,70,157,156,211,50,203, -108,47,95,190,188,51,240,172,56,4,95,224,185,26,102,126,247,168,193,47,245,42, -200,55,83,80,71,60,216,100,140,51,196,71,79,66,28,15,54,1,172,6,27,234,137,217, -78,188,16,27,51,248,112,85,51,240,5,82,150,208,249,29,11,169,157,139,110,5,228, -9,214,193,32,114,151,149,208,44,108,38,147,29,211,187,119,111,33,45,136,83,49, -179,21,75,41,169,48,24,120,86,23,27,44,142,65,92,202,120,86,249,187,0,96,237, -240,100,217,190,184,43,45,107,224,239,5,81,65,190,25,67,78,25,46,139,193,90,10, -62,218,199,193,137,204,20,110,216,184,16,71,24,249,187,93,172,27,204,86,10,127, -163,98,242,129,0,12,60,41,77,60,218,71,190,192,230,205,155,163,172,33,14,89,156, -226,159,204,221,111,196,29,255,204,145,215,23,92,0,174,213,192,85,38,175,170,20, -190,226,202,53,96,38,115,114,165,224,211,193,213,236,126,182,146,107,73,110,211, -246,237,219,231,60,91,153,96,47,193,117,50,88,7,254,223,177,71,221,85,49,235,10, -72,211,167,167,13,179,47,109,81,68,88,70,188,152,139,23,213,198,19,197,73,112, -16,78,195,195,69,229,210,210,31,117,198,200,60,184,113,16,100,33,62,223,86,251, -225,49,63,92,23,232,222,36,131,152,166,46,125,160,254,46,179,68,123,156,97,42, -94,29,27,76,184,4,129,115,16,239,24,126,96,46,189,211,12,176,169,13,239,20,224, -195,7,119,169,122,188,251,23,219,3,162,166,68,46,9,154,60,92,82,65,243,207,215, -215,142,106,151,251,157,208,10,130,166,184,54,228,186,116,115,206,83,27,179,121, -252,106,89,247,128,255,3,60,207,245,248,165,38,113,147,0,0,0,0,73,69,78,68,174, -66,96,130}; -static Fl_Image *image_user_circle_64() { - static Fl_Image *image = NULL; - if (!image) - image = new Fl_PNG_Image("user_circle_64.png", idata_user_circle_64, 3909); - return image; -} - -static void cb_Close(Fl_Button*, void*) { - if (g_shell_config) - g_shell_config->write(fluid_prefs, FD_STORE_USER); - g_layout_list.write(fluid_prefs, FD_STORE_USER); - settings_window->hide(); -} - -Fl_Double_Window* make_settings_window() { - { settings_window = new Fl_Double_Window(340, 580, "FLUID Settings"); - settings_window->align(Fl_Align(FL_ALIGN_CLIP|FL_ALIGN_INSIDE)); - { w_settings_tabs = new Fl_Tabs(10, 10, 320, 530); - w_settings_tabs->selection_color((Fl_Color)12); - w_settings_tabs->labelsize(11); - w_settings_tabs->labelcolor(FL_WHITE); - w_settings_tabs->callback((Fl_Callback*)cb_w_settings_tabs); - { Fl_Group* o = new Fl_Group(10, 60, 320, 480, "General"); - o->image( image_general_64() ); - o->image()->scale(36, 24, 0, 1); - o->labelsize(11); - { Fl_Group* o = new Fl_Group(120, 78, 130, 25); - o->callback((Fl_Callback*)cb_); - { scheme_choice = new Fl_Scheme_Choice(120, 78, 120, 25, "Scheme: "); - scheme_choice->box(FL_UP_BOX); - scheme_choice->down_box(FL_BORDER_BOX); - scheme_choice->color(FL_BACKGROUND_COLOR); - scheme_choice->selection_color(FL_SELECTION_COLOR); - scheme_choice->labeltype(FL_NORMAL_LABEL); - scheme_choice->labelfont(1); - scheme_choice->labelsize(11); - scheme_choice->labelcolor(FL_FOREGROUND_COLOR); - scheme_choice->callback((Fl_Callback*)scheme_cb); - scheme_choice->align(Fl_Align(FL_ALIGN_LEFT)); - scheme_choice->when(FL_WHEN_RELEASE); - init_scheme(); - } // Fl_Scheme_Choice* scheme_choice - { Fl_Box* o = new Fl_Box(240, 78, 10, 25); - o->hide(); - Fl_Group::current()->resizable(o); - } // Fl_Box* o - o->end(); - } // Fl_Group* o - { Fl_Box* o = new Fl_Box(120, 115, 0, 20, "Options: "); - o->labelfont(1); - o->labelsize(11); - o->align(Fl_Align(FL_ALIGN_LEFT)); - } // Fl_Box* o - { tooltips_button = new Fl_Check_Button(120, 115, 200, 20, "Show Tooltips"); - tooltips_button->down_box(FL_DOWN_BOX); - tooltips_button->labelsize(11); - tooltips_button->callback((Fl_Callback*)cb_tooltips_button); - int b; - fluid_prefs.get("show_tooltips", b, 1); - tooltips_button->value(b); - Fl_Tooltip::enable(b); - } // Fl_Check_Button* tooltips_button - { completion_button = new Fl_Check_Button(120, 135, 200, 20, "Show Completion Dialogs"); - completion_button->down_box(FL_DOWN_BOX); - completion_button->labelsize(11); - completion_button->callback((Fl_Callback*)cb_completion_button); - int b; - fluid_prefs.get("show_completion_dialogs", b, 1); - completion_button->value(b); - } // Fl_Check_Button* completion_button - { openlast_button = new Fl_Check_Button(120, 155, 200, 20, "Open Previous File on Startup"); - openlast_button->down_box(FL_DOWN_BOX); - openlast_button->labelsize(11); - openlast_button->callback((Fl_Callback*)cb_openlast_button); - int b; - fluid_prefs.get("open_previous_file", b, 0); - openlast_button->value(b); - } // Fl_Check_Button* openlast_button - { prevpos_button = new Fl_Check_Button(120, 175, 200, 20, "Remember Window Positions"); - prevpos_button->down_box(FL_DOWN_BOX); - prevpos_button->labelsize(11); - prevpos_button->callback((Fl_Callback*)cb_prevpos_button); - int b; - fluid_prefs.get("prev_window_pos", b, 1); - prevpos_button->value(b); - } // Fl_Check_Button* prevpos_button - { show_comments_button = new Fl_Check_Button(120, 195, 200, 20, "Show Comments in Browser"); - show_comments_button->down_box(FL_DOWN_BOX); - show_comments_button->labelsize(11); - show_comments_button->callback((Fl_Callback*)cb_show_comments_button); - fluid_prefs.get("show_comments", show_comments, 1); - show_comments_button->value(show_comments); - } // Fl_Check_Button* show_comments_button - { Fl_Group* o = new Fl_Group(120, 225, 50, 20); - o->callback((Fl_Callback*)cb_1); - { recent_spinner = new Fl_Spinner(120, 225, 40, 20, "# Recent Files:"); - recent_spinner->labelfont(1); - recent_spinner->labelsize(11); - recent_spinner->maximum(10); - recent_spinner->textsize(11); - recent_spinner->callback((Fl_Callback*)cb_recent_spinner); - recent_spinner->when(FL_WHEN_CHANGED); - int c; - fluid_prefs.get("recent_files", c, 5); - recent_spinner->maximum(10); - recent_spinner->value(c); - } // Fl_Spinner* recent_spinner - { Fl_Box* o = new Fl_Box(160, 225, 10, 20); - o->hide(); - Fl_Group::current()->resizable(o); - } // Fl_Box* o - o->end(); - } // Fl_Group* o - { use_external_editor_button = new Fl_Check_Button(120, 275, 200, 20, "Use for Code Nodes"); - use_external_editor_button->down_box(FL_DOWN_BOX); - use_external_editor_button->labelsize(11); - use_external_editor_button->callback((Fl_Callback*)cb_use_external_editor_button); - fluid_prefs.get("use_external_editor", G_use_external_editor, 0); - use_external_editor_button->value(G_use_external_editor); - } // Fl_Check_Button* use_external_editor_button - { editor_command_input = new Fl_Input(120, 255, 200, 20, "External Editor:"); - editor_command_input->tooltip("The editor command to open your external text editor.\nInclude any necessary \ -flags to ensure your editor does not background itself.\nExamples:\n gvim -\ -f\n gedit\n emacs"); - editor_command_input->labelfont(1); - editor_command_input->labelsize(11); - editor_command_input->textfont(4); - editor_command_input->textsize(11); - editor_command_input->callback((Fl_Callback*)cb_editor_command_input); - editor_command_input->when(FL_WHEN_CHANGED); - fluid_prefs.get("external_editor_command", G_external_editor_command, "", sizeof(G_external_editor_command)-1); - editor_command_input->value(G_external_editor_command); - } // Fl_Input* editor_command_input - { Fl_Box* o = new Fl_Box(120, 300, 0, 20, "Overlays: "); - o->labelfont(1); - o->labelsize(11); - o->align(Fl_Align(FL_ALIGN_LEFT)); - } // Fl_Box* o - { Fl_Check_Button* o = guides_button = new Fl_Check_Button(120, 300, 200, 20, "Show Positioning Guides"); - guides_button->tooltip("show guides that help to position and resize widgets and enable snapping"); - guides_button->down_box(FL_DOWN_BOX); - guides_button->labelsize(11); - guides_button->callback((Fl_Callback*)toggle_guides_cb); - o->value(show_guides); - } // Fl_Check_Button* guides_button - { Fl_Check_Button* o = restricted_button = new Fl_Check_Button(120, 320, 200, 20, "Show Restricted Areas"); - restricted_button->tooltip("show overlapping and out of bounds areas, show unfilled areas in Fl_Pack grou\ -ps"); - restricted_button->down_box(FL_DOWN_BOX); - restricted_button->labelsize(11); - restricted_button->callback((Fl_Callback*)toggle_restricted_cb); - o->value(show_restricted); - } // Fl_Check_Button* restricted_button - { Fl_Check_Button* o = ghosted_outline_button = new Fl_Check_Button(120, 340, 200, 20, "Show Ghosted Group Outlines"); - ghosted_outline_button->tooltip("groups with no box type or flat boxtypes without contrast will be rendered wi\ -th a dim outline in the editing window only"); - ghosted_outline_button->down_box(FL_DOWN_BOX); - ghosted_outline_button->labelsize(11); - ghosted_outline_button->callback((Fl_Callback*)toggle_ghosted_outline_cb); - o->value(show_ghosted_outline); - } // Fl_Check_Button* ghosted_outline_button - { Fl_Box* o = new Fl_Box(120, 530, 200, 10); - o->hide(); - Fl_Group::current()->resizable(o); - } // Fl_Box* o - o->end(); - Fl_Group::current()->resizable(o); - } // Fl_Group* o - { w_settings_project_tab = new Fl_Group(10, 60, 320, 480, "Project"); - w_settings_project_tab->image( image_document_64() ); - w_settings_project_tab->image()->scale(36, 24, 0, 1); - w_settings_project_tab->labelsize(11); - w_settings_project_tab->callback((Fl_Callback*)cb_w_settings_project_tab); - w_settings_project_tab->hide(); - { Fl_Group* o = new Fl_Group(100, 78, 220, 30); - { Fl_Box* o = new Fl_Box(100, 78, 210, 30, "Use \"name.ext\" to set a file name\nor just \".ext\" to set extension."); - o->labelsize(11); - o->align(Fl_Align(132|FL_ALIGN_INSIDE)); - } // Fl_Box* o - { Fl_Box* o = new Fl_Box(310, 78, 10, 30); - o->hide(); - Fl_Group::current()->resizable(o); - } // Fl_Box* o - o->end(); - } // Fl_Group* o - { header_file_input = new Fl_Input(100, 112, 220, 20, "Header File:"); - header_file_input->tooltip("The name of the generated header file."); - header_file_input->box(FL_THIN_DOWN_BOX); - header_file_input->labelfont(1); - header_file_input->labelsize(11); - header_file_input->textfont(4); - header_file_input->textsize(11); - header_file_input->callback((Fl_Callback*)cb_header_file_input, (void*)(1)); - header_file_input->when(FL_WHEN_CHANGED); - } // Fl_Input* header_file_input - { code_file_input = new Fl_Input(100, 137, 220, 20, "Code File:"); - code_file_input->tooltip("The name of the generated code file."); - code_file_input->box(FL_THIN_DOWN_BOX); - code_file_input->labelfont(1); - code_file_input->labelsize(11); - code_file_input->textfont(4); - code_file_input->textsize(11); - code_file_input->callback((Fl_Callback*)cb_code_file_input, (void*)(1)); - code_file_input->when(FL_WHEN_CHANGED); - } // Fl_Input* code_file_input - { include_H_from_C_button = new Fl_Check_Button(100, 162, 220, 20, "Include Header from Code"); - include_H_from_C_button->tooltip("Include the header file from the code file."); - include_H_from_C_button->down_box(FL_DOWN_BOX); - include_H_from_C_button->labelsize(11); - include_H_from_C_button->callback((Fl_Callback*)cb_include_H_from_C_button); - } // Fl_Check_Button* include_H_from_C_button - { Fl_Box* o = new Fl_Box(100, 205, 0, 20, "Options: "); - o->labelfont(1); - o->labelsize(11); - o->align(Fl_Align(FL_ALIGN_LEFT)); - } // Fl_Box* o - { use_FL_COMMAND_button = new Fl_Check_Button(100, 205, 220, 20, "Menu shortcuts use FL_COMMAND"); - use_FL_COMMAND_button->tooltip("Replace FL_CTRL and FL_META with FL_COMMAND when generating menu shortcuts"); - use_FL_COMMAND_button->down_box(FL_DOWN_BOX); - use_FL_COMMAND_button->labelsize(11); - use_FL_COMMAND_button->callback((Fl_Callback*)cb_use_FL_COMMAND_button); - } // Fl_Check_Button* use_FL_COMMAND_button - { utf8_in_src_button = new Fl_Check_Button(100, 230, 220, 20, "allow Unicode UTF-8 in source code"); - utf8_in_src_button->tooltip("For older compilers, characters outside of the printable ASCII range are esca\ -ped using octal notation `\\0123`. If this option is checked, Fluid will write\ - UTF-8 characters unchanged."); - utf8_in_src_button->down_box(FL_DOWN_BOX); - utf8_in_src_button->labelsize(11); - utf8_in_src_button->callback((Fl_Callback*)cb_utf8_in_src_button); - } // Fl_Check_Button* utf8_in_src_button - { avoid_early_includes_button = new Fl_Check_Button(100, 255, 220, 20, "avoid early include of Fl.H"); - avoid_early_includes_button->tooltip("Do not emit #include until it is needed by another include file."); - avoid_early_includes_button->down_box(FL_DOWN_BOX); - avoid_early_includes_button->labelsize(11); - avoid_early_includes_button->callback((Fl_Callback*)cb_avoid_early_includes_button); - } // Fl_Check_Button* avoid_early_includes_button - { Fl_Box* o = new Fl_Box(100, 283, 0, 20, "Experimental: "); - o->labelfont(1); - o->labelsize(11); - o->align(Fl_Align(FL_ALIGN_LEFT)); - o->hide(); - } // Fl_Box* o - { // // Matt: disabled - w_proj_mergeback = new Fl_Check_Button(100, 283, 220, 20, "generate MergeBack data"); - w_proj_mergeback->tooltip("MergeBack is a feature under construction that allows changes in code files t\ -o be merged back into the project file. Checking this option will generate add\ -itional data in code and project files."); - w_proj_mergeback->down_box(FL_DOWN_BOX); - w_proj_mergeback->labelsize(11); - w_proj_mergeback->callback((Fl_Callback*)cb_w_proj_mergeback); - w_proj_mergeback->hide(); - } // Fl_Check_Button* w_proj_mergeback - { Fl_Box* o = new Fl_Box(100, 530, 220, 10); - o->hide(); - Fl_Group::current()->resizable(o); - } // Fl_Box* o - w_settings_project_tab->end(); - } // Fl_Group* w_settings_project_tab - { w_settings_layout_tab = new Fl_Group(10, 60, 320, 480, "Layout"); - w_settings_layout_tab->image( image_layout_64() ); - w_settings_layout_tab->image()->scale(36, 24, 0, 1); - w_settings_layout_tab->labelsize(11); - w_settings_layout_tab->callback((Fl_Callback*)cb_w_settings_layout_tab); - w_settings_layout_tab->hide(); - { Fl_Box* o = new Fl_Box(25, 78, 60, 24, "Layout:"); - o->labelfont(1); - o->labelsize(11); - o->align(Fl_Align(FL_ALIGN_RIGHT|FL_ALIGN_INSIDE)); - } // Fl_Box* o - { layout_choice = new Fl_Choice(85, 78, 187, 24); - layout_choice->down_box(FL_BORDER_BOX); - layout_choice->callback((Fl_Callback*)cb_layout_choice); - layout_choice->menu(menu_layout_choice); - } // Fl_Choice* layout_choice - { Fl_Button* o = new Fl_Button(272, 78, 24, 24, "+"); - o->callback((Fl_Callback*)cb_2); - } // Fl_Button* o - { w_layout_menu = new Fl_Menu_Button(296, 78, 24, 24); - w_layout_menu->callback((Fl_Callback*)cb_w_layout_menu); - w_layout_menu_storage[0] = &menu_w_layout_menu[1]; - w_layout_menu_storage[1] = &menu_w_layout_menu[2]; - w_layout_menu_storage[2] = &menu_w_layout_menu[3]; - w_layout_menu_storage[3] = &menu_w_layout_menu[4]; - w_layout_menu->menu(menu_w_layout_menu); - } // Fl_Menu_Button* w_layout_menu - { Fl_Box* o = new Fl_Box(25, 107, 60, 20, "Preset:"); - o->labelfont(1); - o->labelsize(11); - o->align(Fl_Align(FL_ALIGN_RIGHT|FL_ALIGN_INSIDE)); - } // Fl_Box* o - { Fl_Group* o = new Fl_Group(85, 107, 235, 20); - o->labelsize(11); - o->callback((Fl_Callback*)propagate_load); - { preset_choice[0] = new Fl_Button(85, 107, 78, 20, "Application"); - preset_choice[0]->type(102); - preset_choice[0]->value(1); - preset_choice[0]->compact(1); - preset_choice[0]->selection_color(FL_DARK2); - preset_choice[0]->labelsize(11); - preset_choice[0]->callback((Fl_Callback*)edit_layout_preset_cb, (void*)(0)); - } // Fl_Button* preset_choice[0] - { preset_choice[1] = new Fl_Button(163, 107, 79, 20, "Dialog"); - preset_choice[1]->type(102); - preset_choice[1]->compact(1); - preset_choice[1]->selection_color(FL_DARK2); - preset_choice[1]->labelsize(11); - preset_choice[1]->callback((Fl_Callback*)edit_layout_preset_cb, (void*)(1)); - } // Fl_Button* preset_choice[1] - { preset_choice[2] = new Fl_Button(242, 107, 78, 20, "Toolbox"); - preset_choice[2]->type(102); - preset_choice[2]->compact(1); - preset_choice[2]->selection_color(FL_DARK2); - preset_choice[2]->labelsize(11); - preset_choice[2]->callback((Fl_Callback*)edit_layout_preset_cb, (void*)(2)); - } // Fl_Button* preset_choice[2] - o->end(); - } // Fl_Group* o - { Fl_Box* o = new Fl_Box(85, 132, 235, 20, "---- Window ----"); - o->labelfont(1); - o->labelsize(11); - o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE)); - } // Fl_Box* o - { Fl_Box* o = new Fl_Box(25, 167, 60, 20, "Margin:"); - o->labelsize(11); - o->align(Fl_Align(FL_ALIGN_RIGHT|FL_ALIGN_INSIDE)); - } // Fl_Box* o - { Fl_Value_Input* o = new Fl_Value_Input(85, 167, 55, 20, "Left:"); - o->labelsize(11); - o->maximum(32767); - o->step(1); - o->textsize(11); - o->callback((Fl_Callback*)cb_Left); - o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); - } // Fl_Value_Input* o - { Fl_Value_Input* o = new Fl_Value_Input(145, 167, 55, 20, "Top:"); - o->labelsize(11); - o->maximum(32767); - o->step(1); - o->textsize(11); - o->callback((Fl_Callback*)cb_Top); - o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); - } // Fl_Value_Input* o - { Fl_Value_Input* o = new Fl_Value_Input(205, 167, 55, 20, "Right:"); - o->labelsize(11); - o->maximum(32767); - o->step(1); - o->textsize(11); - o->callback((Fl_Callback*)cb_Right); - o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); - } // Fl_Value_Input* o - { Fl_Value_Input* o = new Fl_Value_Input(265, 167, 55, 20, "Bottom:"); - o->labelsize(11); - o->maximum(32767); - o->step(1); - o->textsize(11); - o->callback((Fl_Callback*)cb_Bottom); - o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); - } // Fl_Value_Input* o - { Fl_Box* o = new Fl_Box(32, 201, 53, 20, "Grid:"); - o->labelsize(11); - o->align(Fl_Align(FL_ALIGN_RIGHT|FL_ALIGN_INSIDE)); - } // Fl_Box* o - { Fl_Value_Input* o = new Fl_Value_Input(85, 201, 55, 20, "Horizontal:"); - o->labelsize(11); - o->maximum(32767); - o->step(1); - o->textsize(11); - o->callback((Fl_Callback*)cb_Horizontal); - o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); - } // Fl_Value_Input* o - { Fl_Value_Input* o = new Fl_Value_Input(145, 201, 55, 20, "Vertical:"); - o->labelsize(11); - o->maximum(32767); - o->step(1); - o->textsize(11); - o->callback((Fl_Callback*)cb_Vertical); - o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); - } // Fl_Value_Input* o - { Fl_Box* o = new Fl_Box(85, 226, 235, 20, "---- Group ----"); - o->labelfont(1); - o->labelsize(11); - o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE)); - } // Fl_Box* o - { Fl_Box* o = new Fl_Box(25, 261, 60, 20, "Margin:"); - o->labelsize(11); - o->align(Fl_Align(FL_ALIGN_RIGHT|FL_ALIGN_INSIDE)); - } // Fl_Box* o - { Fl_Value_Input* o = new Fl_Value_Input(85, 261, 55, 20, "Left:"); - o->labelsize(11); - o->maximum(32767); - o->step(1); - o->textsize(11); - o->callback((Fl_Callback*)cb_Left1); - o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); - } // Fl_Value_Input* o - { Fl_Value_Input* o = new Fl_Value_Input(145, 261, 55, 20, "Top:"); - o->labelsize(11); - o->maximum(32767); - o->step(1); - o->textsize(11); - o->callback((Fl_Callback*)cb_Top1); - o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); - } // Fl_Value_Input* o - { Fl_Value_Input* o = new Fl_Value_Input(205, 261, 55, 20, "Right:"); - o->labelsize(11); - o->maximum(32767); - o->step(1); - o->textsize(11); - o->callback((Fl_Callback*)cb_Right1); - o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); - } // Fl_Value_Input* o - { Fl_Value_Input* o = new Fl_Value_Input(265, 261, 55, 20, "Bottom:"); - o->labelsize(11); - o->maximum(32767); - o->step(1); - o->textsize(11); - o->callback((Fl_Callback*)cb_Bottom1); - o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); - } // Fl_Value_Input* o - { Fl_Box* o = new Fl_Box(32, 295, 53, 20, "Grid:"); - o->labelsize(11); - o->align(Fl_Align(FL_ALIGN_RIGHT|FL_ALIGN_INSIDE)); - } // Fl_Box* o - { Fl_Value_Input* o = new Fl_Value_Input(85, 295, 55, 20, "Horizontal:"); - o->labelsize(11); - o->maximum(32767); - o->step(1); - o->textsize(11); - o->callback((Fl_Callback*)cb_Horizontal1); - o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); - } // Fl_Value_Input* o - { Fl_Value_Input* o = new Fl_Value_Input(145, 295, 55, 20, "Vertical:"); - o->labelsize(11); - o->maximum(32767); - o->step(1); - o->textsize(11); - o->callback((Fl_Callback*)cb_Vertical1); - o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); - } // Fl_Value_Input* o - { Fl_Box* o = new Fl_Box(85, 320, 235, 20, "---- Tabs ----"); - o->labelfont(1); - o->labelsize(11); - o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE)); - } // Fl_Box* o - { Fl_Box* o = new Fl_Box(25, 355, 60, 20, "Margin:"); - o->labelsize(11); - o->align(Fl_Align(FL_ALIGN_RIGHT|FL_ALIGN_INSIDE)); - } // Fl_Box* o - { Fl_Value_Input* o = new Fl_Value_Input(85, 355, 55, 20, "Top:"); - o->labelsize(11); - o->maximum(32767); - o->step(1); - o->textsize(11); - o->callback((Fl_Callback*)cb_Top2); - o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); - } // Fl_Value_Input* o - { Fl_Value_Input* o = new Fl_Value_Input(145, 355, 55, 20, "Bottom:"); - o->labelsize(11); - o->maximum(32767); - o->step(1); - o->textsize(11); - o->callback((Fl_Callback*)cb_Bottom2); - o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); - } // Fl_Value_Input* o - { Fl_Box* o = new Fl_Box(85, 380, 235, 20, "---- Widget ----"); - o->labelfont(1); - o->labelsize(11); - o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE)); - } // Fl_Box* o - { Fl_Box* o = new Fl_Box(25, 415, 60, 20, "Horizontal:"); - o->labelsize(11); - o->align(Fl_Align(FL_ALIGN_RIGHT|FL_ALIGN_INSIDE)); - } // Fl_Box* o - { Fl_Value_Input* o = new Fl_Value_Input(85, 414, 55, 20, "Minimum:"); - o->labelsize(11); - o->maximum(32767); - o->step(1); - o->textsize(11); - o->callback((Fl_Callback*)cb_Minimum); - o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); - } // Fl_Value_Input* o - { Fl_Value_Input* o = new Fl_Value_Input(145, 414, 55, 20, "Increment:"); - o->labelsize(11); - o->maximum(32767); - o->step(1); - o->textsize(11); - o->callback((Fl_Callback*)cb_Increment); - o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); - } // Fl_Value_Input* o - { Fl_Value_Input* o = new Fl_Value_Input(205, 414, 55, 20, "Gap:"); - o->labelsize(11); - o->maximum(32767); - o->step(1); - o->textsize(11); - o->callback((Fl_Callback*)cb_Gap); - o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); - } // Fl_Value_Input* o - { Fl_Box* o = new Fl_Box(32, 440, 53, 20, "Vertical:"); - o->labelsize(11); - o->align(Fl_Align(FL_ALIGN_RIGHT|FL_ALIGN_INSIDE)); - } // Fl_Box* o - { Fl_Value_Input* o = new Fl_Value_Input(85, 440, 55, 20); - o->labelsize(11); - o->maximum(32767); - o->step(1); - o->textsize(11); - o->callback((Fl_Callback*)cb_3); - } // Fl_Value_Input* o - { Fl_Value_Input* o = new Fl_Value_Input(145, 440, 55, 20); - o->labelsize(11); - o->maximum(32767); - o->step(1); - o->textsize(11); - o->callback((Fl_Callback*)cb_4); - o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); - } // Fl_Value_Input* o - { Fl_Value_Input* o = new Fl_Value_Input(205, 440, 55, 20); - o->labelsize(11); - o->maximum(32767); - o->step(1); - o->textsize(11); - o->callback((Fl_Callback*)cb_5); - o->align(Fl_Align(FL_ALIGN_TOP_LEFT)); - } // Fl_Value_Input* o - { Fl_Group* o = new Fl_Group(85, 465, 201, 20, "Label Font:"); - o->labelsize(11); - o->callback((Fl_Callback*)propagate_load); - o->align(Fl_Align(FL_ALIGN_LEFT)); - { Fl_Choice* o = new Fl_Choice(85, 465, 150, 20); - o->tooltip("The style of the label text."); - o->box(FL_THIN_UP_BOX); - o->down_box(FL_BORDER_BOX); - o->labelfont(1); - o->labelsize(11); - o->textsize(11); - o->callback((Fl_Callback*)cb_6); - Fl_Group::current()->resizable(o); - o->menu(fontmenu_w_default); - } // Fl_Choice* o - { Fl_Value_Input* o = new Fl_Value_Input(235, 465, 50, 20); - o->tooltip("The size of the label text."); - o->labelsize(11); - o->minimum(1); - o->maximum(1000); - o->step(1); - o->value(14); - o->textsize(11); - o->callback((Fl_Callback*)cb_7); - } // Fl_Value_Input* o - o->end(); - } // Fl_Group* o - { Fl_Group* o = new Fl_Group(85, 490, 200, 20, "Text Font:"); - o->labelsize(11); - o->callback((Fl_Callback*)propagate_load); - o->align(Fl_Align(FL_ALIGN_LEFT)); - { Fl_Choice* o = new Fl_Choice(85, 490, 150, 20); - o->tooltip("The value text style."); - o->box(FL_DOWN_BOX); - o->down_box(FL_BORDER_BOX); - o->labelfont(1); - o->labelsize(11); - o->textsize(11); - o->callback((Fl_Callback*)cb_8); - o->menu(fontmenu_w_default); - } // Fl_Choice* o - { Fl_Value_Input* o = new Fl_Value_Input(235, 490, 50, 20); - o->tooltip("The value text size."); - o->labelsize(11); - o->maximum(1000); - o->step(1); - o->value(14); - o->textsize(11); - o->callback((Fl_Callback*)cb_9); - } // Fl_Value_Input* o - o->end(); - } // Fl_Group* o - { Fl_Box* o = new Fl_Box(325, 535, 5, 5); - o->hide(); - Fl_Group::current()->resizable(o); - } // Fl_Box* o - w_settings_layout_tab->end(); - } // Fl_Group* w_settings_layout_tab - { w_settings_shell_tab = new Fl_Group(10, 60, 320, 480, "Shell"); - w_settings_shell_tab->image( image_shell_64() ); - w_settings_shell_tab->image()->scale(36, 24, 0, 1); - w_settings_shell_tab->labelsize(11); - w_settings_shell_tab->callback((Fl_Callback*)propagate_load); - w_settings_shell_tab->hide(); - { Fl_Group* o = new Fl_Group(10, 90, 320, 132); - o->callback((Fl_Callback*)propagate_load); - { w_settings_shell_list = new Fl_Browser(100, 90, 220, 110, "Shell\ncommand\nlist:"); - w_settings_shell_list->type(3); - w_settings_shell_list->labelfont(1); - w_settings_shell_list->labelsize(11); - w_settings_shell_list->textsize(13); - w_settings_shell_list->callback((Fl_Callback*)cb_w_settings_shell_list); - w_settings_shell_list->align(Fl_Align(FL_ALIGN_LEFT)); - Fl_Group::current()->resizable(w_settings_shell_list); - } // Fl_Browser* w_settings_shell_list - { w_settings_shell_toolbox = new Fl_Group(100, 200, 220, 22); - w_settings_shell_toolbox->callback((Fl_Callback*)cb_w_settings_shell_toolbox); - { Fl_Button* o = new Fl_Button(100, 200, 24, 22, "+"); - o->tooltip("insert a new shell command into the list after the selected command"); - o->labelfont(1); - o->labelsize(11); - o->callback((Fl_Callback*)cb_a); - } // Fl_Button* o - { w_settings_shell_dup = new Fl_Button(124, 200, 24, 22, "++"); - w_settings_shell_dup->tooltip("duplicate the selected shell command and insert it into the list"); - w_settings_shell_dup->labelfont(1); - w_settings_shell_dup->labelsize(11); - w_settings_shell_dup->callback((Fl_Callback*)cb_w_settings_shell_dup); - w_settings_shell_dup->deactivate(); - } // Fl_Button* w_settings_shell_dup - { w_settings_shell_remove = new Fl_Button(148, 200, 24, 22, "DEL"); - w_settings_shell_remove->tooltip("remove the selected shell command - this can not be undone"); - w_settings_shell_remove->labelsize(10); - w_settings_shell_remove->callback((Fl_Callback*)cb_w_settings_shell_remove); - w_settings_shell_remove->deactivate(); - } // Fl_Button* w_settings_shell_remove - { w_settings_shell_menu = new Fl_Menu_Button(172, 200, 24, 22); - w_settings_shell_menu->labelsize(11); - w_settings_shell_menu->textsize(11); - w_settings_shell_menu->menu(menu_w_settings_shell_menu); - } // Fl_Menu_Button* w_settings_shell_menu - { Fl_Box* o = new Fl_Box(253, 200, 13, 22); - o->hide(); - Fl_Group::current()->resizable(o); - } // Fl_Box* o - { Fl_Button* o = new Fl_Button(246, 200, 24, 22, "T"); - o->tooltip("show terminal window"); - o->labelfont(5); - o->labelsize(11); - o->callback((Fl_Callback*)cb_T); - } // Fl_Button* o - { w_settings_shell_play = new Fl_Button(270, 200, 50, 22, "Run"); - w_settings_shell_play->tooltip("run the selected shell command"); - w_settings_shell_play->labelsize(11); - w_settings_shell_play->callback((Fl_Callback*)cb_w_settings_shell_play); - w_settings_shell_play->deactivate(); - } // Fl_Button* w_settings_shell_play - w_settings_shell_toolbox->end(); - } // Fl_Group* w_settings_shell_toolbox - o->end(); - } // Fl_Group* o - { w_settings_shell_cmd = new Fl_Group(10, 235, 320, 291); - w_settings_shell_cmd->callback((Fl_Callback*)cb_w_settings_shell_cmd); - { Fl_Input* o = new Fl_Input(100, 246, 220, 20, "Name:"); - o->tooltip("file the shell command under this name in the shell command list"); - o->labelfont(1); - o->labelsize(11); - o->textfont(4); - o->textsize(11); - o->callback((Fl_Callback*)cb_Name); - o->when(FL_WHEN_RELEASE | FL_WHEN_CHANGED | FL_WHEN_ENTER_KEY); - } // Fl_Input* o - { Fl_Input* o = new Fl_Input(100, 272, 220, 20, "Menu Label:"); - o->tooltip("label text for the Shell menu in the main menu bar"); - o->labelfont(1); - o->labelsize(11); - o->textfont(4); - o->textsize(11); - o->callback((Fl_Callback*)cb_Menu); - } // Fl_Input* o - { Fl_Group* o = new Fl_Group(100, 297, 140, 71); - o->callback((Fl_Callback*)cb_b); - { Fl_Shortcut_Button* o = new Fl_Shortcut_Button(100, 297, 130, 20, "Shortcut"); - o->tooltip("an optional keyboard shortcut to run this shell command"); - o->box(FL_UP_BOX); - o->color(FL_BACKGROUND_COLOR); - o->selection_color(FL_BACKGROUND_COLOR); - o->labeltype(FL_NORMAL_LABEL); - o->labelfont(0); - o->labelsize(11); - o->labelcolor(FL_FOREGROUND_COLOR); - o->callback((Fl_Callback*)cb_Shortcut); - o->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); - o->when(FL_WHEN_RELEASE); - } // Fl_Shortcut_Button* o - { Fl_Choice* o = new Fl_Choice(100, 322, 130, 20, "Store:"); - o->tooltip("store this shell command as a user setting or save it with the .fl project fi\ -le"); - o->down_box(FL_BORDER_BOX); - o->labelfont(1); - o->labelsize(11); - o->textsize(11); - o->callback((Fl_Callback*)cb_Store); - o->menu(menu_Store); - } // Fl_Choice* o - { Fl_Choice* o = new Fl_Choice(100, 348, 130, 20, "Condition:"); - o->tooltip("add this command to the main menu bar only if this condition is true"); - o->down_box(FL_BORDER_BOX); - o->labelfont(1); - o->labelsize(11); - o->textsize(11); - o->callback((Fl_Callback*)cb_Condition); - o->menu(menu_Condition); - } // Fl_Choice* o - { Fl_Box* o = new Fl_Box(230, 297, 10, 71); - o->hide(); - Fl_Group::current()->resizable(o); - } // Fl_Box* o - o->end(); - } // Fl_Group* o - { Fl_Input* o = new Fl_Input(230, 348, 90, 20, "Label:"); - o->labelfont(1); - o->labelsize(11); - o->textfont(4); - o->textsize(11); - o->callback((Fl_Callback*)cb_Label); - o->hide(); - } // Fl_Input* o - { Fl_Group* o = new Fl_Group(100, 373, 220, 80); - o->callback((Fl_Callback*)propagate_load); - { Fl_Text_Editor* o = w_settings_shell_command = new Fl_Text_Editor(100, 373, 196, 80, "Shell script:"); - w_settings_shell_command->labelfont(1); - w_settings_shell_command->labelsize(11); - w_settings_shell_command->textfont(4); - w_settings_shell_command->textsize(12); - w_settings_shell_command->callback((Fl_Callback*)cb_w_settings_shell_command); - w_settings_shell_command->align(Fl_Align(FL_ALIGN_LEFT)); - Fl_Group::current()->resizable(w_settings_shell_command); - o->buffer(new Fl_Text_Buffer); - } // Fl_Text_Editor* w_settings_shell_command - { Fl_Group* o = new Fl_Group(296, 373, 24, 80); - { w_settings_shell_text_macros = new Fl_Menu_Button(296, 373, 24, 22); - w_settings_shell_text_macros->tooltip("a list of text replacements available for the shell script"); - w_settings_shell_text_macros->labelsize(11); - w_settings_shell_text_macros->textsize(11); - w_settings_shell_text_macros->callback((Fl_Callback*)cb_w_settings_shell_text_macros); - w_settings_shell_text_macros->menu(menu_w_settings_shell_text_macros); - } // Fl_Menu_Button* w_settings_shell_text_macros - { Fl_Button* o = new Fl_Button(296, 395, 24, 22, "@+1fd_zoom"); - o->tooltip("open the big code editor"); - o->labelsize(11); - o->callback((Fl_Callback*)cb_1fd_zoom); - } // Fl_Button* o - { Fl_Box* o = new Fl_Box(296, 417, 24, 10); - o->hide(); - Fl_Group::current()->resizable(o); - } // Fl_Box* o - o->end(); - } // Fl_Group* o - o->end(); - Fl_Group::current()->resizable(o); - } // Fl_Group* o - { Fl_Check_Button* o = new Fl_Check_Button(100, 458, 110, 20, "save .fl project file"); - o->tooltip("save the project to the .fl file before running the command"); - o->down_box(FL_DOWN_BOX); - o->labelsize(11); - o->callback((Fl_Callback*)cb_save); - } // Fl_Check_Button* o - { Fl_Check_Button* o = new Fl_Check_Button(100, 478, 110, 19, "save source code"); - o->tooltip("generate the source code and header file before running the command"); - o->down_box(FL_DOWN_BOX); - o->labelsize(11); - o->callback((Fl_Callback*)cb_save1); - } // Fl_Check_Button* o - { Fl_Check_Button* o = new Fl_Check_Button(100, 498, 110, 20, "save i18n strings"); - o->tooltip("save the internationalisation strings before running the command"); - o->down_box(FL_DOWN_BOX); - o->labelsize(11); - o->callback((Fl_Callback*)cb_save2); - } // Fl_Check_Button* o - { Fl_Check_Button* o = new Fl_Check_Button(214, 458, 106, 20, "show terminal"); - o->tooltip("show the terminal window when launching this script"); - o->down_box(FL_DOWN_BOX); - o->labelsize(11); - o->callback((Fl_Callback*)cb_show); - } // Fl_Check_Button* o - { Fl_Check_Button* o = new Fl_Check_Button(214, 478, 106, 19, "clear terminal"); - o->tooltip("clear the teminal window before running this script"); - o->down_box(FL_DOWN_BOX); - o->labelsize(11); - o->callback((Fl_Callback*)cb_clear); - } // Fl_Check_Button* o - { Fl_Check_Button* o = new Fl_Check_Button(214, 498, 106, 19, "clear term history"); - o->tooltip("clear the teminal history in the terminal window"); - o->down_box(FL_DOWN_BOX); - o->labelsize(11); - o->callback((Fl_Callback*)cb_clear1); - } // Fl_Check_Button* o - w_settings_shell_cmd->end(); - Fl_Group::current()->resizable(w_settings_shell_cmd); - } // Fl_Group* w_settings_shell_cmd - { Fl_Box* o = w_settings_shell_fd_project = new Fl_Box(20, 70, 16, 15); - w_settings_shell_fd_project->bind_image( image_fd_project() ); - w_settings_shell_fd_project->labelsize(11); - w_settings_shell_fd_project->hide(); - w_settings_shell_fd_project->deactivate(); - o->image()->scale(16, 16); - } // Fl_Box* w_settings_shell_fd_project - { Fl_Box* o = w_settings_shell_fd_user = new Fl_Box(20, 70, 16, 15); - w_settings_shell_fd_user->bind_image( image_fd_user() ); - w_settings_shell_fd_user->labelsize(11); - w_settings_shell_fd_user->hide(); - w_settings_shell_fd_user->deactivate(); - o->image()->scale(16, 16); - } // Fl_Box* w_settings_shell_fd_user - w_settings_shell_tab->end(); - } // Fl_Group* w_settings_shell_tab - { w_settings_i18n_tab = new Fl_Group(10, 60, 320, 480, "Locale"); - w_settings_i18n_tab->image( image_language_64() ); - w_settings_i18n_tab->image()->scale(36, 24, 0, 1); - w_settings_i18n_tab->labelsize(11); - w_settings_i18n_tab->callback((Fl_Callback*)cb_w_settings_i18n_tab); - w_settings_i18n_tab->hide(); - { Fl_Group* o = new Fl_Group(100, 78, 170, 20); - o->callback((Fl_Callback*)propagate_load); - { i18n_type_chooser = new Fl_Choice(100, 78, 160, 20, "i18n Library:"); - i18n_type_chooser->tooltip("Type of internationalization to use."); - i18n_type_chooser->box(FL_THIN_UP_BOX); - i18n_type_chooser->down_box(FL_BORDER_BOX); - i18n_type_chooser->labelsize(11); - i18n_type_chooser->textsize(11); - i18n_type_chooser->callback((Fl_Callback*)i18n_type_cb); - i18n_type_chooser->menu(menu_i18n_type_chooser); - } // Fl_Choice* i18n_type_chooser - { Fl_Box* o = new Fl_Box(260, 78, 10, 20); - o->hide(); - Fl_Group::current()->resizable(o); - } // Fl_Box* o - o->end(); - } // Fl_Group* o - { i18n_gnu_group = new Fl_Group(100, 103, 220, 95); - i18n_gnu_group->callback((Fl_Callback*)cb_i18n_gnu_group); - { i18n_gnu_include_input = new Fl_Input(100, 103, 220, 20, "#include:"); - i18n_gnu_include_input->tooltip("The include file for internationalization."); - i18n_gnu_include_input->box(FL_THIN_DOWN_BOX); - i18n_gnu_include_input->labelsize(11); - i18n_gnu_include_input->textfont(4); - i18n_gnu_include_input->textsize(11); - i18n_gnu_include_input->callback((Fl_Callback*)cb_i18n_gnu_include_input); - } // Fl_Input* i18n_gnu_include_input - { i18n_gnu_conditional_input = new Fl_Input(100, 128, 220, 20, "Conditional:"); - i18n_gnu_conditional_input->tooltip("only include the header file if this preprocessor macro is defined, for examp\ -le FLTK_GETTEXT_FOUND"); - i18n_gnu_conditional_input->box(FL_THIN_DOWN_BOX); - i18n_gnu_conditional_input->labelsize(11); - i18n_gnu_conditional_input->textfont(4); - i18n_gnu_conditional_input->textsize(11); - i18n_gnu_conditional_input->callback((Fl_Callback*)cb_i18n_gnu_conditional_input); - } // Fl_Input* i18n_gnu_conditional_input - { i18n_gnu_function_input = new Fl_Input(100, 153, 220, 20, "Function:"); - i18n_gnu_function_input->tooltip("The function to call to translate labels and tooltips, usually \"gettext\" or\ - \"_\""); - i18n_gnu_function_input->box(FL_THIN_DOWN_BOX); - i18n_gnu_function_input->labelsize(11); - i18n_gnu_function_input->textfont(4); - i18n_gnu_function_input->textsize(11); - i18n_gnu_function_input->callback((Fl_Callback*)cb_i18n_gnu_function_input); - } // Fl_Input* i18n_gnu_function_input - { i18n_gnu_static_function_input = new Fl_Input(100, 178, 220, 20, "Static Function:"); - i18n_gnu_static_function_input->tooltip("function to call to translate static text, The function to call to internatio\ -nalize labels and tooltips, usually \"gettext_noop\" or \"N_\""); - i18n_gnu_static_function_input->box(FL_THIN_DOWN_BOX); - i18n_gnu_static_function_input->labelsize(11); - i18n_gnu_static_function_input->textfont(4); - i18n_gnu_static_function_input->textsize(11); - i18n_gnu_static_function_input->callback((Fl_Callback*)cb_i18n_gnu_static_function_input); - } // Fl_Input* i18n_gnu_static_function_input - i18n_gnu_group->end(); - } // Fl_Group* i18n_gnu_group - { i18n_posix_group = new Fl_Group(100, 103, 220, 95); - i18n_posix_group->callback((Fl_Callback*)cb_i18n_posix_group); - i18n_posix_group->hide(); - { i18n_pos_include_input = new Fl_Input(100, 103, 220, 20, "#include:"); - i18n_pos_include_input->tooltip("The include file for internationalization."); - i18n_pos_include_input->box(FL_THIN_DOWN_BOX); - i18n_pos_include_input->labelsize(11); - i18n_pos_include_input->textfont(4); - i18n_pos_include_input->textsize(11); - i18n_pos_include_input->callback((Fl_Callback*)cb_i18n_pos_include_input); - } // Fl_Input* i18n_pos_include_input - { i18n_pos_conditional_input = new Fl_Input(100, 128, 220, 20, "Conditional:"); - i18n_pos_conditional_input->tooltip("only include the header file if this preprocessor macro is defined, for examp\ -le FLTK_GETTEXT_FOUND"); - i18n_pos_conditional_input->box(FL_THIN_DOWN_BOX); - i18n_pos_conditional_input->labelsize(11); - i18n_pos_conditional_input->textfont(4); - i18n_pos_conditional_input->textsize(11); - i18n_pos_conditional_input->callback((Fl_Callback*)cb_i18n_pos_conditional_input); - } // Fl_Input* i18n_pos_conditional_input - { i18n_pos_file_input = new Fl_Input(100, 153, 220, 20, "File:"); - i18n_pos_file_input->tooltip("The name of the message catalog."); - i18n_pos_file_input->box(FL_THIN_DOWN_BOX); - i18n_pos_file_input->labelsize(11); - i18n_pos_file_input->textfont(4); - i18n_pos_file_input->textsize(11); - i18n_pos_file_input->callback((Fl_Callback*)cb_i18n_pos_file_input); - } // Fl_Input* i18n_pos_file_input - { Fl_Group* o = new Fl_Group(100, 178, 90, 20); - o->callback((Fl_Callback*)cb_c); - { i18n_pos_set_input = new Fl_Int_Input(100, 178, 80, 20, "Set:"); - i18n_pos_set_input->tooltip("The message set number."); - i18n_pos_set_input->type(2); - i18n_pos_set_input->box(FL_THIN_DOWN_BOX); - i18n_pos_set_input->labelsize(11); - i18n_pos_set_input->textfont(4); - i18n_pos_set_input->textsize(11); - i18n_pos_set_input->callback((Fl_Callback*)cb_i18n_pos_set_input); - } // Fl_Int_Input* i18n_pos_set_input - { Fl_Box* o = new Fl_Box(180, 178, 10, 20); - o->hide(); - Fl_Group::current()->resizable(o); - } // Fl_Box* o - o->end(); - } // Fl_Group* o - i18n_posix_group->end(); - } // Fl_Group* i18n_posix_group - { Fl_Box* o = new Fl_Box(100, 530, 220, 10); - o->hide(); - Fl_Group::current()->resizable(o); - } // Fl_Box* o - w_settings_i18n_tab->end(); - } // Fl_Group* w_settings_i18n_tab - { w_settings_user_tab = new Fl_Group(10, 60, 320, 480, "User"); - w_settings_user_tab->image( image_user_circle_64() ); - w_settings_user_tab->image()->scale(36, 24, 0, 1); - w_settings_user_tab->labelsize(11); - w_settings_user_tab->callback((Fl_Callback*)cb_w_settings_user_tab); - w_settings_user_tab->hide(); - { Fl_Box* o = new Fl_Box(100, 84, 220, 20, "---- Widget Browser ----"); - o->labelfont(1); - o->labelsize(11); - o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE)); - } // Fl_Box* o - { Fl_Group* o = new Fl_Group(100, 112, 220, 20); - o->callback((Fl_Callback*)propagate_load); - { Fl_Choice* o = new Fl_Choice(100, 112, 151, 20, "Label:"); - o->box(FL_THIN_UP_BOX); - o->down_box(FL_BORDER_BOX); - o->labelfont(1); - o->labelsize(11); - o->textsize(11); - o->callback((Fl_Callback*)cb_Comments, (void*)(&Widget_Browser::label_font)); - Fl_Group::current()->resizable(o); - o->menu(fontmenu); - } // Fl_Choice* o - { Fl_Button* o = new Fl_Button(251, 112, 51, 20); - o->labelsize(11); - o->callback((Fl_Callback*)cb_Color_Chip, (void*)(&Widget_Browser::label_color)); - } // Fl_Button* o - { Fl_Menu_Button* o = new Fl_Menu_Button(302, 112, 18, 20); - o->callback((Fl_Callback*)cb_Color_Choice, (void*)(&Widget_Browser::label_color)); - o->menu(colormenu); - } // Fl_Menu_Button* o - o->end(); - } // Fl_Group* o - { Fl_Group* o = new Fl_Group(100, 137, 220, 20); - o->callback((Fl_Callback*)propagate_load); - { Fl_Choice* o = new Fl_Choice(100, 137, 151, 20, "Class:"); - o->box(FL_THIN_UP_BOX); - o->down_box(FL_BORDER_BOX); - o->labelfont(1); - o->labelsize(11); - o->textsize(11); - o->callback((Fl_Callback*)cb_Comments, (void*)(&Widget_Browser::class_font)); - Fl_Group::current()->resizable(o); - o->menu(fontmenu); - } // Fl_Choice* o - { Fl_Button* o = new Fl_Button(251, 137, 51, 20); - o->labelsize(11); - o->callback((Fl_Callback*)cb_Color_Chip, (void*)(&Widget_Browser::class_color)); - } // Fl_Button* o - { Fl_Menu_Button* o = new Fl_Menu_Button(302, 137, 18, 20); - o->callback((Fl_Callback*)cb_Color_Choice, (void*)(&Widget_Browser::class_color)); - o->menu(colormenu); - } // Fl_Menu_Button* o - o->end(); - } // Fl_Group* o - { Fl_Group* o = new Fl_Group(100, 162, 220, 20); - o->callback((Fl_Callback*)propagate_load); - { Fl_Choice* o = new Fl_Choice(100, 162, 151, 20, "Function:"); - o->box(FL_THIN_UP_BOX); - o->down_box(FL_BORDER_BOX); - o->labelfont(1); - o->labelsize(11); - o->textsize(11); - o->callback((Fl_Callback*)cb_Comments, (void*)(&Widget_Browser::func_font)); - Fl_Group::current()->resizable(o); - o->menu(fontmenu); - } // Fl_Choice* o - { Fl_Button* o = new Fl_Button(251, 162, 51, 20); - o->labelsize(11); - o->callback((Fl_Callback*)cb_Color_Chip, (void*)(&Widget_Browser::func_color)); - } // Fl_Button* o - { Fl_Menu_Button* o = new Fl_Menu_Button(302, 162, 18, 20); - o->callback((Fl_Callback*)cb_Color_Choice, (void*)(&Widget_Browser::func_color)); - o->menu(colormenu); - } // Fl_Menu_Button* o - o->end(); - } // Fl_Group* o - { Fl_Group* o = new Fl_Group(100, 187, 220, 20); - o->callback((Fl_Callback*)propagate_load); - { Fl_Choice* o = new Fl_Choice(100, 187, 151, 20, "Name:"); - o->box(FL_THIN_UP_BOX); - o->down_box(FL_BORDER_BOX); - o->labelfont(1); - o->labelsize(11); - o->textsize(11); - o->callback((Fl_Callback*)cb_Comments, (void*)(&Widget_Browser::name_font)); - Fl_Group::current()->resizable(o); - o->menu(fontmenu); - } // Fl_Choice* o - { Fl_Button* o = new Fl_Button(251, 187, 51, 20); - o->labelsize(11); - o->callback((Fl_Callback*)cb_Color_Chip, (void*)(&Widget_Browser::name_color)); - } // Fl_Button* o - { Fl_Menu_Button* o = new Fl_Menu_Button(302, 187, 18, 20); - o->callback((Fl_Callback*)cb_Color_Choice, (void*)(&Widget_Browser::name_color)); - o->menu(colormenu); - } // Fl_Menu_Button* o - o->end(); - } // Fl_Group* o - { Fl_Group* o = new Fl_Group(100, 212, 220, 20); - o->callback((Fl_Callback*)propagate_load); - { Fl_Choice* o = new Fl_Choice(100, 212, 151, 20, "Code:"); - o->box(FL_THIN_UP_BOX); - o->down_box(FL_BORDER_BOX); - o->labelfont(1); - o->labelsize(11); - o->textsize(11); - o->callback((Fl_Callback*)cb_Comments, (void*)(&Widget_Browser::code_font)); - Fl_Group::current()->resizable(o); - o->menu(fontmenu); - } // Fl_Choice* o - { Fl_Button* o = new Fl_Button(251, 212, 51, 20); - o->labelsize(11); - o->callback((Fl_Callback*)cb_Color_Chip, (void*)(&Widget_Browser::code_color)); - } // Fl_Button* o - { Fl_Menu_Button* o = new Fl_Menu_Button(302, 212, 18, 20); - o->callback((Fl_Callback*)cb_Color_Choice, (void*)(&Widget_Browser::code_color)); - o->menu(colormenu); - } // Fl_Menu_Button* o - o->end(); - } // Fl_Group* o - { Fl_Group* o = new Fl_Group(100, 237, 220, 20); - o->callback((Fl_Callback*)propagate_load); - { Fl_Choice* o = new Fl_Choice(100, 237, 151, 20, "Comments:"); - o->box(FL_THIN_UP_BOX); - o->down_box(FL_BORDER_BOX); - o->labelfont(1); - o->labelsize(11); - o->textsize(11); - o->callback((Fl_Callback*)cb_Comments, (void*)(&Widget_Browser::comment_font)); - Fl_Group::current()->resizable(o); - o->menu(fontmenu); - } // Fl_Choice* o - { Fl_Button* o = new Fl_Button(251, 237, 51, 20); - o->labelsize(11); - o->callback((Fl_Callback*)cb_Color_Chip, (void*)(&Widget_Browser::comment_color)); - } // Fl_Button* o - { Fl_Menu_Button* o = new Fl_Menu_Button(302, 237, 18, 20); - o->callback((Fl_Callback*)cb_Color_Choice, (void*)(&Widget_Browser::comment_color)); - o->menu(colormenu); - } // Fl_Menu_Button* o - o->end(); - } // Fl_Group* o - w_settings_user_tab->end(); - } // Fl_Group* w_settings_user_tab - w_settings_tabs->end(); - Fl_Group::current()->resizable(w_settings_tabs); - } // Fl_Tabs* w_settings_tabs - { Fl_Group* o = new Fl_Group(10, 550, 320, 20); - { Fl_Button* o = new Fl_Button(230, 550, 100, 20, "Close"); - o->tooltip("Close this dialog."); - o->labelsize(11); - o->callback((Fl_Callback*)cb_Close); - } // Fl_Button* o - { Fl_Box* o = new Fl_Box(220, 550, 10, 20); - o->hide(); - Fl_Group::current()->resizable(o); - } // Fl_Box* o - o->end(); - } // Fl_Group* o - settings_window->size_range(340, 580); - settings_window->end(); - } // Fl_Double_Window* settings_window - w_settings_tabs->do_callback(w_settings_tabs, LOAD); - return settings_window; -} - -Fl_Double_Window *shell_run_window=(Fl_Double_Window *)0; - -Fl_Terminal *shell_run_terminal=(Fl_Terminal *)0; - -static void cb_Clear(Fl_Button*, void*) { - // clear screen, clear scrollback, home cursor - shell_run_terminal->append("\033[2J\033[3J\033[H"); -} - -Fl_Return_Button *shell_run_button=(Fl_Return_Button *)0; - -static void cb_shell_run_button(Fl_Return_Button*, void*) { - Fl_Preferences pos(fluid_prefs, "shell_run_Window_pos"); - pos.set("x", shell_run_window->x()); - pos.set("y", shell_run_window->y()); - pos.set("w", shell_run_window->w()); - pos.set("h", shell_run_window->h()); - shell_run_window->hide(); -} - -Fl_Double_Window* make_shell_window() { - { shell_run_window = new Fl_Double_Window(555, 430, "Shell Command Output"); - shell_run_window->align(Fl_Align(FL_ALIGN_CLIP|FL_ALIGN_INSIDE)); - { shell_run_terminal = new Fl_Terminal(10, 10, 535, 375); - Fl_Group::current()->resizable(shell_run_terminal); - shell_run_terminal->ansi(1); - shell_run_terminal->history_lines(1000); - } // Fl_Terminal* shell_run_terminal - { Fl_Group* o = new Fl_Group(10, 395, 535, 25); - { Fl_Button* o = new Fl_Button(10, 395, 94, 25, "Clear"); - o->callback((Fl_Callback*)cb_Clear); - } // Fl_Button* o - { Fl_Box* o = new Fl_Box(104, 395, 341, 25); - o->hide(); - Fl_Group::current()->resizable(o); - } // Fl_Box* o - { shell_run_button = new Fl_Return_Button(445, 395, 100, 25, "Close"); - shell_run_button->callback((Fl_Callback*)cb_shell_run_button); - } // Fl_Return_Button* shell_run_button - o->end(); - } // Fl_Group* o - shell_run_window->end(); - } // Fl_Double_Window* shell_run_window - return shell_run_window; -} -Fl_Menu_Item *w_layout_menu_storage[4]; diff --git a/fluid/alignment_panel.fl b/fluid/alignment_panel.fl deleted file mode 100644 index 8c14d9811..000000000 --- a/fluid/alignment_panel.fl +++ /dev/null @@ -1,1879 +0,0 @@ -# data file for the Fltk User Interface Designer (fluid) -version 1.0400 -header_name {.h} -code_name {.cxx} -snap { - ver 1 - current_suite {FLUID (based on FLTK)} - current_preset 0 - suite { - name {FLUID (based on FLTK)} - preset { 1 - 15 15 15 15 0 0 - 10 10 10 10 0 0 - 25 25 - 20 10 4 20 4 8 - 0 14 0 14 - } - preset { 1 - 10 10 10 10 0 0 - 10 10 10 10 0 0 - 20 20 - 20 10 5 20 5 5 - 0 11 0 11 - } - preset { 1 - 10 10 10 10 0 0 - 10 10 10 10 0 0 - 18 18 - 16 8 2 16 4 2 - 0 10 0 10 - } - } -} -comment {// -// Setting and shell dialogs for the Fast Light Tool Kit (FLTK). -// -// Copyright 1998-2023 by Bill Spitzak and others. -// -// This library is free software. Distribution and use rights are outlined in -// the file "COPYING" which should have been included with this file. If this -// file is missing or damaged, see the license at: -// -// https://www.fltk.org/COPYING.php -// -// Please see the following page on how to report bugs and issues: -// -// https://www.fltk.org/bugs.php -// -} {in_source in_header -} - -decl {\#include "fluid.h"} {public global -} - -decl {\#include "undo.h"} {private global -} - -decl {\#include "widget_browser.h"} {public global -} - -decl {\#include "Fd_Snap_Action.h"} {public global -} - -decl {\#include "shell_command.h"} {public global -} - -decl {\#include } {public local -} - -decl {\#include } {public local -} - -decl {\#include "fluid_filename.h"} {public local -} - -decl {\#include } {public local -} - -decl {\#include } {public local -} - -decl {\#include } {private global -} - -decl {\#include } {private global -} - -decl {\#include } {private global -} - -decl {\#include } {private global -} - -decl {\#include "../src/flstring.h"} {private global -} - -decl {void init_scheme(void);} { - comment {// initialize the scheme from preferences} public global -} - -decl {extern struct Fl_Menu_Item *dbmanager_item;} {public local -} - -decl {extern void i18n_cb(Fl_Choice *,void *);} {public local -} - -decl {void scheme_cb(Fl_Scheme_Choice *, void *);} {public local -} - -decl {int w_settings_shell_list_selected;} {public local -} - -Function {cb_Comments(Fl_Choice* o, void* v)} {open private return_type void -} { - code {Fl_Font *font = (Fl_Font*)o->user_data(); -if (v == LOAD) { - o->value(*font); -} else { - *font = (int)o->value(); - widget_browser->redraw(); - widget_browser->save_prefs(); -}} {} -} - -Function {cb_Color_Chip(Fl_Button* o, void* v)} {open private return_type void -} { - code {Fl_Color *color = (Fl_Color*)o->user_data(); -if (v == LOAD) { - o->color(*color); - o->redraw(); -} else { - Fl_Color d = fl_show_colormap(*color); - *color = d; - o->color(d); - widget_browser->redraw(); - widget_browser->save_prefs(); -}} {} -} - -Function {cb_Color_Choice(Fl_Menu_Button* o, void* v)} {open private return_type void -} { - code {if (v != LOAD) { - Fl_Color *color = (Fl_Color*)o->user_data(); - Fl_Color d = (Fl_Color)(o->mvalue()->argument()); - *color = d; - o->parent()->do_callback(o->parent(), LOAD); - widget_browser->redraw(); - widget_browser->save_prefs(); -}} {} -} - -Function {make_script_panel()} {open -} { - Fl_Window script_panel { - label {Shell Script Editor} - callback {if (Fl::event()==FL_SHORTCUT && Fl::event_key()==FL_Escape) - return; // ignore Escape -script_panel->hide(); // otherwise hide..} open - xywh {764 319 540 180} type Double labelsize 11 resizable - code0 {o->size_range(200, 150);} modal visible - } { - Fl_Text_Editor script_input { - xywh {10 10 520 130} box DOWN_BOX labelsize 11 when 13 textfont 4 textsize 11 resizable - code0 {script_input->buffer(new Fl_Text_Buffer);} - } - Fl_Group {} { - callback propagate_load open - xywh {10 150 520 20} labelsize 11 - } { - Fl_Return_Button script_panel_ok { - label OK - xywh {400 150 60 20} labelsize 11 hotspot - } - Fl_Button script_panel_cancel { - label Cancel - xywh {470 150 60 20} labelsize 11 - } - Fl_Box {} { - xywh {10 150 380 20} labelsize 11 resizable - } - } - } - code {// Enable line numbers -script_input->linenumber_width(60); -script_input->linenumber_size(script_input->Fl_Text_Display::textsize());} {} -} - -Function {make_settings_window()} {open -} { - Fl_Window settings_window { - label {FLUID Settings} open - xywh {392 362 340 580} type Double align 80 resizable size_range {340 580 0 0} visible - } { - Fl_Tabs w_settings_tabs { - callback {propagate_load(o, v);} open - xywh {10 10 320 530} selection_color 12 labelsize 11 labelcolor 255 resizable - } { - Fl_Group {} { - label General open selected - scale_image {36 24} image {icons/general_64.png} compress_image 1 xywh {10 60 320 480} labelsize 11 resizable - } { - Fl_Group {} { - callback {propagate_load(o, v);} open - xywh {120 78 130 25} - } { - Fl_Choice scheme_choice { - label {Scheme: } - callback scheme_cb open - xywh {120 78 120 25} down_box BORDER_BOX labelfont 1 labelsize 11 - code0 {init_scheme();} - class Fl_Scheme_Choice - } {} - Fl_Box {} { - xywh {240 78 10 25} hide resizable - } - } - Fl_Box {} { - label {Options: } - xywh {120 115 0 20} labelfont 1 labelsize 11 align 4 - } - Fl_Check_Button tooltips_button { - label {Show Tooltips} - callback {Fl_Tooltip::enable(tooltips_button->value()); -fluid_prefs.set("show_tooltips", tooltips_button->value());} - xywh {120 115 200 20} down_box DOWN_BOX labelsize 11 - code0 {int b;} - code1 {fluid_prefs.get("show_tooltips", b, 1);} - code2 {tooltips_button->value(b);} - code3 {Fl_Tooltip::enable(b);} - } - Fl_Check_Button completion_button { - label {Show Completion Dialogs} - callback {fluid_prefs.set("show_completion_dialogs", completion_button->value());} - xywh {120 135 200 20} down_box DOWN_BOX labelsize 11 - code0 {int b;} - code1 {fluid_prefs.get("show_completion_dialogs", b, 1);} - code2 {completion_button->value(b);} - } - Fl_Check_Button openlast_button { - label {Open Previous File on Startup} - callback {fluid_prefs.set("open_previous_file", openlast_button->value());} - xywh {120 155 200 20} down_box DOWN_BOX labelsize 11 - code0 {int b;} - code1 {fluid_prefs.get("open_previous_file", b, 0);} - code2 {openlast_button->value(b);} - } - Fl_Check_Button prevpos_button { - label {Remember Window Positions} - callback {fluid_prefs.set("prev_window_pos", prevpos_button->value());} - xywh {120 175 200 20} down_box DOWN_BOX labelsize 11 - code0 {int b;} - code1 {fluid_prefs.get("prev_window_pos", b, 1);} - code2 {prevpos_button->value(b);} - } - Fl_Check_Button show_comments_button { - label {Show Comments in Browser} - callback {show_comments = show_comments_button->value(); -fluid_prefs.set("show_comments", show_comments); -redraw_browser();} - xywh {120 195 200 20} down_box DOWN_BOX labelsize 11 - code1 {fluid_prefs.get("show_comments", show_comments, 1);} - code2 {show_comments_button->value(show_comments);} - } - Fl_Group {} { - callback {propagate_load(o, v);} open - xywh {120 225 50 20} - } { - Fl_Spinner recent_spinner { - label {\# Recent Files:} - callback {fluid_prefs.set("recent_files", recent_spinner->value()); -load_history();} - xywh {120 225 40 20} labelfont 1 labelsize 11 when 1 maximum 10 textsize 11 - code0 {int c;} - code1 {fluid_prefs.get("recent_files", c, 5);} - code2 {recent_spinner->maximum(10);} - code3 {recent_spinner->value(c);} - } - Fl_Box {} { - xywh {160 225 10 20} hide resizable - } - } - Fl_Check_Button use_external_editor_button { - label {Use for Code Nodes} - callback {G_use_external_editor = use_external_editor_button->value(); -fluid_prefs.set("use_external_editor", G_use_external_editor); -redraw_browser();} - xywh {120 275 200 20} down_box DOWN_BOX labelsize 11 - code1 {fluid_prefs.get("use_external_editor", G_use_external_editor, 0);} - code2 {use_external_editor_button->value(G_use_external_editor);} - } - Fl_Input editor_command_input { - label {External Editor:} - callback {strncpy(G_external_editor_command, editor_command_input->value(), sizeof(G_external_editor_command)-1); -G_external_editor_command[sizeof(G_external_editor_command)-1] = 0; -fluid_prefs.set("external_editor_command", G_external_editor_command); -redraw_browser();} - tooltip {The editor command to open your external text editor. -Include any necessary flags to ensure your editor does not background itself. -Examples: - gvim -f - gedit - emacs} xywh {120 255 200 20} labelfont 1 labelsize 11 when 1 textfont 4 textsize 11 - code1 {fluid_prefs.get("external_editor_command", G_external_editor_command, "", sizeof(G_external_editor_command)-1);} - code2 {editor_command_input->value(G_external_editor_command);} - } - Fl_Box {} { - label {Overlays: } - xywh {120 300 0 20} labelfont 1 labelsize 11 align 4 - } - Fl_Check_Button guides_button { - label {Show Positioning Guides} - callback toggle_guides_cb - tooltip {show guides that help to position and resize widgets and enable snapping} xywh {120 300 200 20} down_box DOWN_BOX labelsize 11 - code0 {o->value(show_guides);} - } - Fl_Check_Button restricted_button { - label {Show Restricted Areas} - callback toggle_restricted_cb - tooltip {show overlapping and out of bounds areas, show unfilled areas in Fl_Pack groups} xywh {120 320 200 20} down_box DOWN_BOX labelsize 11 - code0 {o->value(show_restricted);} - } - Fl_Check_Button ghosted_outline_button { - label {Show Ghosted Group Outlines} - callback toggle_ghosted_outline_cb - tooltip {groups with no box type or flat boxtypes without contrast will be rendered with a dim outline in the editing window only} xywh {120 340 200 20} down_box DOWN_BOX labelsize 11 - code0 {o->value(show_ghosted_outline);} - } - Fl_Box {} { - xywh {120 530 200 10} hide resizable - } - } - Fl_Group w_settings_project_tab { - label Project - callback {propagate_load(o, v);} open - scale_image {36 24} image {icons/document_64.png} compress_image 1 xywh {10 60 320 480} labelsize 11 hide - } { - Fl_Group {} {open - xywh {100 78 220 30} - } { - Fl_Box {} { - label {Use "name.ext" to set a file name -or just ".ext" to set extension.} - xywh {100 78 210 30} labelsize 11 align 148 - } - Fl_Box {} { - xywh {310 78 10 30} hide resizable - } - } - Fl_Input header_file_input { - label {Header File:} - user_data 1 user_data_type {void*} - callback {if (v == LOAD) { - o->value(g_project.header_file_name.c_str()); -} else { - if (strcmp(g_project.header_file_name.c_str(), o->value())) { - g_project.header_file_name = o->value(); - set_modflag(1); - } -}} - tooltip {The name of the generated header file.} xywh {100 112 220 20} box THIN_DOWN_BOX labelfont 1 labelsize 11 when 1 textfont 4 textsize 11 - } - Fl_Input code_file_input { - label {Code File:} - user_data 1 user_data_type {void*} - callback {if (v == LOAD) { - o->value(g_project.code_file_name.c_str()); -} else { - if (strcmp(g_project.code_file_name.c_str(), o->value())) { - g_project.code_file_name = o->value(); - set_modflag(1); - } -}} - tooltip {The name of the generated code file.} xywh {100 137 220 20} box THIN_DOWN_BOX labelfont 1 labelsize 11 when 1 textfont 4 textsize 11 - } - Fl_Check_Button include_H_from_C_button { - label {Include Header from Code} - callback {if (v == LOAD) { - o->value(g_project.include_H_from_C); -} else { - if (g_project.include_H_from_C != o->value()) { - set_modflag(1); - g_project.include_H_from_C = o->value(); - } -}} - tooltip {Include the header file from the code file.} xywh {100 162 220 20} down_box DOWN_BOX labelsize 11 - } - Fl_Box {} { - label {Options: } - xywh {100 205 0 20} labelfont 1 labelsize 11 align 4 - } - Fl_Check_Button use_FL_COMMAND_button { - label {Menu shortcuts use FL_COMMAND} - callback {if (v == LOAD) { - o->value(g_project.use_FL_COMMAND); -} else { - if (g_project.use_FL_COMMAND != o->value()) { - set_modflag(1); - g_project.use_FL_COMMAND = o->value(); - } -}} - tooltip {Replace FL_CTRL and FL_META with FL_COMMAND when generating menu shortcuts} xywh {100 205 220 20} down_box DOWN_BOX labelsize 11 - } - Fl_Check_Button utf8_in_src_button { - label {allow Unicode UTF-8 in source code} - callback {if (v == LOAD) { - o->value(g_project.utf8_in_src); -} else { - if (g_project.utf8_in_src != o->value()) { - set_modflag(1); - g_project.utf8_in_src = o->value(); - } -}} - tooltip {For older compilers, characters outside of the printable ASCII range are escaped using octal notation `\\0123`. If this option is checked, Fluid will write UTF-8 characters unchanged.} xywh {100 230 220 20} down_box DOWN_BOX labelsize 11 - } - Fl_Check_Button avoid_early_includes_button { - label {avoid early include of Fl.H} - callback {if (v == LOAD) { - o->value(g_project.avoid_early_includes); -} else { - if (g_project.avoid_early_includes != o->value()) { - set_modflag(1); - g_project.avoid_early_includes = o->value(); - } -}} - tooltip {Do not emit \#include until it is needed by another include file.} xywh {100 255 220 20} down_box DOWN_BOX labelsize 11 - } - Fl_Box {} { - label {Experimental: } - xywh {100 283 0 20} labelfont 1 labelsize 11 align 4 hide - } - Fl_Check_Button w_proj_mergeback { - label {generate MergeBack data} - callback {if (v == LOAD) { - o->value(g_project.write_mergeback_data); -} else { - if (g_project.write_mergeback_data != o->value()) { - set_modflag(1); - g_project.write_mergeback_data = o->value(); - } -}} - comment {// Matt: disabled} - tooltip {MergeBack is a feature under construction that allows changes in code files to be merged back into the project file. Checking this option will generate additional data in code and project files.} xywh {100 283 220 20} down_box DOWN_BOX labelsize 11 hide - } - Fl_Box {} { - xywh {100 530 220 10} hide resizable - } - } - Fl_Group w_settings_layout_tab { - label Layout - callback {propagate_load(o, v);} open - scale_image {36 24} image {icons/layout_64.png} compress_image 1 xywh {10 60 320 480} labelsize 11 hide - } { - Fl_Box {} { - label {Layout:} - xywh {25 78 60 24} labelfont 1 labelsize 11 align 24 - } - Fl_Choice layout_choice { - callback {if (v == LOAD) { - o->value(g_layout_list.current_suite()); - } else { - int index = o->value(); - g_layout_list.current_suite(index); - g_layout_list.update_dialogs(); - }} - xywh {85 78 187 24} down_box BORDER_BOX - } { - MenuItem {} { - label FLTK - xywh {0 0 31 20} - } - MenuItem {} { - label Grid - xywh {0 0 31 20} - } - } - Fl_Button {} { - label {+} - callback {// Clone the current layout suite - -if (v == LOAD) return; - -Fl_String old_name = "Copy of "; -old_name.append(g_layout_list[g_layout_list.current_suite()].name_); -const char *new_name = fl_input("Enter a name for the new layout:", old_name.c_str()); -if (new_name == NULL) - return; - -g_layout_list.add(new_name); -g_layout_list.update_dialogs();} - xywh {272 78 24 24} - } - Fl_Menu_Button w_layout_menu { - callback {if (v == LOAD) { - Fd_Layout_Suite &suite = g_layout_list[g_layout_list.current_suite()]; - if (suite.storage_ == FD_STORE_INTERNAL) { - w_layout_menu_rename->deactivate(); - for (int i=1; i<4; i++) w_layout_menu_storage[i]->deactivate(); - w_layout_menu_delete->deactivate(); - } else { - w_layout_menu_rename->activate(); - for (int i=1; i<4; i++) w_layout_menu_storage[i]->activate(); - w_layout_menu_delete->activate(); - } - w_layout_menu_storage[suite.storage_]->setonly(); -}} open - xywh {296 78 24 24} - } { - MenuItem w_layout_menu_rename { - label {Rename...} - callback {// Rename the current layout suite - -Fl_String old_name = g_layout_list[g_layout_list.current_suite()].name_; -const char *new_name = fl_input("Enter a new name for the layout:", old_name.c_str()); -if (new_name == NULL) - return; - -g_layout_list.rename(new_name); -g_layout_list.update_dialogs();} - xywh {0 0 31 20} divider - } - MenuItem {w_layout_menu_storage[0]} { - label {@fd_beaker FLUID Built-In} - callback {Fd_Layout_Suite &suite = g_layout_list[g_layout_list.current_suite()]; -suite.storage(FD_STORE_INTERNAL); -g_layout_list.update_dialogs();} - xywh {0 0 31 20} type Radio deactivate - } - MenuItem {w_layout_menu_storage[1]} { - label {@fd_user User Preference} - callback {Fd_Layout_Suite &suite = g_layout_list[g_layout_list.current_suite()]; -suite.storage(FD_STORE_USER); -g_layout_list.update_dialogs();} - xywh {0 0 31 20} type Radio - } - MenuItem {w_layout_menu_storage[2]} { - label {@fd_project Store in .fl Project File} - callback {Fd_Layout_Suite &suite = g_layout_list[g_layout_list.current_suite()]; -suite.storage(FD_STORE_PROJECT); -g_layout_list.update_dialogs();} - xywh {0 0 31 20} type Radio - } - MenuItem {w_layout_menu_storage[3]} { - label {@fd_file Store in External File} - callback {Fd_Layout_Suite &suite = g_layout_list[g_layout_list.current_suite()]; -suite.storage(FD_STORE_FILE); -g_layout_list.update_dialogs();} - xywh {0 0 31 20} type Radio divider - } - MenuItem w_layout_menu_load { - label {Load...} - callback {// Give the user a file chooser and load that file -Fl_Native_File_Chooser fnfc; -fnfc.title("Load Layout Settings:"); -fnfc.type(Fl_Native_File_Chooser::BROWSE_FILE); -fnfc.options(Fl_Native_File_Chooser::USE_FILTER_EXT); -fnfc.filter("FLUID Layouts\\t*.fll\\n"); -if (fnfc.show() != 0) return; -const char *new_filename = fnfc.filename(); -if (!new_filename) return; -g_layout_list.load(new_filename); -//g_layout_list.current_suite(n); -g_layout_list.update_dialogs();} - xywh {0 0 31 20} - } - MenuItem w_layout_menu_save { - label {Save...} - callback {// Give the user a file chooser with a suggested name - Fl_Native_File_Chooser fnfc; - fnfc.title("Save Layout Settings:"); - fnfc.type(Fl_Native_File_Chooser::BROWSE_SAVE_FILE); - fnfc.options(Fl_Native_File_Chooser::SAVEAS_CONFIRM | Fl_Native_File_Chooser::USE_FILTER_EXT); - fnfc.filter("FLUID Layouts\\t*.fll\\n"); - Fl_String filename = g_layout_list.filename_; - fnfc.directory(fl_filename_path(filename).c_str()); - fnfc.preset_file(fl_filename_name(filename).c_str()); - if (fnfc.show() != 0) return; - const char *new_filename = fnfc.filename(); - if (!new_filename) return; - g_layout_list.filename_ = new_filename; - g_layout_list.save(new_filename);} - xywh {0 0 31 20} divider - code0 {\#include } - } - MenuItem w_layout_menu_delete { - label Delete - callback {// remove the current suite - -g_layout_list.remove(g_layout_list.current_suite()); -g_layout_list.update_dialogs();} - xywh {0 0 31 20} - } - } - Fl_Box {} { - label {Preset:} - xywh {25 107 60 20} labelfont 1 labelsize 11 align 24 - } - Fl_Group {} { - callback propagate_load open - xywh {85 107 235 20} labelsize 11 - } { - Fl_Button {preset_choice[0]} { - label Application - user_data 0 user_data_type long - callback edit_layout_preset_cb - xywh {85 107 78 20} type Radio value 1 selection_color 45 labelsize 11 compact 1 - } - Fl_Button {preset_choice[1]} { - label Dialog - user_data 1 user_data_type long - callback edit_layout_preset_cb - xywh {163 107 79 20} type Radio selection_color 45 labelsize 11 compact 1 - } - Fl_Button {preset_choice[2]} { - label Toolbox - user_data 2 user_data_type long - callback edit_layout_preset_cb - xywh {242 107 78 20} type Radio selection_color 45 labelsize 11 compact 1 - } - } - Fl_Box {} { - label {---- Window ----} - xywh {85 132 235 20} labelfont 1 labelsize 11 align 20 - } - Fl_Box {} { - label {Margin:} - xywh {25 167 60 20} labelsize 11 align 24 - } - Fl_Value_Input {} { - label {Left:} - callback {if (v == LOAD) { - o->value((double)layout->left_window_margin); -} else { - layout->left_window_margin = (int)o->value(); -}} - xywh {85 167 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11 - } - Fl_Value_Input {} { - label {Top:} - callback {if (v == LOAD) { - o->value((double)layout->top_window_margin); -} else { - layout->top_window_margin = (int)o->value(); -}} - xywh {145 167 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11 - } - Fl_Value_Input {} { - label {Right:} - callback {if (v == LOAD) { - o->value((double)layout->right_window_margin); -} else { - layout->right_window_margin = (int)o->value(); -}} - xywh {205 167 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11 - } - Fl_Value_Input {} { - label {Bottom:} - callback {if (v == LOAD) { - o->value((double)layout->bottom_window_margin); -} else { - layout->bottom_window_margin = (int)o->value(); -}} - xywh {265 167 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11 - } - Fl_Box {} { - label {Grid:} - xywh {32 201 53 20} labelsize 11 align 24 - } - Fl_Value_Input {} { - label {Horizontal:} - callback {if (v == LOAD) { - o->value((double)layout->window_grid_x); -} else { - layout->window_grid_x = (int)o->value(); -}} - xywh {85 201 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11 - } - Fl_Value_Input {} { - label {Vertical:} - callback {if (v == LOAD) { - o->value((double)layout->window_grid_y); -} else { - layout->window_grid_y = (int)o->value(); -}} - xywh {145 201 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11 - } - Fl_Box {} { - label {---- Group ----} - xywh {85 226 235 20} labelfont 1 labelsize 11 align 20 - } - Fl_Box {} { - label {Margin:} - xywh {25 261 60 20} labelsize 11 align 24 - } - Fl_Value_Input {} { - label {Left:} - callback {if (v == LOAD) { - o->value((double)layout->left_group_margin); -} else { - layout->left_group_margin = (int)o->value(); -}} - xywh {85 261 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11 - } - Fl_Value_Input {} { - label {Top:} - callback {if (v == LOAD) { - o->value((double)layout->top_group_margin); -} else { - layout->top_group_margin = (int)o->value(); -}} - xywh {145 261 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11 - } - Fl_Value_Input {} { - label {Right:} - callback {if (v == LOAD) { - o->value((double)layout->right_group_margin); -} else { - layout->right_group_margin = (int)o->value(); -}} - xywh {205 261 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11 - } - Fl_Value_Input {} { - label {Bottom:} - callback {if (v == LOAD) { - o->value((double)layout->bottom_group_margin); -} else { - layout->bottom_group_margin = (int)o->value(); -}} - xywh {265 261 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11 - } - Fl_Box {} { - label {Grid:} - xywh {32 295 53 20} labelsize 11 align 24 - } - Fl_Value_Input {} { - label {Horizontal:} - callback {if (v == LOAD) { - o->value((double)layout->group_grid_x); -} else { - layout->group_grid_x = (int)o->value(); -}} - xywh {85 295 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11 - } - Fl_Value_Input {} { - label {Vertical:} - callback {if (v == LOAD) { - o->value((double)layout->group_grid_y); -} else { - layout->group_grid_y = (int)o->value(); -}} - xywh {145 295 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11 - } - Fl_Box {} { - label {---- Tabs ----} - xywh {85 320 235 20} labelfont 1 labelsize 11 align 20 - } - Fl_Box {} { - label {Margin:} - xywh {25 355 60 20} labelsize 11 align 24 - } - Fl_Value_Input {} { - label {Top:} - callback {if (v == LOAD) { - o->value((double)layout->top_tabs_margin); -} else { - layout->top_tabs_margin = (int)o->value(); -}} - xywh {85 355 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11 - } - Fl_Value_Input {} { - label {Bottom:} - callback {if (v == LOAD) { - o->value((double)layout->bottom_tabs_margin); -} else { - layout->bottom_tabs_margin = (int)o->value(); -}} - xywh {145 355 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11 - } - Fl_Box {} { - label {---- Widget ----} - xywh {85 380 235 20} labelfont 1 labelsize 11 align 20 - } - Fl_Box {} { - label {Horizontal:} - xywh {25 415 60 20} labelsize 11 align 24 - } - Fl_Value_Input {} { - label {Minimum:} - callback {if (v == LOAD) { - o->value((double)layout->widget_min_w); -} else { - layout->widget_min_w = (int)o->value(); -}} - xywh {85 414 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11 - } - Fl_Value_Input {} { - label {Increment:} - callback {if (v == LOAD) { - o->value((double)layout->widget_inc_w); -} else { - layout->widget_inc_w = (int)o->value(); -}} - xywh {145 414 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11 - } - Fl_Value_Input {} { - label {Gap:} - callback {if (v == LOAD) { - o->value((double)layout->widget_gap_x); -} else { - layout->widget_gap_x = (int)o->value(); -}} - xywh {205 414 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11 - } - Fl_Box {} { - label {Vertical:} - xywh {32 440 53 20} labelsize 11 align 24 - } - Fl_Value_Input {} { - callback {if (v == LOAD) { - o->value((double)layout->widget_min_h); -} else { - layout->widget_min_h = (int)o->value(); -}} - xywh {85 440 55 20} labelsize 11 maximum 32767 step 1 textsize 11 - } - Fl_Value_Input {} { - callback {if (v == LOAD) { - o->value((double)layout->widget_inc_h); -} else { - layout->widget_inc_h = (int)o->value(); -}} - xywh {145 440 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11 - } - Fl_Value_Input {} { - callback {if (v == LOAD) { - o->value((double)layout->widget_gap_y); -} else { - layout->widget_gap_y = (int)o->value(); -}} - xywh {205 440 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11 - } - Fl_Group {} { - label {Label Font:} - callback propagate_load open - xywh {85 465 201 20} labelsize 11 align 4 - } { - Fl_Choice {} { - callback {if (v == LOAD) { - o->value(layout->labelfont+1); -} else { - layout->labelfont = (int)o->value()-1; -}} open - tooltip {The style of the label text.} xywh {85 465 150 20} box THIN_UP_BOX down_box BORDER_BOX labelfont 1 labelsize 11 textsize 11 resizable - code0 {extern Fl_Menu_Item fontmenu_w_default[];} - code1 {o->menu(fontmenu_w_default);} - } {} - Fl_Value_Input {} { - callback {if (v == LOAD) { - o->value(layout->labelsize); -} else { - layout->labelsize = (int)o->value(); -}} - tooltip {The size of the label text.} xywh {235 465 50 20} labelsize 11 minimum 1 maximum 1000 step 1 value 14 textsize 11 - } - } - Fl_Group {} { - label {Text Font:} - callback propagate_load open - xywh {85 490 200 20} labelsize 11 align 4 - } { - Fl_Choice {} { - callback {if (v == LOAD) { - o->value(layout->textfont+1); -} else { - layout->textfont = (int)o->value()-1; -}} open - tooltip {The value text style.} xywh {85 490 150 20} box DOWN_BOX down_box BORDER_BOX labelfont 1 labelsize 11 textsize 11 - code0 {extern Fl_Menu_Item fontmenu_w_default[];} - code1 {o->menu(fontmenu_w_default);} - } {} - Fl_Value_Input {} { - callback {if (v == LOAD) { - o->value(layout->textsize); -} else { - layout->textsize = (int)o->value(); -}} - tooltip {The value text size.} xywh {235 490 50 20} labelsize 11 maximum 1000 step 1 value 14 textsize 11 - } - } - Fl_Box {} { - xywh {325 535 5 5} hide resizable - } - } - Fl_Group w_settings_shell_tab { - label Shell - callback propagate_load open - scale_image {36 24} image {icons/shell_64.png} compress_image 1 xywh {10 60 320 480} labelsize 11 hide - } { - Fl_Group {} { - callback propagate_load open - xywh {10 90 320 132} - } { - Fl_Browser w_settings_shell_list { - label {Shell -command -list:} - callback {if (v == LOAD) { - // load from g_shell_config - if (g_shell_config) { - o->clear(); - w_settings_shell_list_selected = 0; - for (int i=0; ilist_size; i++) { - Fd_Shell_Command *cmd = g_shell_config->list[i]; - o->add(cmd->name.c_str()); - if (cmd->storage == FD_STORE_USER) - o->icon(i+1, w_settings_shell_fd_user->image()); - else if (cmd->storage == FD_STORE_PROJECT) - o->icon(i+1, w_settings_shell_fd_project->image()); - } - } -} else { -// int prev_selected = w_settings_shell_list_selected; - w_settings_shell_list_selected = 0; - int selected = w_settings_shell_list->value(); - if (selected) { - if (w_settings_shell_list->selected(selected)) - w_settings_shell_list_selected = selected; - } - w_settings_shell_cmd->do_callback(w_settings_shell_cmd, LOAD); - w_settings_shell_toolbox->do_callback(w_settings_shell_toolbox, LOAD); -}} - xywh {100 90 220 110} type Multi labelfont 1 labelsize 11 align 4 textsize 13 resizable - } - Fl_Group w_settings_shell_toolbox { - callback {if (v==LOAD) { - propagate_load(o, v); -}} open - xywh {100 200 220 22} - } { - Fl_Button {} { - label {+} - callback {if (v != LOAD) { - int selected = w_settings_shell_list_selected; - Fd_Shell_Command *cmd = new Fd_Shell_Command("new shell command"); - g_shell_config->insert(selected, cmd); - w_settings_shell_list->insert(selected+1, cmd->name.c_str()); - w_settings_shell_list->deselect(); - w_settings_shell_list->value(selected+1); - if (cmd->storage == FD_STORE_USER) - w_settings_shell_list->icon(selected+1, w_settings_shell_fd_user->image()); - else if (cmd->storage == FD_STORE_PROJECT) - w_settings_shell_list->icon(selected+1, w_settings_shell_fd_project->image()); - w_settings_shell_list->do_callback(); - w_settings_shell_cmd->do_callback(w_settings_shell_cmd, LOAD); - w_settings_shell_toolbox->do_callback(w_settings_shell_toolbox, LOAD); - g_shell_config->rebuild_shell_menu(); -}} - tooltip {insert a new shell command into the list after the selected command} xywh {100 200 24 22} labelfont 1 labelsize 11 - } - Fl_Button w_settings_shell_dup { - label {++} - callback {int selected = w_settings_shell_list_selected; -if (v==LOAD) { - if (selected) { - o->activate(); - } else { - o->deactivate(); - } -} else { - if (!selected) return; - Fd_Shell_Command *cmd = new Fd_Shell_Command(g_shell_config->list[selected-1]); - g_shell_config->insert(selected, cmd); - w_settings_shell_list->insert(selected+1, cmd->name.c_str()); - w_settings_shell_list->deselect(); - w_settings_shell_list->deselect(); - w_settings_shell_list->value(selected+1); - if (cmd->storage == FD_STORE_USER) - w_settings_shell_list->icon(selected+1, w_settings_shell_fd_user->image()); - else if (cmd->storage == FD_STORE_PROJECT) - w_settings_shell_list->icon(selected+1, w_settings_shell_fd_project->image()); - w_settings_shell_list->do_callback(); - w_settings_shell_cmd->do_callback(w_settings_shell_cmd, LOAD); - w_settings_shell_toolbox->do_callback(w_settings_shell_toolbox, LOAD); - g_shell_config->rebuild_shell_menu(); -}} - tooltip {duplicate the selected shell command and insert it into the list} xywh {124 200 24 22} labelfont 1 labelsize 11 deactivate - } - Fl_Button w_settings_shell_remove { - label DEL - callback {int selected = w_settings_shell_list_selected; -if (v==LOAD) { - if (selected) { - o->activate(); - } else { - o->deactivate(); - } -} else { - if (!selected) return; - int ret = fl_choice("Delete the shell command\\n\\"%s\\"?\\n\\nThis can not be undone.", - "Delete", "Cancel", NULL, g_shell_config->list[selected-1]->name.c_str()); - if (ret==1) return; - g_shell_config->remove(selected-1); - w_settings_shell_list->remove(selected); - if (selected <= w_settings_shell_list->size()) - w_settings_shell_list->value(selected); - else - w_settings_shell_list->value(0); - w_settings_shell_list->do_callback(); - w_settings_shell_cmd->do_callback(w_settings_shell_cmd, LOAD); - w_settings_shell_toolbox->do_callback(w_settings_shell_toolbox, LOAD); - g_shell_config->rebuild_shell_menu(); -}} - tooltip {remove the selected shell command - this can not be undone} xywh {148 200 24 22} labelsize 10 deactivate - } - Fl_Menu_Button w_settings_shell_menu {open - xywh {172 200 24 22} labelsize 11 textsize 11 - } { - MenuItem {} { - label {Import...} - callback {if (v != LOAD) - Fd_Shell_Command_List::import_from_file();} - tooltip {import shell commands from an external file} xywh {90 90 100 20} labelsize 11 - } - MenuItem {} { - label {Export selected...} - callback {if (v != LOAD) - Fd_Shell_Command_List::export_selected();} - tooltip {export selected shell commands to an external file} xywh {10 10 100 20} labelsize 11 - } - MenuItem {} { - label {Example Scripts:} - xywh {20 20 100 20} labelfont 1 labelsize 10 hide deactivate - } - MenuItem {} { - label {Compile with fltk-config} - xywh {30 30 100 20} labelsize 11 hide - } - MenuItem {} { - label {Build and run} - xywh {40 40 100 20} labelsize 11 hide - } - MenuItem {} { - label {Build with Xcode on macOS} - xywh {50 50 100 20} labelsize 11 hide - } - MenuItem {} { - label {Build with CMake} - xywh {60 60 100 20} labelsize 11 hide - } - } - Fl_Box {} { - xywh {253 200 13 22} hide resizable - } - Fl_Button {} { - label T - callback {if (v!=LOAD) show_terminal_window();} - tooltip {show terminal window} xywh {246 200 24 22} labelfont 5 labelsize 11 - } - Fl_Button w_settings_shell_play { - label Run - callback {int selected = w_settings_shell_list_selected; -if (v==LOAD) { - if (selected) { - o->activate(); - } else { - o->deactivate(); - } -} else { - if (!selected) return; - Fd_Shell_Command *cmd = g_shell_config->list[selected-1]; - cmd->run(); -}} - tooltip {run the selected shell command} xywh {270 200 50 22} labelsize 11 deactivate - } - } - } - Fl_Group w_settings_shell_cmd { - callback {if (v==LOAD) { - int selected = w_settings_shell_list_selected; - if (selected) { - o->activate(); - } else { - o->deactivate(); - } - propagate_load(o, v); -}} open - xywh {10 235 320 291} resizable - } { - Fl_Input {} { - label {Name:} - callback {int selected = w_settings_shell_list_selected; -if (v == LOAD) { - if (selected) { - o->value(g_shell_config->list[selected-1]->name.c_str()); - } else { - o->value(""); - } -} else { - if (selected) { - Fd_Shell_Command *cmd = g_shell_config->list[selected-1]; - cmd->name = o->value(); - w_settings_shell_list->text(selected, o->value()); - if (cmd->storage == FD_STORE_PROJECT) set_modflag(1); - } -}} - tooltip {file the shell command under this name in the shell command list} xywh {100 246 220 20} labelfont 1 labelsize 11 when 13 textfont 4 textsize 11 - } - Fl_Input {} { - label {Menu Label:} - callback {int selected = w_settings_shell_list_selected; -if (v == LOAD) { - if (selected) { - o->value(g_shell_config->list[selected-1]->label.c_str()); - } else { - o->value(""); - } -} else { - if (selected) { - Fd_Shell_Command *cmd = g_shell_config->list[selected-1]; - cmd->label = o->value(); - cmd->update_shell_menu(); - if (cmd->storage == FD_STORE_PROJECT) set_modflag(1); - } -}} - tooltip {label text for the Shell menu in the main menu bar} xywh {100 272 220 20} labelfont 1 labelsize 11 textfont 4 textsize 11 - } - Fl_Group {} { - callback {propagate_load(o, v);} open - xywh {100 297 140 71} - } { - Fl_Button {} { - label Shortcut - callback {int selected = w_settings_shell_list_selected; -if (v == LOAD) { - if (selected) { - o->value(g_shell_config->list[selected-1]->shortcut); - //o->default_value(o->value()); - } else { - o->value(0); - } -} else { - if (selected) { - Fd_Shell_Command *cmd = g_shell_config->list[selected-1]; - cmd->shortcut = o->value(); - cmd->update_shell_menu(); - if (cmd->storage == FD_STORE_PROJECT) set_modflag(1); - } -}} - tooltip {an optional keyboard shortcut to run this shell command} xywh {100 297 130 20} labelsize 11 align 16 - code0 {\#include } - class Fl_Shortcut_Button - } - Fl_Choice {} { - label {Store:} - callback {int selected = w_settings_shell_list_selected; -if (v == LOAD) { - if (selected) { - Fd_Tool_Store ts = g_shell_config->list[selected-1]->storage; - o->value(o->find_item_with_argument((long)ts)); - } else { - o->value(o->find_item_with_argument((long)FD_STORE_USER)); - } -} else { - if (selected) { - Fd_Shell_Command *cmd = g_shell_config->list[selected-1]; - Fd_Tool_Store ts = (Fd_Tool_Store)(o->mvalue()->argument()); - if (cmd->storage == FD_STORE_PROJECT) set_modflag(1); - cmd->storage = ts; - //w_settings_shell_list->text(selected, cmd->name.c_str()); - if (cmd->storage == FD_STORE_USER) - w_settings_shell_list->icon(selected, w_settings_shell_fd_user->image()); - else if (cmd->storage == FD_STORE_PROJECT) - w_settings_shell_list->icon(selected, w_settings_shell_fd_project->image()); - if (cmd->storage == FD_STORE_PROJECT) set_modflag(1); - } -}} open - tooltip {store this shell command as a user setting or save it with the .fl project file} xywh {100 322 130 20} down_box BORDER_BOX labelfont 1 labelsize 11 textsize 11 - } { - MenuItem {} { - label {@fd_user User Setting} - user_data FD_STORE_USER user_data_type long - xywh {0 0 100 20} labelsize 11 - } - MenuItem {} { - label {@fd_project Project File} - user_data FD_STORE_PROJECT user_data_type long - xywh {0 0 100 20} labelsize 11 - } - } - Fl_Choice {} { - label {Condition:} - callback {int selected = w_settings_shell_list_selected; -if (v == LOAD) { - if (selected) { - int cond = g_shell_config->list[selected-1]->condition; - o->value(o->find_item_with_argument(cond)); - } else { - o->value(o->find_item_with_argument(0)); - } -} else { - if (selected) { - Fd_Shell_Command *cmd = g_shell_config->list[selected-1]; - int cond = (int)(o->mvalue()->argument()); - cmd->condition = cond; - g_shell_config->rebuild_shell_menu(); - if (cmd->storage == FD_STORE_PROJECT) set_modflag(1); - } -}} open - tooltip {add this command to the main menu bar only if this condition is true} xywh {100 348 130 20} down_box BORDER_BOX labelfont 1 labelsize 11 textsize 11 - } { - MenuItem {} { - label {all platforms} - user_data {Fd_Shell_Command::ALWAYS} user_data_type long - xywh {0 0 100 20} labelsize 11 - } - MenuItem {} { - label {Windows only} - user_data {Fd_Shell_Command::WIN_ONLY} user_data_type long - xywh {0 0 100 20} labelsize 11 - } - MenuItem {} { - label {Linux only} - user_data {Fd_Shell_Command::UX_ONLY} user_data_type long - xywh {0 0 100 20} labelsize 11 - } - MenuItem {} { - label {macOS only} - user_data {Fd_Shell_Command::MAC_ONLY} user_data_type long - xywh {0 0 100 20} labelsize 11 - } - MenuItem {} { - label {Linux and macOS} - user_data {Fd_Shell_Command::MAC_AND_UX_ONLY} user_data_type long - xywh {0 0 100 20} labelsize 11 - } - MenuItem {} { - label {don't use} - user_data {Fd_Shell_Command::NEVER} user_data_type long - xywh {0 0 100 20} labelsize 11 - } - } - Fl_Box {} { - xywh {230 297 10 71} hide resizable - } - } - Fl_Input {} { - label {Label:} - callback {if (v == LOAD) { -// o->value(g_shell_command.c_str()); -} else { -// g_shell_command = o->value(); -}} - xywh {230 348 90 20} labelfont 1 labelsize 11 textfont 4 textsize 11 hide - } - Fl_Group {} { - callback propagate_load open - xywh {100 373 220 80} resizable - } { - Fl_Text_Editor w_settings_shell_command { - label {Shell script:} - callback {int selected = w_settings_shell_list_selected; -if (v == LOAD) { - if (selected) { - o->buffer()->text(g_shell_config->list[selected-1]->command.c_str()); - } else { - o->buffer()->text(""); - } -} else { - if (selected) { - Fd_Shell_Command *cmd = g_shell_config->list[selected-1]; - cmd->command = o->buffer()->text(); - if (cmd->storage == FD_STORE_PROJECT) set_modflag(1); - } -}} - xywh {100 373 196 80} labelfont 1 labelsize 11 align 4 textfont 4 textsize 12 resizable - code0 {o->buffer(new Fl_Text_Buffer);} - } - Fl_Group {} {open - xywh {296 373 24 80} - } { - Fl_Menu_Button w_settings_shell_text_macros { - callback {const Fl_Menu_Item *mi = o->mvalue(); -if (mi) { - char buffer[256]; - fl_strlcpy(buffer, mi->label(), 255); - int n = (int)strlen(buffer)-1; - if (buffer[n]=='@') buffer[n] = 0; - char *word = buffer; - if (word[0]=='@') word++; - if (w_settings_shell_command->buffer()->selected()) { - int start = 0, end = 0; - w_settings_shell_command->buffer()->selection_position(&start, &end); - w_settings_shell_command->buffer()->replace(start, end, word); - } else { - int pos = w_settings_shell_command->insert_position(); - w_settings_shell_command->buffer()->insert(pos, word); - } - w_settings_shell_command->do_callback(w_settings_shell_command, (void*)NULL); -}} open - tooltip {a list of text replacements available for the shell script} xywh {296 373 24 22} labelsize 11 textsize 11 - } { - MenuItem {} { - label {@@BASENAME@@} - xywh {80 80 100 20} labelfont 4 labelsize 11 - } - MenuItem {} { - label {@@PROJECTFILE_PATH@@} - xywh {0 0 100 20} labelfont 4 labelsize 11 - } - MenuItem {} { - label {@@PROJECTFILE_NAME@@} - xywh {10 10 100 20} labelfont 4 labelsize 11 - } - MenuItem {} { - label {@@CODEFILE_PATH@@} - xywh {20 20 100 20} labelfont 4 labelsize 11 - } - MenuItem {} { - label {@@CODEFILE_NAME@@} - xywh {30 30 100 20} labelfont 4 labelsize 11 - } - MenuItem {} { - label {@@HEADERFILE_PATH@@} - xywh {40 40 100 20} labelfont 4 labelsize 11 - } - MenuItem {} { - label {@@HEADERFILE_NAME@@} - xywh {50 50 100 20} labelfont 4 labelsize 11 - } - MenuItem {} { - label {@@TEXTFILE_PATH@@} - xywh {60 60 100 20} labelfont 4 labelsize 11 - } - MenuItem {} { - label {@@TEXTFILE_NAME@@} - xywh {70 70 100 20} labelfont 4 labelsize 11 - } - MenuItem {} { - label {@@FLTK_CONFIG@@} - comment {Not yet implemented} - xywh {70 70 100 20} labelfont 4 labelsize 11 hide - } - MenuItem {} { - label {@@TMPDIR@@} - xywh {70 70 100 20} labelfont 4 labelsize 11 - } - } - Fl_Button {} { - label {@+1fd_zoom} - callback {if (!script_panel) make_script_panel(); -script_input->buffer()->text(w_settings_shell_command->buffer()->text()); -script_panel->show(); - -for (;;) { - Fl_Widget* w = Fl::readqueue(); - if (w == script_panel_cancel) goto BREAK2; - else if (w == script_panel_ok) break; - else if (!w) Fl::wait(); -} - -w_settings_shell_command->buffer()->text(script_input->buffer()->text()); -w_settings_shell_command->do_callback(); -BREAK2: -script_panel->hide();} - tooltip {open the big code editor} xywh {296 395 24 22} labelsize 11 - } - Fl_Box {} { - xywh {296 417 24 10} hide resizable - } - } - } - Fl_Check_Button {} { - label {save .fl project file} - callback {int selected = w_settings_shell_list_selected; -if (v == LOAD) { - if (selected) { - o->value(g_shell_config->list[selected-1]->flags & Fd_Shell_Command::SAVE_PROJECT); - } else { - o->value(0); - } -} else { - if (selected) { - Fd_Shell_Command *cmd = g_shell_config->list[selected-1]; - int v = o->value(); - if (v) { - cmd->flags |= Fd_Shell_Command::SAVE_PROJECT; - } else { - cmd->flags &= ~Fd_Shell_Command::SAVE_PROJECT; - } - if (cmd->storage == FD_STORE_PROJECT) set_modflag(1); - } -}} - tooltip {save the project to the .fl file before running the command} xywh {100 458 110 20} down_box DOWN_BOX labelsize 11 - } - Fl_Check_Button {} { - label {save source code} - callback {int selected = w_settings_shell_list_selected; -if (v == LOAD) { - if (selected) { - o->value(g_shell_config->list[selected-1]->flags & Fd_Shell_Command::SAVE_SOURCECODE); - } else { - o->value(0); - } -} else { - if (selected) { - Fd_Shell_Command *cmd = g_shell_config->list[selected-1]; - int v = o->value(); - if (v) { - cmd->flags |= Fd_Shell_Command::SAVE_SOURCECODE; - } else { - cmd->flags &= ~Fd_Shell_Command::SAVE_SOURCECODE; - } - if (cmd->storage == FD_STORE_PROJECT) set_modflag(1); - } -}} - tooltip {generate the source code and header file before running the command} xywh {100 478 110 19} down_box DOWN_BOX labelsize 11 - } - Fl_Check_Button {} { - label {save i18n strings} - callback {int selected = w_settings_shell_list_selected; -if (v == LOAD) { - if (selected) { - o->value(g_shell_config->list[selected-1]->flags & Fd_Shell_Command::SAVE_STRINGS); - } else { - o->value(0); - } -} else { - if (selected) { - Fd_Shell_Command *cmd = g_shell_config->list[selected-1]; - int v = o->value(); - if (v) { - cmd->flags |= Fd_Shell_Command::SAVE_STRINGS; - } else { - cmd->flags &= ~Fd_Shell_Command::SAVE_STRINGS; - } - if (cmd->storage == FD_STORE_PROJECT) set_modflag(1); - } -}} - tooltip {save the internationalisation strings before running the command} xywh {100 498 110 20} down_box DOWN_BOX labelsize 11 - } - Fl_Check_Button {} { - label {show terminal} - callback {int selected = w_settings_shell_list_selected; -if (v == LOAD) { - if (selected) { - o->value(!(g_shell_config->list[selected-1]->flags & Fd_Shell_Command::DONT_SHOW_TERMINAL)); - } else { - o->value(0); - } -} else { - if (selected) { - Fd_Shell_Command *cmd = g_shell_config->list[selected-1]; - int v = o->value(); - if (!v) { - cmd->flags |= Fd_Shell_Command::DONT_SHOW_TERMINAL; - } else { - cmd->flags &= ~Fd_Shell_Command::DONT_SHOW_TERMINAL; - } - if (cmd->storage == FD_STORE_PROJECT) set_modflag(1); - } -}} - tooltip {show the terminal window when launching this script} xywh {214 458 106 20} down_box DOWN_BOX labelsize 11 - } - Fl_Check_Button {} { - label {clear terminal} - callback {int selected = w_settings_shell_list_selected; -if (v == LOAD) { - if (selected) { - o->value(g_shell_config->list[selected-1]->flags & Fd_Shell_Command::CLEAR_TERMINAL); - } else { - o->value(0); - } -} else { - if (selected) { - Fd_Shell_Command *cmd = g_shell_config->list[selected-1]; - int v = o->value(); - if (v) { - cmd->flags |= Fd_Shell_Command::CLEAR_TERMINAL; - } else { - cmd->flags &= ~Fd_Shell_Command::CLEAR_TERMINAL; - } - if (cmd->storage == FD_STORE_PROJECT) set_modflag(1); - } -}} - tooltip {clear the teminal window before running this script} xywh {214 478 106 19} down_box DOWN_BOX labelsize 11 - } - Fl_Check_Button {} { - label {clear term history} - callback {int selected = w_settings_shell_list_selected; -if (v == LOAD) { - if (selected) { - o->value(g_shell_config->list[selected-1]->flags & Fd_Shell_Command::CLEAR_HISTORY); - } else { - o->value(0); - } -} else { - if (selected) { - Fd_Shell_Command *cmd = g_shell_config->list[selected-1]; - int v = o->value(); - if (v) { - cmd->flags |= Fd_Shell_Command::CLEAR_HISTORY; - } else { - cmd->flags &= ~Fd_Shell_Command::CLEAR_HISTORY; - } - if (cmd->storage == FD_STORE_PROJECT) set_modflag(1); - } -}} - tooltip {clear the teminal history in the terminal window} xywh {214 498 106 19} down_box DOWN_BOX labelsize 11 - } - } - Fl_Box w_settings_shell_fd_project { - image {pixmaps/fd_project.png} compress_image 1 bind_image 1 bind_deimage 1 xywh {20 70 16 15} labelsize 11 hide deactivate - code0 {o->image()->scale(16, 16);} - } - Fl_Box w_settings_shell_fd_user { - image {pixmaps/fd_user.png} compress_image 1 bind_image 1 bind_deimage 1 xywh {20 70 16 15} labelsize 11 hide deactivate - code0 {o->image()->scale(16, 16);} - } - } - Fl_Group w_settings_i18n_tab { - label Locale - callback {propagate_load(o, v);} open - scale_image {36 24} image {icons/language_64.png} compress_image 1 xywh {10 60 320 480} labelsize 11 hide - } { - Fl_Group {} { - callback propagate_load open - xywh {100 78 170 20} - } { - Fl_Choice i18n_type_chooser { - label {i18n Library:} - callback i18n_type_cb open - tooltip {Type of internationalization to use.} xywh {100 78 160 20} box THIN_UP_BOX down_box BORDER_BOX labelsize 11 textsize 11 - } { - MenuItem {} { - label None - xywh {0 -11 100 20} labelsize 11 - } - MenuItem {} { - label {GNU gettext} - xywh {0 -11 100 20} labelsize 11 - } - MenuItem {} { - label {POSIX catgets} - xywh {0 -11 100 20} labelsize 11 - } - } - Fl_Box {} { - xywh {260 78 10 20} hide resizable - } - } - Fl_Group i18n_gnu_group { - callback {propagate_load(o, v);} open - xywh {100 103 220 95} - } { - Fl_Input i18n_gnu_include_input { - label {\#include:} - callback {if (v == LOAD) { - o->value(g_project.i18n_gnu_include.c_str()); -} else { - undo_checkpoint(); - g_project.i18n_gnu_include = o->value(); - set_modflag(1); -}} - tooltip {The include file for internationalization.} xywh {100 103 220 20} box THIN_DOWN_BOX labelsize 11 textfont 4 textsize 11 - } - Fl_Input i18n_gnu_conditional_input { - label {Conditional:} - callback {if (v == LOAD) { - o->value(g_project.i18n_gnu_conditional.c_str()); -} else { - undo_checkpoint(); - g_project.i18n_gnu_conditional = o->value(); - set_modflag(1); -}} - tooltip {only include the header file if this preprocessor macro is defined, for example FLTK_GETTEXT_FOUND} xywh {100 128 220 20} box THIN_DOWN_BOX labelsize 11 textfont 4 textsize 11 - } - Fl_Input i18n_gnu_function_input { - label {Function:} - callback {if (v == LOAD) { - o->value(g_project.i18n_gnu_function.c_str()); -} else { - undo_checkpoint(); - g_project.i18n_gnu_function = o->value(); - set_modflag(1); -}} - tooltip {The function to call to translate labels and tooltips, usually "gettext" or "_"} xywh {100 153 220 20} box THIN_DOWN_BOX labelsize 11 textfont 4 textsize 11 - } - Fl_Input i18n_gnu_static_function_input { - label {Static Function:} - callback {if (v == LOAD) { - o->value(g_project.i18n_gnu_static_function.c_str()); -} else { - undo_checkpoint(); - g_project.i18n_gnu_static_function = o->value(); - set_modflag(1); -}} - tooltip {function to call to translate static text, The function to call to internationalize labels and tooltips, usually "gettext_noop" or "N_"} xywh {100 178 220 20} box THIN_DOWN_BOX labelsize 11 textfont 4 textsize 11 - } - } - Fl_Group i18n_posix_group { - callback {propagate_load(o, v);} open - xywh {100 103 220 95} hide - } { - Fl_Input i18n_pos_include_input { - label {\#include:} - callback {if (v == LOAD) { - o->value(g_project.i18n_pos_include.c_str()); -} else { - undo_checkpoint(); - g_project.i18n_pos_include = o->value(); - set_modflag(1); -}} - tooltip {The include file for internationalization.} xywh {100 103 220 20} box THIN_DOWN_BOX labelsize 11 textfont 4 textsize 11 - } - Fl_Input i18n_pos_conditional_input { - label {Conditional:} - callback {if (v == LOAD) { - o->value(g_project.i18n_pos_conditional.c_str()); -} else { - undo_checkpoint(); - g_project.i18n_pos_conditional = o->value(); - set_modflag(1); -}} - tooltip {only include the header file if this preprocessor macro is defined, for example FLTK_GETTEXT_FOUND} xywh {100 128 220 20} box THIN_DOWN_BOX labelsize 11 textfont 4 textsize 11 - } - Fl_Input i18n_pos_file_input { - label {File:} - callback {if (v == LOAD) { - o->value(g_project.i18n_pos_file.c_str()); -} else { - undo_checkpoint(); - g_project.i18n_pos_file = o->value(); - set_modflag(1); -}} - tooltip {The name of the message catalog.} xywh {100 153 220 20} box THIN_DOWN_BOX labelsize 11 textfont 4 textsize 11 - } - Fl_Group {} { - callback {propagate_load(o, v);} open - xywh {100 178 90 20} - } { - Fl_Input i18n_pos_set_input { - label {Set:} - callback {if (v == LOAD) { - o->value(g_project.i18n_pos_set.c_str()); -} else { - undo_checkpoint(); - g_project.i18n_pos_set = o->value(); - set_modflag(1); -}} - tooltip {The message set number.} xywh {100 178 80 20} type Int box THIN_DOWN_BOX labelsize 11 textfont 4 textsize 11 - } - Fl_Box {} { - xywh {180 178 10 20} hide resizable - } - } - } - Fl_Box {} { - xywh {100 530 220 10} hide resizable - } - } - Fl_Group w_settings_user_tab { - label User - callback {propagate_load(o, v);} open - scale_image {36 24} image {icons/user_circle_64.png} compress_image 1 xywh {10 60 320 480} labelsize 11 hide - code0 {\#include } - } { - Fl_Box {} { - label {---- Widget Browser ----} - xywh {100 84 220 20} labelfont 1 labelsize 11 align 20 - } - Fl_Group {} { - callback propagate_load open - xywh {100 112 220 20} - } { - Fl_Choice {} { - label {Label:} - user_data {&Widget_Browser::label_font} - callback cb_Comments open - xywh {100 112 151 20} box THIN_UP_BOX down_box BORDER_BOX labelfont 1 labelsize 11 textsize 11 resizable - code0 {extern Fl_Menu_Item fontmenu[];} - code1 {o->menu(fontmenu);} - } {} - Fl_Button {} { - user_data {&Widget_Browser::label_color} - callback cb_Color_Chip - xywh {251 112 51 20} labelsize 11 - } - Fl_Menu_Button {} { - user_data {&Widget_Browser::label_color} - callback cb_Color_Choice open - xywh {302 112 18 20} - code0 {extern Fl_Menu_Item colormenu[];} - code1 {o->menu(colormenu);} - } {} - } - Fl_Group {} { - callback propagate_load open - xywh {100 137 220 20} - } { - Fl_Choice {} { - label {Class:} - user_data {&Widget_Browser::class_font} - callback cb_Comments open - xywh {100 137 151 20} box THIN_UP_BOX down_box BORDER_BOX labelfont 1 labelsize 11 textsize 11 resizable - code0 {extern Fl_Menu_Item fontmenu[];} - code1 {o->menu(fontmenu);} - } {} - Fl_Button {} { - user_data {&Widget_Browser::class_color} - callback cb_Color_Chip - xywh {251 137 51 20} labelsize 11 - } - Fl_Menu_Button {} { - user_data {&Widget_Browser::class_color} - callback cb_Color_Choice open - xywh {302 137 18 20} - code0 {extern Fl_Menu_Item colormenu[];} - code1 {o->menu(colormenu);} - } {} - } - Fl_Group {} { - callback propagate_load open - xywh {100 162 220 20} - } { - Fl_Choice {} { - label {Function:} - user_data {&Widget_Browser::func_font} - callback cb_Comments open - xywh {100 162 151 20} box THIN_UP_BOX down_box BORDER_BOX labelfont 1 labelsize 11 textsize 11 resizable - code0 {extern Fl_Menu_Item fontmenu[];} - code1 {o->menu(fontmenu);} - } {} - Fl_Button {} { - user_data {&Widget_Browser::func_color} - callback cb_Color_Chip - xywh {251 162 51 20} labelsize 11 - } - Fl_Menu_Button {} { - user_data {&Widget_Browser::func_color} - callback cb_Color_Choice open - xywh {302 162 18 20} - code0 {extern Fl_Menu_Item colormenu[];} - code1 {o->menu(colormenu);} - } {} - } - Fl_Group {} { - callback propagate_load open - xywh {100 187 220 20} - } { - Fl_Choice {} { - label {Name:} - user_data {&Widget_Browser::name_font} - callback cb_Comments open - xywh {100 187 151 20} box THIN_UP_BOX down_box BORDER_BOX labelfont 1 labelsize 11 textsize 11 resizable - code0 {extern Fl_Menu_Item fontmenu[];} - code1 {o->menu(fontmenu);} - } {} - Fl_Button {} { - user_data {&Widget_Browser::name_color} - callback cb_Color_Chip - xywh {251 187 51 20} labelsize 11 - } - Fl_Menu_Button {} { - user_data {&Widget_Browser::name_color} - callback cb_Color_Choice open - xywh {302 187 18 20} - code0 {extern Fl_Menu_Item colormenu[];} - code1 {o->menu(colormenu);} - } {} - } - Fl_Group {} { - callback propagate_load open - xywh {100 212 220 20} - } { - Fl_Choice {} { - label {Code:} - user_data {&Widget_Browser::code_font} - callback cb_Comments open - xywh {100 212 151 20} box THIN_UP_BOX down_box BORDER_BOX labelfont 1 labelsize 11 textsize 11 resizable - code0 {extern Fl_Menu_Item fontmenu[];} - code1 {o->menu(fontmenu);} - } {} - Fl_Button {} { - user_data {&Widget_Browser::code_color} - callback cb_Color_Chip - xywh {251 212 51 20} labelsize 11 - } - Fl_Menu_Button {} { - user_data {&Widget_Browser::code_color} - callback cb_Color_Choice open - xywh {302 212 18 20} - code0 {extern Fl_Menu_Item colormenu[];} - code1 {o->menu(colormenu);} - } {} - } - Fl_Group {} { - callback propagate_load open - xywh {100 237 220 20} - } { - Fl_Choice {} { - label {Comments:} - user_data {&Widget_Browser::comment_font} - callback cb_Comments open - xywh {100 237 151 20} box THIN_UP_BOX down_box BORDER_BOX labelfont 1 labelsize 11 textsize 11 resizable - code0 {extern Fl_Menu_Item fontmenu[];} - code1 {o->menu(fontmenu);} - } {} - Fl_Button {} { - user_data {&Widget_Browser::comment_color} - callback cb_Color_Chip - xywh {251 237 51 20} labelsize 11 - } - Fl_Menu_Button {} { - user_data {&Widget_Browser::comment_color} - callback cb_Color_Choice open - xywh {302 237 18 20} - code0 {extern Fl_Menu_Item colormenu[];} - code1 {o->menu(colormenu);} - } {} - } - } - } - Fl_Group {} {open - xywh {10 550 320 20} - } { - Fl_Button {} { - label Close - callback {if (g_shell_config) - g_shell_config->write(fluid_prefs, FD_STORE_USER); -g_layout_list.write(fluid_prefs, FD_STORE_USER); -settings_window->hide();} - tooltip {Close this dialog.} xywh {230 550 100 20} labelsize 11 - } - Fl_Box {} { - xywh {220 550 10 20} hide resizable - } - } - } - code {w_settings_tabs->do_callback(w_settings_tabs, LOAD);} {} -} - -Function {make_shell_window()} {open -} { - Fl_Window shell_run_window { - label {Shell Command Output} open - xywh {769 584 555 430} type Double align 80 resizable visible - } { - Fl_Terminal shell_run_terminal { - xywh {10 10 535 375} resizable - code0 {shell_run_terminal->ansi(1);} - code1 {shell_run_terminal->history_lines(1000);} - } - Fl_Group {} {open - xywh {10 395 535 25} - } { - Fl_Button {} { - label Clear - callback {// clear screen, clear scrollback, home cursor -shell_run_terminal->append("\\033[2J\\033[3J\\033[H");} - xywh {10 395 94 25} - } - Fl_Box {} { - xywh {104 395 341 25} hide resizable - } - Fl_Return_Button shell_run_button { - label Close - callback {Fl_Preferences pos(fluid_prefs, "shell_run_Window_pos"); -pos.set("x", shell_run_window->x()); -pos.set("y", shell_run_window->y()); -pos.set("w", shell_run_window->w()); -pos.set("h", shell_run_window->h()); -shell_run_window->hide();} - xywh {445 395 100 25} - } - } - } -} - -decl {Fl_Menu_Item *w_layout_menu_storage[4];} {private global -} diff --git a/fluid/alignment_panel.h b/fluid/alignment_panel.h deleted file mode 100644 index 0f10e9494..000000000 --- a/fluid/alignment_panel.h +++ /dev/null @@ -1,141 +0,0 @@ -// -// Setting and shell dialogs for the Fast Light Tool Kit (FLTK). -// -// Copyright 1998-2023 by Bill Spitzak and others. -// -// This library is free software. Distribution and use rights are outlined in -// the file "COPYING" which should have been included with this file. If this -// file is missing or damaged, see the license at: -// -// https://www.fltk.org/COPYING.php -// -// Please see the following page on how to report bugs and issues: -// -// https://www.fltk.org/bugs.php -// - -// generated by Fast Light User Interface Designer (fluid) version 1.0400 - -#ifndef alignment_panel_h -#define alignment_panel_h -#include -#include "fluid.h" -#include "widget_browser.h" -#include "Fd_Snap_Action.h" -#include "shell_command.h" -#include -#include -#include "fluid_filename.h" -#include -#include -/** - // initialize the scheme from preferences -*/ -void init_scheme(void); -extern struct Fl_Menu_Item *dbmanager_item; -extern void i18n_cb(Fl_Choice *,void *); -extern void scheme_cb(Fl_Scheme_Choice *, void *); -extern int w_settings_shell_list_selected; -#include -extern Fl_Double_Window *script_panel; -#include -extern Fl_Text_Editor *script_input; -#include -extern void propagate_load(Fl_Group*, void*); -#include -extern Fl_Return_Button *script_panel_ok; -#include -extern Fl_Button *script_panel_cancel; -#include -Fl_Double_Window* make_script_panel(); -extern Fl_Double_Window *settings_window; -#include -extern Fl_Tabs *w_settings_tabs; -extern void scheme_cb(Fl_Scheme_Choice*, void*); -extern Fl_Scheme_Choice *scheme_choice; -#include -extern Fl_Check_Button *tooltips_button; -extern Fl_Check_Button *completion_button; -extern Fl_Check_Button *openlast_button; -extern Fl_Check_Button *prevpos_button; -extern Fl_Check_Button *show_comments_button; -#include -extern Fl_Spinner *recent_spinner; -extern Fl_Check_Button *use_external_editor_button; -#include -extern Fl_Input *editor_command_input; -extern void toggle_guides_cb(Fl_Check_Button*, void*); -extern Fl_Check_Button *guides_button; -extern void toggle_restricted_cb(Fl_Check_Button*, void*); -extern Fl_Check_Button *restricted_button; -extern void toggle_ghosted_outline_cb(Fl_Check_Button*, void*); -extern Fl_Check_Button *ghosted_outline_button; -extern Fl_Group *w_settings_project_tab; -extern Fl_Input *header_file_input; -extern Fl_Input *code_file_input; -extern Fl_Check_Button *include_H_from_C_button; -extern Fl_Check_Button *use_FL_COMMAND_button; -extern Fl_Check_Button *utf8_in_src_button; -extern Fl_Check_Button *avoid_early_includes_button; -extern Fl_Check_Button *w_proj_mergeback; -extern Fl_Group *w_settings_layout_tab; -#include -extern Fl_Choice *layout_choice; -#include -extern Fl_Menu_Button *w_layout_menu; -#include -extern void edit_layout_preset_cb(Fl_Button*, long); -extern Fl_Button *preset_choice[3]; -#include -extern Fl_Menu_Item fontmenu_w_default[]; -extern Fl_Group *w_settings_shell_tab; -#include -extern Fl_Browser *w_settings_shell_list; -extern Fl_Group *w_settings_shell_toolbox; -extern Fl_Button *w_settings_shell_dup; -extern Fl_Button *w_settings_shell_remove; -extern Fl_Menu_Button *w_settings_shell_menu; -extern Fl_Button *w_settings_shell_play; -extern Fl_Group *w_settings_shell_cmd; -#include -extern Fl_Text_Editor *w_settings_shell_command; -extern Fl_Menu_Button *w_settings_shell_text_macros; -extern Fl_Box *w_settings_shell_fd_project; -extern Fl_Box *w_settings_shell_fd_user; -extern Fl_Group *w_settings_i18n_tab; -extern void i18n_type_cb(Fl_Choice*, void*); -extern Fl_Choice *i18n_type_chooser; -extern Fl_Group *i18n_gnu_group; -extern Fl_Input *i18n_gnu_include_input; -extern Fl_Input *i18n_gnu_conditional_input; -extern Fl_Input *i18n_gnu_function_input; -extern Fl_Input *i18n_gnu_static_function_input; -extern Fl_Group *i18n_posix_group; -extern Fl_Input *i18n_pos_include_input; -extern Fl_Input *i18n_pos_conditional_input; -extern Fl_Input *i18n_pos_file_input; -#include -extern Fl_Int_Input *i18n_pos_set_input; -#include -extern Fl_Group *w_settings_user_tab; -extern Fl_Menu_Item fontmenu[]; -extern Fl_Menu_Item colormenu[]; -Fl_Double_Window* make_settings_window(); -extern Fl_Menu_Item menu_layout_choice[]; -extern Fl_Menu_Item menu_w_layout_menu[]; -#define w_layout_menu_rename (menu_w_layout_menu+0) -extern Fl_Menu_Item *w_layout_menu_storage[4]; -#define w_layout_menu_load (menu_w_layout_menu+5) -#define w_layout_menu_save (menu_w_layout_menu+6) -#define w_layout_menu_delete (menu_w_layout_menu+7) -extern Fl_Menu_Item menu_w_settings_shell_menu[]; -extern Fl_Menu_Item menu_Store[]; -extern Fl_Menu_Item menu_Condition[]; -extern Fl_Menu_Item menu_w_settings_shell_text_macros[]; -extern Fl_Menu_Item menu_i18n_type_chooser[]; -extern Fl_Double_Window *shell_run_window; -#include -extern Fl_Terminal *shell_run_terminal; -extern Fl_Return_Button *shell_run_button; -Fl_Double_Window* make_shell_window(); -#endif diff --git a/fluid/autodoc.cxx b/fluid/autodoc.cxx new file mode 100644 index 000000000..63818d8af --- /dev/null +++ b/fluid/autodoc.cxx @@ -0,0 +1,602 @@ +// +// Self-generate snapshots of user interface for FLUID documentation. +// +// Copyright 2024 by Bill Spitzak and others. +// +// This library is free software. Distribution and use rights are outlined in +// the file "COPYING" which should have been included with this file. If this +// file is missing or damaged, see the license at: +// +// https://www.fltk.org/COPYING.php +// +// Please see the following page on how to report bugs and issues: +// +// https://www.fltk.org/bugs.php +// + +#ifndef NDEBUG + +#include "autodoc.h" +#include "fluid.h" +#include "factory.h" +#include "widget_browser.h" +#include "widget_panel.h" +#include "Fl_Widget_Type.h" +#include "Fl_Window_Type.h" +#include "function_panel.h" +#include "settings_panel.h" +#include "codeview_panel.h" + +#include +#include +#include +#include +#include + +extern Fl_Double_Window *settings_window; + +/** \file autodoc.cxx + + \todo Implement a function to snapshot a window including decoration + - see: void Fl_Widget_Surface::draw_decorated_window(Fl_Window *win, int win_offset_x, int win_offset_y) + - see: void Fl_Widget_Surface::origin(int x, int y) + - see: void Fl_Widget_Surface::draw(Fl_Widget* widget, int delta_x, int delta_y) + - see: void Fl_Widget_Surface::print_window_part(Fl_Window *win, int x, int y, int w, int h, int delta_x, int delta_y) + + \todo Implement a version that snaps multiple windows in a desktop style situation. + + \todo a version that takes snapshots of a range of menu items + + \todo implement FL_SNAP_TO_GROUP, possibly with a number on how many groups up in the hierarchy + */ + +/** \addtogroup fl_drawings + @{ + */ + +const int FL_SNAP_TO_WINDOW = 0x7f000000; + +static Fl_Box snap_clear_(0, 0, 0, 0); +Fl_Widget *FL_SNAP_AREA_CLEAR = &snap_clear_; + +static inline int fl_min(int a, int b) { return a < b ? a : b; } +static inline uchar fl_min(uchar a, uchar b) { return a < b ? a : b; } +static inline int fl_max(int a, int b) { return a > b ? a : b; } + +/** + Create a rect by providing a margin around a zero size rectangle. + \param[in] dx, dy positive integers, move margin up and left + \param[in] dr, db move margin to the right and down + */ +Fl_Margin::Fl_Margin(int dx, int dy, int dr, int db) + : Fl_Rect(-dx, -dy, dx+dr, dy+db) +{ +} + +/** + Convert an RGB image into an RGBA image. + \param[inout] image pointer to an RGB image, deletes the RGB image, returns the RGBA image + \return 0 if the image is now in RGBA format, or -1 if it can't be converted + */ +static int convert_RGB_to_RGBA(Fl_RGB_Image *&img) { + if (img->d() == 4) + return 0; + if (img->d() != 3) + return -1; + + // Copy pixel data from RGB to RGBA raw data + int img_w = img->w(); + int img_h = img->h(); + uchar *data = new uchar[img_w * img_h * 4], *dst = data; + int ld = img->ld(); if (ld == 0) ld = img_w * 3; + int i, j; + for (i=0; idata()[0] + i * ld; + for (j=0; jd() != 4) + return; + if (dx > img->w()) + return; + if (dx > 0) { + int max_x = dx, max_y = img->h(); + int ld = img->ld(); if (ld == 0) ld = img->w() * img->d(); + float a = 255/max_x; + for (int i = 0; i < max_x; i++) { + uchar *rgba = (uchar*)img->data()[0] + i * img->d(); + uchar alpha = static_cast(i * a); + for (int j = 0; j < max_y; j++) { + rgba[3] = fl_min(alpha, rgba[3]); + rgba += ld; + } + } + } +} + +/** + Blend the top lines of the alpha channel of an RBGA image to full transparency. + \param[in] img must be an RGBA image + \param[in] dy number of lines to blend + */ +void blend_alpha_top(const Fl_RGB_Image *img, int dy) { + if (img->d() != 4) + return; + if (dy > img->h()) + return; + if (dy > 0) { + int max_x = img->w(), max_y = dy; + int ld = img->ld(); if (ld == 0) ld = img->w() * img->d(); + float a = 255/max_y; + for (int i = 0; i < max_y; i++) { + uchar *rgba = (uchar*)img->data()[0] + i * ld; + uchar alpha = static_cast(i * a); + for (int j = 0; j < max_x; j++) { + rgba[3] = fl_min(alpha, rgba[3]); + rgba += 4; + } + } + } +} + +/** + Blend the right side lines of the alpha channel of an RBGA image to full transparency. + \param[in] img must be an RGBA image + \param[in] dx number of lines to blend + */ +void blend_alpha_right(const Fl_RGB_Image *img, int dx) { + if (img->d() != 4) + return; + if (dx > img->w()) + return; + if (dx > 0) { + int max_x = dx, max_y = img->h(); + int ld = img->ld(); if (ld == 0) ld = img->w() * img->d(); + float a = 255/max_x; + for (int i = 0; i < max_x; i++) { + uchar *rgba = (uchar*)img->data()[0] + (img->w()-i-1) * img->d(); + uchar alpha = static_cast(i * a); + for (int j = 0; j < max_y; j++) { + rgba[3] = fl_min(alpha, rgba[3]); + rgba += ld; + } + } + } +} + +/** + Blend the bottom lines of the alpha channel of an RBGA image to full transparency. + \param[in] img must be an RGBA image + \param[in] dy number of lines to blend + */ +void blend_alpha_bottom(const Fl_RGB_Image *img, int dy) { + if (img->d() != 4) + return; + if (dy > img->h()) + return; + if (dy > 0) { + int max_x = img->w(), max_y = dy; + int ld = img->ld(); if (ld == 0) ld = img->w() * img->d(); + float a = 255/max_y; + for (int i = 0; i < max_y; i++) { + uchar *rgba = (uchar*)img->data()[0] + (img->h()-i-1) * ld; + uchar alpha = static_cast(i * a); + for (int j = 0; j < max_x; j++) { + rgba[3] = fl_min(alpha, rgba[3]); + rgba += 4; + } + } + } +} + +/** + Take a snapshot of a number of widgets and save it as a png image. + + Draw a rectangular snapshot that fits around all widgets inside a window. + All widgets must be inside the same window. It's up to the caller to ensure + that widgets are visible. This includes children of `Fl_Tabs`. + + Outside labels of widgets are not taken into account, but a `frame` can be + provided to grow the snapshot rectangle. Setting individual parameters of the + frame to `FL_SNAP_TO_WINDOW` will extend the snapshot to the borders of the + top level window. + + Another `blend` frame can be added around the image that fades to full + transparency on selected sides. + + Use `Fl_Margin` to create `frame` and `blend` using positive integers to grow + the rectangle to the left, top, right, and bottom. + + The image can be scaled after all processing. Note that snapshot is always + created in FLTK resolution, even if the screen uses a higher resolution. + + \param[in] filename the snapshot will be written to this file in png format + \param[in] w draw a bounding box around all widgets in the NULL terminated list + \param[in] frame add a margin around the bounding box + \param[in] blend add another margin around the bounding box that fades to full transparency + \param[in] scale scale everything by this factor before saving it + \return the result of fl_write_png or -3 if another error occurred + */ +int fl_snapshot(const char *filename, Fl_Widget **w, + const Fl_Rect &frame, + const Fl_Rect &blend, + double scale) +{ + int i, min_x = 0, min_y = 0, max_x = 0, max_y = 0, bb_w, bb_h, img_w, img_h; + + // Get the bounding box for all widgets and make sure that all widgets are shown + for (i=0; w[i]; i++) { + int x, y; + Fl_Widget *ww = w[i]; + if (ww == FL_SNAP_AREA_CLEAR) { + min_x = max_x = 0; + min_y = max_y = 0; + } else { + ww->top_window_offset(x, y); + if (i==0) { + min_x = x; max_x = x + ww->w(); + min_y = y; max_y = y + ww->h(); + } else { + min_x = fl_min(min_x, x); max_x = fl_max(max_x, x + ww->w()); + min_y = fl_min(min_y, y); max_y = fl_max(max_y, y + ww->h()); + } + } + + // this does not help us with Fl_Tab groups + while (ww) { ww->show(); ww = ww->parent(); } + } + + // Check for special values in frame and adjust bounding box + Fl_Rect c_frame = frame; + if (frame.x() == -FL_SNAP_TO_WINDOW) c_frame.x(-min_x); + if (frame.y() == -FL_SNAP_TO_WINDOW) c_frame.y(-min_y); + if (frame.r() == FL_SNAP_TO_WINDOW) c_frame.r(w[0]->top_window()->w()-max_x); + if (frame.b() == FL_SNAP_TO_WINDOW) c_frame.b(w[0]->top_window()->h()-max_y); + + min_x += c_frame.x(); max_x += c_frame.r(); + min_y += c_frame.y(); max_y += c_frame.b(); + bb_w = max_x - min_x; bb_h = max_y - min_y; + img_w = bb_w + blend.w(); + img_h = bb_h + blend.h(); + + // Generate the Image Surface + Fl_Image_Surface *srfc = new Fl_Image_Surface(img_w, img_h); + Fl_Image_Surface::push_current(srfc); + + // Draw the background + fl_rectf(0, 0, img_w, img_h, 0x1395bf00); + + // Draw the top level window + srfc->draw(w[0]->top_window(), -blend.x()-min_x, -blend.y()-min_y); + Fl_Image_Surface::pop_current(); + Fl_RGB_Image *img = srfc->image(); + + // Do we want an alpha blended extension of the frame? + if ((blend.x()<0 || blend.y()<0 || blend.r()>0 || blend.b()>0)) { + if (convert_RGB_to_RGBA(img) == -1) { + delete img; + delete srfc; + return -3; + } + if (blend.x() < 0) blend_alpha_left(img, -blend.x()); + if (blend.y() < 0) blend_alpha_top(img, -blend.y()); + if (blend.r() > 0) blend_alpha_right(img, blend.r()); + if (blend.b() > 0) blend_alpha_bottom(img, blend.b()); + } + + // If scale is set, scale the image + if (scale != 1.0) { + Fl_Image::scaling_algorithm(FL_RGB_SCALING_BILINEAR); + Fl_RGB_Image *scaled_img = (Fl_RGB_Image*)img->copy(img->w()*scale, img->h()*scale); + delete img; + img = scaled_img; + } + + // Write the image to disk + int ret = fl_write_png(filename, img); + + // Clean up + delete img; + delete srfc; + return ret; +} + +/** + Take a snapshot of the size of the bounding box around two widgets and save it as a png image. + + \param[in] filename the snapshot will be written to this file in png format + \param[in] w1, w2 top left and bottom right widget + \param[in] frame add a margin around the bounding box + \param[in] blend add another margin around the bounding box that fades to full transparency + \param[in] scale scale everything by this factor before saving it + \return the result of fl_write_png or -3 if another error occurred + + \see fl_snapshot(const char*, Fl_Widget**, const Fl_Rect&, const Fl_Rect&, double) + */ +int fl_snapshot(const char *filename, Fl_Widget *w1, Fl_Widget *w2, + const Fl_Rect &frame, + const Fl_Rect &blend, + double scale) +{ + Fl_Widget *ww[3] = { w1, w2, NULL }; + return fl_snapshot(filename, ww, frame, blend, scale); +} + +/** + Take a snapshot of a widget inside its window and save it as a png image. + + \param[in] filename the snapshot will be written to this file in png format + \param[in] w snap this window, can also be a groups + \param[in] frame add a margin around the bounding box + \param[in] blend add another margin around the bounding box that fades to full transparency + \param[in] scale scale everything by this factor before saving it + \return the result of fl_write_png or -3 if another error occurred + + \see fl_snapshot(const char*, Fl_Widget**, const Fl_Rect&, const Fl_Rect&, double) + */ +int fl_snapshot(const char *filename, Fl_Widget *w, + const Fl_Rect &frame, + const Fl_Rect &blend, + double scale) +{ + Fl_Widget *ww[2] = { w, NULL }; + return fl_snapshot(filename, ww, frame, blend, scale); +} + +/** @} */ + + +void run_autodoc(const Fl_String &target_dir) { + // A list of all the margins we will use later + Fl_Margin win_margin(0, 0, 0, 0); + Fl_Margin win_blend(10, 10, 10, 10); + Fl_Margin tab_margin(FL_SNAP_TO_WINDOW, 32, FL_SNAP_TO_WINDOW, 4); + Fl_Margin xtab_margin(FL_SNAP_TO_WINDOW, 50, FL_SNAP_TO_WINDOW, 4); + Fl_Margin row_margin(FL_SNAP_TO_WINDOW, 4, FL_SNAP_TO_WINDOW, 4); + Fl_Margin xrow_margin(FL_SNAP_TO_WINDOW, 14, FL_SNAP_TO_WINDOW, 4); + Fl_Margin row_blend(0, 10, 0, 10); + +// Fl::scheme("gtk+"); + + // Create a silly project that contains all widgets that we want to document + new_project(false); + + /*Fl_Type *t_func = */ add_new_widget_from_user("Function", kAddAsLastChild, false); + Fl_Window_Type *t_win = (Fl_Window_Type*)add_new_widget_from_user("Fl_Window", kAddAsLastChild, false); + t_win->label("My Main Window"); + Fl_Widget_Type *t_grp = (Fl_Widget_Type*)add_new_widget_from_user("Fl_Group", kAddAsLastChild, false); + t_grp->public_ = 0; + Fl_Widget_Type *t_btn = (Fl_Widget_Type*)add_new_widget_from_user("Fl_Button", kAddAsLastChild, false); + t_btn->comment("Don't press this button!"); + t_btn->name("emergency_btn"); + ((Fl_Button*)t_btn->o)->shortcut(FL_COMMAND|'g'); + Fl_Type *t_sldr = add_new_widget_from_user("Fl_Slider", kAddAsLastChild, false); + Fl_Type *t_inp = add_new_widget_from_user("Fl_Input", kAddAsLastChild, false); + Fl_Type *t_flx = add_new_widget_from_user("Fl_Flex", kAddAsLastChild, false); + Fl_Type *t_flxc = add_new_widget_from_user("Fl_Button", kAddAsLastChild, false); + select_only(t_grp); + Fl_Type *t_grd = add_new_widget_from_user("Fl_Grid", kAddAsLastChild, false); + Fl_Type *t_grdc = add_new_widget_from_user("Fl_Button", kAddAsLastChild, false); + + widget_browser->rebuild(); + g_project.update_settings_dialog(); + + // TODO: FLUID overview + + // TODO: explain FLUID command line usage + + // TODO: take a snapshot of FLUID in a desktop situation + // (main, toolbar, document, widget editor, code view) + + // ---- main window + // explain titlebar + // explain menubar? + // explain widget browser + // explain widget browser entry + main_window->size(350, 320); + fl_snapshot((target_dir + "main_window.png").c_str(), main_window, win_margin, win_blend); + fl_snapshot((target_dir + "main_menubar.png").c_str(), main_menubar, row_margin, row_blend); + fl_snapshot((target_dir + "main_browser.png").c_str(), widget_browser, FL_SNAP_AREA_CLEAR, + Fl_Rect(0, 30, FL_SNAP_TO_WINDOW, 100), row_blend, 2.0); + + + // TODO: document view + // explain dnd + // explain selection, multiple selection, keyboard shortcuts + // explain mouse functionality and alignment + // explain live resize + // arrow: move by 1 + // shift: resize by one + // Meta: move by Widget Gap + // Shift Meta: resize by Widget Increment + + // ---- widget bin + // show grouping + // explain non-widget types and where they will be located + // explain widgets types an their dnd option + // explain menu arrays + // list exceptions (subwindow, scroll) + if (!widgetbin_panel) make_widgetbin(); + fl_snapshot((target_dir + "widgetbin_panel.png").c_str(), widgetbin_panel, win_margin, win_blend); + + // ---- code view + // explain functionality + // explain live update and choices + // show various tabs + // explain find and locate + if (!codeview_panel) make_codeview(); + update_codeview_cb(NULL, NULL); + cv_tab->value(cv_source_tab); + fl_snapshot((target_dir + "codeview_panel.png").c_str(), codeview_panel, win_margin, win_blend); + fl_snapshot((target_dir + "cv_find_row.png").c_str(), cv_find_row, row_margin, row_blend); + fl_snapshot((target_dir + "cv_settings_row.png").c_str(), cv_settings_row, row_margin, row_blend); + + // ---- settings dialog + // show and explain all tabs + fl_snapshot((target_dir + "w_settings.png").c_str(), settings_window, win_margin, win_blend); + fl_snapshot((target_dir + "w_settings_general_tab.png").c_str(), w_settings_general_tab, xtab_margin, row_blend); + w_settings_tabs->value(w_settings_project_tab); + fl_snapshot((target_dir + "w_settings_project_tab.png").c_str(), w_settings_project_tab, xtab_margin, row_blend); + w_settings_tabs->value(w_settings_layout_tab); + fl_snapshot((target_dir + "w_settings_layout_tab.png").c_str(), w_settings_layout_tab, xtab_margin, row_blend); + w_settings_tabs->value(w_settings_shell_tab); + w_settings_shell_list->value(1); + w_settings_shell_list->do_callback(); + fl_snapshot((target_dir + "w_settings_shell_tab.png").c_str(), w_settings_shell_tab, xtab_margin, row_blend); + w_settings_tabs->value(w_settings_i18n_tab); + i18n_type_chooser->value(1); + i18n_type_chooser->do_callback(); + fl_snapshot((target_dir + "w_settings_i18n_gnu.png").c_str(), i18n_type_chooser, i18n_gnu_static_function_input, row_margin, row_blend); + i18n_type_chooser->value(2); + i18n_type_chooser->do_callback(); + fl_snapshot((target_dir + "w_settings_i18n_psx.png").c_str(), i18n_type_chooser, i18n_pos_set_input, row_margin, row_blend); + w_settings_tabs->value(w_settings_user_tab); + fl_snapshot((target_dir + "w_settings_user_tab.png").c_str(), w_settings_user_tab, xtab_margin, row_blend); + + + // ---- dialog types + // list and show all non-widget types and their respective dialog boxes + + // -- ID_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(); + + // -- ID_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(); + + // -- ID_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(); + + // -- ID_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(); + + // -- ID_DeclBlock + Fl_Window *adoc_declblock_panel = make_declblock_panel(); + decl_before_input->value("#ifdef NDEBUG"); + decl_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(); + + // -- ID_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(); + + // -- ID_Widget_Class is handled like Fl_Window_Type + + // -- ID_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(); + + // -- ID_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(); + + + // ---- widget dialog + t_win->open(); // open the window + t_win->open(); // open the panel + select_only(t_win); + + // -- snapshot of the widget properties panel + fl_snapshot((target_dir + "widget_panel.png").c_str(), the_panel, win_margin, win_blend); + fl_snapshot((target_dir + "wLiveMode.png").c_str(), wLiveMode, row_margin, row_blend); + + // -- snapshot of the GUI tab + widget_tabs->value(wp_gui_tab); + fl_snapshot((target_dir + "wp_gui_tab.png").c_str(), wp_gui_tab, tab_margin, row_blend); + fl_snapshot((target_dir + "wp_gui_label.png").c_str(), wp_gui_label, row_margin, row_blend); + select_only(t_btn); + fl_snapshot((target_dir + "wp_gui_image.png").c_str(), widget_image_input, widget_deimage_input, row_margin, row_blend); + fl_snapshot((target_dir + "wp_gui_alignment.png").c_str(), wp_gui_alignment, row_margin, row_blend); + fl_snapshot((target_dir + "wp_gui_size.png").c_str(), widget_x_input, xrow_margin, row_blend); + select_only(t_sldr); + fl_snapshot((target_dir + "wp_gui_values.png").c_str(), wp_gui_values, xrow_margin, row_blend); + select_only(t_flxc); + fl_snapshot((target_dir + "wp_gui_flexp.png").c_str(), wp_gui_flexp, xrow_margin, row_blend); + select_only(t_flx); + fl_snapshot((target_dir + "wp_gui_margins.png").c_str(), wp_gui_margins, xrow_margin, row_blend); + select_only(t_win); + fl_snapshot((target_dir + "wp_gui_sizerange.png").c_str(), wp_gui_sizerange, xrow_margin, row_blend); + select_only(t_btn); + fl_snapshot((target_dir + "wp_gui_shortcut.png").c_str(), wp_gui_shortcut, row_margin, row_blend); + select_only(t_win); + fl_snapshot((target_dir + "wp_gui_xclass.png").c_str(), wp_gui_xclass, row_margin, row_blend); + select_only(t_btn); + fl_snapshot((target_dir + "wp_gui_attributes.png").c_str(), wp_gui_attributes, row_margin, row_blend); + fl_snapshot((target_dir + "wp_gui_tooltip.png").c_str(), wp_gui_tooltip, row_margin, row_blend); + + // -- snapshot of the style tab + widget_tabs->value(wp_style_tab); + select_only(t_inp); + fl_snapshot((target_dir + "wp_style_tab.png").c_str(), wp_style_tab, tab_margin, row_blend); + fl_snapshot((target_dir + "wp_style_label.png").c_str(), wp_style_label, row_margin, row_blend); + select_only(t_btn); + fl_snapshot((target_dir + "wp_style_box.png").c_str(), wp_style_box, wp_style_downbox, row_margin, row_blend); + select_only(t_inp); + fl_snapshot((target_dir + "wp_style_text.png").c_str(), wp_style_text, row_margin, row_blend); + + // -- snapshot of the C++ tab + widget_tabs->value(wp_cpp_tab); + select_only(t_btn); + fl_snapshot((target_dir + "wp_cpp_tab.png").c_str(), wp_cpp_tab, tab_margin, row_blend); + fl_snapshot((target_dir + "wp_cpp_class.png").c_str(), wp_cpp_class, row_margin, row_blend); + fl_snapshot((target_dir + "wp_cpp_name.png").c_str(), wp_cpp_name, row_margin, row_blend); + fl_snapshot((target_dir + "v_input.png").c_str(), v_input[0], v_input[3], row_margin, row_blend); + fl_snapshot((target_dir + "wComment.png").c_str(), wComment, row_margin, row_blend); + fl_snapshot((target_dir + "wp_cpp_callback.png").c_str(), wCallback, w_when_box, row_margin, row_blend); + + // -- snapshot of the Grid tab + select_only(t_grd); + widget_tabs->value(widget_tab_grid); + fl_snapshot((target_dir + "wp_grid_tab.png").c_str(), widget_tab_grid, tab_margin, row_blend); + + // -- snapshot of the Grid Child tab + 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); +} + + +#endif // NDEBUG diff --git a/fluid/autodoc.h b/fluid/autodoc.h new file mode 100644 index 000000000..060b166ab --- /dev/null +++ b/fluid/autodoc.h @@ -0,0 +1,59 @@ +// +// Widget snapshot header-only file for the Fast Light Tool Kit (FLTK). +// +// Copyright 2023-2024 by Bill Spitzak and others. +// +// This library is free software. Distribution and use rights are outlined in +// the file "COPYING" which should have been included with this file. If this +// file is missing or damaged, see the license at: +// +// https://www.fltk.org/COPYING.php +// +// Please see the following page on how to report bugs and issues: +// +// https://www.fltk.org/bugs.php +// + +/** + \file autodoc.h + \brief tools to take snapshots of UI elements for documentation purposes + */ + +#ifndef fl_screenshot_H +#define fl_screenshot_H + +#include "../src/Fl_String.H" + +#include +#include +#include + +/** Class to initialize a Rect by providing the margin around a rect. */ +class Fl_Margin : public Fl_Rect { +public: + Fl_Margin(int dx, int dy, int dr, int db); +}; + +int fl_snapshot(const char *filename, Fl_Widget **w, + const Fl_Rect &frame = Fl_Margin(4, 4, 4, 4), + const Fl_Rect &blend = Fl_Margin(4, 4, 4, 4), + double scale=1.0); + +int fl_snapshot(const char *filename, Fl_Widget *w1, Fl_Widget *w2, + const Fl_Rect &frame = Fl_Margin(4, 4, 4, 4), + const Fl_Rect &blend = Fl_Margin(4, 4, 4, 4), + double scale=1.0); + +int fl_snapshot(const char *filename, Fl_Widget *w, + const Fl_Rect &frame = Fl_Margin(4, 4, 4, 4), + const Fl_Rect &blend = Fl_Margin(4, 4, 4, 4), + double scale=1.0); + +extern const int FL_SNAP_TO_WINDOW; + +extern Fl_Widget *FL_SNAP_AREA_CLEAR; + +extern void run_autodoc(const Fl_String &target_dir); + +#endif + diff --git a/fluid/code.cxx b/fluid/code.cxx index eef2aac47..24088ca11 100644 --- a/fluid/code.cxx +++ b/fluid/code.cxx @@ -414,7 +414,7 @@ void Fd_Code_Writer::write_cstring(const char *s, int length) { } // if we are rendering to the source code preview window, and the text is // longer than four lines, we only render a placeholder. - if (write_sourceview && ((s==NULL) || (length>300))) { + if (write_codeview && ((s==NULL) || (length>300))) { if (length>=0) crc_printf("\" ... %d bytes of text... \"", length); else @@ -523,7 +523,7 @@ void Fd_Code_Writer::write_cdata(const char *s, int length) { varused = 1; return; } - if (write_sourceview) { + if (write_codeview) { if (length>=0) crc_printf("{ /* ... %d bytes of binary data... */ }", length); else @@ -707,11 +707,11 @@ Fl_Type* Fd_Code_Writer::write_code(Fl_Type* p) { // write all code that comes before the children code // (but don't write the last comment until the very end) if (!(p==Fl_Type::last && p->is_a(ID_Comment))) { - if (write_sourceview) p->code1_start = (int)ftell(code_file); - if (write_sourceview) p->header1_start = (int)ftell(header_file); + if (write_codeview) p->code1_start = (int)ftell(code_file); + if (write_codeview) p->header1_start = (int)ftell(header_file); p->write_code1(*this); - if (write_sourceview) p->code1_end = (int)ftell(code_file); - if (write_sourceview) p->header1_end = (int)ftell(header_file); + if (write_codeview) p->code1_end = (int)ftell(code_file); + if (write_codeview) p->header1_end = (int)ftell(header_file); } // recursively write the code of all children Fl_Type* q; @@ -730,11 +730,11 @@ Fl_Type* Fd_Code_Writer::write_code(Fl_Type* p) { } // write all code that come after the children - if (write_sourceview) p->code2_start = (int)ftell(code_file); - if (write_sourceview) p->header2_start = (int)ftell(header_file); + if (write_codeview) p->code2_start = (int)ftell(code_file); + if (write_codeview) p->header2_start = (int)ftell(header_file); p->write_code2(*this); - if (write_sourceview) p->code2_end = (int)ftell(code_file); - if (write_sourceview) p->header2_end = (int)ftell(header_file); + if (write_codeview) p->code2_end = (int)ftell(code_file); + if (write_codeview) p->header2_end = (int)ftell(header_file); for (q = p->next; q && q->level > p->level;) { if (is_class_member(q) || is_comment_before_class_member(q)) { @@ -752,11 +752,11 @@ Fl_Type* Fd_Code_Writer::write_code(Fl_Type* p) { } else { for (q = p->next; q && q->level > p->level;) q = write_code(q); // write all code that come after the children - if (write_sourceview) p->code2_start = (int)ftell(code_file); - if (write_sourceview) p->header2_start = (int)ftell(header_file); + if (write_codeview) p->code2_start = (int)ftell(code_file); + if (write_codeview) p->header2_start = (int)ftell(header_file); p->write_code2(*this); - if (write_sourceview) p->code2_end = (int)ftell(code_file); - if (write_sourceview) p->header2_end = (int)ftell(header_file); + if (write_codeview) p->code2_end = (int)ftell(code_file); + if (write_codeview) p->header2_end = (int)ftell(header_file); } return q; } @@ -772,8 +772,8 @@ Fl_Type* Fd_Code_Writer::write_code(Fl_Type* p) { \param[in] t filename of the header file \return 0 if the operation failed, 1 if it was successful */ -int Fd_Code_Writer::write_code(const char *s, const char *t, bool to_sourceview) { - write_sourceview = to_sourceview; +int Fd_Code_Writer::write_code(const char *s, const char *t, bool to_codeview) { + write_codeview = to_codeview; delete id_root; id_root = 0; indentation = 0; current_class = 0L; @@ -791,7 +791,7 @@ int Fd_Code_Writer::write_code(const char *s, const char *t, bool to_sourceview) header_file = f; } // Remember the last code file location for MergeBack - if (s && g_project.write_mergeback_data && !to_sourceview) { + if (s && g_project.write_mergeback_data && !to_codeview) { Fl_String proj_filename = g_project.projectfile_path() + g_project.projectfile_name(); int i, n = proj_filename.size(); for (i=0; iis_a(ID_Comment)) { - if (write_sourceview) { + if (write_codeview) { first_type->code1_start = first_type->code2_start = (int)ftell(code_file); first_type->header1_start = first_type->header2_start = (int)ftell(header_file); } // it is ok to write non-recursive code here, because comments have no children or code2 blocks first_type->write_code1(*this); - if (write_sourceview) { + if (write_codeview) { first_type->code1_end = first_type->code2_end = (int)ftell(code_file); first_type->header1_end = first_type->header2_end = (int)ftell(header_file); } @@ -835,7 +835,7 @@ int Fd_Code_Writer::write_code(const char *s, const char *t, bool to_sourceview) write_h_once("#include "); } if (t && g_project.include_H_from_C) { - if (to_sourceview) { + if (to_codeview) { write_c("#include \"CodeView.h\"\n"); } else if (g_project.header_file_name[0] == '.' && strchr(g_project.header_file_name.c_str(), '/') == NULL) { write_c("#include \"%s\"\n", fl_filename_name(t)); @@ -896,17 +896,17 @@ int Fd_Code_Writer::write_code(const char *s, const char *t, bool to_sourceview) } for (Fl_Type* p = first_type; p;) { // write all static data for this & all children first - if (write_sourceview) p->header_static_start = (int)ftell(header_file); - if (write_sourceview) p->code_static_start = (int)ftell(code_file); + if (write_codeview) p->header_static_start = (int)ftell(header_file); + if (write_codeview) p->code_static_start = (int)ftell(code_file); p->write_static(*this); - if (write_sourceview) p->code_static_end = (int)ftell(code_file); - if (write_sourceview) p->header_static_end = (int)ftell(header_file); + if (write_codeview) p->code_static_end = (int)ftell(code_file); + if (write_codeview) p->header_static_end = (int)ftell(header_file); for (Fl_Type* q = p->next; q && q->level > p->level; q = q->next) { - if (write_sourceview) q->header_static_start = (int)ftell(header_file); - if (write_sourceview) q->code_static_start = (int)ftell(code_file); + if (write_codeview) q->header_static_start = (int)ftell(header_file); + if (write_codeview) q->code_static_start = (int)ftell(code_file); q->write_static(*this); - if (write_sourceview) q->code_static_end = (int)ftell(code_file); - if (write_sourceview) q->header_static_end = (int)ftell(header_file); + if (write_codeview) q->code_static_end = (int)ftell(code_file); + if (write_codeview) q->header_static_end = (int)ftell(header_file); } // then write the nested code: p = write_code(p); @@ -918,12 +918,12 @@ int Fd_Code_Writer::write_code(const char *s, const char *t, bool to_sourceview) Fl_Type* last_type = Fl_Type::last; if (last_type && (last_type != Fl_Type::first) && last_type->is_a(ID_Comment)) { - if (write_sourceview) { + if (write_codeview) { last_type->code1_start = last_type->code2_start = (int)ftell(code_file); last_type->header1_start = last_type->header2_start = (int)ftell(header_file); } last_type->write_code1(*this); - if (write_sourceview) { + if (write_codeview) { last_type->code1_end = last_type->code2_end = (int)ftell(code_file); last_type->header1_end = last_type->header2_end = (int)ftell(header_file); } @@ -973,7 +973,7 @@ Fd_Code_Writer::Fd_Code_Writer() block_buffer_(NULL), block_buffer_size_(0), indentation(0), - write_sourceview(false), + write_codeview(false), varused_test(0), varused(0) { diff --git a/fluid/code.h b/fluid/code.h index bac7bc756..8581c90f8 100644 --- a/fluid/code.h +++ b/fluid/code.h @@ -68,7 +68,7 @@ public: int indentation; /// set if we write abbreviated file for the source code previewer /// (disables binary data blocks, for example) - bool write_sourceview; + bool write_codeview; /// silly thing to prevent declaring unused variables: /// When this symbol is on, all attempts to write code don't write /// anything, but set a variable if it looks like the variable "o" is used: @@ -100,7 +100,7 @@ public: void write_hc(const char *, int, const char*, const char*); void write_c_indented(const char *textlines, int inIndent, char inTrailwWith); Fl_Type* write_code(Fl_Type* p); - int write_code(const char *cfile, const char *hfile, bool to_sourceview=false); + int write_code(const char *cfile, const char *hfile, bool to_codeview=false); void write_public(int state); // writes pubic:/private: as needed void tag(int type, unsigned short uid); diff --git a/fluid/codeview_panel.cxx b/fluid/codeview_panel.cxx new file mode 100644 index 000000000..0ca8c0d3a --- /dev/null +++ b/fluid/codeview_panel.cxx @@ -0,0 +1,548 @@ +// +// Code dialogs for the Fast Light Tool Kit (FLTK). +// +// Copyright 1998-2023 by Bill Spitzak and others. +// +// This library is free software. Distribution and use rights are outlined in +// the file "COPYING" which should have been included with this file. If this +// file is missing or damaged, see the license at: +// +// https://www.fltk.org/COPYING.php +// +// Please see the following page on how to report bugs and issues: +// +// https://www.fltk.org/bugs.php +// + +// generated by Fast Light User Interface Designer (fluid) version 1.0400 + +#include "codeview_panel.h" +#include "fluid.h" +#include "file.h" +#include "../src/flstring.h" +#include +#include +static char *cv_source_filename = NULL; +static char *cv_header_filename = NULL; +static char *cv_design_filename = NULL; +int cv_code_choice; +extern void select_only(Fl_Type *o); +extern void reveal_in_browser(Fl_Type *t); + +/** + Update the header and source code highlighting depending on the + currently selected object + + The Code View system offers an immediate preview of the code + files that will be generated by FLUID. It also marks the code + generated for the last selected item in the header and the source + file. +*/ +void update_codeview_position() { + if (!codeview_panel || !codeview_panel->visible()) + return; + if (cv_autoposition->value()==0) + return; + if (codeview_panel && codeview_panel->visible() && Fl_Type::current) { + int pos0 = 0, pos1 = 0; + if (cv_source->visible_r()) { + switch (cv_code_choice) { + case 0: // prolog: not yet (include statements) + pos0 = Fl_Type::current->code1_start; + pos1 = Fl_Type::current->code2_end; + break; + case 1: // static: callbacks, menu declarations + pos0 = Fl_Type::current->code_static_start; + pos1 = Fl_Type::current->code_static_end; + break; + case 2: // code: entire implementation block including children + pos0 = Fl_Type::current->code1_start; + pos1 = Fl_Type::current->code2_end; + break; + case 3: // code1: all implementation code before the children + pos0 = Fl_Type::current->code1_start; + pos1 = Fl_Type::current->code1_end; + break; + case 4: // code1: all implementation code before the children + pos0 = Fl_Type::current->code2_start; + pos1 = Fl_Type::current->code2_end; + break; + } + if (pos0>=0) { + if (pos1buffer()->line_end(pos0); + cv_source->buffer()->highlight(pos0, pos1); + int line = cv_source->buffer()->count_lines(0, pos0); + cv_source->scroll(line, 0); + } + } + if (cv_header->visible_r()) { + switch (cv_code_choice) { + case 0: // prolog: not yet (include statements) + case 1: // static: callbacks, menu declarations + pos0 = Fl_Type::current->header_static_start; + pos1 = Fl_Type::current->header_static_end; + break; + case 2: // code: entire implementation block including children + pos0 = Fl_Type::current->header1_start; + pos1 = Fl_Type::current->header2_end; + break; + case 3: // code1: all implementation code before the children + pos0 = Fl_Type::current->header1_start; + pos1 = Fl_Type::current->header1_end; + break; + case 4: // code1: all implementation code before the children + pos0 = Fl_Type::current->header2_start; + pos1 = Fl_Type::current->header2_end; + break; + } + if (pos0>=0) { + if (pos1buffer()->line_end(pos0); + cv_header->buffer()->highlight(pos0, pos1); + int line = cv_header->buffer()->count_lines(0, pos0); + cv_header->scroll(line, 0); + } + } + if (cv_project->visible_r()) { + switch (cv_code_choice) { + case 0: // prolog: not yet (include statements) + case 1: // static: callbacks, menu declarations + case 2: // code: entire implementation block including children + pos0 = Fl_Type::current->proj1_start; + pos1 = Fl_Type::current->proj2_end; + break; + case 3: // code1: all implementation code before the children + pos0 = Fl_Type::current->proj1_start; + pos1 = Fl_Type::current->proj1_end; + break; + case 4: // code1: all implementation code before the children + pos0 = Fl_Type::current->proj2_start; + pos1 = Fl_Type::current->proj2_end; + break; + } + if (pos0>=0) { + if (pos1buffer()->line_end(pos0); + cv_project->buffer()->highlight(pos0, pos1); + int line = cv_project->buffer()->count_lines(0, pos0); + cv_project->scroll(line, 0); + } + } + } +} + +/** + Callback to update the codeview position. +*/ +void update_codeview_position_cb(class Fl_Tabs*, void*) { + // make sure that the selected tab shows the current view + update_codeview_cb(0,0); + // highlight the selected widget in the selected tab + update_codeview_position(); +} + +/** + Generate a header, source, strings, or design file in a temporary directory + and load those into the Code Viewer widgets. +*/ +void update_codeview_cb(class Fl_Button*, void*) { + if (!codeview_panel || !codeview_panel->visible()) + return; + + if (!cv_source_filename) { + cv_source_filename = (char*)malloc(FL_PATH_MAX); + fl_strlcpy(cv_source_filename, get_tmpdir().c_str(), FL_PATH_MAX); + fl_strlcat(cv_source_filename, "codeview_tmp.cxx", FL_PATH_MAX); + } + if (!cv_header_filename) { + cv_header_filename = (char*)malloc(FL_PATH_MAX); + fl_strlcpy(cv_header_filename, get_tmpdir().c_str(), FL_PATH_MAX); + fl_strlcat(cv_header_filename, "codeview_tmp.h", FL_PATH_MAX); + } + if (!cv_design_filename) { + cv_design_filename = (char*)malloc(FL_PATH_MAX); + fl_strlcpy(cv_design_filename, get_tmpdir().c_str(), FL_PATH_MAX); + fl_strlcat(cv_design_filename, "codeview_tmp.fl", FL_PATH_MAX); + } + + if (cv_project->visible_r()) { + write_file(cv_design_filename, false, true); + int top = cv_project->top_line(); + cv_project->buffer()->loadfile(cv_design_filename); + cv_project->scroll(top, 0); + } else if (cv_strings->visible_r()) { + static const char *exts[] = { ".txt", ".po", ".msg" }; + char fn[FL_PATH_MAX+1]; + fl_strlcpy(fn, get_tmpdir().c_str(), FL_PATH_MAX); + fl_strlcat(fn, "strings", FL_PATH_MAX); + fl_filename_setext(fn, FL_PATH_MAX, exts[g_project.i18n_type]); + write_strings(fn); + int top = cv_strings->top_line(); + cv_strings->buffer()->loadfile(fn); + cv_strings->scroll(top, 0); + } else if (cv_source->visible_r() || cv_header->visible_r()) { + Fl_String code_file_name_bak = g_project.code_file_name; + g_project.code_file_name = cv_source_filename; + Fl_String header_file_name_bak = g_project.header_file_name; + g_project.header_file_name = cv_header_filename; + + // generate the code and load the files + Fd_Code_Writer f; + // generate files + if (f.write_code(cv_source_filename, cv_header_filename, true)) + { + // load file into source editor + int pos = cv_source->top_line(); + cv_source->buffer()->loadfile(cv_source_filename); + cv_source->scroll(pos, 0); + // load file into header editor + pos = cv_header->top_line(); + cv_header->buffer()->loadfile(cv_header_filename); + cv_header->scroll(pos, 0); + // update the source code highlighting + update_codeview_position(); + } + + g_project.code_file_name = code_file_name_bak; + g_project.header_file_name = header_file_name_bak; + } +} + +/** + This is called by the timer itself +*/ +void update_codeview_timer(void*) { + update_codeview_cb(0,0); +} + +void codeview_defer_update() { + // we will only update earliest 0.5 seconds after the last change, and only + // if no other change was made, so dragging a widget will not generate any + // CPU load + Fl::remove_timeout(update_codeview_timer, 0); + Fl::add_timeout(0.5, update_codeview_timer, 0); +} + +/** + Show or hide the source code preview. + The state is stored in the app preferences. +*/ +void codeview_toggle_visibility() { + if (!codeview_panel) { + make_codeview(); + codeview_panel->callback((Fl_Callback*)toggle_codeview_cb); + Fl_Preferences svp(fluid_prefs, "codeview"); + int autorefresh; + svp.get("autorefresh", autorefresh, 1); + cv_autorefresh->value(autorefresh); + int autoposition; + svp.get("autoposition", autoposition, 1); + cv_autoposition->value(autoposition); + int tab; + svp.get("tab", tab, 0); + if (tab>=0 && tabchildren()) cv_tab->value(cv_tab->child(tab)); + svp.get("code_choice", cv_code_choice, 2); + cv_code_choice_w->value(cv_code_choice_w->find_item_with_argument(cv_code_choice)); + if (!position_window(codeview_panel,"codeview_pos", 0, 320, 120, 550, 500)) return; + } + + if (codeview_panel->visible()) { + codeview_panel->hide(); + codeview_item->label("Show Code View"); + } else { + codeview_panel->show(); + codeview_item->label("Hide Code View"); + update_codeview_cb(0,0); + } +} + +Fl_Double_Window *codeview_panel=(Fl_Double_Window *)0; + +Fl_Tabs *cv_tab=(Fl_Tabs *)0; + +Fl_Group *cv_source_tab=(Fl_Group *)0; + +CodeViewer *cv_source=(CodeViewer *)0; + +CodeViewer *cv_header=(CodeViewer *)0; + +TextViewer *cv_strings=(TextViewer *)0; + +TextViewer *cv_project=(TextViewer *)0; + +Fl_Group *cv_find_row=(Fl_Group *)0; + +Fl_Button *cv_find_text_case=(Fl_Button *)0; + +Fl_Input *cv_find_text=(Fl_Input *)0; + +static void cb_cv_find_text(Fl_Input* o, void*) { + Fl_Text_Display *e = NULL; + if (cv_source->visible_r()) { + e = cv_source; + } else if (cv_header->visible_r()) { + e = cv_header; + } else if (cv_project->visible_r()) { + e = cv_project; + } + if (e) { + Fl_Text_Buffer *b = e->buffer(); + int pos = e->insert_position(); + int found = b->search_forward(pos, o->value(), &pos, cv_find_text_case->value()); + if (found) { + b->select(pos, pos + (int)strlen(o->value())); + e->insert_position(pos); + e->show_insert_position(); + } + } +} + +static void cb_(Fl_Button*, void*) { + Fl_Text_Display *e = NULL; + if (cv_source->visible_r()) { + e = cv_source; + } else if (cv_header->visible_r()) { + e = cv_header; + } else if (cv_project->visible_r()) { + e = cv_project; + } + if (e) { + const char *needle = cv_find_text->value(); + Fl_Text_Buffer *b = e->buffer(); + int pos = e->insert_position()-1; + if (pos < 0) pos = b->length()-1; + int found = b->search_backward(pos, needle, &pos, cv_find_text_case->value()); + if (!found) + found = b->search_backward(b->length()-1, needle, &pos, cv_find_text_case->value()); + if (found) { + b->select(pos, pos + (int)strlen(needle)); + e->insert_position(pos); + e->show_insert_position(); + } + } +} + +static void cb_1(Fl_Button*, void*) { + Fl_Text_Display *e = NULL; + if (cv_source->visible_r()) { + e = cv_source; + } else if (cv_header->visible_r()) { + e = cv_header; + } else if (cv_project->visible_r()) { + e = cv_project; + } + if (e) { + const char *needle = cv_find_text->value(); + Fl_Text_Buffer *b = e->buffer(); + int pos = e->insert_position() + 1; + if (pos+1 >= b->length()) pos = 0; + int found = b->search_forward(pos, needle, &pos, cv_find_text_case->value()); + if (!found && (pos > 0)) + found = b->search_forward(0, needle, &pos, cv_find_text_case->value()); + if (found) { + b->select(pos, pos + (int)strlen(needle)); + e->insert_position(pos); + e->show_insert_position(); + } + } +} + +static void cb_Reveal(Fl_Button*, void*) { + if (codeview_panel && codeview_panel->visible()) { + Fl_Type *node = NULL; + if (cv_source->visible_r()) + node = Fl_Type::find_in_text(0, cv_source->insert_position()); + else if (cv_header->visible_r()) + node = Fl_Type::find_in_text(1, cv_header->insert_position()); + else if (cv_project->visible_r()) + node = Fl_Type::find_in_text(2, cv_project->insert_position()); + if (node) { + select_only(node); + reveal_in_browser(node); + if (Fl::event_clicks()==1) // double click + node->open(); + } + } +} + +Fl_Group *cv_settings_row=(Fl_Group *)0; + +Fl_Light_Button *cv_autorefresh=(Fl_Light_Button *)0; + +Fl_Light_Button *cv_autoposition=(Fl_Light_Button *)0; + +Fl_Choice *cv_code_choice_w=(Fl_Choice *)0; + +static void cb_cv_code_choice_w(Fl_Choice* o, void*) { + cv_code_choice = (int)o->mvalue()->argument(); + update_codeview_position(); +} + +Fl_Menu_Item menu_cv_code_choice_w[] = { + {"prolog", 0, 0, (void*)(0), 16, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, + {"static", 0, 0, (void*)(1), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, + {"code", 0, 0, (void*)(2), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, + {"code 1", 0, 0, (void*)(3), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, + {"code 2", 0, 0, (void*)(4), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0}, + {0,0,0,0,0,0,0,0,0} +}; + +Fl_Double_Window* make_codeview() { + { codeview_panel = new Fl_Double_Window(520, 515, "Code View"); + codeview_panel->callback((Fl_Callback*)toggle_codeview_cb); + codeview_panel->align(Fl_Align(FL_ALIGN_CLIP|FL_ALIGN_INSIDE)); + { cv_tab = new Fl_Tabs(10, 10, 500, 440); + cv_tab->selection_color((Fl_Color)4); + cv_tab->labelcolor(FL_BACKGROUND2_COLOR); + cv_tab->callback((Fl_Callback*)update_codeview_position_cb); + { cv_source_tab = new Fl_Group(10, 35, 500, 415, "Source"); + cv_source_tab->labelsize(13); + { CodeViewer* o = cv_source = new CodeViewer(10, 40, 500, 410); + cv_source->box(FL_DOWN_FRAME); + cv_source->color(FL_BACKGROUND2_COLOR); + cv_source->selection_color(FL_SELECTION_COLOR); + cv_source->labeltype(FL_NORMAL_LABEL); + cv_source->labelfont(0); + cv_source->labelsize(14); + cv_source->labelcolor(FL_FOREGROUND_COLOR); + cv_source->textfont(4); + cv_source->textsize(11); + cv_source->align(Fl_Align(FL_ALIGN_TOP)); + cv_source->when(FL_WHEN_RELEASE); + Fl_Group::current()->resizable(cv_source); + o->linenumber_width(60); + o->linenumber_size(o->Fl_Text_Display::textsize()); + } // CodeViewer* cv_source + cv_source_tab->end(); + Fl_Group::current()->resizable(cv_source_tab); + } // Fl_Group* cv_source_tab + { Fl_Group* o = new Fl_Group(10, 35, 500, 415, "Header"); + o->labelsize(13); + o->hide(); + { CodeViewer* o = cv_header = new CodeViewer(10, 40, 500, 410); + cv_header->box(FL_DOWN_FRAME); + cv_header->color(FL_BACKGROUND2_COLOR); + cv_header->selection_color(FL_SELECTION_COLOR); + cv_header->labeltype(FL_NORMAL_LABEL); + cv_header->labelfont(0); + cv_header->labelsize(14); + cv_header->labelcolor(FL_FOREGROUND_COLOR); + cv_header->textfont(4); + cv_header->textsize(11); + cv_header->align(Fl_Align(FL_ALIGN_TOP)); + cv_header->when(FL_WHEN_RELEASE); + Fl_Group::current()->resizable(cv_header); + o->linenumber_width(60); + o->linenumber_size(o->Fl_Text_Display::textsize()); + } // CodeViewer* cv_header + o->end(); + } // Fl_Group* o + { Fl_Group* o = new Fl_Group(10, 35, 500, 415, "Strings"); + o->labelsize(13); + o->hide(); + { TextViewer* o = cv_strings = new TextViewer(10, 40, 500, 410); + cv_strings->box(FL_DOWN_FRAME); + cv_strings->color(FL_BACKGROUND2_COLOR); + cv_strings->selection_color(FL_SELECTION_COLOR); + cv_strings->labeltype(FL_NORMAL_LABEL); + cv_strings->labelfont(0); + cv_strings->labelsize(14); + cv_strings->labelcolor(FL_FOREGROUND_COLOR); + cv_strings->textfont(4); + cv_strings->textsize(11); + cv_strings->align(Fl_Align(FL_ALIGN_TOP)); + cv_strings->when(FL_WHEN_RELEASE); + Fl_Group::current()->resizable(cv_strings); + o->linenumber_width(60); + o->linenumber_size(o->Fl_Text_Display::textsize()); + } // TextViewer* cv_strings + o->end(); + } // Fl_Group* o + { Fl_Group* o = new Fl_Group(10, 35, 500, 415, "Project"); + o->labelsize(13); + o->hide(); + { TextViewer* o = cv_project = new TextViewer(10, 40, 500, 410); + cv_project->box(FL_DOWN_FRAME); + cv_project->color(FL_BACKGROUND2_COLOR); + cv_project->selection_color(FL_SELECTION_COLOR); + cv_project->labeltype(FL_NORMAL_LABEL); + cv_project->labelfont(0); + cv_project->labelsize(14); + cv_project->labelcolor(FL_FOREGROUND_COLOR); + cv_project->textfont(4); + cv_project->textsize(11); + cv_project->align(Fl_Align(FL_ALIGN_TOP)); + cv_project->when(FL_WHEN_RELEASE); + Fl_Group::current()->resizable(cv_project); + o->linenumber_width(60); + o->linenumber_size(o->Fl_Text_Display::textsize()); + } // TextViewer* cv_project + o->end(); + } // Fl_Group* o + cv_tab->end(); + Fl_Group::current()->resizable(cv_tab); + } // Fl_Tabs* cv_tab + { cv_find_row = new Fl_Group(10, 460, 500, 20); + { cv_find_text_case = new Fl_Button(244, 460, 25, 20, "aA"); + cv_find_text_case->type(1); + cv_find_text_case->labelsize(11); + } // Fl_Button* cv_find_text_case + { cv_find_text = new Fl_Input(40, 460, 200, 20, "Find:"); + cv_find_text->labelsize(11); + cv_find_text->textsize(11); + cv_find_text->callback((Fl_Callback*)cb_cv_find_text); + cv_find_text->when(FL_WHEN_RELEASE | FL_WHEN_ENTER_KEY_CHANGED); + } // Fl_Input* cv_find_text + { Fl_Button* o = new Fl_Button(273, 460, 25, 20, "<<"); + o->labelsize(11); + o->callback((Fl_Callback*)cb_); + } // Fl_Button* o + { Fl_Button* o = new Fl_Button(298, 460, 25, 20, ">>"); + o->labelsize(11); + o->callback((Fl_Callback*)cb_1); + } // Fl_Button* o + { Fl_Button* o = new Fl_Button(327, 460, 61, 20, "Reveal"); + o->labelsize(11); + o->callback((Fl_Callback*)cb_Reveal); + } // Fl_Button* o + { Fl_Box* o = new Fl_Box(490, 460, 20, 20); + Fl_Group::current()->resizable(o); + } // Fl_Box* o + cv_find_row->end(); + } // Fl_Group* cv_find_row + { cv_settings_row = new Fl_Group(10, 485, 500, 20); + { Fl_Button* o = new Fl_Button(10, 485, 61, 20, "Refresh"); + o->labelsize(11); + o->callback((Fl_Callback*)update_codeview_cb); + } // Fl_Button* o + { Fl_Light_Button* o = cv_autorefresh = new Fl_Light_Button(77, 485, 91, 20, "Auto-Refresh"); + cv_autorefresh->labelsize(11); + o->callback((Fl_Callback*)update_codeview_cb); + } // Fl_Light_Button* cv_autorefresh + { cv_autoposition = new Fl_Light_Button(172, 485, 89, 20, "Auto-Position"); + cv_autoposition->labelsize(11); + } // Fl_Light_Button* cv_autoposition + { cv_code_choice_w = new Fl_Choice(265, 485, 70, 20); + cv_code_choice_w->down_box(FL_BORDER_BOX); + cv_code_choice_w->labelsize(11); + cv_code_choice_w->textsize(11); + cv_code_choice_w->callback((Fl_Callback*)cb_cv_code_choice_w); + cv_code_choice_w->menu(menu_cv_code_choice_w); + } // Fl_Choice* cv_code_choice_w + { Fl_Box* o = new Fl_Box(375, 485, 80, 20); + Fl_Group::current()->resizable(o); + } // Fl_Box* o + { Fl_Button* o = new Fl_Button(460, 485, 50, 20, "Close"); + o->labelsize(11); + o->callback((Fl_Callback*)toggle_codeview_b_cb); + } // Fl_Button* o + cv_settings_row->end(); + } // Fl_Group* cv_settings_row + codeview_panel->size_range(384, 120); + codeview_panel->end(); + } // Fl_Double_Window* codeview_panel + return codeview_panel; +} + +// diff --git a/fluid/codeview_panel.fl b/fluid/codeview_panel.fl new file mode 100644 index 000000000..51ac5f4ab --- /dev/null +++ b/fluid/codeview_panel.fl @@ -0,0 +1,506 @@ +# data file for the Fltk User Interface Designer (fluid) +version 1.0400 +header_name {.h} +code_name {.cxx} +comment {// +// Code dialogs for the Fast Light Tool Kit (FLTK). +// +// Copyright 1998-2023 by Bill Spitzak and others. +// +// This library is free software. Distribution and use rights are outlined in +// the file "COPYING" which should have been included with this file. If this +// file is missing or damaged, see the license at: +// +// https://www.fltk.org/COPYING.php +// +// Please see the following page on how to report bugs and issues: +// +// https://www.fltk.org/bugs.php +// +} {in_source in_header +} + +decl {\#include "fluid.h"} {private local +} + +decl {\#include "file.h"} {private local +} + +decl {\#include "../src/flstring.h"} {selected private local +} + +decl {\#include } {private local +} + +decl {\#include } {private local +} + +decl {char *cv_source_filename = NULL;} {private local +} + +decl {char *cv_header_filename = NULL;} {private local +} + +decl {char *cv_design_filename = NULL;} {private local +} + +decl {int cv_code_choice;} {public local +} + +decl {extern void select_only(Fl_Type *o);} {private global +} + +decl {extern void reveal_in_browser(Fl_Type *t);} {private global +} + +Function {update_codeview_position()} { + comment {Update the header and source code highlighting depending on the +currently selected object + +The Code View system offers an immediate preview of the code +files that will be generated by FLUID. It also marks the code +generated for the last selected item in the header and the source +file.} open return_type void +} { + code {if (!codeview_panel || !codeview_panel->visible()) + return; + if (cv_autoposition->value()==0) + return; + if (codeview_panel && codeview_panel->visible() && Fl_Type::current) { + int pos0 = 0, pos1 = 0; + if (cv_source->visible_r()) { + switch (cv_code_choice) { + case 0: // prolog: not yet (include statements) + pos0 = Fl_Type::current->code1_start; + pos1 = Fl_Type::current->code2_end; + break; + case 1: // static: callbacks, menu declarations + pos0 = Fl_Type::current->code_static_start; + pos1 = Fl_Type::current->code_static_end; + break; + case 2: // code: entire implementation block including children + pos0 = Fl_Type::current->code1_start; + pos1 = Fl_Type::current->code2_end; + break; + case 3: // code1: all implementation code before the children + pos0 = Fl_Type::current->code1_start; + pos1 = Fl_Type::current->code1_end; + break; + case 4: // code1: all implementation code before the children + pos0 = Fl_Type::current->code2_start; + pos1 = Fl_Type::current->code2_end; + break; + } + if (pos0>=0) { + if (pos1buffer()->line_end(pos0); + cv_source->buffer()->highlight(pos0, pos1); + int line = cv_source->buffer()->count_lines(0, pos0); + cv_source->scroll(line, 0); + } + } + if (cv_header->visible_r()) { + switch (cv_code_choice) { + case 0: // prolog: not yet (include statements) + case 1: // static: callbacks, menu declarations + pos0 = Fl_Type::current->header_static_start; + pos1 = Fl_Type::current->header_static_end; + break; + case 2: // code: entire implementation block including children + pos0 = Fl_Type::current->header1_start; + pos1 = Fl_Type::current->header2_end; + break; + case 3: // code1: all implementation code before the children + pos0 = Fl_Type::current->header1_start; + pos1 = Fl_Type::current->header1_end; + break; + case 4: // code1: all implementation code before the children + pos0 = Fl_Type::current->header2_start; + pos1 = Fl_Type::current->header2_end; + break; + } + if (pos0>=0) { + if (pos1buffer()->line_end(pos0); + cv_header->buffer()->highlight(pos0, pos1); + int line = cv_header->buffer()->count_lines(0, pos0); + cv_header->scroll(line, 0); + } + } + if (cv_project->visible_r()) { + switch (cv_code_choice) { + case 0: // prolog: not yet (include statements) + case 1: // static: callbacks, menu declarations + case 2: // code: entire implementation block including children + pos0 = Fl_Type::current->proj1_start; + pos1 = Fl_Type::current->proj2_end; + break; + case 3: // code1: all implementation code before the children + pos0 = Fl_Type::current->proj1_start; + pos1 = Fl_Type::current->proj1_end; + break; + case 4: // code1: all implementation code before the children + pos0 = Fl_Type::current->proj2_start; + pos1 = Fl_Type::current->proj2_end; + break; + } + if (pos0>=0) { + if (pos1buffer()->line_end(pos0); + cv_project->buffer()->highlight(pos0, pos1); + int line = cv_project->buffer()->count_lines(0, pos0); + cv_project->scroll(line, 0); + } + } + }} {} +} + +Function {update_codeview_position_cb(class Fl_Tabs*, void*)} { + comment {Callback to update the codeview position.} open return_type void +} { + code {// make sure that the selected tab shows the current view + update_codeview_cb(0,0); + // highlight the selected widget in the selected tab + update_codeview_position();} {} +} + +Function {update_codeview_cb(class Fl_Button*, void*)} { + comment {Generate a header, source, strings, or design file in a temporary directory +and load those into the Code Viewer widgets.} open return_type void +} { + code {if (!codeview_panel || !codeview_panel->visible()) + return; + + if (!cv_source_filename) { + cv_source_filename = (char*)malloc(FL_PATH_MAX); + fl_strlcpy(cv_source_filename, get_tmpdir().c_str(), FL_PATH_MAX); + fl_strlcat(cv_source_filename, "codeview_tmp.cxx", FL_PATH_MAX); + } + if (!cv_header_filename) { + cv_header_filename = (char*)malloc(FL_PATH_MAX); + fl_strlcpy(cv_header_filename, get_tmpdir().c_str(), FL_PATH_MAX); + fl_strlcat(cv_header_filename, "codeview_tmp.h", FL_PATH_MAX); + } + if (!cv_design_filename) { + cv_design_filename = (char*)malloc(FL_PATH_MAX); + fl_strlcpy(cv_design_filename, get_tmpdir().c_str(), FL_PATH_MAX); + fl_strlcat(cv_design_filename, "codeview_tmp.fl", FL_PATH_MAX); + } + + if (cv_project->visible_r()) { + write_file(cv_design_filename, false, true); + int top = cv_project->top_line(); + cv_project->buffer()->loadfile(cv_design_filename); + cv_project->scroll(top, 0); + } else if (cv_strings->visible_r()) { + static const char *exts[] = { ".txt", ".po", ".msg" }; + char fn[FL_PATH_MAX+1]; + fl_strlcpy(fn, get_tmpdir().c_str(), FL_PATH_MAX); + fl_strlcat(fn, "strings", FL_PATH_MAX); + fl_filename_setext(fn, FL_PATH_MAX, exts[g_project.i18n_type]); + write_strings(fn); + int top = cv_strings->top_line(); + cv_strings->buffer()->loadfile(fn); + cv_strings->scroll(top, 0); + } else if (cv_source->visible_r() || cv_header->visible_r()) { + Fl_String code_file_name_bak = g_project.code_file_name; + g_project.code_file_name = cv_source_filename; + Fl_String header_file_name_bak = g_project.header_file_name; + g_project.header_file_name = cv_header_filename; + + // generate the code and load the files + Fd_Code_Writer f; + // generate files + if (f.write_code(cv_source_filename, cv_header_filename, true)) + { + // load file into source editor + int pos = cv_source->top_line(); + cv_source->buffer()->loadfile(cv_source_filename); + cv_source->scroll(pos, 0); + // load file into header editor + pos = cv_header->top_line(); + cv_header->buffer()->loadfile(cv_header_filename); + cv_header->scroll(pos, 0); + // update the source code highlighting + update_codeview_position(); + } + + g_project.code_file_name = code_file_name_bak; + g_project.header_file_name = header_file_name_bak; + }} {} +} + +Function {update_codeview_timer(void*)} { + comment {This is called by the timer itself +} open return_type void +} { + code {update_codeview_cb(0,0);} {} +} + +Function {codeview_defer_update()} {open return_type void +} { + code {// we will only update earliest 0.5 seconds after the last change, and only + // if no other change was made, so dragging a widget will not generate any + // CPU load + Fl::remove_timeout(update_codeview_timer, 0); + Fl::add_timeout(0.5, update_codeview_timer, 0);} {} +} + +Function {codeview_toggle_visibility()} { + comment {Show or hide the source code preview. +The state is stored in the app preferences. +} open return_type void +} { + code {if (!codeview_panel) { + make_codeview(); + codeview_panel->callback((Fl_Callback*)toggle_codeview_cb); + Fl_Preferences svp(fluid_prefs, "codeview"); + int autorefresh; + svp.get("autorefresh", autorefresh, 1); + cv_autorefresh->value(autorefresh); + int autoposition; + svp.get("autoposition", autoposition, 1); + cv_autoposition->value(autoposition); + int tab; + svp.get("tab", tab, 0); + if (tab>=0 && tabchildren()) cv_tab->value(cv_tab->child(tab)); + svp.get("code_choice", cv_code_choice, 2); + cv_code_choice_w->value(cv_code_choice_w->find_item_with_argument(cv_code_choice)); + if (!position_window(codeview_panel,"codeview_pos", 0, 320, 120, 550, 500)) return; + } + + if (codeview_panel->visible()) { + codeview_panel->hide(); + codeview_item->label("Show Code View"); + } else { + codeview_panel->show(); + codeview_item->label("Hide Code View"); + update_codeview_cb(0,0); + }} {} +} + +Function {make_codeview()} {open +} { + Fl_Window codeview_panel { + label {Code View} + callback toggle_codeview_cb open + xywh {389 507 520 515} type Double align 80 resizable size_range {384 120 0 0} visible + } { + Fl_Tabs cv_tab { + callback update_codeview_position_cb open + xywh {10 10 500 440} selection_color 4 labelcolor 7 resizable + } { + Fl_Group cv_source_tab { + label Source open + xywh {10 35 500 415} labelsize 13 resizable + } { + Fl_Text_Editor cv_source { + xywh {10 40 500 410} textfont 4 textsize 11 resizable + code0 {\#include "CodeEditor.h"} + code1 {o->linenumber_width(60);} + code2 {o->linenumber_size(o->Fl_Text_Display::textsize());} + class CodeViewer + } + } + Fl_Group {} { + label Header open + xywh {10 35 500 415} labelsize 13 hide + } { + Fl_Text_Editor cv_header { + xywh {10 40 500 410} textfont 4 textsize 11 resizable + code0 {\#include "CodeEditor.h"} + code1 {o->linenumber_width(60);} + code2 {o->linenumber_size(o->Fl_Text_Display::textsize());} + class CodeViewer + } + } + Fl_Group {} { + label Strings open + xywh {10 35 500 415} labelsize 13 hide + } { + Fl_Text_Display cv_strings { + xywh {10 40 500 410} textfont 4 textsize 11 resizable + code1 {o->linenumber_width(60);} + code2 {o->linenumber_size(o->Fl_Text_Display::textsize());} + class TextViewer + } + } + Fl_Group {} { + label Project open + xywh {10 35 500 415} labelsize 13 hide + } { + Fl_Text_Display cv_project { + xywh {10 40 500 410} textfont 4 textsize 11 resizable + code1 {o->linenumber_width(60);} + code2 {o->linenumber_size(o->Fl_Text_Display::textsize());} + class TextViewer + } + } + } + Fl_Group cv_find_row {open + xywh {10 460 500 20} + } { + Fl_Button cv_find_text_case { + label aA + xywh {244 460 25 20} type Toggle labelsize 11 + } + Fl_Input cv_find_text { + label {Find:} + callback {Fl_Text_Display *e = NULL; +if (cv_source->visible_r()) { + e = cv_source; +} else if (cv_header->visible_r()) { + e = cv_header; +} else if (cv_project->visible_r()) { + e = cv_project; +} +if (e) { + Fl_Text_Buffer *b = e->buffer(); + int pos = e->insert_position(); + int found = b->search_forward(pos, o->value(), &pos, cv_find_text_case->value()); + if (found) { + b->select(pos, pos + (int)strlen(o->value())); + e->insert_position(pos); + e->show_insert_position(); + } +}} + xywh {40 460 200 20} labelsize 11 when 15 textsize 11 + } + Fl_Button {} { + label {<<} + callback {Fl_Text_Display *e = NULL; +if (cv_source->visible_r()) { + e = cv_source; +} else if (cv_header->visible_r()) { + e = cv_header; +} else if (cv_project->visible_r()) { + e = cv_project; +} +if (e) { + const char *needle = cv_find_text->value(); + Fl_Text_Buffer *b = e->buffer(); + int pos = e->insert_position()-1; + if (pos < 0) pos = b->length()-1; + int found = b->search_backward(pos, needle, &pos, cv_find_text_case->value()); + if (!found) + found = b->search_backward(b->length()-1, needle, &pos, cv_find_text_case->value()); + if (found) { + b->select(pos, pos + (int)strlen(needle)); + e->insert_position(pos); + e->show_insert_position(); + } +}} + xywh {273 460 25 20} labelsize 11 + } + Fl_Button {} { + label {>>} + callback {Fl_Text_Display *e = NULL; +if (cv_source->visible_r()) { + e = cv_source; +} else if (cv_header->visible_r()) { + e = cv_header; +} else if (cv_project->visible_r()) { + e = cv_project; +} +if (e) { + const char *needle = cv_find_text->value(); + Fl_Text_Buffer *b = e->buffer(); + int pos = e->insert_position() + 1; + if (pos+1 >= b->length()) pos = 0; + int found = b->search_forward(pos, needle, &pos, cv_find_text_case->value()); + if (!found && (pos > 0)) + found = b->search_forward(0, needle, &pos, cv_find_text_case->value()); + if (found) { + b->select(pos, pos + (int)strlen(needle)); + e->insert_position(pos); + e->show_insert_position(); + } +}} + xywh {298 460 25 20} labelsize 11 + } + Fl_Button {} { + label Reveal + callback {if (codeview_panel && codeview_panel->visible()) { + Fl_Type *node = NULL; + if (cv_source->visible_r()) + node = Fl_Type::find_in_text(0, cv_source->insert_position()); + else if (cv_header->visible_r()) + node = Fl_Type::find_in_text(1, cv_header->insert_position()); + else if (cv_project->visible_r()) + node = Fl_Type::find_in_text(2, cv_project->insert_position()); + if (node) { + select_only(node); + reveal_in_browser(node); + if (Fl::event_clicks()==1) // double click + node->open(); + } +}} + xywh {327 460 61 20} labelsize 11 + } + Fl_Box {} { + xywh {490 460 20 20} resizable + } + } + Fl_Group cv_settings_row {open + xywh {10 485 500 20} + } { + Fl_Button {} { + label Refresh + callback update_codeview_cb + xywh {10 485 61 20} labelsize 11 + } + Fl_Light_Button cv_autorefresh { + label {Auto-Refresh} + xywh {77 485 91 20} labelsize 11 + code0 {o->callback((Fl_Callback*)update_codeview_cb);} + } + Fl_Light_Button cv_autoposition { + label {Auto-Position} + xywh {172 485 89 20} labelsize 11 + } + Fl_Choice cv_code_choice_w { + callback {cv_code_choice = (int)o->mvalue()->argument(); +update_codeview_position();} open + xywh {265 485 70 20} down_box BORDER_BOX labelsize 11 textsize 11 + } { + MenuItem {} { + label prolog + user_data 0 user_data_type long + tooltip {Include statements in header or source code} xywh {0 0 100 20} labelsize 11 hide + } + MenuItem {} { + label static + user_data 1 user_data_type long + tooltip {static declarations in source code} xywh {10 10 100 20} labelsize 11 + } + MenuItem {} { + label code + user_data 2 user_data_type long + tooltip {widget code block including children} xywh {20 20 100 20} labelsize 11 + } + MenuItem {} { + label {code 1} + user_data 3 user_data_type long + tooltip {widget code block before children} xywh {30 30 100 20} labelsize 11 + } + MenuItem {} { + label {code 2} + user_data 4 user_data_type long + tooltip {widget code block after children} xywh {40 40 100 20} labelsize 11 + } + } + Fl_Box {} { + xywh {375 485 80 20} resizable + } + Fl_Button {} { + label Close + callback toggle_codeview_b_cb + xywh {460 485 50 20} labelsize 11 + } + } + } +} + +comment { +//} {in_source in_header +} diff --git a/fluid/codeview_panel.h b/fluid/codeview_panel.h new file mode 100644 index 000000000..8fa566346 --- /dev/null +++ b/fluid/codeview_panel.h @@ -0,0 +1,58 @@ +// +// Code dialogs for the Fast Light Tool Kit (FLTK). +// +// Copyright 1998-2023 by Bill Spitzak and others. +// +// This library is free software. Distribution and use rights are outlined in +// the file "COPYING" which should have been included with this file. If this +// file is missing or damaged, see the license at: +// +// https://www.fltk.org/COPYING.php +// +// Please see the following page on how to report bugs and issues: +// +// https://www.fltk.org/bugs.php +// + +// generated by Fast Light User Interface Designer (fluid) version 1.0400 + +#ifndef codeview_panel_h +#define codeview_panel_h +#include +extern int cv_code_choice; +void update_codeview_position(); +void update_codeview_position_cb(class Fl_Tabs*, void*); +void update_codeview_cb(class Fl_Button*, void*); +void update_codeview_timer(void*); +void codeview_defer_update(); +void codeview_toggle_visibility(); +#include +extern void toggle_codeview_cb(Fl_Double_Window*, void*); +extern Fl_Double_Window *codeview_panel; +#include +extern Fl_Tabs *cv_tab; +#include +extern Fl_Group *cv_source_tab; +#include "CodeEditor.h" +extern CodeViewer *cv_source; +extern CodeViewer *cv_header; +extern TextViewer *cv_strings; +extern TextViewer *cv_project; +extern Fl_Group *cv_find_row; +#include +extern Fl_Button *cv_find_text_case; +#include +extern Fl_Input *cv_find_text; +#include +extern Fl_Group *cv_settings_row; +#include +extern Fl_Light_Button *cv_autorefresh; +extern Fl_Light_Button *cv_autoposition; +#include +extern Fl_Choice *cv_code_choice_w; +extern void toggle_codeview_b_cb(Fl_Button*, void*); +Fl_Double_Window* make_codeview(); +extern Fl_Menu_Item menu_cv_code_choice_w[]; +#endif + +// diff --git a/fluid/custom_widgets.cxx b/fluid/custom_widgets.cxx index 99cfbbbdf..887e2ba14 100644 --- a/fluid/custom_widgets.cxx +++ b/fluid/custom_widgets.cxx @@ -55,7 +55,7 @@ int Widget_Bin_Button::handle(int inEvent) // fake a drag outside of the widget Fl::e_x = x()-1; Fl_Button::handle(inEvent); - // fake a buttton release + // fake a button release Fl_Button::handle(FL_RELEASE); // make it into a dnd event const char *type_name = (const char*)user_data(); diff --git a/fluid/documentation/CMakeLists.txt b/fluid/documentation/CMakeLists.txt new file mode 100644 index 000000000..fb2fac442 --- /dev/null +++ b/fluid/documentation/CMakeLists.txt @@ -0,0 +1,232 @@ +# +# CMakeLists.txt to build docs for the FLTK project using CMake (www.cmake.org) +# +# Copyright 1998-2024 by Bill Spitzak and others. +# +# This library is free software. Distribution and use rights are outlined in +# the file "COPYING" which should have been included with this file. If this +# file is missing or damaged, see the license at: +# +# https://www.fltk.org/COPYING.php +# +# Please see the following page on how to report bugs and issues: +# +# https://www.fltk.org/bugs.php +# + +set(DOCS) +set(GIT_REVISION "") +set(YEAR "") +set(CURRENT_DATE "") + +#------------------------------------------------ +# generate files used for both HTML and PDF docs +#------------------------------------------------ + +if(FLTK_BUILD_FLUID_DOCS OR FLTK_BUILD_PDF_DOCS) + + # create required variables + + execute_process(COMMAND date "+%Y" + OUTPUT_VARIABLE YEAR + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + + # note: current locale is used for abbreviated month + execute_process(COMMAND date "+%b %d, %Y" + OUTPUT_VARIABLE CURRENT_DATE + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + + # find git revision + + # FIXME: This must also work with tarballs where git is not available. + # For now we just ignore errors and set GIT_REVISION = "unknown". + # In the future tarball/zip generation should create a file + # that contains the git revision. + + execute_process(COMMAND + git rev-parse --short=10 HEAD + OUTPUT_VARIABLE GIT_REVISION + OUTPUT_STRIP_TRAILING_WHITESPACE + WORKING_DIRECTORY ${FLTK_SOURCE_DIR} + ERROR_QUIET + ) + + # set to "'unknown'" if git is not available + if(GIT_REVISION STREQUAL "") + set(GIT_REVISION "'unknown'") + endif() + + # Find "short" doxygen version if it was built from Git + # Note: this is still needed in CMake 3.12.0 but later CMake versions + # (notably 3.25) remove the Git revision in 'DOXYGEN_VERSION'. + # Todo: Find the "first good" CMake version and remove this redundant + # code once we require this as our minimal version and replace the + # variable DOXYGEN_VERSION_SHORT with DOXYGEN_VERSION below. + + if(DOXYGEN_FOUND) + # strip trailing git revision if doxygen was built from source + string(REGEX REPLACE " .*$" "" DOXYGEN_VERSION_SHORT ${DOXYGEN_VERSION}) + endif(DOXYGEN_FOUND) + + # configure copyright.dox (includes current year) + configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/copyright.dox.in + ${CMAKE_CURRENT_BINARY_DIR}/copyright.dox + @ONLY + ) + + # configure generated.dox (includes date and versions) + configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/generated.dox.in + ${CMAKE_CURRENT_BINARY_DIR}/generated.dox + @ONLY + ) + +endif(FLTK_BUILD_FLUID_DOCS OR FLTK_BUILD_PDF_DOCS) + +#------------------------------- +# build FLUID html documentation +#------------------------------- + +if(FLTK_BUILD_FLUID_DOCS) + + #list(APPEND DOCS html) + + # generate Doxygen file "Doxyfile" + + set(GENERATE_FLUID_HTML YES) + set(GENERATE_LATEX NO) + set(LATEX_HEADER "") + set(FL_HTML_INDEX "FL_HTML_INDEX") + set(DOXYFILE "Doxyfile") + set(LOGFILE "${CMAKE_CURRENT_BINARY_DIR}/${DOXYFILE}_error.log") + + # configure Doxygen input file for HTML docs (Doxyfile.in) + + configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in + ${CMAKE_CURRENT_BINARY_DIR}/${DOXYFILE}.in + @ONLY + ) + + # convert Doxyfile to used doxygen version + + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${DOXYFILE} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/convert_doxyfile + ${DOXYGEN_EXECUTABLE} + ${DOXYFILE}.in + ${DOXYFILE} + ${LOGFILE} + BYPRODUCTS ${LOGFILE} + COMMENT "Converting ${DOXYFILE} to doxygen version ${DOXYGEN_VERSION_SHORT}" VERBATIM + ) + + # generate screen shot using FLUID --autodoc target_dir + # generate HTML documentation + + add_custom_target(fluid_docs + COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/src/ + COMMAND fltk::fluid -scheme gtk+ --autodoc ${CMAKE_CURRENT_BINARY_DIR}/src/ + COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYFILE} + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${DOXYFILE} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMENT "Generating HTML documentation" VERBATIM + ) + add_dependencies(fluid_docs fltk::fluid) + +endif(FLTK_BUILD_FLUID_DOCS) + +#-------------------------- +# build pdf documentation +#-------------------------- + +if(FLTK_BUILD_PDF_DOCS AND FLTK_BUILD_FLUID_DOCS) + + # generate Doxygen input file "Doxybook" + + set(GENERATE_FLUID_HTML NO) + set(GENERATE_LATEX YES) + set(LATEX_HEADER "${CMAKE_CURRENT_BINARY_DIR}/fluid-book.tex") + set(FL_HTML_INDEX "FL_NO_HTML_INDEX") + set(DOXYFILE "Doxybook") + set(LOGFILE "${CMAKE_CURRENT_BINARY_DIR}/${DOXYFILE}_error.log") + + # configure Doxygen input file for PDF docs (Doxybook.in) + + configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in + ${CMAKE_CURRENT_BINARY_DIR}/${DOXYFILE}.in + @ONLY + ) + + # convert Doxybook to current doxygen version + + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${DOXYFILE} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/convert_doxyfile + ${DOXYGEN_EXECUTABLE} + ${DOXYFILE}.in + ${DOXYFILE} + ${LOGFILE} + BYPRODUCTS ${LOGFILE} + COMMENT "Converting ${DOXYFILE} to doxygen version ${DOXYGEN_VERSION_SHORT}" VERBATIM + ) + + # generate LaTeX title fluid-title.tex + + configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/src/fluid-title.tex.in + ${CMAKE_CURRENT_BINARY_DIR}/fluid-title.tex + @ONLY + ) + + # generate fluid.pdf + + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/fluid.pdf + COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/make_header + ${DOXYGEN_EXECUTABLE} + ${CMAKE_CURRENT_BINARY_DIR}/fluid-title.tex + ${CMAKE_CURRENT_BINARY_DIR}/fluid-book.tex + COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYFILE} + COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/make_pdf + COMMAND cp -f latex/refman.pdf fluid.pdf + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${DOXYFILE} + ${CMAKE_CURRENT_BINARY_DIR}/fluid-title.tex + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMENT "Generating FLUID PDF documentation" VERBATIM + ) + + # add target 'pdf' + + add_custom_target(fluid_pdf + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/fluid.pdf + ) + add_dependencies(fluid_pdf fluid_docs) + +endif(FLTK_BUILD_PDF_DOCS AND FLTK_BUILD_FLUID_DOCS) + +#--------------------------------------- +# install FLUID html + pdf documentation +#--------------------------------------- + +if(FLTK_INSTALL_FLUID_DOCS AND FLTK_BUILD_FLUID_DOCS) + + install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html + DESTINATION ${FLTK_DATADIR}/doc/fltk/fluid + ) + +endif(FLTK_INSTALL_FLUID_DOCS AND FLTK_BUILD_FLUID_DOCS) + +if(FLTK_INSTALL_PDF_DOCS AND FLTK_BUILD_PDF_DOCS AND FLTK_BUILD_FLUID_DOCS) + + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/fluid.pdf + DESTINATION ${FLTK_DATADIR}/doc/fltk/ + ) + +endif(FLTK_INSTALL_PDF_DOCS AND FLTK_BUILD_PDF_DOCS AND FLTK_BUILD_FLUID_DOCS) diff --git a/fluid/documentation/Doxyfile.in b/fluid/documentation/Doxyfile.in new file mode 100644 index 000000000..f625dd52a --- /dev/null +++ b/fluid/documentation/Doxyfile.in @@ -0,0 +1,2485 @@ +# Doxyfile 1.8.14 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a double hash (##) is considered a comment and is placed in +# front of the TAG it is preceding. +# +# All text after a single hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists, items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (\" \"). + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all text +# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv +# built into libc) for the transcoding. See +# https://www.gnu.org/software/libiconv/ for the list of possible encodings. +# The default value is: UTF-8. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by +# double-quotes, unless you are using Doxywizard) that should identify the +# project for which the documentation is generated. This name is used in the +# title of most generated pages and in a few other places. +# The default value is: My Project. + +PROJECT_NAME = "FLUID for FLTK @FLTK_VERSION@" + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. This +# could be handy for archiving the generated documentation or if some version +# control system is used. + +PROJECT_NUMBER = + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer a +# quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = + +# With the PROJECT_LOGO tag one can specify a logo or an icon that is included +# in the documentation. The maximum height of the logo should not exceed 55 +# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy +# the logo to the output directory. + +PROJECT_LOGO = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path +# into which the generated documentation will be written. If a relative path is +# entered, it will be relative to the location where doxygen was started. If +# left blank the current directory will be used. + +OUTPUT_DIRECTORY = . + +# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- +# directories (in 2 levels) under the output directory of each output format and +# will distribute the generated files over these directories. Enabling this +# option can be useful when feeding doxygen a huge amount of source files, where +# putting all generated files in the same directory would otherwise causes +# performance problems for the file system. +# The default value is: NO. + +CREATE_SUBDIRS = NO + +# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII +# characters to appear in the names of generated files. If set to NO, non-ASCII +# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode +# U+3044. +# The default value is: NO. + +ALLOW_UNICODE_NAMES = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, +# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), +# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, +# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), +# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, +# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, +# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, +# Ukrainian and Vietnamese. +# The default value is: English. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member +# descriptions after the members that are listed in the file and class +# documentation (similar to Javadoc). Set to NO to disable this. +# The default value is: YES. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief +# description of a member or function before the detailed description +# +# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. +# The default value is: YES. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator that is +# used to form the text in various listings. Each string in this list, if found +# as the leading text of the brief description, will be stripped from the text +# and the result, after processing the whole list, is used as the annotated +# text. Otherwise, the brief description is used as-is. If left blank, the +# following values are used ($name is automatically replaced with the name of +# the entity):The $name class, The $name widget, The $name file, is, provides, +# specifies, contains, represents, a, an and the. + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# doxygen will generate a detailed section even if there is only a brief +# description. +# The default value is: NO. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. +# The default value is: NO. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path +# before files name in the file list and in the header files. If set to NO the +# shortest path that makes the file name unique will be used +# The default value is: YES. + +FULL_PATH_NAMES = NO + +# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. +# Stripping is only done if one of the specified strings matches the left-hand +# part of the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the path to +# strip. +# +# Note that you can specify absolute paths here, but also relative paths, which +# will be relative from the directory where doxygen is started. +# This tag requires that the tag FULL_PATH_NAMES is set to YES. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the +# path mentioned in the documentation of a class, which tells the reader which +# header file to include in order to use a class. If left blank only the name of +# the header file containing the class definition is used. Otherwise one should +# specify the list of include paths that are normally passed to the compiler +# using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but +# less readable) file names. This can be useful is your file systems doesn't +# support long names like on DOS, Mac, or CD-ROM. +# The default value is: NO. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the +# first line (until the first dot) of a Javadoc-style comment as the brief +# description. If set to NO, the Javadoc-style will behave just like regular Qt- +# style comments (thus requiring an explicit @brief command for a brief +# description.) +# The default value is: NO. + +JAVADOC_AUTOBRIEF = YES + +# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first +# line (until the first dot) of a Qt-style comment as the brief description. If +# set to NO, the Qt-style will behave just like regular Qt-style comments (thus +# requiring an explicit \brief command for a brief description.) +# The default value is: NO. + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a +# multi-line C++ special comment block (i.e. a block of //! or /// comments) as +# a brief description. This used to be the default behavior. The new default is +# to treat a multi-line C++ comment block as a detailed description. Set this +# tag to YES if you prefer the old behavior instead. +# +# Note that setting this tag to YES also means that rational rose comments are +# not recognized any more. +# The default value is: NO. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the +# documentation from any documented member that it re-implements. +# The default value is: YES. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new +# page for each member. If set to NO, the documentation of a member will be part +# of the file/class/namespace that contains it. +# The default value is: NO. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen +# uses this value to replace tabs by spaces in code fragments. +# Minimum value: 1, maximum value: 16, default value: 4. + +TAB_SIZE = 8 + +# This tag can be used to specify a number of aliases that act as commands in +# the documentation. An alias has the form: +# name=value +# For example adding +# "sideeffect=@par Side Effects:\n" +# will allow you to put the command \sideeffect (or @sideeffect) in the +# documentation, which will result in a user-defined paragraph with heading +# "Side Effects:". You can put \n's in the value part of an alias to insert +# newlines (in the resulting output). You can put ^^ in the value part of an +# alias to insert a newline as if a physical newline was in the original file. + +ALIASES = + +# This tag can be used to specify a number of word-keyword mappings (TCL only). +# A mapping has the form "name=value". For example adding "class=itcl::class" +# will allow you to use the command class in the itcl::class meaning. + +TCL_SUBST = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources +# only. Doxygen will then generate output that is more tailored for C. For +# instance, some of the names that are used will be different. The list of all +# members will be omitted, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or +# Python sources only. Doxygen will then generate output that is more tailored +# for that language. For instance, namespaces will be presented as packages, +# qualified scopes will look different, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources. Doxygen will then generate output that is tailored for Fortran. +# The default value is: NO. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for VHDL. +# The default value is: NO. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given +# extension. Doxygen has a built-in mapping, but you can override or extend it +# using this tag. The format is ext=language, where ext is a file extension, and +# language is one of the parsers supported by doxygen: IDL, Java, Javascript, +# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: +# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: +# Fortran. In the later case the parser tries to guess whether the code is fixed +# or free formatted code, this is the default for Fortran type files), VHDL. For +# instance to make doxygen treat .inc files as Fortran files (default is PHP), +# and .f files as C (default is Fortran), use: inc=Fortran f=C. +# +# Note: For files without extension you can use no_extension as a placeholder. +# +# Note that for custom extensions you also need to set FILE_PATTERNS otherwise +# the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments +# according to the Markdown format, which allows for more readable +# documentation. See http://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you can +# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in +# case of backward compatibilities issues. +# The default value is: YES. + +MARKDOWN_SUPPORT = YES + +# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up +# to that level are automatically included in the table of contents, even if +# they do not have an id attribute. +# Note: This feature currently applies only to Markdown headings. +# Minimum value: 0, maximum value: 99, default value: 0. +# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. + +TOC_INCLUDE_HEADINGS = 0 + +# When enabled doxygen tries to link words that correspond to documented +# classes, or namespaces to their corresponding documentation. Such a link can +# be prevented in individual cases by putting a % sign in front of the word or +# globally by setting AUTOLINK_SUPPORT to NO. +# The default value is: YES. + +AUTOLINK_SUPPORT = YES + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should set this +# tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); +# versus func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. +# The default value is: NO. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. +# The default value is: NO. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: +# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen +# will parse them like normal C++ but will assume all classes use public instead +# of private inheritance when no explicit protection keyword is present. +# The default value is: NO. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate +# getter and setter methods for a property. Setting this option to YES will make +# doxygen to replace the get and set methods by a property in the documentation. +# This will only work if the methods are indeed getting or setting a simple +# type. If this is not the case, or you want to show the methods anyway, you +# should set this option to NO. +# The default value is: YES. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. +# The default value is: NO. + +DISTRIBUTE_GROUP_DOC = NO + +# If one adds a struct or class to a group and this option is enabled, then also +# any nested class or struct is added to the same group. By default this option +# is disabled and one has to add nested compounds explicitly via \ingroup. +# The default value is: NO. + +GROUP_NESTED_COMPOUNDS = NO + +# Set the SUBGROUPING tag to YES to allow class member groups of the same type +# (for instance a group of public functions) to be put as a subgroup of that +# type (e.g. under the Public Functions section). Set it to NO to prevent +# subgrouping. Alternatively, this can be done per class using the +# \nosubgrouping command. +# The default value is: YES. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions +# are shown inside the group in which they are included (e.g. using \ingroup) +# instead of on a separate page (for HTML and Man pages) or section (for LaTeX +# and RTF). +# +# Note that this feature does not work in combination with +# SEPARATE_MEMBER_PAGES. +# The default value is: NO. + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions +# with only public data fields or simple typedef fields will be shown inline in +# the documentation of the scope in which they are defined (i.e. file, +# namespace, or group documentation), provided this scope is documented. If set +# to NO, structs, classes, and unions are shown on a separate page (for HTML and +# Man pages) or section (for LaTeX and RTF). +# The default value is: NO. + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or +# enum is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically be +# useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. +# The default value is: NO. + +TYPEDEF_HIDES_STRUCT = NO + +# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This +# cache is used to resolve symbols given their name and scope. Since this can be +# an expensive process and often the same symbol appears multiple times in the +# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small +# doxygen will become slower. If the cache is too large, memory is wasted. The +# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range +# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 +# symbols. At the end of a run doxygen will report the cache usage and suggest +# the optimal cache size from a speed point of view. +# Minimum value: 0, maximum value: 9, default value: 0. + +LOOKUP_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in +# documentation are documented, even if no documentation was available. Private +# class members and static file members will be hidden unless the +# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. +# Note: This will also disable the warnings about undocumented members that are +# normally produced when WARNINGS is set to YES. +# The default value is: NO. + +EXTRACT_ALL = NO + +# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will +# be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal +# scope will be included in the documentation. +# The default value is: NO. + +EXTRACT_PACKAGE = NO + +# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be +# included in the documentation. +# The default value is: NO. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined +# locally in source files will be included in the documentation. If set to NO, +# only classes defined in header files are included. Does not have any effect +# for Java sources. +# The default value is: YES. + +EXTRACT_LOCAL_CLASSES = NO + +# This flag is only useful for Objective-C code. If set to YES, local methods, +# which are defined in the implementation section but not in the interface are +# included in the documentation. If set to NO, only methods in the interface are +# included. +# The default value is: NO. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base name of +# the file that contains the anonymous namespace. By default anonymous namespace +# are hidden. +# The default value is: NO. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all +# undocumented members inside documented classes or files. If set to NO these +# members will be included in the various overviews, but no documentation +# section is generated. This option has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. If set +# to NO, these classes will be included in the various overviews. This option +# has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend +# (class|struct|union) declarations. If set to NO, these declarations will be +# included in the documentation. +# The default value is: NO. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any +# documentation blocks found inside the body of a function. If set to NO, these +# blocks will be appended to the function's detailed documentation block. +# The default value is: NO. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation that is typed after a +# \internal command is included. If the tag is set to NO then the documentation +# will be excluded. Set it to YES to include the internal documentation. +# The default value is: NO. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file +# names in lower-case letters. If set to YES, upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. +# The default value is: system dependent. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with +# their full class and namespace scopes in the documentation. If set to YES, the +# scope will be hidden. +# The default value is: NO. + +HIDE_SCOPE_NAMES = NO + +# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will +# append additional text to a page's title, such as Class Reference. If set to +# YES the compound reference will be hidden. +# The default value is: NO. + +HIDE_COMPOUND_REFERENCE= NO + +# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of +# the files that are included by a file in the documentation of that file. +# The default value is: YES. + +SHOW_INCLUDE_FILES = YES + +# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each +# grouped member an include statement to the documentation, telling the reader +# which file to include in order to use the member. +# The default value is: NO. + +SHOW_GROUPED_MEMB_INC = NO + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include +# files with double quotes in the documentation rather than with sharp brackets. +# The default value is: NO. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the +# documentation for inline members. +# The default value is: YES. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the +# (detailed) documentation of file and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. +# The default value is: YES. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief +# descriptions of file, namespace and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. Note that +# this will also influence the order of the classes in the class list. +# The default value is: NO. + +SORT_BRIEF_DOCS = YES + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the +# (brief and detailed) documentation of class members so that constructors and +# destructors are listed first. If set to NO the constructors will appear in the +# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. +# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief +# member documentation. +# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting +# detailed member documentation. +# The default value is: NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy +# of group names into alphabetical order. If set to NO the group names will +# appear in their defined order. +# The default value is: NO. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by +# fully-qualified names, including namespaces. If set to NO, the class list will +# be sorted only by class name, not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the alphabetical +# list. +# The default value is: NO. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper +# type resolution of all parameters of a function it will reject a match between +# the prototype and the implementation of a member function even if there is +# only one candidate or it is obvious which candidate to choose by doing a +# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still +# accept a match between prototype and implementation in such cases. +# The default value is: NO. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo +# list. This list is created by putting \todo commands in the documentation. +# The default value is: YES. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test +# list. This list is created by putting \test commands in the documentation. +# The default value is: YES. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug +# list. This list is created by putting \bug commands in the documentation. +# The default value is: YES. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) +# the deprecated list. This list is created by putting \deprecated commands in +# the documentation. +# The default value is: YES. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional documentation +# sections, marked by \if ... \endif and \cond +# ... \endcond blocks. + +ENABLED_SECTIONS = @FL_HTML_INDEX@ + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the +# initial value of a variable or macro / define can have for it to appear in the +# documentation. If the initializer consists of more lines than specified here +# it will be hidden. Use a value of 0 to hide initializers completely. The +# appearance of the value of individual variables and macros / defines can be +# controlled using \showinitializer or \hideinitializer command in the +# documentation regardless of this setting. +# Minimum value: 0, maximum value: 10000, default value: 30. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at +# the bottom of the documentation of classes and structs. If set to YES, the +# list will mention the files that were used to generate the documentation. +# The default value is: YES. + +SHOW_USED_FILES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This +# will remove the Files entry from the Quick Index and from the Folder Tree View +# (if specified). +# The default value is: YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces +# page. This will remove the Namespaces entry from the Quick Index and from the +# Folder Tree View (if specified). +# The default value is: YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command command input-file, where command is the value of the +# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided +# by doxygen. Whatever the program writes to standard output is used as the file +# version. For an example see the documentation. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. You can +# optionally specify a file name after the option, if omitted DoxygenLayout.xml +# will be used as the name of the layout file. +# +# Note that if you run doxygen from a directory containing a file called +# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE +# tag is left empty. + +LAYOUT_FILE = + +# The CITE_BIB_FILES tag can be used to specify one or more bib files containing +# the reference definitions. This must be a list of .bib files. The .bib +# extension is automatically appended if omitted. This requires the bibtex tool +# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info. +# For LaTeX the style of the bibliography can be controlled using +# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the +# search path. See also \cite for info how to create references. + +CITE_BIB_FILES = + +#--------------------------------------------------------------------------- +# Configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated to +# standard output by doxygen. If QUIET is set to YES this implies that the +# messages are off. +# The default value is: NO. + +QUIET = YES + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES +# this implies that the warnings are on. +# +# Tip: Turn warnings on while writing the documentation. +# The default value is: YES. + +WARNINGS = YES + +# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate +# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: YES. + +WARN_IF_UNDOCUMENTED = NO + +# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some parameters +# in a documented function, or documenting parameters that don't exist or using +# markup commands wrongly. +# The default value is: YES. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that +# are documented, but have no documentation for their parameters or return +# value. If set to NO, doxygen will only warn about wrong or incomplete +# parameter documentation, but not about the absence of documentation. +# The default value is: NO. + +WARN_NO_PARAMDOC = NO + +# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when +# a warning is encountered. +# The default value is: NO. + +WARN_AS_ERROR = NO + +# The WARN_FORMAT tag determines the format of the warning messages that doxygen +# can produce. The string should contain the $file, $line, and $text tags, which +# will be replaced by the file and line number from which the warning originated +# and the warning text. Optionally the format may contain $version, which will +# be replaced by the version of the file (if it could be obtained via +# FILE_VERSION_FILTER) +# The default value is: $file:$line: $text. + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning and error +# messages should be written. If left blank the output is written to standard +# error (stderr). + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# Configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag is used to specify the files and/or directories that contain +# documented source files. You may enter file names like myfile.cpp or +# directories like /usr/src/myproject. Separate the files or directories with +# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING +# Note: If this tag is empty the current directory is searched. + +INPUT = @CMAKE_CURRENT_SOURCE_DIR@/src/index.dox \ + @CMAKE_CURRENT_SOURCE_DIR@/src/page_introduction.dox \ + @CMAKE_CURRENT_SOURCE_DIR@/src/page_commandline.dox \ + @CMAKE_CURRENT_SOURCE_DIR@/src/page_interactive.dox \ + @CMAKE_CURRENT_SOURCE_DIR@/src/page_main_window.dox \ + @CMAKE_CURRENT_SOURCE_DIR@/src/page_widgetbin_panel.dox \ + @CMAKE_CURRENT_SOURCE_DIR@/src/page_edit_window.dox \ + @CMAKE_CURRENT_SOURCE_DIR@/src/page_functional_nodes.dox \ + @CMAKE_CURRENT_SOURCE_DIR@/src/page_widget_panel.dox \ + @CMAKE_CURRENT_SOURCE_DIR@/src/page_setting_dialog.dox \ + @CMAKE_CURRENT_SOURCE_DIR@/src/page_codeview_panel.dox \ + @CMAKE_CURRENT_SOURCE_DIR@/src/page_tutorial.dox \ + @CMAKE_CURRENT_SOURCE_DIR@/src/page_appendices.dox + +# @FLTK_SOURCE_DIR@/fluid + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses +# libiconv (or the iconv built into libc) for the transcoding. See the libiconv +# documentation (see: https://www.gnu.org/software/libiconv/) for the list of +# possible encodings. +# The default value is: UTF-8. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and +# *.h) to filter out the source-files in the directories. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# read by doxygen. +# +# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, +# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, +# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, +# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, +# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf and *.qsf. + +FILE_PATTERNS = *.H \ + *.h \ + *.c \ + *.cxx \ + *.dox + +# The RECURSIVE tag can be used to specify whether or not subdirectories should +# be searched for input files as well. +# The default value is: NO. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# +# Note that relative paths are relative to the directory from which doxygen is +# run. + +EXCLUDE = +# @FLTK_SOURCE_DIR@/src/drivers/ + +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. +# The default value is: NO. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories for example use the pattern */test/* + +EXCLUDE_PATTERNS = +# */src/*_win32.cxx \ +# */src/*_mac.cxx \ +# */src/*_x.cxx \ +# */src/xdg* \ +# */src/text-input* + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories use the pattern */test/* + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or directories +# that contain example code fragments that are included (see the \include +# command). + +EXAMPLE_PATH = +# @CMAKE_CURRENT_SOURCE_DIR@/../test \ +# @CMAKE_CURRENT_SOURCE_DIR@/../examples \ +# @CMAKE_CURRENT_BINARY_DIR@ \ +# @CMAKE_CURRENT_SOURCE_DIR@ + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank all +# files are included. + +EXAMPLE_PATTERNS = *.cxx \ + *.h \ + *.H \ + *.fl + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude commands +# irrespective of the value of the RECURSIVE tag. +# The default value is: NO. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or directories +# that contain images that are to be included in the documentation (see the +# \image command). + +IMAGE_PATH = @CMAKE_CURRENT_SOURCE_DIR@/src \ + @CMAKE_CURRENT_BINARY_DIR@/src + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command: +# +# +# +# where is the value of the INPUT_FILTER tag, and is the +# name of an input file. Doxygen will then use the output that the filter +# program writes to standard output. If FILTER_PATTERNS is specified, this tag +# will be ignored. +# +# Note that the filter must not add or remove lines; it is applied before the +# code is scanned, but not when the output code is generated. If lines are added +# or removed, the anchors will not be placed correctly. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: pattern=filter +# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how +# filters are used. If the FILTER_PATTERNS tag is empty or if none of the +# patterns match the file name, INPUT_FILTER is applied. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will also be used to filter the input files that are used for +# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). +# The default value is: NO. + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and +# it is also possible to disable source filtering for a specific pattern using +# *.ext= (so without naming a filter). +# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. + +FILTER_SOURCE_PATTERNS = + +# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that +# is part of the input, its contents will be placed on the main page +# (index.html). This can be useful if you have a project on for instance GitHub +# and want to reuse the introduction page also for the doxygen output. + +USE_MDFILE_AS_MAINPAGE = + +#--------------------------------------------------------------------------- +# Configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will be +# generated. Documented entities will be cross-referenced with these sources. +# +# Note: To get rid of all source code in the generated output, make sure that +# also VERBATIM_HEADERS is set to NO. +# The default value is: NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body of functions, +# classes and enums directly into the documentation. +# The default value is: NO. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any +# special comment blocks from generated source code fragments. Normal C, C++ and +# Fortran comments will always remain visible. +# The default value is: YES. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES then for each documented +# function all documented functions referencing it will be listed. +# The default value is: NO. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES then for each documented function +# all documented entities called/used by that function will be listed. +# The default value is: NO. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set +# to YES then the hyperlinks from functions in REFERENCES_RELATION and +# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will +# link to the documentation. +# The default value is: YES. + +REFERENCES_LINK_SOURCE = YES + +# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the +# source code will show a tooltip with additional information such as prototype, +# brief description and links to the definition and documentation. Since this +# will make the HTML file larger and loading of large files a bit slower, you +# can opt to disable this feature. +# The default value is: YES. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +SOURCE_TOOLTIPS = YES + +# If the USE_HTAGS tag is set to YES then the references to source code will +# point to the HTML generated by the htags(1) tool instead of doxygen built-in +# source browser. The htags tool is part of GNU's global source tagging system +# (see https://www.gnu.org/software/global/global.html). You will need version +# 4.8.6 or higher. +# +# To use it do the following: +# - Install the latest version of global +# - Enable SOURCE_BROWSER and USE_HTAGS in the config file +# - Make sure the INPUT points to the root of the source tree +# - Run doxygen as normal +# +# Doxygen will invoke htags (and that will in turn invoke gtags), so these +# tools must be available from the command line (i.e. in the search path). +# +# The result: instead of the source browser generated by doxygen, the links to +# source code will now point to the output of htags. +# The default value is: NO. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a +# verbatim copy of the header file for each class for which an include is +# specified. Set to NO to disable this. +# See also: Section \class. +# The default value is: YES. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# Configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all +# compounds will be generated. Enable this if the project contains a lot of +# classes, structs, unions or interfaces. +# The default value is: YES. + +ALPHABETICAL_INDEX = YES + +# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in +# which the alphabetical index list will be split. +# Minimum value: 1, maximum value: 20, default value: 5. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all classes will +# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag +# can be used to specify a prefix (or a list of prefixes) that should be ignored +# while generating the index headers. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +IGNORE_PREFIX = +# fl_ \ +# FL_ \ +# Fl_ + +#--------------------------------------------------------------------------- +# Configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output +# The default value is: YES. + +GENERATE_HTML = @GENERATE_FLUID_HTML@ + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each +# generated HTML page (for example: .htm, .php, .asp). +# The default value is: .html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a user-defined HTML header file for +# each generated HTML page. If the tag is left blank doxygen will generate a +# standard header. +# +# To get valid HTML the header file that includes any scripts and style sheets +# that doxygen needs, which is dependent on the configuration options used (e.g. +# the setting GENERATE_TREEVIEW). It is highly recommended to start with a +# default header using +# doxygen -w html new_header.html new_footer.html new_stylesheet.css +# YourConfigFile +# and then modify the file new_header.html. See also section "Doxygen usage" +# for information on how to generate the default header that doxygen normally +# uses. +# Note: The header is subject to change so you typically have to regenerate the +# default header when upgrading to a newer version of doxygen. For a description +# of the possible markers and block names see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each +# generated HTML page. If the tag is left blank doxygen will generate a standard +# footer. See HTML_HEADER for more information on how to generate a default +# footer and what special commands can be used inside the footer. See also +# section "Doxygen usage" for information on how to generate the default footer +# that doxygen normally uses. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style +# sheet that is used by each HTML page. It can be used to fine-tune the look of +# the HTML output. If left blank doxygen will generate a default style sheet. +# See also section "Doxygen usage" for information on how to generate the style +# sheet that doxygen normally uses. +# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as +# it is more robust and this tag (HTML_STYLESHEET) will in the future become +# obsolete. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_STYLESHEET = + +# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# cascading style sheets that are included after the standard style sheets +# created by doxygen. Using this option one can overrule certain style aspects. +# This is preferred over using HTML_STYLESHEET since it does not replace the +# standard style sheet and is therefore more robust against future updates. +# Doxygen will copy the style sheet files to the output directory. +# Note: The order of the extra style sheet files is of importance (e.g. the last +# style sheet in the list overrules the setting of the previous ones in the +# list). For an example see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that the +# files will be copied as-is; there are no commands or markers available. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE tag can be used to specify if the generated HTML output +# should be rendered with a dark or light theme. +# Possible values are: LIGHT always generate light mode output, DARK always +# generate dark mode output, AUTO_LIGHT automatically set the mode according to +# the user preference, use light mode if no preference is set (the default), +# AUTO_DARK automatically set the mode according to the user preference, use +# dark mode if no preference is set and TOGGLE allow to user to switch between +# light and dark mode via a button. +# The default value is: AUTO_LIGHT. +# This tag requires that the tag GENERATE_HTML is set to YES. + +# Note: since doxygen 1.9.5 + +HTML_COLORSTYLE = TOGGLE + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen +# will adjust the colors in the style sheet and background images according to +# this color. Hue is specified as an angle on a colorwheel, see +# https://en.wikipedia.org/wiki/Hue for more information. For instance the value +# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 +# purple, and 360 is red again. +# Minimum value: 0, maximum value: 359, default value: 220. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors +# in the HTML output. For a value of 0 the output will use grayscales only. A +# value of 255 will produce the most vivid colors. +# Minimum value: 0, maximum value: 255, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the +# luminance component of the colors in the HTML output. Values below 100 +# gradually make the output lighter, whereas values above 100 make the output +# darker. The value divided by 100 is the actual gamma applied, so 80 represents +# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not +# change the gamma. +# Minimum value: 40, maximum value: 240, default value: 80. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting this +# to YES can help to show when doxygen was last run and thus if the +# documentation is up to date. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_TIMESTAMP = NO + +# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML +# documentation will contain a main index with vertical navigation menus that +# are dynamically created via Javascript. If disabled, the navigation index will +# consists of multiple levels of tabs that are statically embedded in every HTML +# page. Disable this option to support browsers that do not have Javascript, +# like the Qt help browser. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_MENUS = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_SECTIONS = NO + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries +# shown in the various tree structured indices initially; the user can expand +# and collapse entries dynamically later on. Doxygen will expand the tree to +# such a level that at most the specified number of entries are visible (unless +# a fully collapsed tree already exceeds this amount). So setting the number of +# entries 1 will produce a full collapsed tree by default. 0 is a special value +# representing an infinite number of entries and will result in a full expanded +# tree by default. +# Minimum value: 0, maximum value: 9999, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files will be +# generated that can be used as input for Apple's Xcode 3 integrated development +# environment (see: https://developer.apple.com/tools/xcode/), introduced with +# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a +# Makefile in the HTML output directory. Running make will produce the docset in +# that directory and running make install will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at +# startup. See https://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_DOCSET = YES + +# This tag determines the name of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# The default value is: Doxygen generated docs. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# This tag specifies a string that should uniquely identify the documentation +# set bundle. This should be a reverse domain-name style string, e.g. +# com.mycompany.MyDocSet. Doxygen will append .docset to the name. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. +# The default value is: org.doxygen.Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. +# The default value is: Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three +# additional HTML index files: index.hhp, index.hhc, and index.hhk. The +# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop +# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on +# Windows. +# +# The HTML Help Workshop contains a compiler that can convert all HTML output +# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML +# files are now used as the Windows 98 help format, and will replace the old +# Windows help format (.hlp) on all Windows platforms in the future. Compressed +# HTML files also contain an index, a table of contents, and you can search for +# words in the documentation. The HTML workshop also contains a viewer for +# compressed HTML files. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_HTMLHELP = NO + +# The CHM_FILE tag can be used to specify the file name of the resulting .chm +# file. You can add a path in front of the file if the result should not be +# written to the html output directory. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_FILE = + +# The HHC_LOCATION tag can be used to specify the location (absolute path +# including file name) of the HTML help compiler (hhc.exe). If non-empty, +# doxygen will try to run the HTML help compiler on the generated index.hhp. +# The file has to be specified with full path. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +HHC_LOCATION = + +# The GENERATE_CHI flag controls if a separate .chi index file is generated +# (YES) or that it should be included in the master .chm file (NO). +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +GENERATE_CHI = NO + +# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) +# and project file content. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_INDEX_ENCODING = + +# The BINARY_TOC flag controls whether a binary table of contents is generated +# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it +# enables the Previous and Next buttons. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members to +# the table of contents of the HTML help documentation and to the tree view. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that +# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help +# (.qch) of the generated HTML documentation. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify +# the file name of the resulting .qch file. The path specified is relative to +# the HTML output folder. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help +# Project output. For more information please see Qt Help Project / Namespace +# (see: http://doc.qt.io/qt-4.8/qthelpproject.html#namespace). +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt +# Help Project output. For more information please see Qt Help Project / Virtual +# Folders (see: http://doc.qt.io/qt-4.8/qthelpproject.html#virtual-folders). +# The default value is: doc. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_VIRTUAL_FOLDER = doc + +# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom +# filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://doc.qt.io/qt-4.8/qthelpproject.html#custom-filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://doc.qt.io/qt-4.8/qthelpproject.html#custom-filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's filter section matches. Qt Help Project / Filter Attributes (see: +# http://doc.qt.io/qt-4.8/qthelpproject.html#filter-attributes). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_SECT_FILTER_ATTRS = + +# The QHG_LOCATION tag can be used to specify the location of Qt's +# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the +# generated .qhp file. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be +# generated, together with the HTML files, they form an Eclipse help plugin. To +# install this plugin and make it available under the help contents menu in +# Eclipse, the contents of the directory containing the HTML and XML files needs +# to be copied into the plugins directory of eclipse. The name of the directory +# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. +# After copying Eclipse needs to be restarted before the help appears. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the Eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have this +# name. Each documentation set should have its own identifier. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# If you want full control over the layout of the generated HTML pages it might +# be necessary to disable the index and replace it with your own. The +# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top +# of each HTML page. A value of NO enables the index and the value YES disables +# it. Since the tabs in the index contain the same information as the navigation +# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +DISABLE_INDEX = NO + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. If the tag +# value is set to YES, a side panel will be generated containing a tree-like +# index structure (just like the one that is generated for HTML Help). For this +# to work a browser that supports JavaScript, DHTML, CSS and frames is required +# (i.e. any modern browser). Windows users are probably better off using the +# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can +# further fine-tune the look of the index. As an example, the default style +# sheet generated by doxygen has an example that shows how to put an image at +# the root of the tree instead of the PROJECT_NAME. Since the tree basically has +# the same information as the tab index, you could consider setting +# DISABLE_INDEX to YES when enabling this option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_TREEVIEW = YES + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that +# doxygen will group on one line in the generated HTML documentation. +# +# Note that a value of 0 will completely suppress the enum values from appearing +# in the overview section. +# Minimum value: 0, maximum value: 20, default value: 4. +# This tag requires that the tag GENERATE_HTML is set to YES. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used +# to set the initial width (in pixels) of the frame in which the tree is shown. +# Minimum value: 0, maximum value: 1500, default value: 250. +# This tag requires that the tag GENERATE_HTML is set to YES. + +TREEVIEW_WIDTH = 250 + +# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to +# external symbols imported via tag files in a separate window. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of LaTeX formulas included as images in +# the HTML documentation. When you change the font size after a successful +# doxygen run you need to manually remove any form_*.png images from the HTML +# output directory to force them to be regenerated. +# Minimum value: 8, maximum value: 50, default value: 10. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANSPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are not +# supported properly for IE 6.0, but are supported on all modern browsers. +# +# Note that when changing this option you need to delete any form_*.png files in +# the HTML output directory before the changes have effect. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see +# https://www.mathjax.org) which uses client side Javascript for the rendering +# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX +# installed or if you want to formulas look prettier in the HTML output. When +# enabled you may also need to install MathJax separately and configure the path +# to it using the MATHJAX_RELPATH option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +USE_MATHJAX = NO + +# When MathJax is enabled you can set the default output format to be used for +# the MathJax output. See the MathJax site (see: +# http://docs.mathjax.org/en/latest/output.html) for more details. +# Possible values are: HTML-CSS (which is slower, but has the best +# compatibility), NativeMML (i.e. MathML) and SVG. +# The default value is: HTML-CSS. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_FORMAT = HTML-CSS + +# When MathJax is enabled you need to specify the location relative to the HTML +# output directory using the MATHJAX_RELPATH option. The destination directory +# should contain the MathJax.js script. For instance, if the mathjax directory +# is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax +# Content Delivery Network so you can quickly see the result without installing +# MathJax. However, it is strongly recommended to install a local copy of +# MathJax from https://www.mathjax.org before deployment. +# The default value is: https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_RELPATH = https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/ + +# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax +# extension names that should be enabled during MathJax rendering. For example +# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_EXTENSIONS = + +# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces +# of code that will be used on startup of the MathJax code. See the MathJax site +# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an +# example see the documentation. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_CODEFILE = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box for +# the HTML output. The underlying search engine uses javascript and DHTML and +# should work on any modern browser. Note that when using HTML help +# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) +# there is already a search function so this one should typically be disabled. +# For large projects the javascript based search engine can be slow, then +# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to +# search using the keyboard; to jump to the search box use + S +# (what the is depends on the OS and browser, but it is typically +# , /