/*
* @(#)AbstractView.java
*
* Copyright 2002 EGANTT LLP. All rights reserved.
* PROPRIETARY/QPL. Use is subject to license terms.
*/
package com.egantt.model.drawing.axis.view;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import com.egantt.model.drawing.DrawingAxis;
import com.egantt.model.drawing.DrawingTransform;
import com.egantt.model.drawing.axis.AxisInterval;
import com.egantt.model.drawing.axis.AxisView;
import com.egantt.model.drawing.axis.view.event.ViewEvent;
import com.egantt.model.drawing.axis.view.event.ViewListener;
/**
* AbstractAxis handles the basic implementation of an Axis which are not related
* to the type of data that the Axis shall be supporting
*/
public abstract class AbstractView implements AxisView
{
protected AxisInterval visible; /** visible extents */
protected DrawingAxis axis; /** maximum extents */
protected Set <ViewListener>listeners = new HashSet<ViewListener>(); // notification list
protected int orientation;
public AbstractView(DrawingAxis axis, int orientation)
{
this.axis = axis;
this.orientation = orientation;
}
// _________________________________________________________________________
public int getOrientation() {
return orientation;
}
// _________________________________________________________________________
public DrawingAxis getAxis()
{
return axis;
}
public AxisInterval getInterval()
{
return visible != null ? visible : axis.getInterval();
}
// _________________________________________________________________________
public DrawingTransform getTransform()
{
AxisInterval interval = visible != null
? visible
: axis.getInterval();
return interval != null ? interval.getTransform() : null;
}
// __________________________________________________________________________
public synchronized boolean setVisible(AxisInterval visible)
{
if (! this.axis.getInterval().contains(visible))
return false;
this.visible = visible; // make changes
fireStateChanged(new ViewEvent(this)); // notify changes
return true;
}
// _________________________________________________________________________
public synchronized boolean addViewListener(ViewListener listener)
{
return listeners.add(listener);
}
public synchronized boolean removeViewListener(ViewListener listener)
{
return listeners.remove(listeners);
}
// __________________________________________________________________________
protected synchronized void fireStateChanged(ViewEvent event)
{
for (Iterator iter = listeners.iterator(); iter.hasNext();)
((ViewListener) iter.next()).stateChanged(event);
}
}