org.argouml.uml.diagram.static_structure.ui
Class FigClass

java.lang.Object
  extended byorg.tigris.gef.presentation.Fig
      extended byorg.tigris.gef.presentation.FigGroup
          extended byorg.tigris.gef.presentation.FigNode
              extended byorg.argouml.uml.diagram.ui.FigNodeModelElement
                  extended byorg.argouml.uml.diagram.static_structure.ui.FigClassifierBox
                      extended byorg.argouml.uml.diagram.static_structure.ui.FigClass
All Implemented Interfaces:
ArgoEventListener, ArgoNotationEventListener, AttributesCompartmentContainer, Cloneable, Connecter, DelayedVChangeListener, EventListener, org.tigris.gef.di.GraphicElement, org.tigris.gef.di.GraphNode, Highlightable, KeyListener, MouseListener, NotationContext, OperationsCompartmentContainer, PathContainer, PopupGenerator, PropertyChangeListener, Serializable, VetoableChangeListener
Direct Known Subclasses:
FigClassAssociationClass

public class FigClass
extends FigClassifierBox
implements AttributesCompartmentContainer

Class to display graphics for a UML Class in a diagram.

See Also:
Serialized Form

Field Summary
 
Fields inherited from class org.argouml.uml.diagram.static_structure.ui.FigClassifierBox
borderFig, highlightedFigText, operationsFig
 
Fields inherited from class org.argouml.uml.diagram.ui.FigNodeModelElement
ABSTRACT, ACTIVE, invisibleAllowed, LEAF, notationProviderName, ROOT, ROWHEIGHT, SHADOW_COLOR_ALPHA, SHADOW_COLOR_VALUE, STEREOHEIGHT
 
Fields inherited from class org.tigris.gef.presentation.FigNode
_blinkPorts, _highlight, ang135, ang225, ang315, ang45
 
Fields inherited from class org.tigris.gef.presentation.Fig
_allowsSaving, _context, _dashes, _dashPeriod, _dashStyle, _filled, _h, _w, _x, _y, an, annotationOwner, annotationStatus, BORDER, MIN_SIZE, plotter
 
Constructor Summary
FigClass(GraphModel gm, Object node)
          Constructor for a FigClass by diagram interaction.
FigClass(Object modelElement, int x, int y, int w, int h)
          Constructor for a FigClass during file load.
 
Method Summary
 String classNameAndBounds()
          USED BY PGML.tee.
 Object clone()
          After the base clone method has been called determine which child figs of the clone represent the name, stereotype and port.
 Rectangle getAttributesBounds()
           
 int getLineWidth()
           
 Dimension getMinimumSize()
          Gets the minimum size permitted for a class on the diagram.
protected  FigText getNextVisibleFeature(FigGroup fgVec, FigText ft, int i)
           
 Vector getPopUpActions(MouseEvent me)
          Build a collection of menu items relevant for a right-click popup menu on a Class.
protected  FigText getPreviousVisibleFeature(FigGroup fgVec, FigText ft, int i)
           
 boolean isAttributesVisible()
          Returns the status of the attribute field.
 Selection makeSelection()
           
protected  void modelChanged(PropertyChangeEvent mee)
          Handles changes to the model.
 void renderingChanged()
          Rerenders the fig.
 void setAttributesVisible(boolean isVisible)
          Set the visibility of the attributes compartment.
protected  void setBoundsImpl(int x, int y, int w, int h)
          Sets the bounds, but the size will be at least the one returned by getMinimumSize(), unless checking of size is disabled.
 void setEnclosingFig(Fig encloser)
          Updates the modelelement container if the fig is moved in or out another fig.
 void setLineWidth(int w)
           
 void setOperationsVisible(boolean isVisible)
          Set the visibility of the operations compartment.
protected  void textEdited(FigText ft)
          This method is called after the user finishes editing a text field that is in the FigNodeModelElement.
protected  void textEditStarted(FigText ft)
          This method is called when the user doubleclicked on the text field, and starts editing.
 void translate(int dx, int dy)
           
protected  void updateAbstract()
          Updates the name if modelchanged receives an "isAbstract" event.
