use of javafx.scene.control.TableView in project blue by kunstmusik.
the class LineView method editPoints.
private void editPoints() {
TableView<LinePoint> table = new TableView<>();
TableColumn<LinePoint, Double> xCol = new TableColumn<>("x");
TableColumn<LinePoint, Double> yCol = new TableColumn<>("y");
table.getColumns().setAll(xCol, yCol);
table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
table.setItems(getSelectedLine().getObservableList());
table.setEditable(true);
xCol.setCellValueFactory(new PropertyValueFactory<LinePoint, Double>("x"));
xCol.setCellFactory(TextFieldTableCell.forTableColumn(new DoubleStringConverter()));
xCol.setOnEditCommit(te -> {
LinePoint lp = te.getRowValue();
if (getSelectedLine().getLinePoint(0) == lp || getSelectedLine().getLinePoint(getSelectedLine().size() - 1) == lp) {
return;
}
lp.setX(Utils.clamp(0.0, te.getNewValue(), 1.0));
});
xCol.setEditable(true);
yCol.setCellValueFactory(new PropertyValueFactory<LinePoint, Double>("y"));
yCol.setCellFactory(TextFieldTableCell.forTableColumn(new DoubleStringConverter()));
yCol.setOnEditCommit(te -> {
te.getRowValue().setY(Utils.clamp(getSelectedLine().getMin(), te.getNewValue(), getSelectedLine().getMax()));
});
yCol.setEditable(true);
Dialog<ButtonType> d = new Dialog<>();
d.initOwner(getScene().getWindow());
d.initModality(Modality.APPLICATION_MODAL);
d.getDialogPane().setContent(new ScrollPane(table));
d.getDialogPane().getStylesheets().add(BlueFX.getBlueFxCss());
d.getDialogPane().getButtonTypes().setAll(ButtonType.OK);
d.setTitle("Edit Points");
TableModelListener tml = tme -> {
repaint();
};
getSelectedLine().addTableModelListener(tml);
Optional<ButtonType> res = d.showAndWait();
getSelectedLine().removeTableModelListener(tml);
}
use of javafx.scene.control.TableView in project org.csstudio.display.builder by kasemir.
the class RulesDialog method createExpressionsTable.
/**
* @return Node for UI elements that edit the expressions
*/
private HBox createExpressionsTable() {
// Create table with editable rule 'bool expression' column
final TableColumn<ExprItem<?>, String> bool_exp_col = new TableColumn<>(Messages.RulesDialog_ColBoolExp);
bool_exp_col.setSortable(false);
bool_exp_col.setCellValueFactory(new PropertyValueFactory<ExprItem<?>, String>("boolExp"));
bool_exp_col.setCellFactory(tableColumn -> new TextFieldTableCell<ExprItem<?>, String>(new DefaultStringConverter()) {
private final ChangeListener<? super Boolean> focusedListener = (ob, o, n) -> {
if (!n)
cancelEdit();
};
/* Instance initializer. */
{
setAlignment(Pos.CENTER_LEFT);
}
@Override
public void cancelEdit() {
((TextField) getGraphic()).focusedProperty().removeListener(focusedListener);
super.cancelEdit();
}
@Override
public void commitEdit(final String newValue) {
((TextField) getGraphic()).focusedProperty().removeListener(focusedListener);
super.commitEdit(newValue);
}
@Override
public void startEdit() {
super.startEdit();
((TextField) getGraphic()).focusedProperty().addListener(focusedListener);
}
});
// Create table with editable rule 'value expression' column
final TableColumn<ExprItem<?>, Node> val_exp_col = new TableColumn<>(Messages.RulesDialog_ColValExp);
// This statement requires "val_exp_col" be defined.
bool_exp_col.setOnEditCommit(event -> {
final int row = event.getTablePosition().getRow();
expression_items.get(row).boolExpProperty().set(event.getNewValue());
ModelThreadPool.getTimer().schedule(() -> {
Platform.runLater(() -> val_exp_col.getCellData(row).requestFocus());
}, 123, TimeUnit.MILLISECONDS);
});
val_exp_col.setSortable(false);
val_exp_col.setCellValueFactory(new PropertyValueFactory<ExprItem<?>, Node>("field"));
val_exp_col.setCellFactory(tableColumn -> new TableCell<ExprItem<?>, Node>() {
@Override
protected void updateItem(final Node item, final boolean empty) {
// calling super here is very important - don't skip this!
super.updateItem(item, empty);
setGraphic(item);
}
});
val_exp_col.setOnEditCommit(event -> {
final int row = event.getTablePosition().getRow();
expression_items.get(row).fieldProperty().set(event.getNewValue());
event.consume();
ModelThreadPool.getTimer().schedule(() -> {
Platform.runLater(() -> btn_add_exp.requestFocus());
}, 1230, TimeUnit.MILLISECONDS);
});
expressions_table = new TableView<>(expression_items);
expressions_table.getColumns().add(bool_exp_col);
expressions_table.getColumns().add(val_exp_col);
expressions_table.setEditable(true);
expressions_table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
expressions_table.setTooltip(new Tooltip(Messages.RulesDialog_ExpressionsTT));
expressions_table.setPlaceholder(new Label(Messages.RulesDialog_NoExpressions));
// Buttons
btn_add_exp = new Button(Messages.Add, JFXUtil.getIcon("add.png"));
btn_add_exp.setMaxWidth(Double.MAX_VALUE);
btn_add_exp.setAlignment(Pos.CENTER_LEFT);
btn_add_exp.setOnAction(event -> {
selected_rule_item.addNewExpr(undo);
expression_items.setAll(selected_rule_item.expressions);
expressions_table.getSelectionModel().select(expression_items.size() - 1);
final int newRow = expression_items.size() - 1;
ModelThreadPool.getTimer().schedule(() -> {
Platform.runLater(() -> expressions_table.edit(newRow, bool_exp_col));
}, 123, TimeUnit.MILLISECONDS);
});
btn_rm_exp = new Button(Messages.Remove, JFXUtil.getIcon("delete.png"));
btn_rm_exp.setMaxWidth(Double.MAX_VALUE);
btn_rm_exp.setMinWidth(96);
btn_rm_exp.setAlignment(Pos.CENTER_LEFT);
btn_rm_exp.setDisable(true);
btn_rm_exp.setOnAction(event -> {
final int sel = expressions_table.getSelectionModel().getSelectedIndex();
if (sel >= 0)
expression_items.remove(sel);
});
btn_move_exp_up = new Button(Messages.MoveUp, JFXUtil.getIcon("up.png"));
btn_move_exp_up.setMaxWidth(Double.MAX_VALUE);
btn_move_exp_up.setAlignment(Pos.CENTER_LEFT);
btn_move_exp_up.setDisable(true);
btn_move_exp_up.setOnAction(event -> TableHelper.move_item_up(expressions_table, expression_items));
btn_move_exp_down = new Button(Messages.MoveDown, JFXUtil.getIcon("down.png"));
btn_move_exp_down.setMaxWidth(Double.MAX_VALUE);
btn_move_exp_down.setAlignment(Pos.CENTER_LEFT);
btn_move_exp_down.setDisable(true);
btn_move_exp_down.setOnAction(event -> TableHelper.move_item_down(expressions_table, expression_items));
final VBox buttons = new VBox(10, btn_add_exp, btn_rm_exp, btn_move_exp_up, btn_move_exp_down);
final HBox content = new HBox(10, expressions_table, buttons);
HBox.setHgrow(expressions_table, Priority.ALWAYS);
HBox.setHgrow(buttons, Priority.NEVER);
content.setDisable(true);
return content;
}
use of javafx.scene.control.TableView in project org.csstudio.display.builder by kasemir.
the class ScriptsDialog method createScriptsTable.
/**
* @return Node for UI elements that edit the scripts
*/
private Region createScriptsTable() {
scripts_icon_col = new TableColumn<>();
scripts_icon_col.setCellValueFactory(cdf -> new SimpleObjectProperty<ImageView>(getScriptImage(cdf.getValue())) {
{
bind(Bindings.createObjectBinding(() -> getScriptImage(cdf.getValue()), cdf.getValue().fileProperty()));
}
});
scripts_icon_col.setCellFactory(col -> new TableCell<ScriptItem, ImageView>() {
/* Instance initializer. */
{
setAlignment(Pos.CENTER_LEFT);
}
@Override
protected void updateItem(final ImageView item, final boolean empty) {
super.updateItem(item, empty);
super.setGraphic(item);
}
});
scripts_icon_col.setEditable(false);
scripts_icon_col.setSortable(false);
scripts_icon_col.setMaxWidth(25);
scripts_icon_col.setMinWidth(25);
// Create table with editable script 'file' column
scripts_name_col = new TableColumn<>(Messages.ScriptsDialog_ColScript);
scripts_name_col.setCellValueFactory(new PropertyValueFactory<ScriptItem, String>("file"));
scripts_name_col.setCellFactory(col -> new TextFieldTableCell<ScriptItem, String>(new DefaultStringConverter()) {
private final ChangeListener<? super Boolean> focusedListener = (ob, o, n) -> {
if (!n)
cancelEdit();
};
@Override
public void cancelEdit() {
((TextField) getGraphic()).focusedProperty().removeListener(focusedListener);
super.cancelEdit();
}
@Override
public void startEdit() {
super.startEdit();
((TextField) getGraphic()).focusedProperty().addListener(focusedListener);
}
@Override
public void commitEdit(final String newValue) {
((TextField) getGraphic()).focusedProperty().removeListener(focusedListener);
super.commitEdit(newValue);
Platform.runLater(() -> btn_pv_add.requestFocus());
}
});
scripts_name_col.setOnEditCommit(event -> {
final int row = event.getTablePosition().getRow();
script_items.get(row).file.set(event.getNewValue());
fixupScripts(row);
});
scripts_table = new TableView<>(script_items);
scripts_table.getColumns().add(scripts_icon_col);
scripts_table.getColumns().add(scripts_name_col);
scripts_table.setEditable(true);
scripts_table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
scripts_table.setTooltip(new Tooltip(Messages.ScriptsDialog_ScriptsTT));
scripts_table.setPlaceholder(new Label(Messages.ScriptsDialog_NoScripts));
// Buttons
addMenuButton = new MenuButton(Messages.Add, JFXUtil.getIcon("add.png"), new MenuItem(Messages.AddPythonFile, JFXUtil.getIcon("file-python.png")) {
{
setOnAction(e -> addPythonFile());
}
}, new MenuItem(Messages.AddJavaScriptFile, JFXUtil.getIcon("file-javascript.png")) {
{
setOnAction(e -> addJavaScriptFile());
}
}, new SeparatorMenuItem(), new MenuItem(Messages.AddEmbeddedPython, JFXUtil.getIcon("python.png")) {
{
setOnAction(e -> addEmbeddedJython());
}
}, new MenuItem(Messages.AddEmbeddedJavaScript, JFXUtil.getIcon("javascript.png")) {
{
setOnAction(e -> addEmbeddedJavaScript());
}
});
addMenuButton.setMaxWidth(Double.MAX_VALUE);
addMenuButton.setAlignment(Pos.CENTER_LEFT);
btn_script_remove = new Button(Messages.Remove, JFXUtil.getIcon("delete.png"));
btn_script_remove.setMaxWidth(Double.MAX_VALUE);
btn_script_remove.setAlignment(Pos.CENTER_LEFT);
btn_script_remove.setDisable(true);
btn_script_remove.setOnAction(event -> {
final int sel = scripts_table.getSelectionModel().getSelectedIndex();
if (sel >= 0) {
script_items.remove(sel);
fixupScripts(sel);
}
});
btn_edit = new SplitMenuButton(convertToFileMenuItem, new SeparatorMenuItem(), convertToEmbeddedPythonMenuItem, convertToEmbeddedJavaScriptMenuItem);
btn_edit.setText(Messages.Select);
btn_edit.setGraphic(JFXUtil.getIcon("select-file.png"));
btn_edit.setMaxWidth(Double.MAX_VALUE);
btn_edit.setMinWidth(120);
btn_edit.setAlignment(Pos.CENTER_LEFT);
btn_edit.setDisable(true);
btn_edit.setOnAction(e -> editOrSelect());
final VBox buttons = new VBox(10, addMenuButton, btn_script_remove, btn_edit);
final HBox content = new HBox(10, scripts_table, buttons);
HBox.setHgrow(scripts_table, Priority.ALWAYS);
HBox.setHgrow(buttons, Priority.NEVER);
return content;
}
use of javafx.scene.control.TableView in project org.csstudio.display.builder by kasemir.
the class WidgetInfoDialog method createMacros.
private Tab createMacros(Macros orig_macros) {
final Macros macros = (orig_macros == null) ? new Macros() : orig_macros;
// Use text field to allow copying the name and value
// Table uses list of macro names as input
// Name column just displays the macro name,..
final TableColumn<String, String> name = new TableColumn<>(Messages.WidgetInfoDialog_Name);
name.setCellFactory(TextFieldTableCell.forTableColumn());
name.setCellValueFactory(param -> new ReadOnlyStringWrapper(param.getValue()));
// .. value column fetches the macro value
final TableColumn<String, String> value = new TableColumn<>(Messages.WidgetInfoDialog_Value);
value.setCellFactory(TextFieldTableCell.forTableColumn());
value.setCellValueFactory(param -> new ReadOnlyStringWrapper(macros.getValue(param.getValue())));
final TableView<String> table = new TableView<>(FXCollections.observableArrayList(macros.getNames()));
table.getColumns().add(name);
table.getColumns().add(value);
table.setEditable(true);
table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
return new Tab(Messages.WidgetInfoDialog_TabMacros, table);
}
use of javafx.scene.control.TableView in project bisq-desktop by bisq-network.
the class OfferBookChartView method initialize.
@Override
public void initialize() {
changeListener = c -> updateChartData();
currencyListItemsListener = c -> {
if (model.getSelectedCurrencyListItem().isPresent())
currencyComboBox.getSelectionModel().select(model.getSelectedCurrencyListItem().get());
};
currencyComboBox = new ComboBox<>();
currencyComboBox.setPromptText(Res.get("list.currency.select"));
currencyComboBox.setConverter(GUIUtil.getCurrencyListItemConverter(Res.get("shared.oneOffer"), Res.get("shared.multipleOffers"), model.preferences));
Label currencyLabel = new AutoTooltipLabel(Res.getWithCol("shared.currency"));
HBox currencyHBox = new HBox();
currencyHBox.setSpacing(5);
currencyHBox.setPadding(new Insets(5, -20, -5, 20));
currencyHBox.setAlignment(Pos.CENTER_LEFT);
currencyHBox.getChildren().addAll(currencyLabel, currencyComboBox);
createChart();
Tuple4<TableView<OfferListItem>, VBox, Button, Label> tupleBuy = getOfferTable(OfferPayload.Direction.BUY);
Tuple4<TableView<OfferListItem>, VBox, Button, Label> tupleSell = getOfferTable(OfferPayload.Direction.SELL);
buyOfferTableView = tupleBuy.first;
sellOfferTableView = tupleSell.first;
leftButton = tupleBuy.third;
rightButton = tupleSell.third;
leftHeaderLabel = tupleBuy.forth;
rightHeaderLabel = tupleSell.forth;
bottomHBox = new HBox();
// 30
bottomHBox.setSpacing(20);
bottomHBox.setAlignment(Pos.CENTER);
HBox.setHgrow(tupleBuy.second, Priority.ALWAYS);
HBox.setHgrow(tupleSell.second, Priority.ALWAYS);
tupleBuy.second.setUserData(OfferPayload.Direction.BUY.name());
tupleSell.second.setUserData(OfferPayload.Direction.SELL.name());
bottomHBox.getChildren().addAll(tupleBuy.second, tupleSell.second);
root.getChildren().addAll(currencyHBox, areaChart, bottomHBox);
}
Aggregations