/* * @(#)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)); } } }