add details pane
This commit is contained in:
@@ -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<SystemModel> controlSystems;
|
||||
@FXML
|
||||
private MasterDetailPane resultPane;
|
||||
@FXML
|
||||
private TableView<ResultEntry> tblResults;
|
||||
@FXML
|
||||
private TableView<ResultEntry> tblDetail;
|
||||
|
||||
private MarketModel world;
|
||||
private ProfileModel profile;
|
||||
private PowerPlayAnalyzator analyzator;
|
||||
private final List<ResultEntry> result = FXCollections.observableArrayList();
|
||||
private final List<ResultEntry> 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<PowerPlayAnalyzator.IntersectData> 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;
|
||||
|
||||
@@ -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<T,V> implements Callback<TableColumn<T, V>, TableCell<T, V>> {
|
||||
private StringConverter<V> converter;
|
||||
|
||||
public TextCell() {
|
||||
}
|
||||
|
||||
public StringConverter<V> getConverter() {
|
||||
return converter;
|
||||
}
|
||||
|
||||
public void setConverter(StringConverter<V> converter) {
|
||||
this.converter = converter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TableCell<T, V> call(TableColumn<T, V> param) {
|
||||
return new TableCell<T, V>(){
|
||||
@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);
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,11 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<?import javafx.scene.control.*?>
|
||||
<?import javafx.scene.control.cell.*?>
|
||||
<?import javafx.scene.layout.*?>
|
||||
<?import org.controlsfx.glyphfont.*?>
|
||||
<?import javafx.scene.control.cell.PropertyValueFactory?>
|
||||
<?import ru.trader.view.support.cells.DistanceCell?>
|
||||
<?import org.controlsfx.control.CheckComboBox?>
|
||||
<?import org.controlsfx.control.MasterDetailPane?>
|
||||
<?import org.controlsfx.glyphfont.*?>
|
||||
<?import ru.trader.view.support.cells.*?>
|
||||
<?import ru.trader.view.support.*?>
|
||||
<VBox xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"
|
||||
fx:controller="ru.trader.controllers.PowerPlayController"
|
||||
prefHeight="500" >
|
||||
@@ -54,45 +56,47 @@
|
||||
</VBox>
|
||||
</HBox>
|
||||
</TitledPane>
|
||||
<MasterDetailPane fx:id="resultPane" detailSide="RIGHT" prefWidth="1190" dividerPosition="0.566" showDetailNode="false">
|
||||
<masterNode>
|
||||
<TitledPane text="Результаты анализа" collapsible="false">
|
||||
<TableView fx:id="tblResults">
|
||||
<columns>
|
||||
<TableColumn minWidth="200" text="%market.systems">
|
||||
<TableColumn minWidth="200" text="%market.system">
|
||||
<cellValueFactory><PropertyValueFactory property="name"/></cellValueFactory>
|
||||
</TableColumn>
|
||||
<TableColumn minWidth="200" text="%market.government">
|
||||
<cellValueFactory><PropertyValueFactory property="government"/></cellValueFactory>
|
||||
<TableColumn minWidth="180" text="Пересекается с">
|
||||
<cellValueFactory><PropertyValueFactory property="controlling"/></cellValueFactory>
|
||||
</TableColumn>
|
||||
<TableColumn minWidth="180" text="%market.allegiance">
|
||||
<cellValueFactory><PropertyValueFactory property="faction"/></cellValueFactory>
|
||||
<TableColumn minWidth="90" text="Пересечений">
|
||||
<cellValueFactory><PropertyValueFactory property="intersectCount"/></cellValueFactory>
|
||||
</TableColumn>
|
||||
<TableColumn minWidth="110" text="%market.powerState">
|
||||
<TableColumn minWidth="100" text="%market.powerState">
|
||||
<cellFactory><TextCell><converter><PowerStateStringConverter /></converter></TextCell></cellFactory>
|
||||
<cellValueFactory><PropertyValueFactory property="powerState"/></cellValueFactory>
|
||||
</TableColumn>
|
||||
<TableColumn minWidth="110" text="%market.power">
|
||||
<TableColumn minWidth="100" text="%market.power">
|
||||
<cellFactory><TextCell><converter><PowerStringConverter /></converter></TextCell></cellFactory>
|
||||
<cellValueFactory><PropertyValueFactory property="power"/></cellValueFactory>
|
||||
</TableColumn>
|
||||
<TableColumn minWidth="110" text="%market.order.distance" fx:id="sortColumn" sortType="ASCENDING">
|
||||
<TableColumn minWidth="120" text="%market.government">
|
||||
<cellFactory><TextCell><converter><GovernmentStringConverter /></converter></TextCell></cellFactory>
|
||||
<cellValueFactory><PropertyValueFactory property="government"/></cellValueFactory>
|
||||
</TableColumn>
|
||||
<TableColumn minWidth="120" text="%market.allegiance">
|
||||
<cellFactory><TextCell><converter><FactionStringConverter /></converter></TextCell></cellFactory>
|
||||
<cellValueFactory><PropertyValueFactory property="faction"/></cellValueFactory>
|
||||
</TableColumn>
|
||||
<TableColumn minWidth="80" text="%market.order.distance">
|
||||
<cellFactory><DistanceCell /></cellFactory>
|
||||
<cellValueFactory><PropertyValueFactory property="distance"/></cellValueFactory>
|
||||
</TableColumn>
|
||||
<TableColumn minWidth="80" text="Тип площадки">
|
||||
<TableColumn minWidth="100" text="Тип площадки">
|
||||
<cellValueFactory><PropertyValueFactory property="maxSizePad"/></cellValueFactory>
|
||||
</TableColumn>
|
||||
<TableColumn minWidth="80" text="Пересечений">
|
||||
<cellValueFactory><PropertyValueFactory property="intersectCount"/></cellValueFactory>
|
||||
</TableColumn>
|
||||
<TableColumn minWidth="200" text="Контролируемые системы">
|
||||
<cellValueFactory><PropertyValueFactory property="controlling"/></cellValueFactory>
|
||||
</TableColumn>
|
||||
|
||||
</columns>
|
||||
<columnResizePolicy>
|
||||
<TableView fx:constant="UNCONSTRAINED_RESIZE_POLICY"/>
|
||||
</columnResizePolicy>
|
||||
<sortOrder>
|
||||
<fx:reference source="sortColumn"/>
|
||||
</sortOrder>
|
||||
<contextMenu>
|
||||
<ContextMenu>
|
||||
<items>
|
||||
@@ -102,4 +106,43 @@
|
||||
</contextMenu>
|
||||
</TableView>
|
||||
</TitledPane>
|
||||
</masterNode>
|
||||
<detailNode>
|
||||
<TitledPane text="Системы в радиусе 15 LY" collapsible="false">
|
||||
<TableView fx:id="tblDetail">
|
||||
<columns>
|
||||
<TableColumn minWidth="100" text="%market.system">
|
||||
<cellValueFactory><PropertyValueFactory property="name"/></cellValueFactory>
|
||||
</TableColumn>
|
||||
<TableColumn minWidth="100" text="%market.powerState">
|
||||
<cellFactory><TextCell><converter><PowerStateStringConverter /></converter></TextCell></cellFactory>
|
||||
<cellValueFactory><PropertyValueFactory property="powerState"/></cellValueFactory>
|
||||
</TableColumn>
|
||||
<TableColumn minWidth="100" text="%market.power">
|
||||
<cellFactory><TextCell><converter><PowerStringConverter /></converter></TextCell></cellFactory>
|
||||
<cellValueFactory><PropertyValueFactory property="power"/></cellValueFactory>
|
||||
</TableColumn>
|
||||
<TableColumn minWidth="120" text="%market.government">
|
||||
<cellFactory><TextCell><converter><GovernmentStringConverter /></converter></TextCell></cellFactory>
|
||||
<cellValueFactory><PropertyValueFactory property="government"/></cellValueFactory>
|
||||
</TableColumn>
|
||||
<TableColumn minWidth="120" text="%market.allegiance">
|
||||
<cellFactory><TextCell><converter><FactionStringConverter /></converter></TextCell></cellFactory>
|
||||
<cellValueFactory><PropertyValueFactory property="faction"/></cellValueFactory>
|
||||
</TableColumn>
|
||||
</columns>
|
||||
<columnResizePolicy>
|
||||
<TableView fx:constant="UNCONSTRAINED_RESIZE_POLICY"/>
|
||||
</columnResizePolicy>
|
||||
<contextMenu>
|
||||
<ContextMenu>
|
||||
<items>
|
||||
<MenuItem text="%dialog.button.copy" onAction="#copyDetailToClipboard" />
|
||||
</items>
|
||||
</ContextMenu>
|
||||
</contextMenu>
|
||||
</TableView>
|
||||
</TitledPane>
|
||||
</detailNode>
|
||||
</MasterDetailPane>
|
||||
</VBox>
|
||||
|
||||
Reference in New Issue
Block a user