http://www.jpicedt.org

jpicedt.graphic
Class PECanvas

java.lang.Object
  extended by java.awt.Component
      extended by java.awt.Container
          extended by javax.swing.JComponent
              extended by javax.swing.JPanel
                  extended by jpicedt.graphic.PECanvas
All Implemented Interfaces:
ImageObserver, MenuContainer, Serializable, Accessible, Scrollable

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 formatter 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.53 2013/03/27 07:20:46 vincentb1 Exp $

Author:
Sylvain Reynal
See Also:
Serialized Form

Nested Class Summary
 class PECanvas.IconizedTextTooltipDisplayListener
          adds a MouseMotionListener to the canvas in order to show a tooltip on PicText elements
static class PECanvas.SelectionBehavior
           
 
Nested classes/interfaces inherited from class javax.swing.JPanel
JPanel.AccessibleJPanel
 
Nested classes/interfaces inherited from class javax.swing.JComponent
JComponent.AccessibleJComponent
 
Nested classes/interfaces inherited from class java.awt.Container
Container.AccessibleAWTContainer
 
Nested classes/interfaces inherited from class java.awt.Component
Component.AccessibleAWTComponent, Component.BaselineResizeBehavior, 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).
static String CONVEX_ZONE_SET_CHANGE
          nom de la propriété pour les évènement de changement d'ensemble de zones convexes.
protected  ConvexZoneSet convexZoneSet
          Une liste de zones convexe que l'utilisateur a définies pour éditer le dessins pour cette toile à dessin PECanvas.
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 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 addConvexZone(ConvexZone cz)
           
 void addPEMouseInputListener(PEMouseInputListener l)
          Adds the specified mouse listener to receive mouse events from this component.
 void addRotateListener(RotateListener l)
          Adds a RotateListener to the Canvas.
 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 TransferableGraphic) 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 deleteConvexZone(ConvexZone cz)
          Détruit la zone convexe cz.
 void deleteConvexZoneSelection()
          Détruit toutes les zones convexe de la selection de zones convexe.
 void deleteSelection()
          Remove all selected objects from the drawing.
 void endUndoableUpdate()
          Ends the current UndoableEdit and fire an event to registered listeners.
protected  void fireRotateUpdate(double angle)
          Notify all listeners that have registered interest for notification on this event type.
protected  void fireSelectionUpdate(ConvexZone cz, ConvexZoneSelectionEvent.EventType type)
           
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()
           
 Iterator<ConvexZone> getConvexZoneSelection()
           
 ConvexZoneSet getConvexZoneSet()
           
 Drawing getDrawing()
           
 EditorKit getEditorKit()
          Fetches the currently installed kit for handling content.
 Grid getGrid()
           
 AffineTransform getModelToViewTransform()
          
author: Sylvain Reynal
 PageFormat getPageFormat()
          
author: Sylvain Reynal
 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)
           
 SelectionHandler getSelectionHandler()
          Return a collection of selected elements.
 int getSelectionSize()
           
 PicPoint getSheetOrigin()
           
 String getUndoPresentationName()
           
 AffineTransform getViewToModelTransform()
          
