diff --git a/src/dorkbox/systemTray/Menu.java b/src/dorkbox/systemTray/Menu.java index bcfa76b8..0f3a92c0 100644 --- a/src/dorkbox/systemTray/Menu.java +++ b/src/dorkbox/systemTray/Menu.java @@ -414,7 +414,7 @@ class Menu { } /** - * This removes a sub-menu entry or sub-menu from the dropdown menu. + * This removes a sub-menu entry from the dropdown menu. * * @param menu This is the menu entry to remove */ @@ -484,4 +484,12 @@ class Menu { } }); } + + /** + * This removes the sub-menu entry from the dropdown menu. + */ + public + void remove() { + getParent().remove(this); + } } diff --git a/test/dorkbox/TestTray.java b/test/dorkbox/TestTray.java index 36bc9bc4..c103e11b 100644 --- a/test/dorkbox/TestTray.java +++ b/test/dorkbox/TestTray.java @@ -50,45 +50,61 @@ class TestTray { throw new RuntimeException("Unable to load SystemTray!"); } - this.systemTray.setIcon(LT_GRAY_MAIL); + systemTray.setIcon(LT_GRAY_MAIL); systemTray.setStatus("No Mail"); callbackGreen = new SystemTrayMenuAction() { @Override public - void onClick(final SystemTray systemTray, final Menu parentMenu, final MenuEntry menuEntry) { + void onClick(final SystemTray systemTray, final Menu parent, final MenuEntry menuEntry) { systemTray.setStatus("Some Mail!"); systemTray.setIcon(GREEN_MAIL); menuEntry.setCallback(callbackGray); menuEntry.setImage(BLACK_MAIL); menuEntry.setText("Delete Mail"); -// systemTray.removeMenuEntry(menuEntry); +// systemTray.remove(menuEntry); } }; callbackGray = new SystemTrayMenuAction() { @Override public - void onClick(final SystemTray systemTray, final Menu parentMenu, final MenuEntry menuEntry) { + void onClick(final SystemTray systemTray, final Menu parent, final MenuEntry menuEntry) { systemTray.setStatus(null); systemTray.setIcon(BLACK_MAIL); menuEntry.setCallback(null); // systemTray.setStatus("Mail Empty"); - systemTray.removeMenuEntry(menuEntry); + systemTray.remove(menuEntry); System.err.println("POW"); } }; - this.systemTray.addMenuEntry("Green Mail", GREEN_MAIL, callbackGreen); - this.systemTray.addMenuSpacer(); - this.systemTray.addMenuEntry("AAAAAAAA", LT_GRAY_MAIL, null); + this.systemTray.addEntry("Green Mail", GREEN_MAIL, callbackGreen); + this.systemTray.addSeparator(); - systemTray.addMenuEntry("Quit", new SystemTrayMenuAction() { + final Menu submenu = this.systemTray.addMenu("Options", BLACK_MAIL); + submenu.addEntry("Disable menu", LT_GRAY_MAIL, new SystemTrayMenuAction() { @Override public - void onClick(final SystemTray systemTray, final Menu parentMenu, final MenuEntry menuEntry) { + void onClick(final SystemTray systemTray, final Menu parent, final MenuEntry entry) { + submenu.setEnabled(false); + } + }); + submenu.addEntry("Remove menu", GREEN_MAIL, new SystemTrayMenuAction() { + @Override + public + void onClick(final SystemTray systemTray, final Menu parent, final MenuEntry entry) { + submenu.remove(); + } + }); + + + systemTray.addEntry("Quit", new SystemTrayMenuAction() { + @Override + public + void onClick(final SystemTray systemTray, final Menu parent, final MenuEntry menuEntry) { systemTray.shutdown(); //System.exit(0); not necessary if all non-daemon threads have stopped. } diff --git a/test/dorkbox/TestTrayJavaFX.java b/test/dorkbox/TestTrayJavaFX.java index 51b822da..64c5b37b 100644 --- a/test/dorkbox/TestTrayJavaFX.java +++ b/test/dorkbox/TestTrayJavaFX.java @@ -90,38 +90,54 @@ class TestTrayJavaFX extends Application { callbackGreen = new SystemTrayMenuAction() { @Override public - void onClick(final SystemTray systemTray, final Menu parentMenu, final MenuEntry menuEntry) { + void onClick(final SystemTray systemTray, final Menu parent, final MenuEntry menuEntry) { systemTray.setIcon(GREEN_MAIL); systemTray.setStatus("Some Mail!"); menuEntry.setCallback(callbackGray); menuEntry.setImage(BLACK_MAIL); menuEntry.setText("Delete Mail"); -// systemTray.removeMenuEntry(menuEntry); +// systemTray.remove(menuEntry); } }; callbackGray = new SystemTrayMenuAction() { @Override public - void onClick(final SystemTray systemTray, final Menu parentMenu, final MenuEntry menuEntry) { + void onClick(final SystemTray systemTray, final Menu parent, final MenuEntry menuEntry) { systemTray.setStatus(null); systemTray.setIcon(BLACK_MAIL); menuEntry.setCallback(null); // systemTray.setStatus("Mail Empty"); - systemTray.removeMenuEntry(menuEntry); + systemTray.remove(menuEntry); System.err.println("POW"); } }; - this.systemTray.addMenuEntry("Green Mail", GREEN_MAIL, callbackGreen); - this.systemTray.addMenuSpacer(); + this.systemTray.addEntry("Green Mail", GREEN_MAIL, callbackGreen); + this.systemTray.addSeparator(); - systemTray.addMenuEntry("Quit", new SystemTrayMenuAction() { + final Menu submenu = this.systemTray.addMenu("Options", BLACK_MAIL); + submenu.addEntry("Disable menu", LT_GRAY_MAIL, new SystemTrayMenuAction() { @Override public - void onClick(final SystemTray systemTray, final Menu parentMenu, final MenuEntry menuEntry) { + void onClick(final SystemTray systemTray, final Menu parent, final MenuEntry entry) { + submenu.setEnabled(false); + } + }); + submenu.addEntry("Remove menu", GREEN_MAIL, new SystemTrayMenuAction() { + @Override + public + void onClick(final SystemTray systemTray, final Menu parent, final MenuEntry entry) { + submenu.remove(); + } + }); + + systemTray.addEntry("Quit", new SystemTrayMenuAction() { + @Override + public + void onClick(final SystemTray systemTray, final Menu parent, final MenuEntry menuEntry) { systemTray.shutdown(); Platform.exit(); // necessary to close javaFx //System.exit(0); not necessary if all non-daemon threads have stopped. diff --git a/test/dorkbox/TestTraySwt.java b/test/dorkbox/TestTraySwt.java index 8656e7f2..b9e35ba2 100644 --- a/test/dorkbox/TestTraySwt.java +++ b/test/dorkbox/TestTraySwt.java @@ -74,38 +74,54 @@ class TestTraySwt { callbackGreen = new SystemTrayMenuAction() { @Override public - void onClick(final SystemTray systemTray, final dorkbox.systemTray.Menu parentMenu, final MenuEntry menuEntry) { + void onClick(final SystemTray systemTray, final Menu parent, final MenuEntry menuEntry) { systemTray.setStatus("Some Mail!"); systemTray.setIcon(GREEN_MAIL); menuEntry.setCallback(callbackGray); menuEntry.setImage(BLACK_MAIL); menuEntry.setText("Delete Mail"); -// systemTray.removeMenuEntry(menuEntry); +// systemTray.remove(menuEntry); } }; callbackGray = new SystemTrayMenuAction() { @Override public - void onClick(final SystemTray systemTray, final Menu parentMenu, final MenuEntry menuEntry) { + void onClick(final SystemTray systemTray, final Menu parent, final MenuEntry menuEntry) { systemTray.setStatus(null); systemTray.setIcon(BLACK_MAIL); menuEntry.setCallback(null); // systemTray.setStatus("Mail Empty"); - systemTray.removeMenuEntry(menuEntry); + systemTray.remove(menuEntry); System.err.println("POW"); } }; - this.systemTray.addMenuEntry("Green Mail", GREEN_MAIL, callbackGreen); - this.systemTray.addMenuSpacer(); + this.systemTray.addEntry("Green Mail", GREEN_MAIL, callbackGreen); + this.systemTray.addSeparator(); - systemTray.addMenuEntry("Quit", new SystemTrayMenuAction() { + final Menu submenu = this.systemTray.addMenu("Options", BLACK_MAIL); + submenu.addEntry("Disable menu", LT_GRAY_MAIL, new SystemTrayMenuAction() { @Override public - void onClick(final SystemTray systemTray, final Menu parentMenu, final MenuEntry menuEntry) { + void onClick(final SystemTray systemTray, final Menu parent, final MenuEntry entry) { + submenu.setEnabled(false); + } + }); + submenu.addEntry("Remove menu", GREEN_MAIL, new SystemTrayMenuAction() { + @Override + public + void onClick(final SystemTray systemTray, final Menu parent, final MenuEntry entry) { + submenu.remove(); + } + }); + + systemTray.addEntry("Quit", new SystemTrayMenuAction() { + @Override + public + void onClick(final SystemTray systemTray, final Menu parent, final MenuEntry menuEntry) { systemTray.shutdown(); display.asyncExec(new Runnable() {