KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > edu > rice > cs > drjava > ui > SimpleInteractionsWindow


1 /*BEGIN_COPYRIGHT_BLOCK
2  *
3  * This file is part of DrJava. Download the current version of this project from http://www.drjava.org/
4  * or http://sourceforge.net/projects/drjava/
5  *
6  * DrJava Open Source License
7  *
8  * Copyright (C) 2001-2005 JavaPLT group at Rice University (javaplt@rice.edu). All rights reserved.
9  *
10  * Developed by: Java Programming Languages Team, Rice University, http://www.cs.rice.edu/~javaplt/
11  *
12  * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
13  * documentation files (the "Software"), to deal with the Software without restriction, including without limitation
14  * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and
15  * to permit persons to whom the Software is furnished to do so, subject to the following conditions:
16  *
17  * - Redistributions of source code must retain the above copyright notice, this list of conditions and the
18  * following disclaimers.
19  * - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
20  * following disclaimers in the documentation and/or other materials provided with the distribution.
21  * - Neither the names of DrJava, the JavaPLT, Rice University, nor the names of its contributors may be used to
22  * endorse or promote products derived from this Software without specific prior written permission.
23  * - Products derived from this software may not be called "DrJava" nor use the term "DrJava" as part of their
24  * names without prior written permission from the JavaPLT group. For permission, write to javaplt@rice.edu.
25  *
26  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
27  * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
28  * CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
29  * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
30  * WITH THE SOFTWARE.
31  *
32  *END_COPYRIGHT_BLOCK*/

33
34 package edu.rice.cs.drjava.ui;
35
36 import javax.swing.*;
37 import java.awt.Font JavaDoc;
38 import java.awt.event.*;
39 import java.io.File JavaDoc;
40
41 import edu.rice.cs.drjava.config.FileOption;
42 import edu.rice.cs.drjava.model.repl.*;
43
44 /** A standalone Interactions Window that provides the functionality of DrJava's Interactions Pane in a single JVM.
45  * Useful for quickly testing small pieces of code if DrJava is not running.
46  * @version $Id: SimpleInteractionsWindow.java 3592 2006-03-14 18:50:21Z rcartwright $
47  */

48 public class SimpleInteractionsWindow extends JFrame {
49   //private final SimpleRMIInteractionsModel _rmiModel;
50
private final SimpleInteractionsModel _model;
51   private final InteractionsDJDocument _adapter;
52   private final InteractionsPane _pane;
53   private final InteractionsController _controller;
54
55   public SimpleInteractionsWindow() { this("Interactions Window"); }
56
57   public SimpleInteractionsWindow(String JavaDoc title) {
58     super(title);
59     setSize(600, 400);
60
61     _adapter = new InteractionsDJDocument();
62     //_rmiModel = new SimpleRMIInteractionsModel(_adapter);
63
_model = new SimpleInteractionsModel(_adapter);
64     _pane = new InteractionsPane(_adapter) {
65       public int getPromptPos() {
66         return _model.getDocument().getPromptPos();
67       }
68     };
69     _controller = new InteractionsController(_model, _adapter, _pane);
70
71     _pane.setFont(Font.decode("monospaced"));
72
73     _model.addListener(new InteractionsListener() {
74       public void interactionStarted() { _pane.setEditable(false); }
75       public void interactionEnded() {
76         _controller.moveToPrompt();
77         _pane.setEditable(true);
78       }
79       public void interpreterResetting() { _pane.setEditable(false); }
80       public void interactionErrorOccurred(int offset, int length) { _pane.highlightError(offset, length); }
81       public void interpreterReady(File JavaDoc wd) {
82         _controller.moveToPrompt();
83         _pane.setEditable(true);
84       }
85       public void interpreterExited(int status) { }
86       public void interpreterChanged(boolean inProgress) { _pane.setEditable(inProgress); }
87       public void interpreterResetFailed(Throwable JavaDoc t) { interpreterReady(FileOption.NULL_FILE); }
88       public void interactionIncomplete() {
89         int caretPos = _pane.getCaretPosition();
90         _controller.getConsoleDoc().insertNewLine(caretPos);
91       }
92       public void slaveJVMUsed() { }
93     });
94
95     JScrollPane scroll = new JScrollPane(_pane);
96     getContentPane().add(scroll);
97
98     // Add listener to quit if window is closed
99
this.addWindowListener(new WindowAdapter() {
100       public void windowClosing(WindowEvent ev) { close(); }
101     });
102   }
103
104   /** Terminates this process. This is overridden in DrJava so that is disposes of itself instead of calling
105    * System.exit(0).
106    */

107   protected void close() { System.exit(0); }
108
109   /** Accessor for the controller. */
110   public InteractionsController getController() { return _controller; }
111
112   /** Defines a variable in this window to the given value. */
113   public void defineVariable(String JavaDoc name, Object JavaDoc value) { _model.defineVariable(name, value); }
114
115   /** Defines a final variable in this window to the given value. */
116   public void defineConstant(String JavaDoc name, Object JavaDoc value) { _model.defineConstant(name, value); }
117
118   /** Sets whether protected and private variables and methods can be accessed from within the interpreter. */
119   public void setInterpreterPrivateAccessible(boolean accessible) {
120     _model.setInterpreterPrivateAccessible(accessible);
121   }
122
123   /** Main method to create a SimpleInteractionsWindow from the console. Doesn't take any command line arguments. */
124   public static void main(String JavaDoc[] args) {
125     SimpleInteractionsWindow w = new SimpleInteractionsWindow();
126     if (args.length > 0 && args[0].equals("-debug")) {
127       w.defineVariable("FRAME", w);
128       w.defineVariable("CONTROLLER", w.getController());
129       w.setInterpreterPrivateAccessible(true);
130     }
131     w.setVisible(true);
132   }
133 }
134
Popular Tags