http://www.jpicedt.org

jpicedt.graphic.model
Class Drawing

java.lang.Object
  extended by jpicedt.graphic.model.Drawing
All Implemented Interfaces:
Iterable<Element>, Collection<Element>, List<Element>, StateEditable

public class Drawing
extends Object
implements StateEditable, List<Element>

An extensible array used to store Elements

This is the MODEL part of the View-Model-Controller paradigm (aka javax.swing.text.Document), aimed at being plugged into an existing PECanvas. It has the structure of a tree-model, with the root element of the tree being Drawing.RootElement : Element's added to this Drawing are actually added to its RootElement ; each Element in turn may or may not have children (see e.g. classes DefaultLeafElement and BranchElement).
Element's should be added to this Drawing using the Drawing's API (i.e. shouldn't be directly added to RootElement), by using the addElement() method. so that DrawingEvent's dispatching works properly.

Objects are stored in ascending order according to their z-value, i.e. from back to front. Note that this class does NOT include any selection-handling mechanism : for a variety of reasons, this mechanism has been moved to the associated EditorKit (aka "Controller" in the VMC paradigm), which may itself delegate this behaviour to an appropriate SelectionHandler. This makes the Drawing class a versatile document model for handling a variety of graphics elements without bothering about the UI interaction.

Since:
jPicEdt 1.3
Version:
$Id: Drawing.java,v 1.29 2013/03/27 07:02:49 vincentb1 Exp $
Author:
Sylvain Reynal
See Also:
EditorKit, PECanvas

Nested Class Summary
 class Drawing.BoundingBox
           
 class Drawing.Customizer
          a customizer for editing the bounding box
 class Drawing.DefaultDrawingEvent
          An implementation of DrawingEvent.
 class Drawing.RootElement
          The Element that is the root of the tree of Element's in this Drawing.
 
Field Summary
protected  Drawing.BoundingBox boundingBox
          bounding box used when formatting to text ; null means that it'll be computed automatically
protected  EventListenerList listenerList
          list of listener's (e.g.
protected  String notParsedCommands
          a string containing commands read from file but not parsed
protected  Drawing.RootElement root
          the root-element of the drawing
 
Fields inherited from interface javax.swing.undo.StateEditable
RCSID
 
Constructor Summary
Drawing()
          Construct a new empty Drawing
Drawing(BranchElement e)
          Construct a new Drawing whose content is initialized from the content of the given BranchElement.
Drawing(Collection<Element> c)
          Construct a new Drawing from the given Collection, which is supposed to contain Element's.
Drawing(Drawing dr)
          Cloning constructor.
 
Method Summary
 boolean add(Element o)
          convenience call to RootElement's method
 void add(int position, Element o)
          convenience call to RootElement's method
 boolean addAll(Collection<? extends Element> c)
          convenience call to RootElement's method
 boolean addAll(int pos, Collection<? extends Element> c)
          convenience call to RootElement's method
 void addDrawingListener(DrawingListener l)
          adds a DrawingListener to the Drawing.
 void clear()
          convenience call to RootElement's method
 Drawing clone()
           
 boolean contains(Object o)
          convenience call to RootElement's method
 boolean containsAll(Collection<?> c)
          convenience call to RootElement's method
protected  void fireChangedUpdate(Element changed, DrawingEvent.EventType type)
          Notify all listeners that have registered interest for notification on this event type.
 Element get(int i)
           
 Rectangle2D getBoundingBox()
           
 Drawing.Customizer getCustomizer()
          Return a bounding box customizer for this Drawing
 String getNotparsedCommands()
           
 Drawing.RootElement getRootElement()
           
 View getRootView()
           
 int indexOf(Object child)
          Returns the index of the given Element.
 boolean isAutoComputeBoundingBox()
          Return true if the bb is computed automatically on-the-fly.
 boolean isDisplayBoundingBox()
          Return true if the bb is computed automatically on-the-fly.
 boolean isEmpty()
          convenience call to RootElement's method
 Iterator<Element> iterator()
          convenience call to RootElement's method
 int lastIndexOf(Object o)
          Returns the last index of the given Element
 ListIterator<Element> listIterator()
           
 ListIterator<Element> listIterator(int index)
           
 Element remove(int index)
          Remove the Element with the given index from this BranchElement
 boolean remove(Object o)
          convenience call to RootElement's method
 boolean removeAll(Collection<?> c)
          convenience call to RootElement's method
 void removeDrawingListener(DrawingListener l)
          removes a DrawingListener from the Drawing.
 void replace(Element src, Element dest)
          Replace the given "src" element with the given "dest" element, if "src" belongs to this drawing.
 void restoreState(Hashtable<?,?> map)
          Restore RootElement from the given Hashtable, using key="state"
 boolean retainAll(Collection<?> c)
          convenience call to RootElement's method
 Element set(int index, Element element)
          Replace the element at the given index with the given graphic element No effet if "element" already belongs to the drawing.
 void setAutoComputeBoundingBox(boolean b)
          Return true if the bb is computed automatically on-the-fly.
 void setBoundingBox(Rectangle2D bb)
          Set bounding box manually.
 void setDisplayBoundingBox(boolean b)
          Return true if the bb is computed automatically on-the-fly.
 void setNotparsedCommands(String str)
           
 void setViewTree(ViewFactory f)
          Set the view tree that renders this drawing to screen, starting from the root-element.
 int size()
           
 void storeState(Hashtable<Object,Object> map)
          Store a clone of RootElement in the given Hashtable, with key = "state"
 List<Element> subList(int fromIndex, int toIndex)
           
 Object[] toArray()
          convenience call to RootElement's method
<T> T[]
toArray(T[] a)
          convenience call to RootElement's method
 String toString()
          Returns a String representing the drawing for debugging use only.
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface java.util.List
equals, hashCode
 

Field Detail

root

protected Drawing.RootElement root
the root-element of the drawing


listenerList

protected EventListenerList listenerList
list of listener's (e.g. DrawingListener's) that get notified events from this model


