0

我想在我的编辑器的画布顶部添加一个标题,这是我在 Eclipse 中使用 GMF 生成的。有人可以指导我需要对生成的代码进行哪些更改以实现这一目标吗?谢谢

4

2 回答 2

0

使用 SWT 控件而不是 GEF/GMF 构造添加标题。

在 GEF 的包 org.eclipse.gef.ui.parts 中查看类: GraphicalEditor(没有调色板,只有图表查看器) GraphicalEditorWithPalette(图表查看器 + 调色板,借助 SWT 拆分器) GraphicalEditorWithFlyoutPalette(与上面相同,具有隐藏调色板的能力)

请注意调色板是如何添加到编辑器中的。需要做类似的事情来显示标题。

我的建议是子类 GraphicalEditorWithFlyoutPalette,覆盖 #createPartControl(...) 方法来安排图表图形查看器、调色板查看器和标题查看器。TitleViewer 可以是 DiagramGraphicalViewer 的子类,它只显示一个编辑部分——图表,其中的图形是一个标签。或者,您可以只使用 SWT Label 而不是 TitleViewer(您需要自己创建)。在这种情况下,您必须提供模型侦听逻辑以更新标签的文本以进行模型更改(如果适用)。

于 2014-07-02T22:56:38.847 回答
0

下面是为 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 侦听器)

结果在下面的屏幕截图中。

在此处输入图像描述

于 2014-07-05T17:51:31.893 回答