Rebuilding programmers menu after installing additional package with boards manager. Fixes #3359

This commit is contained in:
Federico Fissore 2015-06-22 15:17:28 +02:00
parent 3bc9308abc
commit bf1275a8a3
2 changed files with 23 additions and 9 deletions

View File

@ -118,6 +118,7 @@ public class Base {
// actually used are determined by the preferences, which are shared) // actually used are determined by the preferences, which are shared)
private List<JMenu> boardsCustomMenus; private List<JMenu> boardsCustomMenus;
private volatile Action openBoardsManager; private volatile Action openBoardsManager;
private List<JMenuItem> programmerMenus;
private final PdeKeywords pdeKeywords; private final PdeKeywords pdeKeywords;
private final List<JMenuItem> recentSketchesMenuItems; private final List<JMenuItem> recentSketchesMenuItems;
@ -299,6 +300,7 @@ public class Base {
BaseNoGui.initPackages(); BaseNoGui.initPackages();
splashScreenHelper.splashText(_("Preparing boards...")); splashScreenHelper.splashText(_("Preparing boards..."));
rebuildBoardsMenu(); rebuildBoardsMenu();
rebuildProgrammerMenu();
// Setup board-dependent variables. // Setup board-dependent variables.
onBoardOrPortChange(); onBoardOrPortChange();
@ -1275,6 +1277,7 @@ public class Base {
protected void onIndexesUpdated() throws Exception { protected void onIndexesUpdated() throws Exception {
BaseNoGui.initPackages(); BaseNoGui.initPackages();
rebuildBoardsMenu(); rebuildBoardsMenu();
rebuildProgrammerMenu();
onBoardOrPortChange(); onBoardOrPortChange();
setIndexer(BaseNoGui.librariesIndexer); setIndexer(BaseNoGui.librariesIndexer);
} }
@ -1298,6 +1301,7 @@ public class Base {
protected void onIndexesUpdated() throws Exception { protected void onIndexesUpdated() throws Exception {
BaseNoGui.initPackages(); BaseNoGui.initPackages();
rebuildBoardsMenu(); rebuildBoardsMenu();
rebuildProgrammerMenu();
setIndexer(BaseNoGui.indexer); setIndexer(BaseNoGui.indexer);
if (StringUtils.isNotEmpty(filterText)) { if (StringUtils.isNotEmpty(filterText)) {
setFilterText(filterText); setFilterText(filterText);
@ -1313,6 +1317,7 @@ public class Base {
// Reload all boards (that may have been installed/updated/removed) // Reload all boards (that may have been installed/updated/removed)
BaseNoGui.initPackages(); BaseNoGui.initPackages();
rebuildBoardsMenu(); rebuildBoardsMenu();
rebuildProgrammerMenu();
onBoardOrPortChange(); onBoardOrPortChange();
} }
@ -1515,6 +1520,10 @@ public class Base {
throw new Exception("Custom menu not found!"); throw new Exception("Custom menu not found!");
} }
public List<JMenuItem> getProgrammerMenus() {
return programmerMenus;
}
private static JMenuItem selectVisibleSelectedOrFirstMenuItem(JMenu menu) { private static JMenuItem selectVisibleSelectedOrFirstMenuItem(JMenu menu) {
JMenuItem firstVisible = null; JMenuItem firstVisible = null;
for (int i = 0; i < menu.getItemCount(); i++) { for (int i = 0; i < menu.getItemCount(); i++) {
@ -1546,8 +1555,9 @@ public class Base {
throw new IllegalStateException("Menu has no enabled items"); throw new IllegalStateException("Menu has no enabled items");
} }
public void rebuildProgrammerMenu(JMenu menu) { public void rebuildProgrammerMenu() {
menu.removeAll(); programmerMenus = new LinkedList<>();
ButtonGroup group = new ButtonGroup(); ButtonGroup group = new ButtonGroup();
for (TargetPackage targetPackage : BaseNoGui.packages.values()) { for (TargetPackage targetPackage : BaseNoGui.packages.values()) {
for (TargetPlatform targetPlatform : targetPackage.platforms()) { for (TargetPlatform targetPlatform : targetPackage.platforms()) {
@ -1555,18 +1565,18 @@ public class Base {
String id = targetPackage.getId() + ":" + programmer; String id = targetPackage.getId() + ":" + programmer;
@SuppressWarnings("serial") @SuppressWarnings("serial")
AbstractAction action = new AbstractAction(targetPlatform AbstractAction action = new AbstractAction(targetPlatform.getProgrammer(programmer).get("name")) {
.getProgrammer(programmer).get("name")) {
public void actionPerformed(ActionEvent actionevent) { public void actionPerformed(ActionEvent actionevent) {
PreferencesData.set("programmer", "" + getValue("id")); PreferencesData.set("programmer", "" + getValue("id"));
} }
}; };
action.putValue("id", id); action.putValue("id", id);
JMenuItem item = new JRadioButtonMenuItem(action); JMenuItem item = new JRadioButtonMenuItem(action);
if (PreferencesData.get("programmer").equals(id)) if (PreferencesData.get("programmer").equals(id)) {
item.setSelected(true); item.setSelected(true);
}
group.add(item); group.add(item);
menu.add(item); programmerMenus.add(item);
} }
} }
} }

View File

@ -74,6 +74,7 @@ public class Editor extends JFrame implements RunnerListener {
private final Platform platform; private final Platform platform;
private JMenu recentSketchesMenu; private JMenu recentSketchesMenu;
private JMenu programmersMenu;
private static class ShouldSaveIfModified implements Predicate<Sketch> { private static class ShouldSaveIfModified implements Predicate<Sketch> {
@ -563,6 +564,8 @@ public class Editor extends JFrame implements RunnerListener {
if (!components.contains(portMenu)) { if (!components.contains(portMenu)) {
toolsMenu.insert(portMenu, numTools + offset); toolsMenu.insert(portMenu, numTools + offset);
} }
programmersMenu.removeAll();
base.getProgrammerMenus().forEach(programmersMenu::add);
toolsMenu.revalidate(); toolsMenu.revalidate();
validate(); validate();
} }
@ -802,9 +805,10 @@ public class Editor extends JFrame implements RunnerListener {
toolsMenu.add(portMenu); toolsMenu.add(portMenu);
toolsMenu.addSeparator(); toolsMenu.addSeparator();
JMenu programmerMenu = new JMenu(_("Programmer")); base.rebuildProgrammerMenu();
base.rebuildProgrammerMenu(programmerMenu); programmersMenu = new JMenu(_("Programmer"));
toolsMenu.add(programmerMenu); base.getProgrammerMenus().stream().forEach(programmersMenu::add);
toolsMenu.add(programmersMenu);
item = new JMenuItem(_("Burn Bootloader")); item = new JMenuItem(_("Burn Bootloader"));
item.addActionListener(e -> handleBurnBootloader()); item.addActionListener(e -> handleBurnBootloader());