Rich Client Platform富客户平台
eclipse3.7下:
ApplicationActionBarAdvisor:简单的说这个类是用来配置程序的菜单栏和工具栏的
ApplicationWorkbenchAdvisor:这个类是RCP程序的Workbench,RCP是Eclipse的简化,但是所有的组件都是和Eclipse一样的。一个RCP程序也只能有一个Workbench。
ApplicationWorkbenchWindowAdvisor:这个类是RCP的WorkbenchWindow,隶属于当前的Workbench。可以有多个WorkbenchWindow。
Perspective:是我们新建的RCP的默认透视图。可以在这个类中指定View和Editor的排布。
plugin.xml:这个文件是我们插件的配置文件,包括我们的插件用了哪些其他的插件,具体是怎么配置这些插件的等等。
build.properties:这个文件是用来配置我们插件的编译信息的,用来指定如何编译我们的插件。
MANIFEST.MF:这个文件用来指定我们插件的元数据,比如插件的版本信息。一般来说,这个文件不用手动的去更改。
package demo;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.internal.IWorkbenchGraphicConstants;
import org.eclipse.ui.internal.WorkbenchImages;
public class HelloAction extends Action {
private IWorkbenchWindow window;
public HelloAction(IWorkbenchWindow window) { //由于Action是一个UI元素,所以往往创建一个带IWorkbenchWindow参数的构造函数,以便在Action内部调用
this.window = window;
this.setText("Hello");
ImageDescriptor imgDes = WorkbenchImages
.getImageDescriptor(IWorkbenchGraphicConstants.IMG_ETOOL_EDITOR_TRIMPART);//用Eclipse Workbench自带的图标。
this.setImageDescriptor(imgDes);
}
public void run() {
MessageBox mb = new MessageBox(window.getShell(), SWT.OK);
mb.setMessage("Hello world!");
mb.setText("Demo");
mb.open();
}
}
package demo;
import org.eclipse.jface.action.ICoolBarManager;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.ToolBarContributionItem;
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.swt.SWT;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.application.ActionBarAdvisor;
import org.eclipse.ui.application.IActionBarConfigurer;
public class ApplicationActionBarAdvisor extends ActionBarAdvisor {
HelloAction helloAction;
public ApplicationActionBarAdvisor(IActionBarConfigurer configurer) {
super(configurer);
}
protected void makeActions(IWorkbenchWindow window) { //用来初始化action的,所有要用到的action可以都在这里初始化
super.makeActions(window);
helloAction = new HelloAction(window);
}
protected void fillMenuBar(IMenuManager menuBar) {
super.fillMenuBar(menuBar);
MenuManager demoMenu = new MenuManager("&Demo", ""); //菜单栏增加Demo子菜单,Demo有两个名为Hello的下拉按钮
demoMenu.add(helloAction);
demoMenu.add(helloAction);
menuBar.add(demoMenu);
}
protected void fillCoolBar(ICoolBarManager coolBar) //工具栏增加Hello按钮
{
IToolBarManager toolbar = new ToolBarManager(SWT.FLAT | SWT.RIGHT);
coolBar.add(new ToolBarContributionItem(toolbar, "main"));
toolbar.add(helloAction);
}
}
可以用同样的方法创建一个EditorPart,名字就叫HelloEditor。在editor上面放一个text组件吧,这样看起来像个editor,然后把HelloEditor的layout改成FillLayout。当然也要为HelloEditor添加一个ID属性。这里需要改一下Editor的init方法,否则editor无法正常运行。
this.setSite(site);//setSite是让editor能够使用workbench所提供的一些功能
this.setInput(input);
public void createInitialLayout(IPageLayout layout) {
layout.addStandaloneView(helloview.ID, true,
IPageLayout.LEFT, .50f, layout.getEditorArea()); //当前的Perspective添加一个独立的View
layout.getViewLayout(helloview.ID).setCloseable(false);//去除了关闭View的功
}