mirror of
https://github.com/fltk/fltk.git
synced 2026-05-22 23:37:02 +08:00
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:
+12
-6
@@ -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
|
||||
)
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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 : "" );
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
+105
-105
File diff suppressed because it is too large
Load Diff
@@ -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}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
@@ -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
@@ -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*);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user