notParsedCommands

protected String notParsedCommands
a string containing commands read from file but not parsed


boundingBox

protected Drawing.BoundingBox boundingBox
bounding box used when formatting to text ; null means that it'll be computed automatically

Constructor Detail

Drawing

public Drawing()
Construct a new empty Drawing


Drawing

public Drawing(Collection<Element> c)
Construct a new Drawing from the given Collection, which is supposed to contain Element's. Children are cloned beforehands.


Drawing

public Drawing(BranchElement e)
Construct a new Drawing whose content is initialized from the content of the given BranchElement. Children are cloned beforehands, so it's perfectly safe to use this constructor if one doesn't want to modify the initial content of the given BranchElement.


Drawing

public Drawing(Drawing dr)
Cloning constructor.

Method Detail

clone

public Drawing clone()
Overrides:
clone in class Object
Returns:
A deep copy of this Drawing.

getRootElement

public Drawing.RootElement getRootElement()
Returns:
the root-element for the tree hierarchy that stores element in this drawing.

size

public int size()
Specified by:
size in interface Collection<Element>
Specified by:
size in interface List<Element>
Returns:
The number of graphic objects in this drawing.

set

public Element set(int index,
                   Element element)
Replace the element at the given index with the given graphic element No effet if "element" already belongs to the drawing.

Specified by:
set in interface List<Element>

replace

public void replace(Element src,
                    Element dest)
Replace the given "src" element with the given "dest" element, if "src" belongs to this drawing. No effet if "dest" already belongs to the drawing.


get

public Element get(int i)
Specified by:
get in interface List<Element>
Returns:
The element at position i.

getBoundingBox

public Rectangle2D getBoundingBox()
Returns:
The bounding-box of the drawing.

setBoundingBox

public void setBoundingBox(Rectangle2D bb)
Set bounding box manually.


isAutoComputeBoundingBox

public boolean isAutoComputeBoundingBox()
Return true if the bb is computed automatically on-the-fly.


setAutoComputeBoundingBox

public void setAutoComputeBoundingBox(boolean b)
Return true if the bb is computed automatically on-the-fly.


isDisplayBoundingBox

public boolean isDisplayBoundingBox()
Return true if the bb is computed automatically on-the-fly.


setDisplayBoundingBox

public void setDisplayBoundingBox(boolean b)
Return true if the bb is computed automatically on-the-fly.


getRootView

public View getRootView()
Returns:
the root-view that renders this Drawing to a graphic context ; this is actually the View associated with the root-element.

setViewTree

public void setViewTree(ViewFactory f)
Set the view tree that renders this drawing to screen, starting from the root-element. The root-view produced by the factory (to be associated with the root-element) must know how to find its container (usually a PECanvas), otherwise calls to repaint, etc… will fail.

Parameters:
f - the ViewFactory that produces View's for the Element's of the tree.

addDrawingListener