author: Sylvain Reynal
 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, ExtractionParsing parser, PicPoint insertionPoint)
          Insère du contenu depuis un reader dans le dessin courant.
 boolean isRequestFocusEnabled()
          Overriden from JComponent Signals that this component can receive focus (useful for handling keyevents)
 boolean isSelected(ConvexZone cz)
           
 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) This implementation first applies an AffineTransform to the graphic context : this transform maps in effect model-coordinates to screen-coordinates.
 void paste(boolean translate)
          Add the content of the System's ClipBoard to the current drawing, then select it.
 void paste(Clipboard clipbrd, PicPoint translate)
          Ajout le contenu du presse-papier (ClipBoard) passé en argument au dessin courant, et le sélectionner ensuite.
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.
 ParsedDrawing read(Reader reader, ExtractionParsing parser)
          Read drawing content from a reader and erase old one.
 void redo()
          Refait le dernier changement.
 void refreshPageFormatToBoundingBox()
          Refraîchit le format de page de la toile à dessin en fonction de la boîte bornante du dessin sous-jascent.
 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(ConvexZoneGroup czg, PECanvas.SelectionBehavior beh)
           
 void select(ConvexZone cz, PECanvas.SelectionBehavior beh)
           
 void select(Element obj, PECanvas.SelectionBehavior beh)
          Select the given element.
 void selectAll()
          Select every object in this drawing.
 void selectCollection(Collection<Element> c, PECanvas.SelectionBehavior beh)
          Select the elements in the given collection (if they belong to the drawing).
 Iterator<Element> 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 setConvexZoneSet(ConvexZoneSet czs)
           
 void setDrawing(Drawing dr)
          Set the Drawing model for this component.
 void setEditorKit(EditorKit kit)
          Sets the currently installed kit for handling content.
 void setMult(double mult)
          Règle le pas horizontal et vertical par lequel les éléments sélectionnés sont déplacés par l'action des touches « flèche vers le haut », « flèche vers le bas », « flèche vers la gauche », ou « flèche vers la droite ».
 void setPageFormat(PageFormat pageFormat)
          Set the size of the drawing board.
 void setRotateAngle(double angle)
          Sets the angle of the selected element.
 void setRotateAngleLabelVisible(boolean b)
          Toggle visibility of the angle-textfield.
 void setUndoLimit(int limit)
          Règle le nombre d'événement défaisable à mémoriser.
 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. by a parent scrollpane to update its view port location, or by a GUI widget to reflect the new zoom value).
 void undo()
          Défait le dernier changement.
 void unSelect(ConvexZone cz)
          Unselect the given convex zone.
 void unSelect(Element obj)
          Unselect the given graphic object.
 void unSelectAll()
          Unselect every object in this drawing.
 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, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getPreferredSize, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingTile, isValidateRoot, paint, paintBorder, paintChildren, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, 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, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, 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, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, hide, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, 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, removePropertyChangeListener, removePropertyChangeListener, 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_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

CONVEX_ZONE_SET_CHANGE

public static final String CONVEX_ZONE_SET_CHANGE
nom de la propriété pour les évènement de changement d'ensemble de zones convexes.

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


convexZoneSet

protected ConvexZoneSet convexZoneSet
Une liste de zones convexe que l'utilisateur a définies pour éditer le dessins pour cette toile à dessin PECanvas.


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.
author: Sylvain Reynal

Parameters:
zoom - initial zoom factor
pageFormat - page format (page size + page margins)
grid - grille d'aimantation
contentType - (e.g. LaTeX, PsTricks,…) ; this will determine the EditorKit for editing the Drawing, and indirectly the ViewFactory that produces View's for the drawing, (since the ViewFactory is obtained through the currently installed EditorKit) and the FormatterFactory used to write the drawing to a writer. If null, the default editor-kit/content-type is used.
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 :

Overrides:
paintComponent in class JComponent

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

getConvexZoneSet

public ConvexZoneSet getConvexZoneSet()
Returns:
le ConvexZoneSet courant défini pour le dessin de ce PECanvas.

addConvexZone

public void addConvexZone(ConvexZone cz)

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.


setConvexZoneSet

public void setConvexZoneSet(ConvexZoneSet czs)

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. .
author: Sylvain Reynal

Since:
jPicEdt

getPageFormat

public PageFormat getPageFormat()

author: Sylvain Reynal

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

author: Sylvain Reynal

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

author: Sylvain Reynal

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.
author: Sylvain Reynal

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.
author: Sylvain Reynal

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.
author: Sylvain Reynal

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.
author: Sylvain Reynal

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

refreshPageFormatToBoundingBox

public void refreshPageFormatToBoundingBox()
Refraîchit le format de page de la toile à dessin en fonction de la boîte bornante du dessin sous-jascent.

Since:
jPicEdt 1.5.2

read

public ParsedDrawing read(Reader reader,
                          ExtractionParsing 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,
                   ExtractionParsing parser,
                   PicPoint insertionPoint)
            throws ParserException
Insère du contenu depuis un reader dans le dessin courant.

Parameters:
reader - le reader à partir duquel insérer du contenu.
insertionPoint - la position où insérer la fragement. Si null le fragment est inséré en (0,0).
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 1.3

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.

addRotateListener