protected  void updateAttributes()
          Updates the attributes in the fig.
protected  void updateListeners(Object oldOwner, Object newOwner)
          Implementations of this method should register/unregister the fig for all (model)events.
protected  void updateNameText()
          Updates the text of the name FigText.
protected  void updateOperations()
          Updates the operations box.
protected  void updateStereotypeText()
          Updates the text of the sterotype FigText.
 
Methods inherited from class org.argouml.uml.diagram.static_structure.ui.FigClassifierBox
createFeatureIn, getOperationsBounds, getOperationsFig, isOperationsVisible, mouseClicked, mouseExited, unhighlight, unhighlight
 
Methods inherited from class org.argouml.uml.diagram.ui.FigNodeModelElement
addElementListener, addElementListener, addElementListener, addEnclosedFig, allowRemoveFromDiagram, buildModifierPopUp, buildVisibilityPopUp, calcBounds, damage, delayedVetoableChange, deleteFromModel, displace, elementOrdering, enableSizeChecking, finalize, forceRepaintShadow, getBigPort, getContextNotation, getDiElement, getEnclosedFigs, getEncloser, getEnclosingFig, getItalicLabelFont, getItemUID, getLabelFont, getName, getNameBounds, getNameFig, getPopupAddOffset, getRemoveDelegate, getShadowSize, getStereotypeFig, getTipString, hit, hitClarifier, initNotationProviders, isCheckSize, isDragConnectable, isEditable, isPartlyOwner, isPartlyOwner, isPathVisible, isReadyToEdit, keyPressed, keyReleased, keyTyped, notationAdded, notationChanged, notationProviderAdded, notationProviderRemoved, notationRemoved, paint, paintClarifiers, placeString, postLoad, propertyChange, removeAllElementListeners, removeElementListener, removeEnclosedFig, removeFromDiagram, removeFromDiagramImpl, setBigPort, setContextNotation, setDiElement, setEditable, setEncloser, setItemUID, setLayer, setName, setNameFig, setOwner, setPathVisible, setReadyToEdit, setShadowSize, setShadowSizeFriend, setSuppressCalcBounds, setVisible, showHelp, updateBounds, vetoableChange
 
Methods inherited from class org.tigris.gef.presentation.FigNode
addFigEdge, bindPort, cleanUp, contains, deepHitPort, dispose, endTrans, getFigEdges, getFigEdges, getHighlight, getPortFig, getPortFigs, getPortSector, hidePorts, hitPort, hitPort, isBlinkPorts, mouseEntered, mousePressed, mouseReleased, paint, removeFigEdge, removePort, setBlinkPorts, setHighlight, showPorts, superTranslate, translateImpl, updateEdges
 
Methods inherited from class org.tigris.gef.presentation.FigGroup
addFig, addFigs, deepSelect, elements, getDisplayedFigs, getExtraFrameSpace, getFigAt, getFigCount, getFigPosn, getFigs, getFont, getFontFamily, getFontSize, getPrivateData, getSubFigBounds, getTextColor, getTextFillColor, getTextFilled, hitFig, isReshapable, isRotatable, iterator, parseDynObjects, removeAll, removeFig, setExtraFrameSpace, setFigs, setFigs, setFillColor, setFilled, setFont, setFontFamily, setFontSize, setLineColor, setPrivateData, setTextColor, setTextFillColor, setTextFilled
 
