1
0
mirror of https://github.com/arduino/Arduino.git synced 2025-01-21 10:52:14 +01:00

Handle nested submenus of the Tools menu

There is some code that, for each submenu under Tools, shows the
selected item in the label of the submenu itself (e.g. before opening
the submenu). This was done whenever the Tools menu is opened and
iterated over all the items in the submenu to identify the s

Previously, this code only looked at direct children of the submenu.
Now, this code also looks through submenus recursively, to keep the code
working even when items are divided over sub-submenus.

This makes a small behaviour change: previously, the first selected item
with a non-zero label was used. Now, the first selected item is used,
which makes the code a bit cleaner. I cannot quickly see any case where
the first selected item would have an empty text (and even more that
there is *another* selected item), so this check seems unnecessary. If
this case would occur nonetheless, it would only mean the selected item
is not displayed in the tools menu, nothing would otherwise break.
This commit is contained in:
Matthijs Kooijman 2019-09-19 19:31:58 +02:00 committed by Cristian Maglie
parent 6c7d1042a9
commit 7c4205b412

View File

@ -761,6 +761,20 @@ public class Editor extends JFrame implements RunnerListener {
toolsMenu.add(item);
toolsMenu.addMenuListener(new StubMenuListener() {
public JMenuItem getSelectedItemRecursive(JMenu menu) {
int count = menu.getItemCount();
for (int i=0; i < count; i++) {
JMenuItem item = menu.getItem(i);
if ((item instanceof JMenu))
item = getSelectedItemRecursive((JMenu)item);
if (item != null && item.isSelected())
return item;
}
return null;
}
public void menuSelected(MenuEvent e) {
//System.out.println("Tools menu selected.");
populatePortMenu();
@ -772,15 +786,9 @@ public class Editor extends JFrame implements RunnerListener {
String basename = name;
int index = name.indexOf(':');
if (index > 0) basename = name.substring(0, index);
String sel = null;
int count = menu.getItemCount();
for (int i=0; i < count; i++) {
JMenuItem item = menu.getItem(i);
if (item != null && item.isSelected()) {
sel = item.getText();
if (sel != null) break;
}
}
JMenuItem item = getSelectedItemRecursive(menu);
String sel = item != null ? item.getText() : null;
if (sel == null) {
if (!name.equals(basename)) menu.setText(basename);
} else {