Archived
0

remove not using controller

This commit is contained in:
iMoHax
2016-04-14 13:58:30 +03:00
parent afa2d06b56
commit 24a0f6d165
2 changed files with 0 additions and 483 deletions

View File

@@ -1,359 +0,0 @@
package ru.trader.controllers;
import javafx.beans.binding.Bindings;
import javafx.collections.FXCollections;
import javafx.collections.ListChangeListener;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
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.CachedSuggestionProvider;
import ru.trader.view.support.autocomplete.SystemsProvider;
import java.util.Optional;
public class RouterController {
@FXML
private NumberField balance;
@FXML
private NumberField cargo;
@FXML
private NumberField distance;
@FXML
private NumberField tank;
@FXML
private NumberField jumps;
@FXML
private ScrollPane path;
@FXML
private Button addBtn;
@FXML
private Button editBtn;
@FXML
private Button removeBtn;
@FXML
private TextField sourceText;
private AutoCompletion<SystemModel> source;
@FXML
private ComboBox<String> sStation;
@FXML
private TextField targetText;
private AutoCompletion<SystemModel> target;
@FXML
private ComboBox<String> tStation;
@FXML
private TableView<OrderModel> tblOrders;
@FXML
private NumberField totalProfit;
@FXML
private NumberField totalBalance;
private MarketModel market;
private RouteModel route;
private final ObservableList<OrderModel> orders = FXCollections.observableArrayList();
@FXML
private void initialize(){
init();
balance.numberProperty().addListener((ov, o, n) -> {
totalBalance.setValue(n);
Main.SETTINGS.setBalance(n.doubleValue());
});
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) -> {
if (n != null) {
sStation.setItems(n.getStationNamesList());
} else {
sStation.setItems(FXCollections.emptyObservableList());
}
sStation.getSelectionModel().selectFirst();
});
target.valueProperty().addListener((ov, o, n) -> {
if (n != null) {
tStation.setItems(n.getStationNamesList());
} else {
tStation.setItems(FXCollections.emptyObservableList());
}
tStation.getSelectionModel().selectFirst();
});
balance.setOnAction((v)->cargo.requestFocus());
cargo.setOnAction((v) -> tank.requestFocus());
tank.setOnAction((v) -> distance.requestFocus());
distance.setOnAction((v)->jumps.requestFocus());
jumps.setOnAction((v)->balance.requestFocus());
balance.setValue(Main.SETTINGS.getBalance());
cargo.setValue(Main.SETTINGS.getCargo());
tank.setValue(Main.SETTINGS.getTank());
jumps.setValue(Main.SETTINGS.getJumps());
addBtn.disableProperty().bind(Bindings.createBooleanBinding(()-> {
SystemModel system = target.getValue();
return ModelFabric.isFake(system);
}, target.valueProperty()));
editBtn.disableProperty().bind(tblOrders.getSelectionModel().selectedIndexProperty().isEqualTo(-1));
removeBtn.disableProperty().bind(Bindings.createBooleanBinding(()-> {
int sel = tblOrders.getSelectionModel().getSelectedIndex();
return sel == -1 || sel != orders.size()-1;
}, tblOrders.getSelectionModel().selectedIndexProperty()));
tblOrders.setItems(orders);
orders.addListener((ListChangeListener<OrderModel>) c -> {
while (c.next()) {
if (c.wasRemoved()) {
c.getRemoved().forEach(this::onRemove);
}
if (c.wasAdded()) {
c.getAddedSubList().forEach(this::onAdd);
}
}
});
}
void init(){
if (market != null){
market.getNotificator().remove(routerChangeListener);
}
market = MainController.getMarket();
market.getNotificator().add(routerChangeListener);
SystemsProvider provider = market.getSystemsProvider();
if (source == null){
source = new AutoCompletion<>(sourceText, new CachedSuggestionProvider<>(provider), ModelFabric.NONE_SYSTEM, provider.getConverter());
} else {
source.setSuggestions(provider.getPossibleSuggestions());
source.setConverter(provider.getConverter());
}
if (target == null){
target = new AutoCompletion<>(targetText, new CachedSuggestionProvider<>(provider), ModelFabric.NONE_SYSTEM, provider.getConverter());
} else {
target.setSuggestions(provider.getPossibleSuggestions());
target.setConverter(provider.getConverter());
}
orders.clear();
sStation.setValue(ModelFabric.NONE_STATION.getName());
tStation.setValue(ModelFabric.NONE_STATION.getName());
totalBalance.setValue(balance.getValue());
totalProfit.setValue(0);
}
private void onAdd(OrderModel order){
totalProfit.add(order.getProfit());
totalBalance.add(order.getProfit());
source.setValue(order.getBuyer().getSystem());
sStation.setValue(order.getBuyer().getName());
target.setValue(ModelFabric.NONE_SYSTEM);
balance.setDisable(true);
}
private void onRemove(OrderModel order) {
totalProfit.sub(order.getProfit());
totalBalance.sub(order.getProfit());
source.setValue(order.getSystem());
sStation.setValue(order.getStation().getName());
target.setValue(ModelFabric.NONE_SYSTEM);
if (orders.isEmpty()) {
balance.setDisable(false);
}
}
public void addStationToRoute(){
SystemModel s = source.getValue();
SystemModel t = target.getValue();
StationModel sS = s != null ? s.get(sStation.getValue()) : ModelFabric.NONE_STATION;
StationModel tS = t != null ? t.get(tStation.getValue()) : ModelFabric.NONE_STATION;
RouteModel r = market.getPath(s, sS, t, tS);
if (r == null) return;
if (route != null){
route = route.add(r);
} else {
route = r;
}
refreshPath();
source.setValue(target.getValue());
sStation.setValue(tS.getName());
}
public void editOrders(){
OrderModel sel = tblOrders.getSelectionModel().getSelectedItem();
int index = tblOrders.getSelectionModel().getSelectedIndex();
//TODO: implement
/* market.getOrders(sel.getStation(), sel.getBuyer(), sel.getBalance(), result -> {
Optional<OrderModel> order = Screeners.showOrders(result);
if (order.isPresent()){
orders.set(index, order.get());
}
});*/
}
public void removeSelected(){
TableView.TableViewSelectionModel<OrderModel> select = tblOrders.getSelectionModel();
if (!select.isEmpty()){
int index = select.getSelectedIndex();
if (index > 0){
route = route.remove(select.getSelectedItem());
} else {
route = null;
}
orders.remove(index);
refreshPath();
}
}
public void recompute(){
if (route != null){
//TODO: implement
/// route.recompute(balance.getValue().doubleValue(), cargo.getValue().longValue());
orders.clear();
orders.addAll(route.getOrders());
refreshPath();
}
}
public void rebuild(){
if (route != null){
RouteModel r = market.getRoute(route);
if (r != null){
route = r;
orders.clear();
orders.addAll(route.getOrders());
refreshPath();
} else {
recompute();
}
}
}
public void removeAll(){
orders.clear();
totalBalance.setValue(balance.getValue());
totalProfit.setValue(0);
route = null;
refreshPath();
}
public void showTopOrders(){
market.getTop(totalBalance.getValue().doubleValue(), result -> {
Optional<OrderModel> order = Screeners.showOrders(result);
if (order.isPresent()){
orders.add(order.get());
addOrderToPath(order.get());
}
});
}
public void showOrders(){
SystemModel s = source.getValue();
SystemModel t = target.getValue();
StationModel sS = s != null ? s.get(sStation.getValue()) : ModelFabric.NONE_STATION;
StationModel tS = t != null ? t.get(tStation.getValue()) : ModelFabric.NONE_STATION;
market.getOrders(s, sS, t, tS, totalBalance.getValue().doubleValue(), result -> {
Optional<OrderModel> order = Screeners.showOrders(result);
if (order.isPresent()){
orders.add(order.get());
addOrderToPath(order.get());
}
});
}
public void showRoutes(){
SystemModel s = source.getValue();
SystemModel t = target.getValue();
StationModel sS = s != null ? s.get(sStation.getValue()) : ModelFabric.NONE_STATION;
StationModel tS = t != null ? t.get(tStation.getValue()) : ModelFabric.NONE_STATION;
market.getRoutes(s, sS, t, tS, totalBalance.getValue().doubleValue(), new CrawlerSpecificator(), routes -> {
Optional<RouteModel> path = Screeners.showRouters(routes);
if (path.isPresent()){
orders.addAll(path.get().getOrders());
addRouteToPath(path.get());
}
});
}
public void showTopRoutes(){
market.getTopRoutes(totalBalance.getValue().doubleValue(), routes -> {
Optional<RouteModel> path = Screeners.showRouters(routes);
if (path.isPresent()){
orders.addAll(path.get().getOrders());
addRouteToPath(path.get());
}
});
}
private void addRouteToPath(RouteModel route){
if (this.route == null){
this.route = route;
} else {
this.route = this.route.add(route);
}
refreshPath();
}
private void addOrderToPath(OrderModel order){
if (route != null){
route = route.add(order);
} else {
route = market.getPath(order);
}
refreshPath();
}
private void refreshPath(){
MainController.getProfile().setRoute(route);
if (route != null)
path.setContent(new RouteNode(route).getNode());
else
path.setContent(null);
}
private final ChangeMarketListener routerChangeListener = new ChangeMarketListener() {
@Override
public void add(StationModel station) {
if (station.getSystem().equals(source.getValue())){
sStation.getItems().add(station.getName());
}
if (station.getSystem().equals(target.getValue())){
tStation.getItems().add(station.getName());
}
}
@Override
public void remove(StationModel station) {
if (station.getSystem().equals(source.getValue())){
sStation.getItems().remove(station.getName());
}
if (station.getSystem().equals(target.getValue())){
tStation.getItems().remove(station.getName());
}
}
};
}

