@Override public boolean add(Figure figure) { basicAdd(figure); if (getDrawing() != null) { figure.addNotify(getDrawing()); } return true; } @Override
@Override public Figure removeChild(int index) { willChange(); Figure figure = basicRemoveChild(index); if (getDrawing() != null) { figure.removeNotify(getDrawing()); } changed(); return figure; } @Override
@Override public void areaInvalidated(FigureEvent e) { if (! owner.isChanging()) { owner.fireAreaInvalidated(e.getInvalidatedArea()); } }
@Override public void figureChanged(FigureEvent e) { if (! owner.isChanging()) { owner.willChange(); owner.fireFigureChanged(e); owner.changed(); } }
LabeledLineConnectionFigure cf = new LabeledLineConnectionFigure(); cf.setLiner(new ElbowLiner()); cf.setLayouter(new LocatorLayouter()); startLabel.setEditable(false); startLabel.setText("start"); cf.add(startLabel); endLabel.setEditable(false); endLabel.setText("end"); cf.add(endLabel); cf.setStartConnector(ta.findConnector(Geom.center(ta.getBounds()), cf)); cf.setEndConnector(tb.findConnector(Geom.center(tb.getBounds()), cf));
/** * A layout algorithm is used to define how the child components * should be laid out in relation to each other. The task for * layouting the child components for presentation is delegated * to a Layouter which can be plugged in at runtime. */ @Override public void layout() { if (getLayouter() != null) { Rectangle2D.Double bounds = getBounds(); Point2D.Double p = new Point2D.Double(bounds.x, bounds.y); getLayouter().layout(this, p, p); invalidate(); } }
@Override public Figure findFigureInside(Point2D.Double p) { if (getDrawingArea().contains(p)) { Figure found = null; for (Figure child : getChildrenFrontToBack()) { if (child.isVisible()) { found = child.findFigureInside(p); if (found != null) { return found; } } } } return null; } // CONNECTING
@Override public int basicRemove(final Figure figure) { int index = children.indexOf(figure); if (index != -1) { basicRemoveChild(index); } return index; } @Override
@Override public void basicAdd(Figure figure) { basicAdd(children.size(), figure); } @Override
@Override public void undoableEditHappened(UndoableEditEvent e) { owner.fireUndoableEditHappened(e.getEdit()); } };
@Override public Rectangle2D.Double getDrawingArea() { if (cachedDrawingArea == null) { cachedDrawingArea = super.getDrawingArea(); for (Figure child : getChildrenFrontToBack()) { if (child.isVisible()) { Rectangle2D.Double childBounds = child.getDrawingArea(); if (! childBounds.isEmpty()) { cachedDrawingArea.add(childBounds); } } } } return (Rectangle2D.Double) cachedDrawingArea.clone(); } @Override
@Override public boolean contains(Point2D.Double p) { if (getDrawingArea().contains(p)) { for (Figure child : getChildrenFrontToBack()) { if (child.isVisible() && child.contains(p)) return true; } return super.contains(p); } return false; } // ATTRIBUTES
@Override public void basicRemoveAllChildren() { while (children.size() > 0) { basicRemoveChild(children.size() - 1); } } // LAYOUT
@Override public void removeAllChildren() { willChange(); while (children.size() > 0) { Figure figure = basicRemoveChild(children.size() - 1); if (getDrawing() != null) { figure.removeNotify(getDrawing()); } } changed(); } @Override
@Override public void add(int index, Figure figure) { basicAdd(index, figure); if (getDrawing() != null) { figure.addNotify(getDrawing()); } } @Override
@Override public boolean remove(final Figure figure) { int index = children.indexOf(figure); if (index == -1) { return false; } else { willChange(); basicRemoveChild(index); if (getDrawing() != null) { figure.removeNotify(getDrawing()); } changed(); return true; } } @Override