Przeglądaj źródła

Split up MainWindowController, as it grew too big. The title bar is now handled by MainWindowTitleController
(@zhouer add the minimize button for #1035 to this new controller and fxml file)

Sebastian Stenzel 5 lat temu
rodzic
commit
e90a680620

+ 1 - 64
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;
 	}

+ 5 - 0
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)

+ 5 - 5
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> mainWindowController;
+	private final Lazy<MainWindowTitleController> mainWindowTitleController;
 	private final Lazy<VaultListController> vaultListController;
 
 	@Inject
-	public MainWindowSceneFactory(Settings settings, Lazy<MainWindowController> mainWindowController, Lazy<VaultListController> vaultListController) {
+	public MainWindowSceneFactory(Settings settings, Lazy<MainWindowTitleController> mainWindowTitleController, Lazy<VaultListController> 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);
 	}

+ 99 - 0
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();
+	}
+
+
+}

+ 1 - 39
main/ui/src/main/resources/fxml/main_window.fxml

@@ -16,45 +16,7 @@
 		   fx:controller="org.cryptomator.ui.mainwindow.MainWindowController"
 		   styleClass="main-window">
 	<VBox>
-		<HBox styleClass="title" fx:id="titleBar" alignment="CENTER" minHeight="50" maxHeight="50" VBox.vgrow="NEVER" spacing="6">
-			<padding>
-				<Insets bottom="6" left="12" right="12" top="6"/>
-			</padding>
-			<children>
-				<Label text="Cryptomator"/>
-				<Region HBox.hgrow="ALWAYS"/>
-				<Button contentDisplay="GRAPHIC_ONLY" mnemonicParsing="false" onAction="#showDonationKeyPreferences" focusTraversable="false" visible="${!controller.licenseHolder.validLicense}">
-					<graphic>
-						<StackPane>
-							<FontAwesome5IconView glyph="EXCLAMATION_CIRCLE" glyphSize="16"/>
-							<Region styleClass="update-indicator" StackPane.alignment="TOP_RIGHT" prefWidth="10" prefHeight="10" maxWidth="-Infinity" maxHeight="-Infinity"/>
-						</StackPane>
-					</graphic>
-					<tooltip>
-						<Tooltip text="%main.donationKeyMissing.tooltip"/>
-					</tooltip>
-				</Button>
-				<Button contentDisplay="GRAPHIC_ONLY" mnemonicParsing="false" onAction="#showPreferences" focusTraversable="false">
-					<graphic>
-						<StackPane>
-							<FontAwesome5IconView glyph="COGS" glyphSize="16"/>
-							<Region styleClass="update-indicator" visible="${controller.updateAvailable}" StackPane.alignment="TOP_RIGHT" prefWidth="10" prefHeight="10" maxWidth="-Infinity" maxHeight="-Infinity"/>
-						</StackPane>
-					</graphic>
-					<tooltip>
-						<Tooltip text="%main.preferencesBtn.tooltip"/>
-					</tooltip>
-				</Button>
-				<Button contentDisplay="GRAPHIC_ONLY" mnemonicParsing="false" onAction="#close" focusTraversable="false">
-					<graphic>
-						<FontAwesome5IconView glyph="TIMES" glyphSize="16"/>
-					</graphic>
-					<tooltip>
-						<Tooltip text="%main.closeBtn.tooltip"/>
-					</tooltip>
-				</Button>
-			</children>
-		</HBox>
+		<fx:include source="/fxml/main_window_title.fxml" VBox.vgrow="NEVER" />
 		<StackPane VBox.vgrow="ALWAYS">
 			<SplitPane dividerPositions="0.33" orientation="HORIZONTAL">
 				<fx:include source="/fxml/vault_list.fxml" SplitPane.resizableWithParent="false"/>

+ 55 - 0
main/ui/src/main/resources/fxml/main_window_title.fxml

@@ -0,0 +1,55 @@
+<?import javafx.scene.layout.StackPane?>
+<?import org.cryptomator.ui.controls.FontAwesome5IconView?>
+<?import javafx.scene.layout.Region?>
+<?import javafx.scene.control.Tooltip?>
+<?import javafx.scene.layout.HBox?>
+<?import javafx.geometry.Insets?>
+<?import javafx.scene.control.Label?>
+<?import javafx.scene.control.Button?>
+<HBox xmlns="http://javafx.com/javafx"
+	  xmlns:fx="http://javafx.com/fxml"
+	  fx:id="titleBar"
+	  fx:controller="org.cryptomator.ui.mainwindow.MainWindowTitleController"
+	  styleClass="title"
+	  alignment="CENTER"
+	  minHeight="50"
+	  maxHeight="50"
+	  spacing="6">
+	<padding>
+		<Insets bottom="6" left="12" right="12" top="6"/>
+	</padding>
+	<children>
+		<Label text="Cryptomator"/>
+		<Region HBox.hgrow="ALWAYS"/>
+		<Button contentDisplay="GRAPHIC_ONLY" mnemonicParsing="false" onAction="#showDonationKeyPreferences" focusTraversable="false" visible="${!controller.licenseHolder.validLicense}">
+			<graphic>
+				<StackPane>
+					<FontAwesome5IconView glyph="EXCLAMATION_CIRCLE" glyphSize="16"/>
+					<Region styleClass="update-indicator" StackPane.alignment="TOP_RIGHT" prefWidth="10" prefHeight="10" maxWidth="-Infinity" maxHeight="-Infinity"/>
+				</StackPane>
+			</graphic>
+			<tooltip>
+				<Tooltip text="%main.donationKeyMissing.tooltip"/>
+			</tooltip>
+		</Button>
+		<Button contentDisplay="GRAPHIC_ONLY" mnemonicParsing="false" onAction="#showPreferences" focusTraversable="false">
+			<graphic>
+				<StackPane>
+					<FontAwesome5IconView glyph="COGS" glyphSize="16"/>
+					<Region styleClass="update-indicator" visible="${controller.updateAvailable}" StackPane.alignment="TOP_RIGHT" prefWidth="10" prefHeight="10" maxWidth="-Infinity" maxHeight="-Infinity"/>
+				</StackPane>
+			</graphic>
+			<tooltip>
+				<Tooltip text="%main.preferencesBtn.tooltip"/>
+			</tooltip>
+		</Button>
+		<Button contentDisplay="GRAPHIC_ONLY" mnemonicParsing="false" onAction="#close" focusTraversable="false">
+			<graphic>
+				<FontAwesome5IconView glyph="TIMES" glyphSize="16"/>
+			</graphic>
+			<tooltip>
+				<Tooltip text="%main.closeBtn.tooltip"/>
+			</tooltip>
+		</Button>
+	</children>
+</HBox>