Browse Source

Moved volume type settings to custom preferences controller
Added icons to preferences

Sebastian Stenzel 5 năm trước cách đây
mục cha
commit
cf91a8b62c

+ 0 - 75
main/ui/src/main/java/org/cryptomator/ui/preferences/GeneralPreferencesController.java

@@ -1,17 +1,10 @@
 package org.cryptomator.ui.preferences;
 
-import javafx.beans.binding.Bindings;
-import javafx.beans.binding.BooleanBinding;
-import javafx.scene.control.Button;
 import javafx.scene.control.CheckBox;
 import javafx.scene.control.ChoiceBox;
-import javafx.scene.control.TextField;
 import javafx.util.StringConverter;
 import org.cryptomator.common.settings.Settings;
 import org.cryptomator.common.settings.UiTheme;
-import org.cryptomator.common.settings.VolumeImpl;
-import org.cryptomator.common.settings.WebDavUrlScheme;
-import org.cryptomator.common.vaults.Volume;
 import org.cryptomator.ui.common.FxController;
 
 import javax.inject.Inject;
@@ -20,19 +13,13 @@ import javax.inject.Inject;
 public class GeneralPreferencesController implements FxController {
 
 	private final Settings settings;
-	private final BooleanBinding showWebDavSettings;
 	public ChoiceBox<UiTheme> themeChoiceBox;
 	public CheckBox startHiddenCheckbox;
 	public CheckBox debugModeCheckbox;
-	public ChoiceBox<VolumeImpl> volumeTypeChoicBox;
-	public TextField webDavPortField;
-	public Button changeWebDavPortButton;
-	public ChoiceBox<WebDavUrlScheme> webDavUrlSchemeChoiceBox;
 
 	@Inject
 	GeneralPreferencesController(Settings settings) {
 		this.settings = settings;
-		this.showWebDavSettings = Bindings.equal(settings.preferredVolumeImpl(), VolumeImpl.WEBDAV);
 	}
 
 	public void initialize() {
@@ -43,42 +30,6 @@ public class GeneralPreferencesController implements FxController {
 		startHiddenCheckbox.selectedProperty().bindBidirectional(settings.startHidden());
 
 		debugModeCheckbox.selectedProperty().bindBidirectional(settings.debugMode());
-
-		volumeTypeChoicBox.getItems().addAll(Volume.getCurrentSupportedAdapters());
-		volumeTypeChoicBox.valueProperty().bindBidirectional(settings.preferredVolumeImpl());
-		volumeTypeChoicBox.setConverter(new VolumeImplConverter());
-
-		webDavPortField.setText(String.valueOf(settings.port().get()));
-		changeWebDavPortButton.visibleProperty().bind(settings.port().asString().isNotEqualTo(webDavPortField.textProperty()));
-		changeWebDavPortButton.disableProperty().bind(Bindings.createBooleanBinding(this::validateWebDavPort, webDavPortField.textProperty()).not());
-
-		webDavUrlSchemeChoiceBox.getItems().addAll(WebDavUrlScheme.values());
-		webDavUrlSchemeChoiceBox.valueProperty().bindBidirectional(settings.preferredGvfsScheme());
-		webDavUrlSchemeChoiceBox.setConverter(new WebDavUrlSchemeConverter());
-	}
-
-	private boolean validateWebDavPort() {
-		try {
-			int port = Integer.parseInt(webDavPortField.getText());
-			return port == 0 // choose port automatically
-					|| port >= Settings.MIN_PORT && port <= Settings.MAX_PORT; // port within range
-		} catch (NumberFormatException e) {
-			return false;
-		}
-	}
-
-	public void doChangeWebDavPort() {
-		settings.port().set(Integer.parseInt(webDavPortField.getText()));
-	}
-
-	/* Property Getters */
-
-	public BooleanBinding showWebDavSettingsProperty() {
-		return showWebDavSettings;
-	}
-
-	public Boolean getShowWebDavSettings() {
-		return showWebDavSettings.get();
 	}
 
 	/* Helper classes */
@@ -96,30 +47,4 @@ public class GeneralPreferencesController implements FxController {
 		}
 	}
 
-	private static class WebDavUrlSchemeConverter extends StringConverter<WebDavUrlScheme> {
-
-		@Override
-		public String toString(WebDavUrlScheme scheme) {
-			return scheme.getDisplayName();
-		}
-
-		@Override
-		public WebDavUrlScheme fromString(String string) {
-			throw new UnsupportedOperationException();
-		}
-	}
-
-	private static class VolumeImplConverter extends StringConverter<VolumeImpl> {
-
-		@Override
-		public String toString(VolumeImpl impl) {
-			return impl.getDisplayName();
-		}
-
-		@Override
-		public VolumeImpl fromString(String string) {
-			throw new UnsupportedOperationException();
-		}
-	}
-
 }

