Archived
0

route edit prototype

This commit is contained in:
iMoHax
2015-11-06 16:44:08 +03:00
parent 36f9a34aa5
commit 24c0fb055e
6 changed files with 104 additions and 2 deletions

View File

@@ -6,13 +6,18 @@ import javafx.collections.FXCollections;
import javafx.collections.ObservableList; import javafx.collections.ObservableList;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.scene.Node; import javafx.scene.Node;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label; import javafx.scene.control.Label;
import javafx.scene.control.ListView; import javafx.scene.control.ListView;
import javafx.scene.control.TextField;
import javafx.scene.layout.Pane; import javafx.scene.layout.Pane;
import ru.trader.model.*; import ru.trader.model.*;
import ru.trader.model.support.BindingsHelper; import ru.trader.model.support.BindingsHelper;
import ru.trader.view.support.Track; import ru.trader.view.support.Track;
import ru.trader.view.support.ViewUtils; import ru.trader.view.support.ViewUtils;
import ru.trader.view.support.autocomplete.AutoCompletion;
import ru.trader.view.support.autocomplete.CachedSuggestionProvider;
import ru.trader.view.support.autocomplete.SystemsProvider;
import ru.trader.view.support.cells.OrderListCell; import ru.trader.view.support.cells.OrderListCell;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -47,6 +52,11 @@ public class RouteTrackController {
private MissionsController missionsController; private MissionsController missionsController;
@FXML @FXML
private Pane track; private Pane track;
@FXML
private TextField newEntrySystemText;
private AutoCompletion<SystemModel> newEntrySystem;
@FXML
private ComboBox<String> newEntryStation;
private RouteModel route; private RouteModel route;
private Track trackNode; private Track trackNode;
@@ -58,12 +68,25 @@ public class RouteTrackController {
sellOrders.setCellFactory(new OrderListCell(true)); sellOrders.setCellFactory(new OrderListCell(true));
editGroup.setVisible(false); editGroup.setVisible(false);
init(); init();
newEntrySystem.valueProperty().addListener((ov, o , n) -> {
newEntryStation.setItems(n.getStationNamesList());
newEntryStation.getSelectionModel().selectFirst();
});
} }
void init(){ void init(){
ProfileModel profile = MainController.getProfile(); ProfileModel profile = MainController.getProfile();
profile.routeProperty().addListener(routeListener); profile.routeProperty().addListener(routeListener);
setRoute(profile.getRoute()); setRoute(profile.getRoute());
MarketModel market = MainController.getMarket();
SystemsProvider provider = market.getSystemsProvider();
if (newEntrySystem == null){
newEntrySystem = new AutoCompletion<>(newEntrySystemText, new CachedSuggestionProvider<>(provider), ModelFabric.NONE_SYSTEM, provider.getConverter());
} else {
newEntrySystem.setSuggestions(provider.getPossibleSuggestions());
newEntrySystem.setConverter(provider.getConverter());
}
newEntryStation.setValue(ModelFabric.NONE_STATION.getName());
} }
void unbind(){ void unbind(){
@@ -173,6 +196,39 @@ public class RouteTrackController {
} }
@FXML
private void addEntry(){
SystemModel toSystem = newEntrySystem.getValue();
StationModel toStation = toSystem != null ? toSystem.get(newEntryStation.getValue()) : ModelFabric.NONE_STATION;
if (!ModelFabric.isFake(toSystem)){
if (route != null){
if (!ModelFabric.isFake(toStation)){
setRoute(route.add(toStation));
} else {
setRoute(route.add(toSystem));
}
} else {
RouteModel r;
if (!ModelFabric.isFake(toStation)){
r = RouteModel.asRoute(toStation);
} else {
r = RouteModel.asRoute(toSystem);
}
setRoute(r);
}
}
}
@FXML
private void setActive(){
MainController.getProfile().setRoute(route);
}
@FXML
private void clear(){
setRoute(null);
}
private final ChangeListener<? super Number> currentEntryListener = (ov, o, n) -> ViewUtils.doFX(() -> setIndex(n.intValue())); private final ChangeListener<? super Number> currentEntryListener = (ov, o, n) -> ViewUtils.doFX(() -> setIndex(n.intValue()));
private final InvalidationListener activeEntryListener = ov -> ViewUtils.doFX(this::update); private final InvalidationListener activeEntryListener = ov -> ViewUtils.doFX(this::update);
private final ChangeListener<RouteModel> routeListener = (ov, o, n) -> ViewUtils.doFX(() -> setRoute(n)); private final ChangeListener<RouteModel> routeListener = (ov, o, n) -> ViewUtils.doFX(() -> setRoute(n));

View File

@@ -129,6 +129,20 @@ public class RouteModel {
return getCopy(); return getCopy();
} }
public RouteModel add(SystemModel system){
RouteEntryModel last = entries.get(entries.size()-1);
StationModel fromStation = last.getStation();
RouteModel path = market.getPath(fromStation.getSystem(), fromStation, system, ModelFabric.NONE_STATION);
return add(path);
}
public RouteModel add(StationModel station){
RouteEntryModel last = entries.get(entries.size()-1);
StationModel fromStation = last.getStation();
RouteModel path = market.getPath(fromStation.getSystem(), fromStation, station.getSystem(), station);
return add(path);
}
public RouteModel add(RouteModel route){ public RouteModel add(RouteModel route){
_route.join(route.getRoute()); _route.join(route.getRoute());
return getCopy(); return getCopy();
@@ -352,4 +366,15 @@ public class RouteModel {
} }
fillSellOrders(); fillSellOrders();
} }
public static RouteModel asRoute(SystemModel system){
Route route = new Route(new RouteEntry(system.getSystem().asTransit(),0,0,0));
return new RouteModel(route, system.getMarket());
}
public static RouteModel asRoute(StationModel station){
Route route = new Route(new RouteEntry(station.getStation(),0,0,0));
return new RouteModel(route, station.getMarket());
}
} }

