Normative baseline for standardized table control and table indicator widget classes
FROG — Free Open Graphical Language
- Widgets index
- Expression widget instances
- Expression widget interaction
- Expression widget realization
- Widget package publication
- Executable UI primitives
- Default realization — Table
frog.widgets.table_controlfrog.widgets.table_indicator
The Table family defines standardized widgets for flat row-and-column tabular data in FROG. It provides a public value model, column schema, row identity posture, selection model, viewport model, editing posture, sorting and filtering posture, and stable public part model.
A Table widget is not merely a decorative grid. It is a structured data widget suitable for measurement tables, parameter grids, logs, tabular inspection output, editable tabular inputs, and structured front-panel displays.
The intrinsic Table baseline intentionally remains flat. Tree tables, hierarchical tables, pivot tables, spreadsheets with formula languages, database views, and virtualized host-grid engines are downstream profiles or host realizations unless explicitly standardized elsewhere.
- family: structured tabular data widget family
- primary value: present
- value type:
frog.table - public value-facing surface: yes
- object-style access surface: yes
- primary value mirror property:
value - common label property:
label.text - common caption property:
caption.text - common visibility property:
interaction.visible
The family separates:
value— the class-owned table payload,columns.*— column schema and headers,rows.*— row identity and row-count posture,cells.*— cell-level access and edit surfaces,selection.*— current table selection,viewport.*— visible scroll window,sort.*andfilter.*— optional presentation / view postures,- realization-private row pools, cell renderers, virtualization caches, host handles, and editing controls.
- class_id:
frog.widgets.table_control - family:
table_widget - compatible role:
control
- primary value: present
- value type:
frog.table - natural value participation: yes
- user-mutable: yes when editing is enabled
- diagram-mutable: yes
- mirrored property:
value
A table control may allow cell editing, row selection, column selection, resizing, scrolling, sorting, and copy/paste-like host interactions when those surfaces are exposed by the active posture. The intrinsic class does not require every host to implement spreadsheet-grade editing.
- class_id:
frog.widgets.table_indicator - family:
table_widget - compatible role:
indicator
- primary value: present
- value type:
frog.table - natural value participation: yes
- user-mutable: no for table value in the standard portable posture
- diagram-mutable: yes
- mirrored property:
value
A table indicator is display-oriented. It may still support viewport changes, selection readout, copy selection, sorting view changes, or inspection gestures when those do not mutate the table value.
The canonical portable table value is a structured object:
| Field | Meaning | Baseline status |
|---|---|---|
columns | Column schema list. | required |
rows | Row records or row vectors. | required |
cells | Optional explicit cell matrix representation. | optional alternative |
row_ids | Stable row identifiers when exposed. | optional |
metadata | Optional table-level metadata. | optional |
Each column may expose:
columns[].idcolumns[].headercolumns[].typecolumns[].widthcolumns[].alignmentcolumns[].formatcolumns[].editablecolumns[].visible
Each cell value belongs to one row and one column. Portable cell values may contain scalar values such as booleans, strings, numeric values, enum values, paths, timestamps, or profile-supported scalar payloads. A cell may also carry optional presentation metadata such as format, alignment, validation state, or read-only state when exposed by the active profile.
Rows may be represented as arrays indexed by column order or as objects keyed by column id.
When row_ids are present, selection and editing surfaces SHOULD preserve those ids across sorting and filtering.
The Table family supports bounded table selection.
selection.mode—none,cell,row,column,range, ormulti_rangeselection.active_cellselection.anchor_cellselection.rangesselection.selected_rowsselection.selected_columns
Selection is distinct from value. Changing selection does not mutate table data unless a method or edit operation explicitly mutates table data.
editing.enabledediting.active_cellediting.commit_policy—on_enter,on_focus_lost,explicitediting.validation_policyediting.pending_value
Editing is legal for frog.widgets.table_control when enabled.
Editing table data through a table indicator is not part of the portable intrinsic posture.
viewport.row_offsetviewport.column_offsetviewport.visible_rowsviewport.visible_columnsviewport.row_heightviewport.default_column_width
sort.enabledsort.keyssort.direction—ascendingordescending
filter.enabledfilter.expressionfilter.visible_row_count
Sorting and filtering are view postures unless explicitly exposed as value transformations by another operation.
valuelabel.textlabel.visiblecaption.textcaption.visibleinteraction.visibleinteraction.enabled
rows.countcolumns.countcolumns.headerscolumns.schemacells.valuecells.formatcells.read_only
Table realizations expose LabVIEW-like visible-item posture as source-owned properties. The runtime may render host overlays, scroll tracks, headers, index displays, and selection faces, but it must consume these properties and the published Default Table parts instead of baking a table shell into runtime code.
display.index_display_visibledisplay.vertical_scrollbar_visibledisplay.horizontal_scrollbar_visibledisplay.row_headers_visibledisplay.column_headers_visibledisplay.vertical_lines_visibledisplay.horizontal_lines_visibledisplay.symbols_visible
Row and column header text maps to rows[].label and columns[].label.
Selection color maps to style.selection_face.*.
The active cell maps to selection.active_cell.*.
Scrollbar colors, borders, and thumb geometry map to style.scrollbar.*.
selection.*interaction.selection_scrolling_enabledheaders.editablecolumns.separators_movablerows.autosize_heightinput.multi_line_enabledscrolling.smooth_enabledediting.*viewport.*sort.*filter.*
If a runtime does not yet implement an advanced operation such as editable headers, moveable separators, or multi-line editing, it must report the limitation explicitly. It must not silently replace the source-owned property model with hardcoded runtime behavior.
focus()clear_selection()set_selection(selection)select_cell(row, column)select_row(row)select_column(column)scroll_to(row, column)scroll_to_row(row)scroll_to_column(column)set_cell_value(row, column, value)get_cell_value(row, column)insert_row(index, row)remove_row(index)append_row(row)clear_rows()resize_column(column, width)sort_by(column, direction)clear_sort()apply_filter(filter)clear_filter()
value_changedcell_value_changedselection_changedviewport_changedsort_changedfilter_changedrow_insertedrow_removedcolumn_resizededit_startededit_committededit_cancelledcell_clickedheader_clickedfocus_gainedfocus_lost
rootlabelcaptionframeheader_regioncolumn_header_regionrow_header_regiongrid_regionbody_regionrowcellactive_cellselection_faceedit_overlaysort_indicatorresize_handlevertical_scrollbarhorizontal_scrollbarfocus_ring
Rows, cells, and selection faces are public part categories. Realization-private row pools, recycled cell renderers, virtualization caches, host-grid handles, or editor controls are not semantic storage.
The Table family supports:
- natural value participation through
widget_value, - property access through
frog.ui.property_readandfrog.ui.property_write, - method invocation where legal,
- event observation where legal.
Ordinary table dataflow should prefer widget_value.
Object-style access should be used for selection, viewport, editing, sorting, filtering, and cell-level interaction.
Validators SHOULD diagnose at least:
- non-table
valuepayloads, - inconsistent row and column dimensions,
- column schema entries without stable identifiers,
- cell values incompatible with declared column type,
- selection ranges outside table bounds,
- invalid active cell,
- invalid viewport offset or visible window size,
- duplicate column identifiers,
- unsupported edit operations on indicators,
- attempts to treat realization-only row handles, cell renderers, virtualized row caches, or host-native grid handles as public semantic storage.
The Table family provides the standard portable flat tabular data baseline of FROG:
frog.widgets.table_controlfrog.widgets.table_indicator
It covers table value, schema, rows, cells, selection, viewport, editing, sorting, filtering, and a stable part model while keeping host-native virtualization and renderer internals downstream from class law.