diff --git a/main/ui/src/main/java/org/cryptomator/ui/common/FxmlFile.java b/main/ui/src/main/java/org/cryptomator/ui/common/FxmlFile.java index 1ec24dcaf..0f30aeab8 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/common/FxmlFile.java +++ b/main/ui/src/main/java/org/cryptomator/ui/common/FxmlFile.java @@ -9,7 +9,8 @@ public enum FxmlFile { ADDVAULT_NEW_PASSWORD("/fxml/addvault_new_password.fxml"), // PREFERENCES("/fxml/preferences.fxml"), // UNLOCK("/fxml/unlock2.fxml"), // TODO rename - UNLOCK_SUCCESS("/fxml/unlock_success.fxml"); + UNLOCK_SUCCESS("/fxml/unlock_success.fxml"), + VAULT_OPTIONS("/fxml/vault_options.fxml"); private final String filename; 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 43c979d8c..2660662ea 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 @@ -13,12 +13,13 @@ import org.cryptomator.ui.common.FxController; import org.cryptomator.ui.common.FxControllerKey; import org.cryptomator.ui.common.FxmlFile; import org.cryptomator.ui.common.FxmlScene; +import org.cryptomator.ui.vaultoptions.VaultOptionsComponent; import javax.inject.Provider; import java.util.Map; import java.util.ResourceBundle; -@Module(subcomponents = {AddVaultWizardComponent.class}) +@Module(subcomponents = {AddVaultWizardComponent.class, VaultOptionsComponent.class}) abstract class MainWindowModule { @Provides diff --git a/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultDetailController.java b/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultDetailController.java index d16aa4b4c..eec1a2f79 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultDetailController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultDetailController.java @@ -7,6 +7,7 @@ import org.cryptomator.common.vaults.Vault; import org.cryptomator.ui.common.FxController; import org.cryptomator.ui.common.Tasks; import org.cryptomator.ui.fxapp.FxApplication; +import org.cryptomator.ui.vaultoptions.VaultOptionsComponent; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -21,12 +22,14 @@ public class VaultDetailController implements FxController { private final ReadOnlyObjectProperty vault; private final ExecutorService executor; private final FxApplication application; + private final VaultOptionsComponent.Builder vaultOptionsWindow; @Inject - VaultDetailController(ObjectProperty vault, ExecutorService executor, FxApplication application) { + VaultDetailController(ObjectProperty vault, ExecutorService executor, FxApplication application, VaultOptionsComponent.Builder vaultOptionsWindow) { this.vault = vault; this.executor = executor; this.application = application; + this.vaultOptionsWindow = vaultOptionsWindow; } @FXML @@ -47,6 +50,11 @@ public class VaultDetailController implements FxController { // TODO }).runOnce(executor); } + + @FXML + public void showVaultOptions() { + vaultOptionsWindow.vault(vault.get()).build().showVaultOptionsWindow(); + } /* Observable Properties */ diff --git a/main/ui/src/main/java/org/cryptomator/ui/vaultoptions/GeneralVaultOptionsController.java b/main/ui/src/main/java/org/cryptomator/ui/vaultoptions/GeneralVaultOptionsController.java new file mode 100644 index 000000000..7a7f5e59d --- /dev/null +++ b/main/ui/src/main/java/org/cryptomator/ui/vaultoptions/GeneralVaultOptionsController.java @@ -0,0 +1,13 @@ +package org.cryptomator.ui.vaultoptions; + +import org.cryptomator.ui.common.FxController; + +import javax.inject.Inject; + +@VaultOptionsScoped +public class GeneralVaultOptionsController implements FxController { + + @Inject + GeneralVaultOptionsController(){} + +} diff --git a/main/ui/src/main/java/org/cryptomator/ui/vaultoptions/MountOptionsController.java b/main/ui/src/main/java/org/cryptomator/ui/vaultoptions/MountOptionsController.java new file mode 100644 index 000000000..e5117b8cd --- /dev/null +++ b/main/ui/src/main/java/org/cryptomator/ui/vaultoptions/MountOptionsController.java @@ -0,0 +1,13 @@ +package org.cryptomator.ui.vaultoptions; + +import org.cryptomator.ui.common.FxController; + +import javax.inject.Inject; + +@VaultOptionsScoped +public class MountOptionsController implements FxController { + + @Inject + MountOptionsController(){} + +} diff --git a/main/ui/src/main/java/org/cryptomator/ui/vaultoptions/VaultOptionsComponent.java b/main/ui/src/main/java/org/cryptomator/ui/vaultoptions/VaultOptionsComponent.java new file mode 100644 index 000000000..ce1dcaa2e --- /dev/null +++ b/main/ui/src/main/java/org/cryptomator/ui/vaultoptions/VaultOptionsComponent.java @@ -0,0 +1,43 @@ +/******************************************************************************* + * Copyright (c) 2017 Skymatic UG (haftungsbeschränkt). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the accompanying LICENSE file. + *******************************************************************************/ +package org.cryptomator.ui.vaultoptions; + +import dagger.BindsInstance; +import dagger.Lazy; +import dagger.Subcomponent; +import javafx.scene.Scene; +import javafx.stage.Stage; +import org.cryptomator.common.vaults.Vault; +import org.cryptomator.ui.common.FxmlFile; +import org.cryptomator.ui.common.FxmlScene; + +@VaultOptionsScoped +@Subcomponent(modules = {VaultOptionsModule.class}) +public interface VaultOptionsComponent { + + @VaultOptionsWindow + Stage window(); + + @FxmlScene(FxmlFile.VAULT_OPTIONS) + Lazy scene(); + + default void showVaultOptionsWindow() { + Stage stage = window(); + stage.setScene(scene().get()); + stage.show(); + stage.requestFocus(); + } + + @Subcomponent.Builder + interface Builder { + + @BindsInstance + VaultOptionsComponent.Builder vault(@VaultOptionsWindow Vault vault); + + VaultOptionsComponent build(); + } + +} diff --git a/main/ui/src/main/java/org/cryptomator/ui/vaultoptions/VaultOptionsController.java b/main/ui/src/main/java/org/cryptomator/ui/vaultoptions/VaultOptionsController.java new file mode 100644 index 000000000..9b525c2a3 --- /dev/null +++ b/main/ui/src/main/java/org/cryptomator/ui/vaultoptions/VaultOptionsController.java @@ -0,0 +1,13 @@ +package org.cryptomator.ui.vaultoptions; + +import org.cryptomator.ui.common.FxController; + +import javax.inject.Inject; + +@VaultOptionsScoped +public class VaultOptionsController implements FxController { + + @Inject + VaultOptionsController(){} + +} diff --git a/main/ui/src/main/java/org/cryptomator/ui/vaultoptions/VaultOptionsModule.java b/main/ui/src/main/java/org/cryptomator/ui/vaultoptions/VaultOptionsModule.java new file mode 100644 index 000000000..1cc869437 --- /dev/null +++ b/main/ui/src/main/java/org/cryptomator/ui/vaultoptions/VaultOptionsModule.java @@ -0,0 +1,72 @@ +package org.cryptomator.ui.vaultoptions; + +import dagger.Binds; +import dagger.Module; +import dagger.Provides; +import dagger.multibindings.IntoMap; +import javafx.scene.Scene; +import javafx.stage.Modality; +import javafx.stage.Stage; +import javafx.stage.StageStyle; +import org.cryptomator.common.vaults.Vault; +import org.cryptomator.ui.common.FXMLLoaderFactory; +import org.cryptomator.ui.common.FxController; +import org.cryptomator.ui.common.FxControllerKey; +import org.cryptomator.ui.common.FxmlFile; +import org.cryptomator.ui.common.FxmlScene; +import org.cryptomator.ui.mainwindow.MainWindow; + +import javax.inject.Provider; +import java.util.Map; +import java.util.ResourceBundle; + +@Module +abstract class VaultOptionsModule { + + @Provides + @VaultOptionsWindow + @VaultOptionsScoped + static FXMLLoaderFactory provideFxmlLoaderFactory(Map, Provider> factories, ResourceBundle resourceBundle) { + return new FXMLLoaderFactory(factories, resourceBundle); + } + + @Provides + @VaultOptionsWindow + @VaultOptionsScoped + static Stage provideStage(@MainWindow Stage owner, @VaultOptionsWindow Vault vault, ResourceBundle resourceBundle) { + Stage stage = new Stage(); + stage.setTitle(vault.getDisplayableName()); + // stage.setTitle(resourceBundle.getString("vaultOptions.title")); + stage.setMinWidth(400); + stage.setMinHeight(300); + stage.initStyle(StageStyle.DECORATED); + stage.initModality(Modality.WINDOW_MODAL); + stage.initOwner(owner); + return stage; + } + + @Provides + @FxmlScene(FxmlFile.VAULT_OPTIONS) + @VaultOptionsScoped + static Scene provideVaultOptionsScene(@VaultOptionsWindow FXMLLoaderFactory fxmlLoaders) { + return fxmlLoaders.createScene("/fxml/vault_options.fxml"); + } + + // ------------------ + + @Binds + @IntoMap + @FxControllerKey(VaultOptionsController.class) + abstract FxController bindVaultOptionsController(VaultOptionsController controller); + + @Binds + @IntoMap + @FxControllerKey(GeneralVaultOptionsController.class) + abstract FxController bindGeneralVaultOptionsController(GeneralVaultOptionsController controller); + + @Binds + @IntoMap + @FxControllerKey(MountOptionsController.class) + abstract FxController bindMountOptionsController(MountOptionsController controller); + +} diff --git a/main/ui/src/main/java/org/cryptomator/ui/vaultoptions/VaultOptionsScoped.java b/main/ui/src/main/java/org/cryptomator/ui/vaultoptions/VaultOptionsScoped.java new file mode 100644 index 000000000..cd8568171 --- /dev/null +++ b/main/ui/src/main/java/org/cryptomator/ui/vaultoptions/VaultOptionsScoped.java @@ -0,0 +1,13 @@ +package org.cryptomator.ui.vaultoptions; + +import javax.inject.Scope; +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +@Scope +@Documented +@Retention(RetentionPolicy.RUNTIME) +@interface VaultOptionsScoped { + +} diff --git a/main/ui/src/main/java/org/cryptomator/ui/vaultoptions/VaultOptionsWindow.java b/main/ui/src/main/java/org/cryptomator/ui/vaultoptions/VaultOptionsWindow.java new file mode 100644 index 000000000..db3e25bd2 --- /dev/null +++ b/main/ui/src/main/java/org/cryptomator/ui/vaultoptions/VaultOptionsWindow.java @@ -0,0 +1,14 @@ +package org.cryptomator.ui.vaultoptions; + +import javax.inject.Qualifier; +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; + +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +@Qualifier +@Documented +@Retention(RUNTIME) +public @interface VaultOptionsWindow { + +} diff --git a/main/ui/src/main/resources/fxml/vault_detail.fxml b/main/ui/src/main/resources/fxml/vault_detail.fxml index 4fa72504b..66bcd0824 100644 --- a/main/ui/src/main/resources/fxml/vault_detail.fxml +++ b/main/ui/src/main/resources/fxml/vault_detail.fxml @@ -16,5 +16,6 @@