/* @ITMillApache2LicenseForJavaFiles@ */ package com.vaadin.terminal; import java.io.Serializable; import java.util.EventObject; /** * Interface implemented by all classes that can be painted. Classes * implementing this interface know how to output themselves to a UIDL stream * and that way describing to the terminal how it should be displayed in the UI. * * @author IT Mill Ltd. * @version * @VERSION@ * @since 3.0 */ public interface Paintable extends java.util.EventListener, Serializable { /** *
* Paints the Paintable into a UIDL stream. This method creates the UIDL * sequence describing it and outputs it to the given UIDL stream. *
* ** It is called when the contents of the component should be painted in * response to the component first being shown or having been altered so * that its visual representation is changed. *
* * @param target * the target UIDL stream where the component should paint itself * to. * @throws PaintException * if the paint operation failed. */ public void paint(PaintTarget target) throws PaintException; /** * Requests that the paintable should be repainted as soon as possible. */ public void requestRepaint(); /** * Adds an unique id for component that get's transferred to terminal for * testing purposes. Keeping identifiers unique throughout the Application * instance is on programmers responsibility. *
* Note, that with the current terminal implementation the identifier cannot
* be changed while the component is visible. This means that the identifier
* should be set before the component is painted for the first time and kept
* the same while visible in the client.
*
* @param id
* A short (< 20 chars) alphanumeric id
*/
public void setDebugId(String id);
/**
* Get's currently set debug identifier
*
* @return current debug id, null if not set
*/
public String getDebugId();
/**
* Repaint request event is thrown when the paintable needs to be repainted.
* This is typically done when the paint
method would return
* dissimilar UIDL from the previous call of the method.
*/
@SuppressWarnings("serial")
public class RepaintRequestEvent extends EventObject {
/**
* Constructs a new event.
*
* @param source
* the paintable needing repaint.
*/
public RepaintRequestEvent(Paintable source) {
super(source);
}
/**
* Gets the paintable needing repainting.
*
* @return Paintable for which the paint
method will return
* dissimilar UIDL from the previous call of the method.
*/
public Paintable getPaintable() {
return (Paintable) getSource();
}
}
/**
* Listens repaint requests. The repaintRequested
method is
* called when the paintable needs to be repainted. This is typically done
* when the paint
method would return dissimilar UIDL from the
* previous call of the method.
*/
public interface RepaintRequestListener extends Serializable {
/**
* Receives repaint request events.
*
* @param event
* the repaint request event specifying the paintable source.
*/
public void repaintRequested(RepaintRequestEvent event);
}
/**
* Adds repaint request listener. In order to assure that no repaint
* requests are missed, the new repaint listener should paint the paintable
* right after adding itself as listener.
*
* @param listener
* the listener to be added.
*/
public void addListener(RepaintRequestListener listener);
/**
* Removes repaint request listener.
*
* @param listener
* the listener to be removed.
*/
public void removeListener(RepaintRequestListener listener);
/**
* Request sending of repaint events on any further visible changes.
* Normally the paintable only send up to one repaint request for listeners
* after paint as the paintable as the paintable assumes that the listeners
* already know about the repaint need. This method resets the assumtion.
* Paint implicitly does the assumtion reset functionality implemented by
* this method.
*
* This method is normally used only by the terminals to note paintables * about implicit repaints (painting the component without actually invoking * paint method). *
*/ public void requestRepaintRequests(); }