Methods inherited from class org.tigris.gef.presentation.Fig
addAnnotation, addPoint, addPropertyChangeListener, align, center, connectionPoint, contains, contains, countCornersContained, createDrag, firePropChange, firePropChange, firePropChange, getAnnotationOwner, getAnnotationStrategy, getBounds, getBounds, getCenter, getClosestPoint, getContext, getDashed, getDashed01, getDashedString, getFillColor, getFilled, getFilled01, getFirstPoint, getGravityPoints, getGroup, getHalfHeight, getHalfWidth, getHandleBox, getHeight, getId, getLastPoint, getLayer, getLineColor, getLocation, getLocked, getNumPoints, getOwner, getPerimeterLength, getPoint, getPoints, getPreferredSize, getResource, getSingle, getSize, getTrapRect, getUseTrapRect, getVisState, getWidth, getX, getXs, getY, getYs, hasFillColor, hasLineColor, initAnnotations, insertPoint, intersects, intersectsPerimeter, isAnnotation, isCopyable, isCutable, isLowerRightResizable, isMovable, isRemoveStarted, isResizable, isSelectable, isSelected, isVisible, pointAlongPerimeter, postSave, preSave, print, redraw, removeAnnotation, removePoint, removePropertyChangeListener, reorder, routingRect, savingAllowed, setAnnotationOwner, setAnnotationStatus, setAnnotationStrategy, setBounds, setBounds, setCenter, setContext, setDashed, setDashedString, setGroup, setHandleBox, setHeight, setLocation, setLocation, setLocked, setMovable, setNumPoints, setPoint, setPoint, setPoint, setPoint, setPoints, setResizable, setResource, setSavingAllowed, setSize, setSize, setWidth, setX, setXs, setY, setYs, stuffBounds, stuffPointAlongPerimeter, translateAnnotations, unsetAnnotationOwner, updateAnnotationPositions, within
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface java.awt.event.MouseListener
mouseEntered, mousePressed, mouseReleased
 
Methods inherited from interface org.argouml.cognitive.Highlightable
getHighlight, setHighlight
 
Methods inherited from interface org.tigris.gef.di.GraphicElement
getId, getOwner, routingRect
 

Constructor Detail

FigClass

public FigClass(Object modelElement,
                int x,
                int y,
                int w,
                int h)
Constructor for a FigClass during file load.

