5f5fc4b5ad2cd10ec5910b09b6079c47ce7b6c53
[scilab.git] / scilab / modules / gui / src / java / org / scilab / modules / gui / bridge / console / SwingScilabConsole.java
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2007 - INRIA - Vincent Couvert
4  * 
5  * This file must be used under the terms of the CeCILL.
6  * This source file is licensed as described in the file COPYING, which
7  * you should have received as part of this distribution.  The terms
8  * are also available at    
9  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
10  *
11  */
12
13 package org.scilab.modules.gui.bridge.console;
14
15 import java.awt.Dimension;
16
17 import javax.swing.JTextPane;
18
19 import org.scilab.modules.console.OneCharKeyEventListener;
20 import org.scilab.modules.console.SciConsole;
21 import org.scilab.modules.console.SciHistoryManager;
22 import org.scilab.modules.gui.console.SimpleConsole;
23 import org.scilab.modules.gui.utils.Position;
24 import org.scilab.modules.gui.utils.Size;
25
26 import com.artenum.rosetta.interfaces.ui.InputCommandView;
27 import com.artenum.rosetta.util.StringConstants;
28
29 /**
30  * Swing implementation for Scilab Console in GUIs
31  * This implementation uses JyConsole package
32  * @author Vincent COUVERT
33  */
34 public class SwingScilabConsole extends SciConsole implements SimpleConsole {
35
36         private static final long serialVersionUID = 1L;
37         
38         /**
39          * Constructor
40          */
41         public SwingScilabConsole() {
42                 super();
43         }
44         
45         /**
46          * Displays data in the console
47          * @param dataToDisplay the data to be displayed
48          * @see fr.scilab.console.Console#display(java.lang.String)
49          */
50         public void display(String dataToDisplay) {
51                 this.getConfiguration().getOutputView().append(dataToDisplay);
52         }
53
54         /**
55          * This method is used to display the prompt
56          */
57         public void displayPrompt() {
58                 
59                 InputCommandView inputCmdView = this.getConfiguration().getInputCommandView();
60                 // Show the prompt
61                 this.getConfiguration().getPromptView().setVisible(true);
62
63                 // Show the input command view and its hidden components
64                 inputCmdView.setEditable(true);
65
66                 ((JTextPane) inputCmdView).setCaretColor(((JTextPane) inputCmdView).getForeground());
67
68                 // Remove last line returned given by Scilab (carriage return)
69 //              try {
70 //                      StyledDocument outputStyledDoc = this.getConfiguration().getOutputViewStyledDocument();                 
71 //                      int lastEOL = outputStyledDoc.getText(0, outputStyledDoc.getLength()).lastIndexOf(StringConstants.NEW_LINE);
72 //
73 //                      if (lastEOL > 1) { // To avoid a "javax.swing.text.BadLocationException: Invalid remove" exception
74 //                              outputStyledDoc.remove(lastEOL, outputStyledDoc.getLength() - lastEOL);
75 //                      }
76 //              } catch (BadLocationException e) {
77 //                      e.printStackTrace();
78 //              }
79                 
80                 updateScrollPosition();
81         }
82
83         /**
84          * Reads one user input char
85          * @return the data entered by the user
86          * @see fr.scilab.console.Console#getCharWithoutOutput()
87          */
88         public int getCharWithoutOutput() {
89                 int retChar;
90                 
91                 updateScrollPosition();
92                 
93                 // Avoids reading of an empty buffer
94                 try {
95                         ((SciConsole) this).getCanReadUserInputValue().acquire();
96                 } catch (InterruptedException e) {
97                         // TODO Auto-generated catch block
98                         e.printStackTrace();
99                 }
100                 
101                 this.getConfiguration().getPromptView().setVisible(false);
102                 this.getConfiguration().getInputCommandView().setEditable(false);
103                 
104                 // Add a keylistener which will set the returned char
105                 OneCharKeyEventListener keyListener = new OneCharKeyEventListener(this);
106                 ((JTextPane) this.getConfiguration().getInputCommandView()).addKeyListener(keyListener);
107                 ((JTextPane) this.getConfiguration().getOutputView()).addKeyListener(keyListener);
108                 
109                 // Reads the buffer
110                 retChar = this.getUserInputValue();
111                 ((SciConsole) this).getCanReadUserInputValue().release();
112
113                 // Remove the "more" message and replace it by an empty line
114                 this.clear(-1);
115                 this.display(StringConstants.NEW_LINE);
116
117                 // Remove the key listener
118                 ((JTextPane) this.getConfiguration().getInputCommandView()).removeKeyListener(keyListener);
119                 ((JTextPane) this.getConfiguration().getOutputView()).removeKeyListener(keyListener);
120                 
121                 this.getConfiguration().getPromptView().setVisible(true);
122                 this.getConfiguration().getInputCommandView().setEditable(true);
123
124                 // Send back the focus the the input view
125                 this.getConfiguration().getInputCommandView().requestFocus();
126                 ((JTextPane) this.getConfiguration().getInputCommandView()).getCaret().setVisible(true);
127                 
128                 return retChar;
129         }
130
131         /**
132          * Draw a console
133          */
134         public void draw() {
135                 super.setVisible(true);
136                 super.doLayout();
137         }
138
139         /**
140          * Gets the dimensions (width and height) of a Scilab console
141          * @return the size of the console
142          */
143         public Size getDims() {
144                 return new Size(super.getWidth(), super.getHeight());
145         }
146
147         /**
148          * Gets the position (X-coordinate and Y-coordinates) of a Scilab console
149          * @return the position of the console
150          */
151         public Position getPosition() {
152                 return new Position(this.getX(), this.getY());
153         }
154
155         /**
156          * Gets the visibility status of a console
157          * @return the visibility status of the console (true if the console is visible, false if not)
158          */
159         public boolean isVisible() {
160                 return super.isVisible();
161         }
162
163         /**
164          * Sets the dimensions (width and height) of a Scilab console
165          * @param newSize the size we want to set to the console
166          */
167         public void setDims(Size newSize) {
168                 this.setPreferredSize(new Dimension(newSize.getWidth(), newSize.getHeight()));
169         }
170
171         /**
172          * Sets the position (X-coordinate and Y-coordinate) of a Scilab console
173          * @param newPosition the position we want to set to the console
174          */
175         public void setPosition(Position newPosition) {
176                 this.setLocation(newPosition.getX(), newPosition.getY());
177         }
178
179         /**
180          * Sets the visibility status of a Scilab console
181          * @param newVisibleState the visibility status we want to set to the console
182          */
183         public void setVisible(boolean newVisibleState) {
184                 super.setVisible(newVisibleState);
185         }
186
187         /**
188          * Clears the Console
189          */
190         public void clear() {
191                 super.clear();
192         }
193
194         /**
195           * Sets the prompt displayed in the console
196           * @param prompt the prompt to be displayed in the console
197           */
198         public void setPrompt(String prompt) {
199                 this.getConfiguration().getPromptView().setDefaultPrompt(prompt);
200         }
201         
202         /**
203          * Clear the commands history 
204          */
205         public void clearHistory() {
206                 ((SciHistoryManager) this.getConfiguration().getHistoryManager()).reset();
207         }
208
209 }