在gef的mvc框架中,我们用EditDomain来负责保存、载入缺省工具,维护当前激活的工具,并将鼠标和键盘等事件转发给当前活动工具,以及处理命令栈堆栈,从而我们可以方便实现dosave、redo、undo等常用操作。Command通常是“原子”性的单元,而不对其分割。但是,有时候我们会碰到一下场景:
场景:在创建对象时,我们从PaetteRoot中选择一个CreationEntry,然后在Viewer上点击,就产生一个request,editpoly根据request的类型返回一个createCommand,就创建出了一个对象。客户要求的是在Command执行前,要对所创建对象进行参数设置。即:弹出一参数设置对话框。
问题:这个对话框在何处实现??我们通常会先想到在command中来实现它,这时就有个问题,如果用户选择了“Cancel”,这个Command已经放入EditDomain堆栈中,这时会给我们造成undo、redo等实现的复杂性(得判断Command中对话框中是否选择了ok)。在policy处处理肯定不合适,因为在鼠标移动过程中,它会一直触发policy事件。
正确的处理方法:分为两步:
1.第一步:extends CreationTool,重载performCreation(int button)方法。代码示例:
import org.eclipse.gef.commands.Command;
import org.eclipse.gef.requests.CreationFactory;
import org.eclipse.gef.tools.CreationTool;
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.swt.widgets.Display;
import tutogef.commands.EmployeCreateCommand;
import tutogef.model.Employe;
/**
* @author zhu_qhua
*/
public class CreationToolEx extends CreationTool {
private Employe emp;// 要创建的对象
public CreationToolEx() {
}
public CreationToolEx(CreationFactory factory) {
super(factory);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.gef.tools.CreationTool#performCreation(int)
*/
protected void performCreation(int button) {
EmployeCreateCommand createCommand;// 创建对象对应的createCommand
String value;
Command command = getCurrentCommand();
boolean hasCommand = command != null && command.canExecute();
if (!hasCommand)
return;
if (command instanceof EmployeCreateCommand) {
createCommand = (EmployeCreateCommand) command;
emp = createCommand.getEmploye();
} else {
return;
}
if (getTargetEditPart() != null) {
InputDialog inputDialog = new InputDialog(Display.getDefault()
.getActiveShell(), "提示框", "请输入名字", emp.getName(), null);
if (inputDialog.open() == InputDialog.OK) {
value = inputDialog.getValue();
emp.setName(value);
if (command instanceof EmployeCreateCommand) {
createCommand.setEmploye(emp);
}
} else {
return;
}
}
super.performCreation(button);
}
}
2.第二步:然后再EditorView的protected PaletteRoot getPaletteRoot()中调用TemplateEntry.setToolClass(CreationToolEx.class)就可以了。
protected PaletteRoot getPaletteRoot() {
PaletteRoot root = new PaletteRoot();
PaletteGroup manipGroup = new PaletteGroup("操作对象");
root.add(manipGroup);
// 添加该工具的选择和工具选择组
SelectionToolEntry selectionToolEntry = new SelectionToolEntry();
manipGroup.add(selectionToolEntry);
manipGroup.add(new MarqueeToolEntry());
PaletteSeparator sep2 = new PaletteSeparator();
root.add(sep2);
PaletteGroup instGroup = new PaletteGroup("创建对象");
root.add(instGroup);
instGroup.add(new CombinedTemplateCreationEntry("Service",
"Creation d'un service type", Service.class,
new NodeCreationFactory(Service.class), AbstractUIPlugin
.imageDescriptorFromPlugin(Activator.PLUGIN_ID,
"icons/services-low.png"), AbstractUIPlugin
.imageDescriptorFromPlugin(Activator.PLUGIN_ID,
"icons/services-high.png")));
// 要实现dialog的Entity
CombinedTemplateCreationEntry newTemplateEntry = new CombinedTemplateCreationEntry("Employe",
"Creation d'un employe model", Employe.class,
new NodeCreationFactory(Employe.class), AbstractUIPlugin
.imageDescriptorFromPlugin(Activator.PLUGIN_ID,
"icons/employe-low.png"), AbstractUIPlugin
.imageDescriptorFromPlugin(Activator.PLUGIN_ID,
"icons/employe-high.png")) ;
newTemplateEntry.setToolClass(CreationToolEx.class);
instGroup.add(newTemplateEntry);
// 定义进入调色板将使用默认值:
root.setDefaultEntry(selectionToolEntry);
return root;
}
到这儿,就大功告成了。
分享到:
相关推荐
详细介绍及样例数据:https://blog.csdn.net/li514006030/article/details/143896457
# 基于Java和MySQL的物联网环境监测系统 ## 项目简介 本项目是一个基于Java和MySQL的物联网环境监测系统,旨在通过采集、存储和分析环境数据,实现对环境的实时监测和管理。系统涵盖了数据采集、数据存储、数据发送、数据接收、数据备份和日志记录等多个模块,确保数据的完整性和系统的稳定性。 ## 项目的主要特性和功能 1. 数据采集模块 从指定的数据文件(如radwtmp)中读取原始数据,并将其封装成Environment对象。 将多个Environment对象存储到集合中,便于后续处理。 2. 数据存储模块 创建数据库表结构,用于存储环境数据。 将采集到的环境数据批量存储到MySQL数据库中,支持批量处理以优化性能。 3. 网络模块 客户端调用采集模块获取数据,并将数据发送至服务器。 服务器端接收客户端发送的数据,并调用存储模块将数据存入数据库。支持多线程处理,提高并发性能。
1、资源内容地址:https://blog.csdn.net/abc6838/article/details/143895777 2、数据特点:今年全新,手工精心整理,放心引用,数据来自权威,且标注《数据来源》,相对于其他人的控制变量数据准确很多,适合写论文做实证用 ,不会出现数据造假问题 3、适用对象:大学生,本科生,研究生小白可用,容易上手!!! 4、课程引用: 经济学,地理学,城市规划与城市研究,公共政策与管理,社会学,商业与管理
TMS WEB Core v2.0.5.0 for Delphi 11 (D11.1) 下载仓库 简介 本仓库提供 TMS WEB Core v2.0.5.0 for Delphi 11 (D11.1) 的资源文件下载。TMS WEB Core 是一个强大的工具,专为 Delphi 开发者设计,帮助他们轻松构建现代化的 Web 应用程序。 资源文件信息 标题: TMS-WEB-Core-v2.0.5.0-for-Delphi-11-D11.1 描述: TMS_WEB_Core_v2.0.5.0_for_Delphi_11_D11.1 使用说明 下载资源文件: 点击仓库中的资源文件进行下载。 安装: 按照 TMS WEB Core 的官方安装指南进行安装。 开发: 使用 Delphi 11 进行 Web 应用程序的开发。 注意事项 请确保您已经安装了 Delphi 11 (D11.1) 版本。 在安装和使用过程中,请参考 TMS WEB Core 的官方文档以获取更多帮助。 联系我们 如果您在使用过程中遇到任何问题或有任何建议,请通过以下方式联系我们: 邮箱: support@exa
内容概要:本文档是一份详细的PyCharm安装与基本配置教程,旨在帮助初学者轻松掌握从下载安装到运行首个Python程序的所有步骤。内容覆盖PyCharm的选择与下载、安装路径设定、环境变量配置以及首次启动后的各项重要设置,如主题更换、汉化、安装插件增强体验等,最后还简述了如何运行第一个程序。同时提供了丰富的配图辅助理解和操作。 适合人群:面向编程新手特别是对Python感兴趣的学习者。对于有一定Python基础但缺乏高效IDE使用经验的研发人员也有一定借鉴意义。 使用场景及目标:①快速熟悉PyCharm IDE的基本操作与环境搭建流程;②优化编码体验,学会利用插件提升效率;③为深入Python编程学习打下坚实的基础。 阅读建议:按照步骤执行操作时注意对比教程提供的图片与实际界面是否一致,如有疑问可参照文档给出的具体链接进一步探索相关资料。此外,虽然本文档主要针对PyCharm的社区版,高级用户也可以将其作为官方文档的补充参考材料。
本教程从基础开始,介绍了 SQL 的语法和常用操作,包括创建表、查询数据、更新与删除、聚合与连接查询,以及数据库完整性和索引。通过提供学习资源和练习任务,帮助您快速掌握 SQL 的核心技能,为数据库管理和数据分析奠定基础。
人工智能开发项目深度学习项目源码带指导视频服饰关键点定位提取方式是百度网盘分享地址
vncviewer.exe
环境说明:开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7 数据库工具:Navicat 开发软件:eclipse/myeclipse/idea Maven包:Maven 浏览器:谷歌浏览器。 项目经过测试均可完美运行
人工智能开发项目深度学习项目源码带指导视频令人拍案叫绝的WGAN提取方式是百度网盘分享地址
# 基于DevExpress框架的进销存管理系统 ## 项目简介 进销存管理系统是一个基于CS架构的应用程序,主要用于管理企业的采购、销售、库存等业务流程。系统采用DevExpress插件进行界面设计和数据展示,提供了丰富的功能模块,包括采购管理、供应商管理、销售管理、库存管理、客户管理、系统用户管理和商品管理。 ## 项目的主要特性和功能 1. 采购管理管理企业的采购订单,跟踪采购流程。 2. 供应商管理维护和管理供应商信息,包括供应商的详细资料和历史交易记录。 3. 销售管理管理销售订单,跟踪销售流程和客户需求。 4. 库存管理实时监控库存情况,管理库存的进出和调拨。 5. 客户管理维护和管理客户信息,包括客户的详细资料和历史交易记录。 6. 系统用户管理管理系统的用户账号和权限,确保系统的安全性和稳定性。 7. 商品管理管理商品信息,包括商品的详细资料和库存情况。 ## 安装使用步骤 ### 环境准备
# 基于C语言和C++的简单网站留言评论系统 ## 项目简介 这是一个基于C语言和C++的简单网站留言评论系统,旨在通过学习和实践计算机入门到进阶的知识,实现一个功能完善的网站评论系统。项目分为初稿和中稿两部分,初稿使用C语言实现,中稿则在初稿的基础上,将编程语言切换到C++,并利用第三方库进行功能优化。 ## 项目的主要特性和功能 1. 前端界面通过HTML和CSS实现简洁的网页界面,用户可以浏览评论、发表新评论和查看回复。 2. JavaScript事件监听使用JavaScript监听用户的前端操作,如发表评论、点赞等,并向后端发送请求。 3. 后端处理使用C语言和C++编写服务器进程,处理前端请求,与数据库进行交互,并返回结果。 4. 数据库操作通过MySQL数据库存储评论数据,包括评论内容、评论回复等。 5. 多线程处理服务器进程使用多线程模式处理多个客户端的请求,提高处理效率。
基于springboot的校园失物招领系统源码数据库文档.zip
本教程涵盖了 C# 的基础语法、类与对象、继承与接口、文件操作、以及异步编程,通过实用示例和练习帮助您快速入门。C# 的强大功能和广泛应用,使其成为开发 Windows 应用程序、游戏(如 Unity)、Web API 和云服务的理想选择。
《Linux 操作系统实用教程(第 2 版)》这本书是一本非常实用的书籍,它为读者提供了关于 Linux 操作系统的深入讲解和实用教程。在这本书中,读者可以学习到 Linux 操作系统的基本概念、命令行操作、文件系统管理、用户管理、进程管理等方面的知识。同时,这本书还提供了丰富的配套软件,这些软件可以帮助读者更好地学习和使用 Linux 操作系统。例如,书中可能会介绍一些常用的文本编辑器、编译器、调试器等软件,这些软件可以帮助读者在 Linux 环境下进行编程和开发。此外,书中还可能会介绍一些系统管理工具、网络工具等软件,这些软件可以帮助读者更好地管理和维护 Linux 系统。总之,《Linux 操作系统实用教程(第 2 版)——配套软件》是一本非常值得一读的书籍,它可以帮助读者更好地了解和掌握 Linux 操作系统。
论文描述:该论文研究了某一特定领域的问题,并提出了新的解决方案。论文首先对问题进行了详细的分析和理解,并对已有的研究成果进行了综述。然后,论文提出了一种全新的解决方案,包括算法、模型或方法。在整个研究过程中,论文使用了合适的实验设计和数据集,并进行了充分的实验验证。最后,论文对解决方案的性能进行了全面的评估和分析,并提出了进一步的研究方向。 源码内容描述:该源码实现了论文中提出的新的解决方案。源码中包含了算法、模型或方法的具体实现代码,以及相关的数据预处理、实验设计和性能评估代码。源码中还包括了合适的注释和文档,以方便其他研究者理解和使用。源码的实现应该具有可读性、可维护性和高效性,并能够复现论文中的实验结果。此外,源码还应该尽可能具有通用性,以便在其他类似问题上进行进一步的应用和扩展。
基于springboot高校学术交流平台源码数据库文档.zip
本教程介绍了 Objective-C 的基础语法、面向对象编程、动态类型和 Block 特性,并提供了实用的练习和答案。通过这些内容,您可以快速掌握 Objective-C 的核心概念,为 macOS/iOS 开发打下扎实的基础。
基于springboot校外兼职教师考勤管理系统源码数据库文档.zip
1、资源内容地址:https://blog.csdn.net/abc6838/article/details/143895851 2、数据特点:今年全新,手工精心整理,放心引用,数据来自权威,且标注《数据来源》,相对于其他人的控制变量数据准确很多,适合写论文做实证用 ,不会出现数据造假问题 3、适用对象:大学生,本科生,研究生小白可用,容易上手!!! 4、课程引用: 经济学,地理学,城市规划与城市研究,公共政策与管理,社会学,商业与管理