diff --git a/client/src/main/java/ru/trader/controllers/MissionsController.java b/client/src/main/java/ru/trader/controllers/MissionsController.java index 29a10e9..8aaeb63 100644 --- a/client/src/main/java/ru/trader/controllers/MissionsController.java +++ b/client/src/main/java/ru/trader/controllers/MissionsController.java @@ -43,7 +43,8 @@ public class MissionsController { private final ObservableList missions; private StationModel station; - + private StationsProvider receiverProvider; + private StationsProvider buyerProvider; public MissionsController() { missions = FXCollections.observableArrayList(); @@ -52,10 +53,10 @@ public class MissionsController { @FXML private void initialize(){ MarketModel world = MainController.getWorld(); - StationsProvider provider = new StationsProvider(world); - receiver = new AutoCompletion<>(receiverText, provider, ModelFabric.NONE_STATION, provider.getConverter()); - provider = new StationsProvider(world); - buyer = new AutoCompletion<>(buyerText, provider, ModelFabric.NONE_STATION, provider.getConverter()); + receiverProvider = new StationsProvider(world); + receiver = new AutoCompletion<>(receiverText, receiverProvider, ModelFabric.NONE_STATION, receiverProvider.getConverter()); + buyerProvider = new StationsProvider(world); + buyer = new AutoCompletion<>(buyerText, buyerProvider, ModelFabric.NONE_STATION, buyerProvider.getConverter()); item.setItems(world.itemsProperty()); addCourierBtn.disableProperty().bind(Bindings.createBooleanBinding(() -> receiver.getCompletion() == null, receiver.completionProperty()) .or(courierProfit.wrongProperty()) @@ -70,6 +71,18 @@ public class MissionsController { ); } + StationsProvider getReceiverProvider() { + return receiverProvider; + } + + StationsProvider getBuyerProvider() { + return buyerProvider; + } + + ComboBox getItem() { + return item; + } + @FXML private void addCourier(){ StationModel station = receiver.getCompletion(); diff --git a/client/src/main/java/ru/trader/controllers/RouteTrackController.java b/client/src/main/java/ru/trader/controllers/RouteTrackController.java new file mode 100644 index 0000000..4c0bcfb --- /dev/null +++ b/client/src/main/java/ru/trader/controllers/RouteTrackController.java @@ -0,0 +1,73 @@ +package ru.trader.controllers; + +import javafx.beans.value.ChangeListener; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.fxml.FXML; +import javafx.scene.control.CheckBox; +import javafx.scene.control.ComboBox; +import javafx.scene.control.ListView; +import javafx.scene.control.TextField; +import ru.trader.analysis.CrawlerSpecificator; +import ru.trader.model.*; +import ru.trader.view.support.ViewUtils; +import ru.trader.view.support.autocomplete.AutoCompletion; +import ru.trader.view.support.autocomplete.SystemsProvider; + +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +public class RouteTrackController { + + @FXML + private ListView missionsList; + @FXML + private MissionsController missionsController; + + private RouteModel route; + private int index; + + @FXML + private void initialize(){ + MainController.getProfile().routeProperty().addListener(routeListener); + missionsList.setItems(missionsController.getMissions()); + } + + public void setRoute(RouteModel route){ + if (this.route != null){ + this.route.currentEntryProperty().removeListener(currentEntryListener); + } + this.route = route; + setIndex(route.getCurrentEntry()); + this.route.currentEntryProperty().addListener(currentEntryListener); + } + + public void setIndex(int index){ + this.index = index; + missionsController.setStation(route.get(index).getStation()); + ObservableList stations = FXCollections.observableArrayList(route.getStations(index)); + missionsController.getBuyerProvider().setPossibleSuggestions(stations); + missionsController.getReceiverProvider().setPossibleSuggestions(stations); + List items = route.getSellOffers(index).stream().map(OfferModel::getItem).collect(Collectors.toList()); + missionsController.getItem().getItems().setAll(items); + } + + @FXML + private void addMissions(){ + int startIndex = route.isLoop() ? 1 : index+1; + route.addAll(startIndex, missionsList.getItems()); + } + + @FXML + private void removeMission(){ + int index = missionsList.getSelectionModel().getSelectedIndex(); + if (index >= 0){ + missionsList.getItems().remove(index); + } + } + + private final ChangeListener currentEntryListener = (ov, o, n) -> ViewUtils.doFX(() -> setIndex(n.intValue())); + private final ChangeListener routeListener = (ov, o, n) -> ViewUtils.doFX(() -> setRoute(n)); + +} diff --git a/client/src/main/java/ru/trader/view/support/autocomplete/CachedSuggestionProvider.java b/client/src/main/java/ru/trader/view/support/autocomplete/CachedSuggestionProvider.java index db4bea6..3dc2bdb 100644 --- a/client/src/main/java/ru/trader/view/support/autocomplete/CachedSuggestionProvider.java +++ b/client/src/main/java/ru/trader/view/support/autocomplete/CachedSuggestionProvider.java @@ -12,7 +12,7 @@ import java.util.concurrent.locks.ReentrantLock; public abstract class CachedSuggestionProvider implements Callback> { private final List cache = new ArrayList<>(); private final ReentrantLock lock = new ReentrantLock(); - private final ObservableList possibleSuggestions; + private ObservableList possibleSuggestions; private AutoCompletionBinding.ISuggestionRequest lastRequest; protected CachedSuggestionProvider(ObservableList possibleSuggestions) { @@ -20,6 +20,13 @@ public abstract class CachedSuggestionProvider implements Callback possibleSuggestions){ + this.possibleSuggestions.removeListener(listChangeListener); + this.possibleSuggestions = possibleSuggestions; + cache.clear(); + this.possibleSuggestions.addListener(listChangeListener); + } + @Override public final Collection call(final AutoCompletionBinding.ISuggestionRequest request) { List suggestions = new ArrayList<>(); diff --git a/client/src/main/resources/view/main.fxml b/client/src/main/resources/view/main.fxml index 5659b5f..2324703 100644 --- a/client/src/main/resources/view/main.fxml +++ b/client/src/main/resources/view/main.fxml @@ -64,6 +64,9 @@ + + + diff --git a/client/src/main/resources/view/routeTrack.fxml b/client/src/main/resources/view/routeTrack.fxml new file mode 100644 index 0000000..7db4621 --- /dev/null +++ b/client/src/main/resources/view/routeTrack.fxml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + +