summaryrefslogtreecommitdiff
path: root/fluid/Fl_Grid_Type.cxx
diff options
context:
space:
mode:
authorMatthias Melcher <github@matthiasm.com>2023-10-21 17:45:30 +0200
committerMatthias Melcher <github@matthiasm.com>2023-10-21 17:45:40 +0200
commit0c35212467f3b0d1aa632a1febb06c09f4b170f1 (patch)
treec56c12e3f9090950ce560f392f5d4228b6de1d2d /fluid/Fl_Grid_Type.cxx
parente18762bff8bb2abfccc5c86086832a19c109c417 (diff)
FLUID: grid becomes a bit more interactive
Diffstat (limited to 'fluid/Fl_Grid_Type.cxx')
-rw-r--r--fluid/Fl_Grid_Type.cxx62
1 files changed, 60 insertions, 2 deletions
diff --git a/fluid/Fl_Grid_Type.cxx b/fluid/Fl_Grid_Type.cxx
index 73b36fdda..415a2dab5 100644
--- a/fluid/Fl_Grid_Type.cxx
+++ b/fluid/Fl_Grid_Type.cxx
@@ -44,6 +44,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);
Fl_Group::current(0);
return g;
}
@@ -182,6 +183,23 @@ void Fl_Grid_Type::remove_child(Fl_Type* a) {
grid->redraw();
}
+/** Update the initial size of a child widget.
+ Fl_Grid keeps track of the size of children when they are first added. In
+ FLUID, users will want to resize children. So we need to trick Fl_Grid into
+ taking the new size as the initial size.
+ */
+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
+}
+
void grid_cb(Fl_Value_Input* i, void* v, int what) {
if (v == LOAD) {
if (current_widget->is_a(ID_Grid)) {
@@ -295,6 +313,8 @@ void grid_child_cb(Fluid_Coord_Input* i, void* v, int what) {
switch (what) {
case 8: v = cell->row(); break;
case 9: v = cell->col(); break;
+ case 10: v = cell->rowspan(); break;
+ case 11: v = cell->colspan(); break;
}
}
i->value(v);
@@ -306,12 +326,16 @@ void grid_child_cb(Fluid_Coord_Input* i, void* v, int what) {
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;
}
}
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;
}
g->need_layout(true);
g->redraw();
@@ -326,11 +350,45 @@ void grid_set_row_cb(Fluid_Coord_Input* i, void* v) {
void grid_set_col_cb(Fluid_Coord_Input* i, void* v) {
grid_child_cb(i, v, 9);
}
-void grid_set_colspan_cb(Fluid_Coord_Input* i, void* v) {
+void grid_set_rowspan_cb(Fluid_Coord_Input* i, void* v) {
grid_child_cb(i, v, 10);
}
-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_align_cb(Fl_Choice* i, void* v) {
}
+
+void grid_row_height(Fluid_Coord_Input* 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);
+ Fl_Grid::Cell *cell = g->cell(current_widget->o);
+ if (v == LOAD) {
+ if (cell) {
+ i->value(g->row_height(cell->row()));
+ i->activate();
+ } else {
+ i->deactivate();
+ }
+ } else {
+ if (cell) {
+ g->row_height(cell->row(), i->value());
+ }
+ }
+}
+void grid_row_weight(Fluid_Coord_Input* i, void* v) {
+}
+void grid_row_gap(Fluid_Coord_Input* i, void* v) {
+}
+
+void grid_col_width(Fluid_Coord_Input* i, void* v) {
+}
+void grid_col_weight(Fluid_Coord_Input* i, void* v) {
+}
+void grid_col_gap(Fluid_Coord_Input* i, void* v) {
+}