content: /*
   * @(#)DrawingRepaintManager.java
   *
   * Copyright 2002 EGANTT LLP. All rights reserved.
   * PROPRIETARY/QPL. Use is subject to license terms.
   */
  
  package com.egantt.swing.component.repaint.manager;
  
  import com.egantt.model.drawing.DrawingState;
  
  import com.egantt.model.drawing.state.event.DrawingStateEvent;
  import com.egantt.model.drawing.state.event.DrawingStateListener;
  import com.egantt.swing.component.ComponentContext;
  
  import javax.swing.JComponent;
  
  /**
   *  This is the repaint notification metchanism for DrawingStates, to notify a
   *  group that they have changed
   */
  public class DrawingRepaintManager extends BasicRepaintManager
  {
  	protected DrawingState drawingState;
  	protected LocalStateListener listener; // listener is disposed of when not required
  		
  	// _________________________________________________________________________
  	
  	public synchronized void setDrawingState(DrawingState drawingState)
  	{
  		if (this.drawingState != null)
  			drawingState.removeDrawingStateListener(listener);
  		
  		this.drawingState = drawingState; // the new drawingState
  		
  		if (listener != null)
  			drawingState.addDrawingStateListener(listener);
  	}
  	
  	// _________________________________________________________________________
  	
  	public synchronized void registerComponent(JComponent component, ComponentContext context)
  	{
  		if (listener == null)
  		{
  			this.listener = new LocalStateListener();
  			if (drawingState != null)
  				drawingState.addDrawingStateListener(listener);
  		}
  		super.registerComponent(component, context);
  	}
  	
  	public synchronized void unregisterComponent(JComponent component)
  	{
  		if (listener != null && components.size() == 1)
  		{
  			if (drawingState != null)
  				drawingState.removeDrawingStateListener(listener);
  			this.listener = null;
  		}
  		super.unregisterComponent(component);
  	}
  	
  	// __________________________________________________________________________
  	
  	protected class LocalStateListener implements DrawingStateListener
  	{
  		public void stateChanged(DrawingStateEvent event)
  		{
  			repaint();
  		}
  	}
  }
  