1. 打开编辑器的Command
Code
public class OpenProject extends AbstractHandler {
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
StructuredSelection selection = (StructuredSelection)HandlerUtil.getCurrentSelection(event);
if(selection.isEmpty()) return null;
try {
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage()
.openEditor(new ProjectInput((LazyDTO)selection.getFirstElement()), "com.sg.intellifmea.editor.ProjectEditor");//"DTOEditor");//
} catch (PartInitException e) {
e.printStackTrace();
}
return null;
}
} 2. 做一个editorinput,首先不考虑如何持久化
Code
package com.sg.intellifmea.editor;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IPersistableElement;
import com.sg.hyperobject.datamanager.dt.LazyDTO;
public class ProjectInput implements IEditorInput {
private LazyDTO data;
public ProjectInput(LazyDTO data) {
this.data = data;
}
@Override
public boolean exists() {
return false;
}
@Override
public ImageDescriptor getImageDescriptor() {
return data.getImageDescriptor();
}
@Override
public String getName() {
return data.getDTObject().getLabel();
}
@Override
public IPersistableElement getPersistable() {
return null;
}
@Override
public String getToolTipText() {
return data.getDTObject().getDescription();
}
@Override
public Object getAdapter(Class adapter) {
return null;
}
public LazyDTO getData() {
return data;
}
}
3. 做一个Editor,直接用FormEditor
Code
package com.sg.intellifmea.editor;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.forms.editor.FormEditor;
public class ProjectEditor extends FormEditor{
@Override
public void init(IEditorSite site, IEditorInput input)
throws PartInitException {
setPartName(input.getName());
super.init(site, input);
}
@Override
protected void addPages() {
try {
addPage(new PlanPage(this));
addPage(new DocumentPage(this));
} catch (PartInitException e) {
e.printStackTrace();
}
}
@Override
public void doSave(IProgressMonitor monitor) {
// TODO Auto-generated method stub
}
@Override
public void doSaveAs() {
// TODO Auto-generated method stub
}
@Override
public boolean isSaveAsAllowed() {
// TODO Auto-generated method stub
return false;
}
}
tips:FormEditor在init方法中是不会读取IEditorInput的getName()以及getImage()方法来设置编辑器的Title和图标的。不知道为什么?需要override init方法,显式地加上setPartName(input.getName());才可以。
打开看看效果:
补充一点,编辑器是需要在Plugins.xml中扩展的。并且需要依赖 ui.editors的插件以及ui.views的插件