/* ******************************************************************************
* Copyright (c) 2006-2012 XMind Ltd. and others.
*
* This file is a part of XMind 3. XMind releases 3 and
* above are dual-licensed under the Eclipse Public License (EPL),
* which is available at http://www.eclipse.org/legal/epl-v10.html
* and the GNU Lesser General Public License (LGPL),
* which is available at http://www.gnu.org/licenses/lgpl.html
* See http://www.xmind.net/license.html for details.
*
* Contributors:
* XMind Ltd. - initial API and implementation
*******************************************************************************/
package org.xmind.ui.internal.mindmap;
import org.eclipse.draw2d.IFigure;
import org.eclipse.swt.SWT;
import org.xmind.core.IControlPoint;
import org.xmind.core.IRelationship;
import org.xmind.gef.draw2d.decoration.IDecoration;
import org.xmind.gef.graphicalpolicy.IStyleSelector;
import org.xmind.gef.part.IGraphicalPart;
import org.xmind.ui.decorations.IRelationshipDecoration;
import org.xmind.ui.mindmap.IRelationshipPart;
import org.xmind.ui.mindmap.MindMapUI;
import org.xmind.ui.resources.ColorUtils;
import org.xmind.ui.style.StyleUtils;
import org.xmind.ui.style.Styles;
import org.xmind.ui.util.MindMapUtils;
public class DecoratedRelFeedback extends DecoratedLineFeedback {
public DecoratedRelFeedback(IGraphicalPart part) {
super(part);
setLineColor(ColorUtils.getColor(MindMapUI.LINE_COLOR_SELECTION));
setLineStyle(SWT.LINE_SOLID);
setLineWidthExpansion(MindMapUI.SELECTION_LINE_WIDTH / 2);
}
protected IDecoration createNewDecoration(IFigure figure,
String decorationId) {
return StyleUtils.createRelationshipDecoration(getHost(), decorationId);
}
protected String getNewDecorationId() {
return StyleUtils.getString(getHost(),
StyleUtils.getStyleSelector(getHost()), Styles.ShapeClass,
Styles.REL_SHAPE_STRAIGHT);
}
protected void updateDecoration(IFigure figure, IDecoration decoration,
String decorationId, IStyleSelector ss) {
super.updateDecoration(figure, decoration, decorationId, ss);
if (decoration instanceof IRelationshipDecoration) {
if (getHost() instanceof IRelationshipPart) {
IRelationship r = ((IRelationshipPart) getHost())
.getRelationship();
decorateControlPoints(r, figure,
(IRelationshipDecoration) decoration);
}
}
}
private void decorateControlPoints(IRelationship r, IFigure figure,
IRelationshipDecoration decoration) {
if (r != null) {
IControlPoint cp0 = r.getControlPoint(0);
decoration.setRelativeSourceControlPoint(figure,
MindMapUtils.toGraphicalPosition(cp0.getPosition()));
Double angle = cp0 == null ? null : cp0.getPolarAngle();
Double amount = cp0 == null ? null : cp0.getPolarAmount();
decoration.setSourceControlPointHint(figure, angle, amount);
IControlPoint cp1 = r.getControlPoint(1);
decoration.setRelativeTargetControlPoint(figure,
MindMapUtils.toGraphicalPosition(cp1.getPosition()));
angle = cp1 == null ? null : cp1.getPolarAngle();
amount = cp1 == null ? null : cp1.getPolarAmount();
decoration.setTargetControlPointHint(figure, angle, amount);
}
}
}