/*
* @(#)DrawingState.java
*
* Copyright 2002 EGANTT LLP. All rights reserved.
* PROPRIETARY/QPL. Use is subject to license terms.
*/
package com.egantt.model.drawing;
import com.egantt.model.drawing.axis.AxisView;
import com.egantt.model.drawing.state.event.DrawingStateListener;
import java.awt.Point;
import java.awt.Shape;
import java.util.Iterator;
/**
* This interface, is designed to remember the state of a drawing between repaints
*/
public interface DrawingState
{
// __________________________________________________________________________
void initialise();
void terminate();
// __________________________________________________________________________
boolean addDrawingStateListener(DrawingStateListener listener);
boolean removeDrawingStateListener(DrawingStateListener listener);
// __________________________________________________________________________
/**
* Intent: converts a location back into a unique idenitifier
* @param @see.java.awt.Point: mouse location from the <code>Drawing</code>
* @return @see java.lang.Object unique idenfifier likely to return null
*/
Object getValueAt(Point location);
Object getValueAt(Point _location, int xOffset, int yOffset);
/**
* Intent: to iterate through the Drawing Parts
* return: @see java.util.Iterator the uppermost drawingParts are returned first
*/
Iterator parts();
// __________________________________________________________________________
/**
* Intent: to listen to an Axis and provide notification changes
* @param Axis axis to listen to
* @return: false if already listened to
*/
boolean put(Object key, AxisView axisView);
/**
* Intent: to register the bounds to a given unique key, there can be
* n bounds for 1 key.
* @param key: unique identifier
* @param bounds: the drawing bounds
* @return if the bound --> key have not been added before return true
*/
boolean put(Object key, Shape bounds);
// __________________________________________________________________________
/**
* Intent: has the drawing state been notified about this object before
* @return true if the key has been previously added
*/
boolean contains(Object key);
}