Browse Source

add hotkeys to remove a vault

Armin Schrenk 4 years ago
parent
commit
dc3a951a1b

+ 35 - 2
main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultListController.java

@@ -1,9 +1,11 @@
 package org.cryptomator.ui.mainwindow;
 
+import org.apache.commons.lang3.SystemUtils;
 import org.cryptomator.common.vaults.Vault;
 import org.cryptomator.common.vaults.VaultListManager;
 import org.cryptomator.ui.addvaultwizard.AddVaultWizardComponent;
 import org.cryptomator.ui.common.FxController;
+import org.cryptomator.ui.removevault.RemoveVaultComponent;
 
 import javax.inject.Inject;
 import javafx.beans.binding.Bindings;
@@ -15,9 +17,16 @@ import javafx.collections.ObservableList;
 import javafx.fxml.FXML;
 import javafx.scene.control.ListView;
 import javafx.scene.input.ContextMenuEvent;
+import javafx.scene.input.KeyCode;
 import javafx.scene.input.KeyEvent;
 import javafx.scene.input.MouseEvent;
 import javafx.stage.Stage;
+import java.util.EnumSet;
+
+import static org.cryptomator.common.vaults.VaultState.Value.ERROR;
+import static org.cryptomator.common.vaults.VaultState.Value.LOCKED;
+import static org.cryptomator.common.vaults.VaultState.Value.MISSING;
+import static org.cryptomator.common.vaults.VaultState.Value.NEEDS_MIGRATION;
 
 @MainWindowScoped
 public class VaultListController implements FxController {
@@ -29,16 +38,18 @@ public class VaultListController implements FxController {
 	private final VaultListCellFactory cellFactory;
 	private final AddVaultWizardComponent.Builder addVaultWizard;
 	private final BooleanBinding emptyVaultList;
+	private final RemoveVaultComponent.Builder removeVaultDialogue;
 
 	public ListView<Vault> vaultList;
 
 	@Inject
-	VaultListController(@MainWindow Stage mainWindow, ObservableList<Vault> vaults, ObjectProperty<Vault> selectedVault, VaultListCellFactory cellFactory, AddVaultWizardComponent.Builder addVaultWizard) {
+	VaultListController(@MainWindow Stage mainWindow, ObservableList<Vault> vaults, ObjectProperty<Vault> selectedVault, VaultListCellFactory cellFactory, AddVaultWizardComponent.Builder addVaultWizard, RemoveVaultComponent.Builder removeVaultDialogue) {
 		this.mainWindow = mainWindow;
 		this.vaults = vaults;
 		this.selectedVault = selectedVault;
 		this.cellFactory = cellFactory;
 		this.addVaultWizard = addVaultWizard;
+		this.removeVaultDialogue = removeVaultDialogue;
 
 		this.emptyVaultList = Bindings.isEmpty(vaults);
 
@@ -63,7 +74,22 @@ public class VaultListController implements FxController {
 				request.consume();
 			}
 		});
-		//register vault selection shortcut globally
+		vaultList.addEventFilter(KeyEvent.KEY_PRESSED, keyEvent -> {
+			if (keyEvent.getCode() == KeyCode.DELETE) {
+				pressedShortcutToRemoveVault();
+				keyEvent.consume();
+			}
+		});
+		if (SystemUtils.IS_OS_MAC) {
+			vaultList.addEventFilter(KeyEvent.KEY_PRESSED, keyEvent -> {
+				if (keyEvent.getCode() == KeyCode.BACK_SPACE) {
+					pressedShortcutToRemoveVault();
+					keyEvent.consume();
+				}
+			});
+		}
+
+		//register vault selection shortcut to the main window
 		mainWindow.addEventFilter(KeyEvent.KEY_RELEASED, keyEvent -> {
 			if (keyEvent.isShortcutDown() && keyEvent.getCode().isDigitKey()) {
 				vaultList.getSelectionModel().select(Integer.parseInt(keyEvent.getText()) - 1);
@@ -91,6 +117,13 @@ public class VaultListController implements FxController {
 		addVaultWizard.build().showAddVaultWizard();
 	}
 
+	private void pressedShortcutToRemoveVault() {
+		final var vault = selectedVault.get();
+		if (vault != null && EnumSet.of(LOCKED, MISSING, ERROR, NEEDS_MIGRATION).contains(vault.getState())) {
+			removeVaultDialogue.vault(vault).build().showRemoveVault();
+		}
+	}
+
 	// Getter and Setter
 
 	public BooleanBinding emptyVaultListProperty() {