001: package fr.aliacom.form.swt.ui;
002:
003: import java.beans.PropertyChangeEvent;
004: import java.beans.PropertyChangeListener;
005: import java.util.HashMap;
006:
007: import org.eclipse.swt.SWT;
008: import org.eclipse.swt.custom.StyleRange;
009: import org.eclipse.swt.custom.StyledText;
010: import org.eclipse.swt.graphics.Color;
011: import org.eclipse.swt.widgets.Composite;
012:
013: import fr.aliacom.bean.BeanUtils;
014: import fr.aliacom.common.ui.IColor;
015: import fr.aliacom.common.ui.ITextArea;
016: import fr.aliacom.form.swt.events.TextModifyListener;
017: import fr.aliacom.form.swt.utils.SWTUtils;
018:
019: /**
020: * @author tom
021: *
022: * (C) 2001, 2003 Thomas Cataldo
023: */
024: public class SWTTextArea implements ISWTText, ITextArea,
025: PropertyChangeListener {
026:
027: private Object javaBean;
028: private TextModifyListener listener;
029: private boolean locked;
030: private String property;
031: private StyledText text;
032: private HashMap styles;
033: private boolean scrollOnAppend;
034:
035: public SWTTextArea(Composite parent, String property) {
036: text = new StyledText(parent, SWT.MULTI | SWT.BORDER
037: | SWT.V_SCROLL);
038: SWTUtils.setMonospacedFont(text);
039: this .property = property;
040: styles = new HashMap(4);
041: }
042:
043: /**
044: * @see fr.aliacom.common.ui.ITextArea#addStyle(java.lang.String, fr.aliacom.common.ui.IColor)
045: */
046: public void addStyle(String styleName, IColor styleColor) {
047: styles.put(styleName, styleColor);
048: System.out.println("Added " + styleName + " style");
049: }
050:
051: /**
052: * @see fr.aliacom.common.ui.ITextArea#appendText(java.lang.String, java.lang.String)
053: */
054: public void appendText(String txt, String styleName) {
055: int start = text.getText().length();
056: appendText(txt);
057: IColor color = (IColor) styles.get(styleName);
058: if (color != null) {
059: StyleRange range = new StyleRange(start, txt.length(),
060: (Color) color.getNativeWidget(), null, SWT.NORMAL);
061: text.setStyleRange(range);
062: }
063: }
064:
065: /**
066: * @see fr.aliacom.common.ui.ITextArea#appendText(java.lang.String)
067: */
068: public void appendText(String txt) {
069: text.append(txt);
070: if (scrollOnAppend) {
071: text.setTopIndex(text.getLineCount());
072: }
073: }
074:
075: /**
076: * Sets the scrollOnAppend.
077: * @param scrollOnAppend The scrollOnAppend to set
078: */
079: public void setScrollOnAppend(boolean scrollOnAppend) {
080: this .scrollOnAppend = scrollOnAppend;
081: }
082:
083: /**
084: * @see fr.aliacom.form.common.IFormComponent#getNativeWidget()
085: */
086: public Object getNativeWidget() {
087: return text;
088: }
089:
090: /**
091: * @see fr.aliacom.common.ui.IText#getText()
092: */
093: public String getText() {
094: return text.getText();
095: }
096:
097: /**
098: * Method lock.
099: */
100: public void lock() {
101: locked = true;
102: }
103:
104: /**
105: * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent)
106: */
107: public void propertyChange(PropertyChangeEvent evt) {
108: if (!locked) {
109: listener.lock();
110: text.setText(evt.getNewValue().toString());
111: listener.unlock();
112: }
113: }
114:
115: /**
116: * @see fr.aliacom.form.common.IFormComponent#reset()
117: */
118: public void reset() {
119: }
120:
121: /**
122: * @see fr.aliacom.common.ui.IText#setEditable(boolean)
123: */
124: public void setEditable(boolean editable) {
125: text.setEditable(editable);
126: }
127:
128: /**
129: * @see fr.aliacom.common.ui.IText#setEnabled(boolean)
130: */
131: public void setEnabled(boolean enabled) {
132: text.setEnabled(enabled);
133: }
134:
135: /**
136: * @see fr.aliacom.common.ui.IText#setText(java.lang.String)
137: */
138: public void setText(String txt) {
139: text.setText(txt);
140: }
141:
142: /**
143: * @see fr.aliacom.form.common.IFormComponent#setValueBean(java.lang.Object)
144: */
145: public void setValueBean(Object bean) {
146: locked = false;
147: String value = (String) BeanUtils.getValue(bean, property);
148: value = (value == null ? "" : value);
149: setText(value);
150: if (javaBean != null) {
151: text.removeModifyListener(listener);
152: BeanUtils
153: .removePropertyChangeListener(bean, property, this );
154: }
155: text.addModifyListener(listener = new TextModifyListener(this ,
156: bean, property));
157: javaBean = bean;
158: BeanUtils.addPropertyChangeListener(javaBean, property, this );
159: }
160:
161: public void unlock() {
162: locked = false;
163: }
164:
165: /* (non-Javadoc)
166: * @see fr.aliacom.common.ui.IText#focus()
167: */
168: public void focus() {
169: text.setFocus();
170: }
171:
172: }
|