public void addDrawingListener(DrawingListener l)
adds a DrawingListener to the Drawing.


removeDrawingListener

public void removeDrawingListener(DrawingListener l)
removes a DrawingListener from the Drawing.


fireChangedUpdate

protected void fireChangedUpdate(Element changed,
                                 DrawingEvent.EventType type)
Notify all listeners that have registered interest for notification on this event type.

Parameters:
changed - an array containing the elements that changed

storeState

public void storeState(Hashtable<Object,Object> map)
Store a clone of RootElement in the given Hashtable, with key = "state"

Specified by:
storeState in interface StateEditable

restoreState

public void restoreState(Hashtable<?,?> map)
Restore RootElement from the given Hashtable, using key="state"

Specified by:
restoreState in interface StateEditable

add

public boolean add(Element o)
convenience call to RootElement's method

Specified by:
add in interface Collection<Element>
Specified by:
add in interface List<Element>

add

public void add(int position,
                Element o)
convenience call to RootElement's method

Specified by:
add in interface List<Element>

addAll

public boolean addAll(Collection<? extends Element> c)
convenience call to RootElement's method

Specified by:
addAll in interface Collection<Element>
Specified by:
addAll in interface List<Element>

addAll

public boolean addAll(int pos,
                      Collection<? extends Element> c)
convenience call to RootElement's method

Specified by:
addAll in interface List<Element>

clear

public void clear()
convenience call to RootElement's method

Specified by:
clear in interface Collection<Element>
Specified by:
clear in interface List<Element>

contains

public boolean contains(Object o)
convenience call to RootElement's method

Specified by:
contains in interface Collection<Element>
Specified by:
contains in interface List<Element>

containsAll

public boolean containsAll(Collection<?> c)
convenience call to RootElement's method

Specified by:
containsAll in interface Collection<Element>
Specified by:
containsAll in interface List<Element>

isEmpty

public boolean isEmpty()
convenience call to RootElement's method

Specified by:
isEmpty in interface Collection<Element>
Specified by:
isEmpty in interface List<Element>

iterator

public Iterator<Element> iterator()
convenience call to RootElement's method

Specified by:
iterator in interface Iterable<Element>
Specified by:
iterator in interface Collection<Element>
Specified by:
iterator in interface List<Element>

remove

public boolean remove(Object o)
convenience call to RootElement's method

Specified by:
remove in interface Collection<Element>
Specified by:
remove in interface List<Element>

remove

public Element remove(int index)
Remove the Element with the given index from this BranchElement

Specified by:
remove in interface List<Element>

removeAll

public boolean removeAll(Collection<?> c)
convenience call to RootElement's method

Specified by:
removeAll in interface Collection<Element>
Specified by:
removeAll in interface List<Element>

retainAll

public boolean retainAll(Collection<?> c)
convenience call to RootElement's method

Specified by:
retainAll in interface Collection<Element>
Specified by:
retainAll in interface List<Element>

toArray

public Object[] toArray()
convenience call to RootElement's method

Specified by:
toArray in interface Collection<Element>
Specified by:
toArray in interface List<Element>

toArray

public <T> T[] toArray(T[] a)
convenience call to RootElement's method

Specified by:
toArray in interface Collection<Element>
Specified by:
toArray in interface List<Element>

subList

public List<Element> subList(int fromIndex,
                             int toIndex)
Specified by:
subList in interface List<Element>

listIterator

public ListIterator<Element> listIterator()
Specified by:
listIterator in interface List<Element>

listIterator

public ListIterator<Element> listIterator(int index)
Specified by:
listIterator in interface List<Element>

lastIndexOf

public int lastIndexOf(Object o)
Returns the last index of the given Element

Specified by:
lastIndexOf in interface List<Element>
Returns:
-1 if not found

indexOf

public int indexOf(Object child)
Returns the index of the given Element.

Specified by:
indexOf in interface List<Element>
Returns:
-1 if not found

toString

public String toString()
Returns a String representing the drawing for debugging use only.

Overrides:
toString in class Object

setNotparsedCommands

public void setNotparsedCommands(String str)
Parameters:
str - a string containing commands read from file or inserted by user, but not parsable.

getNotparsedCommands

public String getNotparsedCommands()
Returns:
a string containing (e.g. LaTeX) commands read from file or inserted by user, but not parsable.

getCustomizer

public Drawing.Customizer getCustomizer()
Return a bounding box customizer for this Drawing


http://www.jpicedt.org

Submit a bug : syd@jpicedt.org