From 44f6dd67cffab7f6e5055e579215b2bc3e923c58 Mon Sep 17 00:00:00 2001 From: iMoHax Date: Thu, 1 Oct 2015 14:02:48 +0300 Subject: [PATCH] select next entry on undocked and jump to transit entry --- .../trader/controllers/OffersController.java | 13 ++--- .../trader/controllers/ProfileController.java | 10 ++++ .../java/ru/trader/model/ProfileModel.java | 3 +- .../main/java/ru/trader/model/RouteModel.java | 51 ++++++++++++++----- client/src/main/resources/view/profile.fxml | 2 + 5 files changed, 56 insertions(+), 23 deletions(-) diff --git a/client/src/main/java/ru/trader/controllers/OffersController.java b/client/src/main/java/ru/trader/controllers/OffersController.java index a8373f1..939b06f 100644 --- a/client/src/main/java/ru/trader/controllers/OffersController.java +++ b/client/src/main/java/ru/trader/controllers/OffersController.java @@ -11,10 +11,7 @@ import org.controlsfx.control.SegmentedButton; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ru.trader.core.SERVICE_TYPE; -import ru.trader.model.MarketModel; -import ru.trader.model.OfferModel; -import ru.trader.model.StationModel; -import ru.trader.model.SystemModel; +import ru.trader.model.*; import ru.trader.model.support.BindingsHelper; import ru.trader.model.support.ChangeMarketListener; import ru.trader.view.support.FactionStringConverter; @@ -83,7 +80,7 @@ public class OffersController { if (n != null){ fillTables((StationModel) n.getUserData()); } else { - fillTables(null); + fillTables(ModelFabric.NONE_STATION); } }); stationsBar.setToggleGroup(stationsGrp); @@ -126,9 +123,9 @@ public class OffersController { stations.forEach(s -> stationsBar.getButtons().add(buildStationNode(s))); if (!stations.isEmpty()){ stationsBar.getButtons().get(0).setSelected(true); + } else { + fillTables(ModelFabric.NONE_STATION); } - - fillTables(stations.isEmpty() ? null : stations.get(0)); } private ToggleButton buildStationNode(StationModel station){ @@ -153,7 +150,7 @@ public class OffersController { cbShipyard.setSelected(false); cbMediumLandpad.setSelected(false); cbLargeLandpad.setSelected(false); - if (station != null){ + if (station != ModelFabric.NONE_STATION){ faction.setText(FactionStringConverter.toLocalizationString(station.getFaction())); government.setText(GovernmentStringConverter.toLocalizationString(station.getGovernment())); distance.setText(String.valueOf(station.getDistance())); diff --git a/client/src/main/java/ru/trader/controllers/ProfileController.java b/client/src/main/java/ru/trader/controllers/ProfileController.java index d92bd10..6750f91 100644 --- a/client/src/main/java/ru/trader/controllers/ProfileController.java +++ b/client/src/main/java/ru/trader/controllers/ProfileController.java @@ -5,6 +5,7 @@ import javafx.beans.value.ChangeListener; import javafx.collections.FXCollections; import javafx.fxml.FXML; import javafx.scene.control.Button; +import javafx.scene.control.CheckBox; import javafx.scene.control.ComboBox; import javafx.scene.control.TextField; import javafx.util.StringConverter; @@ -28,6 +29,8 @@ public class ProfileController { @FXML private ComboBox station; @FXML + private CheckBox docked; + @FXML private NumberField mass; @FXML private NumberField tank; @@ -79,6 +82,7 @@ public class ProfileController { consumeChanges(() -> {profile.setSystem(n); profile.setStation(ModelFabric.NONE_STATION);}); }); station.valueProperty().addListener((ov, o, n) -> consumeChanges(() -> profile.setStation(n))); + docked.selectedProperty().addListener((ov, o, n) -> consumeChanges(() -> profile.setDocked(n))); mass.numberProperty().addListener((ov, o, n) -> consumeChanges(() -> profile.setShipMass(n.doubleValue()))); tank.numberProperty().addListener((ov, o, n) -> consumeChanges(() -> profile.setShipTank(n.doubleValue()))); cargo.numberProperty().addListener((ov, o, n) -> consumeChanges(() -> profile.setShipCargo(n.intValue()))); @@ -90,14 +94,17 @@ public class ProfileController { unbind(); } this.profile = profile; + ignoreChanges = true; name.setText(profile.getName()); balance.setValue(profile.getBalance()); system.setValue(profile.getSystem()); station.setValue(profile.getStation()); + docked.setSelected(profile.isDocked()); mass.setValue(profile.getShipMass()); tank.setValue(profile.getShipTank()); cargo.setValue(profile.getShipCargo()); engine.setValue(profile.getShipEngine()); + ignoreChanges = false; bind(); } @@ -106,6 +113,7 @@ public class ProfileController { profile.balanceProperty().addListener(balanceListener); profile.systemProperty().addListener(systemListener); profile.stationProperty().addListener(stationListener); + profile.dockedProperty().addListener(dockedListener); profile.shipMassProperty().addListener(massListener); profile.shipTankProperty().addListener(tankListener); profile.shipCargoProperty().addListener(cargoListener); @@ -117,6 +125,7 @@ public class ProfileController { profile.balanceProperty().removeListener(balanceListener); profile.systemProperty().removeListener(systemListener); profile.stationProperty().removeListener(stationListener); + profile.dockedProperty().removeListener(dockedListener); profile.shipMassProperty().removeListener(massListener); profile.shipTankProperty().removeListener(tankListener); profile.shipCargoProperty().removeListener(cargoListener); @@ -128,6 +137,7 @@ public class ProfileController { private final ChangeListener balanceListener = (ov, o, n) -> consumeChanges(() -> balance.setValue(n)); private final ChangeListener systemListener = (ov, o, n) -> consumeChanges(() -> system.setValue(n)); private final ChangeListener stationListener = (ov, o, n) -> consumeChanges(() -> station.setValue(n)); + private final ChangeListener dockedListener = (ov, o, n) -> consumeChanges(() -> docked.setSelected(n)); private final ChangeListener massListener = (ov, o, n) -> consumeChanges(() -> mass.setValue(n)); private final ChangeListener tankListener = (ov, o, n) -> consumeChanges(() -> tank.setValue(n)); private final ChangeListener cargoListener = (ov, o, n) -> consumeChanges(() -> cargo.setValue(n)); diff --git a/client/src/main/java/ru/trader/model/ProfileModel.java b/client/src/main/java/ru/trader/model/ProfileModel.java index a22cfcc..2f96fa6 100644 --- a/client/src/main/java/ru/trader/model/ProfileModel.java +++ b/client/src/main/java/ru/trader/model/ProfileModel.java @@ -52,7 +52,7 @@ public class ProfileModel { system.addListener((ov, o, n) -> { LOG.debug("Change system, old: {}, new: {}", o, n); profile.setSystem(n != null && n != ModelFabric.NONE_SYSTEM ? n.getSystem() : null); - if (route.getValue() != null) {getRoute().updateCurrentEntry(n, null);} + if (route.getValue() != null) {getRoute().updateCurrentEntry(n);} }); station.addListener((ov, o, n) -> { LOG.debug("Change station, old: {}, new: {}", o, n); @@ -62,6 +62,7 @@ public class ProfileModel { docked.addListener((ov, o, n) -> { LOG.debug("Change docked, old: {}, new: {}", o, n); profile.setDocked(n); + if (!n && route.getValue() != null) {getRoute().updateCurrentEntry(getSystem(), getStation(), true);} }); shipMass.addListener((ov, o, n) -> { LOG.debug("Change ship mass, old: {}, new: {}", o, n); diff --git a/client/src/main/java/ru/trader/model/RouteModel.java b/client/src/main/java/ru/trader/model/RouteModel.java index 1f50911..008b2ab 100644 --- a/client/src/main/java/ru/trader/model/RouteModel.java +++ b/client/src/main/java/ru/trader/model/RouteModel.java @@ -226,24 +226,33 @@ public class RouteModel { this.currentEntry.set(currentEntry); } + + public void updateCurrentEntry(SystemModel system) { + updateCurrentEntry(system, null, false); + } + public void updateCurrentEntry(SystemModel system, StationModel station) { - for (int i = getCurrentEntry()+1; i < entries.size(); i++) { - RouteEntryModel entry = entries.get(i); - if (system.equals(entry.getStation().getSystem()) - && (station == null || station == ModelFabric.NONE_STATION || - station.equals(entry.getStation())) - ) - { - setCurrentEntry(i); + updateCurrentEntry(system, station, false); + } + + public void updateCurrentEntry(SystemModel system, StationModel station, boolean undock) { + if (undock){ + int index = getCurrentEntry(); + RouteEntryModel entry = entries.get(index); + if (index < entries.size()-1 && system.equals(entry.getStation().getSystem()) && entry.getStation().equals(station)){ + setCurrentEntry(index+1); + } + } else { + int index = getCurrentEntry(); + RouteEntryModel entry = entries.get(index); + if (entry.isTransit() && index < entries.size()-1 && system.equals(entry.getStation().getSystem())){ + setCurrentEntry(index+1); return; } - if (!entry.isTransit()) return; - } - if (isLoop()){ - for (int i = 0; i < getCurrentEntry()-1; i++) { - RouteEntryModel entry = entries.get(i); + for (int i = index+1; i < entries.size(); i++) { + entry = entries.get(i); if (system.equals(entry.getStation().getSystem()) - && (station == null || station == ModelFabric.NONE_STATION || + && (station == null || station == ModelFabric.NONE_STATION || station.equals(entry.getStation())) ) { @@ -252,6 +261,20 @@ public class RouteModel { } if (!entry.isTransit()) return; } + if (isLoop()){ + for (int i = 0; i < index-1; i++) { + entry = entries.get(i); + if (system.equals(entry.getStation().getSystem()) + && (station == null || station == ModelFabric.NONE_STATION || + station.equals(entry.getStation())) + ) + { + setCurrentEntry(i); + return; + } + if (!entry.isTransit()) return; + } + } } } } diff --git a/client/src/main/resources/view/profile.fxml b/client/src/main/resources/view/profile.fxml index a9c00d0..0694c17 100644 --- a/client/src/main/resources/view/profile.fxml +++ b/client/src/main/resources/view/profile.fxml @@ -19,6 +19,8 @@