From e677a0beaa8db52f36b600d036baed1bc0cee57a Mon Sep 17 00:00:00 2001 From: Jan-Peter Klein Date: Mon, 1 Jul 2024 12:25:48 +0200 Subject: [PATCH] removed MainWindowTitleController and ResizeController and the corresponding fxml --- .../ui/mainwindow/MainWindowModule.java | 12 +- .../ui/mainwindow/MainWindowSceneFactory.java | 10 +- .../mainwindow/MainWindowTitleController.java | 157 -------------- .../ui/mainwindow/ResizeController.java | 194 ------------------ .../resources/fxml/main_window_resize.fxml | 30 --- .../resources/fxml/main_window_title.fxml | 78 ------- 6 files changed, 6 insertions(+), 475 deletions(-) delete mode 100644 src/main/java/org/cryptomator/ui/mainwindow/MainWindowTitleController.java delete mode 100644 src/main/java/org/cryptomator/ui/mainwindow/ResizeController.java delete mode 100644 src/main/resources/fxml/main_window_resize.fxml delete mode 100644 src/main/resources/fxml/main_window_title.fxml diff --git a/src/main/java/org/cryptomator/ui/mainwindow/MainWindowModule.java b/src/main/java/org/cryptomator/ui/mainwindow/MainWindowModule.java index ff0b4421a..14bc84fd2 100644 --- a/src/main/java/org/cryptomator/ui/mainwindow/MainWindowModule.java +++ b/src/main/java/org/cryptomator/ui/mainwindow/MainWindowModule.java @@ -6,7 +6,6 @@ import dagger.Provides; import dagger.multibindings.IntoMap; import org.cryptomator.common.vaults.Vault; import org.cryptomator.ui.addvaultwizard.AddVaultWizardComponent; -import org.cryptomator.ui.error.ErrorComponent; import org.cryptomator.ui.common.FxController; import org.cryptomator.ui.common.FxControllerKey; import org.cryptomator.ui.common.FxmlFile; @@ -14,6 +13,7 @@ import org.cryptomator.ui.common.FxmlLoaderFactory; import org.cryptomator.ui.common.FxmlScene; import org.cryptomator.ui.common.StageFactory; import org.cryptomator.ui.common.StageInitializer; +import org.cryptomator.ui.error.ErrorComponent; import org.cryptomator.ui.fxapp.PrimaryStage; import org.cryptomator.ui.migration.MigrationComponent; import org.cryptomator.ui.removevault.RemoveVaultComponent; @@ -82,16 +82,6 @@ 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) - abstract FxController bindResizeController(ResizeController controller); - @Binds @IntoMap @FxControllerKey(VaultListController.class) diff --git a/src/main/java/org/cryptomator/ui/mainwindow/MainWindowSceneFactory.java b/src/main/java/org/cryptomator/ui/mainwindow/MainWindowSceneFactory.java index d78192186..c297b8f0f 100644 --- a/src/main/java/org/cryptomator/ui/mainwindow/MainWindowSceneFactory.java +++ b/src/main/java/org/cryptomator/ui/mainwindow/MainWindowSceneFactory.java @@ -18,22 +18,22 @@ public class MainWindowSceneFactory extends DefaultSceneFactory { protected static final KeyCodeCombination SHORTCUT_N = new KeyCodeCombination(KeyCode.N, KeyCombination.SHORTCUT_DOWN); protected static final KeyCodeCombination SHORTCUT_O = new KeyCodeCombination(KeyCode.O, KeyCombination.SHORTCUT_DOWN); - private final Lazy mainWindowTitleController; + private final Stage window; private final Lazy vaultListController; @Inject - public MainWindowSceneFactory(Settings settings, Lazy mainWindowTitleController, Lazy vaultListController) { + public MainWindowSceneFactory(Settings settings, @MainWindow Stage window, Lazy vaultListController) { super(settings); - this.mainWindowTitleController = mainWindowTitleController; + this.window = window; this.vaultListController = vaultListController; } @Override protected void setupDefaultAccelerators(Scene scene, Stage stage) { if (SystemUtils.IS_OS_WINDOWS) { - scene.getAccelerators().put(ALT_F4, mainWindowTitleController.get()::close); + scene.getAccelerators().put(ALT_F4, window::close); } else { - scene.getAccelerators().put(SHORTCUT_W, mainWindowTitleController.get()::close); + scene.getAccelerators().put(SHORTCUT_W, window::close); } scene.getAccelerators().put(SHORTCUT_N, vaultListController.get()::didClickAddNewVault); scene.getAccelerators().put(SHORTCUT_O, vaultListController.get()::didClickAddExistingVault); diff --git a/src/main/java/org/cryptomator/ui/mainwindow/MainWindowTitleController.java b/src/main/java/org/cryptomator/ui/mainwindow/MainWindowTitleController.java deleted file mode 100644 index f3c92790d..000000000 --- a/src/main/java/org/cryptomator/ui/mainwindow/MainWindowTitleController.java +++ /dev/null @@ -1,157 +0,0 @@ -package org.cryptomator.ui.mainwindow; - -import org.cryptomator.common.LicenseHolder; -import org.cryptomator.common.settings.Settings; -import org.cryptomator.ui.common.FxController; -import org.cryptomator.ui.fxapp.FxApplicationTerminator; -import org.cryptomator.ui.fxapp.FxApplicationWindows; -import org.cryptomator.ui.fxapp.UpdateChecker; -import org.cryptomator.ui.preferences.SelectedPreferencesTab; -import org.cryptomator.ui.traymenu.TrayMenuComponent; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.inject.Inject; -import javafx.beans.binding.Bindings; -import javafx.beans.binding.BooleanBinding; -import javafx.beans.property.ReadOnlyBooleanProperty; -import javafx.fxml.FXML; -import javafx.scene.input.MouseButton; -import javafx.scene.layout.HBox; -import javafx.stage.Stage; - -@MainWindowScoped -public class MainWindowTitleController implements FxController { - - private static final Logger LOG = LoggerFactory.getLogger(MainWindowTitleController.class); - - private final Stage window; - private final FxApplicationTerminator terminator; - private final FxApplicationWindows appWindows; - private final boolean trayMenuInitialized; - private final UpdateChecker updateChecker; - private final BooleanBinding updateAvailable; - private final LicenseHolder licenseHolder; - private final Settings settings; - private final BooleanBinding showMinimizeButton; - - public HBox titleBar; - private double xOffset; - private double yOffset; - - @Inject - MainWindowTitleController(@MainWindow Stage window, FxApplicationTerminator terminator, FxApplicationWindows appWindows, TrayMenuComponent trayMenu, UpdateChecker updateChecker, LicenseHolder licenseHolder, Settings settings) { - this.window = window; - this.terminator = terminator; - this.appWindows = appWindows; - this.trayMenuInitialized = trayMenu.isInitialized(); - this.updateChecker = updateChecker; - this.updateAvailable = updateChecker.updateAvailableProperty(); - this.licenseHolder = licenseHolder; - this.settings = settings; - this.showMinimizeButton = Bindings.createBooleanBinding(this::isShowMinimizeButton, settings.showMinimizeButton, settings.showTrayIcon); - } - - @FXML - public void initialize() { - LOG.trace("init MainWindowTitleController"); - updateChecker.automaticallyCheckForUpdatesIfEnabled(); - titleBar.setOnMousePressed(event -> { - xOffset = event.getSceneX(); - yOffset = event.getSceneY(); - - }); - titleBar.setOnMouseClicked(event -> { - if (event.getButton().equals(MouseButton.PRIMARY) && event.getClickCount() == 2) { - window.setFullScreen(!window.isFullScreen()); - } - }); - titleBar.setOnMouseDragged(event -> { - if (window.isFullScreen()) return; - window.setX(event.getScreenX() - xOffset); - window.setY(event.getScreenY() - yOffset); - }); - titleBar.setOnDragDetected(mouseDragEvent -> { - titleBar.startFullDrag(); - }); - titleBar.setOnMouseDragReleased(mouseDragEvent -> { - saveWindowSettings(); - }); - - window.setOnCloseRequest(event -> { - close(); - event.consume(); - }); - } - - private void saveWindowSettings() { - settings.windowXPosition.setValue(window.getX()); - settings.windowYPosition.setValue(window.getY()); - settings.windowWidth.setValue(window.getWidth()); - settings.windowHeight.setValue(window.getHeight()); - } - - @FXML - public void close() { - if (trayMenuInitialized) { - window.close(); - } else { - terminator.terminate(); - } - } - - @FXML - public void minimize() { - window.setIconified(true); - } - - @FXML - public void showPreferences() { - appWindows.showPreferencesWindow(SelectedPreferencesTab.ANY); - } - - @FXML - public void showGeneralPreferences() { - appWindows.showPreferencesWindow(SelectedPreferencesTab.GENERAL); - } - - @FXML - public void showContributePreferences() { - appWindows.showPreferencesWindow(SelectedPreferencesTab.CONTRIBUTE); - } - - /* Getter/Setter */ - - public LicenseHolder getLicenseHolder() { - return licenseHolder; - } - - public BooleanBinding updateAvailableProperty() { - return updateAvailable; - } - - public boolean isUpdateAvailable() { - return updateAvailable.get(); - } - - public boolean isTrayIconPresent() { - return trayMenuInitialized; - } - - public ReadOnlyBooleanProperty debugModeEnabledProperty() { - return settings.debugMode; - } - - public boolean isDebugModeEnabled() { - return debugModeEnabledProperty().get(); - } - - public BooleanBinding showMinimizeButtonProperty() { - return showMinimizeButton; - } - - public boolean isShowMinimizeButton() { - // always show the minimize button if no tray icon is present OR it is explicitly enabled - return !trayMenuInitialized || settings.showMinimizeButton.get(); - } -} diff --git a/src/main/java/org/cryptomator/ui/mainwindow/ResizeController.java b/src/main/java/org/cryptomator/ui/mainwindow/ResizeController.java deleted file mode 100644 index 2c3838ea0..000000000 --- a/src/main/java/org/cryptomator/ui/mainwindow/ResizeController.java +++ /dev/null @@ -1,194 +0,0 @@ -package org.cryptomator.ui.mainwindow; - -import org.cryptomator.common.settings.Settings; -import org.cryptomator.ui.common.FxController; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.inject.Inject; -import javafx.beans.binding.BooleanBinding; -import javafx.fxml.FXML; -import javafx.geometry.Rectangle2D; -import javafx.scene.input.MouseEvent; -import javafx.scene.layout.Region; -import javafx.stage.Screen; -import javafx.stage.Stage; -import javafx.stage.WindowEvent; - -@MainWindow -public class ResizeController implements FxController { - - private static final Logger LOG = LoggerFactory.getLogger(ResizeController.class); - - private final Stage window; - - public Region tlResizer; - public Region trResizer; - public Region blResizer; - public Region brResizer; - public Region tResizer; - public Region rResizer; - public Region bResizer; - public Region lResizer; - public Region lDefaultRegion; - public Region tDefaultRegion; - public Region rDefaultRegion; - public Region bDefaultRegion; - - private double origX, origY, origW, origH; - - private final Settings settings; - - private final BooleanBinding showResizingArrows; - - @Inject - ResizeController(@MainWindow Stage window, Settings settings) { - this.window = window; - this.settings = settings; - this.showResizingArrows = window.fullScreenProperty().not(); - } - - @FXML - public void initialize() { - LOG.trace("init ResizeController"); - - if (!neverTouched()) { - window.setHeight(settings.windowHeight.get() > window.getMinHeight() ? settings.windowHeight.get() : window.getMinHeight()); - window.setWidth(settings.windowWidth.get() > window.getMinWidth() ? settings.windowWidth.get() : window.getMinWidth()); - window.setX(settings.windowXPosition.get()); - window.setY(settings.windowYPosition.get()); - } - - window.setOnShowing(this::checkDisplayBounds); - } - - private boolean neverTouched() { - return (settings.windowHeight.get() == 0) && (settings.windowWidth.get() == 0) && (settings.windowXPosition.get() == 0) && (settings.windowYPosition.get() == 0); - } - - private void checkDisplayBounds(WindowEvent evt) { - // Minimizing a window in Windows and closing it could result in an out of bounds position at (x, y) = (-32000, -32000) - // See https://devblogs.microsoft.com/oldnewthing/20041028-00/?p=37453 - // If the position is (-32000, -32000), restore to the last saved position - if (window.getX() == -32000 && window.getY() == -32000) { - window.setX(settings.windowXPosition.get()); - window.setY(settings.windowYPosition.get()); - window.setWidth(settings.windowWidth.get()); - window.setHeight(settings.windowHeight.get()); - } - - if (isOutOfDisplayBounds()) { - // If the position is illegal, then the window appears on the main screen in the middle of the window. - LOG.debug("Resetting window position due to insufficient screen overlap"); - Rectangle2D primaryScreenBounds = Screen.getPrimary().getBounds(); - window.setX((primaryScreenBounds.getWidth() - window.getMinWidth()) / 2); - window.setY((primaryScreenBounds.getHeight() - window.getMinHeight()) / 2); - window.setWidth(window.getMinWidth()); - window.setHeight(window.getMinHeight()); - savePositionalSettings(); - } - } - - private boolean isOutOfDisplayBounds() { - // define a rect which is inset on all sides from the window's rect: - final double x = window.getX() + 20; // 20px left - final double y = window.getY() + 5; // 5px top - final double w = window.getWidth() - 40; // 20px left + 20px right - final double h = window.getHeight() - 25; // 5px top + 20px bottom - return isRectangleOutOfScreen(x, y, 0, h) // Left pixel column - || isRectangleOutOfScreen(x + w, y, 0, h) // Right pixel column - || isRectangleOutOfScreen(x, y, w, 0) // Top pixel row - || isRectangleOutOfScreen(x, y + h, w, 0); // Bottom pixel row - } - - private boolean isRectangleOutOfScreen(double x, double y, double width, double height) { - return Screen.getScreensForRectangle(x, y, width, height).isEmpty(); - } - - private void startResize(MouseEvent evt) { - origX = window.getX(); - origY = window.getY(); - origW = window.getWidth(); - origH = window.getHeight(); - } - - @FXML - private void resizeTopLeft(MouseEvent evt) { - resizeTop(evt); - resizeLeft(evt); - } - - @FXML - private void resizeTopRight(MouseEvent evt) { - resizeTop(evt); - resizeRight(evt); - } - - @FXML - private void resizeBottomLeft(MouseEvent evt) { - resizeBottom(evt); - resizeLeft(evt); - } - - @FXML - private void resizeBottomRight(MouseEvent evt) { - resizeBottom(evt); - resizeRight(evt); - } - - @FXML - private void resizeTop(MouseEvent evt) { - startResize(evt); - double newY = evt.getScreenY(); - double dy = newY - origY; - double newH = origH - dy; - if (newH < window.getMaxHeight() && newH > window.getMinHeight()) { - window.setY(newY); - window.setHeight(newH); - } - } - - @FXML - private void resizeLeft(MouseEvent evt) { - startResize(evt); - double newX = evt.getScreenX(); - double dx = newX - origX; - double newW = origW - dx; - if (newW < window.getMaxWidth() && newW > window.getMinWidth()) { - window.setX(newX); - window.setWidth(newW); - } - } - - @FXML - private void resizeBottom(MouseEvent evt) { - double newH = evt.getSceneY(); - if (newH < window.getMaxHeight() && newH > window.getMinHeight()) { - window.setHeight(newH); - } - } - - @FXML - private void resizeRight(MouseEvent evt) { - double newW = evt.getSceneX(); - if (newW < window.getMaxWidth() && newW > window.getMinWidth()) { - window.setWidth(newW); - } - } - - @FXML - public void savePositionalSettings() { - settings.windowWidth.setValue(window.getWidth()); - settings.windowHeight.setValue(window.getHeight()); - settings.windowXPosition.setValue(window.getX()); - settings.windowYPosition.setValue(window.getY()); - } - - public BooleanBinding showResizingArrowsProperty() { - return showResizingArrows; - } - - public boolean isShowResizingArrows() { - return showResizingArrows.get(); - } -} \ No newline at end of file diff --git a/src/main/resources/fxml/main_window_resize.fxml b/src/main/resources/fxml/main_window_resize.fxml deleted file mode 100644 index 7d5fb9437..000000000 --- a/src/main/resources/fxml/main_window_resize.fxml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/fxml/main_window_title.fxml b/src/main/resources/fxml/main_window_title.fxml deleted file mode 100644 index bd60aa25d..000000000 --- a/src/main/resources/fxml/main_window_title.fxml +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file