IWorkbenchPart.openEditor()无法打开自定义编辑器

时间:2014-01-21 01:57:57

标签: eclipse-plugin

我正在设计一个围绕新视角设计的Eclipse插件,其中包含一个编辑器,用于在突出显示代码/注释片段时存储代码/注释片段。它的部分包括:透视图,编辑器和mouselistener。

我有透视,可以打开它。我已经构建了编辑器类代码,但是,通过IWorkbenchPart.openEditor()以编程方式打开编辑器我的自定义编辑器似乎没有以任何方式初始化。仅显示默认的Eclipse编辑器。我可以说,因为我的自定义鼠标事件不会触发。

我使用vogella tutorial作为参考。

为什么编辑器的init()方法在被打开时没有被调用?我可以告诉它不是因为init()createPartControl()中的print语句都没有执行。

在谷歌搜索这个问题,我发现了一些点击但他们都围绕着遇到的错误信息(无法找到编辑器,找不到文件,...)。我没有收到错误消息,只是意外的行为。所以那些文章没用。

(我理想情况下会喜欢TextViewer,因为我不希望他们在这种模式下编辑内容,但我决定从这里开始。)

以下代码。

视角:

import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IPageLayout;
import org.eclipse.ui.IPerspectiveFactory;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;

public class PluginPerspective implements IPerspectiveFactory {

    @Override
    public void createInitialLayout(IPageLayout layout) {
        layout.setEditorAreaVisible(true);
        layout.setFixed(true);

        IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
        IEditorInput iei = page.getActiveEditor().getEditorInput();
        try
        {
            // Open Editor code nabbed from Vogella tutorial. 
            // He creates an action to do so - I force it to happen when the 
            //   perspective is created.

            // I get the name of the current open file as expected.
            System.out.println(iei.getName());
            page.openEditor(iei, myplugin.PluginEditor.ID, true);
            // This message prints, as expected.
            System.out.println("open!");
        } catch (PartInitException e) {
            throw new RuntimeException(e);
          }

    }

}

编辑:(删除了其他基本编辑器存根(isDirty,doSave),因为它们不相关)

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.TextViewer;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.EditorPart;
import org.eclipse.ui.texteditor.ITextEditor;

public class PluginEditor extends EditorPart implements MouseListener {

    public static final String ID = "myplugin.plugineditor";

    @Override
    public void init(IEditorSite site, IEditorInput input)
            throws PartInitException {
        // TODO Auto-generated method stub

        System.out.println("editor init!");
        setSite(site);
        setInput(input);

    }

    @Override
    public void createPartControl(Composite parent) {
        // TODO Auto-generated method stub

        System.out.println("editor partcontrol!");
        //TextViewer tv = new TextViewer(parent, 0);

        //tv.setDocument(getCurrentDocument());
    }

    @Override
    public void mouseDoubleClick(MouseEvent e) {
        // TODO Auto-generated method stub
        // nothing?
    }

    @Override
    public void mouseDown(MouseEvent e) {
        // TODO Auto-generated method stub
        // grab start location?
        System.out.println("down!");
    }

    @Override
    public void mouseUp(MouseEvent e) {
        // TODO Auto-generated method stub
        // do stuff!
        System.out.println("up!");
    }

    // to be used for grabbing highlight-selection grabbing later
    public IDocument getCurrentDocument() {
        final IEditorPart editor = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage()
            .getActiveEditor();
        if (!(editor instanceof ITextEditor)) return null;
        ITextEditor ite = (ITextEditor)editor;
        IDocument doc = ite.getDocumentProvider().getDocument(ite.getEditorInput());
        return doc;
        //return doc.get();
    }

}

1 个答案:

答案 0 :(得分:1)

您是否在plugin.xml中注册了编辑器?

  <extension
         point="org.eclipse.ui.editors">
         <editor
               default="false"
               id="myplugin.plugineditor"
               name="name">
         </editor>
   </extension>

此外,您可能希望实现IEditorInput以获得编辑器的特定输入。