View File

@@ -35,6 +35,10 @@ public class StationModel {
return station; return station;
} }
MarketModel getMarket(){
return market;
}
public String getName() {return station.getName();} public String getName() {return station.getName();}
public void setName(String value) { public void setName(String value) {

View File

@@ -37,6 +37,10 @@ public class SystemModel {
return system; return system;
} }
MarketModel getMarket(){
return market;
}
public String getName() {return name != null ? name.get() : system.getName();} public String getName() {return name != null ? name.get() : system.getName();}
public void setName(String value) { public void setName(String value) {

View File

@@ -46,6 +46,17 @@
</VBox> </VBox>
</StackPane> </StackPane>
</VBox> </VBox>
<VBox>
<VBox fx:id="track" minWidth="200"/> <VBox fx:id="track" minWidth="200"/>
<VBox>
<HBox><TextField fx:id="newEntrySystemText"/></HBox>
<HBox><ComboBox fx:id="newEntryStation"/></HBox>
<HBox>
<Button onAction="#addEntry"><graphic><Glyph text="FontAwesome|PLUS"/></graphic></Button>
<Button onAction="#setActive"><graphic><Glyph text="FontAwesome|MAP_MARKER"/></graphic></Button>
<Button onAction="#clear"><graphic><Glyph text="FontAwesome|TRASH"/></graphic></Button>
</HBox>
</VBox>
</VBox>
</HBox> </HBox>

View File

@@ -7,6 +7,7 @@ import ru.trader.core.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -30,7 +31,7 @@ public class RouteSearcher {
public List<Edge<Place>> getPath(Place from, Place to, Collection<Place> places){ public List<Edge<Place>> getPath(Place from, Place to, Collection<Place> places){
List<List<Edge<Place>>> res = search(from, to, places, 1, null); List<List<Edge<Place>>> res = search(from, to, places, 1, null);
return res.isEmpty() ? null : res.get(0); return res.isEmpty() ? Collections.emptyList() : res.get(0);
} }
public List<List<Edge<Place>>> getPaths(Place from, Collection<Place> places){ public List<List<Edge<Place>>> getPaths(Place from, Collection<Place> places){
@@ -43,6 +44,7 @@ public class RouteSearcher {
private List<List<Edge<Place>>> search(Place source, Place target, Collection<Place> places, int count, RouteSpecification<Place> specification){ private List<List<Edge<Place>>> search(Place source, Place target, Collection<Place> places, int count, RouteSpecification<Place> specification){
Profile profile = scorer.getProfile(); Profile profile = scorer.getProfile();
//TODO: fast search if source equals target
LOG.trace("Start search path from {} to {} ", source, target); LOG.trace("Start search path from {} to {} ", source, target);
ConnectibleGraph<Place> graph = new ConnectibleGraph<>(profile, callback); ConnectibleGraph<Place> graph = new ConnectibleGraph<>(profile, callback);
LOG.trace("Build connectible graph"); LOG.trace("Build connectible graph");