【问题标题】:GEF editor and Tabbed Property ViewGEF 编辑器和选项卡式属性视图
【发布时间】:2013-07-24 22:23:22
【问题描述】:

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

【问题讨论】:

  • 您可以使用其他编辑器手动编辑文件吗?检查权限以查看您是否可以编辑文件并使用其他编辑器保存。可能是权限问题。
  • 实际上,当我在属性视图中编辑属性时,我的模型会意识到更改。例如,可以编辑组件的名称,但编辑器不建议我保存。
  • 你真的在编写编辑器吗?当更改不是来自属性视图时,编辑器是否允许您保存?

标签: java eclipse-gef


【解决方案1】:

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

假设您通过扩展AdvancedPropertySection 来实现属性表编辑器,您必须从IWorkbenchPart 获取CommandStack 适配器并将其保存以供以后使用:

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),您必须通过在保存的CommandStack 上执行org.eclipse.gef.commands.Command 来执行模型更改:

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 执行模型修改,它绑定到原始编辑器并将其标记为污垢。

【讨论】:

  • 不客气!如果你觉得答案有用,你能把它标记为正确吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-21
  • 2018-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多