Skip to content

Commit f45c534

Browse files
sandeepmistryfacchinm
authored andcommitted
Select (first) target board when port is selected and has known board
1 parent 4113306 commit f45c534

File tree

7 files changed

+67
-11
lines changed

7 files changed

+67
-11
lines changed

app/src/cc/arduino/view/preferences/Preferences.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ private void initComponents() {
134134
verifyUploadBox = new javax.swing.JCheckBox();
135135
externalEditorBox = new javax.swing.JCheckBox();
136136
cacheCompiledCore = new javax.swing.JCheckBox();
137+
autoselectBoard = new javax.swing.JCheckBox();
137138
checkUpdatesBox = new javax.swing.JCheckBox();
138139
updateExtensionBox = new javax.swing.JCheckBox();
139140
saveVerifyUploadBox = new javax.swing.JCheckBox();
@@ -284,6 +285,9 @@ public void mouseEntered(java.awt.event.MouseEvent evt) {
284285
cacheCompiledCore.setText(tr("Aggressively cache compiled core"));
285286
checkboxesContainer.add(cacheCompiledCore);
286287

288+
autoselectBoard.setText(tr("Automatically use the correct target when selecting a known serial port"));
289+
checkboxesContainer.add(autoselectBoard);
290+
287291
checkUpdatesBox.setText(tr("Check for updates on startup"));
288292
checkboxesContainer.add(checkUpdatesBox);
289293

@@ -736,6 +740,7 @@ private void autoScaleCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//
736740
private javax.swing.JButton extendedAdditionalUrlFieldWindow;
737741
private javax.swing.JCheckBox externalEditorBox;
738742
private javax.swing.JCheckBox cacheCompiledCore;
743+
private javax.swing.JCheckBox autoselectBoard;
739744
private javax.swing.JTextField fontSizeField;
740745
private javax.swing.JLabel fontSizeLabel;
741746
private javax.swing.JLabel jLabel1;
@@ -843,6 +848,8 @@ private void savePreferencesData() {
843848

844849
PreferencesData.setBoolean("compiler.cache_core", cacheCompiledCore.isSelected());
845850

851+
PreferencesData.setBoolean("editor.autoselectboard", autoselectBoard.isSelected());
852+
846853
PreferencesData.setBoolean("update.check", checkUpdatesBox.isSelected());
847854

848855
PreferencesData.setBoolean("editor.update_extension", updateExtensionBox.isSelected());
@@ -917,6 +924,8 @@ private void showPreferencesData() {
917924

918925
cacheCompiledCore.setSelected(PreferencesData.get("compiler.cache_core") == null || PreferencesData.getBoolean("compiler.cache_core"));
919926

927+
autoselectBoard.setSelected(PreferencesData.getBoolean("editor.autoselectboard"));
928+
920929
checkUpdatesBox.setSelected(PreferencesData.getBoolean("update.check"));
921930

922931
updateExtensionBox.setSelected(PreferencesData.get("editor.update_extension") == null || PreferencesData.getBoolean("editor.update_extension"));

app/src/processing/app/Base.java

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,8 @@ public class Base {
116116
// int editorCount;
117117
List<Editor> editors = Collections.synchronizedList(new ArrayList<Editor>());
118118
Editor activeEditor;
119+
120+
private static JMenu boardMenu;
119121

120122
// these menus are shared so that the board and serial port selections
121123
// are the same for all windows (since the board and serial port that are
@@ -1308,6 +1310,28 @@ public void rebuildExamplesMenu(JMenu menu) {
13081310

13091311
private static String priorPlatformFolder;
13101312
private static boolean newLibraryImported;
1313+
1314+
public void selectTargetBoard(TargetBoard targetBoard) {
1315+
for (int i = 0; i < boardMenu.getItemCount(); i++) {
1316+
JMenuItem menuItem = boardMenu.getItem(i);
1317+
if (!(menuItem instanceof JRadioButtonMenuItem)) {
1318+
continue;
1319+
}
1320+
1321+
JRadioButtonMenuItem radioButtonMenuItem = ((JRadioButtonMenuItem) menuItem);
1322+
if (targetBoard.getName().equals(radioButtonMenuItem.getText())) {
1323+
radioButtonMenuItem.setSelected(true);
1324+
break;
1325+
}
1326+
}
1327+
1328+
BaseNoGui.selectBoard(targetBoard);
1329+
filterVisibilityOfSubsequentBoardMenus(boardsCustomMenus, targetBoard, 1);
1330+
1331+
onBoardOrPortChange();
1332+
rebuildImportMenu(Editor.importMenu);
1333+
rebuildExamplesMenu(Editor.examplesMenu);
1334+
}
13111335

13121336
public synchronized void onBoardOrPortChange() {
13131337
BaseNoGui.onBoardOrPortChange();
@@ -1402,7 +1426,7 @@ public void rebuildBoardsMenu() throws Exception {
14021426
boardsCustomMenus = new LinkedList<>();
14031427

14041428
// The first custom menu is the "Board" selection submenu
1405-
JMenu boardMenu = new JMenu(tr("Board"));
1429+
boardMenu = new JMenu(tr("Board"));
14061430
boardMenu.putClientProperty("removeOnWindowDeactivation", true);
14071431
MenuScroller.setScrollerFor(boardMenu).setTopFixedCount(1);
14081432

@@ -1520,12 +1544,7 @@ public void run() {
15201544
} catch (InterruptedException e) {}
15211545
}
15221546
}
1523-
1524-
BaseNoGui.selectBoard((TargetBoard) getValue("b"));
1525-
filterVisibilityOfSubsequentBoardMenus(boardsCustomMenus, (TargetBoard) getValue("b"), 1);
1526-
onBoardOrPortChange();
1527-
rebuildImportMenu(Editor.importMenu);
1528-
rebuildExamplesMenu(Editor.examplesMenu);
1547+
selectTargetBoard((TargetBoard) getValue("b"));
15291548
}
15301549
}.start();
15311550
}

app/src/processing/app/Editor.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,9 @@
9494
import cc.arduino.view.findreplace.FindReplace;
9595
import jssc.SerialPortException;
9696
import processing.app.debug.RunnerException;
97+
import processing.app.debug.TargetBoard;
98+
import processing.app.debug.TargetPackage;
99+
import processing.app.debug.TargetPlatform;
97100
import processing.app.forms.PasswordAuthorizationDialog;
98101
import processing.app.helpers.DocumentTextChangeListener;
99102
import processing.app.helpers.Keys;
@@ -1013,7 +1016,7 @@ private void addInternalTools(JMenu menu) {
10131016
}
10141017

10151018

1016-
private void selectSerialPort(String name) {
1019+
private void selectSerialPort(String name, String boardId) {
10171020
if(portMenu == null) {
10181021
System.out.println(tr("serialMenu is null"));
10191022
return;
@@ -1064,7 +1067,13 @@ class BoardPortJCheckBoxMenuItem extends JCheckBoxMenuItem {
10641067
public BoardPortJCheckBoxMenuItem(BoardPort port) {
10651068
super(port.getLabel());
10661069
addActionListener(e -> {
1067-
selectSerialPort(port.getAddress());
1070+
selectSerialPort(port.getAddress(), port.getBoardId());
1071+
if (port.getBoardId() != null && PreferencesData.getBoolean("editor.autoselectboard")) {
1072+
TargetBoard targetBoard = BaseNoGui.getPlatform().resolveBoardById(BaseNoGui.packages, port.getBoardId());
1073+
if (targetBoard != null) {
1074+
base.selectTargetBoard(targetBoard);
1075+
}
1076+
}
10681077
base.onBoardOrPortChange();
10691078
});
10701079
this.port = port;

arduino-core/src/cc/arduino/packages/BoardPort.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ public class BoardPort {
3636
private String address;
3737
private String protocol;
3838
private String boardName;
39+
private String boardId;
3940
private String vid;
4041
private String pid;
4142
private String iserial;
@@ -71,6 +72,14 @@ public void setBoardName(String boardName) {
7172
this.boardName = boardName;
7273
}
7374

75+
public String getBoardId() {
76+
return boardId;
77+
}
78+
79+
public void setBoardId(String boardId) {
80+
this.boardId = boardId;
81+
}
82+
7483
public PreferencesMap getPrefs() {
7584
return prefs;
7685
}

arduino-core/src/cc/arduino/packages/discoverers/NetworkDiscovery.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ public void serviceResolved(ServiceEvent serviceEvent) {
122122

123123
port.setAddress(address);
124124
port.setBoardName(name);
125+
port.setBoardId(board);
125126
port.setProtocol("network");
126127
port.setLabel(label);
127128

arduino-core/src/cc/arduino/packages/discoverers/serial/SerialBoardsLister.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ public synchronized void retriggerDiscovery(boolean polled) {
155155
label += " (" + boardName + ")";
156156
}
157157
boardPort.setBoardName(boardName);
158+
boardPort.setBoardId(board.getId());
158159
}
159160
} else {
160161
if (!parts[1].equals("0000")) {

arduino-core/src/processing/app/Platform.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -269,21 +269,29 @@ public synchronized Map<String, Object> resolveDeviceByVendorIdProductId(String
269269
return null;
270270
}
271271

272-
public String resolveDeviceByBoardID(Map<String, TargetPackage> packages, String boardId) {
272+
public TargetBoard resolveBoardById(Map<String, TargetPackage> packages, String boardId) {
273273
assert packages != null;
274274
assert boardId != null;
275275
for (TargetPackage targetPackage : packages.values()) {
276276
for (TargetPlatform targetPlatform : targetPackage.getPlatforms().values()) {
277277
for (TargetBoard board : targetPlatform.getBoards().values()) {
278278
if (boardId.equals(board.getId())) {
279-
return board.getName();
279+
return board;
280280
}
281281
}
282282
}
283283
}
284284
return null;
285285
}
286286

287+
public String resolveDeviceByBoardID(Map<String, TargetPackage> packages, String boardId) {
288+
TargetBoard targetBoard = resolveBoardById(packages, boardId);
289+
if (targetBoard != null) {
290+
return targetBoard.getName();
291+
}
292+
return null;
293+
}
294+
287295
// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
288296

289297
public String getName() {

0 commit comments

Comments
 (0)