implement copy to clipboard route
This commit is contained in:
@@ -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());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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));
|
||||||
|
|||||||
@@ -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));
|
||||||
|
|||||||
@@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user