blob: e774099fe5f9851fca320b3f49fff3d985403bcc [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009 THALES GLOBAL SERVICES.
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Obeo - initial API and implementation
*******************************************************************************/
package org.eclipse.sirius.diagram.ui.graphical.edit.policies;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.draw2d.IFigure;
import org.eclipse.gef.handles.NonResizableHandleKit;
import org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDiagramEdgeEditPart;
import org.eclipse.sirius.diagram.ui.internal.edit.parts.AbstractDEdgeNameEditPart;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
/**
* An edit policy that can show feedback for selection of
* {@link AbstractDiagramEdgeEditPart}.
*
* @author mPorhel
*/
public class DEdgeSelectionFeedbackEditPolicy extends AbstractEdgeSelectionFeedbackEditPolicy {
/**
* {@inheritDoc}
*
* @see org.eclipse.gef.editpolicies.SelectionHandlesEditPolicy#createSelectionHandles()
*/
@Override
protected List createSelectionHandles() {
final List list = new ArrayList();
for (AbstractDEdgeNameEditPart edgeNameEditPart : getEdgeNameEditPart()) {
if (edgeNameEditPart != null && edgeNameEditPart.getFigure().isVisible()) {
NonResizableHandleKit.addMoveHandle(edgeNameEditPart, list);
}
}
for (final Object fig : list) {
if (fig instanceof IFigure) {
((IFigure) fig).setForegroundColor(Display.getCurrent().getSystemColor(SWT.COLOR_LIST_SELECTION));
}
}
return list;
}
/**
* {@inheritDoc}
*
* @see AbstractEdgeSelectionFeedbackEditPolicy#getEdgeEditPart()
*/
@Override
protected AbstractDiagramEdgeEditPart getEdgeEditPart() {
if (getHost() instanceof AbstractDiagramEdgeEditPart) {
return (AbstractDiagramEdgeEditPart) getHost();
}
return null;
}
/**
* {@inheritDoc}
*
* @see AbstractEdgeSelectionFeedbackEditPolicy#getEdgeNameEditPart()
*/
@Override
protected List<AbstractDEdgeNameEditPart> getEdgeNameEditPart() {
List<AbstractDEdgeNameEditPart> names = new ArrayList<AbstractDEdgeNameEditPart>();
if (getHost() instanceof AbstractDiagramEdgeEditPart) {
for (final Object editPart : getHost().getChildren()) {
if (editPart instanceof AbstractDEdgeNameEditPart) {
names.add((AbstractDEdgeNameEditPart) editPart);
}
}
}
return names;
}
}