Added Tools, Libs reference menus to Help

Including support for core tools & libs if reqd later
This commit is contained in:
Joel Moniz
2014-08-16 17:33:30 +05:30
committed by joelmoniz
parent 686d4729d6
commit 40c365af93
4 changed files with 175 additions and 0 deletions
+15
View File
@@ -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) {
+10
View File
@@ -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/