Archived
0

implement add missions to current route

This commit is contained in:
iMoHax
2015-10-01 13:24:06 +03:00
parent 7b7fba78b5
commit 99c8e42f44
5 changed files with 121 additions and 6 deletions

View File

@@ -43,7 +43,8 @@ public class MissionsController {
private final ObservableList<MissionModel> missions; private final ObservableList<MissionModel> missions;
private StationModel station; private StationModel station;
private StationsProvider receiverProvider;
private StationsProvider buyerProvider;
public MissionsController() { public MissionsController() {
missions = FXCollections.observableArrayList(); missions = FXCollections.observableArrayList();
@@ -52,10 +53,10 @@ public class MissionsController {
@FXML @FXML
private void initialize(){ private void initialize(){
MarketModel world = MainController.getWorld(); MarketModel world = MainController.getWorld();
StationsProvider provider = new StationsProvider(world); receiverProvider = new StationsProvider(world);
receiver = new AutoCompletion<>(receiverText, provider, ModelFabric.NONE_STATION, provider.getConverter()); receiver = new AutoCompletion<>(receiverText, receiverProvider, ModelFabric.NONE_STATION, receiverProvider.getConverter());
provider = new StationsProvider(world); buyerProvider = new StationsProvider(world);
buyer = new AutoCompletion<>(buyerText, provider, ModelFabric.NONE_STATION, provider.getConverter()); buyer = new AutoCompletion<>(buyerText, buyerProvider, ModelFabric.NONE_STATION, buyerProvider.getConverter());
item.setItems(world.itemsProperty()); item.setItems(world.itemsProperty());
addCourierBtn.disableProperty().bind(Bindings.createBooleanBinding(() -> receiver.getCompletion() == null, receiver.completionProperty()) addCourierBtn.disableProperty().bind(Bindings.createBooleanBinding(() -> receiver.getCompletion() == null, receiver.completionProperty())
.or(courierProfit.wrongProperty()) .or(courierProfit.wrongProperty())
@@ -70,6 +71,18 @@ public class MissionsController {
); );
} }
StationsProvider getReceiverProvider() {
return receiverProvider;
}
StationsProvider getBuyerProvider() {
return buyerProvider;
}
ComboBox<ItemModel> getItem() {
return item;
}
@FXML @FXML
private void addCourier(){ private void addCourier(){
StationModel station = receiver.getCompletion(); StationModel station = receiver.getCompletion();

View File

@@ -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<MissionModel> 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<StationModel> stations = FXCollections.observableArrayList(route.getStations(index));
missionsController.getBuyerProvider().setPossibleSuggestions(stations);
missionsController.getReceiverProvider().setPossibleSuggestions(stations);
List<ItemModel> 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<? super Number> currentEntryListener = (ov, o, n) -> ViewUtils.doFX(() -> setIndex(n.intValue()));
private final ChangeListener<RouteModel> routeListener = (ov, o, n) -> ViewUtils.doFX(() -> setRoute(n));
}

View File

@@ -12,7 +12,7 @@ import java.util.concurrent.locks.ReentrantLock;
public abstract class CachedSuggestionProvider<T> implements Callback<AutoCompletionBinding.ISuggestionRequest, Collection<T>> { public abstract class CachedSuggestionProvider<T> implements Callback<AutoCompletionBinding.ISuggestionRequest, Collection<T>> {
private final List<T> cache = new ArrayList<>(); private final List<T> cache = new ArrayList<>();
private final ReentrantLock lock = new ReentrantLock(); private final ReentrantLock lock = new ReentrantLock();
private final ObservableList<T> possibleSuggestions; private ObservableList<T> possibleSuggestions;
private AutoCompletionBinding.ISuggestionRequest lastRequest; private AutoCompletionBinding.ISuggestionRequest lastRequest;
protected CachedSuggestionProvider(ObservableList<T> possibleSuggestions) { protected CachedSuggestionProvider(ObservableList<T> possibleSuggestions) {
@@ -20,6 +20,13 @@ public abstract class CachedSuggestionProvider<T> implements Callback<AutoComple
possibleSuggestions.addListener(listChangeListener); possibleSuggestions.addListener(listChangeListener);
} }
public void setPossibleSuggestions(ObservableList<T> possibleSuggestions){
this.possibleSuggestions.removeListener(listChangeListener);
this.possibleSuggestions = possibleSuggestions;
cache.clear();
this.possibleSuggestions.addListener(listChangeListener);
}
@Override @Override
public final Collection<T> call(final AutoCompletionBinding.ISuggestionRequest request) { public final Collection<T> call(final AutoCompletionBinding.ISuggestionRequest request) {
List<T> suggestions = new ArrayList<>(); List<T> suggestions = new ArrayList<>();

View File

@@ -64,6 +64,9 @@
<Tab text="Маршрут"> <Tab text="Маршрут">
<fx:include source="routeSearch.fxml"/> <fx:include source="routeSearch.fxml"/>
</Tab> </Tab>
<Tab text="Миссии">
<fx:include source="routeTrack.fxml"/>
</Tab>
</TabPane> </TabPane>
</center> </center>

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import ru.trader.view.support.cells.OfferListCell?>
<?import javafx.geometry.Insets?>
<?import ru.trader.view.support.NumberField?>
<?import org.controlsfx.glyphfont.Glyph?>
<VBox xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"
fx:controller="ru.trader.controllers.RouteTrackController"
spacing="4" >
<fx:include fx:id="missions" source="missions.fxml"/>
<HBox>
<ListView fx:id="missionsList" />
<Button prefWidth="30" onAction="#removeMission"><graphic><Glyph text="FontAwesome|MINUS"/></graphic></Button>
<Button prefWidth="80" text="Добавить" onAction="#addMissions" />
</HBox>
</VBox>