From 50297f1f1ee10a70ae76e5f9719db1e7af7a5251 Mon Sep 17 00:00:00 2001 From: iMoHax Date: Fri, 27 Nov 2015 14:53:30 +0300 Subject: [PATCH] implement copy to clipboard route --- .../trader/controllers/PathsController.java | 10 ++++++++++ .../controllers/RouteTrackController.java | 8 ++++++++ .../main/java/ru/trader/model/OrderModel.java | 5 +++++ .../main/java/ru/trader/model/RouteModel.java | 19 +++++++++++++++++++ .../resources/lang/locale_en_US.properties | 3 +++ .../resources/lang/locale_ru_RU.properties | 3 +++ client/src/main/resources/view/paths.fxml | 7 +++++++ .../src/main/resources/view/routeTrack.fxml | 1 + 8 files changed, 56 insertions(+) diff --git a/client/src/main/java/ru/trader/controllers/PathsController.java b/client/src/main/java/ru/trader/controllers/PathsController.java index 04e0b16..a2cb807 100644 --- a/client/src/main/java/ru/trader/controllers/PathsController.java +++ b/client/src/main/java/ru/trader/controllers/PathsController.java @@ -8,6 +8,7 @@ import javafx.scene.Parent; import javafx.scene.control.ButtonType; import javafx.scene.control.Dialog; import javafx.scene.control.TableView; +import ru.trader.Main; import ru.trader.model.RouteModel; import ru.trader.model.support.BindingsHelper; import ru.trader.view.support.Localization; @@ -80,4 +81,13 @@ public class PathsController { return tblPaths.getSelectionModel().getSelectedItem(); } + @FXML + private void copyToClipboard(){ + RouteModel route = getPath(); + if (route != null){ + Main.copyToClipboard(route.asString()); + } + } + + } diff --git a/client/src/main/java/ru/trader/controllers/RouteTrackController.java b/client/src/main/java/ru/trader/controllers/RouteTrackController.java index fbeefa5..5428b9c 100644 --- a/client/src/main/java/ru/trader/controllers/RouteTrackController.java +++ b/client/src/main/java/ru/trader/controllers/RouteTrackController.java @@ -8,6 +8,7 @@ import javafx.fxml.FXML; import javafx.scene.Node; import javafx.scene.control.*; import javafx.scene.layout.Pane; +import ru.trader.Main; import ru.trader.analysis.CrawlerSpecificator; import ru.trader.model.*; import ru.trader.model.support.BindingsHelper; @@ -258,6 +259,13 @@ public class RouteTrackController { setRoute(null); } + @FXML + private void copyToClipboard(){ + if (route != null){ + Main.copyToClipboard(route.asString()); + } + } + private final ChangeListener currentEntryListener = (ov, o, n) -> ViewUtils.doFX(() -> setIndex(n.intValue())); private final InvalidationListener activeEntryListener = ov -> ViewUtils.doFX(this::update); private final ChangeListener routeListener = (ov, o, n) -> ViewUtils.doFX(() -> setRoute(n)); diff --git a/client/src/main/java/ru/trader/model/OrderModel.java b/client/src/main/java/ru/trader/model/OrderModel.java index d62a360..baf89ff 100644 --- a/client/src/main/java/ru/trader/model/OrderModel.java +++ b/client/src/main/java/ru/trader/model/OrderModel.java @@ -6,6 +6,7 @@ import javafx.beans.property.*; import javafx.beans.value.ObservableValue; import ru.trader.core.Order; import ru.trader.model.support.ModelBindings; +import ru.trader.view.support.Localization; import java.util.List; @@ -165,6 +166,10 @@ public class OrderModel { 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){ if (buy){ return Bindings.createStringBinding(() -> this.toString(buy), countProperty(), ModelBindings.offerPrice(buyOfferProperty(), true)); diff --git a/client/src/main/java/ru/trader/model/RouteModel.java b/client/src/main/java/ru/trader/model/RouteModel.java index c9675ec..d32f80e 100644 --- a/client/src/main/java/ru/trader/model/RouteModel.java +++ b/client/src/main/java/ru/trader/model/RouteModel.java @@ -8,6 +8,8 @@ import ru.trader.analysis.RouteReserve; import ru.trader.core.Offer; import ru.trader.core.Order; import ru.trader.model.support.BindingsHelper; +import ru.trader.view.support.Localization; +import ru.trader.view.support.ViewUtils; import java.util.*; import java.util.stream.Collectors; @@ -121,6 +123,10 @@ public class RouteModel { return _route.getLands(); } + public double getProfitByTonne(){ + return _route.getProfit()/_route.getCargo(); + } + public double getProfit() { return profit.get(); } @@ -467,4 +473,17 @@ public class RouteModel { 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(); + } + } diff --git a/client/src/main/resources/lang/locale_en_US.properties b/client/src/main/resources/lang/locale_en_US.properties index 0de74e1..7937159 100644 --- a/client/src/main/resources/lang/locale_en_US.properties +++ b/client/src/main/resources/lang/locale_en_US.properties @@ -29,6 +29,7 @@ market.order.profit=Profit market.order.buyer=Buyer market.order.seller=Seller market.order.distance=Distance +market.order.text.format=%s from %s to %s # Route routes.path=Path @@ -37,6 +38,7 @@ routes.refills=Refills routes.lands=Landings routes.time=Time routes.profitByTime=Cr/Sec +routes.text.format=Profit: %.2f, Time: %s # Dialog dialog.confirm.save=Changes were not saved, save changes? @@ -47,6 +49,7 @@ dialog.button.cancel=Cancel dialog.button.edit=Edit dialog.button.remove=Remove dialog.button.clear=Clear +dialog.button.copy=Copy # main.fxml main.title=Trader diff --git a/client/src/main/resources/lang/locale_ru_RU.properties b/client/src/main/resources/lang/locale_ru_RU.properties index 727d042..e36829d 100644 --- a/client/src/main/resources/lang/locale_ru_RU.properties +++ b/client/src/main/resources/lang/locale_ru_RU.properties @@ -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.seller=\u041F\u0440\u043E\u0434\u0430\u0432\u0435\u0446 market.order.distance=\u0414\u0438\u0441\u0442\u0430\u043D\u0446\u0438\u044F +market.order.text.format=%s \u0438\u0437 %s \u043D\u0430 %s # Route 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.time=\u0412\u0440\u0435\u043C\u044F 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.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.remove=\u0423\u0434\u0430\u043B\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 diff --git a/client/src/main/resources/view/paths.fxml b/client/src/main/resources/view/paths.fxml index 6689d62..926ddc7 100644 --- a/client/src/main/resources/view/paths.fxml +++ b/client/src/main/resources/view/paths.fxml @@ -47,5 +47,12 @@ + + + + + + + diff --git a/client/src/main/resources/view/routeTrack.fxml b/client/src/main/resources/view/routeTrack.fxml index 05ed0df..459ab00 100644 --- a/client/src/main/resources/view/routeTrack.fxml +++ b/client/src/main/resources/view/routeTrack.fxml @@ -59,6 +59,7 @@ +