Archived
0

implement copy to clipboard route

This commit is contained in:
iMoHax
2015-11-27 14:53:30 +03:00
parent 4b5931209e
commit 50297f1f1e
8 changed files with 56 additions and 0 deletions

View File

@@ -8,6 +8,7 @@ import javafx.scene.Parent;
import javafx.scene.control.ButtonType; import javafx.scene.control.ButtonType;
import javafx.scene.control.Dialog; import javafx.scene.control.Dialog;
import javafx.scene.control.TableView; import javafx.scene.control.TableView;
import ru.trader.Main;
import ru.trader.model.RouteModel; import ru.trader.model.RouteModel;
import ru.trader.model.support.BindingsHelper; import ru.trader.model.support.BindingsHelper;
import ru.trader.view.support.Localization; import ru.trader.view.support.Localization;
@@ -80,4 +81,13 @@ public class PathsController {
return tblPaths.getSelectionModel().getSelectedItem(); return tblPaths.getSelectionModel().getSelectedItem();
} }
@FXML
private void copyToClipboard(){
RouteModel route = getPath();
if (route != null){
Main.copyToClipboard(route.asString());
}
}
} }

View File

@@ -8,6 +8,7 @@ import javafx.fxml.FXML;
import javafx.scene.Node; import javafx.scene.Node;
import javafx.scene.control.*; import javafx.scene.control.*;
import javafx.scene.layout.Pane; import javafx.scene.layout.Pane;
import ru.trader.Main;
import ru.trader.analysis.CrawlerSpecificator; import ru.trader.analysis.CrawlerSpecificator;
import ru.trader.model.*; import ru.trader.model.*;
import ru.trader.model.support.BindingsHelper; import ru.trader.model.support.BindingsHelper;
@@ -258,6 +259,13 @@ public class RouteTrackController {
setRoute(null); setRoute(null);
} }
@FXML
private void copyToClipboard(){
if (route != null){
Main.copyToClipboard(route.asString());
}
}
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

@@ -6,6 +6,7 @@ import javafx.beans.property.*;
import javafx.beans.value.ObservableValue; import javafx.beans.value.ObservableValue;
import ru.trader.core.Order; import ru.trader.core.Order;
import ru.trader.model.support.ModelBindings; import ru.trader.model.support.ModelBindings;
import ru.trader.view.support.Localization;
import java.util.List; import java.util.List;
@@ -165,6 +166,10 @@ public class OrderModel {
return distance; return distance;
} }
public String asString(){
return String.format(Localization.getString("market.order.text.format"), getOffer().getItem().getName(), getStation().getFullName(), getBuyer().getFullName());
}
public StringBinding asString(final boolean buy){ public StringBinding asString(final boolean buy){
if (buy){ if (buy){
return Bindings.createStringBinding(() -> this.toString(buy), countProperty(), ModelBindings.offerPrice(buyOfferProperty(), true)); return Bindings.createStringBinding(() -> this.toString(buy), countProperty(), ModelBindings.offerPrice(buyOfferProperty(), true));

View File

@@ -8,6 +8,8 @@ import ru.trader.analysis.RouteReserve;
import ru.trader.core.Offer; import ru.trader.core.Offer;
import ru.trader.core.Order; import ru.trader.core.Order;
import ru.trader.model.support.BindingsHelper; import ru.trader.model.support.BindingsHelper;
import ru.trader.view.support.Localization;
import ru.trader.view.support.ViewUtils;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -121,6 +123,10 @@ public class RouteModel {
return _route.getLands(); return _route.getLands();
} }
public double getProfitByTonne(){
return _route.getProfit()/_route.getCargo();
}
public double getProfit() { public double getProfit() {
return profit.get(); return profit.get();
} }
@@ -467,4 +473,17 @@ public class RouteModel {
return new RouteModel(route, station.getMarket()); return new RouteModel(route, station.getMarket());
} }
public String asString(){
StringBuilder builder = new StringBuilder();
for (RouteEntryModel entry : entries) {
for (OrderModel order : entry.orders()) {
if (builder.length()>0) builder.append("\n");
builder.append(order.asString());
}
}
builder.append("\n");
builder.append(String.format(Localization.getString("routes.text.format"), getProfitByTonne(), ViewUtils.timeToString(getTime())));
return builder.toString();
}
} }

View File