Parent FigNodeModelElement will have created the main box FigNodeModelElement.getBigPort() and its name FigNodeModelElement.getNameFig() and stereotype (@link #getStereotypeFig()}. This constructor creates a box for the attributes and operations.

The properties of all these graphic elements are adjusted appropriately. The main boxes are all filled and have outlines.

Warning. Much of the graphics positioning is hard coded. The overall figure is placed at location (10,10). The name compartment (in the parent FigNodeModelElement is 21 pixels high. The stereotype compartment is created 15 pixels high in the parent, but we change it to 19 pixels, 1 more than (FigNodeModelElement.STEREOHEIGHT here. The attribute and operations boxes are created at 19 pixels, 2 more than FigNodeModelElement.ROWHEIGHT.


FigClass

public FigClass(GraphModel gm,
                Object node)
Constructor for a FigClass by diagram interaction.

Parent FigNodeModelElement will have created the main box FigNodeModelElement.getBigPort() and its name FigNodeModelElement.getNameFig() and stereotype (@link #getStereotypeFig()}. This constructor creates a box for the attributes and operations.

The properties of all these graphic elements are adjusted appropriately. The main boxes are all filled and have outlines.

Warning. Much of the graphics positioning is hard coded. The overall figure is placed at location (10,10). The name compartment (in the parent FigNodeModelElement is 21 pixels high. The stereotype compartment is created 15 pixels high in the parent, but we change it to 19 pixels, 1 more than (FigNodeModelElement.STEREOHEIGHT here. The attribute and operations boxes are created at 19 pixels, 2 more than FigNodeModelElement.ROWHEIGHT.

Parameters:
gm - Not actually used in the current implementation
node - The UML object being placed.
Method Detail

clone

public Object clone()
Description copied from class: FigNodeModelElement
After the base clone method has been called determine which child figs of the clone represent the name, stereotype and port.

The clone function is used by Copy/Paste operations.

Overrides:
clone in class FigClassifierBox
See Also:
Object.clone()

makeSelection

public Selection makeSelection()
Overrides:
makeSelection in class FigNodeModelElement
See Also:
Fig.makeSelection()

getPopUpActions

public Vector getPopUpActions(MouseEvent me)
Build a collection of menu items relevant for a right-click popup menu on a Class.

Specified by:
getPopUpActions in interface PopupGenerator
Overrides:
getPopUpActions in class FigNodeModelElement
Parameters:
me - a mouse event
Returns:
a collection of menu items
See Also:
PopupGenerator.getPopUpActions(java.awt.event.MouseEvent)

getAttributesBounds

public Rectangle getAttributesBounds()
Specified by:
getAttributesBounds in interface AttributesCompartmentContainer
Returns:
The bounds of the attributes compartment.

isAttributesVisible

public boolean isAttributesVisible()
Returns the status of the attribute field.

Specified by:
isAttributesVisible in interface AttributesCompartmentContainer
Returns:
true if the attributes are visible, false otherwise
See Also:
AttributesCompartmentContainer.isAttributesVisible()

setAttributesVisible

public void setAttributesVisible(boolean isVisible)
Description copied from interface: AttributesCompartmentContainer
Set the visibility of the attributes compartment.

Specified by:
setAttributesVisible in interface AttributesCompartmentContainer
Parameters:
isVisible - true if the attribute compartment is visible
See Also:
AttributesCompartmentContainer.setAttributesVisible(boolean)

setOperationsVisible

public void setOperationsVisible(boolean isVisible)
Description copied from interface: OperationsCompartmentContainer
Set the visibility of the operations compartment.

Specified by:
setOperationsVisible in interface OperationsCompartmentContainer
Parameters:
isVisible - true if the operation compartment is visible
See Also:
OperationsCompartmentContainer.setOperationsVisible(boolean)

setLineWidth

public void setLineWidth(int w)
See Also:
Fig.setLineWidth(int)

getLineWidth

public int getLineWidth()
See Also:
Fig.getLineWidth()

classNameAndBounds

public String classNameAndBounds()
USED BY PGML.tee.

Overrides:
classNameAndBounds in class FigNodeModelElement
Returns:
the class name and bounds together with compartment visibility.

getMinimumSize

public Dimension getMinimumSize()
Gets the minimum size permitted for a class on the diagram.

Parts of this are hardcoded, notably the fact that the name compartment has a minimum height of 21 pixels.

Returns:
the size of the minimum bounding box.

translate

public void translate(int dx,
                      int dy)
Overrides:
translate in class FigClassifierBox
See Also:
Fig.translate(int, int)

textEdited

protected void textEdited(FigText ft)
                   throws PropertyVetoException
Description copied from class: FigNodeModelElement
This method is called after the user finishes editing a text field that is in the FigNodeModelElement. Determine which field and update the model. This class handles the name, and the stereotype, subclasses should override to handle other text elements.

Overrides:
textEdited in class FigNodeModelElement
Parameters:
ft - the FigText that has been edited and contains the new text
Throws:
PropertyVetoException - thrown when new text represents an unacceptable value
See Also:
FigNodeModelElement.textEdited(org.tigris.gef.presentation.FigText)

textEditStarted

protected void textEditStarted(FigText ft)
Description copied from class: FigNodeModelElement
This method is called when the user doubleclicked on the text field, and starts editing. Subclasses should overrule this field to e.g. supply help to the user about the used format.

It is also possible to alter the text to be edited already here, e.g. by adding the stereotype in front of the name, by calling notationProviderName.putValue("fullyHandleStereotypes", true);, but that seems not user-friendly. See issue 3838.

Overrides:
textEditStarted in class FigNodeModelElement
Parameters:
ft - the FigText that will be edited and contains the start-text
See Also:
FigNodeModelElement.textEditStarted(org.tigris.gef.presentation.FigText)

getPreviousVisibleFeature

protected FigText getPreviousVisibleFeature(FigGroup fgVec,
                                            FigText ft,
                                            int i)
Parameters:
fgVec - the FigGroup
ft - the Figtext
i - get the fig before fig i
Returns:
the FigText

getNextVisibleFeature

protected FigText getNextVisibleFeature(FigGroup fgVec,
                                        FigText ft,
                                        int i)
Parameters:
fgVec - the FigGroup
ft - the Figtext
i - get the fig after fig i
Returns:
the FigText

renderingChanged

public void renderingChanged()
Description copied from class: FigNodeModelElement
Rerenders the fig.

This functionality was originally the functionality of modelChanged but modelChanged takes the event now into account.

Overrides:
renderingChanged in class FigNodeModelElement
See Also:
FigNodeModelElement.renderingChanged()

modelChanged

protected void modelChanged(PropertyChangeEvent mee)
Handles changes to the model. Takes into account the event that occurred. If you need to update the whole fig, consider using renderingChanged.

Overrides:
modelChanged in class FigNodeModelElement
Parameters:
mee - the ModelElementEvent that caused the change
See Also:
FigNodeModelElement.modelChanged(java.beans.PropertyChangeEvent)

updateStereotypeText

protected void updateStereotypeText()
Description copied from class: FigNodeModelElement
Updates the text of the sterotype FigText. Override in subclasses to get wanted behaviour.

Overrides:
updateStereotypeText in class FigNodeModelElement
See Also:
TODO: Refactor into FigClassifierBox

setEnclosingFig

public void setEnclosingFig(Fig encloser)
Description copied from class: FigNodeModelElement
Updates the modelelement container if the fig is moved in or out another fig. If this fig doesn't have an enclosing fig anymore, the namespace of the diagram will be the owning modelelement. If this fig is moved inside another FigNodeModelElement the owner of that fignodemodelelement will be the owning modelelement.

Overrides:
setEnclosingFig in class FigNodeModelElement
See Also:
Fig.setEnclosingFig(org.tigris.gef.presentation.Fig)

setBoundsImpl

protected void setBoundsImpl(int x,
                             int y,
                             int w,
                             int h)
Sets the bounds, but the size will be at least the one returned by getMinimumSize(), unless checking of size is disabled.

If the required height is bigger, then the additional height is equally distributed among all figs (i.e. compartments), such that the cumulated height of all visible figs equals the demanded height

. Some of this has "magic numbers" hardcoded in. In particular there is a knowledge that the minimum height of a name compartment is 21 pixels.

Parameters:
x - Desired X coordinate of upper left corner
y - Desired Y coordinate of upper left corner
w - Desired width of the FigClass
h - Desired height of the FigClass
See Also:
Fig.setBoundsImpl(int, int, int, int)

updateAttributes

protected void updateAttributes()
Updates the attributes in the fig. Called from modelchanged if there is a modelevent effecting the attributes and from renderingChanged in all cases.


updateOperations

protected void updateOperations()
Updates the operations box. Called from modelchanged if there is a modelevent effecting the attributes and from renderingChanged in all cases.

Overrides:
updateOperations in class FigClassifierBox

updateNameText

protected void updateNameText()
Description copied from class: FigNodeModelElement
Updates the text of the name FigText.

Overrides:
updateNameText in class FigNodeModelElement
See Also:
FigNodeModelElement.updateNameText()

updateAbstract

protected void updateAbstract()
Updates the name if modelchanged receives an "isAbstract" event. TODO: Move up to ClassifierBox (should be GeneralizableElement)


updateListeners

protected void updateListeners(Object oldOwner,
                               Object newOwner)
Description copied from class: FigNodeModelElement
Implementations of this method should register/unregister the fig for all (model)events. For FigNodeModelElement only the fig itself is registered as listening to events fired by the owner itself. But for, for example, FigClass the fig must also register for events fired by the operations and attributes of the owner.

An explanation of the original purpose of this method is given in issue 1321.

This function is used in UMLDiagram, which removes all listeners to all Figs when a diagram is not displayed, and restore them when it becomes visible again.

In this case, it is imperative that indeed ALL listeners are updated, since they are ALL removed by the call to removeElementListener.

Additionally, this function may be used by the modelChanged() function.

In this case, it is also imperative that all listeners get removed / added.

Overrides:
updateListeners in class FigNodeModelElement
Parameters:
newOwner - null, or the owner of this. The former means that listeners have to be removed, the latter that they have to be set. TODO: Should this not be boolean, to clarify?
See Also:
org.argouml.uml.diagram.ui.FigNodeModelElement#updateListeners(java.lang.Object)


ArgoUML © 1996-2006ArgoUML HomepageArgoUML Developers' pageArgoUML Cookbook