Java 在Eclipse AbstractTextEditor中使用其他可保存项
我有一个扩展AbstractTextEditor的文本编辑器,我还有一个大纲,当用户修改它的内容时需要保存它。我目前正在使用添加到编辑器中的Java 在Eclipse AbstractTextEditor中使用其他可保存项,java,eclipse,eclipse-plugin,eclipse-rcp,Java,Eclipse,Eclipse Plugin,Eclipse Rcp,我有一个扩展AbstractTextEditor的文本编辑器,我还有一个大纲,当用户修改它的内容时需要保存它。我目前正在使用添加到编辑器中的可保存的 如果编辑器被标记为“脏”并保存,则可保存的也会保存。但是,如果可保存的状态更改为“dirty”,则文件名旁边的*不会出现。顶部菜单栏中的save按钮确实显示出来,但当我单击它时,什么也没有发生 这是我的实现: public class MyTextEditor extends AbstractTextEditor { ... pu
可保存的
如果编辑器被标记为“脏”并保存,则可保存的
也会保存。但是,如果可保存的状态更改为“dirty”,则文件名旁边的*不会出现。顶部菜单栏中的save按钮确实显示出来,但当我单击它时,什么也没有发生
这是我的实现:
public class MyTextEditor extends AbstractTextEditor {
...
public void setOutlineSaveable(Saveable saveable) {
this.outlineSaveable = saveable;
ISaveablesLifecycleListener lifecycleListener = (ISaveablesLifecycleListener)getSite().getService(ISaveablesLifecycleListener.class);
lifecycleListener.handleLifecycleEvent( new SaveablesLifecycleEvent(this, SaveablesLifecycleEvent.POST_OPEN, new Saveable[] {saveable}, false));
}
@Override
public Saveable[] getSaveables() {
if(outlineSaveable != null) {
// copy Saveables from super.getSaveables() to a new array
Saveable[] superSaveables = super.getSaveables();
Saveable[] res = new Saveable[superSaveables.length + 1];
int i = 0;
for(; i < superSaveables.length; i++) {
res[i] = superSaveables[i];
}
res[i] = outlineSaveable;
return res;
}
else
return super.getSaveables();
}
public void saveableDirty() {
firePropertyChange(PROP_DIRTY);
}
}
viewer
是显示在ContentOutlinePage
中的GraphicalViewer
然后在另一个班级的某个地方,我打电话:
textEditor.setSaveable(grOutlinePage.getSaveable());
您可能需要重写主编辑器isDirty()
方法,并测试每个Saveable
对象脏标记
似乎处理多个可保存项的工作没有像可能的那样干净。您可能需要覆盖编辑器isDirty()
方法,并测试所有可保存项是否脏。这解决了我的问题,请将其作为答案发布?(我认为使用可保存项可以避免重写isDirty的必要性)
textEditor.setSaveable(grOutlinePage.getSaveable());