From ac08034a645e87a6fd0c8422096acaa44f156e01 Mon Sep 17 00:00:00 2001 From: iMoHax Date: Thu, 1 Oct 2015 16:08:16 +0300 Subject: [PATCH] change combobox to autocomplete textfield --- .../trader/controllers/RouterController.java | 58 ++++++++++--------- .../java/ru/trader/model/MarketModel.java | 16 ++++- .../java/ru/trader/model/ModelFabric.java | 8 +++ client/src/main/resources/view/router.fxml | 4 +- 4 files changed, 55 insertions(+), 31 deletions(-) diff --git a/client/src/main/java/ru/trader/controllers/RouterController.java b/client/src/main/java/ru/trader/controllers/RouterController.java index 0c222e5..86299be 100644 --- a/client/src/main/java/ru/trader/controllers/RouterController.java +++ b/client/src/main/java/ru/trader/controllers/RouterController.java @@ -6,16 +6,15 @@ import javafx.collections.FXCollections; import javafx.collections.ListChangeListener; import javafx.collections.ObservableList; import javafx.fxml.FXML; -import javafx.scene.control.Button; -import javafx.scene.control.ComboBox; -import javafx.scene.control.ScrollPane; -import javafx.scene.control.TableView; +import javafx.scene.control.*; import ru.trader.Main; import ru.trader.analysis.CrawlerSpecificator; import ru.trader.model.*; import ru.trader.model.support.ChangeMarketListener; import ru.trader.view.support.NumberField; import ru.trader.view.support.RouteNode; +import ru.trader.view.support.autocomplete.AutoCompletion; +import ru.trader.view.support.autocomplete.SystemsProvider; import java.util.Optional; @@ -46,13 +45,15 @@ public class RouterController { private Button removeBtn; @FXML - private ComboBox source; + private TextField sourceText; + private AutoCompletion source; @FXML private ComboBox sStation; @FXML - private ComboBox target; + private TextField targetText; + private AutoCompletion target; @FXML private ComboBox tStation; @@ -80,14 +81,14 @@ public class RouterController { cargo.numberProperty().addListener((ov, o, n) -> Main.SETTINGS.setCargo(n.intValue())); tank.numberProperty().addListener((ov, o, n) -> Main.SETTINGS.setTank(n.doubleValue())); jumps.numberProperty().addListener((ov, o, n) -> Main.SETTINGS.setJumps(n.intValue())); - source.valueProperty().addListener((ov, o, n) -> { + source.completionProperty().addListener((ov, o, n) -> { if (n != null) { sStation.setItems(n.getStationsList()); } else { sStation.setItems(FXCollections.emptyObservableList()); } }); - target.valueProperty().addListener((ov, o, n) -> { + target.completionProperty().addListener((ov, o, n) -> { if (n != null) { tStation.setItems(n.getStationsList()); } else { @@ -108,9 +109,9 @@ public class RouterController { jumps.setValue(Main.SETTINGS.getJumps()); addBtn.disableProperty().bind(Bindings.createBooleanBinding(()-> { - StationModel st = tStation.getValue(); - return st == null || st == ModelFabric.NONE_STATION; - }, tStation.valueProperty())); + SystemModel system = target.getCompletion(); + return ModelFabric.isFake(system); + }, target.completionProperty())); editBtn.disableProperty().bind(tblOrders.getSelectionModel().selectedIndexProperty().isEqualTo(-1)); removeBtn.disableProperty().bind(Bindings.createBooleanBinding(()-> { @@ -135,10 +136,12 @@ public class RouterController { void init(){ market = MainController.getMarket(); market.getNotificator().add(new RouterChangeListener()); - source.setItems(market.systemsProperty()); - source.getSelectionModel().selectFirst(); - target.setItems(market.systemsListProperty()); - target.getSelectionModel().selectFirst(); + SystemsProvider provider = new SystemsProvider(market); + if (source != null) source.dispose(); + source = new AutoCompletion<>(sourceText, provider, ModelFabric.NONE_SYSTEM, provider.getConverter()); + if (target != null) target.dispose(); + provider = new SystemsProvider(market); + target = new AutoCompletion<>(targetText, provider, ModelFabric.NONE_SYSTEM, provider.getConverter()); orders.clear(); totalBalance.setValue(balance.getValue()); totalProfit.setValue(0); @@ -162,14 +165,15 @@ public class RouterController { target.setValue(ModelFabric.NONE_SYSTEM); if (orders.isEmpty()) { balance.setDisable(false); - source.setDisable(false); } } public void addStationToRoute(){ + SystemModel s = source.getCompletion(); + SystemModel t = target.getCompletion(); StationModel sS = sStation.getValue(); StationModel tS = tStation.getValue(); - RouteModel r = market.getPath(sS, tS); + RouteModel r = market.getPath(s, sS, t, tS); if (r == null) return; if (route != null){ route.add(r); @@ -177,7 +181,7 @@ public class RouterController { route = r; } refreshPath(); - source.setValue(tS.getSystem()); + source.setValue(target.getCompletion()); sStation.setValue(tS); } @@ -252,8 +256,8 @@ public class RouterController { } public void showOrders(){ - SystemModel s = source.getValue(); - SystemModel t = target.getValue(); + SystemModel s = source.getCompletion(); + SystemModel t = target.getCompletion(); StationModel sS = sStation.getValue(); StationModel tS = tStation.getValue(); market.getOrders(s, sS, t, tS, totalBalance.getValue().doubleValue(), result -> { @@ -266,8 +270,8 @@ public class RouterController { } public void showRoutes(){ - SystemModel s = source.getValue(); - SystemModel t = target.getValue(); + SystemModel s = source.getCompletion(); + SystemModel t = target.getCompletion(); StationModel sS = sStation.getValue(); StationModel tS = tStation.getValue(); market.getRoutes(s, sS, t, tS, totalBalance.getValue().doubleValue(), new CrawlerSpecificator(), routes -> { @@ -275,7 +279,6 @@ public class RouterController { if (path.isPresent()){ orders.addAll(path.get().getOrders()); addRouteToPath(path.get()); - MainController.getProfile().setRoute(path.get()); Screeners.showHelper(); } }); @@ -310,6 +313,7 @@ public class RouterController { } private void refreshPath(){ + MainController.getProfile().setRoute(route); if (route != null) path.setContent(new RouteNode(route).getNode()); else @@ -320,20 +324,20 @@ public class RouterController { @Override public void add(StationModel station) { - if (station.getSystem().equals(source.getValue())){ + if (station.getSystem().equals(source.getCompletion())){ sStation.getItems().add(station); } - if (station.getSystem().equals(target.getValue())){ + if (station.getSystem().equals(target.getCompletion())){ tStation.getItems().add(station); } } @Override public void remove(StationModel station) { - if (station.getSystem().equals(source.getValue())){ + if (station.getSystem().equals(source.getCompletion())){ sStation.getItems().remove(station); } - if (station.getSystem().equals(target.getValue())){ + if (station.getSystem().equals(target.getCompletion())){ tStation.getItems().remove(station); } } diff --git a/client/src/main/java/ru/trader/model/MarketModel.java b/client/src/main/java/ru/trader/model/MarketModel.java index 22f7e68..b7edf02 100644 --- a/client/src/main/java/ru/trader/model/MarketModel.java +++ b/client/src/main/java/ru/trader/model/MarketModel.java @@ -244,11 +244,23 @@ public class MarketModel { return analyzer.getPath(order.getOrder()); } - public RouteModel getPath(StationModel from, StationModel to) { - Route p = analyzer.getPath(from.getStation(), to.getStation()); + private RouteModel getPath(Vendor from, Vendor to) { + Route p = analyzer.getPath(from, to); return modeler.get(p); } + public RouteModel getPath(StationModel from, StationModel to) { + return getPath(from.getStation(), to.getStation()); + } + + public RouteModel getPath(SystemModel from, StationModel stationFrom, SystemModel to, StationModel stationTo){ + if (ModelFabric.isFake(stationFrom)){ + return getPath(from.getSystem().asTransit(), ModelFabric.isFake(stationTo) ? to.getSystem().asTransit() : stationTo.getStation()); + } else { + return getPath(stationFrom.getStation(), ModelFabric.isFake(stationTo) ? to.getSystem().asTransit() : stationTo.getStation()); + } + } + public RouteModel getPath(OrderModel order) { Route p = analyzer.getPath(order.getOrder()); return modeler.get(p); diff --git a/client/src/main/java/ru/trader/model/ModelFabric.java b/client/src/main/java/ru/trader/model/ModelFabric.java index 31b431f..3d8c338 100644 --- a/client/src/main/java/ru/trader/model/ModelFabric.java +++ b/client/src/main/java/ru/trader/model/ModelFabric.java @@ -121,6 +121,14 @@ public class ModelFabric { public static StationModel NONE_STATION = new FAKE_STATION_MODEL(); public static ItemModel NONE_ITEM = new FAKE_ITEM_MODEL(); + public static boolean isFake(StationModel station) { + return station == null || station instanceof FAKE_STATION_MODEL; + } + + public static boolean isFake(SystemModel system) { + return system == null || system instanceof FAKE_SYSTEM_MODEL; + } + private static class FAKE_SYSTEM_MODEL extends SystemModel { FAKE_SYSTEM_MODEL() { super(); diff --git a/client/src/main/resources/view/router.fxml b/client/src/main/resources/view/router.fxml index f970804..fb7dee1 100644 --- a/client/src/main/resources/view/router.fxml +++ b/client/src/main/resources/view/router.fxml @@ -39,10 +39,10 @@