From cfea1c16bc8f46eb5264a8c604519ae00969d206 Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Mon, 15 Jul 2019 11:32:49 +0200 Subject: [PATCH] added vault list and vault detail view --- .idea/compiler.xml | 5 +- .idea/modules.xml | 1 - .../org/cryptomator/launcher/Cryptomator.java | 6 +- .../ui/FxApplicationComponent.java | 9 +++ .../java/org/cryptomator/ui/UiModule.java | 4 +- .../ui/mainwindow/MainWindowModule.java | 31 +++++++++- .../ui/mainwindow/VaultDetailController.java | 32 +++++++++++ .../ui/mainwindow/VaultListController.java | 47 ++++++++++++++++ .../ui/vaultlist/VaultListController.java | 25 --------- .../ui/vaultlist/VaultListModule.java | 17 ------ .../src/main/resources/fxml/main_window.fxml | 56 ++++++++++--------- .../src/main/resources/fxml/vault_detail.fxml | 16 ++++++ .../src/main/resources/fxml/vault_list.fxml | 49 ++++++++++++++++ .../ui/src/main/resources/fxml/vaultlist.fxml | 9 --- .../main/resources/i18n/strings.properties | 2 +- .../main/resources/i18n/strings_de.properties | 2 +- .../main/resources/i18n/strings_en.properties | 2 +- 17 files changed, 217 insertions(+), 96 deletions(-) create mode 100644 main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultDetailController.java create mode 100644 main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultListController.java delete mode 100644 main/ui/src/main/java/org/cryptomator/ui/vaultlist/VaultListController.java delete mode 100644 main/ui/src/main/java/org/cryptomator/ui/vaultlist/VaultListModule.java create mode 100644 main/ui/src/main/resources/fxml/vault_detail.fxml create mode 100644 main/ui/src/main/resources/fxml/vault_list.fxml delete mode 100644 main/ui/src/main/resources/fxml/vaultlist.fxml diff --git a/.idea/compiler.xml b/.idea/compiler.xml index ace983167..da1897030 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -23,14 +23,11 @@ - + - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml index bca3878d6..2e793ed5c 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -3,7 +3,6 @@ - \ No newline at end of file diff --git a/main/launcher/src/main/java/org/cryptomator/launcher/Cryptomator.java b/main/launcher/src/main/java/org/cryptomator/launcher/Cryptomator.java index 71f43a100..30156ea0c 100644 --- a/main/launcher/src/main/java/org/cryptomator/launcher/Cryptomator.java +++ b/main/launcher/src/main/java/org/cryptomator/launcher/Cryptomator.java @@ -89,11 +89,7 @@ public class Cryptomator { private int runGuiApplication() { try { shutdownPerformer.registerShutdownHook(); - Platform.startup(() -> { - assert Platform.isFxApplicationThread(); - FxApplication app = CRYPTOMATOR_COMPONENT.fxApplicationComponent().application(); - app.start(); - }); + CRYPTOMATOR_COMPONENT.fxApplicationComponent().start(); shutdownLatch.await(); LOG.info("UI shut down"); return 0; diff --git a/main/ui/src/main/java/org/cryptomator/ui/FxApplicationComponent.java b/main/ui/src/main/java/org/cryptomator/ui/FxApplicationComponent.java index 5b029a50c..ac000565c 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/FxApplicationComponent.java +++ b/main/ui/src/main/java/org/cryptomator/ui/FxApplicationComponent.java @@ -6,11 +6,20 @@ package org.cryptomator.ui; import dagger.Subcomponent; +import javafx.application.Application; +import javafx.application.Platform; @FxApplicationScoped @Subcomponent(modules = FxApplicationModule.class) public interface FxApplicationComponent { FxApplication application(); + + default void start() { + Platform.startup(() -> { + assert Platform.isFxApplicationThread(); + application().start(); + }); + } } diff --git a/main/ui/src/main/java/org/cryptomator/ui/UiModule.java b/main/ui/src/main/java/org/cryptomator/ui/UiModule.java index 59d652cc1..8447916f6 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/UiModule.java +++ b/main/ui/src/main/java/org/cryptomator/ui/UiModule.java @@ -15,10 +15,8 @@ import org.apache.commons.lang3.SystemUtils; import org.cryptomator.common.settings.Settings; import org.cryptomator.frontend.webdav.WebDavServer; import org.cryptomator.keychain.KeychainModule; -import org.cryptomator.ui.controllers.ViewControllerModule; import org.cryptomator.ui.mainwindow.MainWindowModule; import org.cryptomator.ui.model.VaultComponent; -import org.cryptomator.ui.vaultlist.VaultListModule; import org.fxmisc.easybind.EasyBind; import javax.inject.Named; @@ -29,7 +27,7 @@ import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Consumer; -@Module(includes = {ViewControllerModule.class, KeychainModule.class, VaultListModule.class, MainWindowModule.class}, subcomponents = {VaultComponent.class}) +@Module(includes = {KeychainModule.class, MainWindowModule.class}, subcomponents = {VaultComponent.class}) public class UiModule { private static final int NUM_SCHEDULER_THREADS = 4; 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 6a0344ee1..c2b2ae5b3 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 @@ -2,10 +2,16 @@ package org.cryptomator.ui.mainwindow; import dagger.Binds; import dagger.Module; +import dagger.Provides; import dagger.multibindings.IntoMap; +import javafx.beans.property.ObjectProperty; +import javafx.beans.property.SimpleObjectProperty; +import javafx.collections.ObservableList; +import org.cryptomator.ui.FxApplicationScoped; import org.cryptomator.ui.FxController; import org.cryptomator.ui.FxControllerKey; -import org.cryptomator.ui.vaultlist.VaultListController; +import org.cryptomator.ui.model.Vault; +import org.cryptomator.ui.model.VaultList; @Module public abstract class MainWindowModule { @@ -13,6 +19,27 @@ public abstract class MainWindowModule { @Binds @IntoMap @FxControllerKey(MainWindowController.class) - abstract FxController bindController(MainWindowController controller); + abstract FxController bindMainWindowController(MainWindowController controller); + + @Binds + @IntoMap + @FxControllerKey(VaultListController.class) + abstract FxController bindVaultListController(VaultListController controller); + + @Binds + @IntoMap + @FxControllerKey(VaultDetailController.class) + abstract FxController bindVaultDetailController(VaultDetailController controller); + + // ------------------ + + @Binds + abstract ObservableList provideVaults(VaultList vaultList); + + @Provides + @FxApplicationScoped + static ObjectProperty provideSelectedVault() { + return new SimpleObjectProperty<>(); + } } 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 new file mode 100644 index 000000000..580a9a825 --- /dev/null +++ b/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultDetailController.java @@ -0,0 +1,32 @@ +package org.cryptomator.ui.mainwindow; + +import javafx.beans.property.ObjectProperty; +import org.cryptomator.ui.FxApplicationScoped; +import org.cryptomator.ui.FxController; +import org.cryptomator.ui.model.Vault; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.inject.Inject; + +@FxApplicationScoped +public class VaultDetailController implements FxController { + + private static final Logger LOG = LoggerFactory.getLogger(VaultDetailController.class); + + private final ObjectProperty vault; + + @Inject + VaultDetailController(ObjectProperty vault) { + this.vault = vault; + } + + public ObjectProperty vaultProperty() { + return vault; + } + + public Vault getVault() { + return vault.get(); + } + +} diff --git a/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultListController.java b/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultListController.java new file mode 100644 index 000000000..e3e790663 --- /dev/null +++ b/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultListController.java @@ -0,0 +1,47 @@ +package org.cryptomator.ui.mainwindow; + +import javafx.beans.binding.Bindings; +import javafx.beans.property.ObjectProperty; +import javafx.collections.ObservableList; +import javafx.event.ActionEvent; +import javafx.fxml.FXML; +import javafx.scene.control.ListView; +import javafx.scene.layout.AnchorPane; +import org.cryptomator.ui.FxApplicationScoped; +import org.cryptomator.ui.FxController; +import org.cryptomator.ui.model.Vault; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.inject.Inject; + +@FxApplicationScoped +public class VaultListController implements FxController { + + private static final Logger LOG = LoggerFactory.getLogger(VaultListController.class); + + private final ObservableList vaults; + private final ObjectProperty selectedVault; + public ListView vaultList; + public AnchorPane onboardingOverlay; + + @Inject + public VaultListController(ObservableList vaults, ObjectProperty selectedVault) { + this.vaults = vaults; + this.selectedVault = selectedVault; + } + + @FXML + public void initialize() { + LOG.debug("init VaultListController"); + onboardingOverlay.visibleProperty().bind(Bindings.isEmpty(vaults)); + vaultList.setItems(vaults); + selectedVault.bind(vaultList.getSelectionModel().selectedItemProperty()); + } + + public void didClickAddVault(ActionEvent actionEvent) { + } + + public void didClickRemoveVault(ActionEvent actionEvent) { + } +} diff --git a/main/ui/src/main/java/org/cryptomator/ui/vaultlist/VaultListController.java b/main/ui/src/main/java/org/cryptomator/ui/vaultlist/VaultListController.java deleted file mode 100644 index 9e28ba9c5..000000000 --- a/main/ui/src/main/java/org/cryptomator/ui/vaultlist/VaultListController.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.cryptomator.ui.vaultlist; - -import javafx.fxml.FXML; -import org.cryptomator.ui.FxApplicationScoped; -import org.cryptomator.ui.FxController; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.inject.Inject; - -@FxApplicationScoped -public class VaultListController implements FxController { - - private static final Logger LOG = LoggerFactory.getLogger(VaultListController.class); - - @Inject - public VaultListController() { - } - - @FXML - public void initialize() { - LOG.debug("init VaultListController"); - } - -} diff --git a/main/ui/src/main/java/org/cryptomator/ui/vaultlist/VaultListModule.java b/main/ui/src/main/java/org/cryptomator/ui/vaultlist/VaultListModule.java deleted file mode 100644 index 86ce99080..000000000 --- a/main/ui/src/main/java/org/cryptomator/ui/vaultlist/VaultListModule.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.cryptomator.ui.vaultlist; - -import dagger.Binds; -import dagger.Module; -import dagger.multibindings.IntoMap; -import org.cryptomator.ui.FxController; -import org.cryptomator.ui.FxControllerKey; - -@Module -public abstract class VaultListModule { - - @Binds - @IntoMap - @FxControllerKey(VaultListController.class) - abstract FxController bindController(VaultListController controller); - -} diff --git a/main/ui/src/main/resources/fxml/main_window.fxml b/main/ui/src/main/resources/fxml/main_window.fxml index d0730d023..547d7d3d0 100644 --- a/main/ui/src/main/resources/fxml/main_window.fxml +++ b/main/ui/src/main/resources/fxml/main_window.fxml @@ -8,31 +8,33 @@ - - - - - - - - - - - - + fx:controller="org.cryptomator.ui.mainwindow.MainWindowController" + styleClass="main-window"> + + + + + + + + + + + + + diff --git a/main/ui/src/main/resources/fxml/vault_detail.fxml b/main/ui/src/main/resources/fxml/vault_detail.fxml new file mode 100644 index 000000000..6a301e1a3 --- /dev/null +++ b/main/ui/src/main/resources/fxml/vault_detail.fxml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/main/ui/src/main/resources/fxml/vault_list.fxml b/main/ui/src/main/resources/fxml/vault_list.fxml new file mode 100644 index 000000000..1dbd23c1e --- /dev/null +++ b/main/ui/src/main/resources/fxml/vault_list.fxml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/main/ui/src/main/resources/fxml/vaultlist.fxml b/main/ui/src/main/resources/fxml/vaultlist.fxml deleted file mode 100644 index 344ceade7..000000000 --- a/main/ui/src/main/resources/fxml/vaultlist.fxml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - diff --git a/main/ui/src/main/resources/i18n/strings.properties b/main/ui/src/main/resources/i18n/strings.properties index 99c76666b..d47a4cb32 100644 --- a/main/ui/src/main/resources/i18n/strings.properties +++ b/main/ui/src/main/resources/i18n/strings.properties @@ -1,3 +1,3 @@ main.closeBtn.tooltip=Close main.settingsBtn.tooltip=Settings -title=Cryptomator \ No newline at end of file +vaultlist.emptyList.onboardingInstruction=Click here to add a vault \ No newline at end of file diff --git a/main/ui/src/main/resources/i18n/strings_de.properties b/main/ui/src/main/resources/i18n/strings_de.properties index 3f4eb3198..131176730 100644 --- a/main/ui/src/main/resources/i18n/strings_de.properties +++ b/main/ui/src/main/resources/i18n/strings_de.properties @@ -1,3 +1,3 @@ main.closeBtn.tooltip=Close main.settingsBtn.tooltip=Settings -title=CryptomatorDE \ No newline at end of file +vaultlist.emptyList.onboardingInstruction=Klicken Sie hier, um neue Tresore hinzuzufügen \ No newline at end of file diff --git a/main/ui/src/main/resources/i18n/strings_en.properties b/main/ui/src/main/resources/i18n/strings_en.properties index 8c23b81fa..d47a4cb32 100644 --- a/main/ui/src/main/resources/i18n/strings_en.properties +++ b/main/ui/src/main/resources/i18n/strings_en.properties @@ -1,3 +1,3 @@ main.closeBtn.tooltip=Close main.settingsBtn.tooltip=Settings -title=CryptomatorEN \ No newline at end of file +vaultlist.emptyList.onboardingInstruction=Click here to add a vault \ No newline at end of file