Search in sources :

Example 1 with PathwayContainerShape

use of cbit.vcell.client.desktop.biomodel.pathway.shapes.PathwayContainerShape in project vcell by virtualcell.

the class GraphContainerLayoutPathways method getBoundaryForAutomaticLayout.

public Rectangle getBoundaryForAutomaticLayout(Shape shape) {
    if (shape instanceof PathwayContainerShape) {
        Point absLoc = shape.getAbsPos();
        Dimension size = shape.getSize();
        return new Rectangle(absLoc.x + WIDTH_PADDING, absLoc.y + HEIGHT_PADDING + TOP_LABEL_HEIGHT, size.width - 2 * WIDTH_PADDING, size.height - 2 * HEIGHT_PADDING - TOP_LABEL_HEIGHT);
    }
    return new Rectangle(shape.getAbsPos(), shape.getSize());
}
Also used : Rectangle(java.awt.Rectangle) PathwayContainerShape(cbit.vcell.client.desktop.biomodel.pathway.shapes.PathwayContainerShape) Point(java.awt.Point) Dimension(java.awt.Dimension)

Example 2 with PathwayContainerShape

use of cbit.vcell.client.desktop.biomodel.pathway.shapes.PathwayContainerShape in project vcell by virtualcell.

the class PathwayGraphTool method selectEventFromWorld.

private void selectEventFromWorld(Rectangle rect, boolean bShift, boolean bCntrl) {
    if (!bShift && !bCntrl) {
        getGraphModel().clearSelection();
        List<Shape> shapes = getGraphModel().pickWorld(rect);
        for (Shape shape : shapes) {
            if (shape instanceof BioPaxShape) {
                getGraphModel().selectShape(shape);
            }
        }
    } else if (bShift) {
        if (getGraphModel().getSelectedShape() instanceof PathwayContainerShape) {
            getGraphModel().clearSelection();
        }
        List<Shape> shapes = getGraphModel().pickWorld(rect);
        for (Shape shape : shapes) {
            if (shape instanceof BioPaxShape) {
                getGraphModel().selectShape(shape);
            }
        }
    } else if (bCntrl) {
        if (getGraphModel().getSelectedShape() instanceof PathwayContainerShape) {
            getGraphModel().clearSelection();
        }
        List<Shape> shapes = getGraphModel().pickWorld(rect);
        for (Shape shape : shapes) {
            if (shape instanceof BioPaxShape) {
                if (shape.isSelected()) {
                    getGraphModel().deselectShape(shape);
                } else {
                    getGraphModel().selectShape(shape);
                }
            }
        }
    }
}
Also used : RubberBandRectShape(cbit.gui.graph.RubberBandRectShape) PathwayContainerShape(cbit.vcell.client.desktop.biomodel.pathway.shapes.PathwayContainerShape) Shape(cbit.gui.graph.Shape) BioPaxShape(cbit.vcell.client.desktop.biomodel.pathway.shapes.BioPaxShape) BioPaxShape(cbit.vcell.client.desktop.biomodel.pathway.shapes.BioPaxShape) PathwayContainerShape(cbit.vcell.client.desktop.biomodel.pathway.shapes.PathwayContainerShape) List(java.util.List)

Example 3 with PathwayContainerShape

use of cbit.vcell.client.desktop.biomodel.pathway.shapes.PathwayContainerShape in project vcell by virtualcell.

the class GraphContainerLayoutPathways method getPreferedSizePathwayContainerShape.

public Dimension getPreferedSizePathwayContainerShape(PathwayContainerShape shape, Graphics2D g) {
    // get size when empty
    Font origFont = g.getFont();
    g.setFont(shape.getLabelFont(g));
    try {
        Dimension preferredSize = shape.getPreferedSizeSelf(g);
        // make larger than empty size so that children fit
        for (Shape child : shape.getChildren()) {
            if (child instanceof BioPaxShape) {
                preferredSize.width = Math.max(preferredSize.width, child.getSpaceManager().getRelPos().x + child.getSpaceManager().getSize().width);
                preferredSize.height = Math.max(preferredSize.height, child.getSpaceManager().getRelPos().y + child.getSpaceManager().getSize().height);
            }
        }
        preferredSize.width = preferredSize.width + WIDTH_PADDING;
        preferredSize.height = preferredSize.height + HEIGHT_PADDING;
        if (preferredSize.width < PATHWAY_CONTAINER_MIN_SIZE.width) {
            preferredSize.width = PATHWAY_CONTAINER_MIN_SIZE.width;
        }
        if (preferredSize.height < PATHWAY_CONTAINER_MIN_SIZE.height) {
            preferredSize.height = PATHWAY_CONTAINER_MIN_SIZE.height;
        }
        int nNodes = shape.getChildren().size();
        int minArea = nNodes * MIN_AREA_PER_NODE;
        while (preferredSize.width * preferredSize.height < minArea) {
            preferredSize.width += preferredSize.width / 20;
            preferredSize.height += preferredSize.height / 20;
        }
        return preferredSize;
    } finally {
        g.setFont(origFont);
    }
}
Also used : PathwayContainerShape(cbit.vcell.client.desktop.biomodel.pathway.shapes.PathwayContainerShape) BioPaxShape(cbit.vcell.client.desktop.biomodel.pathway.shapes.BioPaxShape) BioPaxShape(cbit.vcell.client.desktop.biomodel.pathway.shapes.BioPaxShape) Dimension(java.awt.Dimension) Font(java.awt.Font) Point(java.awt.Point)

