http://www.jpicedt.org

jpicedt.graphic
Class PECanvas

java.lang.Object
  extended byjava.awt.Component
      extended byjava.awt.Container
          extended byjavax.swing.JComponent
              extended byjavax.swing.JPanel
                  extended byjpicedt.graphic.PECanvas
All Implemented Interfaces:
Accessible, ImageObserver, MenuContainer, Scrollable, Serializable

public class PECanvas
extends JPanel
implements Scrollable

This is a JComponent on which graphic elements are drawn. It's has an underlying model (a Drawing) to represent the content, an EditorKit to manipulate the content, and a View responsible for rendering the content. EditorKit, Drawing, and View's are pluggable : the EditorKit is responsible for creating 1) a default Drawing and 2) a ViewFactory that will populate the View tree associated with the Drawing, by attaching a View to each element in the model.

Depending on the content type this Component is loaded with, it may plug a new EditorKit on-the-fly that's suited for the given content type (e.g. LaTeX, Postscript, SVG-XML, etc...).

Model to View/View to Model

Graphic objects are stored (e.g. in a Drawing) in natural coordinates, ie LaTeX/Postscript/... coordinates, using e.g. a "1 mm" unitlength : that's what we call "model coordinate". Obviously, we've to translate these coordinates to screen coordinates (e.g. JViewport-coordinate or JPanel-coordinate) before rendering, and this is done very simply by using an AffineTransform and adding it to the current Graphic2D context in the body of the "paintComponent" method. The following picture sums up the translation process that takes place b/w model- and view-coordinate.

The benefits of such an approach is to make it easy for someone willing to develop a parser/formater to handle objects coordinates with the fewest possible overhead, since objects coordinates are "natively" available in natural (ie from left to right and from bottom to top) coordinates, and this is perfectly suited for formatting language like LaTeX, Postscript or SVG-XML. Besides, this makes sense with the grid ticks marks.

Margins are encapsulated in a PageFormat (an inner class) object. Contrary to previous jpicedt releases, it's no longer necessary, as of jpicedt 1.3.2, to provide formater methods with the ptOrg parameter.

In addition to the standard behaviour inherited from JPanel, PropertyChangeEvent's are triggered when :

Since:
jpicedt 1.0
Version:
$Id: PECanvas.java,v 1.24.2.2 2007/09/02 11:56:16 reynal Exp $

Author:
Sylvain Reynal
See Also:
Serialized Form

Nested Class Summary
 
Nested classes inherited from class javax.swing.JPanel
JPanel.AccessibleJPanel
 
Nested classes inherited from class javax.swing.JComponent
JComponent.AccessibleJComponent
 
Nested classes inherited from class java.awt.Container
Container.AccessibleAWTContainer
 
Nested classes inherited from class java.awt.Component
Component.AccessibleAWTComponent, Component.BltBufferStrategy, Component.FlipBufferStrategy
 
Field Summary
static String CONTENT_TYPE_CHANGE
          property name for content-type's change events
protected  ContentType contentType
          the current content-type for this PECanvas (determines the EditorKit behaviour)
protected  Drawing drawing
          the model for this canvas
static String DRAWING_CHANGE
          property name for drawing-change events
static String EDITOR_KIT_CHANGE
          property name for editorkit-change events
protected  Grid grid
          the grid attached to this canvas
static String KEY_CONTENT_TYPE
          key for Properties's content-type value
static String KEY_UNDOABLE_STEPS
          key for Properties's nb of undoable steps value
static String KEY_ZOOM
          key for Properties's zoom value
protected  EditorKit kit
          the current editor kit for this component
static int MAX_UNDOABLE_STEPS_DEFAULT
          default undoable events to remember
protected  AffineTransform model2ViewTransform
          the AffineTransform used to translate from model-coordinates to view-coordinates ; gets updated each time either the zoom factor or the page format changes
protected  PageFormat pageFormat
          pageFormat encapsulates board size and margin data