+ 5 - 0
main/ui/src/main/java/org/cryptomator/ui/preferences/PreferencesModule.java

@@ -69,4 +69,9 @@ abstract class PreferencesModule {
 	@FxControllerKey(UpdatesPreferencesController.class)
 	abstract FxController bindUpdatesPreferencesController(UpdatesPreferencesController controller);
 
+	@Binds
+	@IntoMap
+	@FxControllerKey(VolumePreferencesController.class)
+	abstract FxController bindVolumePreferencesController(VolumePreferencesController controller);
+
 }

+ 99 - 0
main/ui/src/main/java/org/cryptomator/ui/preferences/VolumePreferencesController.java

@@ -0,0 +1,99 @@
+package org.cryptomator.ui.preferences;
+
+import javafx.beans.binding.Bindings;
+import javafx.beans.binding.BooleanBinding;
+import javafx.scene.control.Button;
+import javafx.scene.control.ChoiceBox;
+import javafx.scene.control.TextField;
+import javafx.util.StringConverter;
+import org.cryptomator.common.settings.Settings;
+import org.cryptomator.common.settings.VolumeImpl;
+import org.cryptomator.common.settings.WebDavUrlScheme;
+import org.cryptomator.common.vaults.Volume;
+import org.cryptomator.ui.common.FxController;
+
+import javax.inject.Inject;
+
+@PreferencesScoped
+public class VolumePreferencesController implements FxController {
+
+	private final Settings settings;
+	private final BooleanBinding showWebDavSettings;
+	public ChoiceBox<VolumeImpl> volumeTypeChoicBox;
+	public TextField webDavPortField;
+	public Button changeWebDavPortButton;
+	public ChoiceBox<WebDavUrlScheme> webDavUrlSchemeChoiceBox;
+
+	@Inject
+	VolumePreferencesController(Settings settings) {
+		this.settings = settings;
+		this.showWebDavSettings = Bindings.equal(settings.preferredVolumeImpl(), VolumeImpl.WEBDAV);
+	}
+
+	public void initialize() {
+		volumeTypeChoicBox.getItems().addAll(Volume.getCurrentSupportedAdapters());
+		volumeTypeChoicBox.valueProperty().bindBidirectional(settings.preferredVolumeImpl());
+		volumeTypeChoicBox.setConverter(new VolumeImplConverter());
+
+		webDavPortField.setText(String.valueOf(settings.port().get()));
+		changeWebDavPortButton.visibleProperty().bind(settings.port().asString().isNotEqualTo(webDavPortField.textProperty()));
+		changeWebDavPortButton.disableProperty().bind(Bindings.createBooleanBinding(this::validateWebDavPort, webDavPortField.textProperty()).not());
+
+		webDavUrlSchemeChoiceBox.getItems().addAll(WebDavUrlScheme.values());
+		webDavUrlSchemeChoiceBox.valueProperty().bindBidirectional(settings.preferredGvfsScheme());
+		webDavUrlSchemeChoiceBox.setConverter(new WebDavUrlSchemeConverter());
+	}
+
+	private boolean validateWebDavPort() {
+		try {
+			int port = Integer.parseInt(webDavPortField.getText());
+			return port == 0 // choose port automatically
+					|| port >= Settings.MIN_PORT && port <= Settings.MAX_PORT; // port within range
+		} catch (NumberFormatException e) {
+			return false;
+		}
+	}
+
+	public void doChangeWebDavPort() {
+		settings.port().set(Integer.parseInt(webDavPortField.getText()));
+	}
+
+	/* Property Getters */
+
+	public BooleanBinding showWebDavSettingsProperty() {
+		return showWebDavSettings;
+	}
+
+	public Boolean getShowWebDavSettings() {
+		return showWebDavSettings.get();
+	}
+
+	/* Helper classes */
+
+	private static class WebDavUrlSchemeConverter extends StringConverter<WebDavUrlScheme> {
+
+		@Override
+		public String toString(WebDavUrlScheme scheme) {
+			return scheme.getDisplayName();
+		}
+
+		@Override
+		public WebDavUrlScheme fromString(String string) {
+			throw new UnsupportedOperationException();
+		}
+	}
+
+	private static class VolumeImplConverter extends StringConverter<VolumeImpl> {
+
+		@Override
+		public String toString(VolumeImpl impl) {
+			return impl.getDisplayName();
+		}
+
+		@Override
+		public VolumeImpl fromString(String string) {
+			throw new UnsupportedOperationException();
+		}
+	}
+
+}

