我正在使用基于 GEF (图形编辑框架)的编辑器并使用Eclipse属性视图。我的问题是,当我在此视图中更改属性时,编辑器不知道此更改并且不建议我保存。 我该如何解决这个问题?
答案 0 :(得分:0)
当您在编辑器的命令堆栈外执行编辑时,通常会发生这种情况。实际上,脏标志(您引用的保存建议)由绑定到它自己的GEF图形编辑器的org.eclipse.gef.commands.CommandStack
控制。
假设您通过扩展AdvancedPropertySection
来实现属性表编辑器,则必须从CommandStack
获取IWorkbenchPart
适配器并保存以供以后使用:
public class GEFAdvancedPropertySection extends AdvancedPropertySection {
public void setInput(IWorkbenchPart part, ISelection selection) {
CommandStack commandStack = (CommandStack) part.getAdapter(CommandStack.class);
if (cs != null)
page.setRootEntry(new GEFPropertySheetEntry(commandStack));
super.setInput(part, selection);
}
}
在PropertySheetEntry
实施中(实际上是上例中的GEFPropertySheetEntry
),您必须通过在保存的org.eclipse.gef.commands.Command
上执行CommandStack
来执行模型更改:< / p>
public class GEFPropertySheetEntry extends PropertySheetEntry {
protected CommandStack commandStack;
public GEFPropertySheetEntry(CommandStack commandStack) {
this.commandStack = commandStack;
}
protected void valueChanged(PropertySheetEntry entry) {
GEFCommand command = new GEFCommand();
// here you have to configure the command
// such that it can perform
// the expected model modifications
commandStack.execute(command);
}
}
使用特定的GEFCommand
完成诀窍,CommandStack
通过{{1}}执行模型修改,{{1}}绑定到原始编辑器并将其标记为污垢。