package info.limpet.rcp.data_provider;

import info.limpet.data.impl.samples.SampleData;
import info.limpet.rcp.data_provider.data.DataModel;

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;

/**
 * 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 DataProvider extends ViewPart
{

	/**
	 * The ID of the view as specified by the extension.
	 */
	public static final String ID = "info.limpet.rcp.DataProvider";

	private TreeViewer viewer;
	private Action action1;
	private Action action2;
	private Action doubleClickAction;



	/**
	 * The constructor.
	 */
	public DataProvider()
	{
	}

	/**
	 * This is a callback that will allow us to create the viewer and initialize
	 * it.
	 */
	public void createPartControl(Composite parent)
	{
		viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
		viewer.setContentProvider(new DataModel());
		viewer.setLabelProvider(new LimpetLabelProvider());
		viewer.setInput(new SampleData().getData());
		getSite().setSelectionProvider(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)
			{
				DataProvider.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(),
				"Analysis View", message);
	}

	/**
	 * Passing the focus request to the viewer's control.
	 */
	public void setFocus()
	{
		viewer.getControl().setFocus();
	}
}
@@ -159,59 +159,120 @@
 pse.
-swt.widgets.Composite;%0Aimport org.eclipse.ui.part.*
+jface.action.Action;%0Aimport org.eclipse.jface.action.IMenuListener;%0Aimport org.eclipse.jface.action.IMenuManager
 ;%0Aim
@@ -298,17 +298,30 @@
 ace.
-viewers.*
+action.IToolBarManager
 ;%0Aim
@@ -341,26 +341,32 @@
 pse.
-swt.graphics.Im
+jface.action.MenuMan
 age
+r
 ;%0Aim
@@ -395,17 +395,25 @@
 .action.
-*
+Separator
 ;%0Aimport
@@ -477,77 +477,537 @@
 pse.
-ui.*;%0Aimport org.eclipse.swt.widgets.Menu;%0Aimport org.eclipse.swt.SWT
+jface.viewers.DoubleClickEvent;%0Aimport org.eclipse.jface.viewers.IDoubleClickListener;%0Aimport org.eclipse.jface.viewers.ISelection;%0Aimport org.eclipse.jface.viewers.IStructuredSelection;%0Aimport org.eclipse.jface.viewers.TreeViewer;%0Aimport org.eclipse.swt.SWT;%0Aimport org.eclipse.swt.widgets.Composite;%0Aimport org.eclipse.swt.widgets.Menu;%0Aimport org.eclipse.ui.IActionBars;%0Aimport org.eclipse.ui.ISharedImages;%0Aimport org.eclipse.ui.IWorkbenchActionConstants;%0Aimport org.eclipse.ui.PlatformUI;%0Aimport org.eclipse.ui.part.ViewPart
 ;%0A%0A/

remove unused imports