001: /* $Id: BooleanEditor.java 746 2006-11-08 13:34:23Z hengels $ */
002: package org.conform.wings.editor;
003:
004: import org.conform.*;
005: import org.conform.wings.Editor;
006: import org.conform.wings.PropertyAdapter;
007: import org.wings.*;
008:
009: import java.util.Arrays;
010:
011: public class BooleanEditor implements Editor {
012: public static final String ICON_TRUE = "editor.boolean.true";
013: public static final String ICON_FALSE = "editor.boolean.false";
014: public static final String TEXT = "editor.boolean.text";
015:
016: private boolean readonly = false;
017:
018: public BooleanEditor() {
019: }
020:
021: public BooleanEditor(boolean readonly) {
022: this .readonly = readonly;
023: }
024:
025: public SComponent createComponent(PropertyMeta propertyMeta) {
026: SCheckBox checkBox = new SCheckBox();
027: checkBox.setModel(new ButtonModelPropertyAdapter(propertyMeta));
028: checkBox.setPreferredSize(SDimension.AUTOAREA);
029: configureComponent(propertyMeta, checkBox, false);
030: return checkBox;
031: }
032:
033: public void configureComponent(PropertyMeta propertyMeta,
034: SComponent component, boolean erroneous) {
035: SIcon icon = (SIcon) propertyMeta.getAttribute(ICON_FALSE);
036: SIcon selectedIcon = (SIcon) propertyMeta
037: .getAttribute(ICON_TRUE);
038: String text = (String) propertyMeta.getAttribute(TEXT);
039:
040: SCheckBox checkBox = (SCheckBox) component;
041: checkBox.setVisible(propertyMeta.isReadable());
042: checkBox.setEnabled(!readonly && propertyMeta.isWritable());
043: checkBox.setShowAsFormComponent(!readonly);
044: if (icon != null) {
045: checkBox.setIcon(icon);
046: checkBox.setDisabledIcon(icon);
047: }
048: if (selectedIcon != null) {
049: checkBox.setSelectedIcon(selectedIcon);
050: checkBox.setDisabledSelectedIcon(selectedIcon);
051: }
052: if (text != null)
053: checkBox.setText(text);
054:
055: if (propertyMeta
056: .getAttribute(PropertyMeta.ATTRIBUTE_CHANGE_LISTENER) != null
057: && !Arrays.asList(checkBox.getActionListeners())
058: .contains(NoAction.INSTANCE))
059: checkBox.addActionListener(NoAction.INSTANCE);
060:
061: DefaultEditorStyles.applyEditorState(propertyMeta, component,
062: erroneous);
063: }
064:
065: public boolean isReadonly() {
066: return readonly;
067: }
068:
069: public void setReadonly(boolean readonly) {
070: this .readonly = readonly;
071: }
072:
073: /*
074: public SLabel createLabel(PropertyMeta field, PropertyData propertyData) {
075: SLabel label = (SLabel) super.createComponent(field);
076: super.setPropertyData(label, propertyData);
077: return label;
078: }
079: */
080:
081: public void setPropertyData(SComponent component,
082: PropertyData propertyData) {
083: BeanData beanData = propertyData.getBeanData();
084: if (beanData != null)
085: beanData.addPropertyChangeListener(propertyData
086: .getPropertyMeta().getName(),
087: new ComponentInvalidator(component));
088: SCheckBox checkBox = (SCheckBox) component;
089: ((ButtonModelPropertyAdapter) checkBox.getModel())
090: .setPropertyData(propertyData);
091: }
092:
093: public PropertyData getPropertyData(SComponent component) {
094: SCheckBox checkBox = (SCheckBox) component;
095: return ((ButtonModelPropertyAdapter) checkBox.getModel())
096: .getPropertyData();
097: }
098:
099: static class ButtonModelPropertyAdapter extends SDefaultButtonModel
100: implements PropertyAdapter {
101: private PropertyData propertyData;
102: private PropertyMeta property;
103:
104: public ButtonModelPropertyAdapter(PropertyMeta field) {
105: this .property = field;
106: }
107:
108: public void setPropertyData(PropertyData propertyData) {
109: this .propertyData = propertyData;
110: fireStateChanged();
111: }
112:
113: public PropertyData getPropertyData() {
114: return propertyData;
115: }
116:
117: public boolean isSelected() {
118: Boolean selected = (Boolean) propertyData.getValue();
119: return Boolean.TRUE.equals(selected);
120: }
121:
122: public void setSelected(boolean selected) {
123: if (isSelected() != selected) {
124: propertyData.setValue(Boolean.valueOf(selected));
125: fireStateChanged();
126: }
127: }
128: }
129: }
|