protected void showChangeBoundsFeedback(ChangeBoundsRequest request) { IFigure feedback = getDragSourceFeedbackFigure(); PrecisionRectangle rect = new PrecisionRectangle(getInitialFeedbackBounds().getCopy()); getHostFigure().translateToAbsolute(rect); rect.translate(request.getMoveDelta()); rect.resize(request.getSizeDelta()); IFigure f = getHostFigure(); Dimension min = f.getMinimumSize().getCopy(); Dimension max = f.getMaximumSize().getCopy(); IMapMode mmode = MapModeUtil.getMapMode(f); min.height = mmode.LPtoDP(min.height); min.width = mmode.LPtoDP(min.width); max.height = mmode.LPtoDP(max.height); max.width = mmode.LPtoDP(max.width); if (min.width > rect.width) rect.width = min.width; else if (max.width < rect.width) rect.width = max.width; if (min.height > rect.height) rect.height = min.height; else if (max.height < rect.height) rect.height = max.height; feedback.translateToRelative(rect); feedback.setBounds(rect); }
@SuppressWarnings("rawtypes") public void layout(IFigure parent) { Rectangle relativeArea = parent.getClientArea(); constrainedData.area = transposer.t(relativeArea); // parent may not be set yet if (relativeArea.width == 0) return; Iterator iterator = parent.getChildren().iterator(); int dx; initVariables(parent); initRow(); int i = 0; while (iterator.hasNext()) { IFigure f = (IFigure) iterator.next(); Rectangle bounds = getConstraint(f); // -- There is a constraint, process width and height int widthHint = bounds.width; int heightHint = bounds.height; if (widthHint == -1 || heightHint == -1) { Dimension _preferredSize = f.getPreferredSize(widthHint, heightHint); bounds = bounds.getCopy(); if (widthHint == -1) bounds.width = _preferredSize.width; if (heightHint == -1) bounds.height = _preferredSize.height; } Dimension min = f.getMinimumSize(widthHint, heightHint); Dimension max = f.getMaximumSize(); if (min.width > bounds.width) bounds.width = min.width; else if (max.width < bounds.width) bounds.width = max.width; if (min.height > bounds.height) bounds.height = min.height; else if (max.height < bounds.height) bounds.height = max.height; Rectangle r = new Rectangle(0, 0, bounds.width, bounds.height); if (constrainedData.rowCount > 0) { if (constrainedData.rowWidth + bounds.width > constrainedData.maxWidth) layoutRow(parent); } r.x = constrainedData.rowX; r.y = constrainedData.rowY; dx = r.width + getMinorSpacing(); constrainedData.rowX += dx; constrainedData.rowWidth += dx; constrainedData.rowHeight = Math.max(constrainedData.rowHeight, r.height); constrainedData.row[constrainedData.rowCount] = f; constrainedData.bounds[constrainedData.rowCount] = r; constrainedData.rowCount++; i++; } if (constrainedData.rowCount != 0) layoutRow(parent); totalHeight = constrainedData.rowY; constrainedData.rowY = 0; }
protected void showChangeBoundsFeedback(ChangeBoundsRequest request) { IFigure feedback = getDragSourceFeedbackFigure(); PrecisionRectangle rect = new PrecisionRectangle(getInitialFeedbackBounds().getCopy()); getHostFigure().translateToAbsolute(rect); // Only enable horizontal dragging on lifelines(except lifelines that are result of a create // message). // https://bugs.eclipse.org/bugs/show_bug.cgi?id=364688 if (this.getHost() instanceof LifelineEditPart) { LifelineEditPart lifelineEP = (LifelineEditPart) this.getHost(); if (!SequenceUtil.isCreateMessageEndLifeline(lifelineEP)) { request.getMoveDelta().y = 0; } } rect.translate(request.getMoveDelta()); rect.resize(request.getSizeDelta()); IFigure f = getHostFigure(); Dimension min = f.getMinimumSize().getCopy(); Dimension max = f.getMaximumSize().getCopy(); IMapMode mmode = MapModeUtil.getMapMode(f); min.height = mmode.LPtoDP(min.height); min.width = mmode.LPtoDP(min.width); max.height = mmode.LPtoDP(max.height); max.width = mmode.LPtoDP(max.width); if (min.width > rect.width) rect.width = min.width; else if (max.width < rect.width) rect.width = max.width; if (min.height > rect.height) rect.height = min.height; else if (max.height < rect.height) rect.height = max.height; feedback.translateToRelative(rect); feedback.setBounds(rect); }
@Override public void layout(IFigure parent) { List children = parent.getChildren(); int numChildren = children.size(); Rectangle clientArea = transposer.t(parent.getClientArea()); int x = clientArea.x; int y = clientArea.y; int availableHeight = clientArea.height; Dimension prefSizes[] = new Dimension[numChildren]; Dimension minSizes[] = new Dimension[numChildren]; int wHint = -1; int hHint = -1; if (isHorizontal()) { hHint = parent.getClientArea(Rectangle.SINGLETON).height; } else { wHint = parent.getClientArea(Rectangle.SINGLETON).width; } IFigure child; int totalHeight = 0; int totalMinHeight = 0; int prefMinSumHeight = 0; for (int i = 0; i < numChildren; i++) { child = (IFigure) children.get(i); prefSizes[i] = transposer.t(getChildPreferredSize(child, wHint, hHint)); minSizes[i] = transposer.t(getChildMinimumSize(child, wHint, hHint)); totalHeight += prefSizes[i].height; totalMinHeight += minSizes[i].height; } totalHeight += (numChildren - 1) * spacing; totalMinHeight += (numChildren - 1) * spacing; prefMinSumHeight = totalHeight - totalMinHeight; int amntShrinkHeight = totalHeight - Math.max(availableHeight, totalMinHeight); if (amntShrinkHeight < 0) { amntShrinkHeight = 0; } for (int i = 0; i < numChildren; i++) { int amntShrinkCurrentHeight = 0; int prefHeight = prefSizes[i].height; int minHeight = minSizes[i].height; int prefWidth = prefSizes[i].width; int minWidth = minSizes[i].width; Rectangle newBounds = new Rectangle(x, y, prefWidth, prefHeight); child = (IFigure) children.get(i); if (child instanceof AbstractTreeSettingContainer) { if (!tableMananger.isActivateCondensedTool()) { child.setBounds(new Rectangle(x, y, 0, 0)); continue; } } if (child instanceof FilterContainer) { if (!tableMananger.isActivateExpressionFilter()) { child.setBounds(new Rectangle(x, y, 0, 0)); continue; } } if (child instanceof AbstractGlobalMapContainer) { if (!tableMananger.isActivateGlobalMap()) { child.setBounds(new Rectangle(x, y, 0, 0)); continue; } } int width = Math.min(prefWidth, transposer.t(child.getMaximumSize()).width); if (matchWidth) { width = transposer.t(child.getMaximumSize()).width; } width = Math.max(minWidth, Math.min(clientArea.width, width)); newBounds.width = width; child.setBounds(transposer.t(newBounds)); amntShrinkHeight -= amntShrinkCurrentHeight; prefMinSumHeight -= (prefHeight - minHeight); y += newBounds.height + spacing; if (child instanceof ScrollPane) { IFigure contents = ((ScrollPane) child).getViewport().getContents(); if (contents instanceof AbstractTable) { // ((AbstractTable) contents).setDefautTableWidth(newBounds.width); } } } }