diff --git a/client/src/main/java/ru/trader/db/controllers/SystemsController.java b/client/src/main/java/ru/trader/db/controllers/SystemsController.java index 67245f9..2ec1c77 100644 --- a/client/src/main/java/ru/trader/db/controllers/SystemsController.java +++ b/client/src/main/java/ru/trader/db/controllers/SystemsController.java @@ -25,6 +25,10 @@ public class SystemsController { private TableColumn faction; @FXML private TableColumn government; + @FXML + private TableColumn power; + @FXML + private TableColumn powerState; private ObservableList stations = FXCollections.observableArrayList(); @@ -35,6 +39,8 @@ public class SystemsController { tblSystems.setItems(stations); faction.setCellFactory(ComboBoxTableCell.forTableColumn(new FactionStringConverter(), FXCollections.observableArrayList(FACTION.values()))); government.setCellFactory(ComboBoxTableCell.forTableColumn(new GovernmentStringConverter(), FXCollections.observableArrayList(GOVERNMENT.values()))); + power.setCellFactory(ComboBoxTableCell.forTableColumn(new PowerStringConverter(), FXCollections.observableArrayList(POWER.values()))); + powerState.setCellFactory(ComboBoxTableCell.forTableColumn(new PowerStateStringConverter(), FXCollections.observableArrayList(POWER_STATE.values()))); init(); } diff --git a/client/src/main/java/ru/trader/model/SystemModel.java b/client/src/main/java/ru/trader/model/SystemModel.java index 17085dd..1bc42ae 100644 --- a/client/src/main/java/ru/trader/model/SystemModel.java +++ b/client/src/main/java/ru/trader/model/SystemModel.java @@ -1,8 +1,6 @@ package ru.trader.model; -import javafx.beans.property.ReadOnlyStringProperty; -import javafx.beans.property.SimpleStringProperty; -import javafx.beans.property.StringProperty; +import javafx.beans.property.*; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import org.slf4j.Logger; @@ -62,7 +60,7 @@ public class SystemModel { public void setFaction(FACTION faction) { FACTION oldFaction = getFaction(); if (oldFaction != null && oldFaction.equals(faction) || faction == null) return; - LOG.info("Change faction station {} to {}", system, faction); + LOG.info("Change faction system {} to {}", system, faction); system.setFaction(faction); } @@ -71,10 +69,28 @@ public class SystemModel { public void setGovernment(GOVERNMENT government) { GOVERNMENT oldGovernment = getGovernment(); if (oldGovernment != null && oldGovernment.equals(government) || government == null) return; - LOG.info("Change government station {} to {}", system, government); + LOG.info("Change government system {} to {}", system, government); system.setGovernment(government); } + public POWER getPower() {return system.getPower();} + + public void setPower(POWER power) { + POWER oldPower = getPower(); + if (oldPower != null && oldPower.equals(power) || power == null) return; + LOG.info("Change power system {} to {}", system, power); + system.setPower(power, system.getPowerState()); + } + + public POWER_STATE getPowerState() {return system.getPowerState();} + + public void setPowerState(POWER_STATE powerState) { + POWER_STATE oldPowerState = getPowerState(); + if (oldPowerState != null && oldPowerState.equals(powerState) || powerState == null) return; + LOG.info("Change power state system {} to {}", system, powerState); + system.setPower(system.getPower(), powerState); + } + public double getX(){ return system.getX(); } diff --git a/client/src/main/java/ru/trader/view/support/PowerStateStringConverter.java b/client/src/main/java/ru/trader/view/support/PowerStateStringConverter.java new file mode 100644 index 0000000..bbeb1ad --- /dev/null +++ b/client/src/main/java/ru/trader/view/support/PowerStateStringConverter.java @@ -0,0 +1,24 @@ +package ru.trader.view.support; + + +import javafx.util.StringConverter; +import ru.trader.core.POWER_STATE; + + +public class PowerStateStringConverter extends StringConverter { + + @Override + public String toString(POWER_STATE powerState) { + return toLocalizationString(powerState); + } + + @Override + public POWER_STATE fromString(String powerState) { + return POWER_STATE.valueOf(powerState); + } + + public static String toLocalizationString(POWER_STATE powerState){ + if (powerState == null) return null; + return Localization.getString("power.states." + powerState.toString(), powerState.toString()); + } +} diff --git a/client/src/main/java/ru/trader/view/support/PowerStringConverter.java b/client/src/main/java/ru/trader/view/support/PowerStringConverter.java new file mode 100644 index 0000000..52c9343 --- /dev/null +++ b/client/src/main/java/ru/trader/view/support/PowerStringConverter.java @@ -0,0 +1,24 @@ +package ru.trader.view.support; + + +import javafx.util.StringConverter; +import ru.trader.core.POWER; + + +public class PowerStringConverter extends StringConverter { + + @Override + public String toString(POWER power) { + return toLocalizationString(power); + } + + @Override + public POWER fromString(String power) { + return POWER.valueOf(power); + } + + public static String toLocalizationString(POWER power){ + if (power == null) return null; + return Localization.getString("power." + power.toString(), power.toString()); + } +} diff --git a/client/src/main/java/ru/trader/view/support/cells/PropertyCellValueFactory.java b/client/src/main/java/ru/trader/view/support/cells/PropertyCellValueFactory.java index 496d2d3..3f1d258 100644 --- a/client/src/main/java/ru/trader/view/support/cells/PropertyCellValueFactory.java +++ b/client/src/main/java/ru/trader/view/support/cells/PropertyCellValueFactory.java @@ -3,6 +3,7 @@ package ru.trader.view.support.cells; import com.sun.javafx.property.PropertyReference; import javafx.beans.NamedArg; import javafx.beans.property.ReadOnlyObjectWrapper; +import javafx.beans.property.SimpleObjectProperty; import javafx.beans.value.ObservableValue; import javafx.scene.control.TableColumn; import javafx.util.Callback; @@ -23,12 +24,16 @@ public abstract class PropertyCellValueFactory extends PropertyFactory format(ObservableValue value); - private ObservableValue getCellValue(T rowData){ + private ObservableValue getCellValue(final T rowData){ ObservableValue value = null; - PropertyReference prop = getPropertyRef(rowData); + final PropertyReference prop = getPropertyRef(rowData); if (prop!=null){ if (prop.hasProperty()) value = prop.getProperty(rowData); - else value = new ReadOnlyObjectWrapper<>(prop.get(rowData)); + else if (prop.isWritable()) { + value = new SimpleObjectProperty<>(prop.get(rowData)); + value.addListener((ov , o, n) -> prop.set(rowData, n)); + } else + value = new ReadOnlyObjectWrapper<>(prop.get(rowData)); } if (value == null) return null; return format(value); diff --git a/client/src/main/java/ru/trader/view/support/cells/WritablePropertyValueFactory.java b/client/src/main/java/ru/trader/view/support/cells/WritablePropertyValueFactory.java new file mode 100644 index 0000000..256250e --- /dev/null +++ b/client/src/main/java/ru/trader/view/support/cells/WritablePropertyValueFactory.java @@ -0,0 +1,38 @@ +package ru.trader.view.support.cells; + +import com.sun.javafx.property.PropertyReference; +import javafx.beans.NamedArg; +import javafx.beans.property.ReadOnlyObjectWrapper; +import javafx.beans.property.SimpleObjectProperty; +import javafx.beans.value.ObservableValue; +import javafx.scene.control.TableColumn; +import javafx.util.Callback; +import ru.trader.view.support.PropertyFactory; + +public class WritablePropertyValueFactory extends PropertyFactory implements Callback, ObservableValue> { + public WritablePropertyValueFactory(@NamedArg("property") String property) { + super(property); + } + + + @Override + public ObservableValue call(TableColumn.CellDataFeatures param) { + return getCellValue(param.getValue()); + } + + private ObservableValue getCellValue(final S rowData){ + ObservableValue value = null; + final PropertyReference prop = getPropertyRef(rowData); + if (prop != null){ + if (prop.hasProperty()) value = prop.getProperty(rowData); + else if (prop.isWritable()) { + value = new SimpleObjectProperty<>(prop.get(rowData)); + value.addListener((ov , o, n) -> prop.set(rowData, n)); + } else + value = new ReadOnlyObjectWrapper<>(prop.get(rowData)); + } + return value; + } + + +} diff --git a/client/src/main/resources/view/db/stations.fxml b/client/src/main/resources/view/db/stations.fxml index 3c1df67..b0e3397 100644 --- a/client/src/main/resources/view/db/stations.fxml +++ b/client/src/main/resources/view/db/stations.fxml @@ -8,6 +8,7 @@ + @@ -19,22 +20,22 @@ - + - + - + - + - + - + diff --git a/client/src/main/resources/view/db/systems.fxml b/client/src/main/resources/view/db/systems.fxml index 7f9189c..7ef4648 100644 --- a/client/src/main/resources/view/db/systems.fxml +++ b/client/src/main/resources/view/db/systems.fxml @@ -8,6 +8,7 @@ + @@ -25,11 +26,18 @@ - + - + + + + + + + +