static String[] PREDEFINED_ZOOM_STRINGS
           
static double[] PREDEFINED_ZOOMS
           
protected  RenderingHints renderingHints
          a Map storing RenderingHints to be applied to the graphic context when rendering the drawing
protected  StateEdit stateEdit
          the UndoableEdit in progress
protected  UndoableEditSupport undoableEditSupport
          the UndoableEditSupport delegate for UndoableEditEvent firing
protected  UndoManager undoManager
          the UndoManager delegate for undo/redo operation
protected  AffineTransform view2ModelTransform
          the AffineTransform used to translate from mouse-coordinates to model-coordinates ; gets updated each time model2ViewTransform changes
static double ZOOM_DEFAULT
           
 
Fields inherited from class javax.swing.JComponent
accessibleContext, listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
 
Fields inherited from class java.awt.Component
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
 
Fields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
 
Constructor Summary
PECanvas()
          Construct a new PECanvas initialized with default values.
PECanvas(double zoom, PageFormat pageFormat, Grid grid, ContentType contentType)
          Construct a new PECanvas with the default editor-kit and drawing as content storage.
 
Method Summary
 void addPEMouseInputListener(PEMouseInputListener l)
          Adds the specified mouse listener to receive mouse events from this component.
 void addSelectionListener(SelectionListener l)
          adds a SelectionListener to the Canvas
 void addUndoableEditListener(UndoableEditListener l)
          Register an UndoableEditListener for the Drawing hosted by this canvas.
 void addZoomListener(ZoomListener l)
          adds a ZoomListener to the Canvas
 void beginUndoableUpdate(String presentationName)
          Create a new UndoableEdit that holds the current state of the Drawing.
 boolean canRedo()
           
 boolean canUndo()
           
 void copy()
          Copy the content of the current selection to the System's clipboard (after a formatting to text)
 void copy(Clipboard clipbrd)
          Copy the content of the current selection (through a GraphicTransferable) to the System's clipboard (after a formatting to text), AND to the given clipboard if non-null (the latter can be a local clipboard supporting more data-flavors than the system clipboard)
protected  EditorKit createDefaultEditorKit(ContentType contentType)
          Creates a default editor kit (EditorKit) whose factory delegates are initialized from the given content-type.
 void cut()
          Cut the content of the current selection to the System clipboard, after formatting to text.
 void cut(Clipboard clipbrd)
          Cut the content of the current selection (through a GraphicTransferable) to the System clipboard, AND to the given ClipBoard if non-null.
 void deleteSelection()
          remove all selected objects from the drawing
 void endUndoableUpdate()
          Ends the current UndoableEdit and fire an event to registered listeners.
protected  void fireSelectionUpdate(Element[] elements, SelectionEvent.EventType type)
          Notify all listeners that have registered interest for notification on this event type.
protected  void fireSelectionUpdate(Element element, SelectionEvent.EventType type)
          Notify all listeners that have registered interest for notification on this event type.
protected  void fireZoomUpdate(double oldZoom, double newZoom, PicPoint ptClick)
          Notify all listeners that have registered interest for notification on this event type.
 ContentType getContentType()
           
 Drawing getDrawing()
           
 EditorKit getEditorKit()
          Fetches the currently installed kit for handling content.
 Grid getGrid()
           
 AffineTransform getModelToViewTransform()
           
 PageFormat getPageFormat()
           
 Dimension getPreferredScrollableViewportSize()
           
 String getRedoPresentationName()
           
 RenderingHints getRenderingHints()
          Return the RenderingHints applied to the graphic context when rendering this component
 double getScaleFactor()
           
 int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction)
           
 boolean getScrollableTracksViewportHeight()
           
 boolean getScrollableTracksViewportWidth()
           
 int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction)
           
 int getSelectionSize()
           
 PicPoint getSheetOrigin()
           
 String getUndoPresentationName()
           
 AffineTransform getViewToModelTransform()
           
 double getZoomFactor()
           
