fix Library/Tool reference links in help menu (resolves https://github.com/processing/processing/issues/5839)

This commit is contained in:
Ben Fry
2022-08-04 15:18:06 -04:00
parent bb5b46bfd8
commit 752cc6bd74
2 changed files with 46 additions and 80 deletions
+43 -79
View File
@@ -31,7 +31,6 @@ import java.util.List;
import java.util.Map;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.event.*;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
@@ -316,96 +315,61 @@ public class JavaEditor extends Editor {
menu.addSeparator();
final JMenu libRefSubmenu = new JMenu(Language.text("menu.help.libraries_reference"));
// Populate only when sub-menu is opened, to avoid having spurious menu
// options if a library is deleted, or a missing menu option if a library is added
libRefSubmenu.addMenuListener(new MenuListener() {
@Override
public void menuSelected(MenuEvent e) {
// Adding this in case references are included in a core library,
// or other core libraries are included in the future
boolean isCoreLibMenuItemAdded =
addLibReferencesToSubMenu(mode.coreLibraries, libRefSubmenu);
// Adding this in case references are included in a core library,
// or other core libraries are included in the future
boolean isCoreLibMenuItemAdded =
addLibReferencesToSubMenu(mode.coreLibraries, libRefSubmenu);
if (isCoreLibMenuItemAdded && !mode.contribLibraries.isEmpty()) {
libRefSubmenu.addSeparator();
}
if (isCoreLibMenuItemAdded && !mode.contribLibraries.isEmpty()) {
libRefSubmenu.addSeparator();
}
boolean isContribLibMenuItemAdded =
addLibReferencesToSubMenu(mode.contribLibraries, libRefSubmenu);
boolean isContribLibMenuItemAdded =
addLibReferencesToSubMenu(mode.contribLibraries, libRefSubmenu);
if (!isContribLibMenuItemAdded && !isCoreLibMenuItemAdded) {
JMenuItem emptyMenuItem = new JMenuItem(Language.text("menu.help.empty"));
emptyMenuItem.setEnabled(false);
emptyMenuItem.setFocusable(false);
emptyMenuItem.setFocusPainted(false);
libRefSubmenu.add(emptyMenuItem);
if (!isContribLibMenuItemAdded && !isCoreLibMenuItemAdded) {
JMenuItem emptyMenuItem = new JMenuItem(Language.text("menu.help.empty"));
emptyMenuItem.setEnabled(false);
emptyMenuItem.setFocusable(false);
emptyMenuItem.setFocusPainted(false);
libRefSubmenu.add(emptyMenuItem);
} else if (!isContribLibMenuItemAdded && !mode.coreLibraries.isEmpty()) {
//re-populate the menu to get rid of terminal separator
libRefSubmenu.removeAll();
addLibReferencesToSubMenu(mode.coreLibraries, libRefSubmenu);
}
}
@Override
public void menuDeselected(MenuEvent e) {
libRefSubmenu.removeAll();
}
@Override
public void menuCanceled(MenuEvent e) {
menuDeselected(e);
}
});
} else if (!isContribLibMenuItemAdded && !mode.coreLibraries.isEmpty()) {
//re-populate the menu to get rid of terminal separator
libRefSubmenu.removeAll();
addLibReferencesToSubMenu(mode.coreLibraries, libRefSubmenu);
}
menu.add(libRefSubmenu);
final JMenu toolRefSubmenu = new JMenu(Language.text("menu.help.tools_reference"));
// Populate only when sub-menu is opened, to avoid having spurious menu
// options if a tool is deleted, or a missing menu option if a library is added
toolRefSubmenu.addMenuListener(new MenuListener() {
boolean coreToolMenuItemAdded;
boolean contribToolMenuItemAdded;
@Override
public void menuSelected(MenuEvent e) {
boolean coreToolMenuItemAdded;
boolean contribToolMenuItemAdded;
List<ToolContribution> contribTools = base.getToolContribs();
// Adding this in in case a reference folder is added for MovieMaker, or in case
// other core tools are introduced later
coreToolMenuItemAdded = addToolReferencesToSubMenu(base.getCoreTools(), toolRefSubmenu);
List<ToolContribution> contribTools = base.getToolContribs();
// Adding this in in case a reference folder is added for MovieMaker, or in case
// other core tools are introduced later
coreToolMenuItemAdded = addToolReferencesToSubMenu(base.getCoreTools(), toolRefSubmenu);
if (coreToolMenuItemAdded && !contribTools.isEmpty())
toolRefSubmenu.addSeparator();
if (coreToolMenuItemAdded && !contribTools.isEmpty())
toolRefSubmenu.addSeparator();
contribToolMenuItemAdded = addToolReferencesToSubMenu(contribTools, toolRefSubmenu);
contribToolMenuItemAdded = addToolReferencesToSubMenu(contribTools, toolRefSubmenu);
if (!contribToolMenuItemAdded && !coreToolMenuItemAdded) {
toolRefSubmenu.removeAll(); // in case a separator was added
final JMenuItem emptyMenuItem = new JMenuItem(Language.text("menu.help.empty"));
emptyMenuItem.setEnabled(false);
emptyMenuItem.setBorderPainted(false);
emptyMenuItem.setFocusable(false);
emptyMenuItem.setFocusPainted(false);
toolRefSubmenu.add(emptyMenuItem);
}
else if (!contribToolMenuItemAdded && !contribTools.isEmpty()) {
// re-populate the menu to get rid of terminal separator
toolRefSubmenu.removeAll();
addToolReferencesToSubMenu(base.getCoreTools(), toolRefSubmenu);
}
}
@Override
public void menuDeselected(MenuEvent e) {
toolRefSubmenu.removeAll();
}
@Override
public void menuCanceled(MenuEvent e) {
menuDeselected(e);
}
});
if (!contribToolMenuItemAdded && !coreToolMenuItemAdded) {
toolRefSubmenu.removeAll(); // in case a separator was added
final JMenuItem emptyMenuItem = new JMenuItem(Language.text("menu.help.empty"));
emptyMenuItem.setEnabled(false);
emptyMenuItem.setBorderPainted(false);
emptyMenuItem.setFocusable(false);
emptyMenuItem.setFocusPainted(false);
toolRefSubmenu.add(emptyMenuItem);
}
else if (!contribToolMenuItemAdded && !contribTools.isEmpty()) {
// re-populate the menu to get rid of terminal separator
toolRefSubmenu.removeAll();
addToolReferencesToSubMenu(base.getCoreTools(), toolRefSubmenu);
}
menu.add(toolRefSubmenu);
menu.addSeparator();
+3 -1
View File
@@ -33,6 +33,9 @@ X disable behavior with sketch.name.replace_underscore = false
X add clean-libs target to build.xml files that need it
X check all Help menu entries and their destinations
X Help > Environment not going to the right place
X Help > Libraries Reference > submenu items don't work
X same for Tools reference
X https://github.com/processing/processing/issues/5839
naming
X Friendly Names for new Sketches (includes UI for switching it back)
@@ -561,7 +564,6 @@ _ versions for aarch64 as well
_ https://github.com/eugeneware/ffmpeg-static/releases
_ but need to figure out a good way to highlight it/encourage installation
_ ...as well as the other libraries? separate window?
_ Help > Library/Tools reference links don't work
_ Export to Application not working with the current video library
_ https://github.com/processing/processing-video/issues/188
_ loadShape(), show a warning when using style instead of presentation attributes