diff --git a/.classpath b/.classpath
index 001da410e..e831ec3da 100644
--- a/.classpath
+++ b/.classpath
@@ -6,5 +6,6 @@
+
diff --git a/app/src/processing/app/Base.java b/app/src/processing/app/Base.java
index bb14c7a12..9bb3f67b1 100644
--- a/app/src/processing/app/Base.java
+++ b/app/src/processing/app/Base.java
@@ -175,11 +175,12 @@ public class Base {
e.printStackTrace();
}
}
-
-
+
+
protected void registerMacOS() {
try {
- Class osxAdapter = ClassLoader.getSystemClassLoader().loadClass("BaseMacOS");
+ String name = "processing.app.BaseMacOS";
+ Class osxAdapter = ClassLoader.getSystemClassLoader().loadClass(name);
Class[] defArgs = { Base.class };
Method registerMethod = osxAdapter.getDeclaredMethod("register", defArgs);
@@ -372,20 +373,12 @@ public class Base {
});
*/
for (int i = 0; i < editorCount; i++) {
- editors[i].sketchbookChanged = true; //sketchbook.rebuildMenus();
+ editors[i].sketchbookUpdated = true; //sketchbook.rebuildMenus();
}
//rebuildMenus();
}
- public boolean handleClose(Editor editor) {
- // check if modified
- // if not canceled, the check if this is the last open window
- // if this is the last open window, just do a 'new' instead
- return false;
- }
-
-
public void handleOpen() {
// get the frontmost window frame for placing file dialog
@@ -409,8 +402,8 @@ public class Base {
}
- public void handleOpen(String path) {
- new Editor(this, path);
+ public Editor handleOpen(String path) {
+ return new Editor(this, path);
}
@@ -576,17 +569,19 @@ public class Base {
try {
String path = null;
+ boolean untitled = false;
if (prompt) {
path = handleNewPrompt(activeEditor);
} else {
path = handleNewUntitled();
+ untitled = true;
}
if (path != null) {
rebuildMenusAsync();
- handleOpen(path);
+ Editor editor = handleOpen(path);
+ editor.untitled = true;
}
} catch (IOException e) {
- // TODO Auto-generated catch block
e.printStackTrace();
}
}
@@ -709,12 +704,37 @@ public class Base {
}
- /*
- public Editor getActiveEditor() {
- return activeEditor;
+ public boolean handleClose(Editor editor) {
+ // Check if modified
+ boolean success = editor.checkModified(false);
+
+ // If not canceled, remove the editor window.
+ if (success) {
+ editor.setVisible(false);
+ editor.dispose();
+
+ for (int i = 0; i < editorCount; i++) {
+ if (editor == editors[i]) {
+ for (int j = i; j < editorCount-1; j++) {
+ editors[j] = editors[j+1];
+ }
+ editorCount--;
+ editors[editorCount] = null;
+ }
+ }
+
+ // If not canceled, check if this was the last open window.
+ // If it was the last, could either do a new untitled window,
+ // or could just quit the application.
+ if (editorCount == 0) {
+ handleQuit();
+ }
+ return true;
+ }
+
+ return false;
}
- */
-
+
public boolean handleQuit() {
boolean canceled = false;
@@ -724,9 +744,20 @@ public class Base {
break;
}
}
- return !canceled;
+ if (!canceled) {
+ // Clean out empty sketches
+ Base.cleanSketchbook();
+
+ //if (PApplet.platform != PConstants.MACOSX) {
+ System.exit(0);
+ //}
+ }
+ return !canceled;
}
+
+ // .................................................................
+
/**
* Rebuild the menu full of sketches based on the
@@ -769,9 +800,6 @@ public class Base {
*/
- // .................................................................
-
-
/*
public JPopupMenu createPopup() {
JMenu menu = new JMenu();
@@ -859,23 +887,15 @@ public class Base {
}
- /*
- public JMenu getImportMenu() {
- return importMenu;
- }
- */
-
-
protected boolean addSketches(JMenu menu, File folder) throws IOException {
- // skip .DS_Store files, etc
+ // skip .DS_Store files, etc (this shouldn't actually be necessary)
if (!folder.isDirectory()) return false;
- String list[] = folder.list();
- // if a bad folder or something like that, this might come back null
+ String[] list = folder.list();
+ // If a bad folder or unreadable or whatever, this will come back null
if (list == null) return false;
- // alphabetize list, since it's not always alpha order
- // replaced hella slow bubble sort with this feller for 0093
+ // Alphabetize list, since it's not always alpha order
Arrays.sort(list, String.CASE_INSENSITIVE_ORDER);
ActionListener listener = new ActionListener() {
@@ -964,7 +984,7 @@ public class Base {
File exported = new File(subfolder, "library");
File entry = new File(exported, list[i] + ".jar");
- // if a .jar file of the same prefix as the folder exists
+ // If a .jar file of the same prefix as the folder exists
// inside the 'library' subfolder of the sketch
if (entry.exists()) {
String sanityCheck = Sketch.sanitizedName(list[i]);
@@ -973,7 +993,7 @@ public class Base {
"The library \"" + list[i] + "\" cannot be used.\n" +
"Library names must contain only basic letters and numbers.\n" +
"(ascii only and no spaces, and it cannot start with a number)";
- Base.showMessage("Ignoring bad sketch name", mess);
+ Base.showMessage("Ignoring bad library name", mess);
continue;
}
@@ -1012,62 +1032,6 @@ public class Base {
return ifound;
}
-
- /**
- * Clear out projects that are empty.
- */
- public void clean() {
- //if (!Preferences.getBoolean("sketchbook.auto_clean")) return;
-
- File sketchbookFolder = new File(getSketchbookPath());
- if (!sketchbookFolder.exists()) return;
-
- //String entries[] = new File(userPath).list();
- String entries[] = sketchbookFolder.list();
- if (entries != null) {
- for (int j = 0; j < entries.length; j++) {
- //System.out.println(entries[j] + " " + entries.length);
- if (entries[j].charAt(0) == '.') continue;
-
- //File prey = new File(userPath, entries[j]);
- File prey = new File(sketchbookFolder, entries[j]);
- File pde = new File(prey, entries[j] + ".pde");
-
- // make sure this is actually a sketch folder with a .pde,
- // not a .DS_Store file or another random user folder
-
- if (pde.exists() &&
- (Base.calcFolderSize(prey) == 0)) {
- //System.out.println("i want to remove " + prey);
-
- if (Preferences.getBoolean("sketchbook.auto_clean")) {
- Base.removeDir(prey);
-
- /*
- } else { // otherwise prompt the user
- String prompt =
- "Remove empty sketch titled \"" + entries[j] + "\"?";
-
- Object[] options = { "Yes", "No" };
- int result =
- JOptionPane.showOptionDialog(editor,
- prompt,
- "Housekeeping",
- JOptionPane.YES_NO_OPTION,
- JOptionPane.QUESTION_MESSAGE,
- null,
- options,
- options[0]);
- if (result == JOptionPane.YES_OPTION) {
- Base.removeDir(prey);
- }
- */
- }
- }
- }
- }
- }
-
// .................................................................
@@ -1143,17 +1107,6 @@ public class Base {
// .................................................................
- /*
- static final int kDocumentsFolderType =
- ('d' << 24) | ('o' << 16) | ('c' << 8) | 's';
- static final int kPreferencesFolderType =
- ('p' << 24) | ('r' << 16) | ('e' << 8) | 'f';
- static final int kDomainLibraryFolderType =
- ('d' << 24) | ('l' << 16) | ('i' << 8) | 'b';
- static final short kUserDomain = -32763;
- */
-
-
static public File getSettingsFolder() {
File dataFolder = null;
@@ -1276,6 +1229,11 @@ public class Base {
}
+ /**
+ * For now, only used by Preferences to get the preferences.txt file.
+ * @param filename
+ * @return
+ */
static public File getSettingsFile(String filename) {
return new File(getSettingsFolder(), filename);
}
@@ -1487,6 +1445,64 @@ public class Base {
return folder;
}
+
+ /**
+ * Clear out projects that are empty.
+ */
+ static public void cleanSketchbook() {
+ if (!Preferences.getBoolean("sketchbook.auto_clean")) return;
+
+ File sketchbookFolder = new File(getSketchbookPath());
+ if (!sketchbookFolder.exists()) return;
+
+ //String entries[] = new File(userPath).list();
+ String entries[] = sketchbookFolder.list();
+ if (entries != null) {
+ for (int j = 0; j < entries.length; j++) {
+ //System.out.println(entries[j] + " " + entries.length);
+ if (entries[j].charAt(0) == '.') continue;
+
+ //File prey = new File(userPath, entries[j]);
+ File prey = new File(sketchbookFolder, entries[j]);
+ File pde = new File(prey, entries[j] + ".pde");
+
+ // make sure this is actually a sketch folder with a .pde,
+ // not a .DS_Store file or another random user folder
+
+ if (pde.exists() && (Base.calcFolderSize(prey) == 0)) {
+ //System.out.println("i want to remove " + prey);
+
+ //if (Preferences.getBoolean("sketchbook.auto_clean")) {
+ Base.removeDir(prey);
+
+ /*
+ } else { // otherwise prompt the user
+ String prompt =
+ "Remove empty sketch titled \"" + entries[j] + "\"?";
+
+ Object[] options = { "Yes", "No" };
+ int result =
+ JOptionPane.showOptionDialog(editor,
+ prompt,
+ "Housekeeping",
+ JOptionPane.YES_NO_OPTION,
+ JOptionPane.QUESTION_MESSAGE,
+ null,
+ options,
+ options[0]);
+ if (result == JOptionPane.YES_OPTION) {
+ Base.removeDir(prey);
+ }
+ */
+ //}
+ }
+ }
+ }
+ }
+
+
+ // .................................................................
+
/**
* Implementation for choosing directories that handles both the
diff --git a/app/src/processing/app/BaseMacOS.java b/app/src/processing/app/BaseMacOS.java
index 7a6366303..efc0b2201 100644
--- a/app/src/processing/app/BaseMacOS.java
+++ b/app/src/processing/app/BaseMacOS.java
@@ -1,3 +1,25 @@
+/* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */
+
+/*
+ Part of the Processing project - http://processing.org
+
+ Copyright (c) 2007 Ben Fry and Casey Reas
+
+ 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.io.FileNotFoundException;
diff --git a/app/src/processing/app/Editor.java b/app/src/processing/app/Editor.java
index 708342d52..46dbdcb34 100644
--- a/app/src/processing/app/Editor.java
+++ b/app/src/processing/app/Editor.java
@@ -1,10 +1,9 @@
/* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */
/*
- Editor - main editor panel for the processing development environment
Part of the Processing project - http://processing.org
- Copyright (c) 2004-06 Ben Fry and Casey Reas
+ Copyright (c) 2004-07 Ben Fry and Casey Reas
Copyright (c) 2001-04 Massachusetts Institute of Technology
This program is free software; you can redistribute it and/or modify
@@ -30,26 +29,19 @@ import processing.core.*;
import java.awt.*;
import java.awt.datatransfer.*;
-//import java.awt.dnd.*;
import java.awt.event.*;
import java.awt.print.*;
import java.io.*;
-//import java.lang.reflect.*;
-//import java.net.*;
-//import java.util.*;
-//import java.util.zip.*;
import javax.swing.*;
-//import javax.swing.border.*;
import javax.swing.event.*;
import javax.swing.text.*;
import javax.swing.undo.*;
-//import com.apple.mrj.*;
-//import com.oroinc.text.regex.*;
-//import de.hunsicker.jalopy.*;
-
+/**
+ * Main editor panel for the Processing Development Environment.
+ */
public class Editor extends JFrame {
Base base;
@@ -79,6 +71,11 @@ public class Editor extends JFrame {
String handleOpenPath;
boolean handleNewShift;
+ /**
+ * true if this file has not yet been given a name by the user
+ */
+ boolean untitled;
+
PageFormat pageFormat;
PrinterJob printerJob;
@@ -114,7 +111,7 @@ public class Editor extends JFrame {
JMenuItem saveAsMenuItem;
// True if the sketchbook has changed since this Editor was last active.
- boolean sketchbookChanged;
+ boolean sketchbookUpdated;
//
@@ -153,7 +150,9 @@ public class Editor extends JFrame {
// add listener to handle window close box hit event
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
- handleQuitInternal();
+ base.handleClose(Editor.this);
+ //handleClose2();
+ //handleQuitInternal();
}
});
// don't close the window when clicked, the app will take care
@@ -165,6 +164,11 @@ public class Editor extends JFrame {
addWindowListener(new WindowAdapter() {
public void windowActivated(WindowEvent e) {
base.handleActivated(Editor.this);
+ if (sketchbookUpdated) {
+ base.rebuildSketchbookMenu(sketchbookMenu);
+ base.rebuildToolbarMenu(toolbarMenu);
+ sketchbookUpdated = false;
+ }
}
});
@@ -529,6 +533,14 @@ public class Editor extends JFrame {
});
menu.add(item);
+ item = Editor.newJMenuItem("Close", 'W', false);
+ item.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ base.handleClose(Editor.this);
+ }
+ });
+ menu.add(item);
+
sketchbookMenu = new JMenu("Sketchbook");
base.rebuildSketchbookMenu(sketchbookMenu);
menu.add(sketchbookMenu);
@@ -608,7 +620,7 @@ public class Editor extends JFrame {
item = newJMenuItem("Quit", 'Q');
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
- handleQuitInternal();
+ base.handleQuit();
}
});
menu.add(item);
@@ -1668,9 +1680,11 @@ public class Editor extends JFrame {
*/
+ /*
public void handleClose2() {
base.handleClose(this);
}
+ */
/**
@@ -1685,12 +1699,13 @@ public class Editor extends JFrame {
public boolean handleSave(boolean immediately) {
doStop();
- if (sketch.untitled) {
+ if (untitled) {
+ return handleSaveAs();
// need to get the name, user might also cancel here
- }
- if (immediately) {
+ } else if (immediately) {
handleSave2();
+
} else {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
@@ -1731,29 +1746,32 @@ public class Editor extends JFrame {
}
- public void handleSaveAs() {
+ public boolean handleSaveAs() {
doStop();
toolbar.activate(EditorToolbar.SAVE);
- SwingUtilities.invokeLater(new Runnable() {
- public void run() {
- message("Saving...");
- try {
- if (sketch.saveAs()) {
- message("Done Saving.");
- // Disabling this for 0125, instead rebuild the menu inside
- // the Save As method of the Sketch object, since that's the
- // only one who knows whether something was renamed.
- //sketchbook.rebuildMenusAsync();
- } else {
- message("Save Cancelled.");
- }
- } catch (Exception e) {
- // show the error as a message in the window
- error(e);
- }
- toolbar.clear();
- }});
+ //SwingUtilities.invokeLater(new Runnable() {
+ //public void run() {
+ message("Saving...");
+ try {
+ if (sketch.saveAs()) {
+ message("Done Saving.");
+ // Disabling this for 0125, instead rebuild the menu inside
+ // the Save As method of the Sketch object, since that's the
+ // only one who knows whether something was renamed.
+ //sketchbook.rebuildMenusAsync();
+ } else {
+ message("Save Canceled.");
+ return false;
+ }
+ } catch (Exception e) {
+ // show the error as a message in the window
+ error(e);
+ }
+ toolbar.clear();
+ //}});
+
+ return true;
}
@@ -1896,6 +1914,7 @@ public class Editor extends JFrame {
* to disk just in case they want to quit. Final exit() happens
* in Editor since it has the callback from EditorStatus.
*/
+ /*
public void handleQuitInternal() {
// doStop() isn't sufficient with external vm & quit
// instead use doClose() which will kill the external vm
@@ -1903,6 +1922,7 @@ public class Editor extends JFrame {
checkModified(true);
}
+ */
/**
diff --git a/app/src/processing/app/EditorLineStatus.java b/app/src/processing/app/EditorLineStatus.java
index 66c764285..8cc97a645 100644
--- a/app/src/processing/app/EditorLineStatus.java
+++ b/app/src/processing/app/EditorLineStatus.java
@@ -3,7 +3,7 @@
/*
Part of the Processing project - http://processing.org
- Copyright (c) 2005-06 Ben Fry and Casey Reas
+ Copyright (c) 2005-07 Ben Fry and Casey Reas
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
diff --git a/app/src/processing/app/Sketch.java b/app/src/processing/app/Sketch.java
index 69dc7ee8a..e679efe35 100644
--- a/app/src/processing/app/Sketch.java
+++ b/app/src/processing/app/Sketch.java
@@ -3,7 +3,7 @@
/*
Part of the Processing project - http://processing.org
- Copyright (c) 2004-06 Ben Fry and Casey Reas
+ Copyright (c) 2004-07 Ben Fry and Casey Reas
Copyright (c) 2001-04 Massachusetts Institute of Technology
This program is free software; you can redistribute it and/or modify
@@ -60,11 +60,6 @@ public class Sketch {
*/
boolean modified;
- /**
- * true if this file has not yet been given a name by the user
- */
- boolean untitled;
-
public File folder;
public File dataFolder;
public File codeFolder;
@@ -593,7 +588,8 @@ public class Sketch {
// make a new sketch, and i think this will rebuild the sketch menu
//editor.handleNewUnchecked();
- editor.handleClose2();
+ //editor.handleClose2();
+ editor.base.handleClose(editor);
} else {
// delete the file
diff --git a/app/src/processing/app/SketchHistory.java b/app/src/processing/app/SketchHistory.java
deleted file mode 100644
index 50e1b7278..000000000
--- a/app/src/processing/app/SketchHistory.java
+++ /dev/null
@@ -1,357 +0,0 @@
-/* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */
-
-/*
- SketchHistory - handler for storing history information about a project
- Part of the Processing project - http://processing.org
-
- Copyright (c) 2004-06 Ben Fry and Casey Reas
- Copyright (c) 2001-04 Massachusetts Institute of Technology
-
- 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
-*/
-
-
-/*
-
-import java.awt.*;
-import java.awt.event.*;
-import java.io.*;
-import java.util.*;
-import java.util.zip.*;
-
-import javax.swing.*;
-
-
-public class SketchHistory {
- Editor editor;
-
- // why things have been saved for history
- static final int RUN = 5;
- static final int SAVE = 6;
- static final int AUTOSAVE = 7;
- static final int BEAUTIFY = 8;
-
- static final String HISTORY_SEPARATOR =
- "#################################################";
-
- JMenu menu;
-
- // true if the sketch is read-only,
- // meaning that no history will be recorded
- boolean readOnlySketch;
-
- File historyFile;
- String lastRecorded;
-
- ActionListener menuListener;
-
-
- //public SketchHistory(Editor editor) {
- //this.editor = editor;
- //}
-
- public SketchHistory(Sketch sketch) {
- menu = new JMenu("History");
-
- menuListener = new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- retrieve(e.getActionCommand());
- }
- };
- }
-
-
-
- /// Set the path for the current sketch
-
- public void setPath(String path, boolean readOnlySketch) {
- this.readOnlySketch = true;
-
- if (readOnlySketch) return;
- historyFile = new File(path, "history.gz");
- }
-
-
- public void attachMenu(JMenu parent) {
- //if (Preferences.getBoolean("history.recording")) {
- parent.add(menu);
-
- // should leave enabled, since can still get old history
- // even if the new stuff isn't being recorded
- //menu.setEnabled(Preferences.getBoolean("history.recording"));
- //}
- }
-
-
- /// Check to see if history should be recorded.
- /// mode is RUN, SAVE, AUTOSAVE, or BEAUTIFY
- public void record(String program, int mode) {
- if (readOnlySketch) return;
-
- if (!Preferences.getBoolean("history.recording")) return;
-
- if ((lastRecorded != null) &&
- (lastRecorded.equals(program))) return;
-
- String modeStr = null;
- switch (mode) {
- case RUN: modeStr = "run"; break;
- case SAVE: modeStr = "save"; break;
- case AUTOSAVE: modeStr = "autosave"; break;
- case BEAUTIFY: modeStr = "beautify"; break;
- }
-
- try {
- boolean noPreviousHistory = false;
-
- ByteArrayOutputStream old = null;
- if (historyFile.exists()) {
- InputStream oldStream = new GZIPInputStream(new BufferedInputStream(new FileInputStream(historyFile)));
- old = new ByteArrayOutputStream();
-
- int c = oldStream.read();
- while (c != -1) {
- old.write(c);
- c = oldStream.read();
- }
- //return out.toByteArray();
- oldStream.close();
-
- } else {
- noPreviousHistory = true; // rebuild menu
- }
-
- OutputStream historyStream =
- new GZIPOutputStream(new FileOutputStream(historyFile));
-
- if (old != null) {
- historyStream.write(old.toByteArray());
- }
- PrintWriter historyWriter =
- new PrintWriter(new OutputStreamWriter(historyStream));
-
- historyWriter.println();
- historyWriter.println(HISTORY_SEPARATOR);
-
- Calendar now = Calendar.getInstance();
- // 2002 06 18 11 43 29
- // when listing, study for descrepancies.. if all are
- // 2002, then don't list the year and soforth.
- // for the other end, if all minutes are unique,
- // then don't show seconds
- int year = now.get(Calendar.YEAR);
- int month = now.get(Calendar.MONTH) + 1;
- int day = now.get(Calendar.DAY_OF_MONTH);
- int hour = now.get(Calendar.HOUR_OF_DAY);
- int minute = now.get(Calendar.MINUTE);
- int second = now.get(Calendar.SECOND);
- String parseDate = year + " " + month + " " + day + " " +
- hour + " " + minute + " " + second;
-
- String readableDate = now.getTime().toString();
-
- // increment this so sketchbook won't be mangled
- // each time this format has to change
- String historyVersion = "1";
- //Date date = new Date();
- //String datestamp = date.toString();
-
- historyWriter.println(historyVersion + " " + modeStr + " - " +
- parseDate + " - " + readableDate);
- historyWriter.println();
- historyWriter.println(program);
- historyWriter.flush(); // ??
- lastRecorded = program;
-
- //JMenuItem menuItem = new JMenuItem(modeStr + " - " + readableDate);
- JMenuItem menuItem = new JMenuItem(modeStr + " - " + readableDate);
- menuItem.addActionListener(menuListener);
- menu.insert(menuItem, 2);
-
- historyWriter.flush();
- historyWriter.close();
-
- if (noPreviousHistory) {
- // to get add the actual menu, to get the 'clear' item in there
- //rebuildMenu(historyFile.getPath());
- rebuildMenu();
- }
-
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
-
- public void retrieve(String selection) {
- //System.out.println("sel '" + selection + "'");
- String readableDate =
- selection.substring(selection.indexOf("-") + 2);
-
- // make history for the current guy
- record(editor.textarea.getText(), AUTOSAVE);
- // mark editor text as having been edited
-
- try {
- BufferedReader reader = new BufferedReader(new InputStreamReader(new GZIPInputStream(new FileInputStream(historyFile))));
- String line = null;
-
- int historyCount = 0;
- String historyList[] = new String[100];
-
- try {
- boolean found = false;
- while ((line = reader.readLine()) != null) {
- //System.out.println("->" + line);
- if (line.equals(HISTORY_SEPARATOR)) {
- line = reader.readLine();
- if (line.indexOf(readableDate) != -1) { // this is the one
- found = true;
- break;
- }
- }
- }
- if (found) {
- // read lines until the next separator
- line = reader.readLine(); // ignored
- //String sep = System.getProperty("line.separator");
- StringBuffer buffer = new StringBuffer();
- while ((line = reader.readLine()) != null) {
- if (line.equals(HISTORY_SEPARATOR)) break;
- //textarea.append(line + sep);
- //buffer.append(line + sep); // JTextPane wants only \n going in
- buffer.append(line + "\n");
- //System.out.println("'" + line + "'");
- }
- //textarea.editorSetText(buffer.toString());
- editor.changeText(buffer.toString(), true);
- lastRecorded = editor.textarea.getText();
- editor.setSketchModified(false);
-
- } else {
- System.err.println("couldn't find history entry for " +
- "'" + readableDate + "'");
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
-
-// class HistoryMenuListener implements ActionListener {
-// public void actionPerformed(ActionEvent e) {
-// editor.selectHistory(e.getActionCommand);
-// }
-// }
-
-
- //public void rebuildHistoryMenu(String path) {
- //rebuildHistoryMenu(historyMenu, path);
- //}
-
-
- //public void rebuildHistoryMenu(Menu menu, String path) {
- public void rebuildMenu() { //String path) {
- //if (!recordingHistory) return;
- //if (!Preferences.getBoolean("history.recording")) return;
-
- menu.removeAll();
-
- //File hfile = new File(path);
- //if (!hfile.exists()) return; // no history yet
- if (!historyFile.exists()) return;
-
- JMenuItem item = new JMenuItem("Clear History");
- item.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- if (!historyFile.delete()) {
- //System.err.println("couldn't erase history");
- Base.showWarning("History Problem",
- "Could not erase history", null);
- }
- rebuildMenu();
- //SketchHistory.this.rebuildMenu(historyFile.getPath());
- }
- });
- menu.add(item);
- menu.addSeparator();
-
- try {
- BufferedReader reader = new BufferedReader(new InputStreamReader(new GZIPInputStream(new FileInputStream(historyFile))));
- String line = null;
-
- int historyCount = 0;
- String historyList[] = new String[100];
-
- try {
- while ((line = reader.readLine()) != null) {
- //while (line = reader.readLine()) {
- //while (true) { line = reader.readLine();
- //if (line == null) continue;
- //System.out.println("line: " + line);
- if (line.equals(HISTORY_SEPARATOR)) {
- // next line is the good stuff
- line = reader.readLine();
- int version =
- Integer.parseInt(line.substring(0, line.indexOf(' ')));
- if (version == 1) {
- String whysub = line.substring(2); // after "1 "
- String why = whysub.substring(0, whysub.indexOf(" -"));
- //System.out.println("'" + why + "'");
-
- String readable = line.substring(line.lastIndexOf("-") + 2);
- if (historyList.length == historyCount) {
- String temp[] = new String[historyCount*2];
- System.arraycopy(historyList, 0, temp, 0, historyCount);
- historyList = temp;
- }
- historyList[historyCount++] = why + " - " + readable;
-
- } // otherwise don't know what to do
- }
- }
- //System.out.println(line);
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- // add the items to the menu in reverse order
-
- //ActionListener historyMenuListener =
- // new ActionListener() {
- // public void actionPerformed(ActionEvent e) {
- // editor.retrieveHistory(e.getActionCommand());
- //}
- //};
-
- for (int i = historyCount-1; i >= 0; --i) {
- JMenuItem mi = new JMenuItem(historyList[i]);
- mi.addActionListener(menuListener);
- menu.add(mi);
- }
-
- reader.close();
-
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-}
-
-
-*/
diff --git a/app/src/processing/app/SwingWorker.java b/app/src/processing/app/SwingWorker.java
deleted file mode 100644
index feffc9fb4..000000000
--- a/app/src/processing/app/SwingWorker.java
+++ /dev/null
@@ -1,131 +0,0 @@
-package processing.app;
-
-import javax.swing.SwingUtilities;
-
-/**
- * This is the 3rd version of SwingWorker (also known as
- * SwingWorker 3), an abstract class that you subclass to
- * perform GUI-related work in a dedicated thread. For
- * instructions on and examples of using this class, see:
- *
- * http://java.sun.com/docs/books/tutorial/uiswing/misc/threads.html
- *
- * Note that the API changed slightly in the 3rd version:
- * You must now invoke start() on the SwingWorker after
- * creating it.
- */
-public abstract class SwingWorker {
- private Object value; // see getValue(), setValue()
-
- /**
- * Class to maintain reference to current worker thread
- * under separate synchronization control.
- */
- private static class ThreadVar {
- private Thread thread;
- ThreadVar(Thread t) { thread = t; }
- synchronized Thread get() { return thread; }
- synchronized void clear() { thread = null; }
- }
-
- private ThreadVar threadVar;
-
- /**
- * Get the value produced by the worker thread, or null if it
- * hasn't been constructed yet.
- */
- protected synchronized Object getValue() {
- return value;
- }
-
- /**
- * Set the value produced by worker thread
- */
- private synchronized void setValue(Object x) {
- value = x;
- }
-
- /**
- * Compute the value to be returned by the get method.
- */
- public abstract Object construct();
-
- /**
- * Called on the event dispatching thread (not on the worker thread)
- * after the construct method has returned.
- */
- public void finished() {
- }
-
- /**
- * A new method that interrupts the worker thread. Call this method
- * to force the worker to stop what it's doing.
- */
- public void interrupt() {
- Thread t = threadVar.get();
- if (t != null) {
- t.interrupt();
- }
- threadVar.clear();
- }
-
- /**
- * Return the value created by the construct method.
- * Returns null if either the constructing thread or the current
- * thread was interrupted before a value was produced.
- *
- * @return the value created by the construct method
- */
- public Object get() {
- while (true) {
- Thread t = threadVar.get();
- if (t == null) {
- return getValue();
- }
- try {
- t.join();
- }
- catch (InterruptedException e) {
- Thread.currentThread().interrupt(); // propagate
- return null;
- }
- }
- }
-
-
- /**
- * Start a thread that will call the construct method
- * and then exit.
- */
- public SwingWorker() {
- final Runnable doFinished = new Runnable() {
- public void run() { finished(); }
- };
-
- Runnable doConstruct = new Runnable() {
- public void run() {
- try {
- setValue(construct());
- }
- finally {
- threadVar.clear();
- }
-
- SwingUtilities.invokeLater(doFinished);
- }
- };
-
- Thread t = new Thread(doConstruct);
- threadVar = new ThreadVar(t);
- }
-
- /**
- * Start the worker thread.
- */
- public void start() {
- Thread t = threadVar.get();
- if (t != null) {
- t.start();
- }
- }
-}
diff --git a/build/linux/make.sh b/build/linux/make.sh
index 9c99fee72..3d2f8fc44 100755
--- a/build/linux/make.sh
+++ b/build/linux/make.sh
@@ -107,8 +107,7 @@ cd ../..
cd app
-#CLASSPATH="../build/linux/work/lib/core.jar:../build/linux/work/lib/mrj.jar:../build/linux/work/lib/antlr.jar:../build/linux/work/lib/oro.jar:../build/linux/work/lib/registry.jar:../build/linux/work/java/lib/rt.jar"
-CLASSPATH="../build/linux/work/lib/core.jar:../build/linux/work/lib/antlr.jar:../build/linux/work/lib/oro.jar:../build/linux/work/lib/registry.jar:../build/linux/work/java/lib/rt.jar"
+CLASSPATH="../build/linux/work/lib/core.jar:../build/linux/work/lib/apple.jar:../build/linux/work/lib/antlr.jar:../build/linux/work/lib/oro.jar:../build/linux/work/lib/registry.jar:../build/linux/work/java/lib/rt.jar"
../build/linux/work/jikes -target 1.3 +D -classpath $CLASSPATH:../build/linux/work/classes -d ../build/linux/work/classes src/processing/app/*.java src/processing/app/preproc/*.java src/processing/app/syntax/*.java src/processing/app/tools/*.java
diff --git a/build/windows/make.sh b/build/windows/make.sh
index f54a3bd94..331e20a9d 100755
--- a/build/windows/make.sh
+++ b/build/windows/make.sh
@@ -145,8 +145,7 @@ fi
cd app
-#CLASSPATH="..\\build\\windows\\work\\lib\\core.jar;..\\build\\windows\\work\\lib\\mrj.jar;..\\build\\windows\\work\\lib\antlr.jar;..\\build\\windows\\work\\lib\\oro.jar;..\\build\\windows\\work\\lib\\registry.jar;..\\build\\windows\\work\\java\\lib\\rt.jar"
-CLASSPATH="..\\build\\windows\\work\\lib\\core.jar;..\\build\\windows\\work\\lib\antlr.jar;..\\build\\windows\\work\\lib\\oro.jar;..\\build\\windows\\work\\lib\\registry.jar;..\\build\\windows\\work\\java\\lib\\rt.jar"
+CLASSPATH="..\\build\\windows\\work\\lib\\core.jar;..\\build\\windows\\work\\lib\\apple.jar;..\\build\\windows\\work\\lib\antlr.jar;..\\build\\windows\\work\\lib\\oro.jar;..\\build\\windows\\work\\lib\\registry.jar;..\\build\\windows\\work\\java\\lib\\rt.jar"
# compile the code as java 1.3, so that the application will run and
# show the user an error, rather than crapping out with some strange