@@ -29,6 +29,7 @@ market.order.profit=Profit
market.order.buyer=Buyer market.order.buyer=Buyer
market.order.seller=Seller market.order.seller=Seller
market.order.distance=Distance market.order.distance=Distance
market.order.text.format=%s from %s to %s
# Route # Route
routes.path=Path routes.path=Path
@@ -37,6 +38,7 @@ routes.refills=Refills
routes.lands=Landings routes.lands=Landings
routes.time=Time routes.time=Time
routes.profitByTime=Cr/Sec routes.profitByTime=Cr/Sec
routes.text.format=Profit: %.2f, Time: %s
# Dialog # Dialog
dialog.confirm.save=Changes were not saved, save changes? dialog.confirm.save=Changes were not saved, save changes?
@@ -47,6 +49,7 @@ dialog.button.cancel=Cancel
dialog.button.edit=Edit dialog.button.edit=Edit
dialog.button.remove=Remove dialog.button.remove=Remove
dialog.button.clear=Clear dialog.button.clear=Clear
dialog.button.copy=Copy
# main.fxml # main.fxml
main.title=Trader main.title=Trader

View File

@@ -29,6 +29,7 @@ market.order.profit=\u041F\u0440\u0438\u0431\u044B\u043B\u044C
market.order.buyer=\u041F\u043E\u043A\u0443\u043F\u0430\u0442\u0435\u043B\u044C market.order.buyer=\u041F\u043E\u043A\u0443\u043F\u0430\u0442\u0435\u043B\u044C
market.order.seller=\u041F\u0440\u043E\u0434\u0430\u0432\u0435\u0446 market.order.seller=\u041F\u0440\u043E\u0434\u0430\u0432\u0435\u0446
market.order.distance=\u0414\u0438\u0441\u0442\u0430\u043D\u0446\u0438\u044F market.order.distance=\u0414\u0438\u0441\u0442\u0430\u043D\u0446\u0438\u044F
market.order.text.format=%s \u0438\u0437 %s \u043D\u0430 %s
# Route # Route
routes.path=\u041F\u0443\u0442\u044C routes.path=\u041F\u0443\u0442\u044C
@@ -37,6 +38,7 @@ routes.refills=\u0417\u0430\u043F\u0440\u0430\u0432\u043E\u043A
routes.lands=\u041F\u043E\u0441\u0430\u0434\u043E\u043A routes.lands=\u041F\u043E\u0441\u0430\u0434\u043E\u043A
routes.time=\u0412\u0440\u0435\u043C\u044F routes.time=\u0412\u0440\u0435\u043C\u044F
routes.profitByTime=\u041A\u0440/\u0421\u0435\u043A routes.profitByTime=\u041A\u0440/\u0421\u0435\u043A
routes.text.format=\u041F\u0440\u0438\u0431\u044B\u043B\u044C: %.2f, \u0412\u0440\u0435\u043C\u044F: %s
# Dialog # Dialog
dialog.confirm.save=\u0418\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u043D\u0435 \u0431\u044B\u043B\u0438 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u044B, \u0441\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C? dialog.confirm.save=\u0418\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u043D\u0435 \u0431\u044B\u043B\u0438 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u044B, \u0441\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C?
@@ -47,6 +49,7 @@ dialog.button.cancel=\u041E\u0442\u043C\u0435\u043D\u0430
dialog.button.edit=\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C dialog.button.edit=\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C
dialog.button.remove=\u0423\u0434\u0430\u043B\u0438\u0442\u044C dialog.button.remove=\u0423\u0434\u0430\u043B\u0438\u0442\u044C
dialog.button.clear=\u041E\u0447\u0438\u0441\u0442\u0438\u0442\u044C dialog.button.clear=\u041E\u0447\u0438\u0441\u0442\u0438\u0442\u044C
dialog.button.copy=\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C
# main.fxml # main.fxml

View File

@@ -47,5 +47,12 @@
<sortOrder> <sortOrder>
<fx:reference source="profitByTime"/> <fx:reference source="profitByTime"/>
</sortOrder> </sortOrder>
<contextMenu>
<ContextMenu>
<items>
<MenuItem text="%dialog.button.copy" onAction="#copyToClipboard" />
</items>
</ContextMenu>
</contextMenu>
</TableView> </TableView>
</HBox> </HBox>

View File

@@ -59,6 +59,7 @@
<Button onAction="#addEntry"><graphic><Glyph text="FontAwesome|PLUS"/></graphic></Button> <Button onAction="#addEntry"><graphic><Glyph text="FontAwesome|PLUS"/></graphic></Button>
<Button onAction="#setActive"><graphic><Glyph text="FontAwesome|MAP_MARKER"/></graphic></Button> <Button onAction="#setActive"><graphic><Glyph text="FontAwesome|MAP_MARKER"/></graphic></Button>
<Button onAction="#clear"><graphic><Glyph text="FontAwesome|TRASH"/></graphic></Button> <Button onAction="#clear"><graphic><Glyph text="FontAwesome|TRASH"/></graphic></Button>
<Button onAction="#copyToClipboard"><graphic><Glyph text="FontAwesome|COPY"/></graphic></Button>
</HBox> </HBox>
</VBox> </VBox>
</VBox> </VBox>