diff --git a/main/ui/src/main/java/org/cryptomator/ui/mainwindow/MainWindowController.java b/main/ui/src/main/java/org/cryptomator/ui/mainwindow/MainWindowController.java index 9c4641d82..14d9350da 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/mainwindow/MainWindowController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/mainwindow/MainWindowController.java @@ -1,26 +1,18 @@ package org.cryptomator.ui.mainwindow; -import javafx.beans.binding.BooleanBinding; import javafx.beans.property.BooleanProperty; import javafx.beans.property.SimpleBooleanProperty; import javafx.fxml.FXML; import javafx.scene.input.DragEvent; import javafx.scene.input.TransferMode; -import javafx.scene.layout.HBox; import javafx.scene.layout.StackPane; -import javafx.stage.Stage; -import org.cryptomator.common.LicenseHolder; import org.cryptomator.common.vaults.VaultListManager; import org.cryptomator.ui.common.FxController; -import org.cryptomator.ui.fxapp.FxApplication; -import org.cryptomator.ui.fxapp.UpdateChecker; -import org.cryptomator.ui.preferences.SelectedPreferencesTab; import org.cryptomator.ui.wrongfilealert.WrongFileAlertComponent; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.inject.Inject; -import javax.inject.Named; import java.io.File; import java.nio.file.Files; import java.nio.file.NoSuchFileException; @@ -34,29 +26,14 @@ public class MainWindowController implements FxController { private static final Logger LOG = LoggerFactory.getLogger(MainWindowController.class); private static final String MASTERKEY_FILENAME = "masterkey.cryptomator"; // TODO: deduplicate constant declared in multiple classes - private final Stage window; - private final FxApplication application; - private final boolean minimizeToSysTray; - private final UpdateChecker updateChecker; - private final BooleanBinding updateAvailable; - private final LicenseHolder licenseHolder; private final VaultListManager vaultListManager; private final WrongFileAlertComponent.Builder wrongFileAlert; private final BooleanProperty draggingOver = new SimpleBooleanProperty(); private final BooleanProperty draggingVaultOver = new SimpleBooleanProperty(); - public HBox titleBar; public StackPane root; - private double xOffset; - private double yOffset; @Inject - public MainWindowController(@MainWindow Stage window, FxApplication application, @Named("trayMenuSupported") boolean minimizeToSysTray, UpdateChecker updateChecker, LicenseHolder licenseHolder, VaultListManager vaultListManager, WrongFileAlertComponent.Builder wrongFileAlert) { - this.window = window; - this.application = application; - this.minimizeToSysTray = minimizeToSysTray; - this.updateChecker = updateChecker; - this.updateAvailable = updateChecker.latestVersionProperty().isNotNull(); - this.licenseHolder = licenseHolder; + public MainWindowController(VaultListManager vaultListManager, WrongFileAlertComponent.Builder wrongFileAlert) { this.vaultListManager = vaultListManager; this.wrongFileAlert = wrongFileAlert; } @@ -64,15 +41,6 @@ public class MainWindowController implements FxController { @FXML public void initialize() { LOG.debug("init MainWindowController"); - titleBar.setOnMousePressed(event -> { - xOffset = event.getSceneX(); - yOffset = event.getSceneY(); - }); - titleBar.setOnMouseDragged(event -> { - window.setX(event.getScreenX() - xOffset); - window.setY(event.getScreenY() - yOffset); - }); - updateChecker.automaticallyCheckForUpdatesIfEnabled(); root.setOnDragEntered(this::handleDragEvent); root.setOnDragOver(this::handleDragEvent); root.setOnDragDropped(this::handleDragEvent); @@ -122,39 +90,8 @@ public class MainWindowController implements FxController { } } - @FXML - public void close() { - if (minimizeToSysTray) { - window.close(); - } else { - window.setIconified(true); - } - } - - @FXML - public void showPreferences() { - application.showPreferencesWindow(SelectedPreferencesTab.ANY); - } - - @FXML - public void showDonationKeyPreferences() { - application.showPreferencesWindow(SelectedPreferencesTab.DONATION_KEY); - } - /* Getter/Setter */ - public LicenseHolder getLicenseHolder() { - return licenseHolder; - } - - public BooleanBinding updateAvailableProperty() { - return updateAvailable; - } - - public boolean isUpdateAvailable() { - return updateAvailable.get(); - } - public BooleanProperty draggingOverProperty() { return draggingOver; } diff --git a/main/ui/src/main/java/org/cryptomator/ui/mainwindow/MainWindowModule.java b/main/ui/src/main/java/org/cryptomator/ui/mainwindow/MainWindowModule.java index 52c223e65..8fb9dd1a4 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/mainwindow/MainWindowModule.java +++ b/main/ui/src/main/java/org/cryptomator/ui/mainwindow/MainWindowModule.java @@ -68,6 +68,11 @@ abstract class MainWindowModule { @FxControllerKey(MainWindowController.class) abstract FxController bindMainWindowController(MainWindowController controller); + @Binds + @IntoMap + @FxControllerKey(MainWindowTitleController.class) + abstract FxController bindMainWindowTitleController(MainWindowTitleController controller); + @Binds @IntoMap @FxControllerKey(ResizeController.class) diff --git a/main/ui/src/main/java/org/cryptomator/ui/mainwindow/MainWindowSceneFactory.java b/main/ui/src/main/java/org/cryptomator/ui/mainwindow/MainWindowSceneFactory.java index b86a56e5f..dbb9b4cbf 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/mainwindow/MainWindowSceneFactory.java +++ b/main/ui/src/main/java/org/cryptomator/ui/mainwindow/MainWindowSceneFactory.java @@ -17,22 +17,22 @@ public class MainWindowSceneFactory extends DefaultSceneFactory { protected static final KeyCodeCombination SHORTCUT_N = new KeyCodeCombination(KeyCode.N, KeyCombination.SHORTCUT_DOWN); - private final Lazy mainWindowController; + private final Lazy mainWindowTitleController; private final Lazy vaultListController; @Inject - public MainWindowSceneFactory(Settings settings, Lazy mainWindowController, Lazy vaultListController) { + public MainWindowSceneFactory(Settings settings, Lazy mainWindowTitleController, Lazy vaultListController) { super(settings); - this.mainWindowController = mainWindowController; + this.mainWindowTitleController = mainWindowTitleController; this.vaultListController = vaultListController; } @Override protected void setupDefaultAccelerators(Scene scene, Stage stage) { if (SystemUtils.IS_OS_WINDOWS) { - scene.getAccelerators().put(ALT_F4, mainWindowController.get()::close); + scene.getAccelerators().put(ALT_F4, mainWindowTitleController.get()::close); } else { - scene.getAccelerators().put(SHORTCUT_W, mainWindowController.get()::close); + scene.getAccelerators().put(SHORTCUT_W, mainWindowTitleController.get()::close); } scene.getAccelerators().put(SHORTCUT_N, vaultListController.get()::didClickAddVault); } diff --git a/main/ui/src/main/java/org/cryptomator/ui/mainwindow/MainWindowTitleController.java b/main/ui/src/main/java/org/cryptomator/ui/mainwindow/MainWindowTitleController.java new file mode 100644 index 000000000..35485f3d6 --- /dev/null +++ b/main/ui/src/main/java/org/cryptomator/ui/mainwindow/MainWindowTitleController.java @@ -0,0 +1,99 @@ +package org.cryptomator.ui.mainwindow; + +import javafx.beans.binding.BooleanBinding; +import javafx.fxml.FXML; +import javafx.scene.layout.HBox; +import javafx.stage.Stage; +import org.cryptomator.common.LicenseHolder; +import org.cryptomator.common.vaults.VaultListManager; +import org.cryptomator.ui.common.FxController; +import org.cryptomator.ui.fxapp.FxApplication; +import org.cryptomator.ui.fxapp.UpdateChecker; +import org.cryptomator.ui.preferences.SelectedPreferencesTab; +import org.cryptomator.ui.wrongfilealert.WrongFileAlertComponent; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.inject.Inject; +import javax.inject.Named; + +@MainWindowScoped +public class MainWindowTitleController implements FxController { + + private static final Logger LOG = LoggerFactory.getLogger(MainWindowTitleController.class); + + public HBox titleBar; + + private final Stage window; + private final FxApplication application; + private final boolean minimizeToSysTray; + private final UpdateChecker updateChecker; + private final BooleanBinding updateAvailable; + private final LicenseHolder licenseHolder; + private final VaultListManager vaultListManager; + private final WrongFileAlertComponent.Builder wrongFileAlert; + + private double xOffset; + private double yOffset; + + @Inject + MainWindowTitleController(@MainWindow Stage window, FxApplication application, @Named("trayMenuSupported") boolean minimizeToSysTray, UpdateChecker updateChecker, LicenseHolder licenseHolder, VaultListManager vaultListManager, WrongFileAlertComponent.Builder wrongFileAlert) { + this.window = window; + this.application = application; + this.minimizeToSysTray = minimizeToSysTray; + this.updateChecker = updateChecker; + this.updateAvailable = updateChecker.latestVersionProperty().isNotNull(); + this.licenseHolder = licenseHolder; + this.vaultListManager = vaultListManager; + this.wrongFileAlert = wrongFileAlert; + } + + @FXML + public void initialize() { + LOG.debug("init MainWindowTitleController"); + updateChecker.automaticallyCheckForUpdatesIfEnabled(); + titleBar.setOnMousePressed(event -> { + xOffset = event.getSceneX(); + yOffset = event.getSceneY(); + }); + titleBar.setOnMouseDragged(event -> { + window.setX(event.getScreenX() - xOffset); + window.setY(event.getScreenY() - yOffset); + }); + } + + @FXML + public void close() { + if (minimizeToSysTray) { + window.close(); + } else { + window.setIconified(true); + } + } + + @FXML + public void showPreferences() { + application.showPreferencesWindow(SelectedPreferencesTab.ANY); + } + + @FXML + public void showDonationKeyPreferences() { + application.showPreferencesWindow(SelectedPreferencesTab.DONATION_KEY); + } + + /* Getter/Setter */ + + public LicenseHolder getLicenseHolder() { + return licenseHolder; + } + + public BooleanBinding updateAvailableProperty() { + return updateAvailable; + } + + public boolean isUpdateAvailable() { + return updateAvailable.get(); + } + + +} diff --git a/main/ui/src/main/resources/fxml/main_window.fxml b/main/ui/src/main/resources/fxml/main_window.fxml index a61b0273b..8bae2c6a6 100644 --- a/main/ui/src/main/resources/fxml/main_window.fxml +++ b/main/ui/src/main/resources/fxml/main_window.fxml @@ -16,45 +16,7 @@ fx:controller="org.cryptomator.ui.mainwindow.MainWindowController" styleClass="main-window"> - - - - - - - + diff --git a/main/ui/src/main/resources/fxml/main_window_title.fxml b/main/ui/src/main/resources/fxml/main_window_title.fxml new file mode 100644 index 000000000..3765146bd --- /dev/null +++ b/main/ui/src/main/resources/fxml/main_window_title.fxml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + \ No newline at end of file