public void addRotateListener(RotateListener l)
Adds a RotateListener to the Canvas.


fireRotateUpdate

protected void fireRotateUpdate(double angle)
Notify all listeners that have registered interest for notification on this event type.

Parameters:
angle - the current angle

setRotateAngle

public void setRotateAngle(double angle)
Sets the angle of the selected element.


setRotateAngleLabelVisible

public void setRotateAngleLabelVisible(boolean b)
Toggle visibility of the angle-textfield.


setMult

public void setMult(double mult)
Règle le pas horizontal et vertical par lequel les éléments sélectionnés sont déplacés par l'action des touches « flèche vers le haut », « flèche vers le bas », « flèche vers la gauche », ou « flèche vers la droite ».


setUndoLimit

public void setUndoLimit(int limit)
Règle le nombre d'événement défaisable à mémoriser.


undo

public void undo()
          throws CannotUndoException
Défait le dernier changement.

Throws:
CannotUndoException
Since:
PicEdt 1.1.3

redo

public void redo()
          throws CannotRedoException
Refait le dernier changement.

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<Element> selection()
Returns:
an Iterator over selected graphic elements.

getSelectionHandler

public SelectionHandler getSelectionHandler()
Return a collection of selected 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()
Select every object in this drawing.


selectCollection

public void selectCollection(Collection<Element> c,
                             PECanvas.SelectionBehavior beh)
Select the elements in the given collection (if they belong to the drawing).


select

public void select(Element obj,
                   PECanvas.SelectionBehavior beh)
Select the given element.

Parameters:
obj - The Element to be selected.
beh - Whether to add obj to the selection, or to replace the selection by obj.

unSelect

public void unSelect(Element obj)
Unselect the given graphic object. Does nothing if obj is not in the selection.

Parameters:
obj - the Element to be removed from selection.

unSelect

public void unSelect(ConvexZone cz)
Unselect the given convex zone.


unSelectAll

public void unSelectAll()
Unselect every object in this drawing.


deleteSelection

public void deleteSelection()
Remove all selected objects from the drawing.


deleteConvexZone

public void deleteConvexZone(ConvexZone cz)
Détruit la zone convexe cz.

Parameters:
cz - la ConvexZone zone convexe à détruire.

deleteConvexZoneSelection

public void deleteConvexZoneSelection()
Détruit toutes les zones convexe de la selection de zones convexe.


paste

public void paste(Clipboard clipbrd,
                  PicPoint translate)
           throws ParserException,
                  IOException,
                  UnsupportedFlavorException
Ajout le contenu du presse-papier (ClipBoard) passé en argument au dessin courant, et le sélectionner ensuite. Si seulement DataFlavor.stringFlavor est fournit par le Transferable, alors on analyse la chaîne de caractère et on insère le résultat de l'analyse. Sinon, on considère comme garanti que le contenu du presse-papier (ClipBoard) prend en charge les données d'acception jpicedt.graphic.toolkit.TransferableGraphic.JPICEDT_DATA_FLAVOR.

Parameters:
translate - si non null, et qu'on colle vers la même planche, translate le contenu collé d'un pas de grille de sorte à ne pas cacher le contenu d'origine.
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 TransferableGraphic) 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

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.


select

public void select(ConvexZone cz,
                   PECanvas.SelectionBehavior beh)

select

public void select(ConvexZoneGroup czg,
                   PECanvas.SelectionBehavior beh)

isSelected

public boolean isSelected(ConvexZone cz)
Parameters:
cz - une valeur ConvexZone dont on veut savoir si elle fait partie de la sélection de zones convexes.
Returns:
une valeur boolean vrai si cz fait fait partie de la sélection de zones convexes, faux sinon.

getConvexZoneSelection

public Iterator<ConvexZone> getConvexZoneSelection()

fireSelectionUpdate

protected void fireSelectionUpdate(ConvexZone cz,
                                   ConvexZoneSelectionEvent.EventType type)

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)

Overrides:
isRequestFocusEnabled in class JComponent

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.

Overrides:
processMouseEvent in class JComponent
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.

Overrides:
processMouseMotionEvent in class JComponent
Parameters:
e - the mouse motion event.

http://www.jpicedt.org

Submit a bug : syd@jpicedt.org