uk.ac.ic.doc.automed.editor
Class EditorPanel

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 uk.ac.ic.doc.automed.editor.EditorPanel
All Implemented Interfaces:
java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable, javax.accessibility.Accessible

public class EditorPanel
extends javax.swing.JPanel

Provide a JPanel extension to display arcs and vertices using implementations of DrawableArc and DrawableVertex. The following implementations are provided for certain reps package classes:

reps Class DrawableVertex DrawableArc
Schema DrawSchema NA
Network DrawNetwork NA
Transformation NA DrawTransformation
Schema DrawableVertex DrawableArc
SchemaObject (Nodal) DefaultDrawNodalVertex NA
SchemaObject (Link Nodal) DefaultDrawLinkNodalVertex DefaultDrawLinkNodalArc
SchemaObject (Link) DefaultDrawLinkVertex DefaultDrawLinkArc
SchemaObject (Constraint) DefaultDrawConstraintVertex DefaultDrawConstraintArc

Author:
Michael Boyd (mboyd@doc.ic.ac.uk), Peter McBrien (pjm@doc.ic.ac.uk)
See Also:
Serialized Form

Nested Class Summary
(package private)  class EditorPanel.VertexComponent
           
 
Nested classes/interfaces inherited from class javax.swing.JPanel
javax.swing.JPanel.AccessibleJPanel
 
Nested classes/interfaces inherited from class javax.swing.JComponent
javax.swing.JComponent.AccessibleJComponent
 
Nested classes/interfaces inherited from class java.awt.Container
java.awt.Container.AccessibleAWTContainer
 
Nested classes/interfaces inherited from class java.awt.Component
java.awt.Component.AccessibleAWTComponent, java.awt.Component.BaselineResizeBehavior, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
 
Field Summary
private  java.util.Map<Positionable,java.util.List> adjacents
           
private  java.util.HashMap<Positionable,java.awt.Color> backgroundColor
           
private  java.awt.Rectangle bounds
           
protected static java.awt.Stroke dashedStroke
           
private  boolean dragging
           
private  java.util.Map<Positionable[],DrawableArc> edges
           
(package private)  Gui.EditorFrame ef
           
private  java.awt.FontMetrics fm
           
private  java.util.HashMap<Positionable,java.awt.Color> foregroundColor
           
private static int grCount
           
private  java.util.HashSet<Positionable> group
           
private  java.awt.Rectangle groupBox
           
(package private)  Gui gui
           
private  boolean justActivated
           
private  int mouseOffsetX
           
private  int mouseOffsetY
           
private  int mouseStartX
           
private  int mouseStartY
           
private  boolean partialView
           
(package private) static int pc
           
private static java.util.Map<Positionable,EditorPanel> posPanel
           
private  int selectOffset
           
private static int thickness
           
private  java.util.Map<Positionable,EditorPanel.VertexComponent> vertexComponent
           
private  java.util.Map vertices
           
 
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
EditorPanel(Gui g, Gui.EditorFrame ef)
           
EditorPanel(Gui g, java.util.Map<java.lang.Object,Drawable> elements, Gui.EditorFrame ef)
           
EditorPanel(Network s)
          Call this to create a JPanel containing an AutoMed Network.
EditorPanel(Schema s)
          Call this to create a JPanel containing an AutoMed Schema.
 
Method Summary
static java.awt.Point[] calcRectangleConnector(java.awt.Rectangle r0, java.awt.Rectangle r1)
          Compute three points, the first two of which represent a rectangle that forms a box `between' the supplied rectangles, and the third point represents the `sign' of the relationship between the rectangles.
 void clearBackgroundColor(Positionable p)
           
 void clearForegroundColor(Positionable p)
           
private  void doPopupMenu(java.awt.Component target, java.awt.event.MouseEvent me)
           
private  void drawGroupBox(java.awt.Graphics2D g)
           
private  void drawSelected(java.awt.Graphics2D g)
           
private  void drawSelectedObject(java.awt.Graphics2D g, Positionable p, DrawableVertex d)
           
private  Positionable[] findShortestPath(Positionable p1, Positionable p2)
           
 java.awt.Color getBackgroundColor(Positionable p)
           
 DrawableVertex getDrawable(Positionable p)
          Return a Drawable that has been used to represent a Positionable in this panel.
 java.awt.FontMetrics getFontMetrics()
          Utility method for all editor drawing tools to use when they need to obtain the FontMetrics of an EditorPanel
 java.awt.Color getForegroundColor(Positionable p)
           
 javax.swing.JComponent getVertexComponent(Positionable p)
           
 DrawableVertex getVertexDrawable(Positionable p)
           
private  boolean isHidden(Drawable d)
           
private  boolean isHidden(Positionable p)
           
 void paintChildren(java.awt.Graphics g)
          Paint the arcs within this panel.
 void paintComponent(java.awt.Graphics g)
          Paint the nodes within this panel.
 void refresh()
          Redraw the contents of this editor panel after some change to the AutoMed repository objects it displays.
 void setBackgroundColor(Positionable p, java.awt.Color c)
           
 void setElements(java.util.Map<java.lang.Object,Drawable> elements)
           
 void setElements(Network n)
          The EditorPanel needs a Map that has as its domain instances of Positionable and its range instances of Drawable.
 void setElements(Schema s)
          The EditorPanel needs a Map that has as its domain instances of Positionable and its range instances of Drawable.
 void setForegroundColor(Positionable p, java.awt.Color c)
           
 
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, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, 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, 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, transferFocusBackward, transferFocusUpCycle
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

