/****************************************************************************** * Copyright (c) 2004, 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.editpolicies; import java.util.List; import org.eclipse.emf.transaction.TransactionalEditingDomain; import org.eclipse.gef.commands.Command; import org.eclipse.gef.requests.GroupRequest; import org.eclipse.gmf.runtime.common.core.command.CompositeCommand; import org.eclipse.gmf.runtime.common.core.util.StringStatics; import org.eclipse.gmf.runtime.diagram.core.commands.SetPropertyCommand; import org.eclipse.gmf.runtime.diagram.ui.commands.ICommandProxy; import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart; import org.eclipse.gmf.runtime.diagram.ui.internal.properties.Properties; import org.eclipse.gmf.runtime.diagram.ui.l10n.DiagramUIMessages; import org.eclipse.gmf.runtime.emf.core.util.EObjectAdapter; import org.eclipse.gmf.runtime.notation.View; /** * Component edit policy which sets the <code>Property.ID_ISVISIBLE</code> to * <i>false</i> rather than deleting the view. Doesn't support delete semantic. * * @author jcorchis */ public class VisibilityComponentEditPolicy extends ComponentEditPolicy { /** * Return to make the <code>GraphicalEditPart</code>'s figure not visible. * @param deleteRequest the original delete request. */ protected Command createDeleteViewCommand(GroupRequest deleteRequest) { CompositeCommand cc = new CompositeCommand(StringStatics.BLANK); List toDel = deleteRequest.getEditParts(); TransactionalEditingDomain editingDomain = ((IGraphicalEditPart) getHost()).getEditingDomain(); if (toDel == null || toDel.isEmpty()) { SetPropertyCommand c = new SetPropertyCommand(editingDomain, DiagramUIMessages.Command_hideLabel_Label, new EObjectAdapter((View) getHost().getModel()), Properties.ID_ISVISIBLE, Boolean.FALSE); cc.compose(c); } else { for (int i = 0; i < toDel.size(); i++) { IGraphicalEditPart gep = (IGraphicalEditPart) toDel.get(i); SetPropertyCommand c = new SetPropertyCommand(editingDomain, DiagramUIMessages.Command_hideLabel_Label, new EObjectAdapter((View)gep.getModel()), Properties.ID_ISVISIBLE, Boolean.FALSE); cc.compose(c); } } return new ICommandProxy(cc.reduce()); } /** * Returns null. * @see #shouldDeleteSemantic() * @param deleteRequest the original delete request. */ protected Command createDeleteSemanticCommand(GroupRequest deleteRequest) { return null; } protected Command getDeleteCommand(GroupRequest deleteRequest) { // Override this method to avoid prompt when deleting views with no // semantic meaning. See bugzilla 158845. if (shouldDeleteSemantic()) { return createDeleteSemanticCommand(deleteRequest); } return createDeleteViewCommand(deleteRequest); } }