/******************************************************************************* * Copyright (c) 2000, 2010 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.gef.ui.actions; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.actions.ActionFactory; import org.eclipse.gef.EditPart; import org.eclipse.gef.internal.GEFMessages; import org.eclipse.gef.palette.CombinedTemplateCreationEntry; import org.eclipse.gef.palette.PaletteTemplateEntry; /** * Copies the currently selected template in the palatte to the system * clipboard. * * @author Eric Bordeau */ public class CopyTemplateAction extends WorkbenchPartAction implements ISelectionChangedListener { private Object template; /** * Constructs a new CopyTemplateAction. You must manually add this action to * the palette viewer's list of selection listeners. Otherwise, this * action's enabled state won't be updated properly. * * @param editor * the workbench part * @see org.eclipse.gef.ui.actions.EditorPartAction#EditorPartAction(IEditorPart) */ public CopyTemplateAction(IEditorPart editor) { super(editor); setId(ActionFactory.COPY.getId()); setText(GEFMessages.get().CopyAction_Label); } /** * Returns whether the selected EditPart is a TemplateEditPart. * * @return whether the selected EditPart is a TemplateEditPart */ protected boolean calculateEnabled() { return template != null; } /** * @see org.eclipse.gef.ui.actions.EditorPartAction#dispose() */ public void dispose() { template = null; } /** * Sets the default {@link Clipboard Clipboard's} contents to be the * currently selected template. */ public void run() { Clipboard.getDefault().setContents(template); } /** * Sets the selected EditPart and refreshes the enabled state of this * action. * * @see ISelectionChangedListener#selectionChanged(SelectionChangedEvent) */ public void selectionChanged(SelectionChangedEvent event) { ISelection s = event.getSelection(); if (!(s instanceof IStructuredSelection)) return; IStructuredSelection selection = (IStructuredSelection) s; template = null; if (selection != null && selection.size() == 1) { Object obj = selection.getFirstElement(); if (obj instanceof EditPart) { Object model = ((EditPart) obj).getModel(); if (model instanceof CombinedTemplateCreationEntry) template = ((CombinedTemplateCreationEntry) model) .getTemplate(); else if (model instanceof PaletteTemplateEntry) template = ((PaletteTemplateEntry) model).getTemplate(); } } refresh(); } }