posPanel

private static java.util.Map<Positionable,EditorPanel> posPanel

vertexComponent

private java.util.Map<Positionable,EditorPanel.VertexComponent> vertexComponent

adjacents

private java.util.Map<Positionable,java.util.List> adjacents

vertices

private java.util.Map vertices

edges

private java.util.Map<Positionable[],DrawableArc> edges

selectOffset

private int selectOffset

dragging

private boolean dragging

justActivated

private boolean justActivated

fm

private java.awt.FontMetrics fm

partialView

private boolean partialView

ef

Gui.EditorFrame ef

gui

Gui gui

group

private java.util.HashSet<Positionable> group

groupBox

private java.awt.Rectangle groupBox

mouseOffsetX

private int mouseOffsetX

mouseOffsetY

private int mouseOffsetY

mouseStartX

private int mouseStartX

mouseStartY

private int mouseStartY

thickness

private static final int thickness
See Also:
Constant Field Values

backgroundColor

private java.util.HashMap<Positionable,java.awt.Color> backgroundColor

foregroundColor

private java.util.HashMap<Positionable,java.awt.Color> foregroundColor

bounds

private java.awt.Rectangle bounds

pc

static int pc

dashedStroke

protected static final java.awt.Stroke dashedStroke

grCount

private static int grCount
Constructor Detail

EditorPanel

public EditorPanel(Gui g,
                   java.util.Map<java.lang.Object,Drawable> elements,
                   Gui.EditorFrame ef)

EditorPanel

public EditorPanel(Schema s)
Call this to create a JPanel containing an AutoMed Schema.


EditorPanel

public EditorPanel(Network s)
Call this to create a JPanel containing an AutoMed Network.


EditorPanel

public EditorPanel(Gui g,
                   Gui.EditorFrame ef)
Method Detail

setElements

public void setElements(Network n)
The EditorPanel needs a Map that has as its domain instances of Positionable and its range instances of Drawable. This utility function creates such a Map for an AutoMed Network.


setElements

public void setElements(Schema s)
The EditorPanel needs a Map that has as its domain instances of Positionable and its range instances of Drawable. This utility function creates such a Map for an AutoMed Schema.


getDrawable

public DrawableVertex getDrawable(Positionable p)
                           throws NotFoundException
Return a Drawable that has been used to represent a Positionable in this panel.

Throws:
NotFoundException

setElements

public void setElements(java.util.Map<java.lang.Object,Drawable> elements)

getVertexDrawable

public DrawableVertex getVertexDrawable(Positionable p)

getVertexComponent

public javax.swing.JComponent getVertexComponent(Positionable p)

paintComponent

public void paintComponent(java.awt.Graphics g)
Paint the nodes within this panel.

Overrides:
paintComponent in class javax.swing.JComponent

refresh

public void refresh()
Redraw the contents of this editor panel after some change to the AutoMed repository objects it displays. Note that this is supposed to occur automatically when you change Schema, SchemaObject, etc classes, and thus should not normally be called from user applications.


paintChildren

public void paintChildren(java.awt.Graphics g)
Paint the arcs within this panel.

Overrides:
paintChildren in class javax.swing.JComponent

drawSelected

private void drawSelected(java.awt.Graphics2D g)

drawGroupBox

private void drawGroupBox(java.awt.Graphics2D g)

drawSelectedObject

private void drawSelectedObject(java.awt.Graphics2D g,
                                Positionable p,
                                DrawableVertex d)

doPopupMenu

private void doPopupMenu(java.awt.Component target,
                         java.awt.event.MouseEvent me)

findShortestPath

private Positionable[] findShortestPath(Positionable p1,
                                        Positionable p2)

calcRectangleConnector

public static java.awt.Point[] calcRectangleConnector(java.awt.Rectangle r0,
                                                      java.awt.Rectangle r1)
Compute three points, the first two of which represent a rectangle that forms a box `between' the supplied rectangles, and the third point represents the `sign' of the relationship between the rectangles.

Returns:
An array of three Points, the first two of which represent the rectangle placed between r0 and r1, where the first Point is adjacent to r0, and the second adjacent to r1.

getFontMetrics

public java.awt.FontMetrics getFontMetrics()
Utility method for all editor drawing tools to use when they need to obtain the FontMetrics of an EditorPanel


setForegroundColor

public void setForegroundColor(Positionable p,
                               java.awt.Color c)

setBackgroundColor

public void setBackgroundColor(Positionable p,
                               java.awt.Color c)

getForegroundColor

public java.awt.Color getForegroundColor(Positionable p)

getBackgroundColor

public java.awt.Color getBackgroundColor(Positionable p)

clearForegroundColor

public void clearForegroundColor(Positionable p)

clearBackgroundColor

public void clearBackgroundColor(Positionable p)

isHidden

private boolean isHidden(Positionable p)

isHidden

private boolean isHidden(Drawable d)