static int getZoomIndex(double zoom)
          utilities to retrieve the index of the given zoom in PREDEFINED_ZOOMS ; this may be used by GUI widgets, e.g.
 void groupSelection()
          group all selected objects into a new PicGroup and add it to the drawing.
 void insert(Reader reader, Parser parser)
          insert content from a reader into the current drawing
 boolean isRequestFocusEnabled()
          Overriden from JComponent Signals that this component can receive focus (useful for handling keyevents)
 boolean isSelected(Element e)
           
 void joinSelection()
          join all selected objects of type PicMultiCurveConvertable into a new PicMulticurve and add it to the drawing.
 PicPoint modelToView(PicPoint src, PicPoint dst)
          Converts a point from the model-coordinate system to the pixel-coordinate system.
 Shape modelToView(Shape src)
          Converts a Shape from the model-coordinate system to the pixel-coordinate system.
 void paintComponent(Graphics g)
          paintComponent(Graphics g) is called by AWTEventDispatchThread via "paint(g)" it's absolutely necessary to call super.paintComponent(g) so that the background gets properly painted (PECanvas is opaque)
 void paste(boolean translate)
          Add the content of the System's ClipBoard to the current drawing, then select it.
 void paste(Clipboard clipbrd, boolean translate)
          Add the content of the given ClipBoard to the current drawing, then select it.
protected  void processMouseEvent(MouseEvent e)
          Processes mouse events occurring on this component by dispatching them to any registered PEMouseListener objects.
