【问题标题】:GMF - Compartment expand/collapse programmaticallyGMF - 以编程方式展开/折叠隔间
【发布时间】:2014-12-18 22:59:05
【问题描述】:

我有一个名为 EntitiesContainer 的类,它包含多个隔间。

我所做的基本上是,当您右键单击隔间或隔间名称以通过应用于隔间XEditpart 和隔间XNameEditpart 的双击侦听器来侦听此事件。

现在,我想通过双击来实现类似扩展或折叠此隔间的功能,但我还没有找到任何方法来做到这一点。如何通过此隔间的 EditPart 接近它?

当一个隔间打开时是否可以关闭所有其他隔间,如果是这样,这必须通过 AddSemanticListeners-listenerFilters 来完成?

任何线索将不胜感激。

【问题讨论】:

    标签: java eclipse-plugin modeling eclipse-gmf


    【解决方案1】:

    要展开/折叠隔离区,您需要创建 ChangePropertyValueRequest,从隔离区编辑部分获取该请求的命令,然后在命令堆栈上执行该命令(展开是布尔值):

        ChangePropertyValueRequest request = new ChangePropertyValueRequest(
        DiagramUIMessages.PropertyDescriptorFactory_CollapseCompartment,
        Properties.ID_COLLAPSED, expand);
            getDomain().getCommandStack().execute(command);
    

    是的,您还可以打开/关闭其他隔间购买创建相同的请求并为兄弟隔间编辑部分创建额外的命令(如上所示)。唯一的复杂之处是您必须在editparts 树中找到那些同级隔间editoarts。 此外,一旦您有许多这样的命令,将它们包装在 GEF 的 CompoundCommand 或 GMF 的 CompositeCommand 中,以便将许多命令作为一个命令执行,并且撤消/重做操作将正确处理这种情况。 (看看 org.eclipse.gmf.runtime.diagram.ui.internal.tools.CompartmentCollapseTracker)

    【讨论】:

    • 感谢回复,changePropertyValueRequest应该在哪里创建呢?我的听众在编辑部分。这也是您所指的命令吗? final Command cmd = myEditPart.getCommand(req); cmd.execute();
    • 您可以在任何您认为合适的地方创建请求 - 对此没有任何限制。我想有点棘手的部分是找到正确的编辑部分来获取命令。您可以通过 cmd.execute() 执行该命令,但它不太可能在 EMF 事务中执行。我建议获取对 CommandStack 的引用并从中执行命令。
    • 谢谢,我设法通过从我的 xxxEditPart 和 xxxNameEditPart(在双击侦听器内)调用我创建的名为 collapseCompartment 的 xxxCompartmentEditPart 方法来实现它,该方法接受一个布尔值。方法本身是public void collapseCompartment(booelan collapse) { ChangePropertyValueRequest request = new ChangePropertyValueRequest( DiagramUIMessages.PropertyDescriptorFactory_CollapseCompartment, Properties.ID_COLLAPSED, collapse); getEditDomain().getCommandStack().execute(getCommand(request)); } 我接受你的回答作为解决方案。
    猜你喜欢
    • 2012-07-01
    • 2015-08-19
    • 2017-05-07
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    • 2018-06-17
    • 2019-11-11
    • 1970-01-01
    相关资源
    最近更新 更多