isac-java/src/java/isac/gui/treetable/CalcTreeCellEditor.java
author mmahringer <s1520454056@students.fh-hagenberg.at>
Wed, 06 Sep 2017 13:15:47 +0200
changeset 5198 00b2583bba9e
parent 5195 7151cbfc9f54
child 5200 80152e6a6702
permissions -rw-r--r--
fire NotifyBraille on changeing the Box and Editing values
     1 package isac.gui.treetable;
     2 
     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;
     9 
    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;
    18 
    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;
    27 
    28 public class CalcTreeCellEditor implements javax.swing.tree.TreeCellEditor {
    29 
    30 	protected ArrayList<CellEditorListener> listeners_;
    31 	protected Worksheet worksheet_;
    32 	
    33 	protected Object editedNode_;
    34 	protected TreeCellRenderer renderer_;
    35 	
    36 	protected IEditor editor_;
    37 	protected JTextField tacticText_;
    38 	
    39 	
    40 	protected JPanel editorPanel_;
    41 	
    42 	private int subCell_;
    43 	
    44 	public static final int SUBCELL_FORMULA = 1;
    45 	public static final int SUBCELL_TACTIC = 2;
    46 	
    47 	public CalcTreeCellEditor( TreeCellRenderer renderer, Worksheet ws ) {
    48 		listeners_ = new ArrayList<CellEditorListener>();
    49 		editedNode_ = null;
    50 		subCell_ = 0;
    51 		renderer_ = renderer;
    52 		
    53 		editor_ = EditorFactory.getFormulaEditor();
    54 		editor_.addEditorListener(new EditorListener() {
    55       
    56       @Override
    57       public void notifyLocalCheck() {
    58         System.out.println("notifyLocalCheck");
    59       }
    60       
    61       @Override
    62       public void notifyIsaCheck() {
    63 /*err*/ editedNode_ = new Formula(editor_.getMathText(), editor_.getFormula());
    64         notifyWorksheet();
    65       }
    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));
    69       
    70       }
    71 
    72     });
    73 		tacticText_ = new JTextField();
    74 
    75 		
    76 		editorPanel_ = new JPanel();
    77 		
    78 		editorPanel_.setOpaque(true);
    79 		editorPanel_.setBackground(UIManager.getColor("Tree.background"));
    80 	    
    81 //		GridBagLayout gbl = new GridBagLayout();
    82 		editorPanel_.setLayout(new BorderLayout());
    83 	    
    84 //    GridBagConstraints gbc = new GridBagConstraints();
    85 //    gbc.gridwidth = GridBagConstraints.REMAINDER;
    86 //    gbc.fill = GridBagConstraints.BOTH;
    87 //    gbc.weightx = 1.0;
    88 //    gbc.weighty = 1.0;
    89 //        
    90 //    gbc.anchor = GridBagConstraints.WEST;
    91     
    92     
    93     
    94 //    gbl.setConstraints( ep, gbc );		    
    95     editorPanel_.add(editor_.getComponent(), BorderLayout.CENTER);	
    96     
    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);
   101     
   102     worksheet_ = ws;
   103 	}
   104 	
   105 	public void activateSubCell( int subcell ) {
   106 		subCell_ = subcell;
   107 	}
   108 	
   109 	public int getSubCell() {
   110 		return subCell_;
   111 	}
   112 	
   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();
   118 		while(it.hasNext())
   119 			System.out.println( it.next().toString() );
   120 	}
   121 	
   122 	public void notifyWorksheet() {
   123 		if( worksheet_ != null )
   124 			worksheet_.editingStopped( new ChangeEvent( this ) );
   125 	}
   126 
   127 	public Object getCellEditorValue() {
   128 		return editedNode_;
   129 	}
   130 
   131 	public boolean isCellEditable(EventObject e) {
   132 		return true;
   133 	}
   134 
   135 	public void removeCellEditorListener(CellEditorListener listener) {
   136 		listeners_.remove( listener ); 
   137 	}
   138 
   139 	public boolean shouldSelectCell(EventObject e) {
   140 		return true;
   141 	}
   142 
   143 	public boolean stopCellEditing() {
   144 		for( int i = 0; i < listeners_.size(); i++ )
   145 			((CellEditorListener)(listeners_.get(i))).editingStopped( new ChangeEvent( this ) );
   146 		return true;
   147 	}
   148 
   149 	public void cancelCellEditing() {
   150 		for( int i = 0; i < listeners_.size(); i++ )
   151 			((CellEditorListener)(listeners_.get(i))).editingCanceled( new ChangeEvent( this ) );
   152 	}	
   153 	/**called by double-clicking TreeTextPanel (which includes formula and tactic textfield)*/	
   154         @Override
   155 	public Component getTreeCellEditorComponent(JTree tree, Object value, 
   156 			boolean isSelected, boolean expanded, boolean leaf, int row) {
   157           
   158           
   159 
   160 		if( !isSelected ) {
   161 			return renderer_.getTreeCellRendererComponent(tree, value, true, expanded, leaf, row, true);
   162 		}
   163 		
   164 		editedNode_ = value;
   165 		if( !(value instanceof CalcModelNode ) )
   166 			return null; 
   167     
   168 		CalcModelNode current_node = (CalcModelNode) value;
   169 		
   170 		//
   171 		if (editor_ instanceof JTextField) {
   172 		  editor_.setFormula( current_node.toString() );
   173 		}else {
   174 		  
   175 		  if (current_node.getFormula() == null) {
   176 		    // new Ast
   177 /*err*/editor_.setFormula(new Ast.Constant("GAP"));
   178 		    
   179 		  }else {
   180 /*err*/editor_.setFormula(current_node.getFormula().getFormula().getTerm()   );
   181 		  }
   182 		 
   183 
   184 		}
   185 
   186 		
   187 		try {
   188 			tacticText_.setText(((CalcModelNode)value).getSecondaryString() + "  ");
   189 		} 
   190 		catch (Exception e) {
   191 			tacticText_.setText("");
   192 		}
   193 			    		
   194 		if( subCell_ == SUBCELL_TACTIC ) {
   195 		  if (editor_ instanceof JTextField) {
   196 		    ((JTextField)editor_).setEditable( false );
   197 		    ((JTextField)editor_).setEnabled( false );
   198 		  }
   199 
   200 		  
   201 		  
   202 			tacticText_.setBorder(new LineBorder( Color.BLACK  ) );			
   203 			tacticText_.setEditable( true );
   204 			tacticText_.setEnabled( true );
   205 			tacticText_.requestFocusInWindow();
   206 		}
   207 		
   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();
   216 			}
   217 		}
   218 		
   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();
   224 		tree.revalidate();
   225 		return editorPanel_;
   226 	}
   227 
   228 
   229 
   230 }