1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-06-22 08:22:04 +03:00

Merge branch 'boards-cputype'

This commit is contained in:
Federico Fissore
2012-10-17 10:54:26 +02:00
3 changed files with 200 additions and 23 deletions

View File

@ -1107,15 +1107,17 @@ public class Base {
}
public void rebuildBoardsMenu(JMenu menu) {
public void rebuildBoardsMenu(JMenu boardsMenu, final JMenu cpuTypeMenu) {
String selPackage = Preferences.get("target_package");
String selPlatform = Preferences.get("target_platform");
String selBoard = Preferences.get("board");
menu.removeAll();
String selBoardContainer = Preferences.get("board_container");
boardsMenu.removeAll();
boolean first = true;
ButtonGroup group = new ButtonGroup();
ButtonGroup boardsButtonGroup = new ButtonGroup();
ButtonGroup cpuTypesButtonGroup = new ButtonGroup();
// Cycle through all packages
for (TargetPackage targetPackage : packages.values()) {
@ -1128,43 +1130,181 @@ public class Base {
// Add a title for each group of boards
if (!first)
menu.add(new JSeparator());
first = false;
boardsMenu.add(new JSeparator());
first = false;
JMenuItem separator = new JMenuItem(targetPlatform.getPreferences().get("name"));
separator.setEnabled(false);
menu.add(separator);
boardsMenu.add(separator);
// For every platform cycle through all boards
for (String board : targetPlatform.getOrderedBoards()) {
for (String boardID : targetPlatform.getOrderedBoards()) {
PreferencesMap boardAttributes = boards.get(boardID);
final String boardContainer = boardAttributes.get("container");
AbstractAction filterCPUTypeMenuAction = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
Preferences.set("board_container", (String) getValue("board_container"));
cpuTypeMenu.setEnabled(true);
for (int i = 0; i < cpuTypeMenu.getItemCount(); i++) {
JMenuItem cpuTypeMenuItem = cpuTypeMenu.getItem(i);
boolean visible = boardContainer.equals(cpuTypeMenuItem.getAction().getValue("board_container"));
cpuTypeMenuItem.setVisible(visible);
}
JMenuItem selectSelectedOrFirstVisibleMenuItem = selectVisibleSelectedOrFirstMenuItem(cpuTypeMenu);
selectSelectedOrFirstVisibleMenuItem.doClick();
}
};
filterCPUTypeMenuAction.putValue("board_container", boardContainer);
// Setup a menu item for the current board
String boardName = boards.get(board).get("name");
@SuppressWarnings("serial")
AbstractAction action = new AbstractAction(boardName) {
final AbstractAction selectBoardAction = new AbstractAction(boardAttributes.get("cpu")) {
public void actionPerformed(ActionEvent actionevent) {
Preferences.set("target_package", (String) getValue("package"));
Preferences.set("target_platform", (String) getValue("platform"));
Preferences.set("board", (String) getValue("board"));
onBoardOrPortChange();
Sketch.buildSettingChanged();
rebuildImportMenu(Editor.importMenu);
rebuildExamplesMenu(Editor.examplesMenu);
}
};
action.putValue("package", packageName);
action.putValue("platform", platformName);
action.putValue("board", board);
JMenuItem item = new JRadioButtonMenuItem(action);
if (packageName.equals(selPackage) &&
platformName.equals(selPlatform) && board.equals(selBoard)) {
item.setSelected(true);
selectBoardAction.putValue("package", packageName);
selectBoardAction.putValue("platform", platformName);
selectBoardAction.putValue("board", boardID);
selectBoardAction.putValue("board_container", boardContainer);
if (boardContainer != null) {
findOrCreateBoardContainerMenu(boardsMenu, boardsButtonGroup, boardContainer, filterCPUTypeMenuAction);
JMenuItem item = new JRadioButtonMenuItem(selectBoardAction);
cpuTypesButtonGroup.add(item);
cpuTypeMenu.add(item);
} else {
AbstractAction selectBoardWithoutContainerAction = new AbstractAction(boardAttributes.get("name")) {
@Override
public void actionPerformed(ActionEvent e) {
cpuTypeMenu.setEnabled(false);
Preferences.unset("board_container");
selectBoardAction.actionPerformed(e);
}
@Override
public Object getValue(String key) {
return selectBoardAction.getValue(key);
}
@Override
public void putValue(String key, Object newValue) {
selectBoardAction.putValue(key, newValue);
}
};
JMenuItem item = new JRadioButtonMenuItem(selectBoardWithoutContainerAction);
boardsButtonGroup.add(item);
boardsMenu.add(item);
}
group.add(item);
menu.add(item);
}
}
}
JMenuItem selectedBoardMenu = selectMenuItemByBoardContainer(boardsMenu, selBoardContainer);
if (selectedBoardMenu == null) {
selectedBoardMenu = selectMenuItemByBoardPackagePlatform(boardsMenu, selBoard, selPackage, selPlatform);
if (selectedBoardMenu == null) {
selectedBoardMenu = selectFirstEnabledMenuItem(boardsMenu);
}
}
selectedBoardMenu.doClick();
if (cpuTypeMenu.isEnabled()) {
JMenuItem selectedCPUTypeMenu;
if (selBoard == null) {
selectedCPUTypeMenu = selectFirstEnabledMenuItem(cpuTypeMenu);
} else {
selectedCPUTypeMenu = selectMenuItemByBoardPackagePlatform(cpuTypeMenu, selBoard, selPackage, selPlatform);
if (selectedCPUTypeMenu == null) {
selectedCPUTypeMenu = selectFirstEnabledMenuItem(cpuTypeMenu);
}
}
selectedCPUTypeMenu.doClick();
}
}
private static JMenuItem selectVisibleSelectedOrFirstMenuItem(JMenu menu) {
JMenuItem firstVisible = null;
for (int i = 0; i < menu.getItemCount(); i++) {
JMenuItem item = menu.getItem(i);
if (item != null && item.isVisible()) {
if (item.isSelected()) {
return item;
}
if (firstVisible == null) {
firstVisible = item;
}
}
}
if (firstVisible != null) {
return firstVisible;
}
throw new IllegalStateException("Menu has no enabled items");
}
private static JMenuItem selectFirstEnabledMenuItem(JMenu menu) {
for (int i = 0; i < menu.getItemCount(); i++) {
JMenuItem item = menu.getItem(i);
if (item != null && item.isEnabled()) {
return item;
}
}
throw new IllegalStateException("Menu has no enabled items");
}
private static JMenuItem selectMenuItemByBoardContainer(JMenu menu, String boardContainer) {
if (boardContainer == null) {
return null;
}
for (int i = 0; i < menu.getItemCount(); i++) {
JMenuItem item = menu.getItem(i);
if (item != null && item.getAction() != null && boardContainer.equals(item.getAction().getValue("board_container"))) {
return item;
}
}
return null;
}
private static JMenuItem selectMenuItemByBoardPackagePlatform(JMenu menu, String selBoard, String selPackage, String selPlatform) {
for (int i = 0; i < menu.getItemCount(); i++) {
JMenuItem item = menu.getItem(i);
if (item != null && item.getAction() != null && selBoard.equals(item.getAction().getValue("board"))
&& selPackage.equals(item.getAction().getValue("package")) && selPlatform.equals(item.getAction().getValue("platform"))) {
return item;
}
}
return null;
}
private JMenuItem findOrCreateBoardContainerMenu(JMenu boardsMenu, ButtonGroup boardsButtonGroup, String boardContainerName, AbstractAction boardMenuAction) {
for (int i = 0; i < boardsMenu.getItemCount(); i++ ) {
JMenuItem boardContainer = boardsMenu.getItem(i);
if (boardContainer != null && boardContainerName.equals(boardContainer.getText())) {
return boardContainer;
}
}
JMenuItem item = new JRadioButtonMenuItem(boardMenuAction);
item.setText(boardContainerName);
boardsButtonGroup.add(item);
boardsMenu.add(item);
return item;
}
public void rebuildProgrammerMenu(JMenu menu) {

View File

@ -97,6 +97,7 @@ public class Editor extends JFrame implements RunnerListener {
// actually used are determined by the preferences, which are shared)
static JMenu boardsMenu;
static JMenu serialMenu;
static JMenu cpuTypeMenu;
static SerialMenuListener serialMenuListener;
static SerialMonitor serialMonitor;
@ -179,7 +180,8 @@ public class Editor extends JFrame implements RunnerListener {
fileMenu.insert(examplesMenu, 3);
sketchMenu.insert(importMenu, 4);
toolsMenu.insert(boardsMenu, numTools);
toolsMenu.insert(serialMenu, numTools + 1);
toolsMenu.insert(cpuTypeMenu, numTools + 1);
toolsMenu.insert(serialMenu, numTools + 2);
}
// added for 1.0.5
@ -190,6 +192,7 @@ public class Editor extends JFrame implements RunnerListener {
fileMenu.remove(examplesMenu);
sketchMenu.remove(importMenu);
toolsMenu.remove(boardsMenu);
toolsMenu.remove(cpuTypeMenu);
toolsMenu.remove(serialMenu);
}
});
@ -680,12 +683,14 @@ public class Editor extends JFrame implements RunnerListener {
if (boardsMenu == null) {
boardsMenu = new JMenu(_("Board"));
base.rebuildBoardsMenu(boardsMenu);
cpuTypeMenu = new JMenu(_("CPUType"));
base.rebuildBoardsMenu(boardsMenu, cpuTypeMenu);
//Debug: rebuild imports
importMenu.removeAll();
base.rebuildImportMenu(importMenu);
}
menu.add(boardsMenu);
menu.add(cpuTypeMenu);
if (serialMenuListener == null)
serialMenuListener = new SerialMenuListener();