mirror of
https://github.com/processing/processing4.git
synced 2026-06-16 04:26:26 +02:00
Added Tools, Libs reference menus to Help
Including support for core tools & libs if reqd later
This commit is contained in:
@@ -286,6 +286,11 @@ public abstract class Editor extends JFrame implements RunnerListener {
|
||||
}
|
||||
|
||||
|
||||
protected ArrayList<ToolContribution> getCoreTools() {
|
||||
return coreTools;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Broken out to get modes working for GSOC, but this needs a longer-term
|
||||
* solution where the listeners are handled properly.
|
||||
@@ -1258,6 +1263,16 @@ public abstract class Editor extends JFrame implements RunnerListener {
|
||||
|
||||
public void showReference(String filename) {
|
||||
File file = new File(mode.getReferenceFolder(), filename);
|
||||
showReferenceFile(file);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Given the .html file, displays it in the default browser.
|
||||
*
|
||||
* @param file
|
||||
*/
|
||||
public void showReferenceFile(File file) {
|
||||
try {
|
||||
file = file.getCanonicalFile();
|
||||
} catch (IOException e) {
|
||||
|
||||
@@ -284,6 +284,16 @@ public class Library extends LocalContribution {
|
||||
}
|
||||
|
||||
|
||||
public boolean hasReference() {
|
||||
return referenceFile.exists();
|
||||
}
|
||||
|
||||
|
||||
public File getReferenceIndexFile() {
|
||||
return referenceFile;
|
||||
}
|
||||
|
||||
|
||||
public String getGroup() {
|
||||
return group;
|
||||
}
|
||||
|
||||
@@ -4,12 +4,17 @@ import java.awt.*;
|
||||
import java.awt.event.*;
|
||||
import java.beans.*;
|
||||
import java.io.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.border.*;
|
||||
import javax.swing.event.MenuEvent;
|
||||
import javax.swing.event.MenuListener;
|
||||
|
||||
import processing.app.*;
|
||||
import processing.app.Toolkit;
|
||||
import processing.app.contrib.ToolContribution;
|
||||
import processing.mode.java.runner.Runner;
|
||||
|
||||
|
||||
@@ -134,6 +139,100 @@ public class JavaEditor extends Editor {
|
||||
}
|
||||
});
|
||||
menu.add(item);
|
||||
|
||||
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) {
|
||||
boolean isCoreLibMenuItemAdded = false;
|
||||
boolean isContribLibMenuItemAdded = false;
|
||||
|
||||
// Adding this in case references are included in a core library,
|
||||
// or other core libraries are incuded in future
|
||||
isCoreLibMenuItemAdded = addLibReferencesToSubMenu(mode.coreLibraries, libRefSubmenu);
|
||||
|
||||
if (isCoreLibMenuItemAdded && !mode.contribLibraries.isEmpty())
|
||||
libRefSubmenu.addSeparator();
|
||||
|
||||
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);
|
||||
}
|
||||
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);
|
||||
}
|
||||
});
|
||||
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() {
|
||||
|
||||
@Override
|
||||
public void menuSelected(MenuEvent e) {
|
||||
boolean isCoreToolMenuItemAdded = false;
|
||||
boolean isContribToolMenuItemAdded = false;
|
||||
|
||||
// Adding this in in case a reference folder is added for MovieMaker, or in case
|
||||
// other core tools are introduced later
|
||||
isCoreToolMenuItemAdded = addToolReferencesToSubMenu(getCoreTools(), toolRefSubmenu);
|
||||
|
||||
if (isCoreToolMenuItemAdded && !contribTools.isEmpty())
|
||||
toolRefSubmenu.addSeparator();
|
||||
|
||||
isContribToolMenuItemAdded = addToolReferencesToSubMenu(contribTools, toolRefSubmenu);
|
||||
|
||||
if (!isContribToolMenuItemAdded && !isCoreToolMenuItemAdded) {
|
||||
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 (!isContribToolMenuItemAdded && !contribTools.isEmpty()) {
|
||||
// re-populate the menu to get rid of terminal separator
|
||||
toolRefSubmenu.removeAll();
|
||||
addToolReferencesToSubMenu(getCoreTools(), toolRefSubmenu);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void menuDeselected(MenuEvent e) {
|
||||
toolRefSubmenu.removeAll();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void menuCanceled(MenuEvent e) {
|
||||
menuDeselected(e);
|
||||
}
|
||||
});
|
||||
menu.add(toolRefSubmenu);
|
||||
|
||||
menu.addSeparator();
|
||||
item = new JMenuItem(Language.text("menu.help.online"));
|
||||
@@ -184,6 +283,54 @@ public class JavaEditor extends Editor {
|
||||
}
|
||||
|
||||
|
||||
//. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
|
||||
|
||||
|
||||
private boolean addLibReferencesToSubMenu(ArrayList<Library> libsList, JMenu subMenu) {
|
||||
boolean isItemAdded = false;
|
||||
Iterator<Library> iter = libsList.iterator();
|
||||
while (iter.hasNext()) {
|
||||
final Library libContrib = iter.next();
|
||||
if (libContrib.hasReference()) {
|
||||
JMenuItem libRefItem = new JMenuItem(libContrib.getName());
|
||||
libRefItem.addActionListener(new ActionListener() {
|
||||
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent arg0) {
|
||||
showReferenceFile(libContrib.getReferenceIndexFile());
|
||||
}
|
||||
});
|
||||
subMenu.add(libRefItem);
|
||||
isItemAdded = true;
|
||||
}
|
||||
}
|
||||
return isItemAdded;
|
||||
}
|
||||
|
||||
|
||||
private boolean addToolReferencesToSubMenu(ArrayList<ToolContribution> toolsList, JMenu subMenu) {
|
||||
boolean isItemAdded = false;
|
||||
Iterator<ToolContribution> iter = toolsList.iterator();
|
||||
while (iter.hasNext()) {
|
||||
final ToolContribution toolContrib = iter.next();
|
||||
final File toolRef = new File(toolContrib.getFolder(), "reference/index.html");
|
||||
if (toolRef.exists()) {
|
||||
JMenuItem libRefItem = new JMenuItem(toolContrib.getName());
|
||||
libRefItem.addActionListener(new ActionListener() {
|
||||
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent arg0) {
|
||||
showReferenceFile(toolRef);
|
||||
}
|
||||
});
|
||||
subMenu.add(libRefItem);
|
||||
isItemAdded = true;
|
||||
}
|
||||
}
|
||||
return isItemAdded;
|
||||
}
|
||||
|
||||
|
||||
// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
|
||||
|
||||
|
||||
|
||||
@@ -105,6 +105,9 @@ menu.help.about = About Processing
|
||||
menu.help.environment = Environment
|
||||
menu.help.reference = Reference
|
||||
menu.help.find_in_reference = Find in Reference
|
||||
menu.help.libraries_reference = Libraries Reference
|
||||
menu.help.tools_reference = Tools Reference
|
||||
menu.help.empty = (empty)
|
||||
menu.help.online = Online
|
||||
menu.help.getting_started = Getting Started
|
||||
menu.help.getting_started.url = http://processing.org/learning/gettingstarted/
|
||||
|
||||
Reference in New Issue
Block a user