Example 4 with PathwayContainerShape

use of cbit.vcell.client.desktop.biomodel.pathway.shapes.PathwayContainerShape in project vcell by virtualcell.

the class PathwayGraphTool method mouseDragged.

@Override
public void mouseDragged(MouseEvent event) {
    if ((event.getModifiers() & (InputEvent.BUTTON2_MASK | InputEvent.BUTTON3_MASK)) != 0) {
        return;
    }
    boolean bShift = (event.getModifiers() & InputEvent.SHIFT_MASK) == InputEvent.SHIFT_MASK;
    boolean bCntrl = (event.getModifiers() & InputEvent.CTRL_MASK) == InputEvent.CTRL_MASK;
    try {
        switch(mode) {
            case SELECT:
                {
                    Point worldPoint = screenToWorld(event.getX(), event.getY());
                    if (bMoving) {
                        List<Shape> selectedShapes = getGraphModel().getSelectedShapes();
                        // constrain to stay within the corresponding parent for the
                        // "movingShape" as well as all other selected (hence
                        // moving) shapes.
                        Point movingParentLoc = movingShape.getParent().getSpaceManager().getAbsLoc();
                        Dimension movingParentSize = movingShape.getParent().getSpaceManager().getSize();
                        worldPoint.x = Math.max(movingOffsetWorld.x + movingParentLoc.x, Math.min(movingOffsetWorld.x + movingParentLoc.x + movingParentSize.width - movingShape.getSpaceManager().getSize().width, worldPoint.x));
                        worldPoint.y = Math.max(movingOffsetWorld.y + movingParentLoc.y, Math.min(movingOffsetWorld.x + movingParentLoc.y + movingParentSize.height - movingShape.getSpaceManager().getSize().height, worldPoint.y));
                        for (Shape shape : selectedShapes) {
                            if (shape != movingShape && shape instanceof BioPaxShape) {
                                Point selectedParentLoc = shape.getParent().getSpaceManager().getAbsLoc();
                                Dimension selectedParentSize = shape.getParent().getSpaceManager().getSize();
                                int selectedMovingOffsetX = movingOffsetWorld.x + (movingShape.getSpaceManager().getAbsLoc().x - shape.getSpaceManager().getAbsLoc().x);
                                int selectedMovingOffsetY = movingOffsetWorld.y + (movingShape.getSpaceManager().getAbsLoc().y - shape.getSpaceManager().getAbsLoc().y);
                                worldPoint.x = Math.max(selectedMovingOffsetX + selectedParentLoc.x, Math.min(selectedMovingOffsetX + selectedParentLoc.x + selectedParentSize.width - shape.getSpaceManager().getSize().width, worldPoint.x));
                                worldPoint.y = Math.max(selectedMovingOffsetY + selectedParentLoc.y, Math.min(selectedMovingOffsetY + selectedParentLoc.y + selectedParentSize.height - shape.getSpaceManager().getSize().height, worldPoint.y));
                            }
                        }
                        getGraphPane().setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
                        Point newMovingPoint = new Point(worldPoint.x - movingOffsetWorld.x, worldPoint.y - movingOffsetWorld.y);
                        int deltaX = newMovingPoint.x - movingPointWorld.x;
                        int deltaY = newMovingPoint.y - movingPointWorld.y;
                        movingPointWorld = newMovingPoint;
                        movingShape.getSpaceManager().setRelPos(movingPointWorld.x - movingParentLoc.x, movingPointWorld.y - movingParentLoc.y);
                        // them also
                        for (Shape shape : selectedShapes) {
                            if (shape != movingShape) {
                                shape.getSpaceManager().move(deltaX, deltaY);
                            }
                        }
                        getGraphPane().invalidate();
                        ((JViewport) getGraphPane().getParent()).revalidate();
                        getGraphPane().repaint();
                    } else if (bRectStretch) {
                        // constrain to stay within parent
                        Point parentLoc = rectShape.getParent().getSpaceManager().getAbsLoc();
                        Dimension parentSize = rectShape.getParent().getSpaceManager().getSize();
                        worldPoint.x = Math.max(1, Math.min(parentSize.width - 1, worldPoint.x - parentLoc.x)) + parentLoc.x;
                        worldPoint.y = Math.max(1, Math.min(parentSize.height - 1, worldPoint.y - parentLoc.y)) + parentLoc.y;
                        getGraphPane().setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
                        // getGraphPane().repaint();
                        Graphics2D g = (Graphics2D) getGraphPane().getGraphics();
                        AffineTransform oldTransform = g.getTransform();
                        g.scale(0.01 * getGraphModel().getZoomPercent(), 0.01 * getGraphModel().getZoomPercent());
                        g.setXORMode(Color.white);
                        rectShape.setEnd(endPointWorld);
                        rectShape.paint(g, 0, 0);
                        endPointWorld = worldPoint;
                        rectShape.setEnd(endPointWorld);
                        rectShape.paint(g, 0, 0);
                        g.setTransform(oldTransform);
                    } else {
                        Shape shape = (getGraphModel().getSelectedShape() != null ? getGraphModel().getSelectedShape() : getGraphModel().pickWorld(worldPoint));
                        if (!bCntrl && !bShift && shape instanceof BioPaxShape) {
                            bMoving = true;
                            movingShape = shape;
                            movingPointWorld = shape.getSpaceManager().getAbsLoc();
                            movingOffsetWorld = new Point(worldPoint.x - movingPointWorld.x, worldPoint.y - movingPointWorld.y);
                        } else if (shape instanceof PathwayContainerShape || bShift || bCntrl) {
                            bRectStretch = true;
                            endPointWorld = new Point(worldPoint.x + 1, worldPoint.y + 1);
                            rectShape = new RubberBandRectShape(worldPoint, endPointWorld, getGraphModel());
                            rectShape.setEnd(endPointWorld);
                            if (!(shape instanceof PathwayContainerShape)) {
                                shape.getParent().addChildShape(rectShape);
                            } else {
                                shape.addChildShape(rectShape);
                            }
                            Graphics2D g = (Graphics2D) getGraphPane().getGraphics();
                            AffineTransform oldTransform = g.getTransform();
                            g.scale(0.01 * getGraphModel().getZoomPercent(), 0.01 * getGraphModel().getZoomPercent());
                            g.setXORMode(Color.white);
                            rectShape.paint(g, 0, 0);
                            g.setTransform(oldTransform);
                        }
                    }
                    break;
                }
            default:
                {
                    break;
                }
        }
    } catch (Exception e) {
        System.out.println("CartoonTool.mouseDragged: uncaught exception");
        e.printStackTrace(System.out);
    }
}
Also used : RubberBandRectShape(cbit.gui.graph.RubberBandRectShape) PathwayContainerShape(cbit.vcell.client.desktop.biomodel.pathway.shapes.PathwayContainerShape) Shape(cbit.gui.graph.Shape) BioPaxShape(cbit.vcell.client.desktop.biomodel.pathway.shapes.BioPaxShape) BioPaxShape(cbit.vcell.client.desktop.biomodel.pathway.shapes.BioPaxShape) RubberBandRectShape(cbit.gui.graph.RubberBandRectShape) AffineTransform(java.awt.geom.AffineTransform) List(java.util.List) PathwayContainerShape(cbit.vcell.client.desktop.biomodel.pathway.shapes.PathwayContainerShape) Point(java.awt.Point) Dimension(java.awt.Dimension) Graphics2D(java.awt.Graphics2D)

Aggregations

PathwayContainerShape (cbit.vcell.client.desktop.biomodel.pathway.shapes.PathwayContainerShape)4 BioPaxShape (cbit.vcell.client.desktop.biomodel.pathway.shapes.BioPaxShape)3 Dimension (java.awt.Dimension)3 Point (java.awt.Point)3 RubberBandRectShape (cbit.gui.graph.RubberBandRectShape)2 Shape (cbit.gui.graph.Shape)2 List (java.util.List)2 Font (java.awt.Font)1 Graphics2D (java.awt.Graphics2D)1 Rectangle (java.awt.Rectangle)1 AffineTransform (java.awt.geom.AffineTransform)1