bug 3051 + cleaning
[scilab.git] / scilab / modules / console / src / java / org / scilab / modules / console / SciInputParsingManager.java
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2007-2008 - 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.console;
14
15 import java.awt.Point;
16
17 import javax.swing.JPanel;
18
19 import com.artenum.rosetta.interfaces.core.InputParsingManager;
20 import com.artenum.rosetta.interfaces.ui.InputCommandView;
21 import com.artenum.rosetta.interfaces.ui.PromptView;
22 import com.artenum.rosetta.util.StringConstants;
23
24 import org.scilab.modules.completion.Completion;
25
26 /**
27  * @author Vincent COUVERT
28  *
29  */
30 public class SciInputParsingManager implements InputParsingManager {
31
32         private InputCommandView inputCommandView;
33         private PromptView promptView;
34         private Point windowCompletionPosition;
35
36         /**
37          * Default constructor
38          */
39         public SciInputParsingManager() {
40                 windowCompletionPosition = new Point(0, 0);
41         }
42
43         /**
44          * Append a string to the console input
45          * @param content the string to append
46          * @see com.artenum.rosetta.interfaces.core.InputParsingManager#append(java.lang.String)
47          */
48         public void append(String content) {
49                 inputCommandView.append(content);
50         }
51
52         /**
53          * Get the position of the caret in the console input
54          * @return the position as an int value
55          * @see com.artenum.rosetta.interfaces.core.InputParsingManager#getCaretPosition()
56          */
57         public int getCaretPosition() {
58                 return inputCommandView.getCaretPosition();
59         }
60
61         /**
62          * Read the text entered (by the user) in the console
63          * @return the text entered
64          * @see com.artenum.rosetta.interfaces.core.InputParsingManager#getCommandLine()
65          */
66         public String getCommandLine() {
67                 return inputCommandView.getText();
68         }
69
70         /**
71          * Get the level to use for completion (which keywork we sould use for completion ?)
72          * @return the level
73          * @see com.artenum.rosetta.interfaces.core.InputParsingManager#getCompletionLevel()
74          */
75         public int getCompletionLevel() {
76                 // Always zero for first implementation in Scilab
77                 return 0;
78         }
79
80         /**
81          * Get the number of lines in the console input
82          * @return the number of lines
83          * @see com.artenum.rosetta.interfaces.core.InputParsingManager#getNumberOfLines()
84          */
85         public int getNumberOfLines() {
86                 int result = inputCommandView.getText().split(StringConstants.NEW_LINE).length;
87                 if (inputCommandView.getText().lastIndexOf(StringConstants.NEW_LINE) != -1) {
88                         result++;
89                 }
90                 return result;
91         }
92
93         /**
94          * Get the string to use for completion (see completion level)
95          * @param level the level used for completion
96          * @return the string to use as a keyword for completion
97          * @see com.artenum.rosetta.interfaces.core.InputParsingManager#getPartLevel(int)
98          */
99         public String getPartLevel(int level) {
100                 String wholeLine = getCommandLine();
101                 int caretPos = getCaretPosition();
102
103                 String lineToParse = wholeLine.substring(0, caretPos);
104
105                 return Completion.getPartLevel(lineToParse);
106         }
107
108         /**
109          * Get the string to use for completion (see completion level)
110          * @param level the level used for completion
111          * @return the string to use as a keyword for completion
112          * @see com.artenum.rosetta.interfaces.core.InputParsingManager#getPartLevel(int)
113          */
114         public String getFilePartLevel(int level) {
115                 String wholeLine = getCommandLine();
116                 int caretPos = getCaretPosition();
117
118                 String lineToParse = wholeLine.substring(0, caretPos);
119                 return Completion.getFilePartLevel(lineToParse);
120         }
121
122         /**
123          * Get the position where the completion window has to be displayed
124          * @return the position
125          * @see com.artenum.rosetta.interfaces.core.InputParsingManager#getWindowCompletionLocation()
126          */
127         public Point getWindowCompletionLocation() {
128                 windowCompletionPosition.setLocation(inputCommandView.getCaretLocation());
129                 windowCompletionPosition.translate(-((JPanel) promptView).getWidth(), 0);
130                 return windowCompletionPosition;
131         }
132
133         /**
134          * Is a block currently edited in the console input ?
135          * @return true if a block is currently edited (false else)
136          * @see com.artenum.rosetta.interfaces.core.InputParsingManager#isBlockEditing()
137          */
138         public boolean isBlockEditing() {
139                 // FIXME : No block editing by default
140                 return false;
141         }
142
143         /**
144          * Reset the input of the console (delete all entries)
145          * @see com.artenum.rosetta.interfaces.core.InputParsingManager#reset()
146          */
147         public void reset() {
148                 inputCommandView.reset();
149         }
150
151         /**
152          * Set the input command view associated to this parsing manager
153          * @param inputCommandView the command view object to associate
154          * @see com.artenum.rosetta.interfaces.core.InputParsingManager#setInputCommandView(com.artenum.rosetta.interfaces.ui.InputCommandView)
155          */
156         public void setInputCommandView(InputCommandView inputCommandView) {
157                 this.inputCommandView = inputCommandView;
158         }
159
160         /**
161          * Append the text selected in the completioon window to the console input
162          * @param completionResult the string to append
163          * @see com.artenum.rosetta.interfaces.core.InputParsingManager#writeCompletionPart(java.lang.String)
164          */
165         public void writeCompletionPart(String completionResult) {
166                 // Add to the input view the end of the selected item
167                 inputCommandView.append(completionResult.substring(getPartLevel(getCompletionLevel()).length()));
168         }
169
170         /**
171          * Delete the character just before the caret position
172          * @see com.artenum.rosetta.interfaces.core.InputParsingManager#backspace()
173          */
174         public void backspace() {
175                 inputCommandView.backspace();
176         }
177
178         /**
179          * Get the prompt view associated to the parsing manager
180          * @return the promptView to associate
181          */
182         public PromptView getPromptView() {
183                 return promptView;
184         }
185
186         /**
187          * Set the prompt view associated to the parsing manager
188          * @param promptView the promptView to set
189          */
190         public void setPromptView(PromptView promptView) {
191                 this.promptView = promptView;
192         }
193
194 }