001: /*
002: * Beryl - A web platform based on XML, XSLT and Java
003: * This file is part of the Beryl XML GUI
004: *
005: * Copyright (C) 2004 Wenzel Jakob <wazlaf@tigris.org>
006: *
007: * This program is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU Lesser General Public
009: * License as published by the Free Software Foundation; either
010: * version 2.1 of the License, or (at your option) any later version.
011:
012: * This program is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015: * Lesser General Public License for more details.
016: *
017: * You should have received a copy of the GNU Lesser General Public
018: * License along with this program; if not, write to the Free Software
019: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-3107 USA
020: */
021:
022: package org.beryl.gui.widgets;
023:
024: import java.awt.Component;
025: import java.awt.event.ActionEvent;
026: import java.awt.event.ActionListener;
027:
028: import javax.swing.AbstractButton;
029: import javax.swing.JCheckBox;
030: import javax.swing.JCheckBoxMenuItem;
031:
032: import org.beryl.gui.GUIException;
033: import org.beryl.gui.Widget;
034: import org.beryl.gui.WidgetInfo;
035: import org.beryl.gui.model.MapChangeEvent;
036: import org.beryl.gui.model.MapDataModel;
037: import org.beryl.gui.model.ModelChangeEvent;
038:
039: public class CheckBox extends Widget {
040: protected static WidgetInfo checkBoxInfo = null;
041: private AbstractButton checkBox = null;
042: private String key = null;
043: private boolean processEvents = true;
044:
045: static {
046: checkBoxInfo = new WidgetInfo(CheckBox.class, widgetInfo);
047: checkBoxInfo.addProperty("key", "string", "");
048: checkBoxInfo.addProperty("text", "istring", "");
049: };
050:
051: public CheckBox(Widget parent, String name) throws GUIException {
052: super (parent, name);
053:
054: if (parent != null
055: && (parent instanceof Menu || parent instanceof PopupMenu))
056: checkBox = new JCheckBoxMenuItem();
057: else
058: checkBox = new JCheckBox();
059:
060: checkBox.addActionListener(new ActionListener() {
061: public void actionPerformed(ActionEvent e) {
062: try {
063: MapDataModel model = getDataModel();
064: if (model != null && key != null) {
065: model.setValue(CheckBox.this , key, new Boolean(
066: checkBox.isSelected()));
067: }
068: } catch (GUIException ex) {
069: throw new RuntimeException(ex);
070: }
071: }
072: });
073: }
074:
075: public void setProperty(String name, Object value)
076: throws GUIException {
077: if ("key".equals(name))
078: key = (String) value;
079: else
080: super .setProperty(name, value);
081: }
082:
083: private void reload() throws GUIException {
084: MapDataModel model = getDataModel();
085: if (model != null && key != null) {
086: Boolean value = (Boolean) model.getValue(key);
087: if (value != null) {
088: checkBox.setSelected(value.booleanValue());
089: } else {
090: try {
091: processEvents = false;
092: model.setValue(key, new Boolean(checkBox
093: .isSelected()));
094: } finally {
095: processEvents = true;
096: }
097: }
098: }
099: }
100:
101: public void modelChanged(ModelChangeEvent e) throws GUIException {
102: if (processEvents) {
103: if (e.getSource() == this ) {
104: reload();
105: } else if (e instanceof MapChangeEvent) {
106: MapChangeEvent event = (MapChangeEvent) e;
107: if (event.getKey() == null) {
108: reload();
109: } else if (event.getKey().equals(key)) {
110: checkBox
111: .setSelected(((Boolean) event.getNewValue())
112: .booleanValue());
113: }
114: }
115: }
116: }
117:
118: public Component getWidget() {
119: return checkBox;
120: }
121:
122: public WidgetInfo getWidgetInfo() {
123: return checkBoxInfo;
124: }
125: }
|