001: /* $Id: CharacterEditor.java 746 2006-11-08 13:34:23Z hengels $ */
002: package org.conform.wings.editor;
003:
004: import javax.swing.text.BadLocationException;
005:
006: import org.conform.*;
007: import org.conform.wings.PropertyAdapter;
008: import org.conform.wings.Editor;
009: import org.wings.SComponent;
010: import org.wings.STextComponent;
011: import org.wings.STextField;
012: import org.wings.text.DefaultDocument;
013:
014: public class CharacterEditor implements Editor {
015: public SComponent createComponent(PropertyMeta propertyMeta) {
016: STextField textField = new STextField();
017: textField
018: .setDocument(new DocumentPropertyAdapter(propertyMeta));
019: configureComponent(propertyMeta, textField, false);
020: return textField;
021: }
022:
023: public void configureComponent(PropertyMeta propertyMeta,
024: SComponent component, boolean erroneous) {
025: STextField textField = (STextField) component;
026: textField.setColumns(2);
027: textField.setMaxColumns(1);
028: textField.setEnabled(propertyMeta.isWritable());
029: textField.setVisible(propertyMeta.isReadable());
030: DefaultEditorStyles.applyEditorAlignment(propertyMeta,
031: component);
032: DefaultEditorStyles.applyEditorState(propertyMeta, component,
033: erroneous);
034: }
035:
036: public void setPropertyData(SComponent component,
037: PropertyData propertyData) {
038: BeanData beanData = propertyData.getBeanData();
039: if (beanData != null)
040: beanData.addPropertyChangeListener(propertyData
041: .getPropertyMeta().getName(),
042: new ComponentInvalidator(component));
043: STextComponent textComponent = (STextComponent) component;
044: ((DocumentPropertyAdapter) textComponent.getDocument())
045: .setPropertyData(propertyData);
046: }
047:
048: public PropertyData getPropertyData(SComponent component) {
049: STextComponent textComponent = (STextComponent) component;
050: return ((DocumentPropertyAdapter) textComponent.getDocument())
051: .getPropertyData();
052: }
053:
054: static class DocumentPropertyAdapter extends DefaultDocument
055: implements PropertyAdapter {
056: private PropertyData propertyData;
057: private PropertyMeta field;
058:
059: public DocumentPropertyAdapter(PropertyMeta field) {
060: this .field = field;
061: }
062:
063: public void setPropertyData(PropertyData propertyData) {
064: this .propertyData = propertyData;
065: }
066:
067: public PropertyData getPropertyData() {
068: return propertyData;
069: }
070:
071: public void setText(String text) {
072: int length = (text == null) ? 0 : text.length();
073: if (length == 0)
074: text = null;
075:
076: propertyData.setValue(new Character(text.charAt(0)));
077: fireChangeUpdate(0, length);
078: }
079:
080: public String getText() {
081: Object value = propertyData.getValue();
082: return value != null ? value.toString() : "";
083: }
084:
085: public int getLength() {
086: return (getText() == null) ? 0 : getText().length();
087: }
088:
089: public String getText(int offset, int length)
090: throws BadLocationException {
091: throw new UnsupportedOperationException(
092: "this meant to be an adapter");
093: }
094:
095: public void remove(int offset, int length)
096: throws BadLocationException {
097: throw new UnsupportedOperationException(
098: "this meant to be an adapter");
099: }
100:
101: public void insert(int pos, String s)
102: throws BadLocationException {
103: throw new UnsupportedOperationException(
104: "this meant to be an adapter");
105: }
106: }
107: }
|