Skip to content

Commit f3cbc3a

Browse files
committed
cleaning up javadoc for clarity, move function so it is not lost
1 parent 8d55fc8 commit f3cbc3a

File tree

1 file changed

+73
-49
lines changed

1 file changed

+73
-49
lines changed

app/src/processing/app/ui/Toolkit.java

Lines changed: 73 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -157,8 +157,8 @@ static public KeyStroke getKeyStrokeExt(String base) {
157157

158158
/**
159159
* Create a menu item and set its KeyStroke by name (so it can be stored
160-
* in the language settings or the preferences). Syntax is here:
161-
* https://docs.oracle.com/javase/8/docs/api/javax/swing/KeyStroke.html#getKeyStroke-java.lang.String-
160+
* in the language settings or the preferences). Syntax is .
161+
* <a href="https://docs.oracle.com/javase/8/docs/api/javax/swing/KeyStroke.html#getKeyStroke-java.lang.String-">here</a>.
162162
*/
163163
static public JMenuItem newJMenuItemExt(String base) {
164164
JMenuItem menuItem = new JMenuItem(Language.text(base));
@@ -248,40 +248,79 @@ static public void addDisabledItem(JMenu menu, String title) {
248248

249249

250250
/**
251-
* Removes all mnemonics, then sets a mnemonic for each menu and menu item
252-
* recursively by these rules:
251+
* Apply an Action from something else (i.e. a JMenuItem) to a JButton.
252+
* Swing is so absof*ckinglutely convoluted sometimes. Do we really need
253+
* half a dozen lines of boilerplate to apply a key shortcut to a button?
254+
*/
255+
static public void applyAction(Action action, JButton button) {
256+
button.setAction(action);
257+
// use an arbitrary but unique name
258+
String name = String.valueOf(action.hashCode());
259+
button.getActionMap().put(name, action);
260+
button.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
261+
.put((KeyStroke) action.getValue(Action.ACCELERATOR_KEY), name);
262+
}
263+
264+
265+
/**
266+
* Removes all mnemonics, then sets a mnemonic for each menu and menu
267+
* item recursively by these rules:
253268
* <ol>
254269
* <li> It tries to assign one of <a href="http://techbase.kde.org/Projects/Usability/HIG/Keyboard_Accelerators">
255270
* KDE's defaults</a>.</li>
256-
* <li> Failing that, it loops through the first letter of each word, where a word
257-
* is a block of Unicode "alphabetical" chars, looking for an upper-case ASCII mnemonic
258-
* that is not taken. This is to try to be relevant, by using a letter well-associated
259-
* with the command. (MS guidelines) </li>
260-
* <li> Ditto, but with lowercase. </li>
261-
* <li> Next, it tries the second ASCII character, if its width &gt;= half the width of
262-
* 'A'. </li>
263-
* <li> If the first letters are all taken/non-ASCII, then it loops through the
264-
* ASCII letters in the item, widest to narrowest, seeing if any of them is not taken.
265-
* To improve readability, it discriminates against descenders (qypgj), imagining they
266-
* have 2/3 their actual width. (MS guidelines: avoid descenders). It also discriminates
267-
* against vowels, imagining they have 2/3 their actual width. (MS and Gnome guidelines:
268-
* avoid vowels.) </li>
269-
* <li>Failing that, it will loop left-to-right for an available digit. This is a last
270-
* resort because the normal setMnemonic dislikes them.</li>
271-
* <li> If that doesn't work, it doesn't assign a mnemonic. </li>
271+
* <li>
272+
* Failing that, it loops through the first letter of each word,
273+
* where a word is a block of Unicode "alphabetical" chars, looking
274+
* for an upper-case ASCII mnemonic that is not taken.
275+
* This is to try to be relevant, by using a letter well-associated
276+
* with the command. (MS guidelines)
277+
* </li>
278+
* <li>
279+
* Ditto, but with lowercase.
280+
* </li>
281+
* <li>
282+
* Next, it tries the second ASCII character, if its width
283+
* &gt;= half the width of 'A'.
284+
* </li>
285+
* <li>
286+
* If the first letters are all taken/non-ASCII, then it loops
287+
* through the ASCII letters in the item, widest to narrowest,
288+
* seeing if any of them is not taken. To improve readability,
289+
* it discriminates against descenders (qypgj), imagining they
290+
* have 2/3 their actual width. (MS guidelines: avoid descenders).
291+
* It also discriminates against vowels, imagining they have 2/3
292+
* their actual width. (MS and Gnome guidelines: avoid vowels.)
293+
* </li>
294+
* <li>
295+
* Failing that, it will loop left-to-right for an available digit.
296+
* This is a last resort because the normal setMnemonic dislikes them.
297+
* </li>
298+
* <li>
299+
* If that doesn't work, it doesn't assign a mnemonic.
300+
* </li>
272301
* </ol>
273302
*
274-
* As a special case, strings starting "sketchbook \u2192 " have that bit ignored
275-
* because otherwise the Recent menu looks awful. However, the name <tt>"sketchbook \u2192
276-
* Sketch"</tt>, for example, will have the 'S' of "Sketch" chosen, but the 's' of 'sketchbook
277-
* will get underlined.
278-
* No letter by an underscore will be assigned.
279-
* Disabled on Mac, per Apple guidelines.
280-
* <tt>menu</tt> may contain nulls.
303+
* Additional rules:
304+
* <ul>
305+
* <li>
306+
* As a special case, strings starting "sketchbook → " have that
307+
* bit ignored because otherwise the Recent menu looks awful.
308+
* </li>
309+
* <li>
310+
* However, the name <tt>"sketchbook → Sketch"</tt>,
311+
* for example, will have the 'S' of "Sketch" chosen,
312+
* but the 's' of 'sketchbook' will get underlined.
313+
* </li>
314+
* <li>
315+
* No letter by an underscore will be assigned.
316+
* </li>
317+
* <li>
318+
* Disabled on Mac, per Apple guidelines.
319+
* </li>
320+
* </ul>
281321
*
282-
* Author: George Bateman. Initial work Myer Nore.
283-
* @param menu
284-
* A menu, a list of menus or an array of menu items to set mnemonics for.
322+
* Written by George Bateman, with Initial work Myer Nore.
323+
* @param menu Menu items to set mnemonics for (null entries are ok)
285324
*/
286325
static public void setMenuMnemonics(JMenuItem... menu) {
287326
if (Platform.isMacOS()) return;
@@ -376,7 +415,7 @@ public int compare(Character ch1, Character ch2) {
376415
// The string can't be made lower-case as that would spoil
377416
// the width comparison.
378417
String cleanString = jmi.getText();
379-
if (cleanString.startsWith("sketchbook \u2192 "))
418+
if (cleanString.startsWith("sketchbook "))
380419
cleanString = cleanString.substring(13);
381420

382421
if (cleanString.length() == 0) continue;
@@ -521,21 +560,6 @@ static public int getMenuItemIndex(JMenu menu, JMenuItem item) {
521560
}
522561

523562

524-
/**
525-
* Apply an Action from something else (i.e. a JMenuItem) to a JButton.
526-
* Swing is so absof*ckinglutely convoluted sometimes. Do we really need
527-
* half a dozen lines of boilerplate to apply a key shortcut to a button?
528-
*/
529-
static public void applyAction(Action action, JButton button) {
530-
button.setAction(action);
531-
// use an arbitrary but unique name
532-
String name = String.valueOf(action.hashCode());
533-
button.getActionMap().put(name, action);
534-
button.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
535-
.put((KeyStroke) action.getValue(Action.ACCELERATOR_KEY), name);
536-
}
537-
538-
539563
// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
540564

541565

@@ -1219,9 +1243,9 @@ static public String getMonoFontName() {
12191243
/**
12201244
* Get the Font object of the default (built-in) monospaced font.
12211245
* As of 4.x, this is Source Code Pro and ships in lib/fonts because
1222-
* it looks like JDK 11 no longer has (supports?) a "fonts" subfolder
1223-
* (or at least, its cross-platform implementation is inconsistent).
1224-
* https://www.oracle.com/java/technologies/javase/11-relnote-issues.html#JDK-8191522
1246+
* it looks like JDK 11+ <a href="https://www.oracle.com/java/technologies/javase/11-relnote-issues.html#JDK-8191522">
1247+
* no longer supports</a> a "fonts" subfolder (or at least,
1248+
* its cross-platform implementation is inconsistent).
12251249
*/
12261250
static public Font getMonoFont(int size, int style) {
12271251
// Prior to 4.0 beta 9, we had a manual override for

0 commit comments

Comments
 (0)