| /** |
| * Copyright (c) 2009 Anyware Technologies 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: |
| * Anyware Technologies - initial API and implementation |
| * |
| * $Id: EmfMasterDetailBlock.java,v 1.12 2009/08/07 16:25:33 bcabe Exp $ |
| */ |
| package org.eclipse.pde.emfforms.editor.actions; |
| |
| import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain; |
| |
| import org.eclipse.emf.ecore.EObject; |
| import org.eclipse.emf.edit.domain.EditingDomain; |
| import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider; |
| import org.eclipse.jface.action.Action; |
| import org.eclipse.jface.dialogs.MessageDialog; |
| import org.eclipse.jface.resource.ImageDescriptor; |
| import org.eclipse.jface.viewers.IStructuredSelection; |
| import org.eclipse.jface.viewers.TreeViewer; |
| import org.eclipse.pde.emfforms.editor.EmfMasterDetailBlock; |
| import org.eclipse.pde.emfforms.internal.Activator; |
| import org.eclipse.pde.emfforms.internal.editor.IEmfFormsImages; |
| import org.eclipse.ui.PlatformUI; |
| |
| public abstract class AbstractRemoveAction extends Action { |
| |
| private EmfMasterDetailBlock masterDetail; |
| |
| public AbstractRemoveAction(EmfMasterDetailBlock masterDetail) { |
| super(); |
| this.masterDetail = masterDetail; |
| setText("Remove"); |
| setToolTipText("Remove selected element"); |
| } |
| |
| public void run() { |
| TreeViewer treeViewer = masterDetail.getTreeViewer(); |
| |
| if (!treeViewer.getSelection().isEmpty()) { |
| |
| int selIndex = treeViewer.getTree().indexOf(treeViewer.getTree().getSelection()[0]); |
| |
| EObject sel = (EObject) AdapterFactoryEditingDomain.unwrap((((IStructuredSelection) treeViewer.getSelection()).getFirstElement())); |
| AdapterFactoryLabelProvider labelProvider = new AdapterFactoryLabelProvider(masterDetail.getEditor().getAdapterFactory()); |
| |
| // -- Confirmation Dialog |
| String title = "Delete the current selection"; //$NON-NLS-1$ |
| String message = "Do you really want to delete '" + labelProvider.getText(sel) + "' ?"; //$NON-NLS-1$ //$NON-NLS-2$ |
| |
| if (MessageDialog.openQuestion(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), title, message)) { |
| EditingDomain editingDomain = masterDetail.getEditor().getEditingDomain(); |
| // perform remove method |
| removeObject(sel, editingDomain); |
| |
| treeViewer.refresh(); |
| if (treeViewer.getTree().getItemCount() > 0) { |
| |
| // if we delete the last line, select the new last |
| // line |
| if (selIndex >= treeViewer.getTree().getItemCount()) |
| selIndex = selIndex - 1; |
| |
| treeViewer.getTree().setSelection(treeViewer.getTree().getItem(selIndex)); |
| treeViewer.getTree().setFocus(); |
| } |
| } |
| } |
| } |
| |
| protected abstract void removeObject(EObject sel, EditingDomain editingDomain); |
| |
| @Override |
| public ImageDescriptor getImageDescriptor() { |
| return ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource(IEmfFormsImages.REMOVE_TOOLBAR_BUTTON)); |
| } |
| |
| } |