Author: bobtarling
Date: 2011-04-23 07:05:31-0700
New Revision: 19270

Added:
   
trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/FigCompartment.java

Log:
A new generic compartment implementation - in preparation for stereotypes on a 
state

Added: 
trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/FigCompartment.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/FigCompartment.java?view=markup&pathrev=19270
==============================================================================
--- (empty file)
+++ 
trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/FigCompartment.java
     2011-04-23 07:05:31-0700
@@ -0,0 +1,122 @@
+/* $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:
+ *    Bob Tarling
+ *****************************************************************************
+ */
+
+package org.argouml.activity2.diagram;
+
+import java.awt.Dimension;
+import java.awt.Rectangle;
+import java.util.List;
+
+import org.argouml.model.InvalidElementException;
+import org.argouml.notation2.NotationType;
+import org.argouml.uml.diagram.DiagramSettings;
+import org.tigris.gef.presentation.Fig;
+import org.tigris.gef.presentation.FigGroup;
+
+/**
+ * The UML defines a Name Compartment, and a List Compartment. 
+ * This class implements the latter.<p>
+ * 
+ * A List Compartment is a boxed compartment,
+ * containing vertically stacked figs,
+ * which is common to e.g. a stereotypes compartment, operations
+ * compartment and an attributes compartment.<p>
+ * 
+ * @author Bob Tarling
+ */
+class FigCompartment extends FigGroup {
+    
+    private static final int MARGIN = 0;
+
+    private Rectangle bounds;
+    
+    public FigCompartment(Object owner, Rectangle bounds,
+            DiagramSettings settings, List elements) {
+        for (Object element : elements) {
+            try {
+                int y = bounds.y + getTopMargin();
+                int x = bounds.x + getLeftMargin();
+                Rectangle childBounds = new Rectangle(x, y, 0, 0);
+                FigNotation fn =
+                    new FigNotation(element, childBounds, settings, 
NotationType.NAME);
+                addFig(fn);
+                y += fn.getHeight();
+            } catch (InvalidElementException e) {
+            } 
+        }
+    }
+    
+    int getRightMargin() {
+        return MARGIN;
+    }
+
+    int getLeftMargin() {
+        return MARGIN;
+    }
+    
+    int getTopMargin() {
+        return MARGIN;
+    }
+    
+    int getBottomMargin() {
+        return MARGIN;
+    }
+    
+    @Override
+    public Dimension getMinimumSize() {
+        int minWidth = 0;
+        int minHeight = 0;
+        for (org.tigris.gef.di.DiagramElement de : getDiagramElements()) {
+            Fig f = (Fig) de;
+            minWidth = Math.max(f.getMinimumSize().width, minWidth);
+            minHeight += f.getMinimumSize().height;
+        }
+
+        minHeight += getTopMargin() + getBottomMargin();
+        minWidth += getLeftMargin() + getRightMargin();
+        
+        return new Dimension(minWidth, minHeight);
+    }
+
+    @Override
+    protected void setBoundsImpl(int x, int y, int w, int h) {
+        Rectangle oldBounds = getBounds();
+
+        Dimension minimumSize = getMinimumSize();
+        
+        w = Math.max(w, minimumSize.width);
+        h = Math.max(h, minimumSize.height);
+        
+        bounds = new Rectangle(x, y, w, h);
+
+        w -= getLeftMargin() + getRightMargin();
+        h -= getTopMargin() + getBottomMargin();
+
+        y += getTopMargin();
+        
+        for (org.tigris.gef.di.DiagramElement de : getDiagramElements()) {
+            Fig f = (Fig) de;
+            f.setBounds(x, y, w, f.getHeight());
+            y += f.getHeight();
+        }
+        firePropChange("bounds", oldBounds, getBounds());
+    }
+
+    protected Rectangle getBoundsImpl() {
+        return bounds;
+    }
+    
+    public void populate() {
+
+    }
+}

------------------------------------------------------
http://argouml.tigris.org/ds/viewMessage.do?dsForumId=5905&dsMessageId=2723372

To unsubscribe from this discussion, e-mail: 
[[email protected]].

Reply via email to