0

我正在开发基于GEF(图形编辑框架)并使用 Eclipse 属性视图的编辑器。我的问题是当我在这个视图中更改一个属性时,编辑器不知道这个更改并且不建议我保存。我怎样才能解决这个问题?

4

1 回答 1

0

当您在编辑器的命令堆栈之外执行编辑时,通常会发生这种情况。实际上,脏标志(您提到的保存建议)由org.eclipse.gef.commands.CommandStack绑定到它自己的 GEF 图形编辑器控制。

假设您通过扩展 来实现属性表编辑器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.CommandCommandStack

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,该工具绑定到原始编辑器并将其标记为污垢。

于 2013-07-24T14:23:22.600 回答