summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Melcher <github@matthiasm.com>2023-10-22 01:50:06 +0200
committerMatthias Melcher <github@matthiasm.com>2023-10-22 01:51:53 +0200
commitb4fd7037ac37286146165b89282e6ab893e63a78 (patch)
tree6b66afcd3ec3dc86305e984eafa16ae8ab8cff59
parentd102e466d6a1047279dab57bcb13a74a7fddbe7f (diff)
FLUID: more Fl_Grid settings
-rw-r--r--FL/Fl_Grid.H8
-rw-r--r--fluid/Fl_Grid_Type.cxx229
-rw-r--r--fluid/widget_panel.cxx132
-rw-r--r--fluid/widget_panel.fl74
-rw-r--r--fluid/widget_panel.fl.bak1167
-rw-r--r--fluid/widget_panel.h4
-rw-r--r--src/Fl_Grid.cxx31
7 files changed, 1542 insertions, 103 deletions
diff --git a/FL/Fl_Grid.H b/FL/Fl_Grid.H
index fbcc1ce1f..7abfa6362 100644
--- a/FL/Fl_Grid.H
+++ b/FL/Fl_Grid.H
@@ -185,6 +185,9 @@ public:
void align(Fl_Grid_Align align) { align_ = align; }
Fl_Grid_Align align() const { return align_; }
+
+ void minimum_size(int w, int h) { if (w>=0) w_ = w; if (h>=0) h_ = h; }
+ void minimum_size(int *w, int *h) { if (w) *w = w_; if (h) *h = h_; }
}; // class Cell
private:
@@ -286,12 +289,15 @@ public:
void col_width(int col, int value);
void col_width(const int *value, size_t size);
+ int col_width(int col) const;
void col_weight(int col, int value);
void col_weight(const int *value, size_t size);
+ int col_weight(int col) const;
void col_gap(int col, int value);
void col_gap(const int *value, size_t size);
+ int col_gap(int col) const;
void row_height(int row, int value);
void row_height(const int *value, size_t size);
@@ -299,9 +305,11 @@ public:
void row_weight(int row, int value);
void row_weight(const int *value, size_t size);
+ int row_weight(int row) const;
void row_gap(int row, int value);
void row_gap(const int *value, size_t size);
+ int row_gap(int row) const;
/**
Enable or disable drawing of the grid helper lines for visualization.
diff --git a/fluid/Fl_Grid_Type.cxx b/fluid/Fl_Grid_Type.cxx
index 415a2dab5..cecad20ec 100644
--- a/fluid/Fl_Grid_Type.cxx
+++ b/fluid/Fl_Grid_Type.cxx
@@ -27,6 +27,7 @@
#include <FL/Fl_Grid.H>
#include <FL/Fl_Value_Input.H>
#include <FL/Fl_Button.H>
+#include <FL/Fl_Choice.H>
#include "../src/flstring.h"
#include <stdio.h>
@@ -44,7 +45,7 @@ Fl_Grid_Type::Fl_Grid_Type() {
Fl_Widget *Fl_Grid_Type::widget(int X,int Y,int W,int H) {
Fl_Grid *g = new Fl_Grid(X,Y,W,H);
g->layout(3, 3);
-// g->show_grid(1, FL_RED);
+ g->show_grid(1, FL_RED);
Fl_Group::current(0);
return g;
}
@@ -59,12 +60,16 @@ void Fl_Grid_Type::copy_properties()
int rg, cg;
s->gap(&rg, &cg);
d->gap(rg, cg);
+ // TODO: lots to do!
}
void Fl_Grid_Type::write_properties(Fd_Project_Writer &f)
{
super::write_properties(f);
Fl_Grid* grid = (Fl_Grid*)o;
+ int i, rows = grid->rows(), cols = grid->cols();
+ f.write_indent(level+1);
+ f.write_string("dimensions {%d %d}", rows, cols);
int lm, tm, rm, bm;
grid->margin(&lm, &tm, &rm, &bm);
if (lm!=0 || tm!=0 || rm!=0 || bm!=0)
@@ -73,19 +78,37 @@ void Fl_Grid_Type::write_properties(Fd_Project_Writer &f)
grid->gap(&rg, &cg);
if (rg!=0 || cg!=0)
f.write_string("gap {%d %d}", rg, cg);
+ for (i=0; i<rows; i++) if (grid->row_height(i)!=0) break;
+ if (i<rows) {
+ f.write_indent(level+1);
+ f.write_string("rowheights {");
+ for (i=0; i<rows; i++) f.write_string("%d", grid->row_height(i));
+ f.write_string("}");
+ }
+ // TODO: add row_weight, row_gap, col_width, col_weight, col_gap
}
void Fl_Grid_Type::read_property(Fd_Project_Reader &f, const char *c)
{
Fl_Grid* grid = (Fl_Grid*)o;
- if (!strcmp(c,"margin")) {
+ if (!strcmp(c,"dimensions")) {
+ int rows = 3, cols = 3;
+ if (sscanf(f.read_word(),"%d %d", &rows, &cols) == 2)
+ grid->layout(rows, cols);
+ } else if (!strcmp(c,"margin")) {
int lm, tm, rm, bm;
if (sscanf(f.read_word(),"%d %d %d %d", &lm, &tm, &rm, &bm) == 4)
grid->margin(lm, tm, rm, bm);
} else if (!strcmp(c,"gap")) {
int rg, cg;
- if (sscanf(f.read_word(),"%d %d", &rg, &cg))
+ if (sscanf(f.read_word(),"%d %d", &rg, &cg) == 2)
grid->gap(rg, cg);
+ } else if (!strcmp(c,"rowheights")) {
+ int rows = grid->rows();
+ f.read_word(1); // "{"
+ for (int i=0; i<rows; i++) grid->row_height(i, f.read_int());
+ f.read_word(1); // "}"
+ // TODO: add row_weight, row_gap, col_width, col_weight, col_gap
} else {
super::read_property(f, c);
}
@@ -95,25 +118,44 @@ void Fl_Grid_Type::write_parent_properties(Fd_Project_Writer &f, Fl_Type *child,
Fl_Grid *grid;
Fl_Widget *child_widget;
Fl_Grid::Cell *cell;
- if (!child->is_true_widget()) goto err;
+ if (!child->is_true_widget()) return super::write_parent_properties(f, child, true);
grid = (Fl_Grid*)o;
child_widget = ((Fl_Widget_Type*)child)->o;
cell = grid->cell(child_widget);
- if (!cell) goto err;
+ if (!cell) return super::write_parent_properties(f, child, true);
if (encapsulate) {
f.write_indent(level+2);
f.write_string("parent_properties {");
}
f.write_indent(level+3);
f.write_string("location {%d %d}", cell->row(), cell->col());
+ int v = cell->colspan();
+ if (v>1) {
+ f.write_indent(level+3);
+ f.write_string("colspan %d", v);
+ }
+ v = cell->rowspan();
+ if (v>1) {
+ f.write_indent(level+3);
+ f.write_string("rowspan %d", v);
+ }
+ v = (int)cell->align();
+ if (v!=FL_GRID_FILL) {
+ f.write_indent(level+3);
+ f.write_string("align %d", v);
+ }
+ int min_w = 0, min_h = 0;
+ cell->minimum_size(&min_w, &min_h);
+ if (min_w!=20 || min_h!=20) {
+ f.write_indent(level+3);
+ f.write_string("minsize {%d %d}", min_w, min_h);
+ }
super::write_parent_properties(f, child, false);
if (encapsulate) {
f.write_indent(level+2);
f.write_string("}");
}
return;
-err:
- super::write_parent_properties(f, child, true);
}
void Fl_Grid_Type::read_parent_properties(Fd_Project_Reader &f, Fl_Type *child, const char *property) {
@@ -130,7 +172,30 @@ void Fl_Grid_Type::read_parent_properties(Fd_Project_Reader &f, Fl_Type *child,
sscanf(value, "%d %d", &row, &col);
property = f.read_word();
}
- if (row>=0 && col>=0) grid->widget(child_widget, row, col, rowspan, colspan, (Fl_Grid_Align)align);
+ if (!strcmp(property, "colspan")) {
+ colspan = atoi(f.read_word());
+ property = f.read_word();
+ }
+ if (!strcmp(property, "rowspan")) {
+ rowspan = atoi(f.read_word());
+ property = f.read_word();
+ }
+ if (!strcmp(property, "align")) {
+ align = atoi(f.read_word());
+ property = f.read_word();
+ }
+ if (row>=0 && col>=0) {
+ Fl_Grid::Cell *cell = grid->widget(child_widget, row, col, rowspan, colspan, (Fl_Grid_Align)align);
+ if (cell) {
+ int min_w = 20, min_h = 20;
+ if (!strcmp(property, "minsize")) {
+ const char *value = f.read_word();
+ sscanf(value, "%d %d", &min_w, &min_h);
+ property = f.read_word();
+ }
+ cell->minimum_size(min_w, min_h);
+ }
+ }
super::read_parent_properties(f, child, property);
}
@@ -138,7 +203,8 @@ void Fl_Grid_Type::write_code1(Fd_Code_Writer& f) {
const char *var = name() ? name() : "o";
Fl_Grid* grid = (Fl_Grid*)o;
Fl_Widget_Type::write_code1(f);
- f.write_c("%s%s->layout(%d, %d);\n", f.indent(), var, grid->rows(), grid->cols());
+ int i, rows = grid->rows(), cols = grid->cols();
+ f.write_c("%s%s->layout(%d, %d);\n", f.indent(), var, rows, cols);
int lm, tm, rm, bm;
grid->margin(&lm, &tm, &rm, &bm);
if (lm!=0 || tm!=0 || rm!=0 || bm!=0)
@@ -147,16 +213,34 @@ void Fl_Grid_Type::write_code1(Fd_Code_Writer& f) {
grid->gap(&rg, &cg);
if (rg!=0 || cg!=0)
f.write_c("%s%s->gap(%d, %d);\n", f.indent(), var, rg, cg);
+ for (i=0; i<rows; i++) if (grid->row_height(i)!=0) break;
+ if (i<rows) {
+ f.write_c("%sstatic const int rowheights[] = { %d", f.indent(), grid->row_height(0));
+ for (i=1; i<rows; i++) f.write_c(", %d", grid->row_height(i));
+ f.write_c(" };\n");
+ f.write_c("%s%s->row_height(rowheights, %d);\n", f.indent(), var, rows);
+ }
+ // TODO: add row_weight, row_gap, col_width, col_weight, col_gap
}
void Fl_Grid_Type::write_code2(Fd_Code_Writer& f) {
const char *var = name() ? name() : "o";
Fl_Grid* grid = (Fl_Grid*)o;
+ bool first_cell = true;
for (int i=0; i<grid->children(); i++) {
Fl_Widget *c = grid->child(i);
Fl_Grid::Cell *cell = grid->cell(c);
if (cell) {
- f.write_c("%s%s->widget(%s->child(%d), %d, %d);\n", f.indent(), var, var, i, cell->row(), cell->col());
+ if (first_cell) {
+ f.write_c("%sFl_Grid::Cell *cell = NULL;\n", f.indent());
+ first_cell = false;
+ }
+ f.write_c("%scell = %s->widget(%s->child(%d), %d, %d, %d, %d, %d);\n",
+ f.indent(), var, var, i, cell->row(), cell->col(),
+ cell->rowspan(), cell->colspan(), cell->align());
+ int min_w = 20, min_h = 20;
+ cell->minimum_size(&min_w, &min_h);
+ f.write_c("%sif (cell) cell->minimum_size(%d, %d);\n", f.indent(), min_w, min_h);
}
}
super::write_code2(f);
@@ -192,12 +276,17 @@ void Fl_Grid_Type::child_resized(Fl_Widget_Type *child_type) {
Fl_Grid *grid = (Fl_Grid*)o;
Fl_Widget *child = child_type->o;
Fl_Grid::Cell *cell = grid->cell(child);
- if (cell) {
- short r = cell->row(), c = cell->col(), rs = cell->rowspan(), cs = cell->colspan();
- Fl_Grid_Align a = cell->align();
- grid->remove_cell(r, c);
- grid->widget(child, r, c, rs, cs, a);
- } // else unmanaged by Fl_Grid
+ if (cell && ((cell->align()&FL_GRID_HORIZONTAL)==0)) {
+ int min_w = 0, min_h = 0;
+ cell->minimum_size(&min_w, &min_h);
+ cell->minimum_size(min_w, child->h());
+ }
+ if (cell && ((cell->align()&FL_GRID_VERTICAL)==0)) {
+ int min_w = 0, min_h = 0;
+ cell->minimum_size(&min_w, &min_h);
+ cell->minimum_size(child->w(), min_h);
+ }
+ // TODO: if the user resizes an FL_GRID_FILL widget, should we change the alignment?
}
void grid_cb(Fl_Value_Input* i, void* v, int what) {
@@ -298,6 +387,8 @@ void grid_cols_cb(Fluid_Coord_Input* i, void* v) {
grid_cb(i, v, 7);
}
+extern Fluid_Coord_Input *widget_grid_row_input, *widget_grid_col_input;
+
void grid_child_cb(Fluid_Coord_Input* i, void* v, int what) {
if ( !current_widget
|| !current_widget->parent
@@ -315,32 +406,41 @@ void grid_child_cb(Fluid_Coord_Input* i, void* v, int what) {
case 9: v = cell->col(); break;
case 10: v = cell->rowspan(); break;
case 11: v = cell->colspan(); break;
+ case 12: cell->minimum_size(&v, NULL); break;
+ case 13: cell->minimum_size(NULL, &v); break;
}
}
i->value(v);
} else {
- int mod = 0;
- int v2 = 0, old_v = -1, v = (int)i->value();
+ int v2 = -1, old_v = -1, v = i->value();
+ if (i==widget_grid_row_input) v2 = widget_grid_col_input->value();
+ if (i==widget_grid_col_input) v2 = widget_grid_row_input->value();
Fl_Grid::Cell *cell = g->cell(current_widget->o);
+ Fl_Grid::Cell *new_cell = NULL;
if (cell) {
switch (what) {
case 8: old_v = cell->row(); v2 = cell->col(); break;
case 9: old_v = cell->col(); v2 = cell->row(); break;
case 10: old_v = cell->rowspan(); break;
case 11: old_v = cell->colspan(); break;
+ case 12: cell->minimum_size(&old_v, &v2); break;
+ case 13: cell->minimum_size(&v2, &old_v); break;
}
}
if (old_v != v) {
switch (what) {
- case 8: g->widget(current_widget->o, v, v2); break;
- case 9: g->widget(current_widget->o, v2, v); break;
- case 10: cell->rowspan(v); break;
- case 11: cell->colspan(v); break;
+ case 8: if (v>=0 && v2>=0) new_cell = g->widget(current_widget->o, v, v2); break;
+ case 9: if (v>=0 && v2>=0) new_cell = g->widget(current_widget->o, v2, v); break;
+ case 10: if (cell) cell->rowspan(v); break;
+ case 11: if (cell) cell->colspan(v); break;
+ case 12: if (cell) cell->minimum_size(v, v2); break;
+ case 13: if (cell) cell->minimum_size(v2, v); break;
}
+ if (!cell && new_cell)
+ new_cell->minimum_size(20, 20);
g->need_layout(true);
g->redraw();
- mod = 1;
- if (mod) set_modflag(1);
+ set_modflag(1);
}
}
}
@@ -356,10 +456,47 @@ void grid_set_rowspan_cb(Fluid_Coord_Input* i, void* v) {
void grid_set_colspan_cb(Fluid_Coord_Input* i, void* v) {
grid_child_cb(i, v, 11);
}
+void grid_set_min_wdt_cb(Fluid_Coord_Input* i, void* v) {
+ grid_child_cb(i, v, 12);
+}
+void grid_set_min_hgt_cb(Fluid_Coord_Input* i, void* v) {
+ grid_child_cb(i, v, 13);
+}
+
void grid_align_cb(Fl_Choice* i, void* v) {
+ if ( !current_widget
+ || !current_widget->parent
+ || !current_widget->parent->is_a(ID_Grid))
+ {
+ return;
+ }
+ Fl_Grid *g = ((Fl_Grid*)((Fl_Widget_Type*)current_widget->parent)->o);
+ if (v == LOAD) {
+ int a = FL_GRID_FILL;
+ Fl_Grid::Cell *cell = g->cell(current_widget->o);
+ if (cell) {
+ a = cell->align();
+ }
+ const Fl_Menu_Item *mi = i->find_item_with_argument(a);
+ if (mi) i->value(mi);
+ } else {
+ int v = FL_GRID_FILL, old_v = FL_GRID_FILL;
+ const Fl_Menu_Item *mi = i->mvalue();
+ if (mi) v = (int)mi->argument();
+ Fl_Grid::Cell *cell = g->cell(current_widget->o);
+ if (cell) {
+ old_v = cell->align();
+ }
+ if (old_v != v) {
+ cell->align((Fl_Grid_Align)v);
+ g->need_layout(true);
+ g->redraw();
+ set_modflag(1);
+ }
+ }
}
-void grid_row_height(Fluid_Coord_Input* i, void* v) {
+void grid_row_col_cb(Fluid_Coord_Input* i, void* v, int what) {
if ( !current_widget
|| !current_widget->parent
|| !current_widget->parent->is_a(ID_Grid))
@@ -370,25 +507,63 @@ void grid_row_height(Fluid_Coord_Input* i, void* v) {
Fl_Grid::Cell *cell = g->cell(current_widget->o);
if (v == LOAD) {
if (cell) {
- i->value(g->row_height(cell->row()));
+ int v = 0;
+ switch (what) {
+ case 0: v = g->row_height(cell->row()); break;
+ case 1: v = g->row_weight(cell->row()); break;
+ case 2: v = g->row_gap(cell->row()); break;
+ case 3: v = g->col_width(cell->col()); break;
+ case 4: v = g->col_weight(cell->col()); break;
+ case 5: v = g->col_gap(cell->col()); break;
+ }
+ i->value(v);
i->activate();
} else {
i->deactivate();
}
} else {
if (cell) {
- g->row_height(cell->row(), i->value());
+ int v = i->value(), old_v = 0;
+ switch (what) {
+ case 0: old_v = g->row_height(cell->row()); break;
+ case 1: old_v = g->row_weight(cell->row()); break;
+ case 2: old_v = g->row_gap(cell->row()); break;
+ case 3: old_v = g->col_width(cell->col()); break;
+ case 4: old_v = g->col_weight(cell->col()); break;
+ case 5: old_v = g->col_gap(cell->col()); break;
+ }
+ if (old_v != v) {
+ switch (what) {
+ case 0: g->row_height(cell->row(), v); break;
+ case 1: g->row_weight(cell->row(), v); break;
+ case 2: g->row_gap(cell->row(), v); break;
+ case 3: g->col_width(cell->col(), v); break;
+ case 4: g->col_weight(cell->col(), v); break;
+ case 5: g->col_gap(cell->col(), v); break;
+ }
+ g->need_layout(true);
+ g->redraw();
+ set_modflag(1);
+ }
}
}
}
+void grid_row_height(Fluid_Coord_Input* i, void* v) {
+ grid_row_col_cb(i, v, 0);
+}
void grid_row_weight(Fluid_Coord_Input* i, void* v) {
+ grid_row_col_cb(i, v, 1);
}
void grid_row_gap(Fluid_Coord_Input* i, void* v) {
+ grid_row_col_cb(i, v, 2);
}
void grid_col_width(Fluid_Coord_Input* i, void* v) {
+ grid_row_col_cb(i, v, 3);
}
void grid_col_weight(Fluid_Coord_Input* i, void* v) {
+ grid_row_col_cb(i, v, 4);
}
void grid_col_gap(Fluid_Coord_Input* i, void* v) {
+ grid_row_col_cb(i, v, 5);
}
diff --git a/fluid/widget_panel.cxx b/fluid/widget_panel.cxx
index fc907946d..84bcf75e4 100644
--- a/fluid/widget_panel.cxx
+++ b/fluid/widget_panel.cxx
@@ -118,10 +118,13 @@ Fl_Tabs *widget_tabs_repo=(Fl_Tabs *)0;
Fl_Group *widget_tab_grid=(Fl_Group *)0;
+Fluid_Coord_Input *widget_grid_row_input=(Fluid_Coord_Input *)0;
+
+Fluid_Coord_Input *widget_grid_col_input=(Fluid_Coord_Input *)0;
+
Fl_Menu_Item menu_Align[] = {
{"GRID_CENTER", 0, 0, (void*)(FL_GRID_CENTER), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
{"GRID_FILL", 0, 0, (void*)(FL_GRID_FILL), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
- {"GRID_PROPORTIONAL", 0, 0, (void*)(FL_GRID_PROPORTIONAL), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
{"GRID_HORIZONTAL", 0, 0, (void*)(FL_GRID_HORIZONTAL), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
{"GRID_VERTICAL", 0, 0, (void*)(FL_GRID_VERTICAL), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
{"GRID_LEFT", 0, 0, (void*)(FL_GRID_LEFT), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
@@ -1138,37 +1141,42 @@ access the Widget pointer and \'v\' to access the user value.");
{ widget_tab_grid = new Fl_Group(10, 30, 400, 330, "Grid");
widget_tab_grid->labelsize(11);
widget_tab_grid->callback((Fl_Callback*)propagate_load);
+ { Fl_Box* o = new Fl_Box(25, 43, 370, 28, "The Fl_Grid implementation in FLUID is still experimental!");
+ o->labelfont(1);
+ o->labelsize(11);
+ o->labelcolor((Fl_Color)1);
+ } // Fl_Box* o
{ Fl_Group* o = new Fl_Group(96, 110, 314, 20, "Location:");
o->labelfont(1);
o->labelsize(11);
o->callback((Fl_Callback*)propagate_load);
o->align(Fl_Align(FL_ALIGN_LEFT));
- { Fluid_Coord_Input* o = new Fluid_Coord_Input(96, 110, 55, 20, "Row:");
- o->box(FL_DOWN_BOX);
- o->color(FL_BACKGROUND2_COLOR);
- o->selection_color(FL_SELECTION_COLOR);
- o->labeltype(FL_NORMAL_LABEL);
- o->labelfont(0);
- o->labelsize(11);
- o->labelcolor(FL_FOREGROUND_COLOR);
- o->textsize(11);
- o->callback((Fl_Callback*)grid_set_row_cb);
- o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- o->when(FL_WHEN_RELEASE);
- } // Fluid_Coord_Input* o
- { Fluid_Coord_Input* o = new Fluid_Coord_Input(156, 110, 55, 20, "Column:");
- o->box(FL_DOWN_BOX);
- o->color(FL_BACKGROUND2_COLOR);
- o->selection_color(FL_SELECTION_COLOR);
- o->labeltype(FL_NORMAL_LABEL);
- o->labelfont(0);
- o->labelsize(11);
- o->labelcolor(FL_FOREGROUND_COLOR);
- o->textsize(11);
- o->callback((Fl_Callback*)grid_set_col_cb);
- o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- o->when(FL_WHEN_RELEASE);
- } // Fluid_Coord_Input* o
+ { widget_grid_row_input = new Fluid_Coord_Input(96, 110, 55, 20, "Row:");
+ widget_grid_row_input->box(FL_DOWN_BOX);
+ widget_grid_row_input->color(FL_BACKGROUND2_COLOR);
+ widget_grid_row_input->selection_color(FL_SELECTION_COLOR);
+ widget_grid_row_input->labeltype(FL_NORMAL_LABEL);
+ widget_grid_row_input->labelfont(0);
+ widget_grid_row_input->labelsize(11);
+ widget_grid_row_input->labelcolor(FL_FOREGROUND_COLOR);
+ widget_grid_row_input->textsize(11);
+ widget_grid_row_input->callback((Fl_Callback*)grid_set_row_cb);
+ widget_grid_row_input->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ widget_grid_row_input->when(FL_WHEN_RELEASE);
+ } // Fluid_Coord_Input* widget_grid_row_input
+ { widget_grid_col_input = new Fluid_Coord_Input(156, 110, 55, 20, "Column:");
+ widget_grid_col_input->box(FL_DOWN_BOX);
+ widget_grid_col_input->color(FL_BACKGROUND2_COLOR);
+ widget_grid_col_input->selection_color(FL_SELECTION_COLOR);
+ widget_grid_col_input->labeltype(FL_NORMAL_LABEL);
+ widget_grid_col_input->labelfont(0);
+ widget_grid_col_input->labelsize(11);
+ widget_grid_col_input->labelcolor(FL_FOREGROUND_COLOR);
+ widget_grid_col_input->textsize(11);
+ widget_grid_col_input->callback((Fl_Callback*)grid_set_col_cb);
+ widget_grid_col_input->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ widget_grid_col_input->when(FL_WHEN_RELEASE);
+ } // Fluid_Coord_Input* widget_grid_col_input
{ Fl_Choice* o = new Fl_Choice(215, 110, 185, 20, "Align:");
o->down_box(FL_BORDER_BOX);
o->labelsize(11);
@@ -1188,7 +1196,7 @@ access the Widget pointer and \'v\' to access the user value.");
o->labelsize(12);
o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Box* o
- { Fl_Group* o = new Fl_Group(96, 145, 314, 20, "Size:");
+ { Fl_Group* o = new Fl_Group(96, 145, 314, 20, "Cell Span:");
o->labelfont(1);
o->labelsize(11);
o->callback((Fl_Callback*)propagate_load);
@@ -1225,17 +1233,54 @@ access the Widget pointer and \'v\' to access the user value.");
} // Fluid_Coord_Input* o
o->end();
} // Fl_Group* o
- { Fl_Box* o = new Fl_Box(96, 179, 155, 20, "-- Grid --");
+ { Fl_Group* o = new Fl_Group(96, 180, 314, 20, "Size:");
+ o->labelfont(1);
+ o->labelsize(11);
+ o->callback((Fl_Callback*)propagate_load);
+ o->align(Fl_Align(FL_ALIGN_LEFT));
+ { Fl_Box* o = new Fl_Box(400, 180, 1, 20);
+ o->hide();
+ Fl_Group::current()->resizable(o);
+ } // Fl_Box* o
+ { Fluid_Coord_Input* o = new Fluid_Coord_Input(96, 180, 55, 20, "Min.Width:");
+ o->box(FL_DOWN_BOX);
+ o->color(FL_BACKGROUND2_COLOR);
+ o->selection_color(FL_SELECTION_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(11);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->textsize(11);
+ o->callback((Fl_Callback*)grid_set_min_wdt_cb);
+ o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ o->when(FL_WHEN_RELEASE);
+ } // Fluid_Coord_Input* o
+ { Fluid_Coord_Input* o = new Fluid_Coord_Input(156, 180, 55, 20, "Min.Height:");
+ o->box(FL_DOWN_BOX);
+ o->color(FL_BACKGROUND2_COLOR);
+ o->selection_color(FL_SELECTION_COLOR);
+ o->labeltype(FL_NORMAL_LABEL);
+ o->labelfont(0);
+ o->labelsize(11);
+ o->labelcolor(FL_FOREGROUND_COLOR);
+ o->textsize(11);
+ o->callback((Fl_Callback*)grid_set_min_hgt_cb);
+ o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+ o->when(FL_WHEN_RELEASE);
+ } // Fluid_Coord_Input* o
+ o->end();
+ } // Fl_Group* o
+ { Fl_Box* o = new Fl_Box(96, 214, 155, 20, "-- Grid --");
o->labelfont(1);
o->labelsize(12);
o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
} // Fl_Box* o
- { Fl_Group* o = new Fl_Group(96, 215, 314, 20, "Row:");
+ { Fl_Group* o = new Fl_Group(96, 250, 314, 20, "Row:");
o->labelfont(1);
o->labelsize(11);
o->callback((Fl_Callback*)propagate_load);
o->align(Fl_Align(FL_ALIGN_LEFT));
- { Fluid_Coord_Input* o = new Fluid_Coord_Input(96, 215, 55, 20, "Index");
+ { Fluid_Coord_Input* o = new Fluid_Coord_Input(96, 250, 55, 20, "Index");
o->box(FL_DOWN_BOX);
o->color(FL_BACKGROUND2_COLOR);
o->selection_color(FL_SELECTION_COLOR);
@@ -1248,7 +1293,7 @@ access the Widget pointer and \'v\' to access the user value.");
o->when(FL_WHEN_RELEASE);
o->deactivate();
} // Fluid_Coord_Input* o
- { Fluid_Coord_Input* o = new Fluid_Coord_Input(156, 215, 55, 20, "Height:");
+ { Fluid_Coord_Input* o = new Fluid_Coord_Input(156, 250, 55, 20, "Height:");
o->box(FL_DOWN_BOX);
o->color(FL_BACKGROUND2_COLOR);
o->selection_color(FL_SELECTION_COLOR);
@@ -1261,7 +1306,7 @@ access the Widget pointer and \'v\' to access the user value.");
o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
o->when(FL_WHEN_RELEASE);
} // Fluid_Coord_Input* o
- { Fluid_Coord_Input* o = new Fluid_Coord_Input(216, 215, 55, 20, "Weight:");
+ { Fluid_Coord_Input* o = new Fluid_Coord_Input(216, 250, 55, 20, "Weight:");
o->box(FL_DOWN_BOX);
o->color(FL_BACKGROUND2_COLOR);
o->selection_color(FL_SELECTION_COLOR);
@@ -1274,7 +1319,7 @@ access the Widget pointer and \'v\' to access the user value.");
o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
o->when(FL_WHEN_RELEASE);
} // Fluid_Coord_Input* o
- { Fluid_Coord_Input* o = new Fluid_Coord_Input(276, 215, 55, 20, "Gap:");
+ { Fluid_Coord_Input* o = new Fluid_Coord_Input(276, 250, 55, 20, "Gap:");
o->box(FL_DOWN_BOX);
o->color(FL_BACKGROUND2_COLOR);
o->selection_color(FL_SELECTION_COLOR);
@@ -1287,18 +1332,18 @@ access the Widget pointer and \'v\' to access the user value.");
o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
o->when(FL_WHEN_RELEASE);
} // Fluid_Coord_Input* o
- { Fl_Box* o = new Fl_Box(400, 215, 1, 20);
+ { Fl_Box* o = new Fl_Box(400, 250, 1, 20);
o->hide();
Fl_Group::current()->resizable(o);
} // Fl_Box* o
o->end();
} // Fl_Group* o
- { Fl_Group* o = new Fl_Group(96, 250, 314, 20, "Column:");
+ { Fl_Group* o = new Fl_Group(96, 285, 314, 20, "Column:");
o->labelfont(1);
o->labelsize(11);
o->callback((Fl_Callback*)propagate_load);
o->align(Fl_Align(FL_ALIGN_LEFT));
- { Fluid_Coord_Input* o = new Fluid_Coord_Input(96, 250, 55, 20, "Index");
+ { Fluid_Coord_Input* o = new Fluid_Coord_Input(96, 285, 55, 20, "Index");
o->box(FL_DOWN_BOX);
o->color(FL_BACKGROUND2_COLOR);
o->selection_color(FL_SELECTION_COLOR);
@@ -1311,7 +1356,7 @@ access the Widget pointer and \'v\' to access the user value.");
o->when(FL_WHEN_RELEASE);
o->deactivate();
} // Fluid_Coord_Input* o
- { Fluid_Coord_Input* o = new Fluid_Coord_Input(156, 250, 55, 20, "Width:");
+ { Fluid_Coord_Input* o = new Fluid_Coord_Input(156, 285, 55, 20, "Width:");
o->box(FL_DOWN_BOX);
o->color(FL_BACKGROUND2_COLOR);
o->selection_color(FL_SELECTION_COLOR);
@@ -1324,7 +1369,7 @@ access the Widget pointer and \'v\' to access the user value.");
o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
o->when(FL_WHEN_RELEASE);
} // Fluid_Coord_Input* o
- { Fluid_Coord_Input* o = new Fluid_Coord_Input(216, 250, 55, 20, "Weight:");
+ { Fluid_Coord_Input* o = new Fluid_Coord_Input(216, 285, 55, 20, "Weight:");
o->box(FL_DOWN_BOX);
o->color(FL_BACKGROUND2_COLOR);
o->selection_color(FL_SELECTION_COLOR);
@@ -1337,7 +1382,7 @@ access the Widget pointer and \'v\' to access the user value.");
o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
o->when(FL_WHEN_RELEASE);
} // Fluid_Coord_Input* o
- { Fluid_Coord_Input* o = new Fluid_Coord_Input(276, 250, 55, 20, "Gap:");
+ { Fluid_Coord_Input* o = new Fluid_Coord_Input(276, 285, 55, 20, "Gap:");
o->box(FL_DOWN_BOX);
o->color(FL_BACKGROUND2_COLOR);
o->selection_color(FL_SELECTION_COLOR);
@@ -1350,17 +1395,12 @@ access the Widget pointer and \'v\' to access the user value.");
o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
o->when(FL_WHEN_RELEASE);
} // Fluid_Coord_Input* o
- { Fl_Box* o = new Fl_Box(400, 250, 1, 20);
+ { Fl_Box* o = new Fl_Box(400, 285, 1, 20);
o->hide();
Fl_Group::current()->resizable(o);
} // Fl_Box* o
o->end();
} // Fl_Group* o
- { Fl_Box* o = new Fl_Box(25, 43, 370, 28, "The Fl_Grid implementation in FLUID is still experimental!");
- o->labelfont(1);
- o->labelsize(11);
- o->labelcolor((Fl_Color)1);
- } // Fl_Box* o
widget_tab_grid->end();
} // Fl_Group* widget_tab_grid
o->hide();
diff --git a/fluid/widget_panel.fl b/fluid/widget_panel.fl
index 6c3b199e4..0fa9caafd 100644
--- a/fluid/widget_panel.fl
+++ b/fluid/widget_panel.fl
@@ -874,7 +874,7 @@ wCallback->do_callback(wCallback, v);} open
}
}
}
- Fl_Tabs widget_tabs_repo {selected
+ Fl_Tabs widget_tabs_repo {open
xywh {10 10 400 350} hide
code0 {o->hide();}
} {
@@ -886,26 +886,30 @@ wCallback->do_callback(wCallback, v);} open
callback propagate_load open
xywh {10 30 400 330} labelsize 11
} {
+ Fl_Box {} {
+ label {The Fl_Grid implementation in FLUID is still experimental!}
+ xywh {25 43 370 28} labelfont 1 labelsize 11 labelcolor 1
+ }
Fl_Group {} {
label {Location:}
callback propagate_load open
xywh {96 110 314 20} labelfont 1 labelsize 11 align 4
} {
- Fl_Input {} {
+ Fl_Input widget_grid_row_input {
label {Row:}
callback grid_set_row_cb
xywh {96 110 55 20} labelsize 11 align 5 textsize 11
class Fluid_Coord_Input
}
- Fl_Input {} {
+ Fl_Input widget_grid_col_input {
label {Column:}
- callback grid_set_col_cb
+ callback grid_set_col_cb selected
xywh {156 110 55 20} labelsize 11 align 5 textsize 11
class Fluid_Coord_Input
}
Fl_Choice {} {
label {Align:}
- callback grid_align_cb
+ callback grid_align_cb open
xywh {215 110 185 20} down_box BORDER_BOX labelsize 11 align 5 textsize 11
} {
MenuItem {} {
@@ -919,11 +923,6 @@ wCallback->do_callback(wCallback, v);} open
xywh {10 10 31 20} labelsize 11
}
MenuItem {} {
- label GRID_PROPORTIONAL
- user_data FL_GRID_PROPORTIONAL user_data_type long
- xywh {10 10 31 20} labelsize 11
- }
- MenuItem {} {
label GRID_HORIZONTAL
user_data FL_GRID_HORIZONTAL user_data_type long
xywh {10 10 31 20} labelsize 11
@@ -983,7 +982,7 @@ wCallback->do_callback(wCallback, v);} open
xywh {96 74 155 20} labelfont 1 labelsize 12 align 20
}
Fl_Group {} {
- label {Size:}
+ label {Cell Span:}
callback propagate_load open
xywh {96 145 314 20} labelfont 1 labelsize 11 align 4
} {
@@ -1003,81 +1002,98 @@ wCallback->do_callback(wCallback, v);} open
class Fluid_Coord_Input
}
}
+ Fl_Group {} {
+ label {Size:}
+ callback propagate_load open
+ xywh {96 180 314 20} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Box {} {
+ xywh {400 180 1 20} hide resizable
+ }
+ Fl_Input {} {
+ label {Min.Width:}
+ callback grid_set_min_wdt_cb
+ xywh {96 180 55 20} labelsize 11 align 5 textsize 11
+ class Fluid_Coord_Input
+ }
+ Fl_Input {} {
+ label {Min.Height:}
+ callback grid_set_min_hgt_cb
+ xywh {156 180 55 20} labelsize 11 align 5 textsize 11
+ class Fluid_Coord_Input
+ }
+ }
Fl_Box {} {
label {-- Grid --}
- xywh {96 179 155 20} labelfont 1 labelsize 12 align 20
+ xywh {96 214 155 20} labelfont 1 labelsize 12 align 20
}
Fl_Group {} {
label {Row:}
callback propagate_load open
- xywh {96 215 314 20} labelfont 1 labelsize 11 align 4
+ xywh {96 250 314 20} labelfont 1 labelsize 11 align 4
} {
Fl_Input {} {
label Index
- xywh {96 215 55 20} labelsize 11 align 5 textsize 11 deactivate
+ xywh {96 250 55 20} labelsize 11 align 5 textsize 11 deactivate
class Fluid_Coord_Input
}
Fl_Input {} {
label {Height:}
callback grid_row_height
- xywh {156 215 55 20} labelsize 11 align 5 textsize 11
+ xywh {156 250 55 20} labelsize 11 align 5 textsize 11
class Fluid_Coord_Input
}
Fl_Input {} {
label {Weight:}
callback grid_row_weight
- xywh {216 215 55 20} labelsize 11 align 5 textsize 11
+ xywh {216 250 55 20} labelsize 11 align 5 textsize 11
class Fluid_Coord_Input
}
Fl_Input {} {
label {Gap:}
callback grid_row_gap
- xywh {276 215 55 20} labelsize 11 align 5 textsize 11
+ xywh {276 250 55 20} labelsize 11 align 5 textsize 11
class Fluid_Coord_Input
}
Fl_Box {} {
- xywh {400 215 1 20} hide resizable
+ xywh {400 250 1 20} hide resizable
}
}
Fl_Group {} {
label {Column:}
callback propagate_load open
- xywh {96 250 314 20} labelfont 1 labelsize 11 align 4
+ xywh {96 285 314 20} labelfont 1 labelsize 11 align 4
} {
Fl_Input {} {
label Index
- xywh {96 250 55 20} labelsize 11 align 5 textsize 11 deactivate
+ xywh {96 285 55 20} labelsize 11 align 5 textsize 11 deactivate
class Fluid_Coord_Input
}
Fl_Input {} {
label {Width:}
callback grid_col_width
- xywh {156 250 55 20} labelsize 11 align 5 textsize 11
+ xywh {156 285 55 20} labelsize 11 align 5 textsize 11
class Fluid_Coord_Input
}
Fl_Input {} {
label {Weight:}
callback grid_col_weight
- xywh {216 250 55 20} labelsize 11 align 5 textsize 11
+ xywh {216 285 55 20} labelsize 11 align 5 textsize 11
class Fluid_Coord_Input
}
Fl_Input {} {
label {Gap:}
callback grid_col_gap
- xywh {276 250 55 20} labelsize 11 align 5 textsize 11
+ xywh {276 285 55 20} labelsize 11 align 5 textsize 11
class Fluid_Coord_Input
}
Fl_Box {} {
- xywh {400 250 1 20} hide resizable
+ xywh {400 285 1 20} hide resizable
}
}
- Fl_Box {} {
- label {The Fl_Grid implementation in FLUID is still experimental!}
- xywh {25 43 370 28} labelfont 1 labelsize 11 labelcolor 1
- }
}
}
- Fl_Group {} {open
+ Fl_Group {} {
xywh {10 370 400 20} labelsize 11
} {
Fl_Button wLiveMode {
diff --git a/fluid/widget_panel.fl.bak b/fluid/widget_panel.fl.bak
new file mode 100644
index 000000000..c016a073a
--- /dev/null
+++ b/fluid/widget_panel.fl.bak
@@ -0,0 +1,1167 @@
+# data file for the Fltk User Interface Designer (fluid)
+version 1.0400
+header_name {.h}
+code_name {.cxx}
+comment {//
+// Widget panel for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2021 by Bill Spitzak and others.
+//
+// This library is free software. Distribution and use rights are outlined in
+// the file "COPYING" which should have been included with this file. If this
+// file is missing or damaged, see the license at:
+//
+// https://www.fltk.org/COPYING.php
+//
+// Please see the following page on how to report bugs and issues:
+//
+// https://www.fltk.org/bugs.php
+//
+} {in_source in_header
+}
+
+decl {\#include "Fl_Widget_Type.h"} {private global
+}
+
+decl {\#include <FL/Fl_Grid.H>} {private global
+}
+
+decl {\#include "custom_widgets.h"} {public global
+}
+
+Function {make_window()} {open
+} {
+ Fl_Window {} {open
+ xywh {459 635 480 320} type Double visible
+ } {
+ Fl_Grid {} {open
+ xywh {25 25 336 228} box DOWN_BOX
+ dimensions {3 3} margin {4 4 4 4} gap {4 4}
+ rowheights { 0 32 0 }
+ } {
+ Fl_Button {} {
+ label Button
+ xywh {31 31 77 62}
+ parent_properties {
+ location {0 0}
+ }
+ }
+ Fl_Button {} {
+ label Button selected
+ xywh {140 124 100 20}
+ parent_properties {
+ location {1 1}
+ align 0
+ minsize {100 20}
+ }
+ }
+ Fl_Button {} {
+ label Button
+ xywh {273 176 82 71}
+ parent_properties {
+ location {2 2}
+ minsize {25 28}
+ }
+ }
+ Fl_Button {} {
+ label Button
+ xywh {112 31 243 62}
+ parent_properties {
+ location {0 1}
+ colspan 2
+ minsize {25 20}
+ }
+ }
+ }
+ }
+}
+
+Function {make_widget_panel()} {
+ comment {Create a panel that can be used with all known widgets} open
+} {
+ Fl_Window {} {
+ comment {Use a Double Window to avoid flickering.} open
+ xywh {566 244 420 400} type Double labelsize 11 align 80 resizable hotspot
+ code0 {o->size_range(o->w(), o->h());} size_range {420 400 0 0} visible
+ } {
+ Fl_Tabs widget_tabs {
+ callback {propagate_load((Fl_Group *)o,v);}
+ xywh {10 10 400 350} selection_color 12 labelsize 11 labelcolor 7 when 0 hide resizable
+ code0 {o->show();}
+ } {
+ Fl_Group {} {
+ label GUI
+ callback propagate_load open
+ xywh {10 30 400 330} labelsize 11 when 0 resizable
+ } {
+ Fl_Group {} {
+ label {Label:}
+ callback propagate_load open
+ xywh {95 40 309 20} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Input {} {
+ callback label_cb
+ tooltip {The label text for the widget.
+Use Ctrl-J for newlines.} xywh {95 40 190 20} labelfont 1 labelsize 11 when 15 textsize 11 resizable
+ }
+ Fl_Choice {} {
+ callback labeltype_cb open
+ tooltip {The label style for the widget.} xywh {285 40 119 20} box THIN_UP_BOX down_box BORDER_BOX labelfont 1 labelsize 11 textsize 11
+ code0 {extern Fl_Menu_Item labeltypemenu[];}
+ code1 {o->menu(labeltypemenu);}
+ } {}
+ }
+ Fl_Group {} {
+ label {Image:}
+ callback propagate_load open
+ xywh {95 65 309 20} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Input {} {
+ callback image_cb
+ tooltip {The active image for the widget.} xywh {95 65 200 20} labelfont 1 labelsize 11 textsize 11 resizable
+ }
+ Fl_Button {} {
+ label {Browse...}
+ callback image_browse_cb
+ tooltip {Click to choose the active image.} xywh {295 65 69 20} labelsize 11
+ }
+ Fl_Button {} {
+ callback compress_image_cb
+ tooltip {store image uncompressed as RGBA data
+or compressed in the original file format} xywh {364 65 20 20} type Toggle
+ code0 {o->image(compressed_pixmap);}
+ code3 {\#include "pixmaps.h"}
+ }
+ Fl_Button {} {
+ callback bind_image_cb
+ tooltip {bind the image to the widget, so it will be deleted automatically} xywh {384 65 20 20} type Toggle
+ code0 {o->image(bind_pixmap);}
+ code3 {\#include "pixmaps.h"}
+ }
+ }
+ Fl_Group {} {
+ label {Inactive:}
+ callback propagate_load open
+ xywh {95 90 309 20} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Input {} {
+ callback inactive_cb
+ tooltip {The inactive image for the widget.} xywh {95 90 200 20} labelfont 1 labelsize 11 textsize 11 resizable
+ }
+ Fl_Button {} {
+ label {Browse...}
+ callback inactive_browse_cb
+ tooltip {Click to choose the inactive image.} xywh {295 90 69 20} labelsize 11
+ }
+ Fl_Button {} {
+ callback compress_deimage_cb
+ tooltip {store image uncompressed as RGBA data
+or compressed in the original file format} xywh {364 90 20 20} type Toggle
+ code0 {o->image(compressed_pixmap);}
+ code3 {\#include "pixmaps.h"}
+ }
+ Fl_Button {} {
+ callback bind_deimage_cb
+ tooltip {bind the image to the widget, so it will be deleted automatically} xywh {384 90 20 20} type Toggle
+ code0 {o->image(bind_pixmap);}
+ code3 {\#include "pixmaps.h"}
+ }
+ }
+ Fl_Group {} {
+ label {Alignment:}
+ callback propagate_load
+ xywh {95 115 310 20} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Button {} {
+ label Clip
+ user_data {(fl_intptr_t)FL_ALIGN_CLIP}
+ callback align_cb
+ tooltip {Clip the label to the inside of the widget.} xywh {95 115 30 20} type Toggle selection_color 8 labelsize 11 align 16
+ }
+ Fl_Button {} {
+ label Wrap
+ user_data {(fl_intptr_t)FL_ALIGN_WRAP}
+ callback align_cb
+ tooltip {Wrap the label text.} xywh {130 115 38 20} type Toggle selection_color 8 labelsize 11
+ }
+ Fl_Button {} {
+ label {@-1<-}
+ user_data {(fl_intptr_t)FL_ALIGN_LEFT}
+ callback align_cb
+ tooltip {Left-align the label.} xywh {278 115 20 20} type Toggle selection_color 8 labelsize 11 labelcolor 8 hide
+ }
+ Fl_Button {} {
+ label {@-1->}
+ user_data {(fl_intptr_t)FL_ALIGN_RIGHT}
+ callback align_cb
+ tooltip {Right-align the label.} xywh {303 115 20 20} type Toggle selection_color 8 labelsize 11 labelcolor 8 hide
+ }
+ Fl_Button {} {
+ label {@-18}
+ user_data {(fl_intptr_t)FL_ALIGN_TOP}
+ callback align_cb
+ tooltip {Top-align the label.} xywh {328 115 20 20} type Toggle selection_color 8 labelsize 11 labelcolor 8 hide
+ }
+ Fl_Button {} {
+ label {@-12}
+ user_data {(fl_intptr_t)FL_ALIGN_BOTTOM}
+ callback align_cb
+ tooltip {Bottom-align the label.} xywh {353 115 20 20} type Toggle selection_color 8 labelsize 11 labelcolor 8 hide
+ }
+ Fl_Choice {} {
+ callback align_text_image_cb open
+ xywh {172 115 110 20} down_box BORDER_BOX labelsize 11 textsize 11
+ } {
+ MenuItem {} {
+ label { Image Alignment }
+ user_data {(fl_intptr_t)0xFFFFFFFF}
+ xywh {145 145 100 20} labelfont 2 labelsize 11 deactivate
+ }
+ MenuItem {} {
+ label {image over text}
+ user_data {(fl_intptr_t)FL_ALIGN_IMAGE_OVER_TEXT}
+ xywh {25 25 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label {text over image}
+ user_data {(fl_intptr_t)FL_ALIGN_TEXT_OVER_IMAGE}
+ xywh {15 15 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label {text next to image}
+ user_data {(fl_intptr_t)FL_ALIGN_TEXT_NEXT_TO_IMAGE}
+ xywh {35 35 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label {image next to text}
+ user_data {(fl_intptr_t)FL_ALIGN_IMAGE_NEXT_TO_TEXT}
+ xywh {45 45 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label {image is backdrop}
+ user_data {(fl_intptr_t)FL_ALIGN_IMAGE_BACKDROP}
+ xywh {55 55 100 20} labelsize 11
+ }
+ }
+ Fl_Choice {} {
+ callback align_position_cb open
+ xywh {288 115 85 20} down_box BORDER_BOX labelsize 11 textsize 11
+ } {
+ MenuItem {} {
+ label { Inside && Outside }
+ user_data {(fl_intptr_t)0xFFFFFFFF}
+ xywh {135 135 100 20} labelfont 2 labelsize 11 deactivate
+ }
+ MenuItem {} {
+ label {top left}
+ user_data {(fl_intptr_t)FL_ALIGN_TOP_LEFT}
+ xywh {45 45 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label top
+ user_data {(fl_intptr_t)FL_ALIGN_TOP}
+ xywh {55 55 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label {top right}
+ user_data {(fl_intptr_t)FL_ALIGN_TOP_RIGHT}
+ xywh {65 65 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label left
+ user_data {(fl_intptr_t)FL_ALIGN_LEFT}
+ xywh {75 75 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label center
+ user_data {(fl_intptr_t)FL_ALIGN_CENTER}
+ xywh {35 35 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label right
+ user_data {(fl_intptr_t)FL_ALIGN_RIGHT}
+ xywh {85 85 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label {bottom left}
+ user_data {(fl_intptr_t)FL_ALIGN_BOTTOM_LEFT}
+ xywh {95 95 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label bottom
+ user_data {(fl_intptr_t)FL_ALIGN_BOTTOM}
+ xywh {105 105 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label {bottom right}
+ user_data {(fl_intptr_t)FL_ALIGN_BOTTOM_RIGHT}
+ xywh {115 115 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label { Outside Alignment }
+ user_data {(fl_intptr_t)0xFFFFFFFF}
+ xywh {125 125 100 20} labelfont 2 labelsize 11 deactivate
+ }
+ MenuItem {} {
+ label {left top}
+ user_data {(fl_intptr_t)FL_ALIGN_LEFT_TOP}
+ xywh {135 135 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label {right top}
+ user_data {(fl_intptr_t)FL_ALIGN_RIGHT_TOP}
+ xywh {145 145 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label {left bottom}
+ user_data {(fl_intptr_t)FL_ALIGN_LEFT_BOTTOM}
+ xywh {155 155 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label {right bottom}
+ user_data {(fl_intptr_t)FL_ALIGN_RIGHT_BOTTOM}
+ xywh {45 45 100 20} labelsize 11
+ }
+ }
+ Fl_Button {} {
+ label {@-3square}
+ user_data {(fl_intptr_t)FL_ALIGN_INSIDE}
+ callback align_cb
+ tooltip {Show the label inside the widget.} xywh {378 115 20 20} type Toggle selection_color 8 labelsize 11 labelcolor 8
+ }
+ Fl_Box {} {
+ xywh {404 115 0 20} labelsize 11 resizable
+ }
+ }
+ Fl_Group {} {
+ label {Position:}
+ callback position_group_cb
+ xywh {95 150 314 20} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Input widget_x_input {
+ label {X:}
+ callback x_cb
+ tooltip {The X position of the widget as a number or formula.
+Formulas can be simple math, including the variables
+x, px, sx, cx, and i} xywh {95 150 55 20} labelsize 11 align 5 textsize 11
+ class Fluid_Coord_Input
+ }
+ Fl_Input widget_y_input {
+ label {Y:}
+ callback y_cb
+ tooltip {The Y position of the widget as a number or formula.
+Formulas can be simple math, including the variables
+y, py, sy, cy, and i} xywh {155 150 55 20} labelsize 11 align 5 textsize 11
+ class Fluid_Coord_Input
+ }
+ Fl_Input widget_w_input {
+ label {Width:}
+ callback w_cb
+ tooltip {The width of the widget as a number or formula.
+Formulas can be simple math, including the variables
+w, pw, sw, cw, and i} xywh {215 150 55 20} labelsize 11 align 5 textsize 11
+ class Fluid_Coord_Input
+ }
+ Fl_Input widget_h_input {
+ label {Height:}
+ callback h_cb
+ tooltip {The height of the widget as a number or formula.
+Formulas can be simple math, including the variables
+h, ph, sh, ch, and i} xywh {275 150 55 20} labelsize 11 align 5 textsize 11
+ class Fluid_Coord_Input
+ }
+ Fl_Choice {} {
+ label {Children:}
+ callback wc_relative_cb open
+ tooltip {When instantiating a widget class, the children can either be fixed in their original position, automatically be repositioned, or both repsositioned and resized to fit the container.} xywh {335 150 64 20} down_box BORDER_BOX labelsize 11 align 5 textsize 11
+ } {
+ MenuItem {} {
+ label Fixed
+ xywh {0 0 31 20} labelsize 11
+ }
+ MenuItem {} {
+ label Reposition
+ xywh {0 0 31 20} labelsize 11
+ }
+ MenuItem {} {
+ label Resize
+ xywh {0 0 31 20} labelsize 11
+ }
+ }
+ Fl_Box {} {
+ xywh {399 150 1 20} hide resizable
+ }
+ }
+ Fl_Group {} {
+ label {Flex Parent:}
+ callback flex_size_group_cb
+ comment {This group is only visible if the parent is an Fl_Flex widget}
+ xywh {95 150 314 20} labelfont 1 labelsize 11 align 4 hide
+ } {
+ Fl_Value_Input widget_flex_size {
+ label {Size:}
+ callback flex_size_cb
+ tooltip {Fixed Width or Height for a horizontal or vertical Fl_Flex Parent.} xywh {95 150 55 20} labelsize 11 align 5 textsize 11
+ }
+ Fl_Check_Button widget_flex_fixed {
+ label fixed
+ callback flex_fixed_cb
+ tooltip {If checked, the size of the widget stays fixed.} xywh {155 150 55 20} down_box DOWN_BOX labelsize 11
+ }
+ Fl_Box {} {
+ xywh {398 150 1 20} resizable
+ }
+ }
+ Fl_Group {} {
+ label {Values:}
+ callback values_group_cb open
+ xywh {95 185 300 20} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Value_Input {} {
+ label {Size:}
+ callback slider_size_cb
+ tooltip {The size of the slider.} xywh {95 185 55 20} labelsize 11 align 5 textsize 11
+ }
+ Fl_Value_Input {} {
+ label {Minimum:}
+ callback min_cb
+ tooltip {The minimum value of the widget.} xywh {155 185 55 20} labelsize 11 align 5 textsize 11
+ }
+ Fl_Value_Input {} {
+ label {Maximum:}
+ callback max_cb
+ tooltip {The maximum value of the widget.} xywh {215 185 55 20} labelsize 11 align 5 value 1 textsize 11
+ }
+ Fl_Value_Input {} {
+ label {Step:}
+ callback step_cb
+ tooltip {The resolution of the widget value.} xywh {275 185 55 20} labelsize 11 align 5 textsize 11
+ }
+ Fl_Value_Input {} {
+ label {Value:}
+ callback value_cb
+ tooltip {The current widget value.} xywh {335 185 55 20} labelsize 11 align 5 textsize 11
+ }
+ Fl_Box {} {
+ xywh {395 185 0 20} resizable
+ }
+ }
+ Fl_Group {} {
+ label {Margins:}
+ callback flex_margin_group_cb
+ comment {This group is only visible for Fl_Flex widgets}
+ xywh {95 185 300 20} labelfont 1 labelsize 11 align 4 hide
+ } {
+ Fl_Value_Input {} {
+ label {Left:}
+ callback flex_margin_left_cb
+ tooltip {Left margin in group.} xywh {95 185 55 20} labelsize 11 align 5 textsize 11
+ }
+ Fl_Value_Input {} {
+ label {Top:}
+ callback flex_margin_top_cb
+ tooltip {Top margin in group.} xywh {155 185 55 20} labelsize 11 align 5 textsize 11
+ }
+ Fl_Value_Input {} {
+ label {Right:}
+ callback flex_margin_right_cb
+ tooltip {Right margin in group.} xywh {215 185 55 20} labelsize 11 align 5 textsize 11
+ }
+ Fl_Value_Input {} {
+ label {Bottom:}
+ callback flex_margin_bottom_cb
+ tooltip {Bottom margin in group.} xywh {275 185 55 20} labelsize 11 align 5 textsize 11
+ }
+ Fl_Value_Input {} {
+ label {Gap:}
+ callback flex_margin_gap_cb
+ tooltip {Gap between children.} xywh {335 185 55 20} labelsize 11 align 5 textsize 11
+ }
+ Fl_Box {} {
+ xywh {395 185 0 20} resizable
+ }
+ }
+ Fl_Group {} {
+ label {Grid Margins:
+
+
+Layout:}
+ callback grid_margin_group_cb
+ comment {This group is only visible for Fl_Grid widgets} open
+ xywh {95 185 300 55} labelfont 1 labelsize 11 align 4 hide
+ } {
+ Fl_Value_Input {} {
+ label {Left:}
+ callback grid_margin_left_cb
+ tooltip {Left margin in group.} xywh {95 185 45 20} labelsize 11 align 5 maximum 1000 step 1 textsize 11
+ }
+ Fl_Value_Input {} {
+ label {Top:}
+ callback grid_margin_top_cb
+ tooltip {Top margin in group.} xywh {144 185 45 20} labelsize 11 align 5 maximum 1000 step 1 textsize 11
+ }
+ Fl_Value_Input {} {
+ label {Right:}
+ callback grid_margin_right_cb
+ tooltip {Right margin in group.} xywh {193 185 45 20} labelsize 11 align 5 maximum 1000 step 1 textsize 11
+ }
+ Fl_Value_Input {} {
+ label {Bottom:}
+ callback grid_margin_bottom_cb
+ tooltip {Bottom margin in group.} xywh {242 185 45 20} labelsize 11 align 5 maximum 1000 step 1 textsize 11
+ }
+ Fl_Value_Input {} {
+ label {RowGap:}
+ callback grid_row_gap_cb
+ tooltip {Gap between children.} xywh {291 185 45 20} labelsize 11 align 5 maximum 1000 step 1 textsize 11
+ }
+ Fl_Value_Input {} {
+ label {ColGap:}
+ callback grid_col_gap_cb
+ tooltip {Gap between children.} xywh {340 185 45 20} labelsize 11 align 5 maximum 1000 step 1 textsize 11
+ }
+ Fl_Box {} {
+ xywh {395 185 0 20} resizable
+ }
+ Fl_Input {} {
+ label {Rows:}
+ callback grid_rows_cb
+ tooltip {Number of horizontal rows in the Grid group} xywh {95 220 55 20} labelsize 11 align 5 textsize 11
+ class Fluid_Coord_Input
+ }
+ Fl_Input {} {
+ label {Columns:}
+ callback grid_cols_cb
+ tooltip {Number of vertical columns in the Grid group} xywh {154 220 55 20} labelsize 11 align 5 textsize 11
+ class Fluid_Coord_Input
+ }
+ }
+ Fl_Group {} {
+ label {Size Range:}
+ callback size_range_group_cb open
+ xywh {95 185 300 20} labelfont 1 labelsize 11 align 4 hide
+ } {
+ Fl_Value_Input {} {
+ label {Minimum Size:}
+ callback min_w_cb
+ tooltip {The size of the slider.} xywh {95 185 55 20} labelsize 11 align 5 maximum 2048 step 1 textsize 11
+ }
+ Fl_Value_Input {} {
+ callback min_h_cb
+ tooltip {The minimum value of the widget.} xywh {155 185 55 20} labelsize 11 align 5 maximum 2048 step 1 textsize 11
+ }
+ Fl_Button {} {
+ label set
+ callback set_min_size_cb
+ xywh {215 185 25 20} labelsize 11
+ }
+ Fl_Value_Input {} {
+ label {Maximum Size:}
+ callback max_w_cb
+ tooltip {The maximum value of the widget.} xywh {245 185 55 20} labelsize 11 align 5 maximum 2048 step 1 textsize 11
+ }
+ Fl_Value_Input {} {
+ callback max_h_cb
+ tooltip {The resolution of the widget value.} xywh {305 185 55 20} labelsize 11 align 5 maximum 2048 step 1 textsize 11
+ }
+ Fl_Button {} {
+ label set
+ callback set_max_size_cb
+ xywh {365 185 25 20} labelsize 11
+ }
+ Fl_Box {} {
+ xywh {395 185 0 20} resizable
+ }
+ }
+ Fl_Group {} {
+ label {Shortcut:}
+ callback propagate_load
+ xywh {95 210 310 20} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Button {} {
+ callback shortcut_in_cb
+ comment {This is a special button that grabs keystrokes directly}
+ tooltip {The shortcut key for the widget.
+Use 'Backspace' key to clear.} xywh {95 210 310 20} box DOWN_BOX color 7 selection_color 12 labelsize 11 when 1
+ code0 {\#include <FL/Fl_Shortcut_Button.H>}
+ class Fl_Shortcut_Button
+ }
+ }
+ Fl_Group {} {
+ label {X Class:}
+ callback propagate_load
+ xywh {95 235 300 20} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Input {} {
+ label {:}
+ callback xclass_cb
+ tooltip {The X resource class.} xywh {95 235 95 20} labelfont 1 labelsize 11 textsize 11 resizable
+ }
+ Fl_Light_Button {} {
+ label Border
+ callback border_cb
+ tooltip {Add a border around the window.} xywh {195 235 60 20} selection_color 1 labelsize 11
+ }
+ Fl_Light_Button {} {
+ label Modal
+ callback modal_cb
+ tooltip {Make the window modal.} xywh {260 235 55 20} selection_color 1 labelsize 11
+ }
+ Fl_Light_Button {} {
+ label Nonmodal
+ callback non_modal_cb
+ tooltip {Make the window non-modal.} xywh {320 235 75 20} selection_color 1 labelsize 11 align 148
+ }
+ }
+ Fl_Group {} {
+ label {Attributes:}
+ callback propagate_load
+ xywh {95 260 305 20} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Light_Button {} {
+ label Visible
+ callback visible_cb
+ tooltip {Show the widget.} xywh {95 260 60 20} selection_color 1 labelsize 11
+ }
+ Fl_Light_Button {} {
+ label Active
+ callback active_cb
+ tooltip {Activate the widget.} xywh {160 260 60 20} selection_color 1 labelsize 11
+ }
+ Fl_Light_Button {} {
+ label Resizable
+ callback resizable_cb
+ tooltip {Make the widget resizable.} xywh {225 260 75 20} selection_color 1 labelsize 11 when 1
+ }
+ Fl_Light_Button {} {
+ label Hotspot
+ callback hotspot_cb
+ tooltip {Center the window under this widget.} xywh {305 260 70 20} selection_color 1 labelsize 11 when 1
+ }
+ Fl_Box {} {
+ xywh {395 260 0 20} labelsize 11 resizable
+ }
+ }
+ Fl_Input {} {
+ label {Tooltip:}
+ callback tooltip_cb
+ tooltip {The tooltip text for the widget.
+Use Ctrl-J for newlines.} xywh {95 285 310 20} labelfont 1 labelsize 11 textsize 11
+ }
+ Fl_Box {} {
+ xywh {95 305 300 5} hide resizable
+ }
+ }
+ Fl_Group {} {
+ label Style
+ callback propagate_load open
+ xywh {10 30 400 330} labelsize 11 when 0 hide
+ } {
+ Fl_Group {} {
+ label {Label Font:}
+ callback propagate_load open
+ xywh {95 40 309 20} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Choice {} {
+ callback labelfont_cb open
+ tooltip {The style of the label text.} xywh {95 40 152 20} box THIN_UP_BOX down_box BORDER_BOX labelfont 1 labelsize 11 textsize 11 resizable
+ code0 {extern Fl_Menu_Item fontmenu[];}
+ code1 {o->menu(fontmenu);}
+ } {}
+ Fl_Value_Input {} {
+ callback labelsize_cb
+ tooltip {The size of the label text.} xywh {247 40 49 20} labelsize 11 maximum 100 step 1 value 14 textsize 11
+ }
+ Fl_Button w_labelcolor {
+ label {Label Color}
+ callback labelcolor_cb
+ tooltip {The color of the label text.} xywh {296 40 90 20} labelsize 11
+ }
+ Fl_Menu_Button {} {
+ callback labelcolor_menu_cb open
+ xywh {386 40 18 20}
+ code0 {extern Fl_Menu_Item colormenu[];}
+ code1 {o->menu(colormenu);}
+ } {}
+ }
+ Fl_Group {} {
+ label {Box:}
+ callback propagate_load open
+ xywh {95 65 309 20} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Choice {} {
+ callback box_cb open
+ tooltip {The "up" box of the widget.} xywh {95 65 201 20} box THIN_UP_BOX down_box BORDER_BOX labelfont 1 labelsize 11 textsize 11 resizable
+ code0 {extern Fl_Menu_Item boxmenu[];}
+ code1 {o->menu(boxmenu);}
+ } {}
+ Fl_Button w_color {
+ label Color
+ callback color_cb
+ tooltip {The background color of the widget.} xywh {296 65 90 20} labelsize 11
+ }
+ Fl_Menu_Button {} {
+ callback color_menu_cb open
+ xywh {386 65 18 20}
+ code0 {extern Fl_Menu_Item colormenu[];}
+ code1 {o->menu(colormenu);}
+ } {}
+ }
+ Fl_Group {} {
+ label {Down Box:}
+ callback propagate_load open
+ xywh {95 90 309 20} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Choice {} {
+ callback down_box_cb open
+ tooltip {The "down" box of the widget.} xywh {95 90 201 20} box THIN_UP_BOX down_box BORDER_BOX labelfont 1 labelsize 11 labelcolor 45 textsize 11 resizable
+ code0 {extern Fl_Menu_Item boxmenu[];}
+ code1 {o->menu(boxmenu);}
+ } {}
+ Fl_Button w_selectcolor {
+ label {Select Color}
+ callback color2_cb
+ tooltip {The selection color of the widget.} xywh {296 90 90 20} labelsize 11
+ }
+ Fl_Menu_Button {} {
+ callback color2_menu_cb open
+ xywh {386 90 18 20}
+ code0 {extern Fl_Menu_Item colormenu[];}
+ code1 {o->menu(colormenu);}
+ } {}
+ }
+ Fl_Group {} {
+ label {Text Font:}
+ callback propagate_load open
+ xywh {95 115 309 20} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Choice {} {
+ callback textfont_cb open
+ tooltip {The value text style.} xywh {95 115 152 20} box DOWN_BOX down_box BORDER_BOX labelfont 1 labelsize 11 textsize 11 resizable
+ code0 {extern Fl_Menu_Item fontmenu[];}
+ code1 {o->menu(fontmenu);}
+ } {}
+ Fl_Value_Input {} {
+ callback textsize_cb
+ tooltip {The value text size.} xywh {247 115 49 20} labelsize 11 maximum 100 step 1 value 14 textsize 11
+ }
+ Fl_Button w_textcolor {
+ label {Text Color}
+ callback textcolor_cb
+ tooltip {The value text color.} xywh {296 115 90 20} labelsize 11
+ }
+ Fl_Menu_Button {} {
+ callback textcolor_menu_cb open
+ xywh {386 115 18 20}
+ code0 {extern Fl_Menu_Item colormenu[];}
+ code1 {o->menu(colormenu);}
+ } {}
+ }
+ Fl_Box {} {
+ xywh {95 165 300 40} labelsize 11 resizable
+ }
+ Fl_Light_Button {} {
+ label Compact
+ callback compact_cb
+ tooltip {use compact box types for closely set buttons} xywh {95 140 90 20} selection_color 1 labelsize 11
+ }
+ }
+ Fl_Group {} {
+ label {C++}
+ callback propagate_load open
+ xywh {10 30 400 330} labelsize 11 when 0 hide
+ } {
+ Fl_Group {} {
+ label {Class:}
+ callback propagate_load open
+ xywh {95 40 310 20} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Input {} {
+ user_data 4
+ callback subclass_cb
+ tooltip {The widget subclass.} xywh {95 40 172 20} labelfont 1 labelsize 11 textfont 4 textsize 11 resizable
+ }
+ Fl_Choice {} {
+ callback subtype_cb open
+ tooltip {The widget subtype.} xywh {267 40 138 20} box THIN_UP_BOX down_box BORDER_BOX labelsize 11 textsize 11
+ } {}
+ }
+ Fl_Group {} {
+ label {Name:}
+ callback propagate_load open
+ xywh {95 65 310 20} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Input {} {
+ callback name_cb
+ tooltip {The name of the widget.} xywh {95 65 235 20} labelfont 1 labelsize 11 textsize 11 resizable
+ }
+ Fl_Choice {} {
+ callback name_public_member_cb open
+ tooltip {Change member access attribute.} xywh {330 65 75 20} down_box BORDER_BOX labelsize 11 when 1 textsize 11
+ } {
+ MenuItem {} {
+ label private
+ user_data 0 user_data_type long
+ xywh {0 0 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label public
+ user_data 1 user_data_type long
+ xywh {0 0 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label protected
+ user_data 2 user_data_type long
+ xywh {0 0 100 20} labelsize 11
+ }
+ }
+ Fl_Choice {} {
+ callback name_public_cb open
+ tooltip {Change widget accessibility.} xywh {330 65 75 20} down_box BORDER_BOX labelsize 11 when 1 textsize 11 hide
+ } {
+ MenuItem {} {
+ label local
+ user_data 0 user_data_type long
+ xywh {10 10 100 20} labelsize 11
+ }
+ MenuItem {} {
+ label global
+ user_data 1 user_data_type long
+ xywh {10 10 100 20} labelsize 11
+ }
+ }
+ }
+ Fl_Input {v_input[0]} {
+ label {Extra Code:}
+ user_data 0
+ callback v_input_cb
+ tooltip {Extra initialization code for the widget.} xywh {95 90 310 20} labelfont 1 labelsize 11 textfont 4 textsize 11
+ }
+ Fl_Input {v_input[1]} {
+ user_data 1
+ callback v_input_cb
+ tooltip {Extra initialization code for the widget.} xywh {95 110 310 20} labelsize 11 textfont 4 textsize 11
+ }
+ Fl_Input {v_input[2]} {
+ user_data 2
+ callback v_input_cb
+ tooltip {Extra initialization code for the widget.} xywh {95 130 310 20} labelsize 11 textfont 4 textsize 11
+ }
+ Fl_Input {v_input[3]} {
+ user_data 3
+ callback v_input_cb
+ tooltip {Extra initialization code for the widget.} xywh {95 150 310 20} labelsize 11 textfont 4 textsize 11
+ }
+ Fl_Tile {} {
+ callback {wComment->do_callback(wComment, v);
+wCallback->do_callback(wCallback, v);} open
+ xywh {95 175 310 130} resizable
+ } {
+ Fl_Group {} {open
+ xywh {95 175 310 48} box FLAT_BOX
+ } {
+ Fl_Text_Editor wComment {
+ label {Comment:}
+ tooltip {Write a comment that will appear in the source code and in the widget tree overview.} xywh {95 175 310 45} box DOWN_BOX labelfont 1 labelsize 11 align 4 when 1 textfont 6 textsize 11 textcolor 59 resizable
+ code0 {wComment->buffer(new Fl_Text_Buffer());}
+ code1 {wComment->callback((Fl_Callback*)comment_cb);}
+ }
+ }
+ Fl_Group {} {open
+ xywh {95 223 310 82} box FLAT_BOX
+ } {
+ Fl_Text_Editor wCallback {
+ label {Callback:}
+ callback callback_cb
+ tooltip {The callback function or code for the widget. Use the variable name 'o' to access the Widget pointer and 'v' to access the user value.} xywh {95 225 310 80} box DOWN_BOX labelfont 1 labelsize 11 align 4 textfont 4 textsize 11 resizable
+ code0 {\#include "CodeEditor.h"}
+ class CodeEditor
+ }
+ }
+ }
+ Fl_Group {} {
+ label {User Data:}
+ callback propagate_load open
+ xywh {95 310 310 20} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Input {} {
+ callback user_data_cb
+ tooltip {The user data to pass into the callback code.} xywh {95 310 158 20} labelfont 1 labelsize 11 textfont 4 textsize 11 resizable
+ }
+ Fl_Menu_Button {} {
+ label When
+ callback when_cb open
+ tooltip {When to call the callback function.} xywh {260 310 145 20} box THIN_UP_BOX down_box BORDER_BOX labelfont 1 labelsize 11 when 1 textsize 11
+ code0 {extern Fl_Menu_Item whenmenu[];}
+ code1 {o->menu(whenmenu);}
+ } {}
+ }
+ Fl_Group {} {
+ label {Type:}
+ callback propagate_load open
+ xywh {95 332 310 26} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Input_Choice {} {
+ callback user_data_type_cb open
+ tooltip {The type of the user data.} xywh {95 335 158 20} labelfont 1 labelsize 11 textfont 4 textsize 11 resizable
+ } {
+ MenuItem {} {
+ label {void*}
+ xywh {0 0 31 20} labelfont 4 labelsize 11
+ }
+ MenuItem {} {
+ label long
+ xywh {0 0 31 20} labelfont 4 labelsize 11
+ }
+ }
+ Fl_Box w_when_box {
+ label FL_WHEN_NEVER
+ xywh {260 332 145 26} box FLAT_BOX selection_color 1 labelsize 8 align 209
+ }
+ }
+ }
+ }
+ Fl_Tabs widget_tabs_repo {open
+ xywh {10 10 400 350}
+ code0 {o->hide();}
+ } {
+ Fl_Group {} {open
+ xywh {10 30 400 330} hide resizable
+ } {}
+ Fl_Group widget_tab_grid {
+ label Grid
+ callback propagate_load open
+ xywh {10 30 400 330} labelsize 11
+ } {
+ Fl_Box {} {
+ label {The Fl_Grid implementation in FLUID is still experimental!}
+ xywh {25 43 370 28} labelfont 1 labelsize 11 labelcolor 1
+ }
+ Fl_Group {} {
+ label {Location:}
+ callback propagate_load open
+ xywh {96 110 314 20} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Input {} {
+ label {Row:}
+ callback grid_set_row_cb
+ xywh {96 110 55 20} labelsize 11 align 5 textsize 11
+ class Fluid_Coord_Input
+ }
+ Fl_Input {} {
+ label {Column:}
+ callback grid_set_col_cb
+ xywh {156 110 55 20} labelsize 11 align 5 textsize 11
+ class Fluid_Coord_Input
+ }
+ Fl_Choice {} {
+ label {Align:}
+ callback grid_align_cb open
+ xywh {215 110 185 20} down_box BORDER_BOX labelsize 11 align 5 textsize 11
+ } {
+ MenuItem {} {
+ label GRID_CENTER
+ user_data FL_GRID_CENTER user_data_type long
+ xywh {10 10 31 20} labelsize 11
+ }
+ MenuItem {} {
+ label GRID_FILL
+ user_data FL_GRID_FILL user_data_type long
+ xywh {10 10 31 20} labelsize 11
+ }
+ MenuItem {} {
+ label GRID_HORIZONTAL
+ user_data FL_GRID_HORIZONTAL user_data_type long
+ xywh {10 10 31 20} labelsize 11
+ }
+ MenuItem {} {
+ label GRID_VERTICAL
+ user_data FL_GRID_VERTICAL user_data_type long
+ xywh {10 10 31 20} labelsize 11
+ }
+ MenuItem {} {
+ label GRID_LEFT
+ user_data FL_GRID_LEFT user_data_type long
+ xywh {10 10 31 20} labelsize 11
+ }
+ MenuItem {} {
+ label GRID_TOP_LEFT
+ user_data FL_GRID_TOP_LEFT user_data_type long
+ xywh {10 10 31 20} labelsize 11
+ }
+ MenuItem {} {
+ label GRID_TOP
+ user_data FL_GRID_TOP user_data_type long
+ xywh {10 10 31 20} labelsize 11
+ }
+ MenuItem {} {
+ label GRID_TOP_RIGHT
+ user_data FL_GRID_TOP_RIGHT user_data_type long
+ xywh {10 10 31 20} labelsize 11
+ }
+ MenuItem {} {
+ label GRID_RIGHT
+ user_data FL_GRID_RIGHT user_data_type long
+ xywh {10 10 31 20} labelsize 11
+ }
+ MenuItem {} {
+ label GRID_BOTTOM_LEFT
+ user_data FL_GRID_BOTTOM_LEFT user_data_type long
+ xywh {10 10 31 20} labelsize 11
+ }
+ MenuItem {} {
+ label GRID_BOTTOM
+ user_data FL_GRID_BOTTOM user_data_type long
+ xywh {10 10 31 20} labelsize 11
+ }
+ MenuItem {} {
+ label GRID_BOTTOM_RIGHT
+ user_data FL_GRID_BOTTOM_RIGHT user_data_type long
+ xywh {10 10 31 20} labelsize 11
+ }
+ }
+ Fl_Box {} {
+ xywh {400 110 1 20} hide resizable
+ }
+ }
+ Fl_Box {} {
+ label {-- Widget --}
+ xywh {96 74 155 20} labelfont 1 labelsize 12 align 20
+ }
+ Fl_Group {} {
+ label {Cell Span:}
+ callback propagate_load open
+ xywh {96 145 314 20} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Box {} {
+ xywh {400 145 1 20} hide resizable
+ }
+ Fl_Input {} {
+ label {Row Span:}
+ callback grid_set_rowspan_cb
+ xywh {96 145 55 20} labelsize 11 align 5 textsize 11
+ class Fluid_Coord_Input
+ }
+ Fl_Input {} {
+ label {Col Span:}
+ callback grid_set_colspan_cb
+ xywh {156 145 55 20} labelsize 11 align 5 textsize 11
+ class Fluid_Coord_Input
+ }
+ }
+ Fl_Group {} {
+ label {Size:}
+ callback propagate_load open
+ xywh {96 180 314 20} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Box {} {
+ xywh {400 180 1 20} hide resizable
+ }
+ Fl_Input {} {
+ label {Min.Width:}
+ callback grid_set_min_wdt_cb
+ xywh {96 180 55 20} labelsize 11 align 5 textsize 11
+ class Fluid_Coord_Input
+ }
+ Fl_Input {} {
+ label {Min.Height:}
+ callback grid_set_min_hgt_cb
+ xywh {156 180 55 20} labelsize 11 align 5 textsize 11
+ class Fluid_Coord_Input
+ }
+ }
+ Fl_Box {} {
+ label {-- Grid --}
+ xywh {96 214 155 20} labelfont 1 labelsize 12 align 20
+ }
+ Fl_Group {} {
+ label {Row:}
+ callback propagate_load open
+ xywh {96 250 314 20} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Input {} {
+ label Index
+ xywh {96 250 55 20} labelsize 11 align 5 textsize 11 deactivate
+ class Fluid_Coord_Input
+ }
+ Fl_Input {} {
+ label {Height:}
+ callback grid_row_height
+ xywh {156 250 55 20} labelsize 11 align 5 textsize 11
+ class Fluid_Coord_Input
+ }
+ Fl_Input {} {
+ label {Weight:}
+ callback grid_row_weight
+ xywh {216 250 55 20} labelsize 11 align 5 textsize 11
+ class Fluid_Coord_Input
+ }
+ Fl_Input {} {
+ label {Gap:}
+ callback grid_row_gap
+ xywh {276 250 55 20} labelsize 11 align 5 textsize 11
+ class Fluid_Coord_Input
+ }
+ Fl_Box {} {
+ xywh {400 250 1 20} hide resizable
+ }
+ }
+ Fl_Group {} {
+ label {Column:}
+ callback propagate_load open
+ xywh {96 285 314 20} labelfont 1 labelsize 11 align 4
+ } {
+ Fl_Input {} {
+ label Index
+ xywh {96 285 55 20} labelsize 11 align 5 textsize 11 deactivate
+ class Fluid_Coord_Input
+ }
+ Fl_Input {} {
+ label {Width:}
+ callback grid_col_width
+ xywh {156 285 55 20} labelsize 11 align 5 textsize 11
+ class Fluid_Coord_Input
+ }
+ Fl_Input {} {
+ label {Weight:}
+ callback grid_col_weight
+ xywh {216 285 55 20} labelsize 11 align 5 textsize 11
+ class Fluid_Coord_Input
+ }
+ Fl_Input {} {
+ label {Gap:}
+ callback grid_col_gap
+ xywh {276 285 55 20} labelsize 11 align 5 textsize 11
+ class Fluid_Coord_Input
+ }
+ Fl_Box {} {
+ xywh {400 285 1 20} hide resizable
+ }
+ }
+ }
+ }
+ Fl_Group {} {
+ xywh {10 370 400 20} labelsize 11
+ } {
+ Fl_Button wLiveMode {
+ label {Live &Resize}
+ callback live_mode_cb
+ tooltip {Create a live duplicate of the selected widgets to test resizing and menu behavior.} xywh {10 370 80 20} type Toggle labelsize 11
+ }
+ Fl_Button overlay_button {
+ label {Hide &Overlays}
+ callback overlay_cb
+ tooltip {Hide the widget overlay box.} xywh {94 370 80 20} labelsize 11
+ }
+ Fl_Box {} {
+ comment {Hidden resizable box}
+ xywh {258 370 72 20} labelsize 11 hide resizable
+ }
+ Fl_Return_Button {} {
+ label Close
+ callback ok_cb
+ xywh {330 370 80 20} labelsize 11
+ }
+ }
+ }
+}
diff --git a/fluid/widget_panel.h b/fluid/widget_panel.h
index 67158c9df..faf8c84ca 100644
--- a/fluid/widget_panel.h
+++ b/fluid/widget_panel.h
@@ -146,10 +146,14 @@ extern Fl_Box *w_when_box;
extern Fl_Tabs *widget_tabs_repo;
extern Fl_Group *widget_tab_grid;
extern void grid_set_row_cb(Fluid_Coord_Input*, void*);
+extern Fluid_Coord_Input *widget_grid_row_input;
extern void grid_set_col_cb(Fluid_Coord_Input*, void*);
+extern Fluid_Coord_Input *widget_grid_col_input;
extern void grid_align_cb(Fl_Choice*, void*);
extern void grid_set_rowspan_cb(Fluid_Coord_Input*, void*);
extern void grid_set_colspan_cb(Fluid_Coord_Input*, void*);
+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_row_height(Fluid_Coord_Input*, void*);
extern void grid_row_weight(Fluid_Coord_Input*, void*);
extern void grid_row_gap(Fluid_Coord_Input*, void*);
diff --git a/src/Fl_Grid.cxx b/src/Fl_Grid.cxx
index a4a20b2fa..56a8b71d9 100644
--- a/src/Fl_Grid.cxx
+++ b/src/Fl_Grid.cxx
@@ -922,6 +922,11 @@ void Fl_Grid::col_width(const int *value, size_t size) {
need_layout(1);
}
+int Fl_Grid::col_width(int col) const {
+ if (col >= 0 && col < cols_) return Cols_[col].minw_;
+ return 0;
+}
+
/**
Set the weight of a column.
@@ -987,6 +992,11 @@ void Fl_Grid::col_weight(const int *value, size_t size) {
need_layout(1);
}
+int Fl_Grid::col_weight(int col) const {
+ if (col >= 0 && col < cols_) return Cols_[col].weight_;
+ return 0;
+}
+
/**
Set the gap of column \c col.
@@ -1018,6 +1028,11 @@ void Fl_Grid::col_gap(const int *value, size_t size) {
need_layout(1);
}
+int Fl_Grid::col_gap(int col) const {
+ if (col >= 0 && col < cols_) return Cols_[col].gap_;
+ return 0;
+}
+
/**
Set the minimal row height of row \c row.
@@ -1056,6 +1071,11 @@ void Fl_Grid::row_height(const int *value, size_t size) {
need_layout(1);
}
+int Fl_Grid::row_height(int row) const {
+ if (row >= 0 && row < rows_) return Rows_[row].minh_;
+ return 0;
+}
+
/**
Set the row weight of row \c row.
@@ -1077,7 +1097,6 @@ void Fl_Grid::row_weight(int row, int value) {
\see Fl_Grid::col_weight(const int *value, size_t size) for
handling of the \p value array and \p size.
*/
-
void Fl_Grid::row_weight(const int *value, size_t size) {
Row *r = Rows_;
for (int i = 0; i < rows_; i++, value++, r++) {
@@ -1088,6 +1107,11 @@ void Fl_Grid::row_weight(const int *value, size_t size) {
need_layout(1);
}
+int Fl_Grid::row_weight(int row) const {
+ if (row >= 0 && row < rows_) return Rows_[row].weight_;
+ return 0;
+}
+
/**
Set the gap of row \c row.
@@ -1120,6 +1144,11 @@ void Fl_Grid::row_gap(const int *value, size_t size) {
need_layout(1);
}
+int Fl_Grid::row_gap(int row) const {
+ if (row >= 0 && row < rows_) return Rows_[row].gap_;
+ return 0;
+}
+
/**
Output layout information of this Fl_Grid to stderr.