diff options
2 files changed, 64 insertions, 94 deletions
diff --git a/plugins/org.eclipse.etrice.ui.structure/src/org/eclipse/etrice/ui/structure/support/InterfaceItemSupport.java b/plugins/org.eclipse.etrice.ui.structure/src/org/eclipse/etrice/ui/structure/support/InterfaceItemSupport.java index 1459fddde..0212b27ae 100644 --- a/plugins/org.eclipse.etrice.ui.structure/src/org/eclipse/etrice/ui/structure/support/InterfaceItemSupport.java +++ b/plugins/org.eclipse.etrice.ui.structure/src/org/eclipse/etrice/ui/structure/support/InterfaceItemSupport.java @@ -147,59 +147,17 @@ public class InterfaceItemSupport { IPeCreateService peCreateService = Graphiti.getPeCreateService(); ContainerShape containerShape = peCreateService.createContainerShape(acShape, true); - + Graphiti.getPeService().setPropertyValue(containerShape, Constants.TYPE_KEY, Constants.PORT_TYPE); String kind = getItemKind(port); Graphiti.getPeService().setPropertyValue(containerShape, PROP_KIND, kind); // the context point is the midpoint relative to the invisible rectangle - int x = context.getX(); - int y = context.getY(); int width = acShape.getGraphicsAlgorithm().getWidth(); int height = acShape.getGraphicsAlgorithm().getHeight(); - if (internal) { - if (x<2*margin) - x = 2*margin; - else if (x>width-2*margin) - x = width-2*margin; - if (y<2*margin) - y = 2*margin; - else if (y>height-2*margin) - y = height-2*margin; - } - else { - // TODOHRR: remove duplicate code - int dx = (x<=width/2)? x:width-x; - int dy = (y<=height/2)? y:height-y; - if (dx>dy) { - // keep x, project y - if (y<=height/2) - y = margin; - else - y = height-margin; - - if (x<margin) - x = margin; - else if (x>width-margin) - x = width-margin; - } - else { - // keep y, project x - if (x<=width/2) - x = margin; - else - x = width-margin; - - if (y<margin) - y = margin; - else if (y>height-margin) - y = height-margin; - } - } - // finally we subtract the midpoint to get coordinates of the upper left corner - x -= margin; - y -= margin; + int[] pos = layoutInterfaceItem(context.getX(), context.getY(), internal, margin, width, height); + int x = pos[0], y = pos[1]; Color dark = manageColor(inherited? INHERITED_COLOR:DARK_COLOR); IGaService gaService = Graphiti.getGaService(); @@ -512,58 +470,17 @@ public class InterfaceItemSupport { Shape shape = (Shape) context.getPictogramElement(); InterfaceItem item = (InterfaceItem) getBusinessObjectForPictogramElement(shape); int margin = isRefItem(shape)?MARGIN_SMALL:MARGIN; - int x = shape.getGraphicsAlgorithm().getX(); - int y = shape.getGraphicsAlgorithm().getY(); + int midX = shape.getGraphicsAlgorithm().getX() + margin; + int midY = shape.getGraphicsAlgorithm().getY() + margin; ContainerShape container = shape.getContainer(); int width = container.getGraphicsAlgorithm().getWidth(); int height = container.getGraphicsAlgorithm().getHeight(); - if (isInternal(item)) { - if (x<2*margin) - x = 2*margin; - else if (x>width-2*margin) - x = width-2*margin; - if (y<2*margin) - y = 2*margin; - else if (y>height-2*margin) - y = height-2*margin; - } - else { - // TODOHRR: remove duplicate code - int dx = (x<=width/2)? x:width-x; - int dy = (y<=height/2)? y:height-y; - if (dx>dy) { - // keep x, project y - if (y<=height/2) - y = margin; - else - y = height-margin; - - if (x<margin) - x = margin; - else if (x>width-margin) - x = width-margin; - } - else { - // keep y, project x - if (x<=width/2) - x = margin; - else - x = width-margin; - - if (y<margin) - y = margin; - else if (y>height-margin) - y = height-margin; - } - } - // finally we subtract the midpoint to get coordinates of the upper left corner - x -= margin; - y -= margin; + int[] pos = layoutInterfaceItem(midX, midY, isInternal(item), margin, width, height); + int x = pos[0], y = pos[1]; Graphiti.getGaLayoutService().setLocation(shape.getGraphicsAlgorithm(), x, y); - return true; } @@ -674,6 +591,56 @@ public class InterfaceItemSupport { return inStripe; } + /** + * width, height from parent inv rectangle + */ + protected static int[] layoutInterfaceItem(int midX, int midY, boolean internal, int margin, int width, int height){ + int x = midX, y = midY; + if (internal) { + if (x<2*margin) + x = 2*margin; + else if (x>width-2*margin) + x = width-2*margin; + if (y<2*margin) + y = 2*margin; + else if (y>height-2*margin) + y = height-2*margin; + } + else { + int dx = (x<=width/2)? x:width-x; + int dy = (y<=height/2)? y:height-y; + if (dx>dy) { + // keep x, project y + if (y<=height/2) + y = margin; + else + y = height-margin; + + if (x<margin) + x = margin; + else if (x>width-margin) + x = width-margin; + } + else { + // keep y, project x + if (x<=width/2) + x = margin; + else + x = width-margin; + + if (y<margin) + y = margin; + else if (y>height-margin) + y = height-margin; + } + } + // finally we subtract the midpoint to get coordinates of the upper left corner + x -= margin; + y -= margin; + + return new int[]{x,y}; + } + @Override public IMoveShapeFeature getMoveShapeFeature(IMoveShapeContext context) { return new MoveShapeFeature(fp); diff --git a/plugins/org.eclipse.etrice.ui.structure/src/org/eclipse/etrice/ui/structure/support/provider/DefaultPositionProvider.java b/plugins/org.eclipse.etrice.ui.structure/src/org/eclipse/etrice/ui/structure/support/provider/DefaultPositionProvider.java index b1f11a3f1..1b5eb2696 100644 --- a/plugins/org.eclipse.etrice.ui.structure/src/org/eclipse/etrice/ui/structure/support/provider/DefaultPositionProvider.java +++ b/plugins/org.eclipse.etrice.ui.structure/src/org/eclipse/etrice/ui/structure/support/provider/DefaultPositionProvider.java @@ -25,6 +25,7 @@ import org.eclipse.etrice.core.room.ActorContainerClass; import org.eclipse.etrice.core.room.ActorContainerRef; import org.eclipse.etrice.core.room.ActorRef; import org.eclipse.etrice.core.room.InterfaceItem; +import org.eclipse.etrice.core.room.Port; import org.eclipse.etrice.core.room.RoomClass; import org.eclipse.etrice.core.room.StructureClass; import org.eclipse.etrice.core.room.SubSystemRef; @@ -103,11 +104,13 @@ public class DefaultPositionProvider implements IPositionProvider { for(EObject obj : toLayout){ if(obj instanceof ActorContainerRef) refs.add((ActorContainerRef) obj); - else if(obj instanceof InterfaceItem) - if(obj.eContainer() == sc) - intPorts.add((InterfaceItem) obj); + else if(obj instanceof InterfaceItem){ + InterfaceItem item = (InterfaceItem)obj; + if(item instanceof Port && RoomHelpers.isInternal((Port)item)) + intPorts.add(item); else - ifItems.add((InterfaceItem) obj); + ifItems.add(item); + } } layoutInterfaceItems(ifItems, width, height, -InterfaceItemSupport.MARGIN); |