001: /* *************************************************************************
002:
003: Millstone(TM)
004: Open Sourced User Interface Library for
005: Internet Development with Java
006:
007: Millstone is a registered trademark of IT Mill Ltd
008: Copyright (C) 2000-2005 IT Mill Ltd
009:
010: *************************************************************************
011:
012: This library is free software; you can redistribute it and/or
013: modify it under the terms of the GNU Lesser General Public
014: license version 2.1 as published by the Free Software Foundation.
015:
016: This library is distributed in the hope that it will be useful,
017: but WITHOUT ANY WARRANTY; without even the implied warranty of
018: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
019: Lesser General Public License for more details.
020:
021: You should have received a copy of the GNU Lesser General Public
022: License along with this library; if not, write to the Free Software
023: Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
024:
025: *************************************************************************
026:
027: For more information, contact:
028:
029: IT Mill Ltd phone: +358 2 4802 7180
030: Ruukinkatu 2-4 fax: +358 2 4802 7181
031: 20540, Turku email: info@itmill.com
032: Finland company www: www.itmill.com
033:
034: Primary source for MillStone information and releases: www.millstone.org
035:
036: ********************************************************************** */
037:
038: package org.millstone.base.ui;
039:
040: import java.util.Iterator;
041:
042: /** Extension to the {@link Component} interface which adds to it the capacity
043: * to contain other components. All UI elements that can have child elements
044: * implement this interface.
045: *
046: * @author IT Mill Ltd.
047: * @version 3.1.1
048: * @since 3.0
049: */
050: public interface ComponentContainer extends Component {
051:
052: /** Adds a component into this container.
053: *
054: * @param c the component to be added
055: */
056: public void addComponent(Component c);
057:
058: /** Removes a component from this container.
059: *
060: * @param c the component to be added
061: */
062: public void removeComponent(Component c);
063:
064: /** Removes all components from this container. */
065: public void removeAllComponents();
066:
067: /** Replace a component in the container with another one without changing position.
068: *
069: * <p>This method replaces component with another one is such way that the new component
070: * overtakes the position of the old component. If the old component is not in the
071: * container, the new component is added to the container. If the both component are
072: * already in the container, their positions are swapped.
073: * Component attach and detach events should be taken care as with add and remove.</p>
074: *
075: * @param oldComponent The old component that will be replaced.
076: * @param newComponent The new component to be replaced
077: */
078: public void replaceComponent(Component oldComponent,
079: Component newComponent);
080:
081: /** Gets an iterator to the collection of contained components. Using
082: * this iterator it is possible to step through all components contained
083: * in this container.
084: *
085: * @return component iterator
086: */
087: public Iterator getComponentIterator();
088:
089: /** Moves all components from an another container into this container.
090: * The components are removed from <code>source</code>.
091: *
092: * @param source the container which contains the components that are to
093: * be moved to this container
094: */
095: public void moveComponentsFrom(ComponentContainer source);
096:
097: /** Listen component attach events */
098: public void addListener(ComponentAttachListener listener);
099:
100: /** Stop listening component attach events */
101: public void removeListener(ComponentAttachListener listener);
102:
103: /** Listen component detach events */
104: public void addListener(ComponentDetachListener listener);
105:
106: /** Stop listening component detach events */
107: public void removeListener(ComponentDetachListener listener);
108:
109: /** Component attach listener interface. */
110: public interface ComponentAttachListener {
111:
112: /** A new component is attached to container */
113: public void componentAttachedToContainer(
114: ComponentAttachEvent event);
115: }
116:
117: /** Component detach listener interface. */
118: public interface ComponentDetachListener {
119:
120: /** A component has been detached from container */
121: public void componentDetachedFromContainer(
122: ComponentDetachEvent event);
123: }
124:
125: /** Component attach event sent when a component is attached to container */
126: public class ComponentAttachEvent extends Component.Event {
127:
128: /**
129: * Serial generated by eclipse.
130: */
131: private static final long serialVersionUID = 3257285812184692019L;
132:
133: private Component component;
134:
135: /** Create new attach event.
136: * @param container The component container the component has been detached to.
137: * @param attachedComponent The component that has been attached
138: */
139: public ComponentAttachEvent(ComponentContainer container,
140: Component attachedComponent) {
141: super (container);
142: this .component = attachedComponent;
143: }
144:
145: /** Get the component container */
146: public ComponentContainer getContainer() {
147: return (ComponentContainer) getSource();
148: }
149:
150: /** Get the attached component */
151: public Component getAttachedComponent() {
152: return component;
153: }
154: }
155:
156: /** Component detach event sent when a component is detached from container */
157: public class ComponentDetachEvent extends Component.Event {
158:
159: /**
160: * Serial generated by eclipse.
161: */
162: private static final long serialVersionUID = 3618140052337930290L;
163:
164: private Component component;
165:
166: /** Create new detach event.
167: * @param container The component container the component has been detached from.
168: * @param detachedComponent The component that has been detached
169: */
170: public ComponentDetachEvent(ComponentContainer container,
171: Component detachedComponent) {
172: super (container);
173: this .component = detachedComponent;
174: }
175:
176: /** Get the component container */
177: public ComponentContainer getContainer() {
178: return (ComponentContainer) getSource();
179: }
180:
181: /** Get the detached component */
182: public Component getDetachedComponent() {
183: return component;
184: }
185: }
186:
187: }
|