|
What this is
Other links
The source code
// $Id: SelectionActionState.java,v 1.18 2004/08/07 15:39:56 mvw Exp $
// Copyright (c) 1996-2004 The Regents of the University of California. All
// Rights Reserved. Permission to use, copy, modify, and distribute this
// software and its documentation without fee, and without a written
// agreement is hereby granted, provided that the above copyright notice
// and this paragraph appear in all copies. This software program and
// documentation are copyrighted by The Regents of the University of
// California. The software program and documentation are supplied "AS
// IS", without any accompanying services from The Regents. The Regents
// does not warrant that the operation of the program will be
// uninterrupted or error-free. The end-user understands that the program
// was developed for research purposes and is advised not to rely
// exclusively on the program for any reason. IN NO EVENT SHALL THE
// UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
// SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS,
// ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
// THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF
// SUCH DAMAGE. THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY
// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
// PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
// CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,
// UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
package org.argouml.uml.diagram.activity.ui;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Rectangle;
import javax.swing.Icon;
import org.apache.log4j.Logger;
import org.argouml.application.helpers.ResourceLoaderWrapper;
import org.argouml.model.uml.UmlFactory;
import org.argouml.model.ModelFacade;
import org.argouml.uml.diagram.ui.ModeCreateEdgeAndNode;
import org.argouml.uml.diagram.ui.SelectionWButtons;
import org.tigris.gef.base.Editor;
import org.tigris.gef.base.Globals;
import org.tigris.gef.base.ModeManager;
import org.tigris.gef.base.ModeModify;
import org.tigris.gef.base.SelectionManager;
import org.tigris.gef.graph.GraphModel;
import org.tigris.gef.graph.MutableGraphModel;
import org.tigris.gef.presentation.Fig;
import org.tigris.gef.presentation.FigNode;
import org.tigris.gef.presentation.Handle;
/**
* @author jrobbins@ics.uci.edu
*/
public class SelectionActionState extends SelectionWButtons {
private static final Logger LOG =
Logger.getLogger(SelectionActionState.class);
////////////////////////////////////////////////////////////////
// constants
private static Icon trans =
ResourceLoaderWrapper.lookupIconResource("Transition");
private static Icon transDown =
ResourceLoaderWrapper.lookupIconResource("TransitionDown");
////////////////////////////////////////////////////////////////
// instance varables
private boolean showIncomingLeft = true;
private boolean showIncomingAbove = true;
private boolean showOutgoingRight = true;
private boolean showOutgoingBelow = true;
////////////////////////////////////////////////////////////////
// constructors
/**
* Construct a new SelectionActionState for the given Fig.
*
* @param f The given Fig.
*/
public SelectionActionState(Fig f) { super(f); }
////////////////////////////////////////////////////////////////
// accessors
/**
* @param b true if the buton is enabled
*/
public void setOutgoingButtonEnabled(boolean b) {
setOutgoingRightButtonEnabled(b);
setIncomingAboveButtonEnabled(b);
}
/**
* @param b true if the buton is enabled
*/
public void setIncomingButtonEnabled(boolean b) {
setIncomingLeftButtonEnabled(b);
setOutgoingBelowButtonEnabled(b);
}
/**
* @param b true if the buton is enabled
*/
public void setIncomingLeftButtonEnabled(boolean b) {
showIncomingLeft = b;
}
/**
* @param b true if the buton is enabled
*/
public void setOutgoingRightButtonEnabled(boolean b) {
showOutgoingRight = b;
}
/**
* @param b true if the buton is enabled
*/
public void setIncomingAboveButtonEnabled(boolean b) {
showIncomingAbove = b;
}
/**
* @param b true if the buton is enabled
*/
public void setOutgoingBelowButtonEnabled(boolean b) {
showOutgoingBelow = b;
}
/**
* @see org.tigris.gef.base.Selection#hitHandle(java.awt.Rectangle,
* org.tigris.gef.presentation.Handle)
*/
public void hitHandle(Rectangle r, Handle h) {
super.hitHandle(r, h);
if (h.index != -1) return;
if (!isPaintButtons()) return;
Editor ce = Globals.curEditor();
SelectionManager sm = ce.getSelectionManager();
if (sm.size() != 1) return;
ModeManager mm = ce.getModeManager();
if (mm.includes(ModeModify.class) && getPressedButton() == -1) return;
int cx = _content.getX();
int cy = _content.getY();
int cw = _content.getWidth();
int ch = _content.getHeight();
int iw = trans.getIconWidth();
int ih = trans.getIconHeight();
int iwd = transDown.getIconWidth();
int ihd = transDown.getIconHeight();
if (showOutgoingRight && hitLeft(cx + cw, cy + ch / 2, iw, ih, r)) {
h.index = 12;
h.instructions = "Add an outgoing transition";
}
else if (showIncomingLeft && hitRight(cx, cy + ch / 2, iw, ih, r)) {
h.index = 13;
h.instructions = "Add an incoming transition";
}
else if (showOutgoingBelow && hitAbove(cx + cw / 2, cy, iwd, ihd, r)) {
h.index = 10;
h.instructions = "Add an incoming transaction";
}
else if (showIncomingAbove
&& hitBelow(cx + cw / 2, cy + ch, iwd, ihd, r))
{
h.index = 11;
h.instructions = "Add an outgoing transaction";
}
else {
h.index = -1;
h.instructions = "Move object(s)";
}
}
/**
* @see SelectionWButtons#paintButtons(Graphics)
*/
public void paintButtons(Graphics g) {
int cx = _content.getX();
int cy = _content.getY();
int cw = _content.getWidth();
int ch = _content.getHeight();
if (showOutgoingRight)
paintButtonLeft(trans, g, cx + cw, cy + ch / 2, 12);
if (showIncomingLeft)
paintButtonRight(trans, g, cx, cy + ch / 2, 13);
if (showOutgoingBelow)
paintButtonAbove(transDown, g, cx + cw / 2, cy , 14);
if (showIncomingAbove)
paintButtonBelow(transDown, g, cx + cw / 2, cy + ch, 15);
}
/**
* @see org.tigris.gef.base.Selection#dragHandle(int, int, int, int,
* org.tigris.gef.presentation.Handle)
*/
public void dragHandle(int mX, int mY, int anX, int anY, Handle hand) {
if (hand.index < 10) {
setPaintButtons(false);
super.dragHandle(mX, mY, anX, anY, hand);
return;
}
int cx = _content.getX(), cy = _content.getY();
int cw = _content.getWidth(), ch = _content.getHeight();
int newX = cx, newY = cy, newW = cw, newH = ch;
Dimension minSize = _content.getMinimumSize();
int minWidth = minSize.width, minHeight = minSize.height;
Class edgeClass = null;
Class nodeClass = (Class) ModelFacade.ACTION_STATE;
Editor ce = Globals.curEditor();
GraphModel gm = ce.getGraphModel();
if (!(gm instanceof MutableGraphModel)) return;
MutableGraphModel mgm = (MutableGraphModel) gm;
int bx = mX, by = mY;
boolean reverse = false;
switch (hand.index) {
case 12: //add incoming
edgeClass = (Class) ModelFacade.TRANSITION;
by = cy + ch / 2;
bx = cx + cw;
break;
case 13: // add outgoing
edgeClass = (Class) ModelFacade.TRANSITION;
reverse = true;
by = cy + ch / 2;
bx = cx;
break;
case 10: // add incoming on top
edgeClass = (Class) ModelFacade.TRANSITION;
reverse = true;
by = cy;
bx = cx + cw / 2;
break;
case 11: // add outgoing below
edgeClass = (Class) ModelFacade.TRANSITION;
by = cy + ch;
bx = cx + cw / 2;
break;
default:
LOG.warn("invalid handle number");
break;
}
if (edgeClass != null && nodeClass != null) {
ModeCreateEdgeAndNode m = new
ModeCreateEdgeAndNode(ce, edgeClass, nodeClass, false);
m.setup((FigNode) _content, _content.getOwner(), bx, by, reverse);
ce.pushMode(m);
}
}
/**
* @see org.argouml.uml.diagram.ui.SelectionWButtons#getNewNode(int)
*/
protected Object getNewNode(int buttonCode) {
return UmlFactory.getFactory().getActivityGraphs().createActionState();
}
/**
* @see SelectionWButtons#createEdgeAbove(
* org.tigris.gef.graph.MutableGraphModel, java.lang.Object)
*/
protected Object createEdgeAbove(MutableGraphModel mgm, Object newNode) {
return mgm.connect(newNode, _content.getOwner(),
(Class) ModelFacade.TRANSITION);
}
/**
* @see SelectionWButtons#createEdgeLeft(
* org.tigris.gef.graph.MutableGraphModel, java.lang.Object)
*/
protected Object createEdgeLeft(MutableGraphModel gm, Object newNode) {
return gm.connect(newNode, _content.getOwner(),
(Class) ModelFacade.TRANSITION);
}
/**
* @see SelectionWButtons#createEdgeRight(
* org.tigris.gef.graph.MutableGraphModel, java.lang.Object)
*/
protected Object createEdgeRight(MutableGraphModel gm, Object newNode) {
return gm.connect(_content.getOwner(), newNode,
(Class) ModelFacade.TRANSITION);
}
/**
* To enable this we need to add an icon.
*
* @see SelectionWButtons#createEdgeToSelf(
* org.tigris.gef.graph.MutableGraphModel)
*/
protected Object createEdgeToSelf(MutableGraphModel gm) {
return gm.connect(_content.getOwner(), _content.getOwner(),
(Class) ModelFacade.TRANSITION);
}
/**
* @see SelectionWButtons#createEdgeUnder(
* org.tigris.gef.graph.MutableGraphModel, java.lang.Object)
*/
protected Object createEdgeUnder(MutableGraphModel gm, Object newNode) {
return gm.connect(_content.getOwner(), newNode,
(Class) ModelFacade.TRANSITION);
}
} /* end class SelectionActionState */
|
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.