Skip to content

Commit 2f09457

Browse files
committed
Consistent update of TabelWidget editable changes between table and columns
1 parent 082c48a commit 2f09457

1 file changed

Lines changed: 19 additions & 11 deletions

File tree

  • app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets

app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/TableRepresentation.java

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)