Skip to content

Commit bf1275a

Browse files
author
Federico Fissore
committed
Rebuilding programmers menu after installing additional package with boards manager. Fixes #3359
1 parent 3bc9308 commit bf1275a

File tree

2 files changed

+23
-9
lines changed

2 files changed

+23
-9
lines changed

app/src/processing/app/Base.java

+16-6
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ public boolean apply(UserLibrary library) {
118118
// actually used are determined by the preferences, which are shared)
119119
private List<JMenu> boardsCustomMenus;
120120
private volatile Action openBoardsManager;
121+
private List<JMenuItem> programmerMenus;
121122

122123
private final PdeKeywords pdeKeywords;
123124
private final List<JMenuItem> recentSketchesMenuItems;
@@ -299,6 +300,7 @@ public Base(String[] args) throws Exception {
299300
BaseNoGui.initPackages();
300301
splashScreenHelper.splashText(_("Preparing boards..."));
301302
rebuildBoardsMenu();
303+
rebuildProgrammerMenu();
302304

303305
// Setup board-dependent variables.
304306
onBoardOrPortChange();
@@ -1275,6 +1277,7 @@ private void openManageLibrariesDialog() {
12751277
protected void onIndexesUpdated() throws Exception {
12761278
BaseNoGui.initPackages();
12771279
rebuildBoardsMenu();
1280+
rebuildProgrammerMenu();
12781281
onBoardOrPortChange();
12791282
setIndexer(BaseNoGui.librariesIndexer);
12801283
}
@@ -1298,6 +1301,7 @@ private void openInstallBoardDialog(final String filterText) throws Exception {
12981301
protected void onIndexesUpdated() throws Exception {
12991302
BaseNoGui.initPackages();
13001303
rebuildBoardsMenu();
1304+
rebuildProgrammerMenu();
13011305
setIndexer(BaseNoGui.indexer);
13021306
if (StringUtils.isNotEmpty(filterText)) {
13031307
setFilterText(filterText);
@@ -1313,6 +1317,7 @@ protected void onIndexesUpdated() throws Exception {
13131317
// Reload all boards (that may have been installed/updated/removed)
13141318
BaseNoGui.initPackages();
13151319
rebuildBoardsMenu();
1320+
rebuildProgrammerMenu();
13161321
onBoardOrPortChange();
13171322
}
13181323

@@ -1515,6 +1520,10 @@ private JMenu getBoardCustomMenu(String label) throws Exception {
15151520
throw new Exception("Custom menu not found!");
15161521
}
15171522

1523+
public List<JMenuItem> getProgrammerMenus() {
1524+
return programmerMenus;
1525+
}
1526+
15181527
private static JMenuItem selectVisibleSelectedOrFirstMenuItem(JMenu menu) {
15191528
JMenuItem firstVisible = null;
15201529
for (int i = 0; i < menu.getItemCount(); i++) {
@@ -1546,27 +1555,28 @@ private static JMenuItem selectFirstEnabledMenuItem(JMenu menu) {
15461555
throw new IllegalStateException("Menu has no enabled items");
15471556
}
15481557

1549-
public void rebuildProgrammerMenu(JMenu menu) {
1550-
menu.removeAll();
1558+
public void rebuildProgrammerMenu() {
1559+
programmerMenus = new LinkedList<>();
1560+
15511561
ButtonGroup group = new ButtonGroup();
15521562
for (TargetPackage targetPackage : BaseNoGui.packages.values()) {
15531563
for (TargetPlatform targetPlatform : targetPackage.platforms()) {
15541564
for (String programmer : targetPlatform.getProgrammers().keySet()) {
15551565
String id = targetPackage.getId() + ":" + programmer;
15561566

15571567
@SuppressWarnings("serial")
1558-
AbstractAction action = new AbstractAction(targetPlatform
1559-
.getProgrammer(programmer).get("name")) {
1568+
AbstractAction action = new AbstractAction(targetPlatform.getProgrammer(programmer).get("name")) {
15601569
public void actionPerformed(ActionEvent actionevent) {
15611570
PreferencesData.set("programmer", "" + getValue("id"));
15621571
}
15631572
};
15641573
action.putValue("id", id);
15651574
JMenuItem item = new JRadioButtonMenuItem(action);
1566-
if (PreferencesData.get("programmer").equals(id))
1575+
if (PreferencesData.get("programmer").equals(id)) {
15671576
item.setSelected(true);
1577+
}
15681578
group.add(item);
1569-
menu.add(item);
1579+
programmerMenus.add(item);
15701580
}
15711581
}
15721582
}

app/src/processing/app/Editor.java

+7-3
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ public class Editor extends JFrame implements RunnerListener {
7474

7575
private final Platform platform;
7676
private JMenu recentSketchesMenu;
77+
private JMenu programmersMenu;
7778

7879
private static class ShouldSaveIfModified implements Predicate<Sketch> {
7980

@@ -563,6 +564,8 @@ public void menuSelected(MenuEvent e) {
563564
if (!components.contains(portMenu)) {
564565
toolsMenu.insert(portMenu, numTools + offset);
565566
}
567+
programmersMenu.removeAll();
568+
base.getProgrammerMenus().forEach(programmersMenu::add);
566569
toolsMenu.revalidate();
567570
validate();
568571
}
@@ -802,9 +805,10 @@ private JMenu buildToolsMenu() {
802805
toolsMenu.add(portMenu);
803806
toolsMenu.addSeparator();
804807

805-
JMenu programmerMenu = new JMenu(_("Programmer"));
806-
base.rebuildProgrammerMenu(programmerMenu);
807-
toolsMenu.add(programmerMenu);
808+
base.rebuildProgrammerMenu();
809+
programmersMenu = new JMenu(_("Programmer"));
810+
base.getProgrammerMenus().stream().forEach(programmersMenu::add);
811+
toolsMenu.add(programmersMenu);
808812

809813
item = new JMenuItem(_("Burn Bootloader"));
810814
item.addActionListener(e -> handleBurnBootloader());

0 commit comments

Comments
 (0)