@@ -53,6 +53,7 @@ public class TableRepresentation extends RegionBaseRepresentation<StringTable, T
5353 private final WidgetPropertyListener <List <ColumnProperty >> columnsListener = this ::columnsChanged ;
5454 private final WidgetPropertyListener <Object > valueListener = this ::valueChanged ;
5555 private final WidgetPropertyListener <List <List <WidgetColor >>> colorsListener = this ::cellColorsChanged ;
56+ private final WidgetPropertyListener <Boolean > tableEditableListener = this ::tableEditableChanged ;
5657
5758 /** Most recent column headers */
5859 private volatile List <String > headers = Collections .emptyList ();
@@ -69,7 +70,6 @@ public class TableRepresentation extends RegionBaseRepresentation<StringTable, T
6970 private volatile boolean updating_table = false ;
7071
7172 /** Listener for any changes in any column
72- *
7373 * Triggers update of headers and column configuration
7474 */
7575 private final UntypedWidgetPropertyListener column_listener = (WidgetProperty <?> property , Object old_value , Object new_value ) ->
@@ -80,9 +80,11 @@ public class TableRepresentation extends RegionBaseRepresentation<StringTable, T
8080 for (ColumnProperty column : model_widget .propColumns ().getValue ())
8181 new_headers .add (column .name ().getValue ());
8282
83+ // If all columns are marked as non-editable, then mark the entire table as non-editable
8384 Optional <ColumnProperty > anyColumnEditable = model_widget .propColumns ().getValue ()
8485 .stream ().filter (columnProperty -> columnProperty .editable ().getValue ()).findFirst ();
8586 model_widget .propEditable ().setValue (anyColumnEditable .isPresent ());
87+
8688 headers = new_headers ;
8789 dirty_columns .mark ();
8890 toolkit .scheduleUpdate (this );
@@ -168,22 +170,13 @@ public void selectionChanged(final StringTable table, final int[] rows, final in
168170 model_widget .propToolbar ().addUntypedPropertyListener (styleListener );
169171 model_widget .propRowSelectionMode ().addUntypedPropertyListener (styleListener );
170172 model_widget .runtimePropSetSelection ().addPropertyListener (selectionListener );
173+ model_widget .propEditable ().addPropertyListener (tableEditableListener );
171174
172175 columnsChanged (model_widget .propColumns (), null , model_widget .propColumns ().getValue ());
173176 model_widget .propColumns ().addPropertyListener (columnsListener );
174177
175178 model_widget .runtimeValue ().addPropertyListener (valueListener );
176179 model_widget .runtimeCellColors ().addPropertyListener (colorsListener );
177-
178- model_widget .propEditable ().addPropertyListener (new WidgetPropertyListener <Boolean >() {
179- @ Override
180- public void propertyChanged (WidgetProperty <Boolean > property , Boolean old_value , Boolean new_value ) {
181- if (!new_value ){
182- List <String > options = model_widget .getColumnOptions (0 );
183- System .out .println (options );
184- }
185- }
186- });
187180 }
188181
189182 @ Override
@@ -197,6 +190,7 @@ protected void unregisterListeners()
197190 model_widget .propToolbar ().removePropertyListener (styleListener );
198191 model_widget .propRowSelectionMode ().removePropertyListener (styleListener );
199192 model_widget .runtimePropSetSelection ().removePropertyListener (selectionListener );
193+ model_widget .propEditable ().removePropertyListener (tableEditableListener );
200194
201195 model_widget .propColumns ().removePropertyListener (columnsListener );
202196 columnsChanged (model_widget .propColumns (), model_widget .propColumns ().getValue (), null );
@@ -386,4 +380,18 @@ public void updateChanges()
386380 if (dirty_set_selection .checkAndClear ())
387381 jfx_node .setSelection (model_widget .runtimePropSetSelection ().getValue ());
388382 }
383+
384+ /**
385+ * Listener for the Enabled property of the table widget. If user chooses to make the table non-editable,
386+ * then all columns should be marked as non-editable.
387+ * @param property {@link WidgetProperty} for the table
388+ * @param oldValue Previous value
389+ * @param newValue New value
390+ */
391+ private void tableEditableChanged (final WidgetProperty <Boolean > property , final Boolean oldValue , final Boolean newValue ){
392+ if (!newValue ){
393+ model_widget .propColumns ().getValue ().forEach (column ->
394+ column .editable ().setValue (false ));
395+ }
396+ }
389397}
0 commit comments