From 0c2622fb80867c843a89f3969707ce1e08566e0d Mon Sep 17 00:00:00 2001 From: iMoHax Date: Fri, 1 Aug 2014 11:37:34 +0400 Subject: [PATCH] - Fix scroll to selected item - Fix reset field on change station --- .../controllers/VendorEditorController.java | 22 ++++++++---- .../ru/trader/view/support/ViewUtils.java | 34 +++++++++++++++++++ .../view/support/cells/TextFieldCell.java | 17 ++-------- 3 files changed, 51 insertions(+), 22 deletions(-) create mode 100644 client/src/main/java/ru/trader/view/support/ViewUtils.java diff --git a/client/src/main/java/ru/trader/controllers/VendorEditorController.java b/client/src/main/java/ru/trader/controllers/VendorEditorController.java index fd4be18..0e9a33c 100644 --- a/client/src/main/java/ru/trader/controllers/VendorEditorController.java +++ b/client/src/main/java/ru/trader/controllers/VendorEditorController.java @@ -3,7 +3,6 @@ package ru.trader.controllers; import javafx.beans.property.DoubleProperty; import javafx.beans.property.ReadOnlyStringProperty; import javafx.beans.property.SimpleDoubleProperty; -import javafx.collections.ListChangeListener; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.scene.Parent; @@ -20,6 +19,7 @@ import org.slf4j.LoggerFactory; import ru.trader.core.OFFER_TYPE; import ru.trader.model.*; import ru.trader.model.support.BindingsHelper; +import ru.trader.view.support.ViewUtils; import ru.trader.view.support.cells.TextFieldCell; import java.util.Optional; @@ -63,12 +63,10 @@ public class VendorEditorController { public Action showDialog(Parent parent, Parent content, VendorModel vendor){ this.vendor = vendor; + reset(); if (vendor != null) { fill(); - } else { - reset(); } - Dialog dlg = new Dialog(parent, vendor == null ? "Добавление станции" : "Редактирование станции"); dlg.setContent(content); dlg.getActions().addAll(actSave, Dialog.Actions.CANCEL); @@ -114,7 +112,7 @@ public class VendorEditorController { if (index>0){ FakeOffer offer = items.getItems().remove(index); items.getItems().add(index-1, offer); - items.getSelectionModel().select(index - 1, items.getColumns().get(0)); + selectRow(index - 1); } } @@ -123,17 +121,27 @@ public class VendorEditorController { if (index>=0 && index item = Screeners.showAddItem(); if (item.isPresent()){ - items.getItems().add(new FakeOffer(item.get())); + int index = items.getSelectionModel().getSelectedIndex(); + if (index<0) index = items.getItems().size()-1; + items.getItems().add(index, new FakeOffer(item.get())); + selectRow(index); } } + private void selectRow(int index){ + items.requestFocus(); + items.getSelectionModel().select(index, items.getColumns().get(0)); + ViewUtils.show(items, index); + } + + public void saveChanges(){ LOG.info("Save vendor changes"); diff --git a/client/src/main/java/ru/trader/view/support/ViewUtils.java b/client/src/main/java/ru/trader/view/support/ViewUtils.java new file mode 100644 index 0000000..02b288d --- /dev/null +++ b/client/src/main/java/ru/trader/view/support/ViewUtils.java @@ -0,0 +1,34 @@ +package ru.trader.view.support; + +import com.sun.javafx.scene.control.skin.TableViewSkin; +import com.sun.javafx.scene.control.skin.VirtualFlow; +import javafx.collections.ObservableList; +import javafx.scene.control.TablePosition; +import javafx.scene.control.TableView; + +public class ViewUtils { + + //Scroll to row if invisible + public static void show(TableView tableView, int index){ + ObservableList kids = ((TableViewSkin) tableView.getSkin()).getChildren(); + if (kids == null || kids.isEmpty()) { return; } + VirtualFlow flow = (VirtualFlow)kids.get(1); + flow.show(index); + } + + // Edit next cell + public static void editNext(TableView tableView){ + TableView.TableViewSelectionModel sm = tableView.getSelectionModel(); + sm.selectNext(); + ObservableList pos = sm.getSelectedCells(); + for (TablePosition p : pos) { + if (p.getTableColumn().isEditable()) { + show(tableView, p.getRow() > 0 ? p.getRow() : 0); + //noinspection unchecked + tableView.edit(p.getRow(), p.getTableColumn()); + return; + } + } + editNext(tableView); + } +} diff --git a/client/src/main/java/ru/trader/view/support/cells/TextFieldCell.java b/client/src/main/java/ru/trader/view/support/cells/TextFieldCell.java index 92daaa0..c53b649 100644 --- a/client/src/main/java/ru/trader/view/support/cells/TextFieldCell.java +++ b/client/src/main/java/ru/trader/view/support/cells/TextFieldCell.java @@ -1,7 +1,6 @@ package ru.trader.view.support.cells; import javafx.application.Platform; -import javafx.collections.ObservableList; import javafx.scene.control.*; import javafx.scene.input.KeyCode; import javafx.scene.input.MouseButton; @@ -9,6 +8,7 @@ import javafx.util.Callback; import javafx.util.StringConverter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import ru.trader.view.support.ViewUtils; public class TextFieldCell extends TableCell { @@ -94,7 +94,7 @@ public class TextFieldCell extends TableCell { textField.prefWidthProperty().bind(this.getTableColumn().widthProperty()); textField.setOnKeyPressed(t -> { if (t.getCode() == KeyCode.ENTER) { - if (commit(true)) editNext(); + if (commit(true)) ViewUtils.editNext(getTableView()); } else if (t.getCode() == KeyCode.ESCAPE) { textField = null; cancelEdit(); @@ -132,17 +132,4 @@ public class TextFieldCell extends TableCell { return textField == null; } - protected void editNext(){ - TableView.TableViewSelectionModel sm = getTableView().getSelectionModel(); - sm.selectNext(); - ObservableList> pos = sm.getSelectedCells(); - for (TablePosition p : pos) { - if (p.getTableColumn().isEditable()) { - getTableView().scrollTo(p.getRow()>0? p.getRow()-1 : 0); - getTableView().edit(p.getRow(), p.getTableColumn()); - return; - } - } - editNext(); - } }