谢谢,我已经研究了 AbstractTextEditor 的实现。由于我只想在编辑器之间导航,而不是在编辑器内的不同位置之间导航,我发现最简单的实现应该如下所示:
public class MyEditor extends EditorPart implements INavigationLocationProvider {
public static final String ID = "MyEditor";
...
@Override
public INavigationLocation createEmptyNavigationLocation() {
return new MyNavigationLocation( this );
}
@Override
public INavigationLocation createNavigationLocation() {
return new MyNavigationLocation( this );
}
}
public class MyNavigationLocation extends NavigationLocation {
public MyNavigationLocation( IEditorPart part ) {
super( part );
}
@Override
public boolean mergeInto( INavigationLocation location ) {
return false;
}
@Override
public void restoreLocation() {
}
@Override
public void restoreState( IMemento memento ) {
}
@Override
public void saveState( IMemento memento ) {
}
@Override
public void update() {
}
}
我的问题是它仍然不起作用。我预计失败一定在其他地方。也许我在 Eclipse 命令配置中遗漏了一些东西。有任何想法吗?
编辑:
问题在于 NavigationHistory 类的 markLocation() 方法。它调用私有方法 addEntry()。在我的例子中,私有变量 ignoreEntries 设置为 1。这就是为什么我不能在历史记录中标记位置。不幸的是,我还没有弄清楚,为什么 ignoreEntries 设置为 1。Eclipse 文档对此只字未提:
http ://help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.platform.doc .isv%2Freference%2Fapi%2Forg%2Feclipse%2Fui%2FINavigationHistory.html
/*
* Adds a location to the history.
*/
private void addEntry(IEditorPart part) {
if (ignoreEntries > 0 || part == null) {
return;
}
...
}
第二次编辑:
我发现每次打开一个新编辑器时,都会通过 NavigationHistory 的 markEditor() 方法添加一个历史条目。标记在显示线程中完成,在标记过程完成之前您无法添加更多标记。如果要在打开编辑器后直接标记位置,则必须在显示线程中调用 markLocation()。尽管如此,我的问题仍然存在。NavigationHistory 中的后退和前进 NavigationHistoryAction 为空。这就是为什么我的 UI 图标一直显示为灰色的原因。有人可以将指定导航命令的 plugin.xml 部分发送给我吗?然后我可以将它与我的配置进行比较。