From 4717b974cb279e3b8caa65d34bff0135f51a97d4 Mon Sep 17 00:00:00 2001 From: iMoHax Date: Tue, 18 Aug 2015 16:53:36 +0300 Subject: [PATCH] add global key binding --- .../src/main/java/ru/trader/KeyBinding.java | 21 +++++++++++++ client/src/main/java/ru/trader/Main.java | 10 +++++-- .../trader/controllers/HelperController.java | 30 +++++++++++++++++-- .../java/ru/trader/controllers/Screeners.java | 10 ++----- pom.xml | 5 ++++ utils/pom.xml | 4 +++ 6 files changed, 67 insertions(+), 13 deletions(-) create mode 100644 client/src/main/java/ru/trader/KeyBinding.java diff --git a/client/src/main/java/ru/trader/KeyBinding.java b/client/src/main/java/ru/trader/KeyBinding.java new file mode 100644 index 0000000..41c69b0 --- /dev/null +++ b/client/src/main/java/ru/trader/KeyBinding.java @@ -0,0 +1,21 @@ +package ru.trader; + +import com.tulskiy.keymaster.common.HotKeyListener; +import com.tulskiy.keymaster.common.Provider; + +import javax.swing.*; + +public class KeyBinding { + private final static Provider provider = Provider.getCurrentProvider(false); + + public static void bind(KeyStroke keys, HotKeyListener listener){ + provider.register(keys, listener); + } + + public static void unbind(){ + provider.reset(); + provider.stop(); + } + + +} diff --git a/client/src/main/java/ru/trader/Main.java b/client/src/main/java/ru/trader/Main.java index 50dd561..03aecc8 100644 --- a/client/src/main/java/ru/trader/Main.java +++ b/client/src/main/java/ru/trader/Main.java @@ -45,6 +45,9 @@ public class Main extends Application { @Override public void stop() throws Exception { super.stop(); + KeyBinding.unbind(); + ServicesManager.stopAll(); + SETTINGS.save(); } public static void main(String[] args) { @@ -77,10 +80,11 @@ public class Main extends Application { if (World.getMarket().isChange()) { Action res = Screeners.showConfirm(Localization.getString("dialog.confirm.save")); if (res == Dialog.ACTION_YES) World.save(); - else if (res == Dialog.ACTION_CANCEL) we.consume(); + else if (res == Dialog.ACTION_CANCEL) { + we.consume(); + return; + } } - ServicesManager.stopAll(); - SETTINGS.save(); Screeners.closeAll(); } catch (FileNotFoundException | UnsupportedEncodingException | XMLStreamException e) { LOG.error("Error on save world", e); diff --git a/client/src/main/java/ru/trader/controllers/HelperController.java b/client/src/main/java/ru/trader/controllers/HelperController.java index babc0dc..b4b72a6 100644 --- a/client/src/main/java/ru/trader/controllers/HelperController.java +++ b/client/src/main/java/ru/trader/controllers/HelperController.java @@ -6,14 +6,21 @@ import javafx.beans.property.SimpleBooleanProperty; import javafx.beans.property.SimpleIntegerProperty; import javafx.beans.value.ChangeListener; import javafx.fxml.FXML; +import javafx.scene.Parent; +import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.control.ListView; +import javafx.stage.Stage; +import ru.trader.KeyBinding; import ru.trader.model.OrderModel; import ru.trader.model.RouteEntryModel; import ru.trader.model.RouteModel; import ru.trader.view.support.ViewUtils; import ru.trader.view.support.cells.OrderListCell; +import javax.swing.*; +import java.awt.event.KeyEvent; + public class HelperController { @@ -30,7 +37,7 @@ public class HelperController { @FXML private ListView sellOrders; - + private Stage stage; private RouteModel route; private final BooleanProperty docked; private final IntegerProperty currentEntry; @@ -45,11 +52,25 @@ public class HelperController { currentEntry.addListener(routeEntryListener); buyOrders.setCellFactory(new OrderListCell(false)); sellOrders.setCellFactory(new OrderListCell(true)); + bindKeys(); } - public void setRoute(RouteModel route) { + public void show(Parent content, RouteModel route) { this.route = route; currentEntry.setValue(0); + if (stage == null){ + stage = new Stage(); + stage.setScene(new Scene(content)); + stage.show(); + } else { + stage.show(); + } + } + + public void close(){ + if (stage != null){ + stage.close(); + } } private void setRouteEntry(int index){ @@ -84,4 +105,9 @@ public class HelperController { } private final ChangeListener routeEntryListener = (ov, o, n) -> ViewUtils.doFX(() -> setRouteEntry(n.intValue())); + + private void bindKeys(){ + KeyBinding.bind(KeyStroke.getKeyStroke(KeyEvent.VK_NUMPAD4, KeyEvent.CTRL_MASK | KeyEvent.ALT_MASK), k -> ViewUtils.doFX(this::previous)); + KeyBinding.bind(KeyStroke.getKeyStroke(KeyEvent.VK_NUMPAD6, KeyEvent.CTRL_MASK | KeyEvent.ALT_MASK), k -> ViewUtils.doFX(this::next)); + } } diff --git a/client/src/main/java/ru/trader/controllers/Screeners.java b/client/src/main/java/ru/trader/controllers/Screeners.java index e9e4f00..03a4c79 100644 --- a/client/src/main/java/ru/trader/controllers/Screeners.java +++ b/client/src/main/java/ru/trader/controllers/Screeners.java @@ -205,6 +205,7 @@ public class Screeners { public static void closeAll() { itemDescController.close(); + helperController.close(); } public static Optional showOrders(ObservableList orders) { @@ -247,14 +248,7 @@ public class Screeners { } public static void showHelper(RouteModel route){ - helperController.setRoute(route); - if (helperScreen.getScene() == null){ - Stage stage = new Stage(); - stage.setScene(new Scene(helperScreen)); - stage.show(); - } else { - ((Stage)helperScreen.getScene().getWindow()).show(); - } + helperController.show(helperScreen, route); } public static void reinitAll() { diff --git a/pom.xml b/pom.xml index 2217f72..f86b71b 100644 --- a/pom.xml +++ b/pom.xml @@ -95,6 +95,11 @@ jackson-databind ${jackson.version} + + com.github.tulskiy + jkeymaster + 1.1 + diff --git a/utils/pom.xml b/utils/pom.xml index f4585c5..eaa7d71 100644 --- a/utils/pom.xml +++ b/utils/pom.xml @@ -74,6 +74,10 @@ com.fasterxml.jackson.core jackson-databind + + com.github.tulskiy + jkeymaster +