Skip to content

Commit 29883d4

Browse files
committed
Added Tools, Libs reference menus to Help
Including support for core tools & libs if reqd later
1 parent b5096c4 commit 29883d4

4 files changed

Lines changed: 175 additions & 0 deletions

File tree

app/src/processing/app/Editor.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,11 @@ public void windowGainedFocus(WindowEvent e) {
286286
}
287287

288288

289+
protected ArrayList<ToolContribution> getCoreTools() {
290+
return coreTools;
291+
}
292+
293+
289294
/**
290295
* Broken out to get modes working for GSOC, but this needs a longer-term
291296
* solution where the listeners are handled properly.
@@ -1258,6 +1263,16 @@ public void actionPerformed(ActionEvent e) {
12581263

12591264
public void showReference(String filename) {
12601265
File file = new File(mode.getReferenceFolder(), filename);
1266+
showReferenceFile(file);
1267+
}
1268+
1269+
1270+
/**
1271+
* Given the .html file, displays it in the default browser.
1272+
*
1273+
* @param file
1274+
*/
1275+
public void showReferenceFile(File file) {
12611276
try {
12621277
file = file.getCanonicalFile();
12631278
} catch (IOException e) {

app/src/processing/app/Library.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,16 @@ public File getExamplesFolder() {
284284
}
285285

286286

287+
public boolean hasReference() {
288+
return referenceFile.exists();
289+
}
290+
291+
292+
public File getReferenceIndexFile() {
293+
return referenceFile;
294+
}
295+
296+
287297
public String getGroup() {
288298
return group;
289299
}

app/src/processing/mode/java/JavaEditor.java

Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,17 @@
44
import java.awt.event.*;
55
import java.beans.*;
66
import java.io.*;
7+
import java.util.ArrayList;
8+
import java.util.Iterator;
79

810
import javax.swing.*;
911
import javax.swing.border.*;
12+
import javax.swing.event.MenuEvent;
13+
import javax.swing.event.MenuListener;
1014

1115
import processing.app.*;
1216
import processing.app.Toolkit;
17+
import processing.app.contrib.ToolContribution;
1318
import processing.mode.java.runner.Runner;
1419

1520

@@ -134,6 +139,100 @@ public void actionPerformed(ActionEvent e) {
134139
}
135140
});
136141
menu.add(item);
142+
143+
menu.addSeparator();
144+
145+
final JMenu libRefSubmenu = new JMenu(Language.text("menu.help.libraries_reference"));
146+
// Populate only when sub-menu is opened, to avoid having spurious menu
147+
// options if a library is deleted, or a missing menu option if a library is added
148+
libRefSubmenu.addMenuListener(new MenuListener() {
149+
150+
@Override
151+
public void menuSelected(MenuEvent e) {
152+
boolean isCoreLibMenuItemAdded = false;
153+
boolean isContribLibMenuItemAdded = false;
154+
155+
// Adding this in case references are included in a core library,
156+
// or other core libraries are incuded in future
157+
isCoreLibMenuItemAdded = addLibReferencesToSubMenu(mode.coreLibraries, libRefSubmenu);
158+
159+
if (isCoreLibMenuItemAdded && !mode.contribLibraries.isEmpty())
160+
libRefSubmenu.addSeparator();
161+
162+
isContribLibMenuItemAdded = addLibReferencesToSubMenu(mode.contribLibraries, libRefSubmenu);
163+
164+
if (!isContribLibMenuItemAdded && !isCoreLibMenuItemAdded) {
165+
JMenuItem emptyMenuItem = new JMenuItem(Language.text("menu.help.empty"));
166+
emptyMenuItem.setEnabled(false);
167+
emptyMenuItem.setFocusable(false);
168+
emptyMenuItem.setFocusPainted(false);
169+
libRefSubmenu.add(emptyMenuItem);
170+
}
171+
else if (!isContribLibMenuItemAdded && !mode.coreLibraries.isEmpty()) {
172+
//re-populate the menu to get rid of terminal separator
173+
libRefSubmenu.removeAll();
174+
addLibReferencesToSubMenu(mode.coreLibraries, libRefSubmenu);
175+
}
176+
}
177+
178+
@Override
179+
public void menuDeselected(MenuEvent e) {
180+
libRefSubmenu.removeAll();
181+
}
182+
183+
@Override
184+
public void menuCanceled(MenuEvent e) {
185+
menuDeselected(e);
186+
}
187+
});
188+
menu.add(libRefSubmenu);
189+
190+
final JMenu toolRefSubmenu = new JMenu(Language.text("menu.help.tools_reference"));
191+
// Populate only when sub-menu is opened, to avoid having spurious menu
192+
// options if a tool is deleted, or a missing menu option if a library is added
193+
toolRefSubmenu.addMenuListener(new MenuListener() {
194+
195+
@Override
196+
public void menuSelected(MenuEvent e) {
197+
boolean isCoreToolMenuItemAdded = false;
198+
boolean isContribToolMenuItemAdded = false;
199+
200+
// Adding this in in case a reference folder is added for MovieMaker, or in case
201+
// other core tools are introduced later
202+
isCoreToolMenuItemAdded = addToolReferencesToSubMenu(getCoreTools(), toolRefSubmenu);
203+
204+
if (isCoreToolMenuItemAdded && !contribTools.isEmpty())
205+
toolRefSubmenu.addSeparator();
206+
207+
isContribToolMenuItemAdded = addToolReferencesToSubMenu(contribTools, toolRefSubmenu);
208+
209+
if (!isContribToolMenuItemAdded && !isCoreToolMenuItemAdded) {
210+
toolRefSubmenu.removeAll(); // in case a separator was added
211+
final JMenuItem emptyMenuItem = new JMenuItem(Language.text("menu.help.empty"));
212+
emptyMenuItem.setEnabled(false);
213+
emptyMenuItem.setBorderPainted(false);
214+
emptyMenuItem.setFocusable(false);
215+
emptyMenuItem.setFocusPainted(false);
216+
toolRefSubmenu.add(emptyMenuItem);
217+
}
218+
else if (!isContribToolMenuItemAdded && !contribTools.isEmpty()) {
219+
// re-populate the menu to get rid of terminal separator
220+
toolRefSubmenu.removeAll();
221+
addToolReferencesToSubMenu(getCoreTools(), toolRefSubmenu);
222+
}
223+
}
224+
225+
@Override
226+
public void menuDeselected(MenuEvent e) {
227+
toolRefSubmenu.removeAll();
228+
}
229+
230+
@Override
231+
public void menuCanceled(MenuEvent e) {
232+
menuDeselected(e);
233+
}
234+
});
235+
menu.add(toolRefSubmenu);
137236

