Я разрабатываю плагин 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();
}
}
Да, сэр, у меня есть. Для чего это стоит, я отредактирую с моим .xml, когда вернусь домой. Тем не менее, я почти уверен, что неправильно понимаю, что такое IEditorInput, - пример одного на vogella, кажется, ничего не делает, и дальнейшие исследования/пробная ошибка просто говорят мне, какой документ вы хотите открыть с помощью edtior? – unfuse
Ввод редактора в качестве имени подразумевает ввод пользовательского ввода для вашего редактора. В методе «init» вы можете вводить ввод редактора в свою собственную реализацию, соответственно получать необходимые данные и обновлять редактор. Например, вы можете предоставить некоторый идентификатор пользователя во входном редакторе, затем в процессе инициализации получить его, загрузить пользователя из БД этим идентификатором и показать информацию о конкретном пользователе в редакторе. Кроме того, вход редактора используется для восстановления редактора из memento (на основе информации о меморандуме вы можете создать ввод редактора). Но также проверьте plugin.xml, может быть, у вас где-то есть ошибка. –
Я буду, хотя я уверен, что eclipse добавил .xml материал для меня автоматически, но больше на EditorInput - так как все, что я хочу сделать, это показать исходный текст в текущем файле, мне не нужно настраивать EditorInput , правильно? В противном случае, я мог бы попробовать еще раз с помощью Do not Nothing EditorInput. – unfuse