new modal dialog for export to application

This commit is contained in:
benfry
2008-11-21 14:42:45 +00:00
parent c193f1e636
commit 2388329037
4 changed files with 169 additions and 57 deletions
+2 -1
View File
@@ -2063,11 +2063,12 @@ public class Editor extends JFrame implements RunnerListener {
public void run() {
statusNotice("Exporting application...");
try {
if (sketch.exportApplication()) {
if (sketch.exportApplicationPrompt()) {
Base.openFolder(sketch.getFolder());
statusNotice("Done exporting.");
} else {
// error message will already be visible
// or there was no error, in which case it was canceled.
}
} catch (Exception e) {
statusNotice("Error during export.");
+150 -52
View File
@@ -29,11 +29,14 @@ import processing.app.preproc.*;
import processing.core.*;
import java.awt.*;
import java.awt.event.*;
import java.beans.*;
import java.io.*;
import java.util.*;
import java.util.zip.*;
import javax.swing.*;
import javax.swing.border.TitledBorder;
/**
@@ -1900,64 +1903,159 @@ public class Sketch {
}
public boolean exportApplicationPrompt() throws IOException, RunnerException {
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
panel.add(new JLabel("Export to Application"));
final JCheckBox windowsButton = new JCheckBox("Windows");
windowsButton.setMnemonic(KeyEvent.VK_W);
windowsButton.setSelected(Preferences.getBoolean("export.application.platform.windows"));
windowsButton.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
Preferences.setBoolean("export.application.platform.windows", windowsButton.isSelected());
}
});
final JCheckBox macosxButton = new JCheckBox("Mac OS X");
macosxButton.setMnemonic(KeyEvent.VK_M);
macosxButton.setSelected(Preferences.getBoolean("export.application.platform.macosx"));
macosxButton.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
Preferences.setBoolean("export.application.platform.macosx", macosxButton.isSelected());
}
});
final JCheckBox linuxButton = new JCheckBox("Linux");
linuxButton.setMnemonic(KeyEvent.VK_L);
linuxButton.setSelected(Preferences.getBoolean("export.application.platform.linux"));
linuxButton.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
Preferences.setBoolean("export.application.platform.linux", linuxButton.isSelected());
}
});
JPanel platformPanel = new JPanel();
platformPanel.setLayout(new BoxLayout(platformPanel, BoxLayout.X_AXIS));
platformPanel.add(windowsButton);
platformPanel.add(macosxButton);
platformPanel.add(linuxButton);
platformPanel.setBorder(new TitledBorder("Platforms"));
panel.add(platformPanel);
final JCheckBox fullscreenButton = new JCheckBox("Full Screen (Present mode)");
fullscreenButton.setMnemonic(KeyEvent.VK_F);
fullscreenButton.setSelected(Preferences.getBoolean("export.application.fullscreen"));
fullscreenButton.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
Preferences.setBoolean("export.application.fullscreen", fullscreenButton.isSelected());
}
});
JPanel optionPanel = new JPanel();
optionPanel.setLayout(new BoxLayout(optionPanel, BoxLayout.Y_AXIS));
optionPanel.add(fullscreenButton);
optionPanel.setBorder(new TitledBorder("Options"));
panel.add(optionPanel);
JPanel actionPanel = new JPanel();
optionPanel.setLayout(new BoxLayout(optionPanel, BoxLayout.X_AXIS));
optionPanel.add(Box.createHorizontalGlue());
// final JDialog frame = new JDialog(editor, "Export to Application");
// JButton cancelButton = new JButton("Cancel");
// cancelButton.addActionListener(new ActionListener() {
// public void actionPerformed(ActionEvent e) {
// frame.dispose();
// return false;
// }
// });
// Add the buttons in platform-specific order
// if (PApplet.platform == PConstants.MACOSX) {
// optionPanel.add(cancelButton);
// optionPanel.add(exportButton);
// } else {
// optionPanel.add(exportButton);
// optionPanel.add(cancelButton);
// }
String[] options = { "Export", "Cancel" };
final JOptionPane optionPane = new JOptionPane(panel,
JOptionPane.QUESTION_MESSAGE,
JOptionPane.YES_NO_OPTION,
null,
options,
options[0]);
final JDialog dialog = new JDialog(editor, "Export to Application", true);
dialog.setContentPane(optionPane);
optionPane.addPropertyChangeListener(new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent e) {
String prop = e.getPropertyName();
if (dialog.isVisible() &&
(e.getSource() == optionPane) &&
(prop.equals(JOptionPane.VALUE_PROPERTY))) {
//If you were going to check something
//before closing the window, you'd do
//it here.
dialog.setVisible(false);
}
}
});
dialog.pack();
dialog.setVisible(true);
Object value = optionPane.getValue();
if (value.equals(options[0])) {
return exportApplication();
} else if (value.equals(options[1]) || value.equals(new Integer(-1))) {
// closed window by hitting Cancel or ESC
editor.statusNotice("Export to Application canceled.");
}
return false;
// frame.add(panel);
// frame.pack();
// frame.setVisible(true);
}
/**
* Export to application.
* <PRE>
* +-------------------------------------------------------+
* + +
* + Export to: [ Application + ] [ OK ] +
* + +
* + > Advanced +
* + - - - - - - - - - - - - - - - - - - - - - - - - - - - +
* + Version: [ Java 1.1 + ] +
* + +
* + Not much point to using Java 1.1 for applications. +
* + To run applications, all users will have to +
* + install Java, in which case they'll most likely +
* + have version 1.3 or later. +
* + - - - - - - - - - - - - - - - - - - - - - - - - - - - +
* + Version: [ Java 1.3 + ] +
* + +
* + Java 1.3 is the recommended setting for exporting +
* + applications. Applications will run on any Windows +
* + or Unix machine with Java installed. Mac OS X has +
* + Java installed with the operation system, so there +
* + is no additional installation will be required. +
* + +
* + - - - - - - - - - - - - - - - - - - - - - - - - - - - +
* + +
* + Platform: [ Mac OS X + ] <-- defaults to current platform
* + +
* + Exports the application as a double-clickable +
* + .app package, compatible with Mac OS X. +
* + - - - - - - - - - - - - - - - - - - - - - - - - - - - +
* + Platform: [ Windows + ] +
* + +
* + Exports the application as a double-clickable +
* + .exe and a handful of supporting files. +
* + - - - - - - - - - - - - - - - - - - - - - - - - - - - +
* + Platform: [ jar file + ] +
* + +
* + A jar file can be used on any platform that has +
* + Java installed. Simply doube-click the jar (or type +
* + "java -jar sketch.jar" at a command prompt) to run +
* + the application. It is the least fancy method for +
* + exporting. +
* + +
* +-------------------------------------------------------+
* </PRE>
* Export to application via GUI.
*/
protected boolean exportApplication() throws IOException, RunnerException {
String windowsPath = new File(folder, "application.windows").getAbsolutePath();
String macosxPath = new File(folder, "application.macosx").getAbsolutePath();
String linuxPath = new File(folder, "application.linux").getAbsolutePath();
return (exportApplication(windowsPath, PConstants.WINDOWS) &&
exportApplication(macosxPath, PConstants.MACOSX) &&
exportApplication(linuxPath, PConstants.LINUX));
if (Preferences.getBoolean("export.application.platform.windows")) {
String windowsPath =
new File(folder, "application.windows").getAbsolutePath();
if (!exportApplication(windowsPath, PConstants.WINDOWS)) {
return false;
}
}
if (Preferences.getBoolean("export.application.platform.macosx")) {
String macosxPath =
new File(folder, "application.macosx").getAbsolutePath();
if (!exportApplication(macosxPath, PConstants.MACOSX)) {
return false;
}
}
if (Preferences.getBoolean("export.application.platform.linux")) {
String linuxPath =
new File(folder, "application.linux").getAbsolutePath();
if (!exportApplication(linuxPath, PConstants.LINUX)) {
return false;
}
}
return true;
}
/**
* Export to application without GUI.
*/
public boolean exportApplication(String destPath,
int exportPlatform) throws IOException, RunnerException {
// make sure the user didn't hide the sketch folder
+10 -2
View File
@@ -235,10 +235,18 @@ sketchbook.closing_last_window_quits.macosx = false
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
history.recording = true
#history.recording = true
# for advanced users, enable option to export a library
export.library = false
#export.library = false
# which platforms to export by default
export.application.platform.windows = true
export.application.platform.macosx = true
export.application.platform.linux = true
# whether or not to export as full screen (present) mode
export.application.fullscreen = false
# false will place all exported files into a single .jar
export.applet.separate_jar_files = false
+7 -2
View File
@@ -86,6 +86,11 @@ import javax.swing.SwingUtilities;
* PApplet, you can instead embed the PApplet inside another GUI the way you
* would any other Component.
* <p/>
* It is also possible to resize the Processing window by including
* <tt>frame.setResizable(true)</tt> inside your <tt>setup()</tt> method.
* Note that the Java method <tt>frame.setSize()</tt> will not work unless
* you first set the frame to be resizable.
* <p/>
* Because the default animation thread will run at 60 frames per second,
* an embedded PApplet can make the parent sluggish. You can use frameRate()
* to make it update less often, or you can use noLoop() and loop() to disable
@@ -190,7 +195,7 @@ public class PApplet extends Applet
* PConstants WINDOWS, MACOSX, MACOS9, LINUX or OTHER.
*/
static public int platform;
/**
* Name associated with the current 'platform' (see PConstants.platformNames)
*/
@@ -198,7 +203,7 @@ public class PApplet extends Applet
static {
String osname = System.getProperty("os.name");
if (osname.indexOf("Mac") != -1) {
platform = MACOSX;