我想在我的编辑器的画布顶部添加一个标题,这是我在 Eclipse 中使用 GMF 生成的。有人可以指导我需要对生成的代码进行哪些更改以实现这一目标吗?谢谢
2 回答
使用 SWT 控件而不是 GEF/GMF 构造添加标题。
在 GEF 的包 org.eclipse.gef.ui.parts 中查看类: GraphicalEditor(没有调色板,只有图表查看器) GraphicalEditorWithPalette(图表查看器 + 调色板,借助 SWT 拆分器) GraphicalEditorWithFlyoutPalette(与上面相同,具有隐藏调色板的能力)
请注意调色板是如何添加到编辑器中的。需要做类似的事情来显示标题。
我的建议是子类 GraphicalEditorWithFlyoutPalette,覆盖 #createPartControl(...) 方法来安排图表图形查看器、调色板查看器和标题查看器。TitleViewer 可以是 DiagramGraphicalViewer 的子类,它只显示一个编辑部分——图表,其中的图形是一个标签。或者,您可以只使用 SWT Label 而不是 TitleViewer(您需要自己创建)。在这种情况下,您必须提供模型侦听逻辑以更新标签的文本以进行模型更改(如果适用)。
下面是为 GEF 的逻辑示例编辑器在图形查看器顶部添加 SWT 标签的代码片段。Yopu 可以轻松地为 GMF 编辑器做同样的事情,因为 GMF 的 DiagramEditor 是基于 GEF 的 LogicEditor 创建的。
我在 GEF 的 LogicEditor 中修改了以下方法:
private Composite graphicalControl;
/*
* (non-Javadoc)
*
* @see
* org.eclipse.gef.ui.parts.GraphicalEditor#createGraphicalViewer(org.eclipse
* .swt.widgets.Composite)
*/
protected void createGraphicalViewer(Composite parent) {
graphicalControl = new Composite(parent, SWT.None);
graphicalControl.setLayout(new GridLayout());
Label label = new Label(graphicalControl, SWT.None);
label.setText("MY DIAGRAM NAME!!!");
label.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
rulerComp = new RulerComposite(graphicalControl, SWT.NONE);
super.createGraphicalViewer(rulerComp);
rulerComp
.setGraphicalViewer((ScrollingGraphicalViewer) getGraphicalViewer());
rulerComp.setLayoutData(new GridData(GridData.FILL_BOTH));
}
protected Control getGraphicalControl() {
return graphicalControl;
}
除了该更改之外,我还删除了 LogicEditor 中这些方法的先前实现,并用 LogicEditor#configureGraphicalViewer() 方法的 ruleComp 替换了对 getGraphicalControl() 的调用(最后添加了 2 个 SWT 侦听器)
结果在下面的屏幕截图中。