diff --git a/client/src/main/java/ru/trader/controllers/PowerPlayController.java b/client/src/main/java/ru/trader/controllers/PowerPlayController.java index d56cadc..2b34e2c 100644 --- a/client/src/main/java/ru/trader/controllers/PowerPlayController.java +++ b/client/src/main/java/ru/trader/controllers/PowerPlayController.java @@ -4,7 +4,9 @@ import javafx.beans.property.*; import javafx.collections.FXCollections; import javafx.fxml.FXML; import javafx.scene.control.*; +import javafx.scene.input.KeyCode; import org.controlsfx.control.CheckComboBox; +import org.controlsfx.control.MasterDetailPane; import ru.trader.Main; import ru.trader.analysis.PowerPlayAnalyzator; import ru.trader.core.*; @@ -47,12 +49,17 @@ public class PowerPlayController { @FXML private ListView controlSystems; @FXML + private MasterDetailPane resultPane; + @FXML private TableView tblResults; + @FXML + private TableView tblDetail; private MarketModel world; private ProfileModel profile; private PowerPlayAnalyzator analyzator; private final List result = FXCollections.observableArrayList(); + private final List detail = FXCollections.observableArrayList(); @FXML @@ -68,6 +75,7 @@ public class PowerPlayController { cbStates.getCheckModel().check(POWER_STATE.HEADQUARTERS); BindingsHelper.setTableViewItems(tblResults, result); + BindingsHelper.setTableViewItems(tblDetail, detail); initListeners(); } @@ -92,6 +100,30 @@ public class PowerPlayController { } private void initListeners(){ + tblResults.setOnKeyPressed(e -> { + if (e.getCode() == KeyCode.ESCAPE){ + if (!tblResults.getSelectionModel().isEmpty()) { + tblResults.getSelectionModel().clearSelection(); + } + } + }); + tblResults.getSelectionModel().selectedItemProperty().addListener((ov, o, n) -> { + if (n != null){ + fillDetail(n.starSystem); + resultPane.setShowDetailNode(true); + } else { + resultPane.setShowDetailNode(false); + } + }); + } + + private void fillDetail(SystemModel detailSystem) { + final Place starSystem = ModelFabric.get(detailSystem); + detail.clear(); + if (starSystem != null){ + Collection controllings = analyzator.getControlling(starSystem); + detail.addAll(BindingsHelper.observableList(controllings,d -> new ResultEntry(d, starSystem))); + } } @@ -150,6 +182,9 @@ public class PowerPlayController { @FXML private void search(){ + if (controlSystems.getItems().isEmpty()){ + addControlSystem(); + } if (rbIntersect.isSelected()){ getIntersects(); } @@ -203,6 +238,13 @@ public class PowerPlayController { } } + @FXML + private void copyDetailToClipboard(){ + ResultEntry entry = tblDetail.getSelectionModel().getSelectedItem(); + if (entry != null){ + Main.copyToClipboard(entry.starSystem.getName()); + } + } public class ResultEntry { private final SystemModel starSystem; diff --git a/client/src/main/java/ru/trader/view/support/cells/TextCell.java b/client/src/main/java/ru/trader/view/support/cells/TextCell.java new file mode 100644 index 0000000..1b6774d --- /dev/null +++ b/client/src/main/java/ru/trader/view/support/cells/TextCell.java @@ -0,0 +1,43 @@ +package ru.trader.view.support.cells; + +import javafx.scene.control.TableCell; +import javafx.scene.control.TableColumn; +import javafx.util.Callback; +import javafx.util.StringConverter; + +public class TextCell implements Callback, TableCell> { + private StringConverter converter; + + public TextCell() { + } + + public StringConverter getConverter() { + return converter; + } + + public void setConverter(StringConverter converter) { + this.converter = converter; + } + + @Override + public TableCell call(TableColumn param) { + return new TableCell(){ + @Override + protected void updateItem(V item, boolean empty) { + super.updateItem(item, empty); + if (item == null || empty) { + setText(null); + setGraphic(null); + } else { + if (converter != null){ + setText(converter.toString(item)); + } else { + setText(item.toString()); + } + setGraphic(null); + } + } + }; + } + +} diff --git a/client/src/main/resources/view/powerplay.fxml b/client/src/main/resources/view/powerplay.fxml index 4f5c81f..cd0d4d3 100644 --- a/client/src/main/resources/view/powerplay.fxml +++ b/client/src/main/resources/view/powerplay.fxml @@ -1,11 +1,13 @@ + - - - + + + + @@ -54,52 +56,93 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +