| package org.eclipse.uomo.examples.units.pluginsample.views; |
| |
| import static org.eclipse.uomo.units.SI.*; |
| import static org.eclipse.uomo.units.impl.system.USCustomary.LITER; |
| |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.ui.part.*; |
| import org.eclipse.jface.viewers.*; |
| import org.eclipse.swt.graphics.Image; |
| import org.eclipse.jface.action.*; |
| import org.eclipse.jface.dialogs.MessageDialog; |
| import org.eclipse.ui.*; |
| import org.eclipse.swt.widgets.Menu; |
| import org.eclipse.swt.SWT; |
| |
| import org.eclipse.uomo.units.impl.quantity.*; |
| |
| /** |
| * This sample class demonstrates how to plug-in a new |
| * workbench view. The view shows data obtained from the |
| * model. The sample creates a dummy model on the fly, |
| * but a real implementation would connect to the model |
| * available either in this or another plug-in (e.g. the workspace). |
| * The view is connected to the model using a content provider. |
| * <p> |
| * The view uses a label provider to define how model |
| * objects should be presented in the view. Each |
| * view can present the same model objects using |
| * different labels and icons, if needed. Alternatively, |
| * a single label provider can be shared between views |
| * in order to ensure that objects of the same type are |
| * presented in the same way everywhere. |
| * <p> |
| */ |
| |
| public class SampleView extends ViewPart { |
| |
| /** |
| * The ID of the view as specified by the extension. |
| */ |
| public static final String ID = "uomopluginsample.views.SampleView"; |
| |
| private TableViewer viewer; |
| private Action action1; |
| private Action action2; |
| private Action doubleClickAction; |
| private final LengthAmount length; |
| private final MassAmount mass; |
| private final VolumeAmount volume; |
| |
| /* |
| * The content provider class is responsible for |
| * providing objects to the view. It can wrap |
| * existing objects in adapters or simply return |
| * objects as-is. These objects may be sensitive |
| * to the current input of the view, or ignore |
| * it and always show the same content |
| * (like Task List, for example). |
| */ |
| |
| class ViewContentProvider implements IStructuredContentProvider { |
| public void inputChanged(Viewer v, Object oldInput, Object newInput) { |
| } |
| public void dispose() { |
| } |
| public Object[] getElements(Object parent) { |
| return new Object[] { length, mass, volume }; |
| } |
| } |
| 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); |
| } |
| } |
| class NameSorter extends ViewerSorter { |
| } |
| |
| /** |
| * The constructor. |
| */ |
| public SampleView() { |
| length = new LengthAmount(1,METRE); |
| mass = new MassAmount(2, KILOGRAM); |
| volume = new VolumeAmount(3, LITER); |
| } |
| |
| /** |
| * 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 ViewContentProvider()); |
| viewer.setLabelProvider(new ViewLabelProvider()); |
| viewer.setSorter(new NameSorter()); |
| viewer.setInput(getViewSite()); |
| |
| // Create the help context id for the viewer's control |
| PlatformUI.getWorkbench().getHelpSystem().setHelp(viewer.getControl(), "UOMoPluginSample.viewer"); |
| makeActions(); |
| hookContextMenu(); |
| hookDoubleClickAction(); |
| contributeToActionBars(); |
| } |
| |
| private void hookContextMenu() { |
| MenuManager menuMgr = new MenuManager("#PopupMenu"); |
| menuMgr.setRemoveAllWhenShown(true); |
| menuMgr.addMenuListener(new IMenuListener() { |
| public void menuAboutToShow(IMenuManager manager) { |
| SampleView.this.fillContextMenu(manager); |
| } |
| }); |
| Menu menu = menuMgr.createContextMenu(viewer.getControl()); |
| viewer.getControl().setMenu(menu); |
| getSite().registerContextMenu(menuMgr, viewer); |
| } |
| |
| private void contributeToActionBars() { |
| IActionBars bars = getViewSite().getActionBars(); |
| fillLocalPullDown(bars.getMenuManager()); |
| fillLocalToolBar(bars.getToolBarManager()); |
| } |
| |
| private void fillLocalPullDown(IMenuManager manager) { |
| manager.add(action1); |
| manager.add(new Separator()); |
| manager.add(action2); |
| } |
| |
| private void fillContextMenu(IMenuManager manager) { |
| manager.add(action1); |
| manager.add(action2); |
| // Other plug-ins can contribute there actions here |
| manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); |
| } |
| |
| private void fillLocalToolBar(IToolBarManager manager) { |
| manager.add(action1); |
| manager.add(action2); |
| } |
| |
| private void makeActions() { |
| action1 = new Action() { |
| public void run() { |
| showMessage("Action 1 executed"); |
| } |
| }; |
| action1.setText("Action 1"); |
| action1.setToolTipText("Action 1 tooltip"); |
| action1.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages(). |
| getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK)); |
| |
| action2 = new Action() { |
| public void run() { |
| showMessage("Action 2 executed"); |
| } |
| }; |
| action2.setText("Action 2"); |
| action2.setToolTipText("Action 2 tooltip"); |
| action2.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages(). |
| getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK)); |
| doubleClickAction = new Action() { |
| public void run() { |
| ISelection selection = viewer.getSelection(); |
| Object obj = ((IStructuredSelection)selection).getFirstElement(); |
| showMessage("Double-click detected on "+obj.toString()); |
| } |
| }; |
| } |
| |
| private void hookDoubleClickAction() { |
| viewer.addDoubleClickListener(new IDoubleClickListener() { |
| public void doubleClick(DoubleClickEvent event) { |
| doubleClickAction.run(); |
| } |
| }); |
| } |
| private void showMessage(String message) { |
| MessageDialog.openInformation( |
| viewer.getControl().getShell(), |
| "Sample View", |
| message); |
| } |
| |
| /** |
| * Passing the focus request to the viewer's control. |
| */ |
| public void setFocus() { |
| viewer.getControl().setFocus(); |
| } |
| } |