2014-01-21 3 views
0

Я разрабатываю плагин Eclipse, созданный вокруг новой перспективы, с редактором, который хранит фрагменты кода/комментария при их подсветке. К деталям к нему относятся: перспектива, редактор и мышь.IWorkbenchPart.openEditor() не открывается пользовательский редактор

У меня есть перспектива и вы можете ее открыть. Однако у меня есть код класса редактора, но при программном открытии редактора с помощью IWorkbenchPart.openEditor() мой пользовательский редактор никак не инициализируется. Появляется только редактор Eclipse по умолчанию. Я могу сказать, потому что мои пользовательские события мыши не срабатывают.

В качестве ссылки я использовал vogella tutorial.

Почему метод моего редактора init() не вызван при открытии? Я могу сказать, что это не так, поскольку оператор печати в обоих init() и createPartControl() не выполнен.

В этой проблеме я нашел несколько обращений, но все они вращались вокруг обнаруженных сообщений об ошибках (не могу найти редактор, не найти файл, ...). Я не получаю сообщений об ошибках, просто неожиданное поведение. Поэтому эти статьи были бесполезны.

(я бы в идеале, как 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); 
      } 

    } 

} 

Editor: (Удалены другие основные редактор окурки (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

Вы зарегистрированы редактор в вашем plugin.xml ?

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

Кроме того, вы можете реализовать IEditorInput иметь конкретный вход для вашего редактора.

+0

Да, сэр, у меня есть. Для чего это стоит, я отредактирую с моим .xml, когда вернусь домой. Тем не менее, я почти уверен, что неправильно понимаю, что такое IEditorInput, - пример одного на vogella, кажется, ничего не делает, и дальнейшие исследования/пробная ошибка просто говорят мне, какой документ вы хотите открыть с помощью edtior? – unfuse

+0

Ввод редактора в качестве имени подразумевает ввод пользовательского ввода для вашего редактора. В методе «init» вы можете вводить ввод редактора в свою собственную реализацию, соответственно получать необходимые данные и обновлять редактор. Например, вы можете предоставить некоторый идентификатор пользователя во входном редакторе, затем в процессе инициализации получить его, загрузить пользователя из БД этим идентификатором и показать информацию о конкретном пользователе в редакторе. Кроме того, вход редактора используется для восстановления редактора из memento (на основе информации о меморандуме вы можете создать ввод редактора). Но также проверьте plugin.xml, может быть, у вас где-то есть ошибка. –

+0

Я буду, хотя я уверен, что eclipse добавил .xml материал для меня автоматически, но больше на EditorInput - так как все, что я хочу сделать, это показать исходный текст в текущем файле, мне не нужно настраивать EditorInput , правильно? В противном случае, я мог бы попробовать еще раз с помощью Do not Nothing EditorInput. – unfuse

Смежные вопросы