138237
menu.addSeparator();
139238
item = new JMenuItem(Language.text("menu.help.online"));
@@ -184,6 +283,54 @@ public void actionPerformed(ActionEvent e) {
184283
}
185284

186285

286+
//. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
287+
288+
289+
private boolean addLibReferencesToSubMenu(ArrayList<Library> libsList, JMenu subMenu) {
290+
boolean isItemAdded = false;
291+
Iterator<Library> iter = libsList.iterator();
292+
while (iter.hasNext()) {
293+
final Library libContrib = iter.next();
294+
if (libContrib.hasReference()) {
295+
JMenuItem libRefItem = new JMenuItem(libContrib.getName());
296+
libRefItem.addActionListener(new ActionListener() {
297+
298+
@Override
299+
public void actionPerformed(ActionEvent arg0) {
300+
showReferenceFile(libContrib.getReferenceIndexFile());
301+
}
302+
});
303+
subMenu.add(libRefItem);
304+
isItemAdded = true;
305+
}
306+
}
307+
return isItemAdded;
308+
}
309+
310+
311+
private boolean addToolReferencesToSubMenu(ArrayList<ToolContribution> toolsList, JMenu subMenu) {
312+
boolean isItemAdded = false;
313+
Iterator<ToolContribution> iter = toolsList.iterator();
314+
while (iter.hasNext()) {
315+
final ToolContribution toolContrib = iter.next();
316+
final File toolRef = new File(toolContrib.getFolder(), "reference/index.html");
317+
if (toolRef.exists()) {
318+
JMenuItem libRefItem = new JMenuItem(toolContrib.getName());
319+
libRefItem.addActionListener(new ActionListener() {
320+
321+
@Override
322+
public void actionPerformed(ActionEvent arg0) {
323+
showReferenceFile(toolRef);
324+
}
325+
});
326+
subMenu.add(libRefItem);
327+
isItemAdded = true;
328+
}
329+
}
330+
return isItemAdded;
331+
}
332+
333+
187334
// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
188335

189336

build/shared/lib/languages/PDE.properties

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,9 @@ menu.help.about = About Processing
105105
menu.help.environment = Environment
106106
menu.help.reference = Reference
107107
menu.help.find_in_reference = Find in Reference
108+
menu.help.libraries_reference = Libraries Reference
109+
menu.help.tools_reference = Tools Reference
110+
menu.help.empty = (empty)
108111
menu.help.online = Online
109112
menu.help.getting_started = Getting Started
110113
menu.help.getting_started.url = http://processing.org/learning/gettingstarted/

0 commit comments

Comments
 (0)