diff --git a/app/src/processing/app/Base.java b/app/src/processing/app/Base.java index ec171fe6a..69255abfd 100644 --- a/app/src/processing/app/Base.java +++ b/app/src/processing/app/Base.java @@ -1017,22 +1017,28 @@ public class Base { } - public void rebuildBurnBootloaderMenu(JMenu menu) { - //System.out.println("rebuilding burn bootloader menu"); + public void rebuildProgrammerMenu(JMenu menu) { + //System.out.println("rebuilding programmer menu"); menu.removeAll(); + ButtonGroup group = new ButtonGroup(); for (Target target : targetsTable.values()) { for (String programmer : target.getProgrammers().keySet()) { AbstractAction action = new AbstractAction( - "w/ " + target.getProgrammers().get(programmer).get("name")) { + target.getProgrammers().get(programmer).get("name")) { public void actionPerformed(ActionEvent actionevent) { - activeEditor.handleBurnBootloader((String) getValue("target"), - (String) getValue("programmer")); + Preferences.set("programmer", getValue("target") + ":" + + getValue("programmer")); } }; action.putValue("target", target.getName()); action.putValue("programmer", programmer); - JMenuItem item = new JMenuItem(action); + JMenuItem item = new JRadioButtonMenuItem(action); + if (Preferences.get("programmer").equals(target.getName() + ":" + + programmer)) { + item.setSelected(true); + } + group.add(item); menu.add(item); } } diff --git a/app/src/processing/app/Editor.java b/app/src/processing/app/Editor.java index 5ee2e4cc0..cd45ce3d2 100644 --- a/app/src/processing/app/Editor.java +++ b/app/src/processing/app/Editor.java @@ -693,12 +693,20 @@ public class Editor extends JFrame implements RunnerListener { serialMenu = new JMenu("Serial Port"); populateSerialMenu(); menu.add(serialMenu); - + menu.addSeparator(); + + JMenu programmerMenu = new JMenu("Programmer"); + base.rebuildProgrammerMenu(programmerMenu); + menu.add(programmerMenu); - JMenu bootloaderMenu = new JMenu("Burn Bootloader"); - base.rebuildBurnBootloaderMenu(bootloaderMenu); - menu.add(bootloaderMenu); + item = new JMenuItem("Burn Bootloader"); + item.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + handleBurnBootloader(); + } + }); + menu.add(item); menu.addMenuListener(new MenuListener() { public void menuCanceled(MenuEvent e) {} @@ -989,8 +997,8 @@ public class Editor extends JFrame implements RunnerListener { //serialMenu.addSeparator(); //serialMenu.add(item); } - - + + protected JMenu buildHelpMenu() { // To deal with a Mac OS X 10.5 bug, add an extra space after the name // so that the OS doesn't try to insert its slow help menu. @@ -2440,14 +2448,14 @@ public class Editor extends JFrame implements RunnerListener { } - protected void handleBurnBootloader(final String target, final String programmer) { + protected void handleBurnBootloader() { console.clear(); statusNotice("Burning bootloader to I/O Board (this may take a minute)..."); SwingUtilities.invokeLater(new Runnable() { public void run() { try { Uploader uploader = new AvrdudeUploader(); - if (uploader.burnBootloader(target, programmer)) { + if (uploader.burnBootloader()) { statusNotice("Done burning bootloader."); } else { statusError("Error while burning bootloader."); diff --git a/app/src/processing/app/debug/AvrdudeUploader.java b/app/src/processing/app/debug/AvrdudeUploader.java index 97ef91a20..77daebdc4 100755 --- a/app/src/processing/app/debug/AvrdudeUploader.java +++ b/app/src/processing/app/debug/AvrdudeUploader.java @@ -96,8 +96,14 @@ public class AvrdudeUploader extends Uploader { return avrdude(commandDownloader); } - public boolean burnBootloader(String targetName, String programmer) throws RunnerException { - return burnBootloader(getProgrammerCommands(Base.targetsTable.get(targetName), programmer)); + public boolean burnBootloader() throws RunnerException { + String programmer = Preferences.get("programmer"); + Target target = Base.getTarget(); + if (programmer.indexOf(":") != -1) { + target = Base.targetsTable.get(programmer.substring(0, programmer.indexOf(":"))); + programmer = programmer.substring(programmer.indexOf(":") + 1); + } + return burnBootloader(getProgrammerCommands(target, programmer)); } private Collection getProgrammerCommands(Target target, String programmer) { diff --git a/app/src/processing/app/debug/Uploader.java b/app/src/processing/app/debug/Uploader.java index 16e3d33d8..b79509179 100755 --- a/app/src/processing/app/debug/Uploader.java +++ b/app/src/processing/app/debug/Uploader.java @@ -67,7 +67,7 @@ public abstract class Uploader implements MessageConsumer { public abstract boolean uploadUsingPreferences(String buildPath, String className, boolean verbose) throws RunnerException, SerialException; - public abstract boolean burnBootloader(String target, String programmer) throws RunnerException; + public abstract boolean burnBootloader() throws RunnerException; protected void flushSerialBuffer() throws RunnerException, SerialException { // Cleanup the serial buffer diff --git a/build/shared/lib/preferences.txt b/build/shared/lib/preferences.txt index fc74866a3..bca71bfd9 100755 --- a/build/shared/lib/preferences.txt +++ b/build/shared/lib/preferences.txt @@ -237,9 +237,11 @@ run.present.exclusive = false run.present.exclusive.macosx = true # ARDUINO PREFERENCES -board = atmega328 +board = uno target = arduino +programmer = arduino:avrispmkii + upload.using = bootloader serial.port=COM1