From 49fb50c45cfac077d6383c16f7f276ed7e82d711 Mon Sep 17 00:00:00 2001 From: iMoHax Date: Fri, 1 May 2015 17:10:57 +0300 Subject: [PATCH] use new dialog API --- .../trader/controllers/FilterController.java | 53 +++++++++---- .../controllers/GroupAddController.java | 51 ++++++++---- .../trader/controllers/ItemAddController.java | 57 +++++++++----- .../ru/trader/controllers/MainController.java | 12 +-- .../trader/controllers/PathsController.java | 77 ++++++++++++------- .../controllers/ProgressController.java | 37 +++++---- .../trader/controllers/RouterController.java | 39 +++++----- .../java/ru/trader/controllers/Screeners.java | 53 ++----------- .../controllers/SettingsController.java | 38 +++++---- .../controllers/StationEditorController.java | 68 ++++++++++------ .../controllers/SystemsEditorController.java | 52 ++++++++----- .../controllers/TopOrdersController.java | 47 +++++++---- .../resources/lang/locale_en_US.properties | 1 + .../resources/lang/locale_ru_RU.properties | 1 + 14 files changed, 346 insertions(+), 240 deletions(-) diff --git a/client/src/main/java/ru/trader/controllers/FilterController.java b/client/src/main/java/ru/trader/controllers/FilterController.java index 4e53a76..62387fe 100644 --- a/client/src/main/java/ru/trader/controllers/FilterController.java +++ b/client/src/main/java/ru/trader/controllers/FilterController.java @@ -3,13 +3,7 @@ package ru.trader.controllers; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.scene.Parent; -import javafx.scene.control.CheckBox; -import javafx.scene.control.ComboBox; -import javafx.scene.control.ListView; -import org.controlsfx.control.ButtonBar; -import org.controlsfx.control.action.Action; -import org.controlsfx.dialog.Dialog; -import org.controlsfx.dialog.DialogAction; +import javafx.scene.control.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ru.trader.core.MarketFilter; @@ -22,7 +16,7 @@ import ru.trader.model.support.BindingsHelper; import ru.trader.view.support.Localization; import ru.trader.view.support.NumberField; import ru.trader.view.support.cells.CustomListCell; - +import java.util.Optional; public class FilterController { private final static Logger LOG = LoggerFactory.getLogger(FilterController.class); @@ -56,10 +50,9 @@ public class FilterController { @FXML private ListView excludes; - public final Action actSave = new DialogAction(Localization.getString("dialog.button.save"), ButtonBar.ButtonType.OK_DONE, false, true, false, (e) -> save()); - private MarketModel market; private MarketFilter filter; + private Dialog dlg; @FXML private void initialize(){ @@ -74,6 +67,23 @@ public class FilterController { system.setItems(market.systemsProperty()); } + private void createDialog(Parent owner, Parent content){ + dlg = new Dialog<>(); + if (owner != null) dlg.initOwner(owner.getScene().getWindow()); + dlg.setTitle(Localization.getString("filter.title")); + ButtonType saveButton = new ButtonType(Localization.getString("dialog.button.save"), ButtonBar.ButtonData.OK_DONE); + dlg.getDialogPane().setContent(content); + dlg.getDialogPane().getButtonTypes().addAll(saveButton, ButtonType.CANCEL); + dlg.setResultConverter(dialogButton -> { + if (dialogButton == saveButton) { + save(); + return this.filter; + } + return null; + }); + dlg.setResizable(false); + } + private void fill(MarketFilter filter){ this.filter = filter; center.setValue(market.getModeler().get(filter.getCenter())); @@ -90,6 +100,14 @@ public class FilterController { excludes.setItems(BindingsHelper.observableList(filter.getExcludes(), market.getModeler()::get)); } + private void clear(){ + this.filter = null; + center.getSelectionModel().clearSelection(); + radius.clear(); + distance.clear(); + excludes.getItems().clear(); + } + private void save() { SystemModel s = center.getValue(); LOG.trace("Old filter", filter); @@ -109,17 +127,18 @@ public class FilterController { LOG.trace("New filter", filter); } - public Action showDialog(Parent parent, Parent content){ + public Optional showDialog(Parent parent, Parent content){ return showDialog(parent, content, new MarketFilter()); } - public Action showDialog(Parent parent, Parent content, MarketFilter filter){ - Dialog dlg = new Dialog(parent, Localization.getString("filter.title")); - dlg.setContent(content); - dlg.getActions().addAll(actSave, Dialog.ACTION_CANCEL); - dlg.setResizable(false); + public Optional showDialog(Parent parent, Parent content, MarketFilter filter){ + if (dlg == null){ + createDialog(parent, content); + } fill(filter); - return dlg.show(); + Optional result = dlg.showAndWait(); + clear(); + return result; } public void add(ActionEvent actionEvent) { diff --git a/client/src/main/java/ru/trader/controllers/GroupAddController.java b/client/src/main/java/ru/trader/controllers/GroupAddController.java index 5cb4d01..371cf96 100644 --- a/client/src/main/java/ru/trader/controllers/GroupAddController.java +++ b/client/src/main/java/ru/trader/controllers/GroupAddController.java @@ -1,43 +1,66 @@ package ru.trader.controllers; import javafx.collections.FXCollections; -import javafx.collections.ObservableList; import javafx.fxml.FXML; import javafx.scene.Parent; +import javafx.scene.control.ButtonType; import javafx.scene.control.ComboBox; +import javafx.scene.control.Dialog; import javafx.scene.control.TextField; -import org.controlsfx.control.ButtonBar; -import org.controlsfx.control.action.Action; -import org.controlsfx.dialog.Dialog; -import org.controlsfx.dialog.DialogAction; import ru.trader.core.GROUP_TYPE; import ru.trader.model.GroupModel; import ru.trader.model.MarketModel; import ru.trader.view.support.Localization; -public class GroupAddController { - private final Action OK = new DialogAction("OK", ButtonBar.ButtonType.OK_DONE, false, true, false); +import java.util.Optional; +public class GroupAddController { @FXML private ComboBox type; @FXML private TextField name; + private Dialog dlg; + private MarketModel market; @FXML private void initialize() { type.setItems(FXCollections.observableArrayList(GROUP_TYPE.values())); - type.getSelectionModel().selectFirst(); name.clear(); } - public GroupModel showDialog(Parent parent, Parent content, MarketModel market) { - - Dialog dlg = new Dialog(parent, Localization.getString("dialog.group.title")); - dlg.setContent(content); - dlg.getActions().addAll(OK, Dialog.ACTION_CANCEL); + private void createDialog(Parent owner, Parent content){ + dlg = new Dialog<>(); + if (owner != null) dlg.initOwner(owner.getScene().getWindow()); + dlg.setTitle(Localization.getString("dialog.group.title")); + dlg.getDialogPane().setContent(content); + dlg.getDialogPane().getButtonTypes().addAll(ButtonType.OK, ButtonType.CANCEL); + dlg.setResultConverter(dialogButton -> { + if (dialogButton == ButtonType.OK) { + return add(market); + } + return null; + }); dlg.setResizable(false); - GroupModel res = dlg.show() == OK ? add(market) : null; + } + + private void clear(){ + this.market = null; + name.clear(); + type.getSelectionModel().clearSelection(); + } + + private void fill(MarketModel market){ + this.market = market; + } + + public Optional showDialog(Parent parent, Parent content, MarketModel market) { + if (dlg == null){ + createDialog(parent, content); + } + fill(market); + Optional res = dlg.showAndWait(); + clear(); return res; } diff --git a/client/src/main/java/ru/trader/controllers/ItemAddController.java b/client/src/main/java/ru/trader/controllers/ItemAddController.java index 0daaa15..2d179cb 100644 --- a/client/src/main/java/ru/trader/controllers/ItemAddController.java +++ b/client/src/main/java/ru/trader/controllers/ItemAddController.java @@ -1,15 +1,12 @@ package ru.trader.controllers; -import javafx.collections.ObservableList; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.scene.Parent; +import javafx.scene.control.ButtonType; import javafx.scene.control.ComboBox; +import javafx.scene.control.Dialog; import javafx.scene.control.TextField; -import org.controlsfx.control.ButtonBar; -import org.controlsfx.control.action.Action; -import org.controlsfx.dialog.Dialog; -import org.controlsfx.dialog.DialogAction; import ru.trader.model.GroupModel; import ru.trader.model.ItemModel; import ru.trader.model.MarketModel; @@ -19,31 +16,54 @@ import java.util.Optional; public class ItemAddController { - private final Action OK = new DialogAction("OK", ButtonBar.ButtonType.OK_DONE, false, true, false); @FXML private ComboBox group; @FXML private TextField name; + private Dialog dlg; + private MarketModel market; + @FXML private void initialize() { - } - private void init(MarketModel market) { - group.setItems(market.getGroups()); - group.getSelectionModel().selectFirst(); - name.clear(); - } - public ItemModel showDialog(Parent parent, Parent content, MarketModel market) { - init(market); - Dialog dlg = new Dialog(parent, Localization.getString("dialog.item.title")); - dlg.setContent(content); - dlg.getActions().addAll(OK, Dialog.ACTION_CANCEL); + private void createDialog(Parent owner, Parent content){ + dlg = new Dialog<>(); + if (owner != null) dlg.initOwner(owner.getScene().getWindow()); + dlg.setTitle(Localization.getString("dialog.item.title")); + dlg.getDialogPane().setContent(content); + dlg.getDialogPane().getButtonTypes().addAll(ButtonType.OK, ButtonType.CANCEL); + dlg.setResultConverter(dialogButton -> { + if (dialogButton == ButtonType.OK) { + return add(market); + } + return null; + }); dlg.setResizable(false); - ItemModel res = dlg.show() == OK ? add(market) : null; + } + + private void fill(MarketModel market) { + this.market = market; + group.setItems(market.getGroups()); + } + + private void clear(){ + this.market = null; + name.clear(); + group.getSelectionModel().clearSelection(); + group.getItems().clear(); + } + + public Optional showDialog(Parent parent, Parent content, MarketModel market) { + if (dlg == null){ + createDialog(parent, content); + } + fill(market); + Optional res = dlg.showAndWait(); + clear(); return res; } @@ -57,7 +77,6 @@ public class ItemAddController { return res; } - public void add(ActionEvent actionEvent) { Optional _group = Screeners.showAddGroup(); if (_group.isPresent()){ diff --git a/client/src/main/java/ru/trader/controllers/MainController.java b/client/src/main/java/ru/trader/controllers/MainController.java index 6780b68..8481ac0 100644 --- a/client/src/main/java/ru/trader/controllers/MainController.java +++ b/client/src/main/java/ru/trader/controllers/MainController.java @@ -15,6 +15,7 @@ import org.slf4j.LoggerFactory; import org.xml.sax.SAXException; import ru.trader.Main; import ru.trader.World; +import ru.trader.core.MarketFilter; import ru.trader.maddavo.Parser; import ru.trader.model.*; import ru.trader.view.support.Localization; @@ -194,13 +195,11 @@ public class MainController { } public Optional addGroup(){ - GroupModel group = Screeners.showAddGroup(market); - return Optional.ofNullable(group); + return Screeners.showAddGroup(market); } public Optional addItem(){ - ItemModel item = Screeners.showAddItem(market); - return Optional.ofNullable(item); + return Screeners.showAddItem(market); } @@ -254,7 +253,10 @@ public class MainController { } public void editFilter(){ - Screeners.showFilter(market.getAnalyzer().getFilter()); + Optional res = Screeners.showFilter(market.getAnalyzer().getFilter()); + if (res.isPresent()){ + Main.SETTINGS.setFilter(res.get()); + } } public void impMadSystems(ActionEvent actionEvent) { diff --git a/client/src/main/java/ru/trader/controllers/PathsController.java b/client/src/main/java/ru/trader/controllers/PathsController.java index 8340eea..cf7e389 100644 --- a/client/src/main/java/ru/trader/controllers/PathsController.java +++ b/client/src/main/java/ru/trader/controllers/PathsController.java @@ -5,24 +5,30 @@ import javafx.collections.ListChangeListener; import javafx.collections.ObservableList; import javafx.fxml.FXML; import javafx.scene.Parent; +import javafx.scene.control.ButtonType; +import javafx.scene.control.Dialog; import javafx.scene.control.TableView; -import org.controlsfx.control.ButtonBar; -import org.controlsfx.control.action.Action; -import org.controlsfx.dialog.Dialog; -import org.controlsfx.dialog.DialogAction; import ru.trader.model.PathRouteModel; import ru.trader.model.support.BindingsHelper; import ru.trader.view.support.Localization; -import java.util.Collection; import java.util.List; +import java.util.Optional; public class PathsController { - private final Action OK = new DialogAction("OK", ButtonBar.ButtonType.OK_DONE, false, true, false); - @FXML private TableView tblPaths; private final List paths = FXCollections.observableArrayList(); + private final ListChangeListener PATHS_CHANGE_LISTENER = l -> { + while (l.next()) { + if (l.wasAdded()) { + this.paths.addAll(l.getAddedSubList()); + } + } + }; + + private Dialog dlg; + private ObservableList p; @FXML @@ -31,16 +37,42 @@ public class PathsController { } - public PathRouteModel showDialog(Parent parent, Parent content, ObservableList paths) { - - init(paths); - - Dialog dlg = new Dialog(parent, Localization.getString("paths.title")); - dlg.setContent(content); - dlg.getActions().addAll(OK, Dialog.ACTION_CANCEL); + private void createDialog(Parent owner, Parent content){ + dlg = new Dialog<>(); + if (owner != null) dlg.initOwner(owner.getScene().getWindow()); + dlg.setTitle(Localization.getString("paths.title")); + dlg.getDialogPane().setContent(content); + dlg.getDialogPane().getButtonTypes().addAll(ButtonType.OK, ButtonType.CANCEL); + dlg.setResultConverter(dialogButton -> { + if (dialogButton == ButtonType.OK) { + return getPath(); + } + return null; + }); dlg.setResizable(false); - PathRouteModel res = dlg.show() == OK ? getPath() : null; - paths.clear(); + } + + private void fill(ObservableList paths){ + this.paths.clear(); + this.paths.addAll(paths); + p = paths; + p.addListener(PATHS_CHANGE_LISTENER); + } + + private void clear(){ + tblPaths.getSelectionModel().clearSelection(); + this.paths.clear(); + p.removeListener(PATHS_CHANGE_LISTENER); + p = null; + } + + public Optional showDialog(Parent parent, Parent content, ObservableList paths) { + if (dlg == null){ + createDialog(parent, content); + } + fill(paths); + Optional res = dlg.showAndWait(); + clear(); return res; } @@ -48,17 +80,4 @@ public class PathsController { return tblPaths.getSelectionModel().getSelectedItem(); } - private void init(ObservableList paths) { - tblPaths.getSelectionModel().clearSelection(); - this.paths.clear(); - this.paths.addAll(paths); - paths.addListener((ListChangeListener) l -> { - while (l.next()) { - if (l.wasAdded()) { - this.paths.addAll(l.getAddedSubList()); - } - } - }); - } - } diff --git a/client/src/main/java/ru/trader/controllers/ProgressController.java b/client/src/main/java/ru/trader/controllers/ProgressController.java index d434db6..5dfc617 100644 --- a/client/src/main/java/ru/trader/controllers/ProgressController.java +++ b/client/src/main/java/ru/trader/controllers/ProgressController.java @@ -2,13 +2,11 @@ package ru.trader.controllers; import javafx.application.Platform; import javafx.scene.Parent; +import javafx.scene.control.ButtonType; +import javafx.scene.control.Dialog; import javafx.scene.control.Label; import javafx.scene.control.ProgressBar; import javafx.scene.layout.VBox; -import org.controlsfx.control.ButtonBar; -import org.controlsfx.control.action.Action; -import org.controlsfx.dialog.Dialog; -import org.controlsfx.dialog.DialogAction; import ru.trader.services.*; import java.util.function.Consumer; @@ -16,13 +14,16 @@ import java.util.function.Consumer; public class ProgressController { private Label text; private ProgressBar bar; - private Action cancel; - private Dialog dlg; - private final static String TASK_KEY = "task"; + private Dialog dlg; + private AnalyzerTask task; public ProgressController(Parent owner, String title) { - dlg = new Dialog(owner, title); + dlg = new Dialog<>(); + dlg.initOwner(owner.getScene().getWindow()); + dlg.setTitle(title); + dlg.setResizable(false); + createStage(); } @@ -34,21 +35,23 @@ public class ProgressController { vbox.setMaxWidth(Double.MAX_VALUE); vbox.setPrefSize(300, 100); - dlg.setClosable(false); - dlg.setContent(vbox); - cancel = new DialogAction(impl.org.controlsfx.i18n.Localization.asKey("dlg.cancel.button"), ButtonBar.ButtonType.CANCEL_CLOSE, e -> { - AnalyzerTask task = (AnalyzerTask) cancel.getProperties().get(TASK_KEY); - if (task != null){ - task.stop(); + dlg.getDialogPane().setContent(vbox); + dlg.getDialogPane().getButtonTypes().addAll(ButtonType.CANCEL); + + dlg.setResultConverter(dialogButton -> { + if (dialogButton == ButtonType.OK) { + if (task != null){ + task.stop(); + } } + return dialogButton; }); - dlg.getActions().addAll(cancel); } private void bind(AnalyzerTask task, Consumer onSuccess){ bar.progressProperty().bind(task.progressProperty()); text.textProperty().bind(task.messageProperty()); - cancel.getProperties().put(TASK_KEY, task); + this.task = task; task.setOnSucceeded(e -> { Platform.runLater(dlg::hide); onSuccess.accept(task.getValue()); @@ -69,7 +72,7 @@ public class ProgressController { private void unbind(){ bar.progressProperty().unbind(); text.textProperty().unbind(); - cancel.getProperties().remove(TASK_KEY); + task = null; } public void run(AnalyzerTask task, Consumer onSuccess){ diff --git a/client/src/main/java/ru/trader/controllers/RouterController.java b/client/src/main/java/ru/trader/controllers/RouterController.java index ede4084..8f5d22d 100644 --- a/client/src/main/java/ru/trader/controllers/RouterController.java +++ b/client/src/main/java/ru/trader/controllers/RouterController.java @@ -16,6 +16,7 @@ import ru.trader.model.support.ChangeMarketListener; import ru.trader.view.support.NumberField; import ru.trader.view.support.RouteNode; +import java.util.Optional; public class RouterController { @@ -197,9 +198,9 @@ public class RouterController { OrderModel sel = tblOrders.getSelectionModel().getSelectedItem(); int index = tblOrders.getSelectionModel().getSelectedIndex(); market.getOrders(sel.getStation(), sel.getBuyer(), sel.getBalance(), result -> { - OrderModel order = Screeners.showOrders(result); - if (order!=null){ - orders.set(index, order); + Optional order = Screeners.showOrders(result); + if (order.isPresent()){ + orders.set(index, order.get()); } }); @@ -253,10 +254,10 @@ public class RouterController { public void showTopOrders(){ market.getTop(totalBalance.getValue().doubleValue(), result -> { - OrderModel order = Screeners.showOrders(result); - if (order!=null){ - orders.add(order); - addOrderToPath(order); + Optional order = Screeners.showOrders(result); + if (order.isPresent()){ + orders.add(order.get()); + addOrderToPath(order.get()); } }); } @@ -267,10 +268,10 @@ public class RouterController { StationModel sS = sStation.getValue(); StationModel tS = tStation.getValue(); market.getOrders(s, sS, t, tS, totalBalance.getValue().doubleValue(), result -> { - OrderModel order = Screeners.showOrders(result); - if (order!=null){ - orders.add(order); - addOrderToPath(order); + Optional order = Screeners.showOrders(result); + if (order.isPresent()){ + orders.add(order.get()); + addOrderToPath(order.get()); } }); } @@ -281,20 +282,20 @@ public class RouterController { StationModel sS = sStation.getValue(); StationModel tS = tStation.getValue(); market.getRoutes(s, sS, t, tS, totalBalance.getValue().doubleValue(), routes -> { - PathRouteModel path = Screeners.showRouters(routes); - if (path!=null){ - orders.addAll(path.getOrders()); - addRouteToPath(path); + Optional path = Screeners.showRouters(routes); + if (path.isPresent()){ + orders.addAll(path.get().getOrders()); + addRouteToPath(path.get()); } }); } public void showTopRoutes(){ market.getTopRoutes(totalBalance.getValue().doubleValue(), routes -> { - PathRouteModel path = Screeners.showRouters(routes); - if (path!=null){ - orders.addAll(path.getOrders()); - addRouteToPath(path); + Optional path = Screeners.showRouters(routes); + if (path.isPresent()){ + orders.addAll(path.get().getOrders()); + addRouteToPath(path.get()); } }); } diff --git a/client/src/main/java/ru/trader/controllers/Screeners.java b/client/src/main/java/ru/trader/controllers/Screeners.java index d8c1972..1731fab 100644 --- a/client/src/main/java/ru/trader/controllers/Screeners.java +++ b/client/src/main/java/ru/trader/controllers/Screeners.java @@ -9,7 +9,6 @@ import javafx.stage.Stage; import org.controlsfx.control.action.Action; import org.controlsfx.dialog.Dialogs; import ru.trader.EMDNUpdater; -import ru.trader.Main; import ru.trader.core.MarketFilter; import ru.trader.model.*; import ru.trader.view.support.CustomBuilderFactory; @@ -17,7 +16,6 @@ import ru.trader.view.support.Localization; import java.io.IOException; import java.net.URL; -import java.util.Collection; import java.util.Optional; public class Screeners { @@ -25,8 +23,6 @@ public class Screeners { private static Parent mainScreen; private static Parent itemDescScreen; private static Parent vEditorScreen; - private static Parent editOffersScreen; - private static Parent ordersScreen; private static Parent topOrdersScreen; private static Parent pathsScreen; private static Parent settingsScreen; @@ -38,8 +34,6 @@ public class Screeners { private static MainController mainController; private static ItemDescController itemDescController; private static StationEditorController vEditorController; - private static OffersEditorController oEditorController; - private static OrdersController ordersController; private static TopOrdersController topOrdersController; private static PathsController pathsController; private static SettingsController settingsController; @@ -83,24 +77,6 @@ public class Screeners { stage.setScene(new Scene(vEditorScreen)); } - public static void loadAddOfferStage(URL fxml) throws IOException { - FXMLLoader loader = initLoader(fxml); - editOffersScreen = loader.load(); - addStylesheet(editOffersScreen); - oEditorController = loader.getController(); - Stage stage = new Stage(); - stage.setScene(new Scene(editOffersScreen)); - } - - public static void loadOrdersStage(URL fxml) throws IOException { - FXMLLoader loader = initLoader(fxml); - ordersScreen = loader.load(); - addStylesheet(ordersScreen); - ordersController = loader.getController(); - Stage stage = new Stage(); - stage.setScene(new Scene(ordersScreen)); - } - public static void loadTopOrdersStage(URL fxml) throws IOException { FXMLLoader loader = initLoader(fxml); topOrdersScreen = loader.load(); @@ -169,11 +145,11 @@ public class Screeners { return Dialogs.create().owner(mainScreen).message(text).showConfirm(); } - public static GroupModel showAddGroup(MarketModel market){ + public static Optional showAddGroup(MarketModel market){ return groupAddController.showDialog(mainScreen, groupAddScreen, market); } - public static ItemModel showAddItem(MarketModel market){ + public static Optional showAddItem(MarketModel market){ return itemAddController.showDialog(mainScreen, itemAddScreen, market); } @@ -193,15 +169,6 @@ public class Screeners { return mainScreen; } - public static Optional showEditOffers(ItemModel item, Number sell, Number buy) { - return oEditorController.showDialog(vEditorScreen, editOffersScreen, item, sell, buy); - } - - - public static Collection showOrders(Collection offers, double balance, long cargo) { - return ordersController.showDialog(mainScreen, ordersScreen, offers, balance, cargo); - } - public static void changeItemDesc(ItemModel item){ itemDescController.setItemDesc(item); } @@ -222,11 +189,11 @@ public class Screeners { itemDescController.close(); } - public static OrderModel showOrders(ObservableList orders) { + public static Optional showOrders(ObservableList orders) { return topOrdersController.showDialog(mainScreen, topOrdersScreen, orders); } - public static PathRouteModel showRouters(ObservableList routers) { + public static Optional showRouters(ObservableList routers) { return pathsController.showDialog(mainScreen, pathsScreen, routers); } @@ -234,16 +201,12 @@ public class Screeners { settingsController.showDialog(mainScreen, settingsScreen); } - public static MarketFilter showFilter() { - Action res = filterController.showDialog(mainScreen, filterScreen); - return res == filterController.actSave ? filterController.getFilter() : null; + public static Optional showFilter() { + return filterController.showDialog(mainScreen, filterScreen); } - public static void showFilter(MarketFilter filter) { - Action res = filterController.showDialog(mainScreen, filterScreen, filter); - if (res == filterController.actSave){ - Main.SETTINGS.setFilter(filter); - } + public static Optional showFilter(MarketFilter filter) { + return filterController.showDialog(mainScreen, filterScreen, filter); } public static void reinitAll() { diff --git a/client/src/main/java/ru/trader/controllers/SettingsController.java b/client/src/main/java/ru/trader/controllers/SettingsController.java index d2e89c8..be83444 100644 --- a/client/src/main/java/ru/trader/controllers/SettingsController.java +++ b/client/src/main/java/ru/trader/controllers/SettingsController.java @@ -2,18 +2,12 @@ package ru.trader.controllers; import javafx.fxml.FXML; import javafx.scene.Parent; -import javafx.scene.control.CheckBox; -import javafx.scene.control.TextField; -import org.controlsfx.control.ButtonBar; -import org.controlsfx.control.action.Action; -import org.controlsfx.dialog.Dialog; -import org.controlsfx.dialog.DialogAction; +import javafx.scene.control.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ru.trader.EMDNUpdater; import ru.trader.Main; import ru.trader.core.MarketAnalyzer; -import ru.trader.model.MarketModel; import ru.trader.view.support.Localization; import ru.trader.view.support.NumberField; @@ -34,8 +28,7 @@ public class SettingsController { @FXML private NumberField pathsCount; - private final Action actSave = new DialogAction(Localization.getString("dialog.button.save"), ButtonBar.ButtonType.OK_DONE, false, true, false, (e) -> save()); - + private Dialog dlg; @FXML private void initialize(){ @@ -51,6 +44,22 @@ public class SettingsController { pathsCount.setValue(Main.SETTINGS.getPathsCount()); } + private void createDialog(Parent owner, Parent content){ + dlg = new Dialog<>(); + if (owner != null) dlg.initOwner(owner.getScene().getWindow()); + dlg.setTitle(Localization.getString("settings.title")); + ButtonType saveButton = new ButtonType(Localization.getString("dialog.button.save"), ButtonBar.ButtonData.OK_DONE); + dlg.getDialogPane().setContent(content); + dlg.getDialogPane().getButtonTypes().addAll(saveButton, ButtonType.CANCEL); + dlg.setResultConverter(dialogButton -> { + if (dialogButton == saveButton) { + save(); + } + return dialogButton; + }); + dlg.setResizable(false); + } + private void save() { Main.SETTINGS.setEMDNSub(emdnSubServ.getText()); EMDNUpdater.setSub(emdnSubServ.getText()); @@ -68,13 +77,12 @@ public class SettingsController { } - public Action showDialog(Parent parent, Parent content){ + public void showDialog(Parent parent, Parent content){ + if (dlg == null){ + createDialog(parent, content); + } init(); - Dialog dlg = new Dialog(parent, Localization.getString("settings.title")); - dlg.setContent(content); - dlg.getActions().addAll(actSave, Dialog.ACTION_CANCEL); - dlg.setResizable(false); - return dlg.show(); + dlg.showAndWait(); } } diff --git a/client/src/main/java/ru/trader/controllers/StationEditorController.java b/client/src/main/java/ru/trader/controllers/StationEditorController.java index 2ef0731..7ac3f57 100644 --- a/client/src/main/java/ru/trader/controllers/StationEditorController.java +++ b/client/src/main/java/ru/trader/controllers/StationEditorController.java @@ -2,15 +2,8 @@ package ru.trader.controllers; import javafx.fxml.FXML; import javafx.scene.Parent; -import javafx.scene.control.CheckBox; -import javafx.scene.control.TableColumn; -import javafx.scene.control.TableView; -import javafx.scene.control.TextField; +import javafx.scene.control.*; import javafx.util.converter.LongStringConverter; -import org.controlsfx.control.ButtonBar; -import org.controlsfx.control.action.Action; -import org.controlsfx.dialog.Dialog; -import org.controlsfx.dialog.DialogAction; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ru.trader.EMDNUpdater; @@ -65,16 +58,7 @@ public class StationEditorController { private StationUpdater updater; - private final Action actSave = new DialogAction(Localization.getString("dialog.button.save"), ButtonBar.ButtonType.OK_DONE, false, true, false, (e) -> { - items.getSelectionModel().selectFirst(); - updater.commit(); - items.getSelectionModel().clearSelection(); - }); - - private final Action actCancel = new DialogAction(impl.org.controlsfx.i18n.Localization.asKey("dlg.cancel.button"), ButtonBar.ButtonType.CANCEL_CLOSE, true, true, true, (e) -> { - items.getSelectionModel().selectFirst(); - items.getSelectionModel().clearSelection(); - }); + private Dialog dlg; @FXML private void initialize() { @@ -83,7 +67,6 @@ public class StationEditorController { sell.setCellFactory(EditOfferCell.forTable(new PriceStringConverter(), true)); demand.setCellFactory(TextFieldCell.forTableColumn(new LongStringConverter())); supply.setCellFactory(TextFieldCell.forTableColumn(new LongStringConverter())); - actSave.disabledProperty().bind(distance.wrongProperty()); name.setOnAction((v)->distance.requestFocus()); distance.setOnAction((v) -> { items.requestFocus(); @@ -111,17 +94,54 @@ public class StationEditorController { items.setItems(updater.getOffers()); } + + private void createDialog(Parent owner, Parent content){ + dlg = new Dialog<>(); + if (owner != null) dlg.initOwner(owner.getScene().getWindow()); + + ButtonType saveButton = new ButtonType(Localization.getString("dialog.button.save"), ButtonBar.ButtonData.OK_DONE); + ButtonType cancelButton = new ButtonType(Localization.getString("dialog.button.cancel"), ButtonBar.ButtonData.CANCEL_CLOSE); + + dlg.getDialogPane().setContent(content); + dlg.getDialogPane().getButtonTypes().addAll(saveButton, cancelButton); + + Button bSave = (Button) dlg.getDialogPane().lookupButton(saveButton); + bSave.disableProperty().bind(distance.wrongProperty()); + + dlg.setResultConverter(dialogButton -> { + if (dialogButton == saveButton) { + save(); + } + if (dialogButton == cancelButton) { + cancel(); + } + return dialogButton; + }); + dlg.setResizable(false); + } + + private void save(){ + items.getSelectionModel().selectFirst(); + updater.commit(); + items.getSelectionModel().clearSelection(); + } + + private void cancel(){ + items.getSelectionModel().selectFirst(); + items.getSelectionModel().clearSelection(); + } + public void showDialog(Parent parent, Parent content, StationModel station){ showDialog(parent, content, station.getSystem(), station); } public void showDialog(Parent parent, Parent content, SystemModel system, StationModel station){ + if (dlg == null){ + createDialog(parent, content); + } + dlg.setTitle(Localization.getString(station == null ? "vEditor.title.add" : "vEditor.title.edit")); updater.init(system, station); - Dialog dlg = new Dialog(parent, Localization.getString(station == null ? "vEditor.title.add" : "vEditor.title.edit")); - dlg.setContent(content); - dlg.getActions().addAll(actSave, actCancel); - dlg.setResizable(false); - dlg.show(); + dlg.showAndWait(); updater.reset(); } diff --git a/client/src/main/java/ru/trader/controllers/SystemsEditorController.java b/client/src/main/java/ru/trader/controllers/SystemsEditorController.java index 8570baf..c435c66 100644 --- a/client/src/main/java/ru/trader/controllers/SystemsEditorController.java +++ b/client/src/main/java/ru/trader/controllers/SystemsEditorController.java @@ -7,15 +7,9 @@ import javafx.beans.property.StringProperty; import javafx.collections.FXCollections; import javafx.fxml.FXML; import javafx.scene.Parent; -import javafx.scene.control.ComboBox; -import javafx.scene.control.TableColumn; -import javafx.scene.control.TableView; +import javafx.scene.control.*; import javafx.util.converter.DefaultStringConverter; import javafx.util.converter.DoubleStringConverter; -import org.controlsfx.control.ButtonBar; -import org.controlsfx.control.action.Action; -import org.controlsfx.dialog.Dialog; -import org.controlsfx.dialog.DialogAction; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ru.trader.model.MarketModel; @@ -63,13 +57,9 @@ public class SystemsEditorController { @FXML private ComboBox system6; + private Dialog dlg; private MarketModel market; - private final Action actSave = new DialogAction(Localization.getString("dialog.button.save"), ButtonBar.ButtonType.OK_DONE, false, true, false, (e) -> { - tblSystems.getSelectionModel().selectFirst(); - commit(); - }); - @FXML private void initialize() { clnName.setCellFactory(TextFieldCell.forTableColumn(new DefaultStringConverter())); @@ -104,19 +94,43 @@ public class SystemsEditorController { system6.setItems(market.systemsProperty()); } - public void showDialog(Parent parent, Parent content, SystemModel system){ - Dialog dlg = new Dialog(parent, Localization.getString("sEditor.title")); - dlg.setContent(content); - dlg.getActions().addAll(actSave, Dialog.ACTION_CANCEL); + private void createDialog(Parent owner, Parent content){ + dlg = new Dialog<>(); + if (owner != null) dlg.initOwner(owner.getScene().getWindow()); + dlg.setTitle(Localization.getString("sEditor.title")); + ButtonType saveButton = new ButtonType(Localization.getString("dialog.button.save"), ButtonBar.ButtonData.OK_DONE); + dlg.getDialogPane().setContent(content); + dlg.getDialogPane().getButtonTypes().addAll(saveButton, ButtonType.CANCEL); + dlg.setResultConverter(dialogButton -> { + if (dialogButton == saveButton) { + save(); + } + return dialogButton; + }); dlg.setResizable(false); + } + + private void save(){ + tblSystems.getSelectionModel().selectFirst(); + commit(); + } + + public void showDialog(Parent parent, Parent content, SystemModel system){ + if (dlg == null){ + createDialog(parent, content); + } + fill(system); + dlg.showAndWait(); + clear(); + } + + private void fill(SystemModel system){ if (system != null){ tblSystems.getItems().add(new SystemData(system)); } for (int i = 0; i < 10; i++) { add(); } - dlg.show(); - reset(); } public void add(){ @@ -153,7 +167,7 @@ public class SystemsEditorController { } } - private void reset(){ + private void clear(){ tblSystems.getItems().clear(); } diff --git a/client/src/main/java/ru/trader/controllers/TopOrdersController.java b/client/src/main/java/ru/trader/controllers/TopOrdersController.java index c15761a..b579086 100644 --- a/client/src/main/java/ru/trader/controllers/TopOrdersController.java +++ b/client/src/main/java/ru/trader/controllers/TopOrdersController.java @@ -3,24 +3,21 @@ package ru.trader.controllers; import javafx.collections.FXCollections; import javafx.fxml.FXML; import javafx.scene.Parent; +import javafx.scene.control.ButtonType; +import javafx.scene.control.Dialog; import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; import javafx.scene.control.cell.TextFieldTableCell; import javafx.util.converter.LongStringConverter; -import org.controlsfx.control.ButtonBar; -import org.controlsfx.control.action.Action; -import org.controlsfx.dialog.Dialog; -import org.controlsfx.dialog.DialogAction; import ru.trader.model.OrderModel; import ru.trader.model.support.BindingsHelper; import ru.trader.view.support.Localization; import java.util.Collection; import java.util.List; +import java.util.Optional; public class TopOrdersController { - private final Action OK = new DialogAction("OK", ButtonBar.ButtonType.OK_DONE, false, true, false); - @FXML private TableView tblOrders; @@ -28,6 +25,7 @@ public class TopOrdersController { private TableColumn count; private OrderModel order; + private Dialog dlg; private final List orders = FXCollections.observableArrayList(); @@ -38,26 +36,41 @@ public class TopOrdersController { BindingsHelper.setTableViewItems(tblOrders, orders); } - - public OrderModel showDialog(Parent parent, Parent content, Collection orders) { - - init(orders); - - Dialog dlg = new Dialog(parent, Localization.getString("topOrders.title")); - dlg.setContent(content); - dlg.getActions().addAll(OK, Dialog.ACTION_CANCEL); + private void createDialog(Parent owner, Parent content){ + dlg = new Dialog<>(); + if (owner != null) dlg.initOwner(owner.getScene().getWindow()); + dlg.setTitle(Localization.getString("topOrders.title")); + dlg.getDialogPane().setContent(content); + dlg.getDialogPane().getButtonTypes().addAll(ButtonType.OK, ButtonType.CANCEL); + dlg.setResultConverter(dialogButton -> { + if (dialogButton == ButtonType.OK) { + return order; + } + return null; + }); dlg.setResizable(false); - OrderModel res = dlg.show() == OK ? order : null; - this.orders.clear(); + } + + public Optional showDialog(Parent parent, Parent content, Collection orders) { + if (dlg == null){ + createDialog(parent, content); + } + fill(orders); + Optional res = dlg.showAndWait(); + clear(); return res; } - private void init(Collection orders) { + private void fill(Collection orders) { tblOrders.getSelectionModel().clearSelection(); this.orders.addAll(orders); } + private void clear(){ + orders.clear(); + } + private void changeOrder(OrderModel order) { this.order = order; } diff --git a/client/src/main/resources/lang/locale_en_US.properties b/client/src/main/resources/lang/locale_en_US.properties index 8dfe775..2facb86 100644 --- a/client/src/main/resources/lang/locale_en_US.properties +++ b/client/src/main/resources/lang/locale_en_US.properties @@ -39,6 +39,7 @@ dialog.confirm.save=Changes were not saved, save changes? dialog.confirm.remove=Are you sure you want to delete %s? dialog.button.add=Add dialog.button.save=Save +dialog.button.cancel=Cancel dialog.button.edit=Edit dialog.button.remove=Remove dialog.button.clear=Clear diff --git a/client/src/main/resources/lang/locale_ru_RU.properties b/client/src/main/resources/lang/locale_ru_RU.properties index 3ea5c3a..ed6ec53 100644 --- a/client/src/main/resources/lang/locale_ru_RU.properties +++ b/client/src/main/resources/lang/locale_ru_RU.properties @@ -39,6 +39,7 @@ dialog.confirm.save=\u0418\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u043 dialog.confirm.remove=\u0412\u044B \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043B\u044C\u043D\u043E \u0445\u043E\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043B\u0438\u0442\u044C %s? dialog.button.add=\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C dialog.button.save=\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C +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