/******************************************************************************* * * Copyright (c) 2012 Google, Inc. * 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: * Google, Inc. - initial API and implementation * *******************************************************************************/ package com.windowtester.example.contactmanager.rcp; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.window.IShellProvider; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Menu; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.ISharedImages; import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.actions.ActionFactory; import org.eclipse.ui.actions.ActionFactory.IWorkbenchAction; import org.eclipse.ui.dialogs.PropertyDialogAction; import org.eclipse.ui.part.ViewPart; import com.windowtester.example.contactmanager.rcp.action.CopyContactAction; import com.windowtester.example.contactmanager.rcp.action.CutContactAction; import com.windowtester.example.contactmanager.rcp.action.DeleteAction; import com.windowtester.example.contactmanager.rcp.action.NewContactAction; import com.windowtester.example.contactmanager.rcp.action.PasteContactAction; import com.windowtester.example.contactmanager.rcp.editor.ContactEditorInput; import com.windowtester.example.contactmanager.rcp.editor.ContactsEditor; import com.windowtester.example.contactmanager.rcp.model.Contact; import com.windowtester.example.contactmanager.rcp.model.ContactsManager; import com.windowtester.example.contactmanager.rcp.preferences.PreferenceConstants; public class View extends ViewPart { public static final String ID = "com.windowtester.example.contactmanager.rcp.view"; private TableViewer viewer; private CopyContactAction copyAction; private CutContactAction cutAction; private PasteContactAction pasteAction; private DeleteAction removeAction; private NewContactAction newContactAction; private IWorkbenchAction copyWAction; private IWorkbenchAction cutWAction; private IWorkbenchAction pasteWAction; private IWorkbenchAction deleteAction; private final IPropertyChangeListener propertyChangeListener = new IPropertyChangeListener(){ public void propertyChange(PropertyChangeEvent event){ if (event.getProperty().equals( PreferenceConstants.CONTACTS_DISPLAY_BY__FIRST_NAME)) viewer.refresh(); } }; class ViewLabelProvider extends LabelProvider implements ITableLabelProvider { public String getColumnText(Object obj, int index) { return getText(obj); } public Image getColumnImage(Object obj, int index) { return getImage(obj); } public Image getImage(Object obj) { return PlatformUI.getWorkbench().getSharedImages().getImage( ISharedImages.IMG_OBJ_ELEMENT); } } public View(){ }; /** * This is a callback that will allow us to create the viewer and initialize * it. */ public void createPartControl(Composite parent) { viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); viewer.setContentProvider(new ContactsViewContentProvider()); viewer.setLabelProvider(new ViewLabelProvider()); viewer.setInput(ContactsManager.getManager()); getSite().setSelectionProvider(viewer); viewer.addDoubleClickListener(new IDoubleClickListener(){ public void doubleClick(org.eclipse.jface.viewers.DoubleClickEvent event){ try { Contact c = null; try { c = (Contact)((StructuredSelection)event.getSelection()).getFirstElement(); } catch(Exception e){ e.printStackTrace(); c = null; } IEditorInput input = new ContactEditorInput(c); getViewSite().getWorkbenchWindow().getActivePage().openEditor(input,ContactsEditor.ID); }catch (Throwable e){ e.printStackTrace(); } } }); createActions(); createContextMenu(); hookGlobalActions(); ContactManagerRCPPlugin .getDefault() .getPreferenceStore() .addPropertyChangeListener(propertyChangeListener); } /** * Create the actions for the view */ private void createActions(){ copyAction = new CopyContactAction(this,"Copy"); removeAction = new DeleteAction(getSite().getWorkbenchWindow(),"Delete"); cutAction = new CutContactAction(copyAction,removeAction,"Cut"); pasteAction = new PasteContactAction(this,"Paste"); newContactAction = new NewContactAction( getSite().getWorkbenchWindow(),"New Contact..."); copyWAction = ActionFactory.COPY.create(getSite().getWorkbenchWindow()); cutWAction = ActionFactory.CUT.create(getSite().getWorkbenchWindow()); pasteWAction = ActionFactory.PASTE.create(getSite().getWorkbenchWindow()); deleteAction = ActionFactory.DELETE.create(getSite().getWorkbenchWindow()); } /*** * */ private void createContextMenu(){ MenuManager menuMgr = new MenuManager("#PopupMenu"); menuMgr.setRemoveAllWhenShown(true); menuMgr.addMenuListener(new IMenuListener(){ public void menuAboutToShow(IMenuManager m){ View.this.fillContextMenu(m); } }); Menu menu = menuMgr.createContextMenu(viewer.getControl()); viewer.getControl().setMenu(menu); getSite().registerContextMenu(menuMgr,viewer); } private void fillContextMenu(IMenuManager menuMgr){ menuMgr.add( new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); menuMgr.add(new Separator()); menuMgr.add(newContactAction); menuMgr.add(new Separator()); menuMgr.add(cutWAction); menuMgr.add(copyWAction); menuMgr.add(pasteWAction); menuMgr.add(new Separator()); menuMgr.add(deleteAction); menuMgr.add(new Separator()); menuMgr.add( new PropertyDialogAction( (IShellProvider)this.getViewSite(),viewer)); } /** * hook the global cut, copy etc */ protected void hookGlobalActions(){ getViewSite().getActionBars().setGlobalActionHandler( ActionFactory.DELETE.getId(), removeAction); getViewSite().getActionBars().setGlobalActionHandler( ActionFactory.COPY.getId(),copyAction); getViewSite().getActionBars().setGlobalActionHandler( ActionFactory.CUT.getId(),cutAction); getViewSite().getActionBars().setGlobalActionHandler( ActionFactory.PASTE.getId(),pasteAction); } /** * Passing the focus request to the viewer's control. */ public void setFocus() { viewer.getControl().setFocus(); } }