package jqian.slicer.plugin.view;
import java.io.File;
import jqian.slicer.plugin.*;
import jqian.slicer.view.global.*;
import jqian.slicer.view.local.*;
import org.eclipse.ui.*;
import org.eclipse.ui.part.*;
import org.eclipse.ui.texteditor.ITextEditor;
import org.eclipse.jface.viewers.*;
import org.eclipse.jface.action.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.core.resources.*;
/**
*
*/
public class PluginSliceViewer extends ViewPart {
private SliceViewer viewer;
private ISliceDistribution _distribution;
private IProject _project;
private Action action1;
private Action doubleClickAction;
/**
* The constructor.
*/
public PluginSliceViewer() {
}
public void setProject(IProject project,ISliceDistribution distribution){
if(!project.equals(this._project) || !_distribution.equals(distribution)){
this._project = project;
this._distribution = distribution;
String path = project.getLocation().toString();
File file = new File(path);
viewer.setProject(file,distribution);
}
}
/**
* This is a callback that will allow us
* to create the viewer and initialize it.
*/
public void createPartControl(Composite parent) {
viewer = new SliceViewer(parent);
makeActions();
hookContextMenu();
contributeToActionBars();
}
private void hookContextMenu() {
MenuManager menuMgr = new MenuManager("#PopupMenu");
menuMgr.setRemoveAllWhenShown(true);
menuMgr.addMenuListener(new IMenuListener() {
public void menuAboutToShow(IMenuManager manager) {
PluginSliceViewer.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());
}
private void fillContextMenu(IMenuManager manager) {
manager.add(action1);
manager.add(new Separator());
// 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(new Separator());
}
private void makeActions() {
action1 = new Action() {
public void run() {
ISelection selection = viewer.getSelection();
Object obj = ((IStructuredSelection) selection).getFirstElement();
if(obj instanceof File){
File file = (File)obj;
if(!file.isDirectory()){
onOpenFileView(file);
}
}
}
};
action1.setText("Show Slice In Editor");
action1.setToolTipText("Show slice in a Java editor by highlighting covered lines");
action1.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();
if(obj instanceof File){
File file = (File)obj;
if(!file.isDirectory()){
onOpenFileView(file);
}
}
}
};
viewer.addDoubleClickListener(new IDoubleClickListener() {
public void doubleClick(DoubleClickEvent event) {
doubleClickAction.run();
}
});
}
private void onOpenFileView(File file) {
try {
IFile ifile = WorkbenchHelper.getIFile(_project,file);
IWorkbenchPage page = WorkbenchHelper.openViewPage(ID.JDT_VIEW_ID);
IEditorInput input = new FileEditorInput(ifile);
IEditorPart view = page.openEditor(input, ID.JDT_VIEW_ID, true);
ITextEditor editor = (ITextEditor)view;
HighLighter.resetHighlights(editor,_distribution.getLines(file));
} catch (Exception e) {
e.printStackTrace();
}
}
public static void showSliceInCurrentEditor(ISliceDistribution distribution){
try {
IFile ifile = WorkbenchHelper.getCurrentFile();
IWorkbenchPage page = WorkbenchHelper.openViewPage(ID.JDT_VIEW_ID);
IEditorInput input = new FileEditorInput(ifile);
IEditorPart view = page.openEditor(input, ID.JDT_VIEW_ID, true);
ITextEditor editor = (ITextEditor)view;
HighLighter.resetHighlights(editor,distribution.getLines(ifile));
}
catch (Exception e) {
e.printStackTrace();
}
}
/**
* Passing the focus request to the viewer's control.
*/
public void setFocus() {
viewer.getControl().setFocus();
}
}