diff --git a/src/main/java/org/cryptomator/ui/mainwindow/VaultListController.java b/src/main/java/org/cryptomator/ui/mainwindow/VaultListController.java index f0aadfdfc..df43edb65 100644 --- a/src/main/java/org/cryptomator/ui/mainwindow/VaultListController.java +++ b/src/main/java/org/cryptomator/ui/mainwindow/VaultListController.java @@ -7,6 +7,8 @@ import org.cryptomator.cryptofs.CryptoFileSystemProvider; import org.cryptomator.cryptofs.DirStructure; import org.cryptomator.ui.addvaultwizard.AddVaultWizardComponent; import org.cryptomator.ui.common.FxController; +import org.cryptomator.ui.controls.FontAwesome5Icon; +import org.cryptomator.ui.controls.FontAwesome5IconView; import org.cryptomator.ui.removevault.RemoveVaultComponent; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -21,7 +23,10 @@ import javafx.beans.value.ObservableValue; import javafx.collections.ListChangeListener; import javafx.collections.ObservableList; import javafx.fxml.FXML; +import javafx.scene.control.Button; +import javafx.scene.control.ContextMenu; import javafx.scene.control.ListView; +import javafx.scene.control.MenuItem; import javafx.scene.input.ContextMenuEvent; import javafx.scene.input.DragEvent; import javafx.scene.input.KeyCode; @@ -34,6 +39,7 @@ import java.io.File; import java.io.IOException; import java.nio.file.Path; import java.util.EnumSet; +import java.util.ResourceBundle; import java.util.Set; import java.util.stream.Collectors; @@ -59,12 +65,14 @@ public class VaultListController implements FxController { private final RemoveVaultComponent.Builder removeVaultDialogue; private final VaultListManager vaultListManager; private final BooleanProperty draggingVaultOver = new SimpleBooleanProperty(); + private final ResourceBundle resourceBundle; public ListView vaultList; public StackPane root; + public Button addVaultBtn; @Inject - VaultListController(@MainWindow Stage mainWindow, ObservableList vaults, ObjectProperty selectedVault, VaultListCellFactory cellFactory, AddVaultWizardComponent.Builder addVaultWizard, RemoveVaultComponent.Builder removeVaultDialogue, VaultListManager vaultListManager) { + VaultListController(@MainWindow Stage mainWindow, ObservableList vaults, ObjectProperty selectedVault, VaultListCellFactory cellFactory, AddVaultWizardComponent.Builder addVaultWizard, RemoveVaultComponent.Builder removeVaultDialogue, VaultListManager vaultListManager, ResourceBundle resourceBundle) { this.mainWindow = mainWindow; this.vaults = vaults; this.selectedVault = selectedVault; @@ -72,6 +80,7 @@ public class VaultListController implements FxController { this.addVaultWizard = addVaultWizard; this.removeVaultDialogue = removeVaultDialogue; this.vaultListManager = vaultListManager; + this.resourceBundle = resourceBundle; this.emptyVaultList = Bindings.isEmpty(vaults); @@ -127,6 +136,24 @@ public class VaultListController implements FxController { root.setOnDragOver(this::handleDragEvent); root.setOnDragDropped(this::handleDragEvent); root.setOnDragExited(this::handleDragEvent); + + ContextMenu contextMenu = new ContextMenu(); + FontAwesome5IconView addIcon = new FontAwesome5IconView(); + addIcon.setGlyph(FontAwesome5Icon.PLUS); + MenuItem item1 = new MenuItem(resourceBundle.getString("addvaultwizard.welcome.newButton"), addIcon); + FontAwesome5IconView openIcon = new FontAwesome5IconView(); + openIcon.setGlyph(FontAwesome5Icon.FOLDER_OPEN); + MenuItem item2 = new MenuItem(resourceBundle.getString("addvaultwizard.welcome.existingButton"), openIcon); + item2.setOnAction(event -> didClickAddVault()); + contextMenu.getItems().addAll(item1, item2); + addVaultBtn.setContextMenu(contextMenu); + } + + @FXML + private void showMenu() { + double screenX = addVaultBtn.localToScreen(addVaultBtn.getBoundsInLocal()).getMinX(); + double screenY = addVaultBtn.localToScreen(addVaultBtn.getBoundsInLocal()).getMaxY(); + addVaultBtn.getContextMenu().show(addVaultBtn, screenX, screenY); } private void deselect(MouseEvent released) { diff --git a/src/main/resources/fxml/vault_list.fxml b/src/main/resources/fxml/vault_list.fxml index 80f29f2f7..8c3d3d12c 100644 --- a/src/main/resources/fxml/vault_list.fxml +++ b/src/main/resources/fxml/vault_list.fxml @@ -26,7 +26,7 @@ -