Fluid: Rebuilding most of the widget directory.

One file per logical unit.
Namespaces.
Non-static data member initializers to never
get an uninitialized field again.
This commit is contained in:
Matthias Melcher
2025-03-07 18:54:03 +01:00
parent 89f714cb4e
commit c3571838cb
28 changed files with 1000 additions and 820 deletions
+12 -6
View File
@@ -50,9 +50,12 @@ set(CPPFILES
rsrcs/pixmaps.cxx
tools/autodoc.cxx
tools/fluid_filename.cxx
widgets/CodeEditor.cxx
widgets/custom_widgets.cxx
widgets/StyleParse.cxx
widgets/Code_Editor.cxx
widgets/Code_Viewer.cxx
widgets/Text_Viewer.cxx
widgets/Formula_Input.cxx
widgets/Bin_Button.cxx
widgets/Style_Parser.cxx
widgets/widget_browser.cxx
)
@@ -87,9 +90,12 @@ set(HEADERFILES
rsrcs/pixmaps.h
tools/autodoc.h
tools/fluid_filename.h
widgets/CodeEditor.h
widgets/custom_widgets.h
widgets/StyleParse.h
widgets/Code_Editor.h
widgets/Code_Viewer.h
widgets/Text_Viewer.h
widgets/Formula_Input.h
widgets/Bin_Button.h
widgets/Style_Parser.h
widgets/widget_browser.h
)
+9 -9
View File
@@ -22,7 +22,7 @@
#include "io/file.h"
#include "io/code.h"
#include "widgets/widget_browser.h"
#include "widgets/custom_widgets.h"
#include "widgets/Formula_Input.h"
#include <FL/Fl_Grid.H>
#include <FL/Fl_Value_Input.H>
@@ -777,11 +777,11 @@ void Fl_Grid_Type::layout_widget() {
// TODO: ways to resize rows and columns, add and delete them in the project window, pulldown menu?
// TODO: alignment can be FL_GRID_LEFT|FL_GRID_VERTICAL?
extern Fluid_Coord_Input *widget_grid_row_input, *widget_grid_col_input,
extern fld::widget::Formula_Input *widget_grid_row_input, *widget_grid_col_input,
*widget_grid_rowspan_input, *widget_grid_colspan_input;
extern Fl_Group *widget_tab_grid_child;
void grid_child_cb(Fluid_Coord_Input* i, void* v, int what) {
void grid_child_cb(fld::widget::Formula_Input* i, void* v, int what) {
if ( !current_widget
|| !current_widget->parent
|| !current_widget->parent->is_a(ID_Grid))
@@ -850,7 +850,7 @@ void grid_child_cb(Fluid_Coord_Input* i, void* v, int what) {
}
}
}
void grid_set_row_cb(Fluid_Coord_Input* i, void* v) {
void grid_set_row_cb(fld::widget::Formula_Input* i, void* v) {
grid_child_cb(i, v, 8);
if (v!=LOAD) widget_tab_grid_child->do_callback(widget_tab_grid_child, LOAD);
}
@@ -866,7 +866,7 @@ void grid_inc_row_cb(Fl_Button* i, void* v) {
widget_tab_grid_child->do_callback(widget_tab_grid_child, LOAD);
}
}
void grid_set_col_cb(Fluid_Coord_Input* i, void* v) {
void grid_set_col_cb(fld::widget::Formula_Input* i, void* v) {
grid_child_cb(i, v, 9);
if (v!=LOAD) widget_tab_grid_child->do_callback(widget_tab_grid_child, LOAD);
}
@@ -882,7 +882,7 @@ void grid_inc_col_cb(Fl_Button* i, void* v) {
widget_tab_grid_child->do_callback(widget_tab_grid_child, LOAD);
}
}
void grid_set_rowspan_cb(Fluid_Coord_Input* i, void* v) {
void grid_set_rowspan_cb(fld::widget::Formula_Input* i, void* v) {
grid_child_cb(i, v, 10);
if (v!=LOAD) widget_tab_grid_child->do_callback(widget_tab_grid_child, LOAD);
}
@@ -898,7 +898,7 @@ void grid_inc_rowspan_cb(Fl_Button* i, void* v) {
widget_tab_grid_child->do_callback(widget_tab_grid_child, LOAD);
}
}
void grid_set_colspan_cb(Fluid_Coord_Input* i, void* v) {
void grid_set_colspan_cb(fld::widget::Formula_Input* i, void* v) {
grid_child_cb(i, v, 11);
if (v!=LOAD) widget_tab_grid_child->do_callback(widget_tab_grid_child, LOAD);
}
@@ -914,10 +914,10 @@ void grid_inc_colspan_cb(Fl_Button* i, void* v) {
widget_tab_grid_child->do_callback(widget_tab_grid_child, LOAD);
}
}
void grid_set_min_wdt_cb(Fluid_Coord_Input* i, void* v) {
void grid_set_min_wdt_cb(fld::widget::Formula_Input* i, void* v) {
grid_child_cb(i, v, 12);
}
void grid_set_min_hgt_cb(Fluid_Coord_Input* i, void* v) {
void grid_set_min_hgt_cb(fld::widget::Formula_Input* i, void* v) {
grid_child_cb(i, v, 13);
}
+1 -1
View File
@@ -29,7 +29,7 @@
#include "io/file.h"
#include "io/code.h"
#include "nodes/Fl_Window_Type.h"
#include "widgets/custom_widgets.h"
#include "widgets/Formula_Input.h"
#include "widgets/widget_browser.h"
#include <FL/Fl.H>
+24 -24
View File
@@ -627,92 +627,92 @@ void tooltip_cb(Fl_Input* i, void *v) {
}
}
Fluid_Coord_Input *x_input, *y_input, *w_input, *h_input;
fld::widget::Formula_Input *x_input, *y_input, *w_input, *h_input;
static int widget_i = 0;
static int vars_i_cb(const Fluid_Coord_Input*, void *v) {
static int vars_i_cb(const fld::widget::Formula_Input*, void *v) {
return widget_i;
}
static int vars_x_cb(const Fluid_Coord_Input*, void *v) {
static int vars_x_cb(const fld::widget::Formula_Input*, void *v) {
Fl_Type *t = (Fl_Type*)v;
if (t->is_widget())
return ((Fl_Widget_Type*)t)->o->x();
return 0;
}
static int vars_y_cb(const Fluid_Coord_Input*, void *v) {
static int vars_y_cb(const fld::widget::Formula_Input*, void *v) {
Fl_Type *t = (Fl_Type*)v;
if (t->is_widget())
return ((Fl_Widget_Type*)t)->o->y();
return 0;
}
static int vars_w_cb(const Fluid_Coord_Input*, void *v) {
static int vars_w_cb(const fld::widget::Formula_Input*, void *v) {
Fl_Type *t = (Fl_Type*)v;
if (t->is_widget())
return ((Fl_Widget_Type*)t)->o->w();
return 0;
}
static int vars_h_cb(const Fluid_Coord_Input*, void *v) {
static int vars_h_cb(const fld::widget::Formula_Input*, void *v) {
Fl_Type *t = (Fl_Type*)v;
if (t->is_widget())
return ((Fl_Widget_Type*)t)->o->h();
return 0;
}
static int vars_px_cb(const Fluid_Coord_Input*, void *v) {
static int vars_px_cb(const fld::widget::Formula_Input*, void *v) {
Fl_Type *t = ((Fl_Type*)v)->parent;
if (t && t->is_widget())
return ((Fl_Widget_Type*)t)->o->x();
return 0;
}
static int vars_py_cb(const Fluid_Coord_Input*, void *v) {
static int vars_py_cb(const fld::widget::Formula_Input*, void *v) {
Fl_Type *t = ((Fl_Type*)v)->parent;
if (t && t->is_widget())
return ((Fl_Widget_Type*)t)->o->y();
return 0;
}
static int vars_pw_cb(const Fluid_Coord_Input*, void *v) {
static int vars_pw_cb(const fld::widget::Formula_Input*, void *v) {
Fl_Type *t = ((Fl_Type*)v)->parent;
if (t && t->is_widget())
return ((Fl_Widget_Type*)t)->o->w();
return 0;
}
static int vars_ph_cb(const Fluid_Coord_Input*, void *v) {
static int vars_ph_cb(const fld::widget::Formula_Input*, void *v) {
Fl_Type *t = ((Fl_Type*)v)->parent;
if (t && t->is_widget())
return ((Fl_Widget_Type*)t)->o->h();
return 0;
}
static int vars_sx_cb(const Fluid_Coord_Input*, void *v) {
static int vars_sx_cb(const fld::widget::Formula_Input*, void *v) {
Fl_Type *t = ((Fl_Type*)v)->prev_sibling();
if (t && t->is_widget())
return ((Fl_Widget_Type*)t)->o->x();
return 0;
}
static int vars_sy_cb(const Fluid_Coord_Input*, void *v) {
static int vars_sy_cb(const fld::widget::Formula_Input*, void *v) {
Fl_Type *t = ((Fl_Type*)v)->prev_sibling();
if (t && t->is_widget())
return ((Fl_Widget_Type*)t)->o->y();
return 0;
}
static int vars_sw_cb(const Fluid_Coord_Input*, void *v) {
static int vars_sw_cb(const fld::widget::Formula_Input*, void *v) {
Fl_Type *t = ((Fl_Type*)v)->prev_sibling();
if (t && t->is_widget())
return ((Fl_Widget_Type*)t)->o->w();
return 0;
}
static int vars_sh_cb(const Fluid_Coord_Input*, void *v) {
static int vars_sh_cb(const fld::widget::Formula_Input*, void *v) {
Fl_Type *t = ((Fl_Type*)v)->prev_sibling();
if (t && t->is_widget())
return ((Fl_Widget_Type*)t)->o->h();
@@ -743,27 +743,27 @@ static void calculate_bbox(Fl_Type *p) {
}
}
static int vars_cx_cb(const Fluid_Coord_Input*, void *v) {
static int vars_cx_cb(const fld::widget::Formula_Input*, void *v) {
calculate_bbox((Fl_Type*)v);
return bbox_x;
}
static int vars_cy_cb(const Fluid_Coord_Input*, void *v) {
static int vars_cy_cb(const fld::widget::Formula_Input*, void *v) {
calculate_bbox((Fl_Type*)v);
return bbox_y;
}
static int vars_cw_cb(const Fluid_Coord_Input*, void *v) {
static int vars_cw_cb(const fld::widget::Formula_Input*, void *v) {
calculate_bbox((Fl_Type*)v);
return bbox_r - bbox_x;
}
static int vars_ch_cb(const Fluid_Coord_Input*, void *v) {
static int vars_ch_cb(const fld::widget::Formula_Input*, void *v) {
calculate_bbox((Fl_Type*)v);
return bbox_b - bbox_y;
}
Fluid_Coord_Input_Vars widget_vars[] = {
fld::widget::Formula_Input_Vars widget_vars[] = {
{ "i", vars_i_cb }, // zero based counter of selected widgets
{ "x", vars_x_cb }, // position and size of current widget
{ "y", vars_y_cb },
@@ -784,7 +784,7 @@ Fluid_Coord_Input_Vars widget_vars[] = {
{ 0 }
};
void x_cb(Fluid_Coord_Input *i, void *v) {
void x_cb(fld::widget::Formula_Input *i, void *v) {
if (v == LOAD) {
x_input = i;
if (current_widget->is_true_widget()) {
@@ -815,7 +815,7 @@ void x_cb(Fluid_Coord_Input *i, void *v) {
}
}
void y_cb(Fluid_Coord_Input *i, void *v) {
void y_cb(fld::widget::Formula_Input *i, void *v) {
if (v == LOAD) {
y_input = i;
if (current_widget->is_true_widget()) {
@@ -845,7 +845,7 @@ void y_cb(Fluid_Coord_Input *i, void *v) {
}
}
void w_cb(Fluid_Coord_Input *i, void *v) {
void w_cb(fld::widget::Formula_Input *i, void *v) {
if (v == LOAD) {
w_input = i;
if (current_widget->is_true_widget()) {
@@ -875,7 +875,7 @@ void w_cb(Fluid_Coord_Input *i, void *v) {
}
}
void h_cb(Fluid_Coord_Input *i, void *v) {
void h_cb(fld::widget::Formula_Input *i, void *v) {
if (v == LOAD) {
h_input = i;
if (current_widget->is_true_widget()) {
@@ -1739,7 +1739,7 @@ void align_text_image_cb(Fl_Choice *i, void *v) {
////////////////////////////////////////////////////////////////
void callback_cb(CodeEditor* i, void *v) {
void callback_cb(fld::widget::Code_Editor* i, void *v) {
if (v == LOAD) {
const char *cbtext = current_widget->callback();
i->buffer()->text( cbtext ? cbtext : "" );
+12 -12
View File
@@ -265,13 +265,13 @@ Fl_Tabs *cv_tab=(Fl_Tabs *)0;
Fl_Group *cv_source_tab=(Fl_Group *)0;
CodeViewer *cv_source=(CodeViewer *)0;
fld::widget::Code_Viewer *cv_source=(fld::widget::Code_Viewer *)0;
CodeViewer *cv_header=(CodeViewer *)0;
fld::widget::Code_Viewer *cv_header=(fld::widget::Code_Viewer *)0;
TextViewer *cv_strings=(TextViewer *)0;
fld::widget::Text_Viewer *cv_strings=(fld::widget::Text_Viewer *)0;
TextViewer *cv_project=(TextViewer *)0;
fld::widget::Text_Viewer *cv_project=(fld::widget::Text_Viewer *)0;
Fl_Group *cv_find_row=(Fl_Group *)0;
@@ -400,7 +400,7 @@ Fl_Double_Window* make_codeview() {
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);
{ fld::widget::Code_Viewer* o = cv_source = new fld::widget::Code_Viewer(10, 40, 500, 410);
cv_source->box(FL_DOWN_FRAME);
cv_source->color(FL_BACKGROUND2_COLOR);
cv_source->selection_color(FL_SELECTION_COLOR);
@@ -415,14 +415,14 @@ Fl_Double_Window* make_codeview() {
Fl_Group::current()->resizable(cv_source);
o->linenumber_width(60);
o->linenumber_size(o->Fl_Text_Display::textsize());
} // CodeViewer* cv_source
} // fld::widget::Code_Viewer* 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);
{ fld::widget::Code_Viewer* o = cv_header = new fld::widget::Code_Viewer(10, 40, 500, 410);
cv_header->box(FL_DOWN_FRAME);
cv_header->color(FL_BACKGROUND2_COLOR);
cv_header->selection_color(FL_SELECTION_COLOR);
@@ -437,13 +437,13 @@ Fl_Double_Window* make_codeview() {
Fl_Group::current()->resizable(cv_header);
o->linenumber_width(60);
o->linenumber_size(o->Fl_Text_Display::textsize());
} // CodeViewer* cv_header
} // fld::widget::Code_Viewer* 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);
{ fld::widget::Text_Viewer* o = cv_strings = new fld::widget::Text_Viewer(10, 40, 500, 410);
cv_strings->box(FL_DOWN_FRAME);
cv_strings->color(FL_BACKGROUND2_COLOR);
cv_strings->selection_color(FL_SELECTION_COLOR);
@@ -458,13 +458,13 @@ Fl_Double_Window* make_codeview() {
Fl_Group::current()->resizable(cv_strings);
o->linenumber_width(60);
o->linenumber_size(o->Fl_Text_Display::textsize());
} // TextViewer* cv_strings
} // fld::widget::Text_Viewer* 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);
{ fld::widget::Text_Viewer* o = cv_project = new fld::widget::Text_Viewer(10, 40, 500, 410);
cv_project->box(FL_DOWN_FRAME);
cv_project->color(FL_BACKGROUND2_COLOR);
cv_project->selection_color(FL_SELECTION_COLOR);
@@ -479,7 +479,7 @@ Fl_Double_Window* make_codeview() {
Fl_Group::current()->resizable(cv_project);
o->linenumber_width(60);
o->linenumber_size(o->Fl_Text_Display::textsize());
} // TextViewer* cv_project
} // fld::widget::Text_Viewer* cv_project
o->end();
} // Fl_Group* o
cv_tab->end();
+8 -6
View File
@@ -296,10 +296,10 @@ Function {make_codeview()} {open
} {
Fl_Text_Editor cv_source {
xywh {10 40 500 410} textfont 4 textsize 11 resizable
code0 {\#include "widgets/CodeEditor.h"}
code0 {\#include "widgets/Code_Viewer.h"}
code1 {o->linenumber_width(60);}
code2 {o->linenumber_size(o->Fl_Text_Display::textsize());}
class CodeViewer
class {fld::widget::Code_Viewer}
}
}
Fl_Group {} {
@@ -308,10 +308,10 @@ Function {make_codeview()} {open
} {
Fl_Text_Editor cv_header {
xywh {10 40 500 410} textfont 4 textsize 11 resizable
code0 {\#include "widgets/CodeEditor.h"}
code0 {\#include "widgets/Code_Viewer.h"}
code1 {o->linenumber_width(60);}
code2 {o->linenumber_size(o->Fl_Text_Display::textsize());}
class CodeViewer
class {fld::widget::Code_Viewer}
}
}
Fl_Group {} {
@@ -320,9 +320,10 @@ Function {make_codeview()} {open
} {
Fl_Text_Display cv_strings {
xywh {10 40 500 410} textfont 4 textsize 11 resizable
code0 {\#include "widgets/Text_Viewer.h"}
code1 {o->linenumber_width(60);}
code2 {o->linenumber_size(o->Fl_Text_Display::textsize());}
class TextViewer
class {fld::widget::Text_Viewer}
}
}
Fl_Group {} {
@@ -331,9 +332,10 @@ Function {make_codeview()} {open
} {
Fl_Text_Display cv_project {
xywh {10 40 500 410} textfont 4 textsize 11 resizable
code0 {\#include "widgets/Text_Viewer.h"}
code1 {o->linenumber_width(60);}
code2 {o->linenumber_size(o->Fl_Text_Display::textsize());}
class TextViewer
class {fld::widget::Text_Viewer}
}
}
}
+6 -5
View File
@@ -33,11 +33,12 @@ extern Fl_Double_Window *codeview_panel;
extern Fl_Tabs *cv_tab;
#include <FL/Fl_Group.H>
extern Fl_Group *cv_source_tab;
#include "widgets/CodeEditor.h"
extern CodeViewer *cv_source;
extern CodeViewer *cv_header;
extern TextViewer *cv_strings;
extern TextViewer *cv_project;
#include "widgets/Code_Viewer.h"
extern fld::widget::Code_Viewer *cv_source;
extern fld::widget::Code_Viewer *cv_header;
#include "widgets/Text_Viewer.h"
extern fld::widget::Text_Viewer *cv_strings;
extern fld::widget::Text_Viewer *cv_project;
extern Fl_Group *cv_find_row;
#include <FL/Fl_Button.H>
extern Fl_Button *cv_find_text_case;
File diff suppressed because it is too large Load Diff
+56 -56
View File
@@ -28,7 +28,7 @@ comment {//
decl {\#include "app/fluid.h"} {private local
}
decl {\#include "app/undo.h"} {selected private local
decl {\#include "app/undo.h"} {private local
}
decl {\#include "nodes/Fl_Type.h"} {private local
@@ -40,7 +40,7 @@ decl {\#include "nodes/factory.h"} {private local
decl {\#include "rsrcs/pixmaps.h"} {private local
}
decl {\#include "widgets/custom_widgets.h"} {private global
decl {\#include "widgets/Bin_Button.h"} {private global
}
decl {\#include "widgets/widget_browser.h"} {private local
@@ -152,8 +152,8 @@ code_panel->hide(); // otherwise hide..}
Fl_Text_Editor code_input {
xywh {10 10 520 130} box DOWN_BOX labelsize 11 textfont 4 textsize 11 resizable
code0 {o->when(FL_WHEN_ENTER_KEY_CHANGED|FL_WHEN_RELEASE);}
code1 {\#include "widgets/CodeEditor.h"}
class CodeEditor
code1 {\#include "widgets/Code_Editor.h"}
class {fld::widget::Code_Editor}
}
Fl_Group {} {open
xywh {10 150 520 20} labelsize 11
@@ -343,8 +343,8 @@ Function {make_decl_panel()} {open
Fl_Text_Editor decl_input {
label {This can be any declaration, like "int x;", an external symbol like "extern int foo();", a \#directive like "\#include <foo.h>", a comment like "//foo" or "/*foo*/", or typedef like "typedef char byte;" or "using std::list;".}
xywh {10 40 320 45} labelsize 11 align 134 resizable
code0 {\#include "widgets/CodeEditor.h"}
class CodeEditor
code0 {\#include "widgets/Code_Editor.h"}
class {fld::widget::Code_Editor}
}
Fl_Box {} {
xywh {20 139 300 1} box BORDER_FRAME color 43
@@ -643,7 +643,7 @@ else
callback type_make_cb
tooltip {Widget Class} xywh {55 46 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_Widget_Class]);}
class Widget_Bin_Window_Button
class {fld::widget::Bin_Window_Button}
}
Fl_Button {} {
user_data {"decl"}
@@ -673,63 +673,63 @@ else
callback type_make_cb
tooltip Window xywh {89 21 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_Window]);}
class Widget_Bin_Window_Button
class {fld::widget::Bin_Window_Button}
}
Fl_Button {} {
user_data {"Fl_Group"}
callback type_make_cb
callback type_make_cb selected
tooltip Group xywh {114 21 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_Group]);}
class Widget_Bin_Button
class {fld::widget::Bin_Button}
}
Fl_Button {} {
user_data {"Fl_Pack"}
callback type_make_cb
tooltip Pack xywh {139 21 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_Pack]);}
class Widget_Bin_Button
class {fld::widget::Bin_Button}
}
Fl_Button {} {
user_data {"Fl_Tabs"}
callback type_make_cb
tooltip Tabs xywh {89 46 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_Tabs]);}
class Widget_Bin_Button
class {fld::widget::Bin_Button}
}
Fl_Button {} {
user_data {"Fl_Scroll"}
callback type_make_cb
tooltip Scroll xywh {114 46 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_Scroll]);}
class Widget_Bin_Button
class {fld::widget::Bin_Button}
}
Fl_Button {} {
user_data {"Fl_Flex"}
callback type_make_cb
tooltip Flex xywh {139 46 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_Flex]);}
class Widget_Bin_Button
class {fld::widget::Bin_Button}
}
Fl_Button {} {
user_data {"Fl_Tile"}
callback type_make_cb
tooltip Tile xywh {89 71 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_Tile]);}
class Widget_Bin_Button
class {fld::widget::Bin_Button}
}
Fl_Button {} {
user_data {"Fl_Wizard"}
callback type_make_cb
tooltip Wizard xywh {114 71 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_Wizard]);}
class Widget_Bin_Button
class {fld::widget::Bin_Button}
}
Fl_Button {} {
user_data {"Fl_Grid"}
callback type_make_cb
tooltip Grid xywh {139 71 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_Grid]);}
class Widget_Bin_Button
class {fld::widget::Bin_Button}
}
}
Fl_Group {} {
@@ -741,42 +741,42 @@ else
callback type_make_cb
tooltip Button xywh {173 21 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_Button]);}
class Widget_Bin_Button
class {fld::widget::Bin_Button}
}
Fl_Button {} {
user_data {"Fl_Return_Button"}
callback type_make_cb
tooltip {Return Button} xywh {198 21 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_Return_Button]);}
class Widget_Bin_Button
class {fld::widget::Bin_Button}
}
Fl_Button {} {
user_data {"Fl_Light_Button"}
callback type_make_cb
tooltip {Light Button} xywh {173 46 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_Light_Button]);}
class Widget_Bin_Button
class {fld::widget::Bin_Button}
}
Fl_Button {} {
user_data {"Fl_Repeat_Button"}
callback type_make_cb
tooltip {Repeat Button} xywh {198 46 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_Repeat_Button]);}
class Widget_Bin_Button
class {fld::widget::Bin_Button}
}
Fl_Button {} {
user_data {"Fl_Check_Button"}
callback type_make_cb
tooltip {Check Button} xywh {173 71 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_Check_Button]);}
class Widget_Bin_Button
class {fld::widget::Bin_Button}
}
Fl_Button {} {
user_data {"Fl_Round_Button"}
callback type_make_cb
tooltip {Round Button} xywh {198 71 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_Round_Button]);}
class Widget_Bin_Button
class {fld::widget::Bin_Button}
}
}
Fl_Group {} {
@@ -788,70 +788,70 @@ else
callback type_make_cb
tooltip Slider xywh {232 21 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_Slider]);}
class Widget_Bin_Button
class {fld::widget::Bin_Button}
}
Fl_Button {} {
user_data {"Fl_Scrollbar"}
callback type_make_cb
tooltip {Scroll Bar} xywh {257 21 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_Scrollbar]);}
class Widget_Bin_Button
class {fld::widget::Bin_Button}
}
Fl_Button {} {
user_data {"Fl_Value_Slider"}
callback type_make_cb
tooltip {Value Slider} xywh {282 21 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_Value_Slider]);}
class Widget_Bin_Button
class {fld::widget::Bin_Button}
}
Fl_Button {} {
user_data {"Fl_Value_Output"}
callback type_make_cb
tooltip {Value Output} xywh {307 21 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_Value_Output]);}
class Widget_Bin_Button
class {fld::widget::Bin_Button}
}
Fl_Button {} {
user_data {"Fl_Adjuster"}
callback type_make_cb
tooltip Adjuster xywh {232 46 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_Adjuster]);}
class Widget_Bin_Button
class {fld::widget::Bin_Button}
}
Fl_Button {} {
user_data {"Fl_Counter"}
callback type_make_cb
tooltip Counter xywh {257 46 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_Counter]);}
class Widget_Bin_Button
class {fld::widget::Bin_Button}
}
Fl_Button {} {
user_data {"Fl_Dial"}
callback type_make_cb
tooltip Dial xywh {282 46 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_Dial]);}
class Widget_Bin_Button
class {fld::widget::Bin_Button}
}
Fl_Button {} {
user_data {"Fl_Roller"}
callback type_make_cb
tooltip Roller xywh {232 71 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_Roller]);}
class Widget_Bin_Button
class {fld::widget::Bin_Button}
}
Fl_Button {} {
user_data {"Fl_Spinner"}
callback type_make_cb
tooltip Spinner xywh {257 71 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_Spinner]);}
class Widget_Bin_Button
class {fld::widget::Bin_Button}
}
Fl_Button {} {
user_data {"Fl_Value_Input"}
callback type_make_cb
tooltip {Value Input} xywh {282 71 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_Value_Input]);}
class Widget_Bin_Button
class {fld::widget::Bin_Button}
}
}
Fl_Group {} {
@@ -863,42 +863,42 @@ else
callback type_make_cb
tooltip Input xywh {341 21 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_Input]);}
class Widget_Bin_Button
class {fld::widget::Bin_Button}
}
Fl_Button {} {
user_data {"Fl_Output"}
callback type_make_cb
tooltip Output xywh {366 21 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_Output]);}
class Widget_Bin_Button
class {fld::widget::Bin_Button}
}
Fl_Button {} {
user_data {"Fl_Text_Editor"}
callback type_make_cb
tooltip {Text Edit} xywh {341 46 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_Text_Editor]);}
class Widget_Bin_Button
class {fld::widget::Bin_Button}
}
Fl_Button {} {
user_data {"Fl_Text_Display"}
callback type_make_cb
tooltip {Text Display} xywh {366 46 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_Text_Display]);}
class Widget_Bin_Button
class {fld::widget::Bin_Button}
}
Fl_Button {} {
user_data {"Fl_File_Input"}
callback type_make_cb
tooltip {File Input} xywh {341 71 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_File_Input]);}
class Widget_Bin_Button
class {fld::widget::Bin_Button}
}
Fl_Button {} {
user_data {"Fl_Terminal"}
callback type_make_cb
tooltip Terminal xywh {366 71 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_Terminal]);}
class Widget_Bin_Button
class {fld::widget::Bin_Button}
}
}
Fl_Group {} {
@@ -910,56 +910,56 @@ else
callback type_make_cb
tooltip {Input Choice} xywh {400 22 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_Input_Choice]);}
class Widget_Bin_Button
class {fld::widget::Bin_Button}
}
Fl_Button {} {
user_data {"menuitem"}
callback type_make_cb
tooltip {Menu Item} xywh {425 21 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_Menu_Item]);}
class Widget_Bin_Button
class {fld::widget::Bin_Button}
}
Fl_Button {} {
user_data {"Fl_Menu_Bar"}
callback type_make_cb
tooltip {Menu Bar} xywh {450 21 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_Menu_Bar]);}
class Widget_Bin_Button
class {fld::widget::Bin_Button}
}
Fl_Button {} {
user_data {"Fl_Menu_Button"}
callback type_make_cb
tooltip {Menu Button} xywh {400 46 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_Menu_Button]);}
class Widget_Bin_Button
class {fld::widget::Bin_Button}
}
Fl_Button {} {
user_data {"checkmenuitem"}
callback type_make_cb
tooltip {Checkbox Menu Item} xywh {425 46 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_Checkbox_Menu_Item]);}
class Widget_Bin_Button
class {fld::widget::Bin_Button}
}
Fl_Button {} {
user_data {"submenu"}
callback type_make_cb
tooltip {Sub Menu} xywh {450 46 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_Submenu]);}
class Widget_Bin_Button
class {fld::widget::Bin_Button}
}
Fl_Button {} {
user_data {"Fl_Choice"}
callback type_make_cb
tooltip Choice xywh {400 71 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_Choice]);}
class Widget_Bin_Button
class {fld::widget::Bin_Button}
}
Fl_Button {} {
user_data {"radiomenuitem"}
callback type_make_cb
tooltip {Radio Menu Item} xywh {425 71 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_Radio_Menu_Item]);}
class Widget_Bin_Button
class {fld::widget::Bin_Button}
}
}
Fl_Group {} {
@@ -971,42 +971,42 @@ else
callback type_make_cb
tooltip Browser xywh {484 21 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_Browser]);}
class Widget_Bin_Button
class {fld::widget::Bin_Button}
}
Fl_Button {} {
user_data {"Fl_Tree"}
callback type_make_cb
tooltip Tree xywh {509 21 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_Tree]);}
class Widget_Bin_Button
class {fld::widget::Bin_Button}
}
Fl_Button {} {
user_data {"Fl_Check_Browser"}
callback type_make_cb
tooltip {Check Browser} xywh {484 46 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_Check_Browser]);}
class Widget_Bin_Button
class {fld::widget::Bin_Button}
}
Fl_Button {} {
user_data {"Fl_Help_View"}
callback type_make_cb
tooltip {Help Browser} xywh {509 46 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_Help_View]);}
class Widget_Bin_Button
class {fld::widget::Bin_Button}
}
Fl_Button {} {
user_data {"Fl_File_Browser"}
callback type_make_cb
tooltip {File Browser} xywh {484 71 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_File_Browser]);}
class Widget_Bin_Button
class {fld::widget::Bin_Button}
}
Fl_Button {} {
user_data {"Fl_Table"}
callback type_make_cb
tooltip Table xywh {509 71 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_Table]);}
class Widget_Bin_Button
class {fld::widget::Bin_Button}
}
}
Fl_Group {} {
@@ -1018,21 +1018,21 @@ else
callback type_make_cb
tooltip Box xywh {542 21 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_Box]);}
class Widget_Bin_Button
class {fld::widget::Bin_Button}
}
Fl_Button {} {
user_data {"Fl_Clock"}
callback type_make_cb
tooltip Clock xywh {567 21 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_Clock]);}
class Widget_Bin_Button
class {fld::widget::Bin_Button}
}
Fl_Button {} {
user_data {"Fl_Progress"}
callback type_make_cb
tooltip Progress xywh {542 46 24 24} box THIN_UP_BOX
code0 {o->image(pixmap[ID_Progress]);}
class Widget_Bin_Button
class {fld::widget::Bin_Button}
}
}
}
+3 -3
View File
@@ -41,8 +41,8 @@ Fl_Double_Window* make_function_panel();
extern Fl_Menu_Item menu_f_public_member_choice[];
extern Fl_Menu_Item menu_f_public_choice[];
extern Fl_Double_Window *code_panel;
#include "widgets/CodeEditor.h"
extern CodeEditor *code_input;
#include "widgets/Code_Editor.h"
extern fld::widget::Code_Editor *code_input;
extern Fl_Return_Button *code_panel_ok;
extern Fl_Button *code_panel_cancel;
Fl_Double_Window* make_code_panel();
@@ -68,7 +68,7 @@ extern Fl_Double_Window *decl_panel;
extern Fl_Choice *decl_choice;
extern Fl_Choice *decl_class_choice;
#include <FL/Fl_Tile.H>
extern CodeEditor *decl_input;
extern fld::widget::Code_Editor *decl_input;
extern Fl_Text_Editor *decl_comment_input;
extern Fl_Return_Button *decl_panel_ok;
extern Fl_Button *decl_panel_cancel;
+19 -19
View File
@@ -219,25 +219,25 @@ void template_delete_cb(Fl_Button *, void *) {
static int tmpl_FLTK_License_fl_size = 614;
static unsigned char tmpl_FLTK_License_fl[397] = /* data compressed and inlined from ../templates/FLTK_License.fl */
{120,156,133,82,77,79,27,49,16,189,239,175,120,162,23,144,202,110,130,56,20,
78,208,80,170,8,148,34,17,14,61,33,239,122,118,61,194,177,87,246,44,75,26,229,
191,215,94,18,245,88,159,236,241,251,154,177,191,64,43,81,104,217,18,90,31,32,
134,112,111,229,13,47,145,2,150,78,40,180,170,33,220,81,228,206,165,210,105,107,
7,214,103,197,59,133,200,222,97,94,206,46,103,243,194,144,210,20,94,157,218,
16,118,165,217,23,141,215,116,60,54,31,31,185,176,217,144,19,236,170,170,168,
42,220,44,87,207,235,219,213,226,199,205,63,95,21,5,143,220,25,193,218,123,139,
7,22,156,222,63,174,31,206,202,226,147,180,240,253,54,76,128,249,213,213,183,
243,139,217,197,37,234,45,190,179,181,120,238,89,254,168,55,40,167,225,147,92,
136,71,214,218,112,132,229,58,168,176,69,218,182,129,8,209,183,50,170,64,37,238,
56,74,224,122,144,220,78,102,15,145,48,185,68,36,0,252,32,150,29,105,176,203,
106,57,233,52,174,147,197,175,167,223,203,213,207,19,140,134,27,131,104,252,96,
53,140,122,39,212,68,46,225,27,59,232,68,28,89,76,226,101,235,68,44,129,101,59,
29,179,220,36,149,110,54,28,35,187,14,105,22,90,109,84,71,250,43,98,202,153,
237,44,55,228,82,40,37,215,135,150,242,50,34,125,188,174,170,113,28,203,54,61,
89,233,67,87,29,50,149,189,233,15,208,39,75,42,113,143,90,173,183,214,143,217,
169,79,38,72,45,27,63,66,60,2,245,62,8,234,161,139,211,20,82,158,129,226,127,13,
51,254,232,182,199,142,221,107,244,67,72,63,38,237,62,63,69,177,47,254,2,228,
190,201,192};
{120,156,133,82,77,79,27,49,16,189,239,175,120,130,11,72,237,110,130,90,169,
112,130,134,82,69,160,20,137,244,208,19,242,174,103,215,35,28,123,101,123,89,
210,40,255,157,241,146,168,199,250,100,143,223,215,140,125,10,173,146,66,203,
150,208,250,128,100,8,119,54,189,224,119,164,128,165,75,20,90,213,16,110,41,114,
231,164,116,214,218,129,245,121,241,74,33,178,119,152,151,179,47,179,121,97,72,
105,10,207,78,109,8,187,210,236,139,198,107,58,30,155,183,183,92,216,108,200,37,
236,170,170,168,42,92,47,87,79,235,155,213,226,199,245,63,95,21,19,30,184,51,9,
107,239,45,238,57,225,236,238,97,125,127,94,22,31,164,133,239,183,97,2,204,47,
47,191,125,190,152,93,124,69,189,197,119,182,22,79,61,167,191,234,5,202,105,
120,145,11,241,200,90,27,142,176,92,7,21,182,144,109,27,136,16,125,155,70,21,
168,196,45,199,20,184,30,82,110,39,179,135,72,152,92,34,4,0,63,36,203,142,52,
216,101,181,156,116,26,215,201,226,215,227,159,229,234,231,9,70,195,141,65,52,
126,176,26,70,189,18,106,34,39,248,198,14,90,136,35,39,35,188,108,45,196,18,88,
182,211,49,203,77,82,114,179,225,24,217,117,144,89,104,181,81,29,233,79,136,146,
51,219,89,110,200,73,40,149,174,14,45,229,101,82,234,227,85,85,141,227,88,182,
242,100,165,15,93,117,200,84,246,166,63,64,31,45,41,225,30,181,90,111,173,31,
179,83,47,38,144,150,141,31,145,60,2,245,62,36,212,67,23,167,41,72,158,129,226,
127,13,51,254,232,182,199,142,221,115,244,67,144,31,35,187,143,79,81,236,139,
119,230,100,201,193};
static int tmpl_1of7GUIs_fl_size = 763;
static unsigned char tmpl_1of7GUIs_fl[486] = /* data compressed and inlined from ../templates/1of7GUIs.fl */
File diff suppressed because it is too large Load Diff
+27 -27
View File
@@ -34,7 +34,7 @@ decl {\#include "nodes/Fl_Widget_Type.h"} {private global
decl {\#include "nodes/Fl_Grid_Type.h"} {private global
}
decl {\#include "widgets/custom_widgets.h"} {selected public global
decl {\#include "widgets/Formula_Input.h"} {selected public global
}
decl {\#include <FL/Fl_Grid.H>} {private global
@@ -112,7 +112,7 @@ Function {make_image_panel()} {
if (mod) set_modflag(1);
}}
tooltip {Scale image to this width in pixel units} xywh {75 75 55 20} labelsize 11 align 5 textsize 11
class Fluid_Coord_Input
class {fld::widget::Formula_Input}
}
Fl_Input image_panel_imageh {
label {Height:}
@@ -142,7 +142,7 @@ Function {make_image_panel()} {
if (mod) set_modflag(1);
}}
tooltip {Scale image to this height in pixel units} xywh {135 75 55 20} labelsize 11 align 5 textsize 11
class Fluid_Coord_Input
class {fld::widget::Formula_Input}
}
Fl_Button {} {
label Reset
@@ -234,7 +234,7 @@ Function {make_image_panel()} {
if (mod) set_modflag(1);
}}
tooltip {Scale image to this width in pixel units} xywh {75 215 55 20} labelsize 11 align 5 textsize 11
class Fluid_Coord_Input
class {fld::widget::Formula_Input}
}
Fl_Input image_panel_deimageh {
label {Height:}
@@ -264,7 +264,7 @@ Function {make_image_panel()} {
if (mod) set_modflag(1);
}}
tooltip {Scale image to this height in pixel units} xywh {135 215 55 20} labelsize 11 align 5 textsize 11
class Fluid_Coord_Input
class {fld::widget::Formula_Input}
}
Fl_Button {} {
label Reset
@@ -577,7 +577,7 @@ Use Ctrl-J for newlines.} xywh {95 40 190 20} labelfont 1 labelsize 11 when 15 t
tooltip {The X position of the widget as a number or formula.
Formulas can be simple math, including the variables
x, px, sx, cx, and i} xywh {95 150 55 20} labelsize 11 align 5 textsize 11
class Fluid_Coord_Input
class {fld::widget::Formula_Input}
}
Fl_Input widget_y_input {
label {Y:}
@@ -585,7 +585,7 @@ x, px, sx, cx, and i} xywh {95 150 55 20} labelsize 11 align 5 textsize 11
tooltip {The Y position of the widget as a number or formula.
Formulas can be simple math, including the variables
y, py, sy, cy, and i} xywh {155 150 55 20} labelsize 11 align 5 textsize 11
class Fluid_Coord_Input
class {fld::widget::Formula_Input}
}
Fl_Input widget_w_input {
label {Width:}
@@ -593,7 +593,7 @@ y, py, sy, cy, and i} xywh {155 150 55 20} labelsize 11 align 5 textsize 11
tooltip {The width of the widget as a number or formula.
Formulas can be simple math, including the variables
w, pw, sw, cw, and i} xywh {215 150 55 20} labelsize 11 align 5 textsize 11
class Fluid_Coord_Input
class {fld::widget::Formula_Input}
}
Fl_Input widget_h_input {
label {Height:}
@@ -601,7 +601,7 @@ w, pw, sw, cw, and i} xywh {215 150 55 20} labelsize 11 align 5 textsize 11
tooltip {The height of the widget as a number or formula.
Formulas can be simple math, including the variables
h, ph, sh, ch, and i} xywh {275 150 55 20} labelsize 11 align 5 textsize 11
class Fluid_Coord_Input
class {fld::widget::Formula_Input}
}
Fl_Choice {} {
label {Children:}
@@ -1076,8 +1076,8 @@ wCallback->do_callback(wCallback, v);} open
label {Callback:}
callback callback_cb
tooltip {The callback function or code for the widget. Use the variable name 'o' to access the Widget pointer and 'v' to access the user value.} xywh {95 225 310 80} box DOWN_BOX labelfont 1 labelsize 11 align 4 textfont 4 textsize 11 resizable
code0 {\#include "widgets/CodeEditor.h"}
class CodeEditor
code0 {\#include "widgets/Code_Editor.h"}
class {fld::widget::Code_Editor}
}
}
}
@@ -1136,7 +1136,7 @@ wCallback->do_callback(wCallback, v);} open
label {Row:}
callback grid_set_row_cb
xywh {95 60 40 20} labelsize 11 align 5 textsize 11
class Fluid_Coord_Input
class {fld::widget::Formula_Input}
}
Fl_Group {} {open
xywh {135 60 30 20}
@@ -1158,7 +1158,7 @@ wCallback->do_callback(wCallback, v);} open
label {Column:}
callback grid_set_col_cb
xywh {175 60 40 20} labelsize 11 align 5 textsize 11
class Fluid_Coord_Input
class {fld::widget::Formula_Input}
}
Fl_Group {} {open
xywh {215 60 30 20}
@@ -1271,13 +1271,13 @@ wCallback->do_callback(wCallback, v);} open
label {Width:}
callback grid_set_min_wdt_cb
xywh {95 135 55 20} labelsize 11 align 5 textsize 11
class Fluid_Coord_Input
class {fld::widget::Formula_Input}
}
Fl_Input {} {
label {Height:}
callback grid_set_min_hgt_cb
xywh {155 135 55 20} labelsize 11 align 5 textsize 11
class Fluid_Coord_Input
class {fld::widget::Formula_Input}
}
Fl_Box {} {
xywh {395 135 1 20} hide resizable
@@ -1292,7 +1292,7 @@ wCallback->do_callback(wCallback, v);} open
label {Row Span:}
callback grid_set_rowspan_cb
xywh {95 170 40 20} labelsize 11 align 5 textsize 11
class Fluid_Coord_Input
class {fld::widget::Formula_Input}
}
Fl_Group {} {open
xywh {135 170 30 20}
@@ -1314,7 +1314,7 @@ wCallback->do_callback(wCallback, v);} open
label {Col. Span:}
callback grid_set_colspan_cb
xywh {175 170 40 20} labelsize 11 align 5 textsize 11
class Fluid_Coord_Input
class {fld::widget::Formula_Input}
}
Fl_Group {} {open
xywh {215 170 30 20}
@@ -1376,7 +1376,7 @@ if (v == LOAD) {
}
}}
tooltip {Number of horizontal rows in the Grid group} xywh {95 60 40 20} labelsize 11 align 5 textsize 11
class Fluid_Coord_Input
class {fld::widget::Formula_Input}
}
Fl_Group {} {open
xywh {135 60 30 20}
@@ -1426,7 +1426,7 @@ if (v == LOAD) {
}
}}
tooltip {Number of vertical columns in the Grid group} xywh {175 60 40 20} labelsize 11 align 5 textsize 11
class Fluid_Coord_Input
class {fld::widget::Formula_Input}
}
Fl_Group {} {open
xywh {215 60 30 20}
@@ -1618,7 +1618,7 @@ if (v == LOAD) {
widget_grid_curr_row_attributes->do_callback(widget_grid_curr_row_attributes, LOAD);
}}
xywh {95 175 40 20} labelsize 11 align 5 textsize 11
class Fluid_Coord_Input
class {fld::widget::Formula_Input}
}
Fl_Group {} {
callback propagate_load open
@@ -1669,7 +1669,7 @@ if (v == LOAD) {
}
}}
xywh {180 175 55 20} labelsize 11 align 5 textsize 11
class Fluid_Coord_Input
class {fld::widget::Formula_Input}
}
Fl_Input {} {
label {Weight:}
@@ -1689,7 +1689,7 @@ if (v == LOAD) {
}
}}
xywh {240 175 55 20} labelsize 11 align 5 textsize 11
class Fluid_Coord_Input
class {fld::widget::Formula_Input}
}
Fl_Input {} {
label {Gap:}
@@ -1709,7 +1709,7 @@ if (v == LOAD) {
}
}}
xywh {300 175 55 20} labelsize 11 align 5 textsize 11
class Fluid_Coord_Input
class {fld::widget::Formula_Input}
}
}
Fl_Box {} {
@@ -1735,7 +1735,7 @@ if (v == LOAD) {
widget_grid_curr_col_attributes->do_callback(widget_grid_curr_col_attributes, LOAD);
}}
xywh {95 210 40 20} labelsize 11 align 5 textsize 11
class Fluid_Coord_Input
class {fld::widget::Formula_Input}
}
Fl_Group {} {open
xywh {135 210 30 20}
@@ -1785,7 +1785,7 @@ if (v == LOAD) {
}
}}
xywh {180 210 55 20} labelsize 11 align 5 textsize 11
class Fluid_Coord_Input
class {fld::widget::Formula_Input}
}
Fl_Input {} {
label {Weight:}
@@ -1805,7 +1805,7 @@ if (v == LOAD) {
}
}}
xywh {240 210 55 20} labelsize 11 align 5 textsize 11
class Fluid_Coord_Input
class {fld::widget::Formula_Input}
}
Fl_Input {} {
label {Gap:}
@@ -1825,7 +1825,7 @@ if (v == LOAD) {
}
}}
xywh {300 210 55 20} labelsize 11 align 5 textsize 11
class Fluid_Coord_Input
class {fld::widget::Formula_Input}
}
}
Fl_Box {} {
+30 -30
View File
@@ -19,7 +19,7 @@
#ifndef widget_panel_h
#define widget_panel_h
#include <FL/Fl.H>
#include "widgets/custom_widgets.h"
#include "widgets/Formula_Input.h"
#include <FL/Fl_Double_Window.H>
extern Fl_Double_Window *image_panel_window;
#include <FL/Fl_Group.H>
@@ -28,16 +28,16 @@ extern Fl_Group *image_panel_imagegroup;
#include <FL/Fl_Box.H>
#include <FL/Fl_Shared_Image.H>
extern Fl_Box *image_panel_data;
extern Fluid_Coord_Input *image_panel_imagew;
extern Fluid_Coord_Input *image_panel_imageh;
extern fld::widget::Formula_Input *image_panel_imagew;
extern fld::widget::Formula_Input *image_panel_imageh;
#include <FL/Fl_Button.H>
#include <FL/Fl_Check_Button.H>
extern void compress_image_cb(Fl_Check_Button*, void*);
extern void bind_image_cb(Fl_Check_Button*, void*);
extern Fl_Group *image_panel_deimagegroup;
extern Fl_Box *image_panel_dedata;
extern Fluid_Coord_Input *image_panel_deimagew;
extern Fluid_Coord_Input *image_panel_deimageh;
extern fld::widget::Formula_Input *image_panel_deimagew;
extern fld::widget::Formula_Input *image_panel_deimageh;
extern void compress_deimage_cb(Fl_Check_Button*, void*);
extern void bind_deimage_cb(Fl_Check_Button*, void*);
extern Fl_Button *image_panel_close;
@@ -63,14 +63,14 @@ extern void align_cb(Fl_Button*, void*);
extern void align_text_image_cb(Fl_Choice*, void*);
extern void align_position_cb(Fl_Choice*, void*);
extern void position_group_cb(Fl_Group*, void*);
extern void x_cb(Fluid_Coord_Input*, void*);
extern Fluid_Coord_Input *widget_x_input;
extern void y_cb(Fluid_Coord_Input*, void*);
extern Fluid_Coord_Input *widget_y_input;
extern void w_cb(Fluid_Coord_Input*, void*);
extern Fluid_Coord_Input *widget_w_input;
extern void h_cb(Fluid_Coord_Input*, void*);
extern Fluid_Coord_Input *widget_h_input;
extern void x_cb(fld::widget::Formula_Input*, void*);
extern fld::widget::Formula_Input *widget_x_input;
extern void y_cb(fld::widget::Formula_Input*, void*);
extern fld::widget::Formula_Input *widget_y_input;
extern void w_cb(fld::widget::Formula_Input*, void*);
extern fld::widget::Formula_Input *widget_w_input;
extern void h_cb(fld::widget::Formula_Input*, void*);
extern fld::widget::Formula_Input *widget_h_input;
extern void wc_relative_cb(Fl_Choice*, void*);
extern void flex_size_group_cb(Fl_Group*, void*);
extern Fl_Group *wp_gui_flexp;
@@ -161,9 +161,9 @@ extern Fl_Input *v_input[4];
#include <FL/Fl_Tile.H>
#include <FL/Fl_Text_Editor.H>
extern Fl_Text_Editor *wComment;
#include "widgets/CodeEditor.h"
extern void callback_cb(CodeEditor*, void*);
extern CodeEditor *wCallback;
#include "widgets/Code_Editor.h"
extern void callback_cb(fld::widget::Code_Editor*, void*);
extern fld::widget::Code_Editor *wCallback;
extern Fl_Group *wp_cpp_callback;
extern void user_data_cb(Fl_Input*, void*);
extern Fl_Menu_Item whenmenu[];
@@ -172,12 +172,12 @@ extern void when_cb(Fl_Menu_Button*, void*);
extern void user_data_type_cb(Fl_Input_Choice*, void*);
extern Fl_Box *w_when_box;
extern Fl_Group *widget_tab_grid_child;
extern void grid_set_row_cb(Fluid_Coord_Input*, void*);
extern Fluid_Coord_Input *widget_grid_row_input;
extern void grid_set_row_cb(fld::widget::Formula_Input*, void*);
extern fld::widget::Formula_Input *widget_grid_row_input;
extern void grid_dec_row_cb(Fl_Button*, void*);
extern void grid_inc_row_cb(Fl_Button*, void*);
extern void grid_set_col_cb(Fluid_Coord_Input*, void*);
extern Fluid_Coord_Input *widget_grid_col_input;
extern void grid_set_col_cb(fld::widget::Formula_Input*, void*);
extern fld::widget::Formula_Input *widget_grid_col_input;
extern void grid_dec_col_cb(Fl_Button*, void*);
extern void grid_inc_col_cb(Fl_Button*, void*);
extern Fl_Box *widget_grid_transient;
@@ -186,24 +186,24 @@ extern Fl_Group *wp_gridc_align;
extern void grid_align_horizontal_cb(Fl_Choice*, void*);
extern void grid_align_vertical_cb(Fl_Choice*, void*);
extern Fl_Group *wp_gridc_size;
extern void grid_set_min_wdt_cb(Fluid_Coord_Input*, void*);
extern void grid_set_min_hgt_cb(Fluid_Coord_Input*, void*);
extern void grid_set_rowspan_cb(Fluid_Coord_Input*, void*);
extern Fluid_Coord_Input *widget_grid_rowspan_input;
extern void grid_set_min_wdt_cb(fld::widget::Formula_Input*, void*);
extern void grid_set_min_hgt_cb(fld::widget::Formula_Input*, void*);
extern void grid_set_rowspan_cb(fld::widget::Formula_Input*, void*);
extern fld::widget::Formula_Input *widget_grid_rowspan_input;
extern void grid_dec_rowspan_cb(Fl_Button*, void*);
extern void grid_inc_rowspan_cb(Fl_Button*, void*);
extern void grid_set_colspan_cb(Fluid_Coord_Input*, void*);
extern Fluid_Coord_Input *widget_grid_colspan_input;
extern void grid_set_colspan_cb(fld::widget::Formula_Input*, void*);
extern fld::widget::Formula_Input *widget_grid_colspan_input;
extern void grid_dec_colspan_cb(Fl_Button*, void*);
extern void grid_inc_colspan_cb(Fl_Button*, void*);
extern Fl_Group *widget_tab_grid;
extern Fluid_Coord_Input *widget_grid_rows;
extern Fluid_Coord_Input *widget_grid_cols;
extern fld::widget::Formula_Input *widget_grid_rows;
extern fld::widget::Formula_Input *widget_grid_cols;
extern Fl_Group *wp_grid_margin;
extern Fl_Group *wp_grid_gaps;
extern Fluid_Coord_Input *widget_grid_curr_row;
extern fld::widget::Formula_Input *widget_grid_curr_row;
extern Fl_Group *widget_grid_curr_row_attributes;
extern Fluid_Coord_Input *widget_grid_curr_col;
extern fld::widget::Formula_Input *widget_grid_curr_col;
extern Fl_Group *widget_grid_curr_col_attributes;
extern Fl_Tabs *widget_tabs_repo;
extern void live_mode_cb(Fl_Button*, void*);
+128
View File
@@ -0,0 +1,128 @@
//
// Widget Bin Button code for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2025 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
//
#include "widgets/Bin_Button.h"
#include "app/fluid.h"
#include "nodes/factory.h"
#include "nodes/Fl_Window_Type.h"
#include "widgets/widget_browser.h"
#include <FL/Fl_Button.H>
#include <FL/Fl_Window.H>
using namespace fld;
using namespace fld::widget;
/** \class fld::widget::Bin_Button
The Bin_Button button is a button that can be used in the widget bin to
allow the user to drag and drop widgets into a window or group. This feature
makes it easy for the user to position a widget at a specific location within
the window or group.
*/
/**
Convert mouse dragging into a drag and drop event.
*/
int fld::widget::Bin_Button::handle(int inEvent)
{
int ret = 0;
switch (inEvent) {
case FL_PUSH:
Fl_Button::handle(inEvent);
return 1; // make sure that we get drag events
case FL_DRAG:
ret = Fl_Button::handle(inEvent);
if (!user_data())
return ret;
if (!Fl::event_is_click()) { // make it a dnd event
// fake a drag outside of the widget
Fl::e_x = x()-1;
Fl_Button::handle(inEvent);
// fake a button release
Fl_Button::handle(FL_RELEASE);
// make it into a dnd event
const char *type_name = (const char*)user_data();
Fl_Type::current_dnd = Fl_Type::current;
Fl::copy(type_name, (int)strlen(type_name)+1, 0);
Fl::dnd();
return 1;
}
return ret;
}
return Fl_Button::handle(inEvent);
}
/** \class fld::widget::Bin_Window_Button
The Bin_Window_Button button is used in the widget bin to create new
windows by dragging and dropping. When the button is dragged and dropped onto
the desktop, a new window will be created at the drop location.
This does not work in Wayland because Wayland does not allow client
applications to control window placement.
*/
/**
Convert mouse dragging into a drag and drop event.
*/
int fld::widget::Bin_Window_Button::handle(int inEvent)
{
static Fl_Window *drag_win = NULL;
int ret = 0;
switch (inEvent) {
case FL_PUSH:
Fl_Button::handle(inEvent);
return 1; // make sure that we get drag events
case FL_DRAG:
ret = Fl_Button::handle(inEvent);
if (!user_data())
return ret;
if (!Fl::event_is_click()) {
if (!drag_win) {
drag_win = new Fl_Window(0, 0, 480, 320);
drag_win->border(0);
drag_win->set_non_modal();
}
if (drag_win) {
drag_win->position(Fl::event_x_root()+1, Fl::event_y_root()+1);
drag_win->show();
}
// Does not work outside window: fl_cursor(FL_CURSOR_HAND);
}
return ret;
case FL_RELEASE:
if (drag_win) {
Fl::delete_widget(drag_win);
drag_win = NULL;
// create a new window here
Fl_Type *prototype = typename_to_prototype((char*)user_data());
if (prototype) {
Fl_Type *new_type = add_new_widget_from_user(prototype, Strategy::AFTER_CURRENT);
if (new_type && new_type->is_a(ID_Window)) {
Fl_Window_Type *new_window = (Fl_Window_Type*)new_type;
Fl_Window *w = (Fl_Window *)new_window->o;
w->position(Fl::event_x_root(), Fl::event_y_root());
}
}
widget_browser->display(Fl_Type::current);
widget_browser->rebuild();
}
return Fl_Button::handle(inEvent);
}
return Fl_Button::handle(inEvent);
}
+44
View File
@@ -0,0 +1,44 @@
//
// Widget Bin Button header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2025 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 FLUID_WIDGETS_BIN_BUTTON_H
#define FLUID_WIDGETS_BIN_BUTTON_H
#include <FL/Fl_Button.H>
namespace fld {
namespace widget {
// Adding drag and drop for dragging widgets into windows.
class Bin_Button : public Fl_Button {
public:
int handle(int) override;
Bin_Button(int X,int Y,int W,int H, const char* l = nullptr) :
Fl_Button(X,Y,W,H,l) { }
};
// Adding drag and drop functionality to drag window prototypes onto the desktop.
class Bin_Window_Button : public Fl_Button {
public:
int handle(int) override;
Bin_Window_Button(int X,int Y,int W,int H, const char* l = nullptr) :
Fl_Button(X,Y,W,H,l) { }
};
} // namespace widget
} // namespace fld
#endif // FLUID_WIDGETS_BIN_BUTTON_H
-105
View File
@@ -1,105 +0,0 @@
//
// Code editor widget for the Fast Light Tool Kit (FLTK).
// Syntax highlighting rewritten by erco@seriss.com 09/15/20.
//
// Copyright 1998-2025 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 CodeEditor_h
#define CodeEditor_h
//
// Include necessary headers...
//
#include "StyleParse.h"
#include <FL/Fl.H>
#include <FL/Fl_Text_Buffer.H>
#include <FL/Fl_Text_Editor.H>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
// ---- CodeEditor declaration
/**
A widget derived from Fl_Text_Editor that implements C++ code highlighting.
CodeEditor is used in Fluid whenever the user can edit C++ source
code or header text.
*/
class CodeEditor : public Fl_Text_Editor {
friend class StyleParse;
static Fl_Text_Display::Style_Table_Entry styletable[];
static void style_parse(const char *tbuff, char *sbuff, int len, char style);
static void style_unfinished_cb(int, void*);
static void style_update(int pos, int nInserted, int nDeleted,
int /*nRestyled*/, const char * /*deletedText*/,
void *cbArg);
static int auto_indent(int, CodeEditor* e);
public:
CodeEditor(int X, int Y, int W, int H, const char *L=0);
~CodeEditor();
void textsize(Fl_Fontsize s);
/// access to protected member get_absolute_top_line_number()
int top_line() { return get_absolute_top_line_number(); }
/// access to protected member mTopLineNum
int scroll_row() { return mTopLineNum; }
/// access to protected member mHorizOffset
int scroll_col() { return mHorizOffset; }
};
// ---- CodeViewer declaration
/**
A widget derived from CodeEditor with highlighting for code blocks.
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).
*/
class CodeViewer : public CodeEditor {
public:
CodeViewer(int X, int Y, int W, int H, const char *L=0);
protected:
void draw() FL_OVERRIDE;
/// Limit event handling to viewing, not editing
int handle(int ev) FL_OVERRIDE { return Fl_Text_Display::handle(ev); }
};
// ---- Project File Text Viewer declaration
/**
A text viewer with an additional highlighting color scheme.
*/
class TextViewer : public Fl_Text_Display {
public:
TextViewer(int X, int Y, int W, int H, const char *L=0);
~TextViewer();
void draw() FL_OVERRIDE;
/// access to protected member get_absolute_top_line_number()
int top_line() { return get_absolute_top_line_number(); }
};
#endif // !CodeEditor_h
@@ -19,20 +19,18 @@
// Include necessary headers...
//
#include "widgets/CodeEditor.h"
#include "widgets/Code_Editor.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
using namespace fld;
using namespace fld::widget;
// ---- CodeEditor implementation
// ---- Code_Editor implementation
/**
Lookup table for all supported styles.
Every table entry describes a rendering style for the corresponding text.
*/
Fl_Text_Display::Style_Table_Entry CodeEditor::styletable[] = { // Style table
Fl_Text_Display::Style_Table_Entry Code_Editor::styletable[] = { // Style table
{ FL_FOREGROUND_COLOR, FL_COURIER, 11 }, // A - Plain
{ FL_DARK_GREEN, FL_COURIER_ITALIC, 11 }, // B - Line comments
{ FL_DARK_GREEN, FL_COURIER_ITALIC, 11 }, // C - Block comments
@@ -50,7 +48,7 @@ Fl_Text_Display::Style_Table_Entry CodeEditor::styletable[] = { // Style table
\param[in] in_len byte length to parse
\param[in] in_style starting style letter
*/
void CodeEditor::style_parse(const char *in_tbuff, // text buffer to parse
void Code_Editor::style_parse(const char *in_tbuff, // text buffer to parse
char *in_sbuff, // style buffer we modify
int in_len, // byte length to parse
char in_style) { // starting style letter
@@ -65,7 +63,7 @@ void CodeEditor::style_parse(const char *in_tbuff, // text buffer to par
// 'G' - Keywords if, while..
// 'H' - Chars 'x'
StyleParse sp;
Style_Parser sp;
sp.tbuff = in_tbuff;
sp.sbuff = in_sbuff;
sp.len = in_len;
@@ -103,7 +101,7 @@ void CodeEditor::style_parse(const char *in_tbuff, // text buffer to par
/**
Update unfinished styles.
*/
void CodeEditor::style_unfinished_cb(int, void*) {
void Code_Editor::style_unfinished_cb(int, void*) {
}
/**
@@ -113,10 +111,10 @@ void CodeEditor::style_unfinished_cb(int, void*) {
\param[in] nDeleted number of bytes deleted
\param[in] cbArg pointer back to the code editor
*/
void CodeEditor::style_update(int pos, int nInserted, int nDeleted,
void Code_Editor::style_update(int pos, int nInserted, int nDeleted,
int /*nRestyled*/, const char * /*deletedText*/,
void *cbArg) {
CodeEditor *editor = (CodeEditor*)cbArg;
Code_Editor *editor = (Code_Editor*)cbArg;
char *style, // Style data
*text; // Text data
@@ -164,7 +162,7 @@ void CodeEditor::style_update(int pos, int nInserted, int nDeleted,
Find the right indentation depth after pressing the Enter key.
\param[in] e pointer back to the code editor
*/
int CodeEditor::auto_indent(int, CodeEditor* e) {
int Code_Editor::auto_indent(int, Code_Editor* e) {
if (e->buffer()->selected()) {
e->insert_position(e->buffer()->primary_selection()->start());
e->buffer()->remove_selection();
@@ -198,11 +196,11 @@ int CodeEditor::auto_indent(int, CodeEditor* e) {
}
/**
Create a CodeEditor widget.
Create a Code_Editor widget.
\param[in] X, Y, W, H position and size of the widget
\param[in] L optional label
*/
CodeEditor::CodeEditor(int X, int Y, int W, int H, const char *L) :
Code_Editor::Code_Editor(int X, int Y, int W, int H, const char *L) :
Fl_Text_Editor(X, Y, W, H, L) {
buffer(new Fl_Text_Buffer);
@@ -228,9 +226,9 @@ CodeEditor::CodeEditor(int X, int Y, int W, int H, const char *L) :
}
/**
Destroy a CodeEditor widget.
Destroy a Code_Editor widget.
*/
CodeEditor::~CodeEditor() {
Code_Editor::~Code_Editor() {
Fl_Text_Buffer *buf = mStyleBuffer;
mStyleBuffer = 0;
delete buf;
@@ -245,7 +243,7 @@ CodeEditor::~CodeEditor() {
This works by updating the fontsizes in the style table.
\param[in] s the new general height of the text font
*/
void CodeEditor::textsize(Fl_Fontsize s) {
void Code_Editor::textsize(Fl_Fontsize s) {
Fl_Text_Editor::textsize(s); // call base class method
// now attempt to update our styletable to honor the new size...
int entries = sizeof(styletable) / sizeof(styletable[0]);
@@ -254,63 +252,3 @@ void CodeEditor::textsize(Fl_Fontsize s) {
}
} // textsize
// ---- CodeViewer implementation
/**
Create a CodeViewer widget.
\param[in] X, Y, W, H position and size of the widget
\param[in] L optional label
*/
CodeViewer::CodeViewer(int X, int Y, int W, int H, const char *L)
: CodeEditor(X, Y, W, H, L)
{
default_key_function(kf_ignore);
remove_all_key_bindings(&key_bindings);
cursor_style(CARET_CURSOR);
}
/**
Tricking Fl_Text_Display into using bearable colors for this specific task.
*/
void CodeViewer::draw()
{
Fl_Color c = Fl::get_color(FL_SELECTION_COLOR);
Fl::set_color(FL_SELECTION_COLOR, fl_color_average(FL_BACKGROUND_COLOR, FL_FOREGROUND_COLOR, 0.9f));
CodeEditor::draw();
Fl::set_color(FL_SELECTION_COLOR, c);
}
// ---- TextViewer implementation
/**
Create a TextViewer widget.
\param[in] X, Y, W, H position and size of the widget
\param[in] L optional label
*/
TextViewer::TextViewer(int X, int Y, int W, int H, const char *L)
: Fl_Text_Display(X, Y, W, H, L)
{
buffer(new Fl_Text_Buffer);
}
/**
Avoid memory leaks.
*/
TextViewer::~TextViewer() {
Fl_Text_Buffer *buf = mBuffer;
buffer(0);
delete buf;
}
/**
Tricking Fl_Text_Display into using bearable colors for this specific task.
*/
void TextViewer::draw()
{
Fl_Color c = Fl::get_color(FL_SELECTION_COLOR);
Fl::set_color(FL_SELECTION_COLOR, fl_color_average(FL_BACKGROUND_COLOR, FL_FOREGROUND_COLOR, 0.9f));
Fl_Text_Display::draw();
Fl::set_color(FL_SELECTION_COLOR, c);
}
+70
View File
@@ -0,0 +1,70 @@
//
// Code editor widget for the Fast Light Tool Kit (FLTK).
// Syntax highlighting rewritten by erco@seriss.com 09/15/20.
//
// Copyright 1998-2025 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 FLUID_WIDGETS_CODE_EDITOR_H
#define FLUID_WIDGETS_CODE_EDITOR_H
//
// Include necessary headers...
//
#include "Style_Parser.h"
#include <FL/Fl_Text_Editor.H>
namespace fld {
namespace widget {
// ---- Code_Editor declaration
/**
A widget derived from Fl_Text_Editor that implements C++ code highlighting.
Code_Editor is used in Fluid whenever the user can edit C++ source
code or header text.
*/
class Code_Editor : public Fl_Text_Editor {
friend class Style_Parser;
static Fl_Text_Display::Style_Table_Entry styletable[];
static void style_parse(const char *tbuff, char *sbuff, int len, char style);
static void style_unfinished_cb(int, void*);
static void style_update(int pos, int nInserted, int nDeleted,
int /*nRestyled*/, const char * /*deletedText*/,
void *cbArg);
static int auto_indent(int, Code_Editor* e);
public:
Code_Editor(int X, int Y, int W, int H, const char *L=0);
~Code_Editor();
void textsize(Fl_Fontsize s);
/// access to protected member get_absolute_top_line_number()
int top_line() { return get_absolute_top_line_number(); }
/// access to protected member mTopLineNum
int scroll_row() { return mTopLineNum; }
/// access to protected member mHorizOffset
int scroll_col() { return mHorizOffset; }
};
} // namespace widget
} // namespace fld
#endif // FLUID_WIDGETS_CODE_EDITOR_H
+51
View File
@@ -0,0 +1,51 @@
//
// Code editor widget for the Fast Light Tool Kit (FLTK).
// Syntax highlighting rewritten by erco@seriss.com 09/15/20.
//
// Copyright 1998-2025 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
//
//
// Include necessary headers...
//
#include "widgets/Code_Viewer.h"
using namespace fld;
using namespace fld::widget;
/**
Create a fld::widget::Code_Viewer widget.
\param[in] X, Y, W, H position and size of the widget
\param[in] L optional label
*/
Code_Viewer::Code_Viewer(int X, int Y, int W, int H, const char *L)
: Code_Editor(X, Y, W, H, L)
{
default_key_function(kf_ignore);
remove_all_key_bindings(&key_bindings);
cursor_style(CARET_CURSOR);
}
/**
Tricking Fl_Text_Display into using bearable colors for this specific task.
*/
void Code_Viewer::draw()
{
Fl_Color c = Fl::get_color(FL_SELECTION_COLOR);
Fl::set_color(FL_SELECTION_COLOR, fl_color_average(FL_BACKGROUND_COLOR, FL_FOREGROUND_COLOR, 0.9f));
Code_Editor::draw();
Fl::set_color(FL_SELECTION_COLOR, c);
}
+51
View File
@@ -0,0 +1,51 @@
//
// Code editor widget for the Fast Light Tool Kit (FLTK).
// Syntax highlighting rewritten by erco@seriss.com 09/15/20.
//
// Copyright 1998-2025 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 FLUID_WIDGETS_CODE_VIEWER_H
#define FLUID_WIDGETS_CODE_VIEWER_H
//
// Include necessary headers...
//
#include "widgets/Code_Editor.h"
namespace fld {
namespace widget {
/**
A widget derived from Code_Editor with highlighting for code blocks.
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).
*/
class Code_Viewer : public Code_Editor {
public:
Code_Viewer(int X, int Y, int W, int H, const char *L = nullptr);
protected:
void draw() override;
/// Limit event handling to viewing, not editing
int handle(int ev) override { return Fl_Text_Display::handle(ev); }
};
} // namespace widget
} // namespace fld
#endif // FLUID_WIDGETS_CODE_VIEWER_H
@@ -1,7 +1,7 @@
//
// Widget type code for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2023 by Bill Spitzak and others.
// Copyright 1998-2025 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
@@ -14,119 +14,20 @@
// https://www.fltk.org/bugs.php
//
#include "widgets/custom_widgets.h"
#include "widgets/Formula_Input.h"
#include "app/fluid.h"
#include "nodes/Fl_Window_Type.h"
#include "nodes/factory.h"
#include "panels/widget_panel.h"
#include "widgets/widget_browser.h"
#include <FL/platform.H>
#include <FL/Fl_Button.H>
#include <FL/Fl_Window.H>
#include <FL/fl_draw.H>
#include <FL/Fl_Menu_.H>
#include <FL/fl_string_functions.h>
#include "../src/flstring.h"
/** \class Widget_Bin_Button
The Widget_Bin_Button button is a button that can be used in the widget bin to
allow the user to drag and drop widgets into a window or group. This feature
makes it easy for the user to position a widget at a specific location within
the window or group.
*/
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
/**
Convert mouse dragging into a drag and drop event.
*/
int Widget_Bin_Button::handle(int inEvent)
{
int ret = 0;
switch (inEvent) {
case FL_PUSH:
Fl_Button::handle(inEvent);
return 1; // make sure that we get drag events
case FL_DRAG:
ret = Fl_Button::handle(inEvent);
if (!user_data())
return ret;
if (!Fl::event_is_click()) { // make it a dnd event
// fake a drag outside of the widget
Fl::e_x = x()-1;
Fl_Button::handle(inEvent);
// fake a button release
Fl_Button::handle(FL_RELEASE);
// make it into a dnd event
const char *type_name = (const char*)user_data();
Fl_Type::current_dnd = Fl_Type::current;
Fl::copy(type_name, (int)strlen(type_name)+1, 0);
Fl::dnd();
return 1;
}
return ret;
}
return Fl_Button::handle(inEvent);
}
using namespace fld;
using namespace fld::widget;
/** \class Widget_Bin_Window_Button
The Widget_Bin_Window_Button button is used in the widget bin to create new
windows by dragging and dropping. When the button is dragged and dropped onto
the desktop, a new window will be created at the drop location.
*/
/**
Convert mouse dragging into a drag and drop event.
*/
int Widget_Bin_Window_Button::handle(int inEvent)
{
static Fl_Window *drag_win = NULL;
int ret = 0;
switch (inEvent) {
case FL_PUSH:
Fl_Button::handle(inEvent);
return 1; // make sure that we get drag events
case FL_DRAG:
ret = Fl_Button::handle(inEvent);
if (!user_data())
return ret;
if (!Fl::event_is_click()) {
if (!drag_win) {
drag_win = new Fl_Window(0, 0, 480, 320);
drag_win->border(0);
drag_win->set_non_modal();
}
if (drag_win) {
drag_win->position(Fl::event_x_root()+1, Fl::event_y_root()+1);
drag_win->show();
}
// Does not work outside window: fl_cursor(FL_CURSOR_HAND);
}
return ret;
case FL_RELEASE:
if (drag_win) {
Fl::delete_widget(drag_win);
drag_win = NULL;
// create a new window here
Fl_Type *prototype = typename_to_prototype((char*)user_data());
if (prototype) {
Fl_Type *new_type = add_new_widget_from_user(prototype, Strategy::AFTER_CURRENT);
if (new_type && new_type->is_a(ID_Window)) {
Fl_Window_Type *new_window = (Fl_Window_Type*)new_type;
Fl_Window *w = (Fl_Window *)new_window->o;
w->position(Fl::event_x_root(), Fl::event_y_root());
}
}
widget_browser->display(Fl_Type::current);
widget_browser->rebuild();
}
return Fl_Button::handle(inEvent);
}
return Fl_Button::handle(inEvent);
}
/** \class Fluid_Coord_Input
The Fluid_Coord_Input widget is an input field for entering widget coordinates
/** \class fld::widget::Formula_Input
The Formula_Input widget is an input field for entering widget coordinates
and sizes. It includes basic math capabilities and allows the use of variables
in formulas. This widget is useful for specifying precise positions and
dimensions for widgets in a graphical user interface.
@@ -135,21 +36,18 @@ int Widget_Bin_Window_Button::handle(int inEvent)
/**
Create an input field.
*/
Fluid_Coord_Input::Fluid_Coord_Input(int x, int y, int w, int h, const char *l) :
Fl_Input(x, y, w, h, l),
user_callback_(0L),
vars_(0L),
vars_user_data_(0L)
Formula_Input::Formula_Input(int x, int y, int w, int h, const char *l)
: Fl_Input(x, y, w, h, l)
{
Fl_Input::callback((Fl_Callback*)callback_handler_cb);
text("0");
}
void Fluid_Coord_Input::callback_handler_cb(Fluid_Coord_Input *This, void *v) {
void Formula_Input::callback_handler_cb(Formula_Input *This, void *v) {
This->callback_handler(v);
}
void Fluid_Coord_Input::callback_handler(void *v) {
void Formula_Input::callback_handler(void *v) {
if (user_callback_)
(*user_callback_)(this, v);
// do *not* update the value to show the evaluated formula here, because the
@@ -165,7 +63,7 @@ void Fluid_Coord_Input::callback_handler(void *v) {
the last character of the variable name when returning.
\return the integer value that was found or calculated
*/
int Fluid_Coord_Input::eval_var(uchar *&s) const {
int Formula_Input::eval_var(uchar *&s) const {
if (!vars_)
return 0;
// find the end of the variable name
@@ -173,7 +71,7 @@ int Fluid_Coord_Input::eval_var(uchar *&s) const {
while (isalpha(*s)) s++;
int n = (int)(s-v);
// find the variable in the list
for (Fluid_Coord_Input_Vars *vars = vars_; vars->name_; vars++) {
for (Formula_Input_Vars *vars = vars_; vars->name_; vars++) {
if (strncmp((char*)v, vars->name_, n)==0 && vars->name_[n]==0)
return vars->callback_(this, vars_user_data_);
}
@@ -187,7 +85,7 @@ int Fluid_Coord_Input::eval_var(uchar *&s) const {
\param prio priority of current operation
\return the value so far
*/
int Fluid_Coord_Input::eval(uchar *&s, int prio) const {
int Formula_Input::eval(uchar *&s, int prio) const {
int v = 0, sgn = 1;
uchar c = *s++;
@@ -248,7 +146,7 @@ int Fluid_Coord_Input::eval(uchar *&s, int prio) const {
/**
Evaluate a formula into an integer.
The Fluid_Coord_Input widget includes a formula interpreter that allows you
The Formula_Input widget includes a formula interpreter that allows you
to evaluate a string containing a mathematical formula and obtain the result
as an integer. The interpreter supports unary plus and minus, basic integer
math operations (such as addition, subtraction, multiplication, and division),
@@ -259,7 +157,7 @@ int Fluid_Coord_Input::eval(uchar *&s, int prio) const {
\param s formula as a C string
\return the calculated value
*/
int Fluid_Coord_Input::eval(const char *s) const
int Formula_Input::eval(const char *s) const
{
// duplicate the text, so we can modify it
uchar *buf = (uchar*)fl_strdup(s);
@@ -281,14 +179,14 @@ int Fluid_Coord_Input::eval(const char *s) const
/**
Evaluate the formula and return the result.
*/
int Fluid_Coord_Input::value() const {
int Formula_Input::value() const {
return eval(text());
}
/**
Set the field to an integer value, replacing previous texts.
*/
void Fluid_Coord_Input::value(int v) {
void Formula_Input::value(int v) {
char buf[32];
fl_snprintf(buf, sizeof(buf), "%d", v);
text(buf);
@@ -297,7 +195,7 @@ void Fluid_Coord_Input::value(int v) {
/**
Allow vertical mouse dragging and mouse wheel to interactively change the value.
*/
int Fluid_Coord_Input::handle(int event) {
int Formula_Input::handle(int event) {
switch (event) {
case FL_MOUSEWHEEL:
if (Fl::event_dy()) {
@@ -309,3 +207,11 @@ int Fluid_Coord_Input::handle(int event) {
}
return Fl_Input::handle(event);
}
/** Set the list of the available variables
\param vars array of variables, last entry `has name_` set to `NULL`
\param user_data is forwarded to the Variable callback */
void Formula_Input::variables(Formula_Input_Vars *vars, void *user_data) {
vars_ = vars;
vars_user_data_ = user_data;
}
+73
View File
@@ -0,0 +1,73 @@
//
// Formula_Input widget header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2025 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 FLUID_WIDGETS_FORMULA_INPUT_H
#define FLUID_WIDGETS_FORMULA_INPUT_H
#include <FL/Fl_Input.H>
namespace fld {
namespace widget {
class Formula_Input;
// Callback signature for function returning the value of a variable.
typedef int (Fluid_Coord_Callback)(Formula_Input const *, void*);
// Entry for a list of variables available to an input field.
// Formula_Input::variables() expects an array of
// Formula_Input_Vars with the last entry's name_ set to NULL.
typedef struct Formula_Input_Vars {
const char *name_;
Fluid_Coord_Callback *callback_;
} Formula_Input_Vars;
// A text input widget that understands simple math.
class Formula_Input : public Fl_Input
{
Fl_Callback *user_callback_ { nullptr };
Formula_Input_Vars *vars_ { nullptr };
void *vars_user_data_ { nullptr };
static void callback_handler_cb(Formula_Input *This, void *v);
void callback_handler(void *v);
int eval_var(uchar *&s) const;
int eval(uchar *&s, int prio) const;
int eval(const char *s) const;
public:
Formula_Input(int x, int y, int w, int h, const char *l = nullptr);
/** Return the text in the widget text field. */
const char *text() const { return Fl_Input::value(); }
/** Set the text in the text field */
void text(const char *v) { Fl_Input::value(v); }
int value() const;
void value(int v);
/** Set the general callback for this widget. */
void callback(Fl_Callback *cb) { user_callback_ = cb; }
void variables(fld::widget::Formula_Input_Vars *vars, void *user_data);
int handle(int) override;
};
} // namespace widget
} // namespace fld
#endif // FLUID_WIDGETS_FORMULA_INPUT_H
@@ -1,7 +1,7 @@
//
// Syntax highlighting for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2020 by Bill Spitzak and others.
// Copyright 1998-2025 by Bill Spitzak and others.
// Copyright 2020 Greg Ercolano.
//
// This library is free software. Distribution and use rights are outlined in
@@ -15,13 +15,16 @@
// https://www.fltk.org/bugs.php
//
#include "StyleParse.h"
#include "Style_Parser.h"
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h> // bsearch()
using namespace fld;
using namespace fld::widget;
// Sorted list of C/C++ keywords...
static const char * const code_keywords[] = {
"and",
@@ -130,7 +133,7 @@ static void* search_types(char *find) {
// Applies the current style, advances to next text + style char.
// Returns 0 if hit end of buffer, 1 otherwise.
//
int StyleParse::parse_over_char(int handle_crlf) {
int Style_Parser::parse_over_char(int handle_crlf) {
char c = *tbuff;
// End of line?
@@ -157,7 +160,7 @@ int StyleParse::parse_over_char(int handle_crlf) {
// Parse over white space using current style
// Returns 0 if hit end of buffer, 1 otherwise.
//
int StyleParse::parse_over_white() {
int Style_Parser::parse_over_white() {
while ( len > 0 && strchr(" \t", *tbuff))
{ if ( !parse_over_char() ) return 0; }
return 1;
@@ -166,7 +169,7 @@ int StyleParse::parse_over_white() {
// Parse over non-white alphabetic text
// Returns 0 if hit end of buffer, 1 otherwise.
//
int StyleParse::parse_over_alpha() {
int Style_Parser::parse_over_alpha() {
while ( len > 0 && isalpha(*tbuff) )
{ if ( !parse_over_char() ) return 0; }
return 1;
@@ -175,7 +178,7 @@ int StyleParse::parse_over_alpha() {
// Parse to end of line in specified style.
// Returns 0 if hit end of buffer, 1 otherwise.
//
int StyleParse::parse_to_eol(char s) {
int Style_Parser::parse_to_eol(char s) {
char save = style;
style = s;
while ( *tbuff != '\n' )
@@ -187,7 +190,7 @@ int StyleParse::parse_to_eol(char s) {
// Parse a block comment until end of comment or buffer.
// Returns 0 if hit end of buffer, 1 otherwise.
//
int StyleParse::parse_block_comment() {
int Style_Parser::parse_block_comment() {
char save = style;
style = 'C'; // block comment style
while ( len > 0 ) {
@@ -203,7 +206,7 @@ int StyleParse::parse_block_comment() {
}
// Copy keyword from tbuff -> keyword[] buffer
void StyleParse::buffer_keyword() {
void Style_Parser::buffer_keyword() {
char *key = keyword;
char *kend = key + sizeof(keyword) - 1; // end of buffer
for ( const char *s=tbuff;
@@ -215,7 +218,7 @@ void StyleParse::buffer_keyword() {
// Parse over specified 'key'word in specified style 's'.
// Returns 0 if hit end of buffer, 1 otherwise.
//
int StyleParse::parse_over_key(const char *key, char s) {
int Style_Parser::parse_over_key(const char *key, char s) {
char save = style;
style = s;
// Parse over the keyword while applying style to sbuff
@@ -229,7 +232,7 @@ int StyleParse::parse_over_key(const char *key, char s) {
// Parse over angle brackets <..> in specified style.
// Returns 0 if hit end of buffer, 1 otherwise.
//
int StyleParse::parse_over_angles(char s) {
int Style_Parser::parse_over_angles(char s) {
if ( *tbuff != '<' ) return 1; // not <..>, early exit
char save = style;
style = s;
@@ -245,7 +248,7 @@ int StyleParse::parse_over_angles(char s) {
// spi.keyword[] will contain parsed word.
// Returns 0 if hit end of buffer, 1 otherwise.
//
int StyleParse::parse_keyword() {
int Style_Parser::parse_keyword() {
// Parse into 'keyword' buffer
buffer_keyword();
char *key = keyword;
@@ -262,7 +265,7 @@ int StyleParse::parse_keyword() {
// Style parse a quoted string, either "" or ''.
// Returns 0 if hit end of buffer, 1 otherwise.
//
int StyleParse::parse_quoted_string(char quote_char, // e.g. '"' or '\''
int Style_Parser::parse_quoted_string(char quote_char, // e.g. '"' or '\''
char in_style) { // style for quoted text
style = in_style; // start string style
if ( !parse_over_char() ) return 0; // parse over opening quote
@@ -289,7 +292,7 @@ int StyleParse::parse_quoted_string(char quote_char, // e.g. '"' or '\''
// Style parse a directive (#include, #define..)
// Returns 0 if hit end of buffer, 1 otherwise.
//
int StyleParse::parse_directive() {
int Style_Parser::parse_directive() {
style = 'E'; // start directive style
if ( !parse_over_char() ) return 0; // Parse over '#'
if ( !parse_over_white() ) return 0; // Parse over any whitespace after '#'
@@ -303,7 +306,7 @@ int StyleParse::parse_directive() {
// Style parse a line comment to end of line.
// Returns 0 if hit end of buffer, 1 otherwise.
//
int StyleParse::parse_line_comment() {
int Style_Parser::parse_line_comment() {
return parse_to_eol('B');
}
@@ -312,7 +315,7 @@ int StyleParse::parse_line_comment() {
// a continuation of a line, such as in a multiline #directive.
// Returns 0 if hit end of buffer, 1 otherwise.
//
int StyleParse::parse_escape() {
int Style_Parser::parse_escape() {
const char no_crlf = 0;
if ( !parse_over_char(no_crlf) ) return 0; // backslash
if ( !parse_over_char(no_crlf) ) return 0; // char escaped
@@ -322,7 +325,7 @@ int StyleParse::parse_escape() {
// Parse all other non-specific characters
// Returns 0 if hit end of buffer, 1 otherwise.
//
int StyleParse::parse_all_else() {
int Style_Parser::parse_all_else() {
last = isalnum(*tbuff) || *tbuff == '_' || *tbuff == '.';
return parse_over_char();
}
@@ -1,7 +1,7 @@
//
// Syntax highlighting for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2020 by Bill Spitzak and others.
// Copyright 1998-2025 by Bill Spitzak and others.
// Copyright 2020 Greg Ercolano.
//
// This library is free software. Distribution and use rights are outlined in
@@ -15,30 +15,25 @@
// https://www.fltk.org/bugs.php
//
#ifndef StyleParse_h
#define StyleParse_h
#ifndef FLUID_WIDGETS_STYLE_PARSER_H
#define FLUID_WIDGETS_STYLE_PARSER_H
// Class to manage style parsing, friend of CodeEditor
class StyleParse {
namespace fld {
namespace widget {
// Class to manage style parsing, friend of Code_Editor
class Style_Parser {
public:
const char *tbuff; // text buffer
char *sbuff; // style buffer
int len; // running length
char style; // current style
char lwhite; // leading white space (1=white, 0=past white)
int col; // line's column counter
char keyword[40]; // keyword parsing buffer
char last; // flag for keyword parsing
const char *tbuff { nullptr }; // text buffer
char *sbuff { nullptr }; // style buffer
int len { 0 }; // running length
char style { 0 }; // current style
char lwhite { 1 }; // leading white space (1=white, 0=past white)
int col { 0 }; // line's column counter
char keyword[40] { }; // keyword parsing buffer
char last { 0 }; // flag for keyword parsing
StyleParse() {
tbuff = 0;
sbuff = 0;
len = 0;
style = 0;
lwhite = 1;
col = 0;
last = 0;
}
Style_Parser() = default;
// Methods to aid in parsing
int parse_over_char(int handle_crlf=1);
@@ -51,11 +46,14 @@ public:
int parse_over_angles(char s);
int parse_keyword(); // "switch"
int parse_quoted_string(char quote_char, char in_style);
// "hello", 'x'
// "hello", 'x'
int parse_directive(); // "#define"
int parse_line_comment(); // "// text.."
int parse_escape(); // "\'"
int parse_all_else(); // all other code
};
#endif // StyleParse_h
} // namespace widget
} // namespace fld
#endif // FLUID_WIDGETS_STYLE_PARSER_H
+58
View File
@@ -0,0 +1,58 @@
//
// Code editor widget for the Fast Light Tool Kit (FLTK).
// Syntax highlighting rewritten by erco@seriss.com 09/15/20.
//
// Copyright 1998-2025 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
//
//
// Include necessary headers...
//
#include "widgets/Text_Viewer.h"
using namespace fld;
using namespace fld::widget;
/**
Create a fld::widget::Text_Viewer widget.
\param[in] X, Y, W, H position and size of the widget
\param[in] L optional label
*/
Text_Viewer::Text_Viewer(int X, int Y, int W, int H, const char *L)
: Fl_Text_Display(X, Y, W, H, L)
{
buffer(new Fl_Text_Buffer);
}
/**
Avoid memory leaks.
*/
Text_Viewer::~Text_Viewer() {
Fl_Text_Buffer *buf = mBuffer;
buffer(0);
delete buf;
}
/**
Tricking Fl_Text_Display into using bearable colors for this specific task.
*/
void Text_Viewer::draw()
{
Fl_Color c = Fl::get_color(FL_SELECTION_COLOR);
Fl::set_color(FL_SELECTION_COLOR, fl_color_average(FL_BACKGROUND_COLOR, FL_FOREGROUND_COLOR, 0.9f));
Fl_Text_Display::draw();
Fl::set_color(FL_SELECTION_COLOR, c);
}
+46
View File
@@ -0,0 +1,46 @@
//
// Code editor widget for the Fast Light Tool Kit (FLTK).
// Syntax highlighting rewritten by erco@seriss.com 09/15/20.
//
// Copyright 1998-2025 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 FLUID_WIDGETS_TEXT_VIEWER_H
#define FLUID_WIDGETS_TEXT_VIEWER_H
//
// Include necessary headers...
//
#include <FL/Fl_Text_Display.H>
namespace fld {
namespace widget {
/**
A text viewer with an additional highlighting color scheme.
*/
class Text_Viewer : public Fl_Text_Display {
public:
Text_Viewer(int X, int Y, int W, int H, const char *L = nullptr);
~Text_Viewer();
void draw() override;
/// access to protected member get_absolute_top_line_number()
int top_line() { return get_absolute_top_line_number(); }
};
} // namespace widget
} // namespace fld
#endif // FLUID_WIDGETS_TEXT_VIEWER_H
-90
View File
@@ -1,90 +0,0 @@
//
// Shortcut header file 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
//
#ifndef _FLUID_SHORTCUT_BUTTON_H
#define _FLUID_SHORTCUT_BUTTON_H
#include <FL/Fl_Button.H>
#include <FL/Fl_Input.H>
// Adding drag and drop for dragging widgets into windows.
class Widget_Bin_Button : public Fl_Button {
public:
int handle(int) FL_OVERRIDE;
Widget_Bin_Button(int X,int Y,int W,int H, const char* l = 0) :
Fl_Button(X,Y,W,H,l) { }
};
// Adding drag and drop functionality to drag window prototypes onto the desktop.
class Widget_Bin_Window_Button : public Fl_Button {
public:
int handle(int) FL_OVERRIDE;
Widget_Bin_Window_Button(int X,int Y,int W,int H, const char* l = 0) :
Fl_Button(X,Y,W,H,l) { }
};
// Callback signature for function returning the value of a variable.
typedef int (Fluid_Coord_Callback)(class Fluid_Coord_Input const *, void*);
// Entry for a list of variables available to an input field.
// Fluid_Coord_Input::variables() expects an array of Fluid_Coord_Input_Vars
// with the last entry's name_ set to NULL.
typedef struct Fluid_Coord_Input_Vars {
const char *name_;
Fluid_Coord_Callback *callback_;
} Fluid_Coord_Input_Vars;
// A text input widget that understands simple math.
class Fluid_Coord_Input : public Fl_Input
{
Fl_Callback *user_callback_;
Fluid_Coord_Input_Vars *vars_;
void *vars_user_data_;
static void callback_handler_cb(Fluid_Coord_Input *This, void *v);
void callback_handler(void *v);
int eval_var(uchar *&s) const;
int eval(uchar *&s, int prio) const;
int eval(const char *s) const;
public:
Fluid_Coord_Input(int x, int y, int w, int h, const char *l=0L);
/** Return the text in the widget text field. */
const char *text() const { return Fl_Input::value(); }
/** Set the text in the text field */
void text(const char *v) { Fl_Input::value(v); }
int value() const;
void value(int v);
/** Set the general callback for this widget. */
void callback(Fl_Callback *cb) {
user_callback_ = cb;
}
/** Set the list of the available variables
\param vars array of variables, last entry `has name_` set to `NULL`
\param user_data is forwarded to the Variable callback */
void variables(Fluid_Coord_Input_Vars *vars, void *user_data) {
vars_ = vars;
vars_user_data_ = user_data;
}
int handle(int) FL_OVERRIDE;
};
#endif