Author: bobtarling
Date: 2011-04-10 14:21:16-0700
New Revision: 19203
Added:
trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/SelectionNodeClarifierWithAttributeButtons.java
Modified:
trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/SelectionClass.java
trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/SelectionInterface.java
trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigCompartment.java
trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/SelectionNodeClarifiers2.java
Log:
Selection buttons for add attribute/operation - contributed by Katharina Fahnenbruck
Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/SelectionClass.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/SelectionClass.java?view=diff&pathrev=19203&r1=19202&r2=19203
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/SelectionClass.java (original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/SelectionClass.java 2011-04-10 14:21:16-0700
@@ -51,11 +51,13 @@
import org.tigris.gef.base.Globals;
import org.tigris.gef.base.ModeCreateEdgeAndNode;
import org.tigris.gef.presentation.Fig;
+import org.argouml.uml.diagram.ui.SelectionNodeClarifierWithAttributeButtons;
+
/**
* @author [email protected]
*/
-public class SelectionClass extends SelectionNodeClarifiers2 {
+public class SelectionClass extends SelectionNodeClarifierWithAttributeButtons {
private static Icon inherit =
ResourceLoaderWrapper.lookupIconResource("Generalization");
Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/SelectionInterface.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/SelectionInterface.java?view=diff&pathrev=19203&r1=19202&r2=19203
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/SelectionInterface.java (original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/SelectionInterface.java 2011-04-10 14:21:16-0700
@@ -44,11 +44,13 @@
import org.argouml.model.Model;
import org.argouml.uml.diagram.ui.SelectionNodeClarifiers2;
import org.tigris.gef.presentation.Fig;
+import org.argouml.uml.diagram.ui.SelectionNodeClarifierWithAttributeButtons;
/**
* @author [email protected]
*/
-public class SelectionInterface extends SelectionNodeClarifiers2 {
+public class SelectionInterface extends
+ SelectionNodeClarifierWithAttributeButtons {
private static Icon realiz =
ResourceLoaderWrapper.lookupIconResource("Realization");
Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigCompartment.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigCompartment.java?view=diff&pathrev=19203&r1=19202&r2=19203
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigCompartment.java (original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigCompartment.java 2011-04-10 14:21:16-0700
@@ -46,9 +46,9 @@
import org.apache.log4j.Logger;
import org.argouml.kernel.Project;
+import org.argouml.model.Defaults;
import org.argouml.model.InvalidElementException;
import org.argouml.model.Model;
-import org.argouml.model.Defaults;
import org.argouml.notation.NotationProvider;
import org.argouml.ui.targetmanager.TargetManager;
import org.argouml.uml.diagram.DiagramSettings;
@@ -88,7 +88,11 @@
*/
private Fig externalSeparatorFig = new FigSeparator(X0, Y0, 11, LINE_WIDTH);
-
+ /**
+ * If true the last element will be editable when the populate method completes
+ */
+ private boolean editOnRedraw;
+
private void constructFigs(int x, int y, int w, int h) {
bigPort = new FigPort(X0, Y0, w, h);
bigPort.setFilled(false);
@@ -344,8 +348,25 @@
if (comp != null) {
comp.setBotMargin(6); // the last one needs extra space below it
+
+ if (editOnRedraw) {
+ comp.startTextEditor(null);
+ editOnRedraw = false;
+ }
}
}
+
+ /**
+ * Set the editOnRedraw state. When this mode is turned on the compartment
+ * will place the last element in edit mode the next time the component
+ * draws (typically as the result of some event such as having a new item
+ * added)
+ *
+ * @param editOnRedraw
+ */
+ public void setEditOnRedraw(final boolean editOnRedraw) {
+ this.editOnRedraw = editOnRedraw;
+ }
/**
Added: trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/SelectionNodeClarifierWithAttributeButtons.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/SelectionNodeClarifierWithAttributeButtons.java?view=markup&pathrev=19203
==============================================================================
--- (empty file)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/SelectionNodeClarifierWithAttributeButtons.java 2011-04-10 14:21:16-0700
@@ -0,0 +1,156 @@
+/* $Id$
+ *******************************************************************************
+ * Copyright (c) 2011 Contributors - see below
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * katharina
+ *******************************************************************************
+ */
+
+package org.argouml.uml.diagram.ui;
+
+import java.awt.Graphics;
+import java.awt.Rectangle;
+import java.awt.event.MouseEvent;
+
+import javax.swing.Icon;
+
+import org.argouml.application.helpers.ResourceLoaderWrapper;
+import org.argouml.model.Model;
+import org.argouml.uml.diagram.static_structure.ui.FigClassifierBox;
+import org.tigris.gef.presentation.Fig;
+import org.tigris.gef.presentation.Handle;
+
+/**
+ * This class adds two buttons to the class-element. They are shown when the
+ * mouse is over the selelected element. The upper button is for adding new
+ * attributes. The lower button is for adding new operations.
+ *
+ * @author katharina
+ */
+public abstract class SelectionNodeClarifierWithAttributeButtons extends
+ SelectionNodeClarifiers2 {
+
+ /** Upper right corner Handle */
+ protected static final int UPPER_RIGHT = 2;
+
+ /** Lower right corner Handle */
+ protected static final int LOWER_RIGHT = 7;
+
+ private int localPressedButton;
+
+ private static Icon addIcon =
+ ResourceLoaderWrapper.lookupIconResource("Add");
+
+ /**
+ * @param f
+ * the given Fig
+ */
+ public SelectionNodeClarifierWithAttributeButtons(Fig f) {
+
+ super(f);
+ }
+
+ /**
+ * Handle h: handle in which to return selected Handle information (output
+ * parameter). A handle index of -1 indicates that the cursor is not over
+ * any GEF handle. If the mouse is over the new buttons nevertheless the
+ * index is -1. There the hitHandle() is overridden (see above)
+ */
+ @Override
+ public void hitHandle(Rectangle cursor, Handle h) {
+ super.hitHandle(cursor, h);
+
+ int cx = getContent().getX();
+ int cy = getContent().getY();
+ int cw = getContent().getWidth();
+ int ch = getContent().getHeight();
+
+ // super returns -1 if any of GEFs buttons was hit
+ // (but maybe one of the not-GEF-buttons)
+ if (h.index == -1) {
+ if (hitBelow(cx + cw - (addIcon.getIconWidth() / 2), cy + 25,
+ addIcon.getIconWidth() + 5, addIcon.getIconHeight() + 3,
+ cursor)) {
+ h.index = UPPER_RIGHT;
+ } else if (hitAbove(cx + cw - (addIcon.getIconWidth() / 2),
+ cy + ch, addIcon.getIconWidth() + 3,
+ addIcon.getIconHeight() + 5,
+ cursor)) {
+ h.index = LOWER_RIGHT;
+ }
+ }
+ }
+
+ /**
+ * Handle h: handle in which to return selected Handle information (output
+ * parameter). A handle index of -1 indicates that the cursor is not over
+ * any GEF handle. If the mouse is over the new buttons nevertheless the
+ * index is -1. There the hitHandle() is overridden.
+ */
+ public void mousePressed(MouseEvent me) {
+ super.mousePressed(me);
+ Handle h = new Handle(-1);
+ hitHandle(me.getX(), me.getY(), 0, 0, h);
+
+ // get the index of the pressed button
+ localPressedButton = h.index;
+ }
+
+ @Override
+ public void mouseReleased(MouseEvent me) {
+ super.mouseReleased(me);
+
+ if (localPressedButton != UPPER_RIGHT
+ && localPressedButton != LOWER_RIGHT) {
+ return;
+ }
+
+ Handle h = new Handle(-1);
+ hitHandle(me.getX(), me.getY(), 0, 0, h);
+
+ // see if mouse was released on the same button
+ if (localPressedButton == h.index) {
+
+ if (localPressedButton == UPPER_RIGHT) {
+ onButtonClicked(Model.getMetaTypes().getAttribute());
+ }
+ if (localPressedButton == LOWER_RIGHT) {
+ onButtonClicked(Model.getMetaTypes().getOperation());
+ }
+
+ me.consume();
+ }
+ }
+
+ /**
+ * Adds new element to the class
+ */
+ private void onButtonClicked(Object metaType) {
+ FigClassifierBox fcb = (FigClassifierBox) getContent();
+ FigCompartment fc = fcb.getCompartment(metaType);
+ fc.setEditOnRedraw(true);
+ fc.createModelElement();
+ }
+
+ /*
+ * @see org.tigris.gef.base.SelectionButtons#paintButtons(Graphics)
+ */
+ @Override
+ public void paintButtons(Graphics g) {
+
+ super.paintButtons(g);
+
+ int cx = getContent().getX();
+ int cy = getContent().getY();
+ int cw = getContent().getWidth();
+ int ch = getContent().getHeight();
+
+ paintButtonLeft(addIcon, g, cx + cw, cy + 35, UPPER_RIGHT);
+ paintButtonLeft(addIcon, g, cx + cw, cy + ch - 10, LOWER_RIGHT);
+ }
+}
Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/SelectionNodeClarifiers2.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/SelectionNodeClarifiers2.java?view=diff&pathrev=19203&r1=19202&r2=19203
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/SelectionNodeClarifiers2.java (original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/SelectionNodeClarifiers2.java 2011-04-10 14:21:16-0700
@@ -125,7 +125,7 @@
/*
* @see org.tigris.gef.base.SelectionButtons#paintButtons(Graphics)
*/
- public final void paintButtons(Graphics g) {
+ public void paintButtons(Graphics g) {
final Mode topMode = Globals.curEditor().getModeManager().top();
if (!(topMode instanceof ModePlace)) {
// If the user has selected ModePlace either by a diagram
------------------------------------------------------
http://argouml.tigris.org/ds/viewMessage.do?dsForumId=5905&dsMessageId=2718675
To unsubscribe from this discussion, e-mail: [[email protected]].
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.