RCP学习:如何重写WorkbenchPage
来源:互联网 发布:sqlserver exists用法 编辑:程序博客网 时间:2024/06/05 16:56
RCP学习:如何重写WorkbenchPage
原文地址:http://www.cnblogs.com/anrainie/archive/2012/11/06/2757438.html
重写WorkbenchPage的必要性在哪里?
比如有一个需求,比如屏蔽编辑器的关闭功能,或者把关闭编辑器按钮的实际功能转为隐藏编辑器
前一个功能还可以通过重写一系列的类来完成,后面这个功能几乎是无法完成的。
我们可以通过扩展org.eclipse.ui.internalTweaklets来完成
我们来看WorkbenchPage的初始化是怎样的:
/******************************************************************************* * Copyright (c) 2008 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation ******************************************************************************/package org.eclipse.ui.internal.tweaklets;import org.eclipse.core.runtime.IAdaptable;import org.eclipse.ui.WorkbenchException;import org.eclipse.ui.internal.Perspective;import org.eclipse.ui.internal.WorkbenchPage;import org.eclipse.ui.internal.WorkbenchWindow;import org.eclipse.ui.internal.registry.PerspectiveDescriptor;/** * @since 3.4 * */public class Workbench3xImplementation extends WorkbenchImplementation { /* (non-Javadoc) * @see org.eclipse.ui.internal.tweaklets.WorkbenchImplementation#createWBW(int) */ public WorkbenchWindow createWorkbenchWindow(int newWindowNumber) { return new WorkbenchWindow(newWindowNumber); } /* (non-Javadoc) * @see org.eclipse.ui.internal.tweaklets.WorkbenchImplementation#createWBPage(org.eclipse.ui.internal.WorkbenchWindow, java.lang.String, org.eclipse.core.runtime.IAdaptable) */ public WorkbenchPage createWorkbenchPage(WorkbenchWindow workbenchWindow, String perspID, IAdaptable input) throws WorkbenchException { return new WorkbenchPage(workbenchWindow, perspID, input); } /* (non-Javadoc) * @see org.eclipse.ui.internal.tweaklets.WorkbenchImplementation#createWBPage(org.eclipse.ui.internal.WorkbenchWindow, org.eclipse.core.runtime.IAdaptable) */ public WorkbenchPage createWorkbenchPage(WorkbenchWindow workbenchWindow, IAdaptable finalInput) throws WorkbenchException { return new WorkbenchPage(workbenchWindow, finalInput); } /* (non-Javadoc) * @see org.eclipse.ui.internal.tweaklets.WorkbenchImplementation#createPerspective(org.eclipse.ui.internal.registry.PerspectiveDescriptor, org.eclipse.ui.internal.WorkbenchPage) */ public Perspective createPerspective(PerspectiveDescriptor desc, WorkbenchPage workbenchPage) throws WorkbenchException { return new Perspective(desc, workbenchPage); }}
该类不止负责WorkbenchPage生成,重写WorkbenchWindow,重写Perspective也可以通过它。
这个类是可以通过扩展点配置出来的,见代码节选:
public abstract class WorkbenchImplementation { public static TweakKey KEY = new Tweaklets.TweakKey(WorkbenchImplementation.class); static { Tweaklets.setDefault(WorkbenchImplementation.KEY, new Workbench3xImplementation()); }}
private static Object createTweaklet(TweakKey definition) { IConfigurationElement[] elements = Platform .getExtensionRegistry() .getConfigurationElementsFor("org.eclipse.ui.internalTweaklets"); //$NON-NLS-1$ for (int i = 0; i < elements.length; i++) { if (definition.tweakClass.getName().equals( elements[i].getAttribute("definition"))) { //$NON-NLS-1$ try { Object tweaklet = elements[i].createExecutableExtension("implementation"); //$NON-NLS-1$ tweaklets.put(definition, tweaklet); return tweaklet; } catch (CoreException e) { StatusManager.getManager().handle( StatusUtil.newStatus(IStatus.ERROR, "Error with extension " + elements[i], e), //$NON-NLS-1$ StatusManager.LOG); } } } return null; }
我现在实现一个自己的WorkbenchImplementation,如下
package galaxy.ide.application.test;import org.eclipse.core.runtime.IAdaptable;import org.eclipse.ui.IEditorReference;import org.eclipse.ui.WorkbenchException;import org.eclipse.ui.internal.WorkbenchPage;import org.eclipse.ui.internal.WorkbenchWindow;import org.eclipse.ui.internal.tweaklets.Workbench3xImplementation;public class MyWorkbenchImplementation extends Workbench3xImplementation { public MyWorkbenchImplementation() { super(); } public WorkbenchPage createWorkbenchPage(WorkbenchWindow workbenchWindow, String perspID, IAdaptable input) throws WorkbenchException { return new WorkbenchPage(workbenchWindow, perspID, input) { public boolean closeEditors(IEditorReference[] refArray, boolean save) { System.out.println("执行关闭!!!!"); return super.closeEditors(refArray, save); } }; } /* * (non-Javadoc) * * @see * org.eclipse.ui.internal.tweaklets.WorkbenchImplementation#createWBPage * (org.eclipse.ui.internal.WorkbenchWindow, * org.eclipse.core.runtime.IAdaptable) */ public WorkbenchPage createWorkbenchPage(WorkbenchWindow workbenchWindow, IAdaptable finalInput) throws WorkbenchException { return new WorkbenchPage(workbenchWindow, finalInput) { public boolean closeEditors(IEditorReference[] refArray, boolean save) { System.out.println("执行关闭!!!!"); return super.closeEditors(refArray, save); } }; }}
为了让该类执行,扩展点定义如下:
<extension point="org.eclipse.ui.internalTweaklets"> <tweaklet definition="org.eclipse.ui.internal.tweaklets.WorkbenchImplementation" description="galaxy.ide.application.test.MyWorkbenchImplementation" id="galaxy.ide.application.test.my" implementation="galaxy.ide.application.test.MyWorkbenchImplementation" name="galaxy.ide.application.test.MyWorkbenchImplementation"> </tweaklet> </extension>
如此,即可。
0 0
- RCP学习:如何重写WorkbenchPage
- rcp如何连接数据库
- 如何自定义RCP界面
- 如何自定义RCP外观
- 如何自定义RCP外观
- java学习--如何重写hasCode()方法
- 学习RCP编程
- RCP应用程序的学习
- ECLIPSE RCP 学习日志
- rcp 学习总结
- 一些学习RCP的资源
- Eclipse RCP 学习过程(二)
- Eclipse RCP 学习过程(三)
- Eclipse RCP 学习过程(四)
- Eclipse RCP 学习过程(五)
- RCP 学习笔记 启动登录
- rcp学习笔记(-)-----程序框架
- RCP 学习笔记 启动登录
- win7 64位 Eclipse安装svn64位插件
- 步步为营 .NET 代码重构学习笔记 一、为何要代码重构
- 外面下了好大的雨
- webGL总结
- TOAD OR PLSQL 连接 ORACLE ,Toad报“No valid Oracle Client found”错
- RCP学习:如何重写WorkbenchPage
- 交叉编译Qt5.2.1让其支持触摸屏多点触摸
- FZU 2138 久违的月赛之一
- 社会化网络分析
- C#对Access数据库的操作
- <PY><core python programming笔记>C10 错误和异常
- 一些错误提示的中文翻译
- [android]App工程结构搭建:几种常见Android代码架构分析
- ios读取网络图片数据