svn commit: r17730 - trunk/src/argouml-app/src/org/argouml/uml/diagram: ui use_case/ui
Bob Tarling <[email protected]>
| Newsgroups | gmane.comp.lang.uml.argouml.cvs |
|---|---|
| Message-ID | <[email protected]> |
Author: bobtarling
Date: 2010-01-03 04:52:27-0800
New Revision: 17730
Modified:
trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigAttributesCompartment.java
trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigCompartment.java
trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigCompartmentBox.java
trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigEditableCompartment.java
trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigEnumLiteralsCompartment.java
trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigExtensionPointsCompartment.java
trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigOperationsCompartment.java
trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigStereotypesGroup.java
trunk/src/argouml-app/src/org/argouml/uml/diagram/use_case/ui/FigUseCase.java
Log:
Deprecate FigEditableCompartment and remove all usage
Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigAttributesCompartment.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigAttributesCompartment.java?view=diff&pathrev=17730&r1=17729&r2=17730
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigAttributesCompartment.java (original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigAttributesCompartment.java 2010-01-03 04:52:27-0800
@@ -1,3 +1,17 @@
+/* $Id$
+ *******************************************************************************
+ * Copyright (c) 2009-2010 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:
+ * Bob Tarling
+ *******************************************************************************
+ *
+ * Some portions of this file was previously release using the BSD License:
+ */
// $Id$
// Copyright (c) 1996-2009 The Regents of the University of California. All
// Rights Reserved. Permission to use, copy, modify, and distribute this
@@ -37,7 +51,7 @@
/**
* @author Bob Tarling
*/
-public class FigAttributesCompartment extends FigEditableCompartment {
+public class FigAttributesCompartment extends FigCompartment {
/**
* Serial version generated by Eclipse for rev. 1.17
*/
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=17730&r1=17729&r2=17730
==============================================================================
--- 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 2010-01-03 04:52:27-0800
@@ -1,3 +1,17 @@
+/* $Id$
+ *******************************************************************************
+ * Copyright (c) 2009-2010 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:
+ * Bob Tarling
+ *******************************************************************************
+ *
+ * Some portions of this file was previously release using the BSD License:
+ */
// $Id$
// Copyright (c) 1996-2009 The Regents of the University of California. All
// Rights Reserved. Permission to use, copy, modify, and distribute this
@@ -24,11 +38,16 @@
package org.argouml.uml.diagram.ui;
+import java.awt.Color;
import java.awt.Dimension;
import java.awt.Rectangle;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
+import org.apache.log4j.Logger;
+import org.argouml.model.InvalidElementException;
+import org.argouml.notation.NotationProvider;
import org.argouml.uml.diagram.DiagramSettings;
import org.tigris.gef.presentation.Fig;
import org.tigris.gef.presentation.FigRect;
@@ -55,7 +74,22 @@
*/
public abstract class FigCompartment extends ArgoFigGroup {
+ private static final Logger LOG = Logger.getLogger(FigCompartment.class);
+
private Fig bigPort;
+
+ private static final int MIN_HEIGHT = FigNodeModelElement.NAME_FIG_HEIGHT;
+
+ /**
+ * A separator line that has the same width as the compartment.
+ */
+ private FigSeparator compartmentSeparator;
+
+ /**
+ * A separator line that may be wider than the compartment.
+ */
+ private Fig externalSeparatorFig = null;
+
/**
* The constructor.
@@ -79,6 +113,10 @@
bigPort.setLineWidth(0);
addFig(bigPort);
+
+ compartmentSeparator =
+ new FigSeparator(X0, Y0, 11, LINE_WIDTH);
+ addFig(compartmentSeparator); // number 2
}
/**
@@ -93,6 +131,59 @@
super(owner, settings);
constructFigs(bounds.x, bounds.y, bounds.width, bounds.height);
}
+
+ /**
+ * @return separator figure
+ */
+ protected FigSeparator getSeperatorFig() {
+ return compartmentSeparator;
+ }
+
+ /**
+ * If a boxed compartment is set to invisible then remove all its
+ * children.
+ * This is to save on resources and increase efficiency as multiple
+ * figs need not exist and be resized, moved etc if they are not visible.
+ * If a compartment is later made visible then its child figs are rebuilt
+ * from the model.
+ * {@inheritDoc}
+ */
+ @Override
+ public void setVisible(boolean visible) {
+ if (isVisible() == visible) {
+ return;
+ }
+ super.setVisible(visible);
+ if (externalSeparatorFig != null) {
+ externalSeparatorFig.setVisible(visible);
+ }
+ if (visible) {
+ populate();
+ } else {
+ for (int i = getFigs().size() - 1; i >= 0; --i) {
+ Fig f = getFigAt(i);
+ if (f instanceof CompartmentFigText) {
+ removeFig(f);
+ }
+ }
+ }
+ }
+
+ @Override
+ public void addFig(Fig fig) {
+ if (fig != getBigPort()
+ && !(fig instanceof CompartmentFigText)
+ && !(fig instanceof FigSeparator)) {
+ LOG.error("Illegal Fig added to a FigEditableCompartment");
+ throw new IllegalArgumentException(
+ "A FigEditableCompartment can only "
+ + "contain CompartmentFigTexts, "
+ + "received a " + fig.getClass().getName());
+ }
+ super.addFig(fig);
+ }
+
+
/**
* @return the bigPort
@@ -122,6 +213,10 @@
}
minHeight += 2; // 2 Pixel padding after compartment
+
+ minHeight = Math.max(minHeight,
+ MIN_HEIGHT + compartmentSeparator.getHeight());
+
return new Dimension(minWidth, minHeight);
}
@@ -154,12 +249,6 @@
protected abstract void createModelElement();
@Override
- public void setLineWidth(int w) {
- super.setLineWidth(w);
- bigPort.setLineWidth(0);
- }
-
- @Override
public void setFilled(boolean f) {
// Only the bigPort may be filled
super.setFilled(false);
@@ -196,7 +285,291 @@
public abstract Object getCompartmentType();
/**
- * The concrete Fig implements this to build all the child Figs
+ * @return the collection of UML objects
+ * on which this compartment is based
+ */
+ protected abstract Collection getUmlCollection();
+
+ /**
+ * @return the type of the notationProvider
+ * used to handle the text in the compartment
+ */
+ protected abstract int getNotationType();
+
+ /**
+ * Fills the Fig by adding all figs within.
+ */
+ public void populate() {
+ if (!isVisible()) {
+ return;
+ }
+
+ int xpos = bigPort.getX();
+ int ypos = bigPort.getY();
+
+ List<Fig> figs = getElementFigs();
+ // We remove all of them:
+ for (Fig f : figs) {
+ removeFig(f);
+ }
+
+ // We are going to add the ones still valid & new ones
+ // in the right sequence:
+ FigSingleLineTextWithNotation comp = null;
+ try {
+ int acounter = -1;
+ for (Object umlObject : getUmlCollection()) {
+ comp = findCompartmentFig(figs, umlObject);
+ acounter++;
+
+ // TODO: Some of these magic numbers probably assume a line
+ // width of 1. Replace with appropriate constants/variables.
+
+ // If we don't have a fig for this UML object, we'll need to add
+ // one. We set the bounds, but they will be reset later.
+ if (comp == null) {
+ comp = createFigText(umlObject, new Rectangle(
+ xpos + 1 /*?LINE_WIDTH?*/,
+ ypos + 1 /*?LINE_WIDTH?*/ + acounter
+ * ROWHEIGHT,
+ 0,
+ ROWHEIGHT - 2 /*? 2*LINE_WIDTH? */),
+ getSettings());
+ } else {
+ /* This one is still usable, so let's retain it, */
+ /* but its position may have been changed: */
+ Rectangle b = comp.getBounds();
+ b.y = ypos + 1 /*?LINE_WIDTH?*/ + acounter * ROWHEIGHT;
+ // bounds not relevant here, but I am perfectionist...
+ comp.setBounds(b);
+ }
+ /* We need to set a new notationprovider, since
+ * the Notation language may have been changed: */
+ comp.initNotationProviders();
+ addFig(comp); // add it again (but now in the right sequence)
+
+ // Now put the text in
+ // We must handle the case where the text is null
+ String ftText = comp.getNotationProvider().toString(umlObject,
+ comp.getNotationSettings());
+ if (ftText == null) {
+ ftText = "";
+ }
+ comp.setText(ftText);
+
+ comp.setBotMargin(0);
+ }
+ } catch (InvalidElementException e) {
+ // TODO: It would be better here to continue the loop and try to
+ // build the rest of the compartment. Hence try/catch should be
+ // internal to the loop.
+ LOG.debug("Attempted to populate a FigEditableCompartment"
+ + " using a deleted model element - aborting", e);
+ }
+
+ if (comp != null) {
+ comp.setBotMargin(6); // the last one needs extra space below it
+ }
+ }
+
+
+ /**
+ * @return null
+ * @deprecated for 0.27.3 by tfmorris. Subclasses must implement
+ * {@link #createFigText(Object, Rectangle, DiagramSettings,
+ * NotationProvider)}
+ * which will become abstract in the future when this deprecated method is
+ * removed.
+ */
+ @Deprecated
+ protected FigSingleLineTextWithNotation createFigText(
+ int x, int y, int w, int h, Fig aFig, NotationProvider np) {
+ // No longer abstract to allow subclasses to remove, so we provide a
+ // null default implementation
+ return null;
+ }
+
+ /**
+ * Factory method to create a FigSingleLineTextWithNotation
+ * which must be implemented by all subclasses.
+ * It will become abstract after the release of 0.28 to
+ * enforce this requirement.
+ *
+ * @param owner owning UML element
+ * @param bounds position and size
+ * @param settings render settings
+ * @param np notation provider
+ * @return a FigSingleLineText which can be used to display the text.
+ */
+ @SuppressWarnings("deprecation")
+ protected FigSingleLineTextWithNotation createFigText(Object owner,
+ Rectangle bounds,
+ @SuppressWarnings("unused") DiagramSettings settings,
+ NotationProvider np) {
+
+ // If this is not overridden it will revert to the old behavior
+ // All internal subclasses have been updated, but this if for
+ // compatibility of non-ArgoUML extensions.
+ FigSingleLineTextWithNotation comp = createFigText(
+ bounds.x,
+ bounds.y,
+ bounds.width,
+ bounds.height,
+ this.getBigPort(),
+ np);
+ comp.setOwner(owner);
+ return comp;
+ }
+
+ /**
+ * @param owner owning UML element
+ * @param bounds position and size
+ * @param settings the render settings
+ * @return a FigSingleLineText with notation provider
+ * which can be used to display the text
*/
- public abstract void populate();
+ abstract FigSingleLineTextWithNotation createFigText(Object owner,
+ Rectangle bounds,
+ DiagramSettings settings);
+
+ /**
+ * Returns the new size of the FigGroup (e.g. attributes or
+ * operations) after calculation new bounds for all sub-figs,
+ * considering their minimal sizes; FigGroup need not be
+ * displayed; no update event is fired.<p>
+ *
+ * This method has side effects that are sometimes used.
+ *
+ * @param x x
+ * @param y y
+ * @param w w
+ * @param h h
+ * @return the new dimension
+ */
+ @SuppressWarnings("unused")
+ public Dimension updateFigGroupSize(
+ int x,
+ int y,
+ int w,
+ int h,
+ boolean checkSize,
+ int rowHeight) {
+ return getMinimumSize();
+ }
+
+ /* Find the compartment fig for this umlObject: */
+ private CompartmentFigText findCompartmentFig(List<Fig> figs,
+ Object umlObject) {
+ for (Fig fig : figs) {
+ if (fig instanceof CompartmentFigText) {
+ CompartmentFigText candidate = (CompartmentFigText) fig;
+ if (candidate.getOwner() == umlObject) {
+ return candidate;
+ }
+ }
+ }
+ return null;
+ }
+
+ private List<Fig> getElementFigs() {
+ List<Fig> figs = new ArrayList<Fig>(getFigs());
+ // TODO: This is fragile and depends on the behavior of the super class
+ // not changing
+ if (figs.size() > 1) {
+ // Ignore the first 2 figs:
+ figs.remove(1); // the separator
+ figs.remove(0); // the bigPort
+ }
+ return figs;
+ }
+
+ @Override
+ public void setLineColor(Color col) {
+ super.setLineColor(col);
+ if (col != null) {
+
+ compartmentSeparator.setFilled(true);
+ if (externalSeparatorFig != null) {
+ externalSeparatorFig.setFillColor(col);
+ externalSeparatorFig.setFilled(true);
+ compartmentSeparator.setFillColor(null);
+ } else {
+ compartmentSeparator.setFillColor(col);
+ }
+ }
+ }
+
+ @Override
+ public void setLineWidth(int w) {
+ super.setLineWidth(0);
+ bigPort.setLineWidth(0);
+ compartmentSeparator.setHeight(w);
+ if (externalSeparatorFig != null) {
+ externalSeparatorFig.setHeight(w);
+ }
+ }
+
+ @Override
+ public void setFillColor(Color col) {
+ super.setFillColor(col);
+
+ compartmentSeparator.setFilled(true);
+ if (externalSeparatorFig != null) {
+ externalSeparatorFig.setFillColor(getLineColor());
+ externalSeparatorFig.setFilled(true);
+ compartmentSeparator.setFillColor(null);
+ } else {
+ compartmentSeparator.setFillColor(getLineColor());
+ }
+ }
+
+ /**
+ * Set new bounds for the external separator line (if it exists).
+ *
+ * @param r the new bounds
+ */
+ public void setExternalSeparatorFigBounds(Rectangle r) {
+ if (externalSeparatorFig != null) {
+ externalSeparatorFig.setBounds(r);
+ }
+ }
+
+ /**
+ * Create an external Fig as separator line.
+ *
+ * @return the separator Fig
+ */
+ public Fig makeExternalSeparatorFig() {
+ assert externalSeparatorFig == null;
+ externalSeparatorFig = new FigSeparator(X0, Y0, 11, LINE_WIDTH);
+ return externalSeparatorFig;
+ }
+
+ /**
+ * Fig representing a horizontal line separator for compartment. <p>
+ *
+ * This is a horizontal line, but implemented as a rectangle
+ * filled with the line color, since using a FigLine would draw the line
+ * around the start and end coordinates with a line width > 1.
+ */
+ protected static class FigSeparator extends FigRect {
+ /**
+ * Constructor.
+ *
+ * @param x coordinate
+ * @param y coordinate
+ * @param len length of the line
+ */
+ FigSeparator(int x, int y, int len, int lineWidth) {
+ super(x, y, len, lineWidth);
+ setLineWidth(0);
+ setFilled(true);
+ }
+
+ @Override
+ public Dimension getMinimumSize() {
+ return new Dimension(MIN_SIZE, getHeight());
+ }
+
+ }
}
Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigCompartmentBox.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigCompartmentBox.java?view=diff&pathrev=17730&r1=17729&r2=17730
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigCompartmentBox.java (original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigCompartmentBox.java 2010-01-03 04:52:27-0800
@@ -1,3 +1,18 @@
+/* $Id$
+ *******************************************************************************
+ * Copyright (c) 2009-2010 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:
+ * Bob Tarling
+ *******************************************************************************
+ *
+ * Some portions of this file was previously release using the BSD License:
+ */
+
// $Id$
// Copyright (c) 1996-2009 The Regents of the University of California. All
// Rights Reserved. Permission to use, copy, modify, and distribute this
@@ -36,7 +51,6 @@
import org.apache.log4j.Logger;
import org.argouml.model.AssociationChangeEvent;
import org.argouml.model.AttributeChangeEvent;
-import org.argouml.model.Model;
import org.argouml.ui.targetmanager.TargetManager;
import org.argouml.uml.diagram.DiagramSettings;
import org.argouml.uml.diagram.static_structure.ui.SelectionClass;
@@ -453,8 +467,8 @@
2);
Fig f = hitFig(r);
- if (f instanceof FigEditableCompartment) {
- FigEditableCompartment figCompartment = (FigEditableCompartment) f;
+ if (f instanceof FigCompartment) {
+ FigCompartment figCompartment = (FigCompartment) f;
f = figCompartment.hitFig(r);
if (f instanceof CompartmentFigText) {
if (highlightedFigText != null && highlightedFigText != f) {
@@ -481,9 +495,9 @@
// Search all feature compartments for a text fig to unhighlight
for (int i = 1; i < getFigs().size(); i++) {
fc = getFigAt(i);
- if (fc instanceof FigEditableCompartment) {
+ if (fc instanceof FigCompartment) {
CompartmentFigText ft =
- unhighlight((FigEditableCompartment) fc);
+ unhighlight((FigCompartment) fc);
if (ft != null) {
return ft;
}
@@ -499,7 +513,8 @@
* @param fc compartment to search for highlight item
* @return item that was unhighlighted or null if no action was taken
*/
- protected final CompartmentFigText unhighlight(FigEditableCompartment fc) {
+ protected final CompartmentFigText unhighlight(
+ FigCompartment fc) {
Fig ft;
for (int i = 1; i < fc.getFigs().size(); i++) {
ft = fc.getFigAt(i);
@@ -514,14 +529,14 @@
}
protected void createContainedModelElement(FigGroup fg, InputEvent ie) {
- if (!(fg instanceof FigEditableCompartment)) {
+ if (!(fg instanceof FigCompartment)) {
return;
}
- ((FigEditableCompartment) fg).createModelElement();
+ ((FigCompartment) fg).createModelElement();
/* Populate the compartment now,
* so that we can put the last one in edit mode:
* This fixes issue 5439. */
- ((FigEditableCompartment) fg).populate();
+ ((FigCompartment) fg).populate();
// TODO: The above populate works but seems rather heavy here.
// I can see something like this is needed though as events
// won't manage this quick enough. Could we make
Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigEditableCompartment.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigEditableCompartment.java?view=diff&pathrev=17730&r1=17729&r2=17730
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigEditableCompartment.java (original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigEditableCompartment.java 2010-01-03 04:52:27-0800
@@ -1,3 +1,17 @@
+/* $Id$
+ *******************************************************************************
+ * Copyright (c) 2009-2010 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:
+ * Bob Tarling
+ *******************************************************************************
+ *
+ * Some portions of this file was previously release using the BSD License:
+ */
// $Id$
// Copyright (c) 1996-2009 The Regents of the University of California. All
// Rights Reserved. Permission to use, copy, modify, and distribute this
@@ -24,19 +38,9 @@
package org.argouml.uml.diagram.ui;
-import java.awt.Color;
-import java.awt.Dimension;
import java.awt.Rectangle;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import org.apache.log4j.Logger;
-import org.argouml.model.InvalidElementException;
-import org.argouml.notation.NotationProvider;
import org.argouml.uml.diagram.DiagramSettings;
-import org.tigris.gef.presentation.Fig;
-import org.tigris.gef.presentation.FigRect;
/**
* Presentation logic for a boxed compartment,
@@ -54,50 +58,11 @@
*
* This FigGroup shall only contain its bigPort,
* and Figs of type FigSeparator, and CompartmentFigText.
+ * @deprecated by Bob Tarling in 0.29.3 use {@link FigCompartment}
*/
+@Deprecated
public abstract class FigEditableCompartment extends FigCompartment {
- private static final Logger LOG = Logger.getLogger(FigCompartment.class);
-
- private static final int MIN_HEIGHT = FigNodeModelElement.NAME_FIG_HEIGHT;
-
- /**
- * A separator line that has the same width as the compartment.
- */
- private FigSeparator compartmentSeparator;
-
- /**
- * A separator line that may be wider than the compartment.
- */
- private Fig externalSeparatorFig = null;
-
- /**
- * The constructor. <p>
- *
- * Two figs are added to this FigGroup:
- * The bigPort (i.e. a box that encloses all compartments),
- * and a separator.
- *
- * @param x x
- * @param y y
- * @param w width
- * @param h height
- * @deprecated for 0.27.3 by tfmorris. Use
- * {@link #FigEditableCompartment(Object, Rectangle, DiagramSettings)}.
- */
- @SuppressWarnings("deprecation")
- @Deprecated
- public FigEditableCompartment(int x, int y, int w, int h) {
- super(x, y, w, h); // This adds bigPort, i.e. number 1
- constructFigs();
- }
-
- private void constructFigs() {
- compartmentSeparator =
- new FigSeparator(X0, Y0, 11, LINE_WIDTH);
- addFig(compartmentSeparator); // number 2
- }
-
/**
* Construct a new FigGroup containing a "bigPort" or rectangle which
* encloses the entire group for use in attaching edges, etc and a
@@ -113,361 +78,5 @@
public FigEditableCompartment(Object owner, Rectangle bounds,
DiagramSettings settings) {
super(owner, bounds, settings); // This adds bigPort, i.e. number 1
- constructFigs();
- // We'd like to call populate here, but our subclasses might not be
- // completely built yet, so we defer this to them
- }
-
- /**
- * @return separator figure
- */
- protected FigSeparator getSeperatorFig() {
- return compartmentSeparator;
- }
-
- /**
- * If a boxed compartment is set to invisible then remove all its
- * children.
- * This is to save on resources and increase efficiency as multiple
- * figs need not exist and be resized, moved etc if they are not visible.
- * If a compartment is later made visible then its child figs are rebuilt
- * from the model.
- * {@inheritDoc}
- */
- @Override
- public void setVisible(boolean visible) {
- if (isVisible() == visible) {
- return;
- }
- super.setVisible(visible);
- if (externalSeparatorFig != null) {
- externalSeparatorFig.setVisible(visible);
- }
- if (visible) {
- populate();
- } else {
- for (int i = getFigs().size() - 1; i >= 0; --i) {
- Fig f = getFigAt(i);
- if (f instanceof CompartmentFigText) {
- removeFig(f);
- }
- }
- }
- }
-
- @Override
- public void addFig(Fig fig) {
- if (fig != getBigPort()
- && !(fig instanceof CompartmentFigText)
- && !(fig instanceof FigSeparator)) {
- LOG.error("Illegal Fig added to a FigEditableCompartment");
- throw new IllegalArgumentException(
- "A FigEditableCompartment can only "
- + "contain CompartmentFigTexts, "
- + "received a " + fig.getClass().getName());
- }
- super.addFig(fig);
- }
-
- /**
- * @return the collection of UML objects
- * on which this compartment is based
- */
- protected abstract Collection getUmlCollection();
-
- /**
- * @return the type of the notationProvider
- * used to handle the text in the compartment
- */
- protected abstract int getNotationType();
-
- /**
- * Fills the Fig by adding all figs within.
- */
- public void populate() {
- if (!isVisible()) {
- return;
- }
-
- Fig bigPort = this.getBigPort();
- int xpos = bigPort.getX();
- int ypos = bigPort.getY();
-
- List<Fig> figs = getElementFigs();
- // We remove all of them:
- for (Fig f : figs) {
- removeFig(f);
- }
-
- // We are going to add the ones still valid & new ones
- // in the right sequence:
- FigSingleLineTextWithNotation comp = null;
- try {
- int acounter = -1;
- for (Object umlObject : getUmlCollection()) {
- comp = findCompartmentFig(figs, umlObject);
- acounter++;
-
- // TODO: Some of these magic numbers probably assume a line
- // width of 1. Replace with appropriate constants/variables.
-
- // If we don't have a fig for this UML object, we'll need to add
- // one. We set the bounds, but they will be reset later.
- if (comp == null) {
- comp = createFigText(umlObject, new Rectangle(
- xpos + 1 /*?LINE_WIDTH?*/,
- ypos + 1 /*?LINE_WIDTH?*/ + acounter
- * ROWHEIGHT,
- 0,
- ROWHEIGHT - 2 /*? 2*LINE_WIDTH? */),
- getSettings());
- } else {
- /* This one is still usable, so let's retain it, */
- /* but its position may have been changed: */
- Rectangle b = comp.getBounds();
- b.y = ypos + 1 /*?LINE_WIDTH?*/ + acounter * ROWHEIGHT;
- // bounds not relevant here, but I am perfectionist...
- comp.setBounds(b);
- }
- /* We need to set a new notationprovider, since
- * the Notation language may have been changed: */
- comp.initNotationProviders();
- addFig(comp); // add it again (but now in the right sequence)
-
- // Now put the text in
- // We must handle the case where the text is null
- String ftText = comp.getNotationProvider().toString(umlObject,
- comp.getNotationSettings());
- if (ftText == null) {
- ftText = "";
- }
- comp.setText(ftText);
-
- comp.setBotMargin(0);
- }
- } catch (InvalidElementException e) {
- // TODO: It would be better here to continue the loop and try to
- // build the rest of the compartment. Hence try/catch should be
- // internal to the loop.
- LOG.debug("Attempted to populate a FigEditableCompartment"
- + " using a deleted model element - aborting", e);
- }
-
- if (comp != null) {
- comp.setBotMargin(6); // the last one needs extra space below it
- }
- }
-
- /* Find the compartment fig for this umlObject: */
- private CompartmentFigText findCompartmentFig(List<Fig> figs,
- Object umlObject) {
- for (Fig fig : figs) {
- if (fig instanceof CompartmentFigText) {
- CompartmentFigText candidate = (CompartmentFigText) fig;
- if (candidate.getOwner() == umlObject) {
- return candidate;
- }
- }
- }
- return null;
- }
-
- private List<Fig> getElementFigs() {
- List<Fig> figs = new ArrayList<Fig>(getFigs());
- // TODO: This is fragile and depends on the behavior of the super class
- // not changing
- if (figs.size() > 1) {
- // Ignore the first 2 figs:
- figs.remove(1); // the separator
- figs.remove(0); // the bigPort
- }
- return figs;
- }
-
- /**
- * @return null
- * @deprecated for 0.27.3 by tfmorris. Subclasses must implement
- * {@link #createFigText(Object, Rectangle, DiagramSettings,
- * NotationProvider)}
- * which will become abstract in the future when this deprecated method is
- * removed.
- */
- @Deprecated
- protected FigSingleLineTextWithNotation createFigText(
- int x, int y, int w, int h, Fig aFig, NotationProvider np) {
- // No longer abstract to allow subclasses to remove, so we provide a
- // null default implementation
- return null;
- }
-
- /**
- * Factory method to create a FigSingleLineTextWithNotation
- * which must be implemented by all subclasses.
- * It will become abstract after the release of 0.28 to
- * enforce this requirement.
- *
- * @param owner owning UML element
- * @param bounds position and size
- * @param settings render settings
- * @param np notation provider
- * @return a FigSingleLineText which can be used to display the text.
- */
- @SuppressWarnings("deprecation")
- protected FigSingleLineTextWithNotation createFigText(Object owner,
- Rectangle bounds,
- @SuppressWarnings("unused") DiagramSettings settings,
- NotationProvider np) {
-
- // If this is not overridden it will revert to the old behavior
- // All internal subclasses have been updated, but this if for
- // compatibility of non-ArgoUML extensions.
- FigSingleLineTextWithNotation comp = createFigText(
- bounds.x,
- bounds.y,
- bounds.width,
- bounds.height,
- this.getBigPort(),
- np);
- comp.setOwner(owner);
- return comp;
- }
-
- /**
- * @param owner owning UML element
- * @param bounds position and size
- * @param settings the render settings
- * @return a FigSingleLineText with notation provider
- * which can be used to display the text
- */
- abstract FigSingleLineTextWithNotation createFigText(Object owner,
- Rectangle bounds,
- DiagramSettings settings);
-
- /**
- * Returns the new size of the FigGroup (e.g. attributes or
- * operations) after calculation new bounds for all sub-figs,
- * considering their minimal sizes; FigGroup need not be
- * displayed; no update event is fired.<p>
- *
- * This method has side effects that are sometimes used.
- *
- * @param x x
- * @param y y
- * @param w w
- * @param h h
- * @return the new dimension
- */
- @SuppressWarnings("unused")
- public Dimension updateFigGroupSize(
- int x,
- int y,
- int w,
- int h,
- boolean checkSize,
- int rowHeight) {
- return getMinimumSize();
- }
-
- /**
- * The minimum width is the minimum width of the widest child element.
- * The minimum height is the total minimum height of all child figs but no
- * less than MINIMUM_HEIGHT pixels.
- * @return the minimum width
- */
- @Override
- public Dimension getMinimumSize() {
- Dimension d = super.getMinimumSize();
- d.height = Math.max(d.height,
- MIN_HEIGHT + compartmentSeparator.getHeight());
- return d;
- }
-
- @Override
- public void setLineColor(Color col) {
- super.setLineColor(col);
- if (col != null) {
-
- compartmentSeparator.setFilled(true);
- if (externalSeparatorFig != null) {
- externalSeparatorFig.setFillColor(col);
- externalSeparatorFig.setFilled(true);
- compartmentSeparator.setFillColor(null);
- } else {
- compartmentSeparator.setFillColor(col);
- }
- }
- }
-
- @Override
- public void setLineWidth(int w) {
- super.setLineWidth(0);
- compartmentSeparator.setHeight(w);
- if (externalSeparatorFig != null) {
- externalSeparatorFig.setHeight(w);
- }
- }
-
- @Override
- public void setFillColor(Color col) {
- super.setFillColor(col);
-
- compartmentSeparator.setFilled(true);
- if (externalSeparatorFig != null) {
- externalSeparatorFig.setFillColor(getLineColor());
- externalSeparatorFig.setFilled(true);
- compartmentSeparator.setFillColor(null);
- } else {
- compartmentSeparator.setFillColor(getLineColor());
- }
- }
-
- /**
- * Set new bounds for the external separator line (if it exists).
- *
- * @param r the new bounds
- */
- public void setExternalSeparatorFigBounds(Rectangle r) {
- if (externalSeparatorFig != null) {
- externalSeparatorFig.setBounds(r);
- }
- }
-
- /**
- * Create an external Fig as separator line.
- *
- * @return the separator Fig
- */
- public Fig makeExternalSeparatorFig() {
- assert externalSeparatorFig == null;
- externalSeparatorFig = new FigSeparator(X0, Y0, 11, LINE_WIDTH);
- return externalSeparatorFig;
- }
-
- /**
- * Fig representing a horizontal line separator for compartment. <p>
- *
- * This is a horizontal line, but implemented as a rectangle
- * filled with the line color, since using a FigLine would draw the line
- * around the start and end coordinates with a line width > 1.
- */
- protected static class FigSeparator extends FigRect {
- /**
- * Constructor.
- *
- * @param x coordinate
- * @param y coordinate
- * @param len length of the line
- */
- FigSeparator(int x, int y, int len, int lineWidth) {
- super(x, y, len, lineWidth);
- setLineWidth(0);
- setFilled(true);
- }
-
- @Override
- public Dimension getMinimumSize() {
- return new Dimension(MIN_SIZE, getHeight());
- }
-
}
}
Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigEnumLiteralsCompartment.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigEnumLiteralsCompartment.java?view=diff&pathrev=17730&r1=17729&r2=17730
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigEnumLiteralsCompartment.java (original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigEnumLiteralsCompartment.java 2010-01-03 04:52:27-0800
@@ -1,3 +1,18 @@
+/* $Id$
+ *******************************************************************************
+ * Copyright (c) 2009-2010 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:
+ * Tom Morris
+ * Bob Tarling
+ *******************************************************************************
+ *
+ * Some portions of this file was previously release using the BSD License:
+ */
// $Id$
// Copyright (c) 1996-2009 The Regents of the University of California. All
// Rights Reserved. Permission to use, copy, modify, and distribute this
@@ -39,7 +54,7 @@
*
* @author Tom Morris
*/
-public class FigEnumLiteralsCompartment extends FigEditableCompartment {
+public class FigEnumLiteralsCompartment extends FigCompartment {
/**
* Serial version for initial implementation.
*/
@@ -81,7 +96,7 @@
}
/**
- * @see org.argouml.uml.diagram.ui.FigEditableCompartment#createModelElement()
+ * @see org.argouml.uml.diagram.ui.FigCompartment#createModelElement()
*/
protected void createModelElement() {
Object enumeration = getGroup().getOwner();
Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigExtensionPointsCompartment.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigExtensionPointsCompartment.java?view=diff&pathrev=17730&r1=17729&r2=17730
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigExtensionPointsCompartment.java (original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigExtensionPointsCompartment.java 2010-01-03 04:52:27-0800
@@ -1,3 +1,19 @@
+/* $Id: FigEditableCompartment.java 17718 2010-01-02 14:06:22Z bobtarling $
+ *******************************************************************************
+ * Copyright (c) 2009-2010 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:
+ * Michiel van der Wulp
+ * Bob Tarling
+ *******************************************************************************
+ *
+ * Some portions of this file was previously release using the BSD License:
+ */
+
// $Id: eclipse-argo-codetemplates.xml 11347 2006-10-26 22:37:44Z linus $
// Copyright (c) 2009 The Regents of the University of California. All
// Rights Reserved. Permission to use, copy, modify, and distribute this
@@ -38,7 +54,7 @@
*
* @author michiel
*/
-public class FigExtensionPointsCompartment extends FigEditableCompartment {
+public class FigExtensionPointsCompartment extends FigCompartment {
/**
* The constructor.
Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigOperationsCompartment.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigOperationsCompartment.java?view=diff&pathrev=17730&r1=17729&r2=17730
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigOperationsCompartment.java (original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigOperationsCompartment.java 2010-01-03 04:52:27-0800
@@ -1,3 +1,18 @@
+/* $Id$
+ *******************************************************************************
+ * Copyright (c) 2009-2010 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:
+ * Bob Tarling
+ *******************************************************************************
+ *
+ * Some portions of this file was previously release using the BSD License:
+ */
+
// $Id$
// Copyright (c) 1996-2009 The Regents of the University of California. All
// Rights Reserved. Permission to use, copy, modify, and distribute this
@@ -40,7 +55,7 @@
*
* @author Bob Tarling
*/
-public class FigOperationsCompartment extends FigEditableCompartment {
+public class FigOperationsCompartment extends FigCompartment {
/**
* Constructor for an Operations compartment.
Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigStereotypesGroup.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigStereotypesGroup.java?view=diff&pathrev=17730&r1=17729&r2=17730
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigStereotypesGroup.java (original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigStereotypesGroup.java 2010-01-03 04:52:27-0800
@@ -1,3 +1,17 @@
+/* $Id$
+ *******************************************************************************
+ * Copyright (c) 2009-2010 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:
+ * Bob Tarling
+ *******************************************************************************
+ *
+ * Some portions of this file was previously release using the BSD License:
+ */
// $Id$
// Copyright (c) 1996-2009 The Regents of the University of California. All
// Rights Reserved. Permission to use, copy, modify, and distribute this
@@ -265,7 +279,7 @@
/**
* TODO: This should become private and only called from constructor
*
- * @see org.argouml.uml.diagram.ui.FigEditableCompartment#populate()
+ * @see org.argouml.uml.diagram.ui.FigCompartment#populate()
*/
public void populate() {
Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/use_case/ui/FigUseCase.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/use_case/ui/FigUseCase.java?view=diff&pathrev=17730&r1=17729&r2=17730
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/use_case/ui/FigUseCase.java (original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/use_case/ui/FigUseCase.java 2010-01-03 04:52:27-0800
@@ -1,3 +1,18 @@
+/* $Id$
+ *******************************************************************************
+ * Copyright (c) 2009-2010 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:
+ * Bob Tarling
+ * Michiel van der Wulp
+ *******************************************************************************
+ *
+ * Some portions of this file was previously release using the BSD License:
+ */
// $Id$
// Copyright (c) 1996-2009 The Regents of the University of California. All
// Rights Reserved. Permission to use, copy, modify, and distribute this
@@ -47,7 +62,6 @@
import org.argouml.uml.diagram.ui.ActionCompartmentDisplay;
import org.argouml.uml.diagram.ui.FigCompartment;
import org.argouml.uml.diagram.ui.FigCompartmentBox;
-import org.argouml.uml.diagram.ui.FigEditableCompartment;
import org.argouml.uml.diagram.ui.FigExtensionPointsCompartment;
import org.tigris.gef.base.Selection;
import org.tigris.gef.presentation.Fig;
@@ -100,7 +114,7 @@
* coordinates of any partition line required between use case name
* and extension points.<p>
*
- * Finally we need to transform our coordinates, to recognize that the
+ * Finally we need to transform our coordinates, to recognise that the
* origin is at our top left corner, and the Y coordinates are
* reversed.<p>
*/
@@ -380,9 +394,7 @@
ob.height / 2.0 - (cb.y - ob.y))));
r.x = cb.x + cb.width / 2 - r.width / 2;
- if (c instanceof FigEditableCompartment) {
- ((FigEditableCompartment) c).setExternalSeparatorFigBounds(r);
- }
+ c.setExternalSeparatorFigBounds(r);
c.setBounds(cb.x, cb.y, cb.width, cb.height);
}
------------------------------------------------------
http://argouml.tigris.org/ds/viewMessage.do?dsForumId=5905&dsMessageId=2434375
To unsubscribe from this discussion, e-mail: [[email protected]].