+ 15 - 0
main/ui/src/main/resources/fxml/preferences.fxml

@@ -2,6 +2,7 @@
 
 <?import javafx.scene.control.Tab?>
 <?import javafx.scene.control.TabPane?>
+<?import de.jensd.fx.glyphs.fontawesome.FontAwesomeIconView?>
 <TabPane xmlns="http://javafx.com/javafx"
 		 xmlns:fx="http://javafx.com/fxml"
 		 fx:id="tabPane"
@@ -11,14 +12,28 @@
 		 tabDragPolicy="FIXED">
 	<tabs>
 		<Tab fx:id="generalTab" text="%preferences.general">
+			<graphic>
+				<FontAwesomeIconView styleClass="fa-icon" glyphName="COGS"/>
+			</graphic>
 			<content>
 				<fx:include source="/fxml/preferences_general.fxml"/>
 			</content>
 		</Tab>
 		<Tab fx:id="updatesTab" text="%preferences.updates">
+			<graphic>
+				<FontAwesomeIconView styleClass="fa-icon" glyphName="REFRESH"/>
+			</graphic>
 			<content>
 				<fx:include source="/fxml/preferences_updates.fxml"/>
 			</content>
 		</Tab>
+		<Tab fx:id="volumeTab" text="%preferences.volume">
+			<graphic>
+				<FontAwesomeIconView styleClass="fa-icon" glyphName="HDD_ALT"/>
+			</graphic>
+			<content>
+				<fx:include source="/fxml/preferences_volume.fxml"/>
+			</content>
+		</Tab>
 	</tabs>
 </TabPane>

+ 0 - 18
main/ui/src/main/resources/fxml/preferences_general.fxml

@@ -1,13 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
 <?import javafx.geometry.Insets?>
-<?import javafx.scene.control.Button?>
 <?import javafx.scene.control.CheckBox?>
 <?import javafx.scene.control.ChoiceBox?>
 <?import javafx.scene.control.Label?>
 <?import javafx.scene.layout.HBox?>
 <?import javafx.scene.layout.VBox?>
-<?import org.cryptomator.ui.controls.NumericTextField?>
 <VBox xmlns="http://javafx.com/javafx"
 	  xmlns:fx="http://javafx.com/fxml"
 	  fx:controller="org.cryptomator.ui.preferences.GeneralPreferencesController"
@@ -24,21 +22,5 @@
 		<CheckBox fx:id="startHiddenCheckbox" text="%preferences.general.startHidden"/>
 
 		<CheckBox fx:id="debugModeCheckbox" text="%preferences.general.debugLogging"/>
-
-		<HBox spacing="6" alignment="BASELINE_LEFT">
-			<Label text="%preferences.general.volumeType"/>
-			<ChoiceBox fx:id="volumeTypeChoicBox"/>
-		</HBox>
-
-		<HBox spacing="6" alignment="BASELINE_LEFT" visible="${controller.showWebDavSettings}">
-			<Label text="TODO WebDAV Port"/>
-			<NumericTextField fx:id="webDavPortField"/>
-			<Button text="TODO Apply" fx:id="changeWebDavPortButton" onAction="#doChangeWebDavPort"/>
-		</HBox>
-
-		<HBox spacing="6" alignment="BASELINE_LEFT" visible="${controller.showWebDavSettings}">
-			<Label text="TODO WebDAV Scheme"/>
-			<ChoiceBox fx:id="webDavUrlSchemeChoiceBox" maxWidth="Infinity"/>
-		</HBox>
 	</children>
 </VBox>

