001: /*
002: * Jacareto Copyright (c) 2002-2005
003: * Applied Computer Science Research Group, Darmstadt University of
004: * Technology, Institute of Mathematics & Computer Science,
005: * Ludwigsburg University of Education, and Computer Based
006: * Learning Research Group, Aachen University. All rights reserved.
007: *
008: * Jacareto is free software; you can redistribute it and/or
009: * modify it under the terms of the GNU General Public
010: * License as published by the Free Software Foundation; either
011: * version 2 of the License, or (at your option) any later version.
012: *
013: * Jacareto is distributed in the hope that it will be useful,
014: * but WITHOUT ANY WARRANTY; without even the implied warranty of
015: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
016: * General Public License for more details.
017: *
018: * You should have received a copy of the GNU General Public
019: * License along with Jacareto; if not, write to the Free
020: * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
021: *
022: */
023:
024: package jacareto.editor;
025:
026: import jacareto.record.EventObjectRecordable;
027: import jacareto.struct.StructureElement;
028: import jacareto.system.Environment;
029: import jacareto.system.Language;
030: import jacareto.toolkit.event.TextValueListener;
031: import jacareto.toolkit.swing.IntegerTextField;
032: import jacareto.toolkit.swing.LongTextField;
033:
034: import java.awt.Component;
035: import java.awt.GridBagConstraints;
036: import java.awt.GridBagLayout;
037:
038: import javax.swing.JComboBox;
039: import javax.swing.JLabel;
040: import javax.swing.JPanel;
041: import javax.swing.JTextField;
042: import javax.swing.border.EmptyBorder;
043: import javax.swing.event.DocumentEvent;
044:
045: /**
046: * <p>
047: * An editor for event object recordables. Because the class <code>EventObjectRecordable</code> is
048: * abstract, this class should be extended for the specific recordables which inherit from
049: * <code>EventObjectRecordable</code>.
050: * </p>
051: *
052: * <p>
053: * If a subclass overwrites the method {@link #setElement(StructureElement)}, it should call the
054: * method of its superclass first.
055: * </p>
056: *
057: * <p>
058: * This editor does not have an editor element for the event ID. It is the job of the subclasses to
059: * handle event IDs.
060: * </p>
061: *
062: * @author <a href="mailto:cspannagel@web.de">Christian Spannagel</a>
063: * @version 1.01
064: */
065: public class EventObjectRecordableEditor extends EnhancedEditor {
066:
067: /** The text field for the source's name. */
068: private JTextField sourceField;
069:
070: /** The text field for the source class. */
071: private JTextField sourceClassField;
072:
073: /** The text field for the time since the last event. */
074: private IntegerTextField durationField;
075:
076: /**
077: * Create a new event object recordable editor.
078: *
079: * @param env the environment
080: */
081: public EventObjectRecordableEditor(Environment env) {
082: super (env);
083:
084: // The source field
085: sourceField = addTextFieldRow(language
086: .getString("Events.Event.Source"), 20);
087: sourceField.getDocument().addDocumentListener(
088: new TextValueListener() {
089: public void textValueChanged(DocumentEvent e) {
090: if (isUpdateOnChange && (getElement() != null)) {
091: ((EventObjectRecordable) getElement())
092: .setSourceName(sourceField
093: .getText());
094: }
095: }
096: });
097:
098: // The source class field
099: sourceClassField = addTextFieldRow(language
100: .getString("Events.Event.SourceClass"), 20);
101: sourceClassField.getDocument().addDocumentListener(
102: new TextValueListener() {
103: public void textValueChanged(DocumentEvent e) {
104: if (isUpdateOnChange && (getElement() != null)) {
105: ((EventObjectRecordable) getElement())
106: .setSourceClass(sourceClassField
107: .getText());
108: }
109: }
110: });
111:
112: // The duration field
113: durationField = addIntegerTextFieldRow(language
114: .getString("Events.Event.RelativeTime"), 6);
115: durationField.getDocument().addDocumentListener(
116: new TextValueListener() {
117: public void textValueChanged(DocumentEvent e) {
118: if (isUpdateOnChange && (getElement() != null)) {
119: ((EventObjectRecordable) getElement())
120: .setDuration(durationField
121: .getValue());
122: }
123: }
124: });
125: }
126:
127: /**
128: * Returns whether this editor is responsible for a given structure element. This editor is
129: * responsible for all event recordables.
130: *
131: * @param element the structure element
132: *
133: * @return <code>true</code> if <i>element</i> is an event recordable and not
134: * <code>null</code>, otherwise <code>false</code>
135: */
136: public boolean handlesElement(StructureElement element) {
137: return (element != null)
138: && (element instanceof EventObjectRecordable);
139: }
140:
141: /**
142: * Sets the structure element to edit.
143: *
144: * @param element DOCUMENT ME!
145: */
146: public void setElement(StructureElement element) {
147: super .setElement(element);
148:
149: EventObjectRecordable eRecordable = (EventObjectRecordable) element;
150: sourceField.setText(eRecordable.getSourceName());
151: sourceField.setCaretPosition(0);
152: sourceClassField.setText(eRecordable.getSourceClass());
153: sourceClassField.setCaretPosition(0);
154: durationField.setText("" + eRecordable.getDuration());
155: }
156:
157: }
|