View File

@@ -1,124 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import ru.trader.view.support.NumberField?>
<?import javafx.scene.control.cell.PropertyValueFactory?>
<?import ru.trader.view.support.cells.DoubleCell?>
<?import ru.trader.view.support.cells.OfferCellValueImpl?>
<?import javafx.geometry.Insets?>
<?import ru.trader.view.support.cells.DistanceCell?>
<HBox xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"
fx:controller="ru.trader.controllers.RouterController">
<fx:define><Insets fx:id="fields_group_margin" left="2" right="10"/></fx:define>
<fx:define><Insets fx:id="separator_margin" top="10" bottom="10"/></fx:define>
<VBox minWidth="270">
<TitledPane text="%router.pane.ship" minHeight="160" collapsible="false">
<GridPane vgap="4">
<columnConstraints>
<ColumnConstraints minWidth="150" />
<ColumnConstraints minWidth="100" maxWidth="100"/>
</columnConstraints>
<Label text="%router.pane.ship.balance"/>
<NumberField fx:id="balance" GridPane.columnIndex="1" />
<Label text="%router.pane.ship.cargo" GridPane.rowIndex="1" />
<NumberField fx:id="cargo" GridPane.columnIndex="1" GridPane.rowIndex="1" />
<Label text="%router.pane.ship.fueltank" GridPane.rowIndex="2" />
<NumberField fx:id="tank" GridPane.columnIndex="1" GridPane.rowIndex="2" />
<Label text="%router.pane.ship.distance" GridPane.rowIndex="3" />
<NumberField fx:id="distance" GridPane.columnIndex="1" GridPane.rowIndex="3" />
</GridPane>
</TitledPane>
<TitledPane text="%router.pane.route" minHeight="320" collapsible="false">
<GridPane vgap="4">
<columnConstraints>
<ColumnConstraints minWidth="80"/>
<ColumnConstraints minWidth="170" maxWidth="170"/>
</columnConstraints>
<Label text="%router.pane.route.from" />
<TextField fx:id="sourceText" prefWidth="170" GridPane.columnIndex="1" />
<ComboBox fx:id="sStation" prefWidth="170" GridPane.rowIndex="1" GridPane.columnIndex="1" />
<Label text="%router.pane.route.to" GridPane.rowIndex="2"/>
<TextField fx:id="targetText" prefWidth="170" GridPane.columnIndex="1" GridPane.rowIndex="2"/>
<ComboBox fx:id="tStation" prefWidth="170" GridPane.columnIndex="1" GridPane.rowIndex="3"/>
<Label text="%router.pane.route.jumps" GridPane.rowIndex="4" />
<NumberField fx:id="jumps" GridPane.columnIndex="1" GridPane.rowIndex="4" />
<Separator GridPane.columnSpan="2" GridPane.rowIndex="5" GridPane.margin="$separator_margin"/>
<VBox GridPane.columnSpan="2" GridPane.rowIndex="6" spacing="5">
<HBox alignment="CENTER" spacing="5">
<Button fx:id="addBtn" text="%dialog.button.add" onAction="#addStationToRoute" />
<Button fx:id="editBtn" text="%dialog.button.edit" onAction="#editOrders"/>
<Button fx:id="removeBtn" text="%dialog.button.remove" onAction="#removeSelected"/>
</HBox>
<HBox alignment="CENTER" spacing="5">
<Button text="%router.button.recompute" onAction="#recompute"/>
<Button text="%router.button.rebuild" onAction="#rebuild"/>
<Button text="%dialog.button.clear" onAction="#removeAll" />
</HBox>
<HBox alignment="CENTER" spacing="5">
<Button prefWidth="80" text="%market.offers" onAction="#showOrders" />
<Button text="%router.button.top" onAction="#showTopOrders" />
</HBox>
<HBox alignment="CENTER" spacing="5">
<Button prefWidth="80" text="%router.button.routes" onAction="#showRoutes" />
<Button text="%router.button.top" onAction="#showTopRoutes" />
</HBox>
</VBox>
</GridPane>
</TitledPane>
<Pane VBox.vgrow="ALWAYS"/>
<TitledPane text="%router.pane.total" minHeight="100" collapsible="false">
<GridPane vgap="4">
<columnConstraints>
<ColumnConstraints minWidth="80"/>
<ColumnConstraints minWidth="170"/>
</columnConstraints>
<Label text="%router.pane.ship.balance"/>
<NumberField fx:id="totalBalance" prefWidth="100" GridPane.columnIndex="1" editable="false"/>
<Label text="%router.pane.total.profit" GridPane.rowIndex="1"/>
<NumberField fx:id="totalProfit" prefWidth="100" GridPane.columnIndex="1" GridPane.rowIndex="1" editable="false"/>
</GridPane>
</TitledPane>
</VBox>
<VBox HBox.hgrow="ALWAYS">
<TableView fx:id="tblOrders" VBox.vgrow="ALWAYS">
<columns>
<TableColumn minWidth="140.0" text="%market.system">
<cellValueFactory><PropertyValueFactory property="system"/></cellValueFactory>
</TableColumn>
<TableColumn minWidth="150.0" text="%market.order.seller">
<cellValueFactory><PropertyValueFactory property="station"/></cellValueFactory>
</TableColumn>
<TableColumn minWidth="140.0" text="%market.item">
<cellValueFactory><PropertyValueFactory property="name"/></cellValueFactory>
</TableColumn>
<TableColumn minWidth="80.0" text="%market.offer.price">
<cellFactory><DoubleCell/></cellFactory>
<cellValueFactory><PropertyValueFactory property="price"/></cellValueFactory>
</TableColumn>
<TableColumn minWidth="80.0" text="%market.order.count">
<cellValueFactory><PropertyValueFactory property="count"/></cellValueFactory>
</TableColumn>
<TableColumn minWidth="160.0" text="%market.order.buyer">
<cellValueFactory><OfferCellValueImpl property="buyOffer"/></cellValueFactory>
</TableColumn>
<TableColumn minWidth="80.0" text="%market.order.distance">
<cellFactory><DistanceCell /></cellFactory>
<cellValueFactory><PropertyValueFactory property="distance"/></cellValueFactory>
</TableColumn>
<TableColumn minWidth="80.0" text="%market.order.profit">
<cellFactory><DoubleCell/></cellFactory>
<cellValueFactory><PropertyValueFactory property="profit"/></cellValueFactory>
</TableColumn>
</columns>
<columnResizePolicy>
<TableView fx:constant="UNCONSTRAINED_RESIZE_POLICY"/>
</columnResizePolicy>
</TableView>
<ScrollPane fx:id="path" styleClass="path-pane" minHeight="100" fitToHeight="true"/>
</VBox>
</HBox>