我需要为使用 GMF 创建的编辑器自定义生成的代码。例如,我需要在编辑器中选择一个节点时添加一个弹出框,我还需要在用作编辑器画布的空白处添加文本。我了解这些编辑需要手动完成。有人可以告诉我如何做上述事情吗?或者可能指向我扩展 GMF 编辑器和自定义它们的资源?
2 回答
有几个选项可以在选择或悬停时提供弹出窗口。不知道你在空白处的文字是什么意思......也许你可以澄清一下。启用弹出栏的最简单方法是在您希望弹出栏出现的编辑部件上安装 org.eclipse.gmf.runtime.diagram.ui.editpolicies.PopupbarEditPolicy。当您的鼠标光标进入一个图形并且鼠标在图形内保持空闲一秒钟或类似的时间时,此编辑策略会显示一个弹出栏。认为它会在选择形状时出现。请使用 GMF 运行时逻辑示例图编辑器来了解我在说什么。您可以根据自己的喜好定制此编辑策略,然后通过 #createDefaultEditPolicies() 方法安装在适用的编辑部分上。以下是示例:
installEditPolicy(EditPolicyRoles.POPUPBAR_ROLE, new PopupBarEditPolicy());
请参阅 org.eclipse.gmf.runtime.emf.ui.modelingAssistantProviders 以向弹出栏提供操作。(例如 org.eclipse.gmf.examples.runtime.diagram.logic/plugin.xml)
如果这太复杂,请尝试继承 ShapeResizableEditPolicy 并覆盖 showSelection() 和 hideSelection() 方法以严格添加弹出窗口以供选择。复杂之处在于,它可能需要覆盖 SelectionEditPolicy 的其他子类,具体取决于在 EditPolicy.PRIMARY_DRAG_ROLE 下安装的内容,并且还要注意添加弹出图形的图形图层。
此外,您可以将 SelectionListener 添加到 GraphicalViewer,然后尝试根据所选内容添加/删除弹出图,但我不推荐此解决方案。
希望这可以帮助。
我很惊讶 GMF 生成的编辑器默认情况下没有为您显示弹出栏。也许它只是被禁用了。在 org.eclipse.gmf.runtime.diagram.ui.editpolicies.DiagramAssistantEditPolicy#shouldShowDiagramAssistant() 中放置一个断点。首先检查你是否停在那里,如果你确实检查了为什么返回 false,请检查 #isPreferenceOn() 是否特别返回 false。如果首选项设置关闭,则修复弹出栏只是设置首选项的问题。
我建议您开始阅读 GEF。GEF 是 Eclipse 的图形编辑框架。GMF 基于 GEF。GEF 架构是模型 - 视图 - 控制器。在 Java 中查看地图实现了 IFigure。控制器实现 EditPart 接口模型在 GEF 中保持打开状态。GMF 需要 EMF 模型(EMF 是 Eclipse 建模框架)并在运行时工具组件之上添加以生成代码。
我建议您开始阅读有关 GEF 的文章,其中一些文章是关于具有 EMF 模型(实际上是 GMF)的 GEF 编辑器。文章链接:https ://www.eclipse.org/gef/reference/articles.html
对于您想要的员工,您需要从 GEF 的 MVC 架构中修改控制器。查找以 EditPart 结尾的类。EditPolicies 是负责对图表上的形状进行编辑功能的工件。EditPolicies 安装在 editparts 上。
希望这可以帮助。