1
0
mirror of https://github.com/arduino/Arduino.git synced 2025-02-18 12:54:25 +01:00

Ensuring sketch menu is properly rendered when editor windows gains/loses focus

This commit is contained in:
Federico Fissore 2015-05-07 14:55:50 +02:00
parent fd6d9561a8
commit 50a5034176
2 changed files with 40 additions and 17 deletions

View File

@ -0,0 +1,20 @@
package cc.arduino.view;
import javax.swing.event.MenuEvent;
import javax.swing.event.MenuListener;
public class StubMenuListener implements MenuListener {
@Override
public void menuSelected(MenuEvent e) {
}
@Override
public void menuDeselected(MenuEvent e) {
}
@Override
public void menuCanceled(MenuEvent e) {
}
}

View File

@ -24,6 +24,7 @@ package processing.app;
import cc.arduino.packages.MonitorFactory;
import cc.arduino.view.StubMenuListener;
import com.jcraft.jsch.JSchException;
import jssc.SerialPortException;
import processing.app.debug.*;
@ -92,7 +93,6 @@ public class Editor extends JFrame implements RunnerListener {
// file, sketch, and tools menus for re-inserting items
JMenu fileMenu;
JMenu sketchMenu;
JMenu toolsMenu;
int numTools = 0;
@ -186,7 +186,6 @@ public class Editor extends JFrame implements RunnerListener {
// re-add the sub-menus that are shared by all windows
fileMenu.insert(sketchbookMenu, 2);
fileMenu.insert(examplesMenu, 3);
buildSketchMenu();
int offset = 0;
for (JMenu menu : base.getBoardsCustomMenus()) {
toolsMenu.insert(menu, numTools + offset);
@ -200,7 +199,6 @@ public class Editor extends JFrame implements RunnerListener {
public void windowDeactivated(WindowEvent e) {
fileMenu.remove(sketchbookMenu);
fileMenu.remove(examplesMenu);
buildSketchMenu();
List<Component> toolsMenuItemsToRemove = new LinkedList<Component>();
for (Component menuItem : toolsMenu.getMenuComponents()) {
if (menuItem instanceof JComponent) {
@ -492,7 +490,20 @@ public class Editor extends JFrame implements RunnerListener {
JMenuBar menubar = new JMenuBar();
menubar.add(buildFileMenu());
menubar.add(buildEditMenu());
menubar.add(buildSketchMenu());
final JMenu sketchMenu = new JMenu(_("Sketch"));
sketchMenu.addMenuListener(new StubMenuListener() {
@Override
public void menuSelected(MenuEvent e) {
buildSketchMenu(sketchMenu);
sketchMenu.revalidate();
validate();
}
});
buildSketchMenu(sketchMenu);
menubar.add(sketchMenu);
menubar.add(buildToolsMenu());
menubar.add(buildHelpMenu());
setJMenuBar(menubar);
@ -609,12 +620,8 @@ public class Editor extends JFrame implements RunnerListener {
}
protected JMenu buildSketchMenu() {
if (sketchMenu == null) {
sketchMenu = new JMenu(_("Sketch"));
} else {
sketchMenu.removeAll();
}
protected void buildSketchMenu(JMenu sketchMenu) {
sketchMenu.removeAll();
JMenuItem item = newJMenuItem(_("Verify / Compile"), 'R');
item.addActionListener(new ActionListener() {
@ -623,7 +630,7 @@ public class Editor extends JFrame implements RunnerListener {
}
});
sketchMenu.add(item);
item = newJMenuItem(_("Upload"), 'U');
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
@ -682,8 +689,6 @@ public class Editor extends JFrame implements RunnerListener {
}
});
sketchMenu.add(item);
return sketchMenu;
}
@ -733,9 +738,7 @@ public class Editor extends JFrame implements RunnerListener {
});
toolsMenu.add(item);
toolsMenu.addMenuListener(new MenuListener() {
public void menuCanceled(MenuEvent e) {}
public void menuDeselected(MenuEvent e) {}
toolsMenu.addMenuListener(new StubMenuListener() {
public void menuSelected(MenuEvent e) {
//System.out.println("Tools menu selected.");
populatePortMenu();
@ -2025,7 +2028,7 @@ public class Editor extends JFrame implements RunnerListener {
// placed on the event thread and causes a hang--bad idea all around.
new Thread(verbose ? verboseHandler : nonVerboseHandler).start();
}
class BuildHandler implements Runnable {
private final boolean verbose;