文档章节

GEF插件开发(三,主视图图形添加)

laz
 laz
发布于 2016/08/10 20:25
字数 871
阅读 17
收藏 0

本章节在上一章节基础上,实现编辑器界面主面板图形的绘画,在主视图左上角显示帮助图表,并提示帮助信息,通过此章节能够了解GEF基本模型(Model)、控制器(EditPart)、视图(View)三者之间的联系。
1.    建立根模型RootModel,跟模型用来存放主画布信息及子模型信息,初始根模型为空。后续完善。
整体包目录结构如下:

 
根模型代码如下:

public class RootModel {
}


2.    初始编辑器信息
在编辑器类initializeGraphicalViewe()中根据文件信息转换为模型信息,如果文件信息为空或者读取失败,就初始化空模型,并设置视图内容为模型信息。代码如下:

protected void initializeGraphicalViewer() {
        // 得到编辑器主画布
        GraphicalViewer viewer = getGraphicalViewer();
        //得到文件信息
        IFile file = ((IFileEditorInput) getEditorInput()).getFile();
        RootModel root = null;
        if (file.exists()) {
            try {
                //TODO 读取文件信息转换为RootModel
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
        //读取文件失败或者文件信息为空,初始化模型信息
        if (root == null) {
            root = createInitializeModel();
        }
        //设置主视图模型信息
        viewer.setContents(root);
    }

/**
     * 创建初始化模型信息
     * @return
     */
    private RootModel createInitializeModel() {
        RootModel root = new RootModel();
        return root;
    }


3.    配置编辑器视图
在编辑器类中的configureGraphicalViewer()方法中配置视图控制器工厂(用来对模型与相应控制器进行对应),并设置视图跟控制器(此控制器用来找到通过树状结构关联其他控制器)。代码如下:

/**
     * 配置编辑器信息
     */
    @Override
    protected void configureGraphicalViewer() {
        super.configureGraphicalViewer();
        GraphicalViewer viewer = getGraphicalViewer();
        //设置视图控制器工厂
        viewer.setEditPartFactory(createEditPartFactory());
        // 设置跟控制器
        ScalableRootEditPart rootEditPart = new ScalableRootEditPart();
        viewer.setRootEditPart(rootEditPart);
    }

/**
     * 创建编辑器工厂 映射-模型与控制器
     * 
     * @return
     */
    private EditPartFactory createEditPartFactory() {
        return new MyEditPartFactory();
    }


4.    控制器工厂配置:模型与对应控制器关联。

public class MyEditPartFactory implements EditPartFactory {

    @Override
    public EditPart createEditPart(EditPart context, Object model) {
        EditPart part = null;
        if (model instanceof RootModel) {
            part = new RootEditPart();
        }
        // 设控制器模型
        part.setModel(model);
        return part;
    }
}


5.    创建根控制器
根控制器用来关联根模型与主视图,通过根模型相关信息,显示主视图图形。根控制器需要实现AbstractGraphicalEditpart。

public class RootEditPart extends AbstractGraphicalEditPart{

    @Override
    protected IFigure createFigure() {
        RootFigure figure = new RootFigure();
        return figure;
    }

    @Override
    protected void createEditPolicies() {
        
    }

}


6.    创建主画布图形
主画布图形实现空白画布,并在左上角显示帮助信息。根图形实现Layer类,并在其添加子图形Label,在Label上添加编辑器帮助提示信息。代码如下:

public class RootFigure extends Layer{
    public RootFigure() {
        Image image = UserCaseChartPlugin.getImageDescriptor("/icons/help.png").createImage();
        Label help = new Label(image);
        help.setToolTip(showHelp());
        //XY布局 必须制定子图形大小与位置才能显示
        setLayoutManager(new XYLayout());
        //制定提示图形位置 大小(-1,-1)代表大小有内容决定
        add(help);
        setConstraint(help, new Rectangle(new Point(10,10), new Dimension(-1,-1)));
    }

    private IFigure showHelp() {
        Label tip = new Label();
        ToolbarLayout layout = new ToolbarLayout();
        tip.setLayoutManager(layout);
        tip.setText("通过右侧画板工具选择\n并点击点击编辑器来生成图形");
        return tip;
    }
}


到此,主视图画布已经完成绘画,并能在编辑器中进行显示。可以了解到GEF模型-控制器-视图三者的关系是:首先在编辑器中初始化根模型并添加在编辑器中,然后根据工厂类得到相应的根控制器,根控制器就在编辑器中创建对应的主画布图形。从而三者之间进行联系。编辑器效果如下:
 

源码请看http://bbs.hearker.com/ GMF/GEF板块

© 著作权归作者所有

laz

laz

粉丝 0
博文 4
码字总数 3204
作品 0
成都
私信 提问
Graphical Modeling Framework简介

本文假设读者有Eclipse平台应用程序开发经验,了解Eclipse平台的插件机制,使用EMF和GEF开发过应用程序。在本文中,“Eclipse应用程序”等价于“Eclipse插件”。 Eclipse是一个开源的平台,从...

青夜之衫
2017/12/07
0
0
Eclipse插件开发_学习_00_资源帖

一、官方资料 1.eclipse api 2.GEF Developer's Guide 二、 精选资料 1.开发 Eclipse 插件 2.Eclipse, RCP, Plugin and OSGi Development 3.专栏:GEF Programmers' Guide 中文版(GEF 交互操......

rayner
2018/05/09
0
0
Trufun WebRCP

基于Trufun WebRCP,开发者从此可以使用eclipse SDK的API来开发GWT 应用。Trufun WebRCP目前已经成功的将eclipse用户界面SWT,JFace, UI RCP, 以及优秀的图形编辑框架Eclipse GEF,模型编辑框...

匿名
2012/02/24
1K
0
[Eclipse]GEF入门系列(序)

前些天换了新电脑,本人一直处于兴奋中,基本是"不务正业"的状态。快过年了,虽然没什么动力干活,但我玩游戏技术比较差,魔兽3打电脑一家还很费劲,干脆写写帖子就当是休息吧! 由于工作的需...

青夜之衫
2017/12/06
0
0
基于Eclipse GEF关键技术的分析与研究

基于Eclipse GEF关键技术的分析与研究(2007-03-31 16:54:28) 2.Draw2D技术 轻量级框架:轻量级框架[LightweightSystem类]把SWT和Draw2D 连接起来,它把鼠标事件和画图事件从SWT 转发给Draw2...

zhenghuazhi
2010/04/22
833
0

没有更多内容

加载失败,请刷新页面

加载更多

64.监控平台介绍 安装zabbix 忘记admin密码

19.1 Linux监控平台介绍 19.2 zabbix监控介绍 19.3/19.4/19.6 安装zabbix 19.5 忘记Admin密码如何做 19.1 Linux监控平台介绍: 常见开源监控软件 ~1.cacti、nagios、zabbix、smokeping、ope...

oschina130111
今天
10
0
当餐饮遇上大数据,嗯真香!

之前去开了一场会,主题是「餐饮领袖新零售峰会」。认真听完了餐饮前辈和新秀们的分享,觉得获益匪浅,把脑子里的核心纪要整理了一下,今天和大家做一个简单的分享,欢迎感兴趣的小伙伴一起交...

数澜科技
今天
7
0
DNS-over-HTTPS 的下一代是 DNS ON BLOCKCHAIN

本文作者:PETER LAI ,是 Diode 的区块链工程师。在进入软件开发领域之前,他主要是在做工商管理相关工作。Peter Lai 也是一位活跃的开源贡献者。目前,他正在与 Diode 团队一起开发基于区块...

红薯
今天
6
0
CC攻击带来的危害我们该如何防御?

随着网络的发展带给我们很多的便利,但是同时也带给我们一些网站安全问题,网络攻击就是常见的网站安全问题。其中作为站长最常见的就是CC攻击,CC攻击是网络攻击方式的一种,是一种比较常见的...

云漫网络Ruan
今天
11
0
实验分析性专业硕士提纲撰写要点

为什么您需要研究论文的提纲? 首先当您进行研究时,您需要聚集许多信息和想法,研究论文提纲可以较好地组织你的想法, 了解您研究资料的流畅度和程度。确保你写作时不会错过任何重要资料以此...

论文辅导员
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部