1 package isac.gui.treetable;
3 import isac.gui.Worksheet;
4 import isac.gui.mawen.editor.EditorListener;
5 import isac.gui.mawen.syntax.Ast;
6 import isac.gui.mawen.syntax.XSyntax;
7 import isac.interfaces.IEditor;
8 import isac.util.formulae.Formula;
10 import java.awt.BorderLayout;
11 import java.awt.Color;
12 import java.awt.Component;
13 import java.awt.Dimension;
14 import java.awt.Rectangle;
15 import java.util.ArrayList;
16 import java.util.EventObject;
17 import java.util.Iterator;
19 import javax.swing.JPanel;
20 import javax.swing.JTextField;
21 import javax.swing.JTree;
22 import javax.swing.UIManager;
23 import javax.swing.border.LineBorder;
24 import javax.swing.event.CellEditorListener;
25 import javax.swing.event.ChangeEvent;
26 import javax.swing.tree.TreeCellRenderer;
28 public class CalcTreeCellEditor implements javax.swing.tree.TreeCellEditor {
30 protected ArrayList<CellEditorListener> listeners_;
31 protected Worksheet worksheet_;
33 protected Object editedNode_;
34 protected TreeCellRenderer renderer_;
36 protected IEditor editor_;
37 protected JTextField tacticText_;
40 protected JPanel editorPanel_;
44 public static final int SUBCELL_FORMULA = 1;
45 public static final int SUBCELL_TACTIC = 2;
47 public CalcTreeCellEditor( TreeCellRenderer renderer, Worksheet ws ) {
48 listeners_ = new ArrayList<CellEditorListener>();
53 editor_ = EditorFactory.getFormulaEditor();
54 editor_.addEditorListener(new EditorListener() {
57 public void notifyLocalCheck() {
58 System.out.println("notifyLocalCheck");
62 public void notifyIsaCheck() {
63 /*err*/ editedNode_ = new Formula(editor_.getMathText(), editor_.getFormula());
66 /*err*/public void notifyBraille(Ast.Ast formula) {
67 System.out.println("output to Braille display:");
68 System.out.println(Ast.math_string_of(formula));
73 tacticText_ = new JTextField();
76 editorPanel_ = new JPanel();
78 editorPanel_.setOpaque(true);
79 editorPanel_.setBackground(UIManager.getColor("Tree.background"));
81 // GridBagLayout gbl = new GridBagLayout();
82 editorPanel_.setLayout(new BorderLayout());
84 // GridBagConstraints gbc = new GridBagConstraints();
85 // gbc.gridwidth = GridBagConstraints.REMAINDER;
86 // gbc.fill = GridBagConstraints.BOTH;
90 // gbc.anchor = GridBagConstraints.WEST;
94 // gbl.setConstraints( ep, gbc );
95 editorPanel_.add(editor_.getComponent(), BorderLayout.CENTER);
97 // gbc.anchor = GridBagConstraints.EAST;
98 // gbc.insets = new Insets( 0, 30, 0, 0 );
99 // gbl.setConstraints( tacticText_, gbc );
100 editorPanel_.add(tacticText_, BorderLayout.SOUTH);
105 public void activateSubCell( int subcell ) {
109 public int getSubCell() {
113 public void addCellEditorListener(CellEditorListener listener) {
114 if( !listeners_.contains( listener ) )
115 listeners_.add( listener );
116 System.out.println("### Listeners : " + listeners_.size() );
117 Iterator<CellEditorListener> it = listeners_.iterator();
119 System.out.println( it.next().toString() );
122 public void notifyWorksheet() {
123 if( worksheet_ != null )
124 worksheet_.editingStopped( new ChangeEvent( this ) );
127 public Object getCellEditorValue() {
131 public boolean isCellEditable(EventObject e) {
135 public void removeCellEditorListener(CellEditorListener listener) {
136 listeners_.remove( listener );
139 public boolean shouldSelectCell(EventObject e) {
143 public boolean stopCellEditing() {
144 for( int i = 0; i < listeners_.size(); i++ )
145 ((CellEditorListener)(listeners_.get(i))).editingStopped( new ChangeEvent( this ) );
149 public void cancelCellEditing() {
150 for( int i = 0; i < listeners_.size(); i++ )
151 ((CellEditorListener)(listeners_.get(i))).editingCanceled( new ChangeEvent( this ) );
153 /**called by double-clicking TreeTextPanel (which includes formula and tactic textfield)*/
155 public Component getTreeCellEditorComponent(JTree tree, Object value,
156 boolean isSelected, boolean expanded, boolean leaf, int row) {
161 return renderer_.getTreeCellRendererComponent(tree, value, true, expanded, leaf, row, true);
165 if( !(value instanceof CalcModelNode ) )
168 CalcModelNode current_node = (CalcModelNode) value;
171 if (editor_ instanceof JTextField) {
172 editor_.setFormula( current_node.toString() );
175 if (current_node.getFormula() == null) {
177 /*err*/editor_.setFormula(new Ast.Constant("GAP"));
180 /*err*/editor_.setFormula(current_node.getFormula().getFormula().getTerm() );
188 tacticText_.setText(((CalcModelNode)value).getSecondaryString() + " ");
190 catch (Exception e) {
191 tacticText_.setText("");
194 if( subCell_ == SUBCELL_TACTIC ) {
195 if (editor_ instanceof JTextField) {
196 ((JTextField)editor_).setEditable( false );
197 ((JTextField)editor_).setEnabled( false );
202 tacticText_.setBorder(new LineBorder( Color.BLACK ) );
203 tacticText_.setEditable( true );
204 tacticText_.setEnabled( true );
205 tacticText_.requestFocusInWindow();
208 if( subCell_ == SUBCELL_FORMULA ) {
209 tacticText_.setEditable( false );
210 tacticText_.setEnabled( false );
211 if (editor_ instanceof JTextField) {
212 ((JTextField)editor_).setBorder(new LineBorder( Color.BLACK ) );
213 ((JTextField)editor_).setEditable( true );
214 ((JTextField)editor_).setEnabled( true );
215 ((JTextField)editor_).requestFocusInWindow();
219 editorPanel_.revalidate();
220 editorPanel_.setBackground(Color.RED);
221 Rectangle worksheet_rect = this.worksheet_.getBounds();
222 editorPanel_.setPreferredSize(new Dimension(worksheet_rect.width - 50, editor_.getExpressionSize().height + 25));
223 editorPanel_.revalidate();