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]].
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.