Overview | Package | Class | Use | Tree | Deprecated | Index | Help
| http://www.jpicedt.org
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## jpicedt.graphic.model
Class Drawing

    java.lang.Object
      jpicedt.graphic.model.Drawing

All Implemented Interfaces:
  StateEditable

public class Drawing
extends Object
implements StateEditable

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.14.2.1 2007/09/02 11:56:26 reynal Exp $
Author:
  Sylvain Reynal
See Also:
  `EditorKit`, `PECanvas`

Nested Class Summary
`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 Rectangle2D` | `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 c)` Construct a new Drawing from the given Collection, which is supposed to contain Element's.
`Drawing(Drawing dr)` cloning constructor

Method Summary
`void` | `addDrawingListener(DrawingListener l)` adds a DrawingListener to the Drawing
`void` | `addElement(Element element)` Add the given element to this Drawing
`Object` | `clone()`
`Iterator` | `elements()`
`protected void` | `fireChangedUpdate(Element changed, DrawingEvent.EventType type)` Notify all listeners that have registered interest for notification on this event type.
`Rectangle2D` | `getBoundingBox()`
`Drawing.Customizer` | `getCustomizer()` Return a bounding box customizer for this Drawing
`Element` | `getElement(int i)`
`String` | `getNotparsedCommands()`
`Drawing.RootElement` | `getRootElement()`
`View` | `getRootView()`
`boolean` | `isAutoComputeBoundingBox()` Return true if the bb is computed automatically on-the-fly
`void` | `removeDrawingListener(DrawingListener l)` removes a DrawingListener from the Drawing
`void` | `removeElement(Element element)` Remove the given graphic object from this Drawing, overriden so as to update selection if this element was selected.
`void` | `replaceElement(Element src, Element dest)` Replace the given "src" element with the given "dest" element, if "src" belongs to this drawing.
`void` | `replaceElement(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` | `restoreState(Hashtable map)` Restore RootElement from the given Hashtable, using key="state"
`void` | `setBoundingBox(Rectangle2D bb)` set bounding box manually ; set to null to switch back to automatic behaviour
`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 map)` Store a clone of RootElement in the given Hashtable, with key = "state"
`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`

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 Rectangle2D 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 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 Object clone()

  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()

  Returns:
    the number of graphic objects in this drawing.

### removeElement

    public void removeElement(Element element)

  Remove the given graphic object from this Drawing, overriden so as to update selection if this element was selected.

### addElement

    public void addElement(Element element)

  Add the given element to this Drawing

### replaceElement

    public void replaceElement(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.

### replaceElement

    public void replaceElement(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.

### elements

    public Iterator elements()

  Returns:
    an iterator over elements

### getElement

    public Element getElement(int i)

  Returns:
    the element at position i

### getBoundingBox

    public Rectangle2D getBoundingBox()

  Returns:
    the bounding-box of the drawing ; this is a convenience call to `rootElement.getBoundingBox` except if setBoundingBox was called with a non-null argument before.

### setBoundingBox

    public void setBoundingBox(Rectangle2D bb)

  set bounding box manually ; set to null to switch back to automatic behaviour

### isAutoComputeBoundingBox

    public boolean isAutoComputeBoundingBox()

  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 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`

### toString

    public String toString()

  Returns a String representing the drawing for debugging use only.

### setNotparsedCommands

    public void setNotparsedCommands(String str)

### 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

Overview | Package | Class | Use | Tree | Deprecated | Index | Help
| http://www.jpicedt.org
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

Submit a bug : syd@jpicedt.org