aboutsummaryrefslogtreecommitdiffstats
path: root/trunk/infrastructure/rhino1_7R1/toolsrc/org/mozilla/javascript/tools/shell/JSConsole.java
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/infrastructure/rhino1_7R1/toolsrc/org/mozilla/javascript/tools/shell/JSConsole.java')
-rw-r--r--trunk/infrastructure/rhino1_7R1/toolsrc/org/mozilla/javascript/tools/shell/JSConsole.java225
1 files changed, 225 insertions, 0 deletions
diff --git a/trunk/infrastructure/rhino1_7R1/toolsrc/org/mozilla/javascript/tools/shell/JSConsole.java b/trunk/infrastructure/rhino1_7R1/toolsrc/org/mozilla/javascript/tools/shell/JSConsole.java
new file mode 100644
index 0000000..f6fe3a1
--- /dev/null
+++ b/trunk/infrastructure/rhino1_7R1/toolsrc/org/mozilla/javascript/tools/shell/JSConsole.java
@@ -0,0 +1,225 @@
+/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+ *
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Rhino JavaScript Debugger code, released
+ * November 21, 2000.
+ *
+ * The Initial Developer of the Original Code is
+ * See Beyond Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 2000
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Christopher Oliver
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * the GNU General Public License Version 2 or later (the "GPL"), in which
+ * case the provisions of the GPL are applicable instead of those above. If
+ * you wish to allow use of your version of this file only under the terms of
+ * the GPL and not to allow others to use your version of this file under the
+ * MPL, indicate your decision by deleting the provisions above and replacing
+ * them with the notice and other provisions required by the GPL. If you do
+ * not delete the provisions above, a recipient may use your version of this
+ * file under either the MPL or the GPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+package org.mozilla.javascript.tools.shell;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.io.File;
+
+import javax.swing.ButtonGroup;
+import javax.swing.JFileChooser;
+import javax.swing.JFrame;
+import javax.swing.JMenu;
+import javax.swing.JMenuBar;
+import javax.swing.JMenuItem;
+import javax.swing.JOptionPane;
+import javax.swing.JRadioButtonMenuItem;
+import javax.swing.JScrollPane;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
+
+import org.mozilla.javascript.SecurityUtilities;
+
+public class JSConsole extends JFrame implements ActionListener
+{
+ static final long serialVersionUID = 2551225560631876300L;
+
+ private File CWD;
+ private JFileChooser dlg;
+ private ConsoleTextArea consoleTextArea;
+
+ public String chooseFile() {
+ if(CWD == null) {
+ String dir = SecurityUtilities.getSystemProperty("user.dir");
+ if(dir != null) {
+ CWD = new File(dir);
+ }
+ }
+ if(CWD != null) {
+ dlg.setCurrentDirectory(CWD);
+ }
+ dlg.setDialogTitle("Select a file to load");
+ int returnVal = dlg.showOpenDialog(this);
+ if(returnVal == JFileChooser.APPROVE_OPTION) {
+ String result = dlg.getSelectedFile().getPath();
+ CWD = new File(dlg.getSelectedFile().getParent());
+ return result;
+ }
+ return null;
+ }
+
+ public static void main(String args[]) {
+ new JSConsole(args);
+ }
+
+ public void createFileChooser() {
+ dlg = new JFileChooser();
+ javax.swing.filechooser.FileFilter filter =
+ new javax.swing.filechooser.FileFilter() {
+ public boolean accept(File f) {
+ if(f.isDirectory()) {
+ return true;
+ }
+ String name = f.getName();
+ int i = name.lastIndexOf('.');
+ if(i > 0 && i < name.length() -1) {
+ String ext = name.substring(i + 1).toLowerCase();
+ if(ext.equals("js")) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public String getDescription() {
+ return "JavaScript Files (*.js)";
+ }
+ };
+ dlg.addChoosableFileFilter(filter);
+
+ }
+
+ public JSConsole(String[] args) {
+ super("Rhino JavaScript Console");
+ JMenuBar menubar = new JMenuBar();
+ createFileChooser();
+ String[] fileItems = {"Load...", "Exit"};
+ String[] fileCmds = {"Load", "Exit"};
+ char[] fileShortCuts = {'L', 'X'};
+ String[] editItems = {"Cut", "Copy", "Paste"};
+ char[] editShortCuts = {'T', 'C', 'P'};
+ String[] plafItems = {"Metal", "Windows", "Motif"};
+ boolean [] plafState = {true, false, false};
+ JMenu fileMenu = new JMenu("File");
+ fileMenu.setMnemonic('F');
+ JMenu editMenu = new JMenu("Edit");
+ editMenu.setMnemonic('E');
+ JMenu plafMenu = new JMenu("Platform");
+ plafMenu.setMnemonic('P');
+ for(int i = 0; i < fileItems.length; ++i) {
+ JMenuItem item = new JMenuItem(fileItems[i],
+ fileShortCuts[i]);
+ item.setActionCommand(fileCmds[i]);
+ item.addActionListener(this);
+ fileMenu.add(item);
+ }
+ for(int i = 0; i < editItems.length; ++i) {
+ JMenuItem item = new JMenuItem(editItems[i],
+ editShortCuts[i]);
+ item.addActionListener(this);
+ editMenu.add(item);
+ }
+ ButtonGroup group = new ButtonGroup();
+ for(int i = 0; i < plafItems.length; ++i) {
+ JRadioButtonMenuItem item = new JRadioButtonMenuItem(plafItems[i],
+ plafState[i]);
+ group.add(item);
+ item.addActionListener(this);
+ plafMenu.add(item);
+ }
+ menubar.add(fileMenu);
+ menubar.add(editMenu);
+ menubar.add(plafMenu);
+ setJMenuBar(menubar);
+ consoleTextArea = new ConsoleTextArea(args);
+ JScrollPane scroller = new JScrollPane(consoleTextArea);
+ setContentPane(scroller);
+ consoleTextArea.setRows(24);
+ consoleTextArea.setColumns(80);
+ addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e) {
+ System.exit(0);
+ }
+ });
+ pack();
+ setVisible(true);
+ // System.setIn(consoleTextArea.getIn());
+ // System.setOut(consoleTextArea.getOut());
+ // System.setErr(consoleTextArea.getErr());
+ Main.setIn(consoleTextArea.getIn());
+ Main.setOut(consoleTextArea.getOut());
+ Main.setErr(consoleTextArea.getErr());
+ Main.main(args);
+ }
+
+ public void actionPerformed(ActionEvent e) {
+ String cmd = e.getActionCommand();
+ String plaf_name = null;
+ if(cmd.equals("Load")) {
+ String f = chooseFile();
+ if(f != null) {
+ f = f.replace('\\', '/');
+ consoleTextArea.eval("load(\"" + f + "\");");
+ }
+ } else if(cmd.equals("Exit")) {
+ System.exit(0);
+ } else if(cmd.equals("Cut")) {
+ consoleTextArea.cut();
+ } else if(cmd.equals("Copy")) {
+ consoleTextArea.copy();
+ } else if(cmd.equals("Paste")) {
+ consoleTextArea.paste();
+ } else {
+ if(cmd.equals("Metal")) {
+ plaf_name = "javax.swing.plaf.metal.MetalLookAndFeel";
+ } else if(cmd.equals("Windows")) {
+ plaf_name = "com.sun.java.swing.plaf.windows.WindowsLookAndFeel";
+ } else if(cmd.equals("Motif")) {
+ plaf_name = "com.sun.java.swing.plaf.motif.MotifLookAndFeel";
+ }
+ if(plaf_name != null) {
+ try {
+ UIManager.setLookAndFeel(plaf_name);
+ SwingUtilities.updateComponentTreeUI(this);
+ consoleTextArea.postUpdateUI();
+ // updateComponentTreeUI seems to mess up the file
+ // chooser dialog, so just create a new one
+ createFileChooser();
+ } catch(Exception exc) {
+ JOptionPane.showMessageDialog(this,
+ exc.getMessage(),
+ "Platform",
+ JOptionPane.ERROR_MESSAGE);
+ }
+ }
+ }
+
+ }
+
+}