diff --git a/.classpath b/.classpath
index 71e8cc144..5f528e603 100644
--- a/.classpath
+++ b/.classpath
@@ -2,9 +2,11 @@
-
-
-
-
+
+
+
+
+
+
diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
index ef277e5a2..a4e4441e5 100644
--- a/.settings/org.eclipse.jdt.core.prefs
+++ b/.settings/org.eclipse.jdt.core.prefs
@@ -1,10 +1,15 @@
-#Thu Jan 10 10:50:38 PST 2008
+#Tue Aug 16 19:08:40 CEST 2011
eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
-org.eclipse.jdt.core.compiler.compliance=1.4
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
-org.eclipse.jdt.core.compiler.source=1.3
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
diff --git a/app/src/processing/app/Base.java b/app/src/processing/app/Base.java
index 036cb4f5a..97e9f57e1 100644
--- a/app/src/processing/app/Base.java
+++ b/app/src/processing/app/Base.java
@@ -436,6 +436,17 @@ public class Base {
// .................................................................
+ /** Command on Mac OS X, Ctrl on Windows and Linux */
+ static final int SHORTCUT_KEY_MASK =
+ Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
+ /** Command-W on Mac OS X, Ctrl-W on Windows and Linux */
+ static final KeyStroke WINDOW_CLOSE_KEYSTROKE =
+ KeyStroke.getKeyStroke('W', SHORTCUT_KEY_MASK);
+ /** Command-Option on Mac OS X, Ctrl-Alt on Windows and Linux */
+ static final int SHORTCUT_ALT_KEY_MASK = ActionEvent.ALT_MASK |
+ Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
+
+
// Because of variations in native windowing systems, no guarantees about
// changes to the focused and active Windows can be made. Developers must
// never assume that this Window is the focused or active Window until this
diff --git a/app/src/processing/app/Editor.java b/app/src/processing/app/Editor.java
index 33f1fc855..92a516eb6 100644
--- a/app/src/processing/app/Editor.java
+++ b/app/src/processing/app/Editor.java
@@ -99,6 +99,8 @@ public class Editor extends JFrame implements RunnerListener {
static SerialMenuListener serialMenuListener;
static SerialMonitor serialMonitor;
+ Schematics schematics;
+
EditorHeader header;
EditorStatus status;
EditorConsole console;
@@ -625,6 +627,16 @@ public class Editor extends JFrame implements RunnerListener {
// }
// });
// sketchMenu.add(item);
+
+ sketchMenu.addSeparator();
+
+ item = new JMenuItem("Show schematics");
+ item.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ handleSchematics();
+ }
+ });
+ sketchMenu.add(item);
sketchMenu.addSeparator();
@@ -1841,9 +1853,11 @@ public class Editor extends JFrame implements RunnerListener {
String appletClassName = sketch.build(false);
statusNotice("Done compiling.");
} catch (Exception e) {
+ status.unprogress();
statusError(e);
}
+ status.unprogress();
toolbar.deactivate(EditorToolbar.RUN);
}
}
@@ -1856,9 +1870,11 @@ public class Editor extends JFrame implements RunnerListener {
String appletClassName = sketch.build(true);
statusNotice("Done compiling.");
} catch (Exception e) {
+ status.unprogress();
statusError(e);
}
+ status.unprogress();
toolbar.deactivate(EditorToolbar.RUN);
}
}
@@ -1890,7 +1906,6 @@ public class Editor extends JFrame implements RunnerListener {
return sketchWindowLocation;
}
-
/**
* Implements Sketch → Stop, or pressing Stop on the toolbar.
*/
@@ -1907,6 +1922,19 @@ public class Editor extends JFrame implements RunnerListener {
}
+ public void handleSchematics() { // called by menu or buttons
+ //String s = sketch.getFolder().getAbsolutePath() + File.separator + sketch.getName() + ".png";
+ File file = new File(sketch.getFolder(), sketch.getName() + ".png");
+ if (file.exists()) {
+ if (schematics == null)
+ schematics = new Schematics(file);
+ schematics.showFrame(this);
+ } else {
+ statusNotice("This sketch doesn't include schematics");
+ }
+ }
+
+
/**
* Deactivate the Run button. This is called by Runner to notify that the
* sketch has stopped running, usually in response to an error (or maybe
@@ -2334,7 +2362,7 @@ public class Editor extends JFrame implements RunnerListener {
//if (!handleExportCheckModified()) return;
toolbar.activate(EditorToolbar.EXPORT);
console.clear();
- statusNotice("Uploading to I/O Board...");
+ status.progress("Uploading to I/O Board...");
new Thread(usingProgrammer ? exportAppHandler : exportHandler).start();
}
@@ -2363,10 +2391,12 @@ public class Editor extends JFrame implements RunnerListener {
} catch (RunnerException e) {
//statusError("Error during upload.");
//e.printStackTrace();
+ status.unprogress();
statusError(e);
} catch (Exception e) {
e.printStackTrace();
}
+ status.unprogress();
uploading = false;
//toolbar.clear();
toolbar.deactivate(EditorToolbar.EXPORT);
@@ -2397,10 +2427,12 @@ public class Editor extends JFrame implements RunnerListener {
} catch (RunnerException e) {
//statusError("Error during upload.");
//e.printStackTrace();
+ status.unprogress();
statusError(e);
} catch (Exception e) {
e.printStackTrace();
}
+ status.unprogress();
uploading = false;
//toolbar.clear();
toolbar.deactivate(EditorToolbar.EXPORT);
diff --git a/app/src/processing/app/EditorStatus.java b/app/src/processing/app/EditorStatus.java
index a7035ab7c..a335b9230 100644
--- a/app/src/processing/app/EditorStatus.java
+++ b/app/src/processing/app/EditorStatus.java
@@ -40,6 +40,7 @@ public class EditorStatus extends JPanel /*implements ActionListener*/ {
//static final int PROMPT = 2;
//static final int EDIT = 3;
static final int EDIT = 2;
+ static final int PROGRESS = 5;
static final int YES = 1;
static final int NO = 2;
@@ -66,6 +67,7 @@ public class EditorStatus extends JPanel /*implements ActionListener*/ {
JButton cancelButton;
JButton okButton;
JTextField editField;
+ JProgressBar progressBar;
//Thread promptThread;
int response;
@@ -76,16 +78,22 @@ public class EditorStatus extends JPanel /*implements ActionListener*/ {
empty();
if (bgcolor == null) {
- bgcolor = new Color[3]; //4];
+ bgcolor = new Color[6];
bgcolor[0] = Theme.getColor("status.notice.bgcolor");
bgcolor[1] = Theme.getColor("status.error.bgcolor");
bgcolor[2] = Theme.getColor("status.edit.bgcolor");
+ bgcolor[3] = null;
+ bgcolor[4] = null;
+ bgcolor[5] = Theme.getColor("status.notice.bgcolor");
- fgcolor = new Color[3]; //4];
+ fgcolor = new Color[6];
fgcolor[0] = Theme.getColor("status.notice.fgcolor");
fgcolor[1] = Theme.getColor("status.error.fgcolor");
fgcolor[2] = Theme.getColor("status.edit.fgcolor");
- }
+ fgcolor[3] = null;
+ fgcolor[4] = null;
+ fgcolor[5] = Theme.getColor("status.notice.fgcolor");
+}
}
@@ -163,6 +171,54 @@ public class EditorStatus extends JPanel /*implements ActionListener*/ {
empty();
}
+ public void progress(String message)
+ {
+ mode = PROGRESS;
+ this.message = message;
+ progressBar.setIndeterminate(false);
+ progressBar.setVisible(true);
+ setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
+ repaint();
+ }
+
+
+ public void progressIndeterminate(String message)
+ {
+ mode = PROGRESS;
+ this.message = message;
+ progressBar.setIndeterminate(true);
+ progressBar.setValue(50);
+ progressBar.setVisible(true);
+ setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
+ repaint();
+ }
+
+
+ public void progressNotice(String message) {
+ //mode = NOTICE;
+ this.message = message;
+ //update();
+ repaint();
+ }
+
+
+ public void unprogress()
+ {
+ if (Preferences.getBoolean("editor.beep.compile")) {
+ Toolkit.getDefaultToolkit().beep();
+ }
+ progressBar.setVisible(false);
+ progressBar.setValue(0);
+ setCursor(null);
+ //empty();
+ }
+
+
+ public void progressUpdate(int value)
+ {
+ progressBar.setValue(value);
+ repaint();
+ }
/*
public void update() {
@@ -369,6 +425,19 @@ public class EditorStatus extends JPanel /*implements ActionListener*/ {
});
add(editField);
editField.setVisible(false);
+
+ progressBar = new JProgressBar(JScrollBar.HORIZONTAL);
+ progressBar.setIndeterminate(false);
+ if (Base.isMacOS()) {
+ //progressBar.setBackground(bgcolor[PROGRESS]);
+ //progressBar.putClientProperty("JProgressBar.style", "circular");
+ }
+ progressBar.setValue(0);
+ progressBar.setBorderPainted(true);
+ //progressBar.setStringPainted(true);
+ add(progressBar);
+ progressBar.setVisible(false);
+
}
}
@@ -385,11 +454,13 @@ public class EditorStatus extends JPanel /*implements ActionListener*/ {
//noButton.setLocation(noLeft, top);
cancelButton.setLocation(cancelLeft, top);
okButton.setLocation(noLeft, top);
+ progressBar.setLocation(noLeft, top);
//yesButton.setSize(Preferences.BUTTON_WIDTH, Preferences.BUTTON_HEIGHT);
//noButton.setSize(Preferences.BUTTON_WIDTH, Preferences.BUTTON_HEIGHT);
cancelButton.setSize(Preferences.BUTTON_WIDTH, Preferences.BUTTON_HEIGHT);
okButton.setSize(Preferences.BUTTON_WIDTH, Preferences.BUTTON_HEIGHT);
+ progressBar.setSize(2*Preferences.BUTTON_WIDTH, Preferences.BUTTON_HEIGHT);
// edit field height is awkward, and very different between mac and pc,
// so use at least the preferred height for now.
@@ -398,6 +469,7 @@ public class EditorStatus extends JPanel /*implements ActionListener*/ {
int editTop = (1 + sizeH - editHeight) / 2; // add 1 for ceil
editField.setBounds(yesLeft - Preferences.BUTTON_WIDTH, editTop,
editWidth, editHeight);
+ progressBar.setBounds(noLeft, editTop, editWidth, editHeight);
}
diff --git a/app/src/processing/app/EditorToolbar.java b/app/src/processing/app/EditorToolbar.java
index 9d7a5fc13..1f3a68231 100644
--- a/app/src/processing/app/EditorToolbar.java
+++ b/app/src/processing/app/EditorToolbar.java
@@ -37,7 +37,7 @@ public class EditorToolbar extends JComponent implements MouseInputListener, Key
/** Rollover titles for each button. */
static final String title[] = {
- "Verify", "Upload", "New", "Open", "Save", "Serial Monitor"
+ "Verify", "Upload", "New", "Open", "Save", "Show Schematics", "Serial Monitor"
};
/** Titles for each button when the shift key is pressed. */
@@ -56,18 +56,20 @@ public class EditorToolbar extends JComponent implements MouseInputListener, Key
static final int BUTTON_IMAGE_SIZE = 33;
- static final int RUN = 0;
- static final int EXPORT = 1;
+ static final int RUN = 0;
+ static final int EXPORT = 1;
- static final int NEW = 2;
- static final int OPEN = 3;
- static final int SAVE = 4;
+ static final int NEW = 2;
+ static final int OPEN = 3;
+ static final int SAVE = 4;
+ static final int SCHEMATICS = 5;
- static final int SERIAL = 5;
+ static final int SERIAL = 6;
static final int INACTIVE = 0;
static final int ROLLOVER = 1;
static final int ACTIVE = 2;
+ static final int DISABLED = 3;
Editor editor;
@@ -108,6 +110,7 @@ public class EditorToolbar extends JComponent implements MouseInputListener, Key
which[buttonCount++] = NEW;
which[buttonCount++] = OPEN;
which[buttonCount++] = SAVE;
+ which[buttonCount++] = SCHEMATICS;
which[buttonCount++] = SERIAL;
currentRollover = -1;
@@ -258,8 +261,9 @@ public class EditorToolbar extends JComponent implements MouseInputListener, Key
for (int i = 0; i < buttonCount; i++) {
if ((y > y1) && (x > x1[i]) &&
(y < y2) && (x < x2[i])) {
- //System.out.println("sel is " + i);
- return i;
+ if (state[i] != DISABLED) {
+ return i;
+ }
}
}
return -1;
@@ -267,10 +271,12 @@ public class EditorToolbar extends JComponent implements MouseInputListener, Key
private void setState(int slot, int newState, boolean updateAfter) {
- state[slot] = newState;
- stateImage[slot] = buttonImages[which[slot]][newState];
- if (updateAfter) {
- repaint();
+ if (state[slot]!=DISABLED) {
+ state[slot] = newState;
+ stateImage[slot] = buttonImages[which[slot]][newState];
+ if (updateAfter) {
+ repaint();
+ }
}
}
@@ -338,6 +344,10 @@ public class EditorToolbar extends JComponent implements MouseInputListener, Key
editor.handleExport(e.isShiftDown());
break;
+ case SCHEMATICS:
+ editor.handleSchematics();
+ break;
+
case SERIAL:
editor.handleSerial();
break;
@@ -371,6 +381,15 @@ public class EditorToolbar extends JComponent implements MouseInputListener, Key
}
+ public void disable(int what) {
+ if (buttonImages != null && which!=null && state!=null && stateImage!=null) {
+ state[what] = DISABLED;
+ stateImage[what] = buttonImages[which[what]][INACTIVE];
+ repaint();
+ }
+ }
+
+
public Dimension getPreferredSize() {
return getMinimumSize();
}
diff --git a/app/src/processing/app/Schematics.java b/app/src/processing/app/Schematics.java
new file mode 100644
index 000000000..c29d01663
--- /dev/null
+++ b/app/src/processing/app/Schematics.java
@@ -0,0 +1,273 @@
+/* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */
+
+/*
+ Part of the Wiring project - http://wiring.org.co
+
+ Copyright (c) 2009-11 Hernando Barragan
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+package processing.app;
+
+import java.awt.*;
+import java.awt.event.*;
+import java.io.*;
+
+import javax.swing.*;
+
+public class Schematics extends JFrame {
+ private static final long serialVersionUID = 3254345343658939796L;
+
+ // prompt text stuff
+ Image image;
+
+ int diagramX = 0, diagramY = 0;
+
+ int x1, y1, x2, y2;
+
+ static final String PROMPT_CLOSE = "Close";
+
+ static final String PROMPT_RESETVIEW = "Reset";
+
+ /**
+ * Standardized width for buttons. Mac OS X 10.3 wants 70 as its default,
+ * Windows XP needs 66, and my Ubuntu machine needs 80+, so 80 seems proper.
+ */
+ static public int BUTTON_WIDTH = 80;
+
+ /**
+ * Standardized button height. Mac OS X 10.3 (Java 1.4) wants 29, presumably
+ * because it now includes the blue border, where it didn't in Java 1.3.
+ * Windows XP only wants 23 (not sure what default Linux would be). Because of
+ * the disparity, on Mac OS X, it will be set inside a static block.
+ */
+ static public int BUTTON_HEIGHT = 24;
+
+ // indents and spacing standards. these probably need to be modified
+ // per platform as well, since macosx is so huge, windows is smaller,
+ // and linux is all over the map
+
+ static final int GUI_BIG = 13;
+
+ static final int GUI_BETWEEN = 10;
+
+ static final int GUI_SMALL = 6;
+
+ // gui elements
+
+ int wide, high;
+
+ JLabel label;
+
+ JLabel labelBack;
+
+ JButton resetButton;
+
+ JButton closeButton;
+
+ // the calling editor, so updates can be applied
+
+ Editor editor;
+
+ public Schematics(File path) {
+ super("Schematics");
+
+ image = Toolkit.getDefaultToolkit().createImage(path.getAbsolutePath());
+
+ // dialog = new JFrame("Schematics");
+ setResizable(true);
+ // setBackground(Color.white);
+ // dialog.setContentPane(new JLabel(new ImageIcon(image)));
+
+ Container pain = getContentPane();
+
+ pain.setBackground(Color.white);
+ pain.setLayout(null);
+
+ int top = GUI_BIG;
+ int left = GUI_BIG;
+ int right = 0;
+
+ // to override bug on OSX setting the JFrame background color
+ labelBack = new JLabel();
+
+ label = new JLabel(new ImageIcon(image));
+ // System.out.println(label.getPreferredSize());
+ Dimension d = label.getPreferredSize();
+ label.addMouseMotionListener(new MouseMotionListener() {
+ public void mouseDragged(MouseEvent e) {
+ // Base.openFolder(Base.getSettingsFolder());
+ x2 = e.getX();
+ y2 = e.getY();
+ diagramX += x2 - x1;
+ diagramY += y2 - y1;
+ Dimension d = label.getPreferredSize();
+ Dimension d1 = getSize();
+ diagramX = Math.max(d1.width - (d.width + GUI_BIG), diagramX);
+ diagramX = Math.min(GUI_BIG, diagramX);
+ diagramY = Math
+ .max(
+ d1.height
+ - (d.height + GUI_BIG + GUI_BETWEEN + BUTTON_HEIGHT
+ + GUI_BIG + GUI_BIG), diagramY);
+ diagramY = Math.min(GUI_BIG, diagramY);
+ label.setBounds(diagramX, diagramY, d.width, d.height);
+ // System.out.println("dragging");
+ }
+
+ public void mouseMoved(MouseEvent e) {
+ }
+ });
+
+ label.addMouseListener(new MouseAdapter() {
+ public void mousePressed(MouseEvent e) {
+ x1 = e.getX();
+ y1 = e.getY();
+ // System.out.println("pressed at "+x1+" "+y1);
+ }
+
+ public void mouseEntered(MouseEvent e) {
+ }
+
+ public void mouseExited(MouseEvent e) {
+ }
+ });
+
+ label.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
+ pain.add(label);
+ label.setBounds(left, top, d.width, d.height);
+
+ right = Math.max(right, left + d.width);
+ top += d.height; // + GUI_SMALL;
+
+ resetButton = new JButton(PROMPT_RESETVIEW);
+ resetButton.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ diagramX = GUI_BIG;
+ diagramY = GUI_BIG;
+ Dimension d = label.getPreferredSize();
+ label.setBounds(diagramX, diagramY, d.width, d.height);
+ }
+ });
+
+ pain.add(resetButton);
+ BUTTON_HEIGHT = resetButton.getPreferredSize().height;
+
+ int h = right - (BUTTON_WIDTH + GUI_SMALL + BUTTON_WIDTH);
+ resetButton.setBounds(h, top, BUTTON_WIDTH, BUTTON_HEIGHT);
+ h += BUTTON_WIDTH + GUI_SMALL;
+
+ // h = right - (BUTTON_WIDTH + GUI_SMALL + BUTTON_WIDTH);
+ // h += BUTTON_WIDTH + GUI_SMALL;
+
+ closeButton = new JButton(PROMPT_CLOSE);
+ closeButton.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ disposeFrame();
+ }
+ });
+ pain.add(closeButton);
+ closeButton.setBounds(h, top, BUTTON_WIDTH, BUTTON_HEIGHT);
+
+ top += BUTTON_HEIGHT + GUI_BETWEEN;
+
+ // finish up
+
+ wide = right + GUI_BIG;
+ high = top + GUI_SMALL;
+
+ // closing the window is same as hitting close button
+
+ addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e) {
+ disposeFrame();
+ }
+ });
+
+ ActionListener disposer = new ActionListener() {
+ public void actionPerformed(ActionEvent actionEvent) {
+ disposeFrame();
+ }
+ };
+
+ Base.registerWindowCloseKeys(getRootPane(), disposer);
+ if (!Base.isMacOS())
+ Base.setIcon(this);
+
+ Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
+ setLocation((screen.width - wide) / 2, (screen.height - high) / 2);
+
+ pack(); // get insets
+ Insets insets = getInsets();
+ setSize(Math.min(screen.width, wide + insets.left + insets.right), Math
+ .min(screen.height, high + insets.top + insets.bottom));
+
+ labelBack.setOpaque(true);
+ labelBack.setBackground(Color.white);
+ labelBack.setBounds(0, 0, screen.width, screen.height);
+ pain.add(labelBack);
+
+ getContentPane().setBackground(Color.white);
+ // handle window closing commands for ctrl/cmd-W or hitting ESC.
+ addComponentListener(new ComponentAdapter() {
+ public void componentResized(ComponentEvent e) {
+ Dimension d = getSize();
+ int top = d.height - (BUTTON_HEIGHT + GUI_BETWEEN + GUI_BIG + GUI_BIG);
+ int left = GUI_BIG;
+ int right = Math.max(0, d.width - (left + GUI_BIG));
+ int h = right - (BUTTON_WIDTH + GUI_SMALL + BUTTON_WIDTH);
+ resetButton.setBounds(h, top, BUTTON_WIDTH, BUTTON_HEIGHT);
+ h += BUTTON_WIDTH + GUI_SMALL;
+ closeButton.setBounds(h, top, BUTTON_WIDTH, BUTTON_HEIGHT);
+ }
+ });
+
+ pain.addKeyListener(new KeyAdapter() {
+ public void keyPressed(KeyEvent e) {
+ // System.out.println(e);
+ KeyStroke wc = Base.WINDOW_CLOSE_KEYSTROKE;
+ if ((e.getKeyCode() == KeyEvent.VK_ESCAPE)
+ || (KeyStroke.getKeyStrokeForEvent(e).equals(wc))) {
+ disposeFrame();
+ }
+ }
+ });
+ }
+
+ public Dimension getPreferredSize() {
+ return new Dimension(wide, high);
+ }
+
+ // .................................................................
+
+ /**
+ * Close the window after an OK or Cancel.
+ */
+ protected void disposeFrame() {
+ editor.toolbar.deactivate(EditorToolbar.SCHEMATICS);
+ dispose();
+ }
+
+ protected void applyFrame() {
+
+ }
+
+ protected void showFrame(Editor editor) {
+ this.editor = editor;
+ setVisible(true);
+ }
+
+}
diff --git a/app/src/processing/app/Sketch.java b/app/src/processing/app/Sketch.java
index 22e2aa591..93b8e40dc 100644
--- a/app/src/processing/app/Sketch.java
+++ b/app/src/processing/app/Sketch.java
@@ -1507,6 +1507,7 @@ public class Sketch {
throws RunnerException {
// run the preprocessor
+ editor.status.progressUpdate(20);
String primaryClassName = preprocess(buildPath);
// compile the program. errors will happen as a RunnerException
@@ -1552,6 +1553,7 @@ public class Sketch {
appletFolder.mkdirs();
// build the sketch
+ editor.status.progressNotice("Compiling sketch...");
String foundName = build(appletFolder.getPath(), false);
// (already reported) error during export, exit this function
if (foundName == null) return false;
@@ -1565,12 +1567,18 @@ public class Sketch {
// return false;
// }
+ editor.status.progressNotice("Uploading...");
upload(appletFolder.getPath(), foundName, usingProgrammer);
-
+ editor.status.progressUpdate(100);
return true;
}
+
+ public void setCompilingProgress(int percent) {
+ editor.status.progressUpdate(percent);
+ }
+
protected void size(String buildPath, String suggestedClassName)
throws RunnerException {
long size = 0;
diff --git a/app/src/processing/app/debug/Compiler.java b/app/src/processing/app/debug/Compiler.java
index bf972b8ea..dd0889859 100644
--- a/app/src/processing/app/debug/Compiler.java
+++ b/app/src/processing/app/debug/Compiler.java
@@ -111,6 +111,7 @@ public class Compiler implements MessageConsumer {
// 0. include paths for core + all libraries
+ sketch.setCompilingProgress(20);
List includePaths = new ArrayList();
includePaths.add(corePath);
if (pinsPath != null) includePaths.add(pinsPath);
@@ -120,6 +121,7 @@ public class Compiler implements MessageConsumer {
// 1. compile the sketch (already in the buildPath)
+ sketch.setCompilingProgress(30);
objectFiles.addAll(
compileFiles(avrBasePath, buildPath, includePaths,
findFilesInPath(buildPath, "S", false),
@@ -129,6 +131,7 @@ public class Compiler implements MessageConsumer {
// 2. compile the libraries, outputting .o files to: //
+ sketch.setCompilingProgress(40);
for (File libraryFolder : sketch.getImportedLibraries()) {
File outputFolder = new File(buildPath, libraryFolder.getName());
File utilityFolder = new File(libraryFolder, "utility");
@@ -156,6 +159,7 @@ public class Compiler implements MessageConsumer {
// 3. compile the core, outputting .o files to and then
// collecting them into the core.a library file.
+ sketch.setCompilingProgress(50);
includePaths.clear();
includePaths.add(corePath); // include path for core only
if (pinsPath != null) includePaths.add(pinsPath);
@@ -180,6 +184,7 @@ public class Compiler implements MessageConsumer {
// 4. link it all together into the .elf file
+ sketch.setCompilingProgress(60);
List baseCommandLinker = new ArrayList(Arrays.asList(new String[] {
avrBasePath + "avr-gcc",
"-Os",
@@ -208,6 +213,7 @@ public class Compiler implements MessageConsumer {
List commandObjcopy;
// 5. extract EEPROM data (from EEMEM directive) to .eep file.
+ sketch.setCompilingProgress(70);
commandObjcopy = new ArrayList(baseCommandObjcopy);
commandObjcopy.add(2, "ihex");
commandObjcopy.set(3, "-j");
@@ -221,6 +227,7 @@ public class Compiler implements MessageConsumer {
execAsynchronously(commandObjcopy);
// 6. build the .hex file
+ sketch.setCompilingProgress(80);
commandObjcopy = new ArrayList(baseCommandObjcopy);
commandObjcopy.add(2, "ihex");
commandObjcopy.add(".eeprom"); // remove eeprom data
@@ -228,6 +235,8 @@ public class Compiler implements MessageConsumer {
commandObjcopy.add(buildPath + File.separator + primaryClassName + ".hex");
execAsynchronously(commandObjcopy);
+ sketch.setCompilingProgress(90);
+
return true;
}
diff --git a/build/shared/lib/theme/buttons.gif b/build/shared/lib/theme/buttons.gif
index 4de0905d2..f0a9c89e0 100644
Binary files a/build/shared/lib/theme/buttons.gif and b/build/shared/lib/theme/buttons.gif differ