Ver código fonte

rebuild tray menu when vault state changes

Sebastian Stenzel 5 anos atrás
pai
commit
b86d4b5a37

+ 29 - 7
main/ui/src/main/java/org/cryptomator/ui/traymenu/TrayMenuController.java

@@ -9,6 +9,7 @@ import org.cryptomator.ui.fxapp.FxApplication;
 import javax.inject.Inject;
 import javax.inject.Named;
 import java.awt.Desktop;
+import java.awt.Menu;
 import java.awt.MenuItem;
 import java.awt.PopupMenu;
 import java.awt.event.ActionEvent;
@@ -53,7 +54,7 @@ class TrayMenuController {
 		}
 	}
 
-	private void vaultListChanged(Observable observable) {
+	private void vaultListChanged(@SuppressWarnings("unused") Observable observable) {
 		rebuildMenu();
 	}
 
@@ -70,27 +71,48 @@ class TrayMenuController {
 
 		menu.addSeparator();
 		for (Vault v : vaults) {
-			// TODO what do we want to do with these? lock/unlock? reveal? submenu?
-			MenuItem vaultItem = new MenuItem(v.getDisplayableName());
-			menu.add(vaultItem);
+			MenuItem submenu = buildSubmenu(v);
+			menu.add(submenu);
 		}
 		menu.addSeparator();
 
 		MenuItem quitApplicationItem = new MenuItem("TODO quit");
 		quitApplicationItem.addActionListener(this::quitApplication);
 		menu.add(quitApplicationItem);
+	}
+
+	private Menu buildSubmenu(Vault vault) {
+		Menu submenu = new Menu(vault.getDisplayableName());
+		vault.stateProperty().addListener(observable -> rebuildSubmenu(submenu, vault));
+		rebuildSubmenu(submenu, vault);
+		return submenu;
+	}
 
+	private void rebuildSubmenu(Menu submenu, Vault vault) {
+		submenu.removeAll();
+
+		// TODO add action listeners
+		if (vault.isLocked()) {
+			MenuItem unlockItem = new MenuItem("TODO unlock");
+			submenu.add(unlockItem);
+		} else if (vault.isUnlocked()) {
+			MenuItem lockItem = new MenuItem("TODO lock");
+			submenu.add(lockItem);
+
+			MenuItem revealItem = new MenuItem("TODO reveal");
+			submenu.add(revealItem);
+		}
 	}
 
-	private void showMainWindow(ActionEvent actionEvent) {
+	void showMainWindow(@SuppressWarnings("unused") ActionEvent actionEvent) {
 		fxApplicationStarter.get(true).thenAccept(FxApplication::showMainWindow);
 	}
 
-	private void showPreferencesWindow(EventObject actionEvent) {
+	void showPreferencesWindow(@SuppressWarnings("unused") EventObject actionEvent) {
 		fxApplicationStarter.get(true).thenAccept(FxApplication::showPreferencesWindow);
 	}
 
-	private void quitApplication(ActionEvent actionEvent) {
+	void quitApplication(@SuppressWarnings("unused") ActionEvent actionEvent) {
 		shutdownLatch.countDown();
 	}
 }