GEF企业应用开发之--企业应用支持
2011-04-23 12:15
381 查看
1 企业应用支持
1.1 双击支持
实现双击事件,只需在ShipPart中覆写performRequest()方法即可。
双击图标,可以实现dialog的打开:
1.2 右键支持
第一步在BerthGraphicalEditor中添加对右键的支持。
第二步在BerthGraphicalEditor中创建Action
第三步 创建BerthContextMenuProviderAction.java
Ok,试试看吧
1.3 图形更新
图形的更新分为两部分:
1、更新模型属性,使图形显示与模型同步。本文通过Tabbed修改模型的属性来触发图形的改变。
在ShipModle中的setShipInfo中,触发监听事件:
在ShipPart中实现监听,
Ok,when update the ship name in the tabbed and click the save button ,you can see this:
2. 更新图形显示。由于图形是在图形显示时就绘制好的,不能在绘制完成后再重绘。如不能改变图形的“渐变背景”,注意如果背景是通过setBackgroundColor()方式设置的背景,可以像类似的属性更新的方式改变图形的背景。GEF没有提供图形的刷新方式,可以通过removeChild()和addChild()来实现。
本文同右键功能来实现图形的实现图形的刷新。
在RefreshAction的run方法做模型的刷新处理,其实质就是removeChild后再addChild;
Now you will see this:
右键点击双击时,即可看到背景颜色的改变。
1.4 Open editor
1、对导航列表添加双击事件
在打开Editot时,对于同一个公司名,始终保持打开且仅打开一个editor,这是由editorInput的name属性决定的,因为在editor中实现了:
1.1 双击支持
实现双击事件,只需在ShipPart中覆写performRequest()方法即可。
[align=left] [/align] [align=left] @Override[/align] [align=left] public void performRequest(Request request)[/align] [align=left] {[/align] [align=left] if (request.getType() == RequestConstants.REQ_OPEN)[/align] [align=left] {[/align] [align=left] //获得所点击的模型信息 [/align] [align=left] ShipModel shipModel=(ShipModel)getModel();[/align] [align=left] ShipInfo shipInfo=shipModel.getShipInfo();[/align] [align=left] ShipInfoDialog sid=new ShipInfoDialog(BerthUtil.getInstances().getShell());[/align] [align=left] sid.setShipInfo(shipInfo);[/align] [align=left] sid.open();[/align] [align=left] }[/align] } |
1.2 右键支持
第一步在BerthGraphicalEditor中添加对右键的支持。
[align=left] protected void configureGraphicalViewer() {[/align] [align=left] ……[/align] [align=left] ContextMenuProvider provider = new BerthContextMenuProvider(this,viewer, getActionRegistry());[/align] [align=left] viewer.setContextMenu(provider);[/align] [align=left] getSite().registerContextMenu("org.jport.gef.editor.contextmenu",provider, viewer);[/align] [align=left] ……[/align] } |
[align=left]@SuppressWarnings("unchecked")[/align] [align=left] public void createActions() {[/align] [align=left] super.createActions();[/align] [align=left] ActionRegistry registry = getActionRegistry();[/align] [align=left] IAction action = new RefreshAction(this);[/align] [align=left] registry.registerAction(action);[/align] [align=left] getSelectionActions().add(action.getId());[/align] } |
[align=left]public void buildContextMenu(IMenuManager menu) {[/align] [align=left] // Add standard action groups to the menu[/align] [align=left] GEFActionConstants.addStandardActionGroups(menu);[/align] [align=left] if (part instanceof BerthGraphicalEditor) {[/align] [align=left] EditPart focusEditPart = getViewer().getFocusEditPart();[/align] [align=left] //判断不同的模型,为不同的模型添加不同的menu[/align] [align=left] if (focusEditPart instanceof ShipPart) {[/align] [align=left] addShipModelPopuMenu(menu);[/align] [align=left] }[/align] [align=left] }[/align] [align=left]}[/align] [align=left]private void addShipModelPopuMenu(IMenuManager menu) {[/align] [align=left] //you can new an action here,but is inefficient,for everytime you click right click will create an new class[/align] [align=left] menu.add(getAction("moveUp"));[/align] } |
1.3 图形更新
图形的更新分为两部分:
1、更新模型属性,使图形显示与模型同步。本文通过Tabbed修改模型的属性来触发图形的改变。
[align=left] // TODO Auto-generated method stub[/align] [align=left] try {[/align] [align=left] // invoke save service[/align] [align=left] ShipInfo shipInfo=shipModel.getShipInfo();[/align] [align=left] shipInfo.setShipName(shipNameT.getText());[/align] [align=left] shipModel.setShipInfo(shipInfo);[/align] [align=left] MessageDialogInfo.openInformation("提示信息", "位信息保存成功!");[/align] [align=left] } catch (Exception e) {[/align] [align=left] MessageDialogInfo.openError("错误提示", "保存位信息出错,请重试");[/align] [align=left] }[/align] [align=left] }[/align] |
[align=left]public void setShipInfo(ShipInfo shipInfo) {[/align] [align=left] this.shipInfo = shipInfo;[/align] [align=left] getListeners().firePropertyChange(PROPERTY_UPDATEMODEL, null, shipInfo);[/align] [align=left] }[/align] |
[align=left] public void propertyChange(PropertyChangeEvent evt) {[/align] [align=left]……[/align] [align=left] if (evt.getPropertyName().equals(ShipModel.PROPERTY_UPDATEMODEL)) refreshVisuals();[/align] [align=left] } [/align] [align=left] protected void refreshVisuals(){ [/align] [align=left] ShipFigure figure = (ShipFigure)getFigure();[/align] [align=left] ShipModel model = (ShipModel)getModel();[/align] [align=left] figure.setShipName(model.getShipInfo().getShipName());[/align] [align=left] figure.setLayout(model.getLayout());[/align] [align=left] }[/align] |
2. 更新图形显示。由于图形是在图形显示时就绘制好的,不能在绘制完成后再重绘。如不能改变图形的“渐变背景”,注意如果背景是通过setBackgroundColor()方式设置的背景,可以像类似的属性更新的方式改变图形的背景。GEF没有提供图形的刷新方式,可以通过removeChild()和addChild()来实现。
本文同右键功能来实现图形的实现图形的刷新。
在RefreshAction的run方法做模型的刷新处理,其实质就是removeChild后再addChild;
[align=left] @Override [/align] [align=left] public void run() { [/align] [align=left] super.run(); [/align] [align=left] ShipPart shipPart = (ShipPart) getSelectedObjects().get(0); [/align] [align=left] DiagramModel parent=(DiagramModel)shipPart.getParent().getModel();[/align] [align=left] ShipModel shipModel=(ShipModel)shipPart.getModel();[/align] [align=left] //just for fun[/align] [align=left] shipModel.setBgType(shipModel.getBgType()+1);[/align] [align=left] parent.removeChild(shipModel);[/align] [align=left] parent.addChild(shipModel);[/align] } |
右键点击双击时,即可看到背景颜色的改变。
1.4 Open editor
1、对导航列表添加双击事件
[align=left]public class Navigate extends ViewPart {[/align] [align=left] ……[/align] [align=left] public void createPartControl(Composite parent) {[/align] [align=left] ……[/align] [align=left]viewer.addDoubleClickListener(new TreeDoubleClick(viewer));[/align] } |
[align=left]package org.jport.gef.berth.action;[/align] [align=left]public class TreeDoubleClick implements IDoubleClickListener {[/align] [align=left] [/align] [align=left]……[/align] [align=left] public void doubleClick(DoubleClickEvent event)[/align] [align=left] {[/align] [align=left] IStructuredSelection selection = (IStructuredSelection) tv.getSelection();[/align] [align=left] String companyName = (String) (selection.getFirstElement());[/align] [align=left] [/align] [align=left] try[/align] [align=left] {[/align] [align=left]// //input 自动根据输入的不同来判断该Editor是否打开[/align] [align=left] input=new BerthEditorInput(companyName);[/align] [align=left] window.getActivePage().openEditor(input, BerthGraphicalEditor.ID);[/align] [align=left] }[/align] [align=left] catch (WorkbenchException e) {[/align] [align=left] // TODO Auto-generated catch block[/align] [align=left] }[/align] [align=left] }[/align] [align=left]}[/align] |
[align=left] @Override[/align] [align=left] public boolean exists() {[/align] [align=left] return (this.name != null);[/align] [align=left] }[/align] [align=left] [/align] [align=left] public boolean equals(Object o) {[/align] [align=left] if (!(o instanceof BerthEditorInput))[/align] [align=left] return false;[/align] [align=left] return ((BerthEditorInput)o).getName().equals(getName());[/align] } |
相关文章推荐
- GEF企业应用开发之--Summary
- JSaaS 企业应用快速开发平台–支持分支机构
- GEF企业应用开发之--Introducing
- Spring对DAO的支持(精通Spring+4.x++企业应用开发实战 第十章)
- GEF企业应用开发之--Getting Start
- 学习《spring 3.x企业应用开发实战》之Spring对DAO的支持
- GEF企业应用开发之--基本原理一
- GEF企业应用开发之--基本原理二
- GEF企业应用开发之--辅助功能
- 元数据(metadata)在企业应用开发中的作用
- JAVA开放源码项目与工具在企业应用开发中的运用
- 《精通Spring4.X企业应用开发实战》读后感第五章(Bean作用域)
- Android新增C/C++语言支持:应用开发更快
- Ioc容器 (精通Spring+4.x++企业应用开发实战 三)
- 基于@AspectJ和Schema的AOP(精通Spring+4.x++企业应用开发实战 第八章)
- 基于eclipse GEF开发Google GWT矢量图形应用(eclipse gef on gwt)
- 《spring 4.x 企业应用开发实战》FAQ及勘误表
- Flex企业应用开发实践学习笔记(五)-------组件失效机制
- OSGI企业应用开发(一)OSGI简介
- 我理解的互联网应用和企业应用开发