`
salever
  • 浏览: 254711 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

自定义 RCP 编辑器和视图标题菜单关闭操作

    博客分类:
  • RCP
 
阅读更多

 编辑器和视图标题的关闭操作特指标题栏 最右方的关闭按钮操作。一般来说编辑器的关闭事件都是自己默认的实现,比如继承了 ISavePart2 的编辑器在 Dirty 属性为 true 时点击这个按钮会出现确定信息框,这个是由 ISavePart2 . promptToSaveOnClose () 实现的,一般情况下重写这个函数即可。这种情况下编辑器标题上会出现一个“ * ”号代表当前编辑器有未保存的修改。

    多讲一下编辑器默认的保存机制,在工具栏和菜单中有个菜单“ Save ”,这个菜单可以自动根据当前编辑器是否需要保存来切换状态。若不需要保存,则不可用,反 之则可以使用。这个菜单的状态与编辑器的 Ditry 属性密切相关联。 同时 ISaveablePart ISaveablePart2 中的一些 Save 方法都与它相关。

假如用户点击关闭按钮时需要始终出现退出提示,这种情况下 promptToSaveOnClose() 就不能用了,因为它也与 Dirty 属性相关。

这里提供一个可选方案,还是与 PresentationFactory 有关。

  关闭按钮位于 TabFolder 上, 可以考虑给它添加一个监听器—— TabFolderListener , 它负责对 TabFolderEvent.EVENT_CLOSE 时间进 行监听。

	private static void hookTabFolder(final IStackPresentationSite site,
			TabbedStackPresentation result) {
		AbstractTabFolder tabFolder = result.getTabFolder();
		Object objOldTabFolderListener = null;
		try {
			Field[] fields = result.getClass().getDeclaredFields();
			for (int i = 0; i < fields.length; i++) {
				if (fields[i].getName().equals("tabFolderListener")) {
					fields[i].setAccessible(true);
					objOldTabFolderListener = fields[i].get(result);
					break;
				}
			}
		} catch (IllegalAccessException e) {

		}
		final TabFolderListener oldTabFolderListener = (TabFolderListener) objOldTabFolderListener;
		TabFolderListener tabFolderListener = new TabFolderListener() {
			@Override
			public void handleEvent(TabFolderEvent e) {
				switch (e.type) {
				case TabFolderEvent.EVENT_CLOSE:
					IPresentablePart part = (IPresentablePart) e.tab.getData();
					boolean confirm = handleClose(site, part);
					if (confirm) {
						if (oldTabFolderListener != null)
							oldTabFolderListener.handleEvent(e);
					}
					break;
				default:
					if (oldTabFolderListener != null)
						oldTabFolderListener.handleEvent(e);
					break;
				}
			}
		};
		tabFolder.removeListener(oldTabFolderListener);
		tabFolder.addListener(tabFolderListener);

	}

调用 hookTabFolder () 方法:

	public StackPresentation createViewPresentation(Composite parent,
			IStackPresentationSite site) {
		TabbedStackPresentation result = (TabbedStackPresentation) super
				.createEditorPresentation(parent, site);
		hookTabFolder(site, result);
		return result;
	}

除了 EVENT_CLOSE 事 件以外,其他事件都照旧处理,具体怎么提示自己实现 handleClose() 函 数。类推一下, TabFolderEvent 还有其他的事件,理论上这 些事件都可以按照这种方法重写。

    public  static final int EVENT_PANE_MENU = 1;
    public static final int EVENT_HIDE_TOOLBAR = 2;
    public static final int EVENT_SHOW_TOOLBAR = 3;
    public static final int EVENT_RESTORE = 4;
    public static final int EVENT_MINIMIZE = 5;
    public static final int EVENT_CLOSE = 6;
    public static final int EVENT_MAXIMIZE = 7;
    public static final int EVENT_TAB_SELECTED = 8;
    public static final int EVENT_GIVE_FOCUS_TO_PART = 9;
    public static final int EVENT_DRAG_START = 10;
    public static final int EVENT_SHOW_LIST = 11;
    public static final int EVENT_SYSTEM_MENU = 12;
    public static final int EVENT_PREFERRED_SIZE = 13;

最后别忘了使用自定义的 PresentationFactory

分享到:
评论

相关推荐

    RCP自定义透视图切换按钮的右键菜单

    透视图是Eclipse RCP中的一个重要概念,它定义了工作台窗口中各视图和编辑器的布局。默认情况下,Eclipse RCP提供了标准的透视图切换方式,但开发者可以根据需求进行自定义。下面我们将逐步解析这个过程: 1. **...

    rcp editor实例的项目代码

    通过RCP编辑器实例的项目代码,你可以学习到如何将Eclipse的强大功能集成到自己的应用程序中,从而提高开发效率和用户体验。不断研究和实践,你将能够熟练掌握Eclipse RCP的开发技巧,构建出功能丰富的桌面应用程序...

    plugin2_RCP菜单_teamcenter_

    `plugin.xml`配置文件是Eclipse插件的核心,它包含了插件的元数据、视图、编辑器、命令、快捷键、菜单和工具栏的定义。 3. **plugin.xml配置**:在`plugin.xml`文件中,开发者可以使用XML语法来声明菜单和工具栏。...

    RCP与GEF课件,介绍RCP和GEF各组成部分和工作原理

    2. **Perspective**:透视图定义了工作台的布局和可见性,可以根据用户的任务或工作流来组织和显示不同的视图和编辑器。 3. **View**:视图是工作台中的独立组件,它们通常显示特定类型的信息或提供某种功能。例如...

    eclipse rcp经典程序

    Eclipse RCP程序通常由多个组件构成,包括视图(Views)、编辑器(Editors)、透视图(Perspectives)、菜单和工具栏等。"eclipse rcp经典程序"这个资源很可能包含了完整的示例代码,帮助开发者了解并实践这些关键...

    RCP 产品介绍图片

    5. **透视图(Perspectives)**:透视图是RCP中组织视图和编辑器的方式,允许用户根据任务或工作流切换不同的布局。图片可能包含多个透视图的示例,如编程透视图、调试透视图等。 6. **插件开发**:RCP的插件开发是...

    RCP入门 View Editor

    视图在RCP中提供辅助功能,帮助用户更好地理解和操作编辑器中的内容。视图可以显示文档结构、属性信息或其他相关数据,如Outline视图,用于显示当前编辑文件的结构。视图可以独立于编辑器存在,也可以与编辑器一起...

    EclipseRcp 例子程序

    6. **命令与快捷键**:Eclipse RCP提供了命令框架,允许自定义用户操作,如菜单项和快捷键。例子程序会展示如何定义、注册和绑定这些命令。 7. **服务(Service)**:Eclipse RCP支持服务导向的架构,通过服务,...

    RCP程序设计教程打包

    - **自定义视图和编辑器**:根据需求创建具有特定功能的视图和编辑器,例如,支持拖放操作、图表展示等。 4. **学习资源** - **"RCP程序设计.pdf"**:可能包含对RCP设计原理的深入解释,以及如何创建和配置RCP...

    rcp perspective

    透视图是Eclipse IDE和基于RCP的应用程序中的一个重要组成部分,它定义了工作台窗口中显示的视图、编辑器和其他组件的布局。在RCP开发中,透视图允许用户根据他们的工作需求定制和组织界面。 在描述中提到的博文...

    Eclipse RCP开发详解

    Eclipse RCP对象(如视图和编辑器)都有自己的生命周期,它们会经历创建、初始化、激活、停用和销毁等阶段。你需要正确处理这些生命周期事件,以确保插件的稳定性和性能。 部署方面,Eclipse RCP应用通常打包为一个...

    RCP 中文文档

    3. **定义视图和编辑器**:根据应用需求,开发自定义视图和编辑器,这通常涉及编写SWT(Standard Widget Toolkit)和JFace代码。 4. **构建菜单和工具栏**:通过编程或使用图形化工具设计应用的菜单和工具栏,将...

    Eclipse RCP应用系统开发方法与实战(第四章)

    3. 定义透视图:根据需求,我们可以自定义透视图,将视图和编辑器组织成合适的布局。 4. 实现命令:Eclipse RCP的命令模型允许我们定义和绑定用户操作,比如菜单项和工具栏按钮,这样可以统一处理用户交互。 5. 集成...

    RCP 资料

    在RCP中,开发者可以创建自定义的工作台视图、编辑器、透视图,以及通过插件系统进行功能扩展。Eclipse RCP的核心设计理念是“模型-视图-控制器”(MVC)模式,这使得应用程序的结构清晰,易于维护和扩展。 **主要...

    Eclipse RCP开发教程

    视图和编辑器是 RCP 应用中展示数据和执行操作的主要组件。视图通常用于显示辅助信息,而编辑器用于处理和编辑主要内容。开发者可以自定义视图和编辑器,实现特定的用户界面和功能。 **6. 对话框(Dialogs)** ...

    RCP 界面布局实例

    这个例子中,我们可以想象CRM应用可能包含多个视图,如客户列表视图、订单视图、联系人视图等,这些视图可能通过堆栈布局或网格布局进行组织,以便用户可以快速访问和操作。 其次,透视图(Perspective)是RCP界面...

    rcp editor实例的项目代码2

    自定义编辑器的开发通常涉及实现`IEditorPart`接口,以及处理打开、保存、关闭文件等操作。 2. **模型-视图-控制器(MVC)模式**:Eclipse RCP应用通常遵循MVC设计模式,其中模型表示数据,视图负责展示数据,而...

    一个RCP的简单例子

    RCP允许开发者利用Eclipse的强大功能,如插件系统、工作台管理、视图和编辑器,来创建自定义的、模块化的用户界面。在本例子中,我们看到的是一个基于RCP实现的**客户关系管理(CRM)**系统。 CRM系统主要用于企业...

    eclipse rcp demo

    2. **基本视图和编辑器的实现**:示例可能包含自定义视图和编辑器的代码,展示如何创建和集成到工作台中。 3. **菜单和工具栏的创建**:Eclipse RCP允许开发者定义自定义菜单和工具栏项,这在示例中会被详细解释。 ...

Global site tag (gtag.js) - Google Analytics