* Add classes for application and project * Removed all globals from Fluid.h * Extracting args and project history into their own classes * Moving globals into Application class * Initialize values inside headers for some classes. * Undo functionality wrapped in a class inside Project. * File reader and writer are now linked to a project. * Avoid global project access * Nodes (former Types) will be managed by a new Tree class. * Removed static members (hidden globals) form Node/Fl_Type. * Adding Tree iterator. * Use nullptr instead of 0, NULL, or 0L * Renamed Fl_..._Type to ..._Node, FL_OVERRIDE -> override * Renaming ..._type to ...::prototype * Splitting Widget Panel into multiple files. * Moved callback code into widget panel file. * Cleaning up Fluid_Image -> Image_asset * Moving Fd_Snap_Action into new namespace fld::app::Snap_Action etc. * Moved mergeback into proj folder. * `enum ID` is now `enum class Type`.
398 lines
12 KiB
Plaintext
398 lines
12 KiB
Plaintext
# data file for the Fltk User Interface Designer (fluid)
|
|
version 1.0500
|
|
header_name {.h}
|
|
code_name {.cxx}
|
|
decl {\#include "widgets/Formula_Input.h"} {public global
|
|
}
|
|
|
|
decl {\#include "Fluid.h"} {private global
|
|
}
|
|
|
|
decl {\#include "proj/undo.h"} {private global
|
|
}
|
|
|
|
decl {\#include "nodes/Grid_Node.h"} {private global
|
|
}
|
|
|
|
decl {extern Grid_Child_Tab *widget_tab_grid_child;} {private global
|
|
}
|
|
|
|
widget_class Grid_Child_Tab {
|
|
label Grid
|
|
callback propagate_load open
|
|
xywh {480 287 400 330} labelsize 11 resizable visible position_relative_rescale
|
|
} {
|
|
Fl_Group {} {
|
|
label {Location:}
|
|
callback propagate_load open
|
|
xywh {85 30 315 20} box FLAT_BOX labelfont 1 labelsize 11 align 4
|
|
} {
|
|
Fl_Input widget_grid_row_input {
|
|
label {Row:}
|
|
callback {grid_child_cb(o, v, 8);
|
|
if (v!=LOAD) widget_tab_grid_child->do_callback(widget_tab_grid_child, LOAD);}
|
|
xywh {85 30 40 20} labelsize 11 align 5 textsize 11
|
|
class {fld::widget::Formula_Input}
|
|
}
|
|
Fl_Group {} {open
|
|
xywh {125 30 30 20}
|
|
} {
|
|
Fl_Button {} {
|
|
label {-}
|
|
callback {if (v!=LOAD) {
|
|
grid_child_cb(widget_grid_row_input, v, 0x0100 + 8);
|
|
widget_tab_grid_child->do_callback(widget_tab_grid_child, LOAD);
|
|
}}
|
|
xywh {125 30 15 20} labelsize 11
|
|
code0 {o->clear_visible_focus();} compact 1
|
|
}
|
|
Fl_Button {} {
|
|
label {+}
|
|
callback {if (v!=LOAD) {
|
|
grid_child_cb(widget_grid_row_input, v, 0x0200 + 8);
|
|
widget_tab_grid_child->do_callback(widget_tab_grid_child, LOAD);
|
|
}}
|
|
xywh {140 30 15 20} labelsize 11
|
|
code0 {o->clear_visible_focus();} compact 1
|
|
}
|
|
}
|
|
Fl_Input widget_grid_col_input {
|
|
label {Column:}
|
|
callback {grid_child_cb(o, v, 9);
|
|
if (v!=LOAD) widget_tab_grid_child->do_callback(widget_tab_grid_child, LOAD);}
|
|
xywh {165 30 40 20} labelsize 11 align 5 textsize 11
|
|
class {fld::widget::Formula_Input}
|
|
}
|
|
Fl_Group {} {open
|
|
xywh {205 30 30 20}
|
|
} {
|
|
Fl_Button {} {
|
|
label {-}
|
|
callback {if (v!=LOAD) {
|
|
grid_child_cb(widget_grid_col_input, v, 0x0100 + 9);
|
|
widget_tab_grid_child->do_callback(widget_tab_grid_child, LOAD);
|
|
}}
|
|
xywh {205 30 15 20} labelsize 11
|
|
code0 {o->clear_visible_focus();} compact 1
|
|
}
|
|
Fl_Button {} {
|
|
label {+}
|
|
callback {if (v!=LOAD) {
|
|
grid_child_cb(widget_grid_col_input, v, 0x0200 + 9);
|
|
widget_tab_grid_child->do_callback(widget_tab_grid_child, LOAD);
|
|
}}
|
|
xywh {220 30 15 20} labelsize 11
|
|
code0 {o->clear_visible_focus();} compact 1
|
|
}
|
|
}
|
|
Fl_Box {} {
|
|
xywh {385 30 1 20} hide resizable
|
|
}
|
|
Fl_Box widget_grid_transient {
|
|
label TRANSIENT
|
|
callback {if (v==LOAD) {
|
|
Fl_Widget *child = ((Widget_Node*)current_widget)->o;
|
|
Fl_Grid_Proxy *g = ((Fl_Grid_Proxy*)((Widget_Node*)current_widget->parent)->o);
|
|
// Fl_Grid::Cell *cell = g->cell(child);
|
|
// Fl_Grid::Cell *tcell = g->transient_cell(child);
|
|
widget_grid_transient->hide();
|
|
widget_grid_unlinked->hide();
|
|
if (g->transient_cell(child)) {
|
|
widget_grid_transient->show();
|
|
} else if (!g->cell(child)) {
|
|
widget_grid_unlinked->show();
|
|
}
|
|
}}
|
|
xywh {240 30 80 20} labelsize 11 labelcolor 1
|
|
}
|
|
Fl_Box widget_grid_unlinked {
|
|
label UNLINKED
|
|
xywh {240 30 80 20} labelsize 11 labelcolor 1 hide
|
|
}
|
|
}
|
|
Fl_Group wp_gridc_align {
|
|
label {Align:}
|
|
callback propagate_load
|
|
xywh {85 70 315 20} labelfont 1 labelsize 11 align 4
|
|
} {
|
|
Fl_Choice {} {
|
|
label Horizontal
|
|
callback {if ( !current_widget
|
|
|| !current_widget->parent
|
|
|| !current_widget->parent->is_a(Type::Grid))
|
|
{
|
|
return;
|
|
}
|
|
int mask = (FL_GRID_LEFT | FL_GRID_RIGHT | FL_GRID_HORIZONTAL);
|
|
Fl_Grid *g = ((Fl_Grid*)((Widget_Node*)current_widget->parent)->o);
|
|
if (v == LOAD) {
|
|
int a = FL_GRID_FILL & mask;
|
|
Fl_Grid::Cell *cell = g->cell(current_widget->o);
|
|
if (cell) {
|
|
a = cell->align() & mask;
|
|
}
|
|
const Fl_Menu_Item *mi = o->find_item_with_argument(a);
|
|
if (mi) o->value(mi);
|
|
} else {
|
|
Fluid.proj.undo.checkpoint();
|
|
int v = FL_GRID_FILL & mask, old_v = FL_GRID_FILL & mask;
|
|
const Fl_Menu_Item *mi = o->mvalue();
|
|
if (mi) v = (int)mi->argument();
|
|
Fl_Grid::Cell *cell = g->cell(current_widget->o);
|
|
if (cell) {
|
|
old_v = cell->align() & mask;
|
|
if (old_v != v) {
|
|
cell->align((Fl_Grid_Align)(v | (cell->align() & ~mask)));
|
|
g->need_layout(true);
|
|
g->redraw();
|
|
Fluid.proj.set_modflag(1);
|
|
}
|
|
}
|
|
}} open
|
|
xywh {85 70 115 20} down_box BORDER_BOX labelsize 11 align 5 textsize 11
|
|
} {
|
|
MenuItem GRID_LEFT {
|
|
label GRID_LEFT
|
|
user_data {(fl_intptr_t)FL_GRID_LEFT} user_data_type long
|
|
xywh {20 20 31 20} labelsize 11
|
|
}
|
|
MenuItem {} {
|
|
label GRID_CENTER
|
|
user_data {(fl_intptr_t)FL_GRID_CENTER} user_data_type long
|
|
xywh {20 20 31 20} labelsize 11
|
|
}
|
|
MenuItem {} {
|
|
label GRID_RIGHT
|
|
user_data {(fl_intptr_t)FL_GRID_RIGHT} user_data_type long
|
|
xywh {20 20 31 20} labelsize 11
|
|
}
|
|
MenuItem {} {
|
|
label GRID_FILL
|
|
user_data {(fl_intptr_t)FL_GRID_HORIZONTAL} user_data_type long
|
|
xywh {20 20 31 20} labelsize 11
|
|
}
|
|
}
|
|
Fl_Choice {} {
|
|
label Vertical
|
|
callback {if ( !current_widget
|
|
|| !current_widget->parent
|
|
|| !current_widget->parent->is_a(Type::Grid))
|
|
{
|
|
return;
|
|
}
|
|
int mask = (FL_GRID_TOP | FL_GRID_BOTTOM | FL_GRID_VERTICAL);
|
|
Fl_Grid *g = ((Fl_Grid*)((Widget_Node*)current_widget->parent)->o);
|
|
if (v == LOAD) {
|
|
int a = FL_GRID_FILL & mask;
|
|
Fl_Grid::Cell *cell = g->cell(current_widget->o);
|
|
if (cell) {
|
|
a = cell->align() & mask;
|
|
}
|
|
const Fl_Menu_Item *mi = o->find_item_with_argument(a);
|
|
if (mi) o->value(mi);
|
|
} else {
|
|
Fluid.proj.undo.checkpoint();
|
|
int v = FL_GRID_FILL & mask, old_v = FL_GRID_FILL & mask;
|
|
const Fl_Menu_Item *mi = o->mvalue();
|
|
if (mi) v = (int)mi->argument();
|
|
Fl_Grid::Cell *cell = g->cell(current_widget->o);
|
|
if (cell) {
|
|
old_v = cell->align() & mask;
|
|
if (old_v != v) {
|
|
cell->align((Fl_Grid_Align)(v | (cell->align() & ~mask)));
|
|
g->need_layout(true);
|
|
g->redraw();
|
|
Fluid.proj.set_modflag(1);
|
|
}
|
|
}
|
|
}} open selected
|
|
xywh {205 70 115 20} down_box BORDER_BOX labelsize 11 align 5 textsize 11
|
|
} {
|
|
MenuItem {} {
|
|
label GRID_TOP
|
|
user_data {(fl_intptr_t)FL_GRID_TOP} user_data_type long
|
|
xywh {20 20 31 20} labelsize 11
|
|
}
|
|
MenuItem {} {
|
|
label GRID_CENTER
|
|
user_data {(fl_intptr_t)FL_GRID_CENTER} user_data_type long
|
|
xywh {20 20 31 20} labelsize 11
|
|
}
|
|
MenuItem {} {
|
|
label GRID_BOTTOM
|
|
user_data {(fl_intptr_t)FL_GRID_BOTTOM} user_data_type long
|
|
xywh {20 20 31 20} labelsize 11
|
|
}
|
|
MenuItem {} {
|
|
label GRID_FILL
|
|
user_data {(fl_intptr_t)FL_GRID_VERTICAL} user_data_type long
|
|
xywh {20 20 31 20} labelsize 11
|
|
}
|
|
}
|
|
Fl_Box {} {
|
|
xywh {385 70 1 20} hide resizable
|
|
}
|
|
}
|
|
Fl_Group wp_gridc_size {
|
|
label {Min. Size:}
|
|
callback propagate_load
|
|
xywh {85 105 315 20} labelfont 1 labelsize 11 align 4
|
|
} {
|
|
Fl_Input {} {
|
|
label {Width:}
|
|
callback {grid_child_cb(o, v, 12);}
|
|
xywh {85 105 55 20} labelsize 11 align 5 textsize 11
|
|
class {fld::widget::Formula_Input}
|
|
}
|
|
Fl_Input {} {
|
|
label {Height:}
|
|
callback {grid_child_cb(o, v, 13);}
|
|
xywh {145 105 55 20} labelsize 11 align 5 textsize 11
|
|
class {fld::widget::Formula_Input}
|
|
}
|
|
Fl_Box {} {
|
|
xywh {385 105 1 20} hide resizable
|
|
}
|
|
}
|
|
Fl_Group {} {
|
|
label {Span:}
|
|
callback propagate_load
|
|
xywh {85 140 315 20} labelfont 1 labelsize 11 align 4
|
|
} {
|
|
Fl_Input widget_grid_rowspan_input {
|
|
label {Row Span:}
|
|
callback {grid_child_cb(o, v, 10);
|
|
if (v!=LOAD) widget_tab_grid_child->do_callback(widget_tab_grid_child, LOAD);}
|
|
xywh {85 140 40 20} labelsize 11 align 5 textsize 11
|
|
class {fld::widget::Formula_Input}
|
|
}
|
|
Fl_Group {} {open
|
|
xywh {125 140 30 20}
|
|
} {
|
|
Fl_Button {} {
|
|
label {-}
|
|
callback {if (v!=LOAD) {
|
|
grid_child_cb(widget_grid_rowspan_input, v, 0x0100 + 10);
|
|
widget_tab_grid_child->do_callback(widget_tab_grid_child, LOAD);
|
|
}}
|
|
xywh {125 140 15 20} labelsize 11
|
|
code0 {o->clear_visible_focus();} compact 1
|
|
}
|
|
Fl_Button {} {
|
|
label {+}
|
|
callback {if (v!=LOAD) {
|
|
grid_child_cb(widget_grid_rowspan_input, v, 0x0200 + 10);
|
|
widget_tab_grid_child->do_callback(widget_tab_grid_child, LOAD);
|
|
}}
|
|
xywh {140 140 15 20} labelsize 11
|
|
code0 {o->clear_visible_focus();} compact 1
|
|
}
|
|
}
|
|
Fl_Input widget_grid_colspan_input {
|
|
label {Col. Span:}
|
|
callback {grid_child_cb(o, v, 11);
|
|
if (v!=LOAD) widget_tab_grid_child->do_callback(widget_tab_grid_child, LOAD);}
|
|
xywh {165 140 40 20} labelsize 11 align 5 textsize 11
|
|
class {fld::widget::Formula_Input}
|
|
}
|
|
Fl_Group {} {open
|
|
xywh {205 140 30 20}
|
|
} {
|
|
Fl_Button {} {
|
|
label {-}
|
|
callback {if (v!=LOAD) {
|
|
grid_child_cb(widget_grid_colspan_input, v, 0x0100 + 11);
|
|
widget_tab_grid_child->do_callback(widget_tab_grid_child, LOAD);
|
|
}}
|
|
xywh {205 140 15 20} labelsize 11
|
|
code0 {o->clear_visible_focus();} compact 1
|
|
}
|
|
Fl_Button {} {
|
|
label {+}
|
|
callback {if (v!=LOAD) {
|
|
grid_child_cb(widget_grid_colspan_input, v, 0x0200 + 11);
|
|
widget_tab_grid_child->do_callback(widget_tab_grid_child, LOAD);
|
|
}}
|
|
xywh {220 140 15 20} labelsize 11
|
|
code0 {o->clear_visible_focus();} compact 1
|
|
}
|
|
}
|
|
Fl_Box {} {
|
|
xywh {385 140 1 20} hide resizable
|
|
}
|
|
}
|
|
Fl_Box {} {
|
|
xywh {85 320 300 5} labelsize 11 hide resizable
|
|
}
|
|
Function {grid_child_cb(fld::widget::Formula_Input* i, void* v, int what)} {open return_type void
|
|
} {
|
|
code {if ( !current_widget
|
|
|| !current_widget->parent
|
|
|| !current_widget->parent->is_a(Type::Grid))
|
|
{
|
|
return;
|
|
}
|
|
Fl_Widget *child = ((Widget_Node*)current_widget)->o;
|
|
Fl_Grid_Proxy *g = ((Fl_Grid_Proxy*)((Widget_Node*)current_widget->parent)->o);
|
|
Fl_Grid::Cell *cell = g->any_cell(child);
|
|
if (v == LOAD) {
|
|
int v = -1;
|
|
if (cell) {
|
|
switch (what & 0x00ff) {
|
|
case 8: v = cell->row(); break;
|
|
case 9: v = cell->col(); break;
|
|
case 10: v = cell->rowspan(); break;
|
|
case 11: v = cell->colspan(); break;
|
|
case 12: cell->minimum_size(&v, nullptr); break;
|
|
case 13: cell->minimum_size(nullptr, &v); break;
|
|
}
|
|
}
|
|
i->value(v);
|
|
} else {
|
|
Fluid.proj.undo.checkpoint();
|
|
int v2 = -2, old_v = -2, 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 *new_cell = nullptr;
|
|
if (cell) {
|
|
switch (what & 0x00ff) {
|
|
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;
|
|
}
|
|
}
|
|
switch (what & 0xff00) {
|
|
case 0x0100: v--; break;
|
|
case 0x0200: v++; break;
|
|
}
|
|
if (old_v != v) {
|
|
switch (what & 0x00ff) {
|
|
case 8:
|
|
if (v2 == -1 && v >= 0) v2 = 0;
|
|
g->move_cell(current_widget->o, v, v2, 2); i->value(v);
|
|
break;
|
|
case 9:
|
|
if (v2 == -1 && v >= 0) v2 = 0;
|
|
g->move_cell(current_widget->o, v2, v, 2); i->value(v);
|
|
break;
|
|
case 10: if (cell && cell->row()+v<=g->rows() && v>0) cell->rowspan(v);
|
|
break;
|
|
case 11: if (cell && cell->col()+v<=g->cols() && v>0) cell->colspan(v);
|
|
break;
|
|
case 12: if (cell && v>=0) cell->minimum_size(v, v2);
|
|
break;
|
|
case 13: if (cell && v>=0) cell->minimum_size(v2, v);
|
|
break;
|
|
}
|
|
if (!cell && new_cell)
|
|
new_cell->minimum_size(20, 20);
|
|
g->need_layout(true);
|
|
Fluid.proj.set_modflag(1);
|
|
}
|
|
}} {}
|
|
}
|
|
}
|