+ 34 - 0
main/ui/src/main/resources/fxml/preferences_volume.fxml

@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?import javafx.geometry.Insets?>
+<?import javafx.scene.control.Button?>
+<?import javafx.scene.control.ChoiceBox?>
+<?import javafx.scene.control.Label?>
+<?import javafx.scene.layout.HBox?>
+<?import javafx.scene.layout.VBox?>
+<?import org.cryptomator.ui.controls.NumericTextField?>
+<VBox xmlns="http://javafx.com/javafx"
+	  xmlns:fx="http://javafx.com/fxml"
+	  fx:controller="org.cryptomator.ui.preferences.VolumePreferencesController"
+	  spacing="6">
+	<padding>
+		<Insets bottom="12" left="12" right="12" top="12"/>
+	</padding>
+	<children>
+		<HBox spacing="6" alignment="BASELINE_LEFT">
+			<Label text="%preferences.general.volumeType"/>
+			<ChoiceBox fx:id="volumeTypeChoicBox"/>
+		</HBox>
+
+		<HBox spacing="6" alignment="BASELINE_LEFT" visible="${controller.showWebDavSettings}">
+			<Label text="TODO WebDAV Port"/>
+			<NumericTextField fx:id="webDavPortField"/>
+			<Button text="TODO Apply" fx:id="changeWebDavPortButton" onAction="#doChangeWebDavPort"/>
+		</HBox>
+
+		<HBox spacing="6" alignment="BASELINE_LEFT" visible="${controller.showWebDavSettings}">
+			<Label text="TODO WebDAV Scheme"/>
+			<ChoiceBox fx:id="webDavUrlSchemeChoiceBox" maxWidth="Infinity"/>
+		</HBox>
+	</children>
+</VBox>

+ 8 - 1
main/ui/src/main/resources/fxml/vault_options.fxml

@@ -2,6 +2,7 @@
 
 <?import javafx.scene.control.Tab?>
 <?import javafx.scene.control.TabPane?>
+<?import de.jensd.fx.glyphs.fontawesome.FontAwesomeIconView?>
 <TabPane xmlns="http://javafx.com/javafx"
 		 xmlns:fx="http://javafx.com/fxml"
 		 fx:id="tabPane"
@@ -11,11 +12,17 @@
 		 tabDragPolicy="FIXED">
 	<tabs>
 		<Tab fx:id="generalTab" text="TODO General">
+			<graphic>
+				<FontAwesomeIconView styleClass="fa-icon" glyphName="COGS"/>
+			</graphic>
 			<content>
 				<fx:include source="/fxml/vault_options_general.fxml"/>
 			</content>
 		</Tab>
-		<Tab fx:id="updatesTab" text="TODO Mounting">
+		<Tab fx:id="mountTab" text="TODO Mounting">
+			<graphic>
+				<FontAwesomeIconView styleClass="fa-icon" glyphName="HDD_ALT"/>
+			</graphic>
 			<content>
 				<fx:include source="/fxml/vault_options_mount.fxml"/>
 			</content>

+ 2 - 0
main/ui/src/main/resources/i18n/strings.properties

@@ -53,6 +53,8 @@ preferences.general.volumeType=Volume Type
 preferences.updates=Updates
 preferences.updates.autoUpdateCheck=Check for updates automatically
 preferences.updates.checkNowBtn=Check Now
+##Volume
+preferences.volume=Virtual Drive
 
 main.closeBtn.tooltip=Close
 main.settingsBtn.tooltip=Settings

+ 2 - 1
main/ui/src/main/resources/i18n/strings_en.properties

@@ -11,8 +11,9 @@ preferences.autoUpdateCheck=Check for updates automatically
 preferences.debugLogging=Enable debug logging
 preferences.startHidden=Hide window when starting Cryptomator
 preferences.theme=Look & Feel
+preferences.volume=Virtual Drive
 preferences.volumeType=Volume type
 vaultlist.emptyList.onboardingInstruction=Click here to add a vault
 vaultOptions.mount.readonly=Read-Only
 vaultOptions.mount.driveName=Drive Name
-vaultOptions.mount.customMountFlags=Custom Mount Flags
+vaultOptions.mount.customMountFlags=Custom Mount Flags