blob: 7d7974bfb223a8424d982f821f685e42ca9e63d6 [file] [log] [blame]
/******************************************************************************
* Copyright (c) 2008 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
****************************************************************************/
package org.eclipse.gmf.runtime.diagram.ui.actions.internal;
import java.util.ListIterator;
import org.eclipse.gmf.runtime.diagram.ui.actions.ActionIds;
import org.eclipse.gmf.runtime.diagram.ui.actions.internal.l10n.DiagramUIActionsMessages;
import org.eclipse.gmf.runtime.diagram.ui.actions.internal.l10n.DiagramUIActionsPluginImages;
import org.eclipse.gmf.runtime.diagram.ui.editparts.ConnectionEditPart;
import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
import org.eclipse.gmf.runtime.diagram.ui.internal.actions.PropertyChangeAction;
import org.eclipse.gmf.runtime.diagram.ui.internal.properties.Properties;
import org.eclipse.gmf.runtime.notation.ArrowStyle;
import org.eclipse.gmf.runtime.notation.ArrowType;
import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.ui.IWorkbenchPage;
/**
* The action for arrow type.
*
* @author Anthony Hunter
*/
public class ArrowTypeAction extends PropertyChangeAction {
/**
* The arrow type property value.
*/
private ArrowType arrowType;
/**
* Constructor for an ArrowTypeAction.
*
* @param workbenchPage
* the workbench page.
* @param arrowType
* the arrow type.
*/
protected ArrowTypeAction(IWorkbenchPage workbenchPage,
ArrowType arrowType, String property) {
super(
workbenchPage,
property,
DiagramUIActionsMessages.ArrowTypeAction_ChangePropertyValueRequest_label);
this.arrowType = arrowType;
}
/**
* Creates the arrow type none action on the source end.
*
* @param workbenchPage
* the workbench page.
* @return the arrow type none action.
*/
public static ArrowTypeAction createArrowTypeSourceNoneAction(
IWorkbenchPage workbenchPage) {
ArrowTypeAction action = new ArrowTypeAction(workbenchPage,
ArrowType.NONE_LITERAL, Properties.ID_ARROW_SOURCE);
action.setId(ActionIds.ACTION_ARROW_TYPE_SOURCE_NONE);
action.setText(DiagramUIActionsMessages.ArrowTypeAction_none);
action
.setToolTipText(DiagramUIActionsMessages.ArrowTypeAction_ChangePropertyValueRequest_label);
action
.setImageDescriptor(DiagramUIActionsPluginImages.DESC_ARROW_TYPE_NONE);
action
.setDisabledImageDescriptor(DiagramUIActionsPluginImages.DESC_ARROW_TYPE_NONE_DISABLED);
action
.setHoverImageDescriptor(DiagramUIActionsPluginImages.DESC_ARROW_TYPE_NONE);
return action;
}
/**
* Creates the arrow type none action on the target end.
*
* @param workbenchPage
* the workbench page.
* @return the arrow type none action.
*/
public static ArrowTypeAction createArrowTypeTargetNoneAction(
IWorkbenchPage workbenchPage) {
ArrowTypeAction action = new ArrowTypeAction(workbenchPage,
ArrowType.NONE_LITERAL, Properties.ID_ARROW_TARGET);
action.setId(ActionIds.ACTION_ARROW_TYPE_TARGET_NONE);
action.setText(DiagramUIActionsMessages.ArrowTypeAction_none);
action
.setToolTipText(DiagramUIActionsMessages.ArrowTypeAction_ChangePropertyValueRequest_label);
action
.setImageDescriptor(DiagramUIActionsPluginImages.DESC_ARROW_TYPE_NONE);
action
.setDisabledImageDescriptor(DiagramUIActionsPluginImages.DESC_ARROW_TYPE_NONE_DISABLED);
action
.setHoverImageDescriptor(DiagramUIActionsPluginImages.DESC_ARROW_TYPE_NONE);
return action;
}
/**
* Creates the solid arrow type action on the source end.
*
* @param workbenchPage
* the workbench page.
* @return the solid arrow type action.
*/
public static ArrowTypeAction createArrowTypeSourceSolidAction(
IWorkbenchPage workbenchPage) {
ArrowTypeAction action = new ArrowTypeAction(workbenchPage,
ArrowType.SOLID_ARROW_LITERAL, Properties.ID_ARROW_SOURCE);
action.setId(ActionIds.ACTION_ARROW_TYPE_SOURCE_SOLID);
action.setText(DiagramUIActionsMessages.ArrowTypeAction_solid);
action
.setToolTipText(DiagramUIActionsMessages.ArrowTypeAction_ChangePropertyValueRequest_label);
action
.setImageDescriptor(DiagramUIActionsPluginImages.DESC_ARROW_TYPE_SOLID);
action
.setDisabledImageDescriptor(DiagramUIActionsPluginImages.DESC_ARROW_TYPE_SOLID_DISABLED);
action
.setHoverImageDescriptor(DiagramUIActionsPluginImages.DESC_ARROW_TYPE_SOLID);
return action;
}
/**
* Creates the solid arrow type action on the target end.
*
* @param workbenchPage
* the workbench page.
* @return the solid arrow type action.
*/
public static ArrowTypeAction createArrowTypeTargetSolidAction(
IWorkbenchPage workbenchPage) {
ArrowTypeAction action = new ArrowTypeAction(workbenchPage,
ArrowType.SOLID_ARROW_LITERAL, Properties.ID_ARROW_TARGET);
action.setId(ActionIds.ACTION_ARROW_TYPE_TARGET_SOLID);
action.setText(DiagramUIActionsMessages.ArrowTypeAction_solid);
action
.setToolTipText(DiagramUIActionsMessages.ArrowTypeAction_ChangePropertyValueRequest_label);
action
.setImageDescriptor(DiagramUIActionsPluginImages.DESC_ARROW_TYPE_SOLID);
action
.setDisabledImageDescriptor(DiagramUIActionsPluginImages.DESC_ARROW_TYPE_SOLID_DISABLED);
action
.setHoverImageDescriptor(DiagramUIActionsPluginImages.DESC_ARROW_TYPE_SOLID);
return action;
}
/**
* Creates the open arrow type action on the source end.
*
* @param workbenchPage
* the workbench page.
* @return the solid arrow type action.
*/
public static ArrowTypeAction createArrowTypeSourceOpenAction(
IWorkbenchPage workbenchPage) {
ArrowTypeAction action = new ArrowTypeAction(workbenchPage,
ArrowType.OPEN_ARROW_LITERAL, Properties.ID_ARROW_SOURCE);
action.setId(ActionIds.ACTION_ARROW_TYPE_SOURCE_OPEN);
action.setText(DiagramUIActionsMessages.ArrowTypeAction_open);
action
.setToolTipText(DiagramUIActionsMessages.ArrowTypeAction_ChangePropertyValueRequest_label);
action
.setImageDescriptor(DiagramUIActionsPluginImages.DESC_ARROW_TYPE_OPEN);
action
.setDisabledImageDescriptor(DiagramUIActionsPluginImages.DESC_ARROW_TYPE_OPEN_DISABLED);
action
.setHoverImageDescriptor(DiagramUIActionsPluginImages.DESC_ARROW_TYPE_OPEN);
return action;
}
/**
* Creates the open arrow type action on the target end.
*
* @param workbenchPage
* the workbench page.
* @return the solid arrow type action.
*/
public static ArrowTypeAction createArrowTypeTargetOpenAction(
IWorkbenchPage workbenchPage) {
ArrowTypeAction action = new ArrowTypeAction(workbenchPage,
ArrowType.OPEN_ARROW_LITERAL, Properties.ID_ARROW_TARGET);
action.setId(ActionIds.ACTION_ARROW_TYPE_TARGET_OPEN);
action.setText(DiagramUIActionsMessages.ArrowTypeAction_open);
action
.setToolTipText(DiagramUIActionsMessages.ArrowTypeAction_ChangePropertyValueRequest_label);
action
.setImageDescriptor(DiagramUIActionsPluginImages.DESC_ARROW_TYPE_OPEN);
action
.setDisabledImageDescriptor(DiagramUIActionsPluginImages.DESC_ARROW_TYPE_OPEN_DISABLED);
action
.setHoverImageDescriptor(DiagramUIActionsPluginImages.DESC_ARROW_TYPE_OPEN);
return action;
}
/*
* @see org.eclipse.gmf.runtime.diagram.ui.actions.DiagramAction#calculateEnabled()
*/
protected boolean calculateEnabled() {
if (getId() == ActionIds.ACTION_ARROW_TYPE_SOURCE_NONE
|| getId() == ActionIds.ACTION_ARROW_TYPE_SOURCE_OPEN
|| getId() == ActionIds.ACTION_ARROW_TYPE_SOURCE_SOLID
|| getId() == ActionIds.ACTION_ARROW_TYPE_TARGET_NONE
|| getId() == ActionIds.ACTION_ARROW_TYPE_TARGET_OPEN
|| getId() == ActionIds.ACTION_ARROW_TYPE_TARGET_SOLID) {
for (ListIterator<?> li = getSelectedObjects().listIterator(); li
.hasNext();) {
Object object = li.next();
if (!(object instanceof ConnectionEditPart)) {
return false;
}
View view = ((IGraphicalEditPart) object).getPrimaryView();
if (view != null) {
ArrowStyle style = (ArrowStyle) view
.getStyle(NotationPackage.eINSTANCE.getArrowStyle());
if (style == null) {
return false;
}
}
}
}
return super.calculateEnabled();
}
/*
* @see org.eclipse.gmf.runtime.diagram.ui.internal.actions.PropertyChangeAction#getNewPropertyValue()
*/
protected Object getNewPropertyValue() {
return arrowType;
}
}