content: /*
   * @(#)BasicRepaintManager.java
   *
   * Copyright 2002 EGANTT LLP. All rights reserved.
   * PROPRIETARY/QPL. Use is subject to license terms.
   */
  
  package com.egantt.swing.component.repaint.manager;
  
  import java.util.HashSet;
  import java.util.Iterator;
  import java.util.Set;
  
  import javax.swing.JComponent;
  import javax.swing.SwingUtilities;
  
  import com.egantt.swing.component.ComponentContext;
  import com.egantt.swing.component.repaint.RepaintManager;
  
  /**
   * Handles the repainting of a given set of components, this component set can
   * be repainted by invoking the #repaint() call
   */
  	public abstract class BasicRepaintManager implements RepaintManager {
  	protected final Set<JComponent> components = new HashSet<JComponent>();
  
  	// _________________________________________________________________________
  
  	public synchronized void registerComponent(JComponent component, ComponentContext context) {
  		components.add(component);
  	}
  
  	public synchronized void unregisterComponent(JComponent component) {
  		components.remove(component);
  	}
  
  	// _________________________________________________________________________
  
  	/**
  	 * <code>repaint</code> revalidate's the component and uses it's
  	 * apropriate instantiation of javax.swing.RepaintManager to mark it
  	 * completely dirty.
  	 */
  	public void repaint() {
  		SwingUtilities.invokeLater(new LocalRunnable());
  	}
  
  	protected class LocalRunnable implements Runnable {
  		public void run() {
  			for (Iterator iter = components.iterator(); iter.hasNext();) {
  				JComponent component = (JComponent) iter.next();
  
  				// fix up the component size
  				// component.revalidate();
  
  				// repaint the component this is the recomended way to do it
  				javax.swing.RepaintManager manager = javax.swing.RepaintManager
  						.currentManager(component);
  
  				manager.markCompletelyDirty(component);
  			}
  		}
  	}
  }
  