1 30 package com.genimen.djeneric.tools.specifier.components; 31 32 import java.awt.event.FocusEvent ; 33 import java.awt.event.FocusListener ; 34 import java.awt.event.KeyEvent ; 35 36 import javax.swing.JComponent ; 37 import javax.swing.JTextArea ; 38 import javax.swing.undo.UndoManager ; 39 40 import com.genimen.djeneric.repository.exceptions.DjenericException; 41 import com.genimen.djeneric.tools.specifier.interfaces.ObjectViewer; 42 import com.genimen.djeneric.util.DjLogger; 43 44 public class DjTextArea extends JTextArea implements DjBindable, FocusListener 45 { 46 private static final long serialVersionUID = 1L; 47 final UndoManager undomanager = new UndoManager (); 48 private BindingMediator _mediator; 49 50 public DjTextArea(ObjectViewer viewer, String propertyName) throws DjenericException 51 { 52 super(); 53 addKeyListener(new DjTextArea__editor_keyAdapter(this)); 54 getDocument().addUndoableEditListener(this.undomanager); 55 undomanager.setLimit(50000); 56 addFocusListener(this); 57 _mediator = new BindingMediator(this, viewer, propertyName); 58 } 59 60 public void clear() 61 { 62 setText(""); 63 } 64 65 public boolean isComponentWritable() 66 { 67 return _mediator.isComponentWritable(); 68 } 69 70 public void apply() throws DjenericException 71 { 72 _mediator.setValue(getText()); 73 } 74 75 public void focusGained(FocusEvent e) 76 { 77 } 78 79 public void focusLost(FocusEvent e) 80 { 81 try 82 { 83 apply(); 84 synchronize(); 85 } 86 catch (Exception x) 87 { 88 DjLogger.log(x); 89 } 90 } 91 92 public void setPropertyName(String propertyName) throws DjenericException 93 { 94 _mediator.setPropertyName(propertyName); 95 } 96 97 public void setViewer(ObjectViewer viewer) 98 { 99 _mediator.setViewer(viewer); 100 } 101 102 public void synchronize() throws DjenericException 103 { 104 setText(_mediator.getPropertyValueString()); 105 setCaretPosition(0); 106 undomanager.discardAllEdits(); 107 } 108 109 public Object getDisplayedValue() 110 { 111 return getText(); 112 } 113 114 public String getPropertyName() 115 { 116 return _mediator.getPropertyName(); 117 } 118 119 public JComponent getFocussableComponent() 120 { 121 return this; 122 } 123 124 public void editorKeypressed(KeyEvent e) 125 { 126 if (e.getKeyCode() == KeyEvent.VK_Z) 127 { 128 if (e.getModifiersEx() == KeyEvent.CTRL_DOWN_MASK) 129 { 130 if (undomanager.canUndo()) 131 { 132 undomanager.undo(); 133 } 134 135 } 136 } 137 if (e.getKeyCode() == KeyEvent.VK_Y) 138 { 139 if (e.getModifiersEx() == KeyEvent.CTRL_DOWN_MASK) 140 { 141 if (undomanager.canRedo()) 142 { 143 undomanager.redo(); 144 } 145 146 } 147 } 148 } 149 } 150 151 class DjTextArea__editor_keyAdapter extends java.awt.event.KeyAdapter 152 { 153 DjTextArea adaptee; 154 155 DjTextArea__editor_keyAdapter(DjTextArea adaptee) 156 { 157 this.adaptee = adaptee; 158 } 159 160 public void keyPressed(KeyEvent e) 161 { 162 adaptee.editorKeypressed(e); 163 } 164 } | Popular Tags |