protected  void processMouseMotionEvent(MouseEvent e)
          Processes mouse motion events occurring on this component by dispatching them to any registered PEMouseInputListener objects.
 void read(Reader reader, Parser parser)
          read drawing content from a reader and erase old one.
 void redo()
          Redo last change
 void removePEMouseInputListener(PEMouseInputListener l)
          Removes the specified mouse listener so that it no longer receives mouse events from this component.
 void removeSelectionListener(SelectionListener l)
          removes a SelectionListener from the Canvas
 void removeUndoableEditListener(UndoableEditListener l)
          Unregister an UndoableEditListener for the Drawing hosted by this canvas.
 void removeZoomListener(ZoomListener l)
          removes a ZoomListener from the Canvas
 void repaintFromModelRect(Rectangle2D rect)
          add the given rectangle, given in model-coordinates, to the list of dirty regions.
 void select(Collection c, boolean incremental)
          select the elements in the given collection (if they belong to the drawing)
 void select(Element obj, boolean incremental)
          select the given element
 void selectAll(boolean state)
          select or unselect every object in this drawing
 Iterator selection()
           
 void setContentType(ContentType newContentType)
          change the current content-type: this implies plugging a new ViewFactory and a new FormatterFactory to the currently installed EditorKit, as obtained from the given newContentType argument.
 void setDrawing(Drawing dr)
          set the Drawing model for this component.
 void setEditorKit(EditorKit kit)
          Sets the currently installed kit for handling content.
 void setPageFormat(PageFormat pageFormat)
          Set the size of the drawing board.
 void setUndoLimit(int limit)
          set the number of undoable events to remember
 void setZoomFactor(double zoom)
          Convenience call to setZoomFactor(zoom,null)
 void setZoomFactor(double zoom, PicPoint ptClick)
          sets the current zoom factor to the given double, then updates various properties (model <-> view transforms, dimension, preferredSize...), finally, sources a ZoomEvent to give a chance to receiver to update their state accordingly (this may be used e.g.
 void undo()
          Undo last change
 void unGroup(PicGroup g)
          fetch all Element's belonging to the given PicGroup and add them to its parent, removing the given PicGroup from its parent afterward.
 void unSelect(Element obj)
          unselect the given object
 PicPoint view2Model(PicPoint src, PicPoint dst)
          Converts a point from the pixel-coordinate system to the model-coordinate system.
 Shape viewToModel(Shape src)
          Converts a Shape from the pixel-coordinate system to the model-coordinate system.
 void write(Writer writer, boolean writeSelectionOnly)
          Write drawing content to the given stream
 
Methods inherited from class javax.swing.JPanel
getAccessibleContext, getUI, getUIClassID, paramString, setUI, updateUI
 
Methods inherited from class javax.swing.JComponent
addAncestorListener, addNotify, addPropertyChangeListener, addPropertyChangeListener, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBorder, getBounds, getClientProperty, getComponentGraphics, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getGraphics, getHeight, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPreferredSize, getPropertyChangeListeners, getPropertyChangeListeners, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, isDoubleBuffered, isLightweightComponent, isManagingFocus, isMaximumSizeSet, isMinimumSizeSet, isOpaque, isOptimizedDrawingEnabled, isPaintingTile, isPreferredSizeSet, isValidateRoot, paint, paintBorder, paintChildren, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removePropertyChangeListener, removePropertyChangeListener, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFont, setForeground, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update
 
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, addImpl, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setFocusCycleRoot, setFocusTraversalKeys, setFocusTraversalPolicy, setLayout, transferFocusBackward, transferFocusDownCycle, validate, validateTree
 
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMouseWheelListeners, getName, getParent, getPeer, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, hide, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, repaint, repaint, repaint, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusUpCycle
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

PREDEFINED_ZOOM_STRINGS

public static final String[] PREDEFINED_ZOOM_STRINGS

PREDEFINED_ZOOMS

public static final double[] PREDEFINED_ZOOMS

ZOOM_DEFAULT

public static final double ZOOM_DEFAULT
See Also:
Constant Field Values

KEY_ZOOM

public static final String KEY_ZOOM
key for Properties's zoom value

See Also:
Constant Field Values

KEY_CONTENT_TYPE

public static final String KEY_CONTENT_TYPE
key for Properties's content-type value

See Also:
Constant Field Values

KEY_UNDOABLE_STEPS

public static final String KEY_UNDOABLE_STEPS
key for Properties's nb of undoable steps value

See Also:
Constant Field Values

MAX_UNDOABLE_STEPS_DEFAULT

public static final int MAX_UNDOABLE_STEPS_DEFAULT
default undoable events to remember

See Also:
Constant Field Values

DRAWING_CHANGE

public static final String DRAWING_CHANGE
property name for drawing-change events

See Also:
Constant Field Values

EDITOR_KIT_CHANGE

public static final String EDITOR_KIT_CHANGE
property name for editorkit-change events

See Also:
Constant Field Values

CONTENT_TYPE_CHANGE

public static final String CONTENT_TYPE_CHANGE
property name for content-type's change events

See Also:
Constant Field Values

drawing

protected Drawing drawing
the model for this canvas


pageFormat

protected PageFormat pageFormat
pageFormat encapsulates board size and margin data


contentType

protected ContentType contentType
the current content-type for this PECanvas (determines the EditorKit behaviour)


model2ViewTransform

protected AffineTransform model2ViewTransform
the AffineTransform used to translate from model-coordinates to view-coordinates ; gets updated each time either the zoom factor or the page format changes


view2ModelTransform

protected AffineTransform view2ModelTransform
the AffineTransform used to translate from mouse-coordinates to model-coordinates ; gets updated each time model2ViewTransform changes


grid

protected Grid grid
the grid attached to this canvas


kit

protected EditorKit kit
the current editor kit for this component


undoableEditSupport

protected UndoableEditSupport undoableEditSupport
the UndoableEditSupport delegate for UndoableEditEvent firing


undoManager

protected UndoManager undoManager
the UndoManager delegate for undo/redo operation


stateEdit

protected StateEdit stateEdit
the UndoableEdit in progress


renderingHints

protected RenderingHints renderingHints
a Map storing RenderingHints to be applied to the graphic context when rendering the drawing

Constructor Detail

PECanvas

public PECanvas()
Construct a new PECanvas initialized with default values.


PECanvas

public PECanvas(double zoom,
                PageFormat pageFormat,
                Grid grid,
                ContentType contentType)
Construct a new PECanvas with the default editor-kit and drawing as content storage.

Parameters:
zoom - initial zoom factor
Since:
PicEdt 1.0
Method Detail

paintComponent

public void paintComponent(Graphics g)
paintComponent(Graphics g) is called by AWTEventDispatchThread via "paint(g)" it's absolutely necessary to call super.paintComponent(g) so that the background gets properly painted (PECanvas is opaque)

This implementation first applies an AffineTransform to the graphic context : this transform maps in effect model-coordinates to screen-coordinates. Then invokes the paint() method in that order :


repaintFromModelRect

public void repaintFromModelRect(Rectangle2D rect)
add the given rectangle, given in model-coordinates, to the list of dirty regions.


getRenderingHints

public RenderingHints getRenderingHints()
Return the RenderingHints applied to the graphic context when rendering this component


getDrawing

public Drawing getDrawing()
Returns:
the model, ie a Drawing containing only non-selected objects

setDrawing

public void setDrawing(Drawing dr)
set the Drawing model for this component. The currently registered EditorKit is used to build a viewtree for the drawing. A PropertyChange event (DRAWING_CHANGE) is sent to each listener.


getEditorKit

public EditorKit getEditorKit()
Fetches the currently installed kit for handling content.


createDefaultEditorKit

protected EditorKit createDefaultEditorKit(ContentType contentType)
Creates a default editor kit (EditorKit) whose factory delegates are initialized from the given content-type. If an EditorKit was already installed in this PECanvas, we try to reuse its properties in the new EditorKit, if applicable.

Parameters:
contentType - null if a default content-type should be used
Returns:
the editor kit

setEditorKit

public void setEditorKit(EditorKit kit)
Sets the currently installed kit for handling content. This is the bound property that establishes the content type of the editor. Any old kit is first deinstalled, then if kit is non-null, the new kit is installed.

A default drawing is created from it if there was no drawing set in this canvas before, otherwise the old drawing is reused : in both cases, setDrawing is called, but this allows the caller to change the ContentType w/o changing the Drawing if it deems it unnecessary (otherwise, it may call setDrawing() afterwards). A PropertyChange event (EDITOR_KIT_CHANGE) is always fired when setEditorKit is called.

Parameters:
kit - the desired editor behavior
See Also:
getEditorKit()

getContentType

public ContentType getContentType()
Returns:
the current content-type

setContentType

public void setContentType(ContentType newContentType)
change the current content-type: this implies plugging a new ViewFactory and a new FormatterFactory to the currently installed EditorKit, as obtained from the given newContentType argument.

Parameters:
newContentType - if null, the DefaultContentType is installed.

setPageFormat

public void setPageFormat(PageFormat pageFormat)
Set the size of the drawing board. Length are given in mm (this should approximately represent true mm on the screen, however this might slightly depend on the underlying platform).
This in turn sets the preferred size of the component. .

Since:
jPicEdt

getPageFormat

public PageFormat getPageFormat()
Returns:
the page format for this drawing board
Since:
jPicEdt

getSheetOrigin

public PicPoint getSheetOrigin()
Returns:
the pixel-coordinates of the (0,0) model origin when zoom = 1.0

getGrid

public Grid getGrid()
Returns:
the grid attached to this canvas

getModelToViewTransform

public AffineTransform getModelToViewTransform()
Returns:
an AffineTransform that represents the maping b/w the model-coordinate system and the pixel coordinate system. Guaranteed not to change over time.
Since:
jPicEdt

getViewToModelTransform

public AffineTransform getViewToModelTransform()
Returns:
an AffineTransform that represents the maping b/w the pixel-coordinate system and the model-coordinate system. Guaranteed not to change over time.
Since:
jPicEdt

modelToView

public PicPoint modelToView(PicPoint src,
                            PicPoint dst)
Converts a point from the model-coordinate system to the pixel-coordinate system.

Parameters:
src - the source point in model-coordinate
dst - the destination point ; if null, a new point is allocated, and returned for convenience.
Returns:
the result (same as dst if non-null)
Since:
jPicEdt

view2Model

public PicPoint view2Model(PicPoint src,
                           PicPoint dst)
Converts a point from the pixel-coordinate system to the model-coordinate system.

Parameters:
src - the source point in pixel-coordinate
dst - the destination point ; if null, a new point is allocated, and returned for convenience.
Returns:
the result (same as dst if non-null)
Since:
jPicEdt

modelToView

public Shape modelToView(Shape src)
Converts a Shape from the model-coordinate system to the pixel-coordinate system.

Parameters:
src - a Shape in the model-coordinate system
Returns:
a new Shape corresponding to the given Shape once transformed to the pixel-coordinate system.
Since:
jPicEdt

viewToModel

public Shape viewToModel(Shape src)
Converts a Shape from the pixel-coordinate system to the model-coordinate system.

Parameters:
src - a Shape in the pixel-coordinate system
Returns:
a new Shape corresponding to the given Shape once transformed to the model-coordinate system.
Since:
jPicEdt

read

public void read(Reader reader,
                 Parser parser)
          throws ParserException
read drawing content from a reader and erase old one. Listener's interested in DrawingEvent's should register their listener anew (this can be done systematically by registering a PropertyCHangeListener to this canvas, and waiting for DRAWING_CHANGE events).

Parameters:
reader - the reader to read content from
Throws:
ParserException

insert

public void insert(Reader reader,
                   Parser parser)
            throws ParserException
insert content from a reader into the current drawing

Parameters:
reader - the reader to insert content from
Throws:
ParserException

write

public void write(Writer writer,
                  boolean writeSelectionOnly)
           throws IOException
Write drawing content to the given stream

Parameters:
writer - The writer to write to
writeSelectionOnly - if true, only write selection content
Throws:
IOException - on any I/O error
Since:
jPicEdt

setZoomFactor

public void setZoomFactor(double zoom)
Convenience call to setZoomFactor(zoom,null)


setZoomFactor

public void setZoomFactor(double zoom,
                          PicPoint ptClick)
sets the current zoom factor to the given double, then updates various properties (model <-> view transforms, dimension, preferredSize...), finally, sources a ZoomEvent to give a chance to receiver to update their state accordingly (this may be used e.g. by a parent scrollpane to update its view port location, or by a GUI widget to reflect the new zoom value).

Parameters:
zoom - the new zoom factor
ptClick - this only makes sense if the parent of this component is aka ScrollPane ;
Coordinates for this point are in the model-coordinate system.

getZoomFactor

public double getZoomFactor()
Returns:
the current zoom factor

getScaleFactor

public double getScaleFactor()
Returns:
the current scale factor between model- and view-coordinates, as given by the current model2ViewTransform. This is usually the product of the current zoom factor, and the DotPerMilliMeter screen factor.

fireZoomUpdate

protected void fireZoomUpdate(double oldZoom,
                              double newZoom,
                              PicPoint ptClick)
Notify all listeners that have registered interest for notification on this event type.

Parameters:
oldZoom - previous zoom value
newZoom - new zoom value
ptClick - the point (in model-coordinates) that is expected to be at the center of the view-port ; can be null

addZoomListener

public void addZoomListener(ZoomListener l)
adds a ZoomListener to the Canvas


removeZoomListener

public void removeZoomListener(ZoomListener l)
removes a ZoomListener from the Canvas


getZoomIndex

public static int getZoomIndex(double zoom)
utilities to retrieve the index of the given zoom in PREDEFINED_ZOOMS ; this may be used by GUI widgets, e.g. JComboBox,...

Returns:
index of the given zoom in array "PREDEFINED_ZOOMS" ; returns -1 if not found.

setUndoLimit

public void setUndoLimit(int limit)
set the number of undoable events to remember


undo

public void undo()
          throws CannotUndoException
Undo last change

Throws:
CannotUndoException
Since:
PicEdt 1.1.3

redo

public void redo()
          throws CannotRedoException
Redo last change

Throws:
CannotRedoException
Since:
PicEdt 1.1.3

addUndoableEditListener

public void addUndoableEditListener(UndoableEditListener l)
Register an UndoableEditListener for the Drawing hosted by this canvas.


removeUndoableEditListener

public void removeUndoableEditListener(UndoableEditListener l)
Unregister an UndoableEditListener for the Drawing hosted by this canvas.


beginUndoableUpdate

public void beginUndoableUpdate(String presentationName)
Create a new UndoableEdit that holds the current state of the Drawing.


endUndoableUpdate

public void endUndoableUpdate()
Ends the current UndoableEdit and fire an event to registered listeners.


canRedo

public boolean canRedo()
Returns:
true if a "redo" operation would be successfull

canUndo

public boolean canUndo()
Returns:
true if a "undo" operation would be successfull

getRedoPresentationName

public String getRedoPresentationName()
Returns:
the presentation name of the next edit that can be redone

getUndoPresentationName

public String getUndoPresentationName()
Returns:
the presentation name of the last edit that can be undone

selection

public Iterator selection()
Returns:
an Iterator over selected graphic elements

getSelectionSize

public int getSelectionSize()
Returns:
the number of selected elements in the current selection

isSelected

public boolean isSelected(Element e)
Returns:
whether the given element is selected or not

selectAll

public void selectAll(boolean state)
select or unselect every object in this drawing

Parameters:
state - if true, selectAll, otherwise unselect all.

select

public void select(Collection c,
                   boolean incremental)
select the elements in the given collection (if they belong to the drawing)

Parameters:
incremental - if true, add to the existing selection ; replace otherwise.

select

public void select(Element obj,
                   boolean incremental)
select the given element

Parameters:
incremental - if true, add to the existing selection ; replace otherwise.

unSelect

public void unSelect(Element obj)
unselect the given object


deleteSelection

public void deleteSelection()
remove all selected objects from the drawing


paste

public void paste(Clipboard clipbrd,
                  boolean translate)
           throws ParserException,
                  IOException,
                  UnsupportedFlavorException
Add the content of the given ClipBoard to the current drawing, then select it. If only DataFlavor.stringFlavor is provided by the Transferable, we try to parse the string and insert the parsed content. Otherwise, it's taken for granted that the ClipBoard content support the jpicedt.graphic.toolkit.TransferableGraphic.JPICEDT_DATA_FLAVOR data flavor.

Parameters:
translate - if true, translate the pasted content by a grid step so that it doesn't hide old one
Throws:
ParserException
IOException
UnsupportedFlavorException

paste

public void paste(boolean translate)
           throws ParserException,
                  IOException,
                  UnsupportedFlavorException
Add the content of the System's ClipBoard to the current drawing, then select it. More specifically, we try to parse the string and insert the parsed content.

Parameters:
translate - if true, translate the pasted content by a grid step so that it doesn't hide old one
Throws:
ParserException
IOException
UnsupportedFlavorException

copy

public void copy(Clipboard clipbrd)
Copy the content of the current selection (through a GraphicTransferable) to the System's clipboard (after a formatting to text), AND to the given clipboard if non-null (the latter can be a local clipboard supporting more data-flavors than the system clipboard)

Parameters:
clipbrd - the target clipboard ; can be null, in which case only the System clipboard is modified.

copy

public void copy()
Copy the content of the current selection to the System's clipboard (after a formatting to text)


cut

public void cut(Clipboard clipbrd)
Cut the content of the current selection (through a GraphicTransferable) to the System clipboard, AND to the given ClipBoard if non-null.

Parameters:
clipbrd - the target clipboard ; can be null, in which case only the System clipboard is modified.

cut

public void cut()
Cut the content of the current selection to the System clipboard, after formatting to text.


groupSelection

public void groupSelection()
group all selected objects into a new PicGroup and add it to the drawing.

Since:
jPicEdt 1.2.a

unGroup

public void unGroup(PicGroup g)
fetch all Element's belonging to the given PicGroup and add them to its parent, removing the given PicGroup from its parent afterward.


joinSelection

public void joinSelection()
join all selected objects of type PicMultiCurveConvertable into a new PicMulticurve and add it to the drawing.

Since:
jPicEdt 1.4.pre5

fireSelectionUpdate

protected void fireSelectionUpdate(Element element,
                                   SelectionEvent.EventType type)
Notify all listeners that have registered interest for notification on this event type.

Parameters:
element - the Element that was (un)selected
type - the event type

fireSelectionUpdate

protected void fireSelectionUpdate(Element[] elements,
                                   SelectionEvent.EventType type)
Notify all listeners that have registered interest for notification on this event type.

Parameters:
elements - the Element's that were (un)selected
type - the event type

addSelectionListener

public void addSelectionListener(SelectionListener l)
adds a SelectionListener to the Canvas


removeSelectionListener

public void removeSelectionListener(SelectionListener l)
removes a SelectionListener from the Canvas


getPreferredScrollableViewportSize

public Dimension getPreferredScrollableViewportSize()
Specified by:
getPreferredScrollableViewportSize in interface Scrollable
Returns:
the drawing board size (aka ScrollPane's View size, as opposed to ViewPort's size)

getScrollableUnitIncrement

public int getScrollableUnitIncrement(Rectangle visibleRect,
                                      int orientation,
                                      int direction)
Specified by:
getScrollableUnitIncrement in interface Scrollable
Returns:
a grid step

getScrollableBlockIncrement

public int getScrollableBlockIncrement(Rectangle visibleRect,
                                       int orientation,
                                       int direction)
Specified by:
getScrollableBlockIncrement in interface Scrollable
Returns:
the viewport size minus a grid step

getScrollableTracksViewportWidth

public boolean getScrollableTracksViewportWidth()
Specified by:
getScrollableTracksViewportWidth in interface Scrollable
Returns:
false for this implementation

getScrollableTracksViewportHeight

public boolean getScrollableTracksViewportHeight()
Specified by:
getScrollableTracksViewportHeight in interface Scrollable
Returns:
false for this implementation

isRequestFocusEnabled

public boolean isRequestFocusEnabled()
Overriden from JComponent Signals that this component can receive focus (useful for handling keyevents)


addPEMouseInputListener

public void addPEMouseInputListener(PEMouseInputListener l)
Adds the specified mouse listener to receive mouse events from this component. If l is null, no exception is thrown and no action is performed.

Parameters:
l - the mouse listener.

removePEMouseInputListener

public void removePEMouseInputListener(PEMouseInputListener l)
Removes the specified mouse listener so that it no longer receives mouse events from this component. This method performs no function, nor does it throw an exception, if the listener specified by the argument was not previously added to this component. If l is null, no exception is thrown and no action is performed.

Parameters:
l - the mouse listener.

processMouseEvent

protected void processMouseEvent(MouseEvent e)
Processes mouse events occurring on this component by dispatching them to any registered PEMouseListener objects.

Parameters:
e - the mouse event.

processMouseMotionEvent

protected void processMouseMotionEvent(MouseEvent e)
Processes mouse motion events occurring on this component by dispatching them to any registered PEMouseInputListener objects.

Parameters:
e - the mouse motion event.

http://www.jpicedt.org

Submit a bug : syd@jpicedt.org