content: /*
   * @(#)AbstractViewRange.java
   *
   * Copyright 2002 EGANTT LLP. All rights reserved.
   * PROPRIETARY/QPL. Use is subject to license terms.
   */
  
  package com.egantt.model.scrolling.range.view;
  
  import com.egantt.drawing.view.ViewManager;
  
  import com.egantt.model.drawing.axis.view.event.ViewEvent;
  import com.egantt.model.drawing.axis.view.event.ViewListener;
  
  import com.egantt.model.scrolling.ScrollingRange;
  
  import com.egantt.model.scrolling.range.event.RangeEvent;
  import com.egantt.model.scrolling.range.event.RangeListener;
  
  import java.util.ArrayList;
  import java.util.Iterator;
  import java.util.List;
  
  public abstract class AbstractViewRange implements ScrollingRange
  {
  	protected ViewManager manager;
  	
  	protected transient LocalViewListener listener;
  	protected transient List<RangeListener> listeners = new ArrayList<RangeListener>();
  	
  	// __________________________________________________________________________
  		
  	public void setManager(ViewManager manager)
  	{
  		if (this.manager != null)
  			this.manager.getView().removeViewListener(listener);
  		else
  			listener = new LocalViewListener(this);
  		
  		this.manager = manager;
  		manager.getView().addViewListener(listener);
  	}
  	
  	// __________________________________________________________________________
  	
  	public void addRangeListener(RangeListener listener)
  	{
  		listeners.add(listener);
  	}
  	
  	public void removeRangeListener(RangeListener listener)
  	{
  		listeners.remove(listener);
  	}
  	
  	//___________________________________________________________________________
  	
  	protected void notifyChanges(RangeEvent event)
  	{
  		for (Iterator iter = listeners.iterator(); iter.hasNext();)
  			((RangeListener) iter.next()).stateChanged(event);
  	}
  	
  	//___________________________________________________________________________
  
  	protected class LocalViewListener implements ViewListener
  	{
  		protected Object propogationID;
  
  		public LocalViewListener(Object propogationID)
  		{
  		   this.propogationID = propogationID;
  		}
  
  		public void stateChanged(ViewEvent e)
  		{
  		   notifyChanges(new RangeEvent(e));
  		}
  	}
  }
  