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.terminal;
039:
040: import java.util.EventObject;
041:
042: /** Interface implemented by all classes that can be painted.
043: * Classes implementing this interface know how to output themselves
044: * to a UIDL stream and that way describing to the terminal how it
045: * should be displayed in the UI.
046: *
047: * @author IT Mill Ltd.
048: * @version 3.1.1
049: * @since 3.0
050: */
051: public interface Paintable extends java.util.EventListener {
052:
053: /** <p>Paints the paintable into a UIDL stream. This method creates
054: * the UIDL sequence describing it and outputs it to the given UIDL
055: * stream.</p>
056: *
057: * <p>It's is called when the contents of the component should be
058: * painted in response to the component first being shown or having been
059: * altered so that its visual representation is changed.</p>
060: *
061: * @param target target UIDL stream where the component should paint
062: * itself to
063: * @throws PaintException if the paint operation failed
064: * @throws InvalidUIDLException if incorrect UIDL is writted, and
065: * the error can be dealt with inside this method call.
066: */
067: public void paint(PaintTarget target) throws PaintException;
068:
069: /** Requests that the paintable should be repainted as soon as possible.
070: */
071: public void requestRepaint();
072:
073: /** Repaint request event is thrown when the paintable needs to be repainted.
074: * This is typically done when the paint() method would return dissimilar
075: * UIDL from the previous call of the method.
076: */
077: public class RepaintRequestEvent extends EventObject {
078:
079: /**
080: * Serial generated by eclipse.
081: */
082: private static final long serialVersionUID = 3256725095530442805L;
083:
084: /** Construct new event.
085: * @param source The paintable needing repaint
086: */
087: public RepaintRequestEvent(Paintable source) {
088: super (source);
089: }
090:
091: /** Get the paintable needing repainting.
092: * @return Paintable for which the paint() method will return
093: * dissimilar UIDL from the previous call of the method.
094: */
095: public Paintable getPaintable() {
096: return (Paintable) getSource();
097: }
098: }
099:
100: /** Listen repaint requests. The repaintRequested() method is called when the
101: * paintable needs to be repainted.
102: * This is typically done when the paint() method would return dissimilar
103: * UIDL from the previous call of the method.
104: */
105: public interface RepaintRequestListener {
106:
107: /** Receive repaint request events.
108: * @param event The repaint request event specifying the paintable source.
109: */
110: public void repaintRequested(RepaintRequestEvent event);
111: }
112:
113: /** Add repaint request listener. In order to assure that no repaint requests are
114: * missed, the new repaint listener should paint the paintable right after adding
115: * itself as listener.
116: * @param listener to be added
117: */
118: public void addListener(RepaintRequestListener listener);
119:
120: /** Remove repaint request listener.
121: * @param listener to be removed
122: */
123: public void removeListener(RepaintRequestListener listener);
124:
125: /** Request sending of repaint events on any further visible changes.
126: * Normally the paintable only send up to one repaint request
127: * for listeners after paint as the paintable as the paintable
128: * assumes that the listeners already know about the repaint need.
129: * This method resets the assumtion. Paint implicitly does the
130: * assumtion reset functionality implemented by this method.
131: *
132: * This method is normally used only by the terminals to note
133: * paintables about implicit repaints (painting the component
134: * without actually invoking paint method).
135: */
136: public void requestRepaintRequests();
137: }
|