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.comp.Components;
027: import jacareto.struct.StructureElement;
028: import jacareto.system.Environment;
029: import jacareto.system.EnvironmentMember;
030:
031: import java.awt.Component;
032:
033: /**
034: * An abstract class for editors which allow the user to edit structure elements.
035: *
036: * <p>
037: * All subclasses must have a constructor with a single argument of type {@link
038: * jacareto.system.Environment} that they can be automatically loaded.
039: * </p>
040: *
041: * @author <a href="mailto:cspannagel@web.de">Christian Spannagel</a>
042: * @version 1.02
043: */
044: public abstract class Editor extends EnvironmentMember {
045: /** Whether or not the element is updated on changes. */
046: protected boolean isUpdateOnChange;
047:
048: /** The components. */
049: private Components components;
050:
051: /**
052: * Creates an editor with the specified env.
053: *
054: * @param env the environment
055: */
056: public Editor(Environment env) {
057: super (env);
058: setUpdateOnChange(true);
059: }
060:
061: /**
062: * Returns whether this editor is responsible for a given structure element.
063: *
064: * @param element the structure element
065: *
066: * @return <code>true</code> if the editor handles the given structure element, otherwise
067: * <code>false</code>
068: */
069: public abstract boolean handlesElement(StructureElement element);
070:
071: /**
072: * Sets the components instance.
073: *
074: * @param components the components
075: */
076: public void setComponents(Components components) {
077: this .components = components;
078: }
079:
080: /**
081: * Returns the components instance.
082: *
083: * @return the components
084: */
085: public Components getComponents() {
086: return components;
087: }
088:
089: /**
090: * Returns the component for editing the specified structure element.
091: *
092: * @return the editor component
093: */
094: public abstract Component getComponent();
095:
096: /**
097: * Sets the element to edit. The precondition for this method is that the editor handles the
098: * given structure element. So if you implement this method you can be sure that {@link
099: * #handlesElement(StructureElement)} is <code>true</code> called with the specified element.
100: *
101: * @param element the element with the very important information
102: */
103: public abstract void setElement(StructureElement element);
104:
105: /**
106: * Returns the structure element which is actually edited, or <code>null</code> if no element
107: * has been set.
108: *
109: * @return DOCUMENT ME!
110: */
111: public abstract StructureElement getElement();
112:
113: /**
114: * Whether or not the element contained in the editor should be updated when a value in the
115: * editor's components has changed.
116: *
117: * @param isUpdateOnChange DOCUMENT ME!
118: */
119: public void setUpdateOnChange(boolean isUpdateOnChange) {
120: this .isUpdateOnChange = isUpdateOnChange;
121: }
122:
123: /**
124: * Returns whether or not the element contained in the editor should be updated when a value in
125: * the editor's components has changed.
126: *
127: * @return DOCUMENT ME!
128: */
129: public boolean isUpdateOnChange() {
130: return isUpdateOnChange;
131: }
132: }
|