From 3a65261326f79e57450f8ce82d099bfec8aa14fc Mon Sep 17 00:00:00 2001 From: Craig Raw Date: Fri, 5 Jun 2020 17:25:55 +0200 Subject: [PATCH] mac application menu setup --- build.gradle | 17 +++++++++-- .../sparrowwallet/sparrow/AppController.java | 28 +++++++++++++++++++ .../com/sparrowwallet/sparrow/MainApp.java | 1 + .../preferences/PreferencesDialog.java | 10 ++++++- src/main/java/module-info.java | 1 + .../com/sparrowwallet/sparrow/app.fxml | 8 ++++-- 6 files changed, 59 insertions(+), 6 deletions(-) diff --git a/build.gradle b/build.gradle index d1d87d6e..c815c276 100644 --- a/build.gradle +++ b/build.gradle @@ -34,6 +34,7 @@ dependencies { implementation('no.tornado:tornadofx-controls:1.0.4') implementation('com.google.zxing:javase:3.4.0') implementation('com.github.arteam:simple-json-rpc-client:1.0') + implementation('de.codecentric.centerdevice:centerdevice-nsmenufx:2.1.7') implementation('org.controlsfx:controlsfx:11.0.1' ) { exclude group: 'org.openjfx', module: 'javafx-base' exclude group: 'org.openjfx', module: 'javafx-graphics' @@ -64,7 +65,13 @@ run { "--add-opens=javafx.graphics/com.sun.javafx.scene.traversal=org.controlsfx.controls", "--add-opens=javafx.base/com.sun.javafx.event=org.controlsfx.controls", "--add-opens=javafx.controls/javafx.scene.control.cell=com.sparrowwallet.sparrow", - "--add-opens=org.controlsfx.controls/impl.org.controlsfx.skin=com.sparrowwallet.sparrow"] + "--add-opens=org.controlsfx.controls/impl.org.controlsfx.skin=com.sparrowwallet.sparrow", + "--add-opens=javafx.graphics/com.sun.javafx.tk=centerdevice.nsmenufx", + "--add-opens=javafx.graphics/com.sun.javafx.tk.quantum=centerdevice.nsmenufx", + "--add-opens=javafx.graphics/com.sun.glass.ui=centerdevice.nsmenufx", + "--add-opens=javafx.controls/com.sun.javafx.scene.control=centerdevice.nsmenufx", + "--add-opens=javafx.graphics/com.sun.javafx.menu=centerdevice.nsmenufx", + "--add-opens=javafx.graphics/com.sun.glass.ui.mac=centerdevice.nsmenufx"] } jlink { @@ -87,7 +94,13 @@ jlink { "--add-opens=javafx.graphics/com.sun.javafx.scene.traversal=org.controlsfx.controls", "--add-opens=javafx.base/com.sun.javafx.event=org.controlsfx.controls", "--add-opens=javafx.controls/javafx.scene.control.cell=com.sparrowwallet.sparrow", - "--add-opens=org.controlsfx.controls/impl.org.controlsfx.skin=com.sparrowwallet.sparrow"] + "--add-opens=org.controlsfx.controls/impl.org.controlsfx.skin=com.sparrowwallet.sparrow", + "--add-opens=javafx.graphics/com.sun.javafx.tk=com.sparrowwallet.merged.module", + "--add-opens=javafx.graphics/com.sun.javafx.tk.quantum=com.sparrowwallet.merged.module", + "--add-opens=javafx.graphics/com.sun.glass.ui=com.sparrowwallet.merged.module", + "--add-opens=javafx.controls/com.sun.javafx.scene.control=com.sparrowwallet.merged.module", + "--add-opens=javafx.graphics/com.sun.javafx.menu=com.sparrowwallet.merged.module", + "--add-opens=javafx.graphics/com.sun.glass.ui.mac=com.sparrowwallet.merged.module"] } addExtraDependencies("javafx") jpackage { diff --git a/src/main/java/com/sparrowwallet/sparrow/AppController.java b/src/main/java/com/sparrowwallet/sparrow/AppController.java index 9fd3b6cd..e8d81db8 100644 --- a/src/main/java/com/sparrowwallet/sparrow/AppController.java +++ b/src/main/java/com/sparrowwallet/sparrow/AppController.java @@ -19,9 +19,11 @@ import com.sparrowwallet.drongo.wallet.Wallet; import com.sparrowwallet.sparrow.control.*; import com.sparrowwallet.sparrow.event.*; import com.sparrowwallet.sparrow.io.*; +import com.sparrowwallet.sparrow.preferences.PreferencesDialog; import com.sparrowwallet.sparrow.transaction.TransactionController; import com.sparrowwallet.sparrow.wallet.WalletController; import com.sparrowwallet.sparrow.wallet.WalletForm; +import de.codecentric.centerdevice.MenuToolkit; import javafx.animation.Animation; import javafx.animation.KeyFrame; import javafx.animation.KeyValue; @@ -40,6 +42,7 @@ import javafx.stage.FileChooser; import javafx.stage.Stage; import javafx.util.Duration; import org.controlsfx.control.StatusBar; +import org.controlsfx.tools.Platform; import java.io.*; import java.net.URL; @@ -56,6 +59,9 @@ public class AppController implements Initializable { @FXML private MenuItem exportWallet; + @FXML + private Menu fileMenu; + @FXML private CheckMenuItem showTxHex; @@ -83,6 +89,8 @@ public class AppController implements Initializable { } void initializeView() { + setOsxApplicationMenu(); + rootStack.setOnDragOver(event -> { if(event.getGestureSource() != rootStack && event.getDragboard().hasFiles()) { event.acceptTransferModes(TransferMode.COPY_OR_MOVE); @@ -172,6 +180,21 @@ public class AppController implements Initializable { return pingService; } + private void setOsxApplicationMenu() { + if(Platform.getCurrent().getPlatformId().toLowerCase().equals("mac")) { + MenuToolkit tk = MenuToolkit.toolkit(); + MenuItem preferences = new MenuItem("Preferences..."); + preferences.setOnAction(this::openPreferences); + Menu defaultApplicationMenu = new Menu("Apple", null, tk.createAboutMenuItem(MainApp.APP_NAME, null), new SeparatorMenuItem(), + preferences, new SeparatorMenuItem(), + tk.createHideMenuItem(MainApp.APP_NAME), tk.createHideOthersMenuItem(), tk.createUnhideAllMenuItem(), new SeparatorMenuItem(), + tk.createQuitMenuItem(MainApp.APP_NAME)); + tk.setApplicationMenu(defaultApplicationMenu); + + fileMenu.getItems().removeIf(item -> item.getStyleClass().contains("macHide")); + } + } + public void openFromFile(ActionEvent event) { Stage window = new Stage(); @@ -413,6 +436,11 @@ public class AppController implements Initializable { } } + public void openPreferences(ActionEvent event) { + PreferencesDialog preferencesDialog = new PreferencesDialog(); + preferencesDialog.showAndWait(); + } + public Tab addWalletTab(Storage storage, Wallet wallet) { try { String name = storage.getWalletFile().getName(); diff --git a/src/main/java/com/sparrowwallet/sparrow/MainApp.java b/src/main/java/com/sparrowwallet/sparrow/MainApp.java index dce50956..069ddbf1 100644 --- a/src/main/java/com/sparrowwallet/sparrow/MainApp.java +++ b/src/main/java/com/sparrowwallet/sparrow/MainApp.java @@ -17,6 +17,7 @@ import org.controlsfx.glyphfont.GlyphFontRegistry; import java.util.Optional; public class MainApp extends Application { + public static final String APP_NAME = "Sparrow"; @Override public void start(Stage stage) throws Exception { diff --git a/src/main/java/com/sparrowwallet/sparrow/preferences/PreferencesDialog.java b/src/main/java/com/sparrowwallet/sparrow/preferences/PreferencesDialog.java index 877183b3..605ff8ad 100644 --- a/src/main/java/com/sparrowwallet/sparrow/preferences/PreferencesDialog.java +++ b/src/main/java/com/sparrowwallet/sparrow/preferences/PreferencesDialog.java @@ -12,6 +12,10 @@ import org.controlsfx.tools.Borders; import java.io.IOException; public class PreferencesDialog extends Dialog { + public PreferencesDialog() { + this(null); + } + public PreferencesDialog(PreferenceGroup initialGroup) { final DialogPane dialogPane = getDialogPane(); @@ -20,7 +24,11 @@ public class PreferencesDialog extends Dialog { dialogPane.setContent(Borders.wrap(preferencesLoader.load()).lineBorder().outerPadding(0).innerPadding(0).buildAll()); PreferencesController preferencesController = preferencesLoader.getController(); preferencesController.initializeView(Config.get()); - preferencesController.selectGroup(initialGroup); + if(initialGroup != null) { + preferencesController.selectGroup(initialGroup); + } else { + preferencesController.selectGroup(PreferenceGroup.SERVER); + } final ButtonType closeButtonType = new javafx.scene.control.ButtonType("Close", ButtonBar.ButtonData.CANCEL_CLOSE); dialogPane.getButtonTypes().addAll(closeButtonType); diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index 1e53b10d..dd009883 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -16,5 +16,6 @@ open module com.sparrowwallet.sparrow { requires simple.json.rpc.core; requires org.jetbrains.annotations; requires com.fasterxml.jackson.databind; + requires centerdevice.nsmenufx; requires javafx.swing; } \ No newline at end of file diff --git a/src/main/resources/com/sparrowwallet/sparrow/app.fxml b/src/main/resources/com/sparrowwallet/sparrow/app.fxml index ab42fbd8..d08eace5 100644 --- a/src/main/resources/com/sparrowwallet/sparrow/app.fxml +++ b/src/main/resources/com/sparrowwallet/sparrow/app.fxml @@ -11,7 +11,7 @@ - + @@ -25,8 +25,10 @@ - - + + + +