Posted on 2008-07-13 10:07
Li Ya Qiang 阅读(539)
评论(0) 编辑 收藏 所属分类:
Eclipse RCP
来自http://cary.javaeye.com/blog/32419
ECLIPSE PLUG-IN RCP
此部分有的是自己的开发中的经验,有的是在论坛中看到别人的经验。我在这里把部分觉得好的部分收集,整理。希望对大家有帮助。
1:登陆对话框
public Object run(Object args) throws Exception {
Display display = PlatformUI.createDisplay();
try {
Platform.endSplash();
/**
* 登录
*/
if (!login())
return IPlatformRunnable.EXIT_OK;
logger.info("正在初始化客户端......");
//
InitUIProgress.addInfor("初始化主界面...");
int returnCode = PlatformUI.createAndRunWorkbench(display,
new ApplicationWorkbenchAdvisor());
if (returnCode == PlatformUI.RETURN_RESTART) {
return IPlatformRunnable.EXIT_RESTART;
}
return IPlatformRunnable.EXIT_OK;
} finally {
display.dispose();
}
}
2:该写actionBar 的 ActionFactory.OPEN_PERSPECTIVE_DIALOG.create(window)
IActionBarConfigurer configurer = getActionBarConfigurer();
final IWorkbenchWindow window = configurer.getWindowConfigurer().getWindow();
MenuManager perspectiveMenu = new MenuManager("Open Perspective");
IContributionItem perspectiveList = ContributionItemFactory.PERSPECTIVES_SHORTLIST.create(window);
perspectiveMenu.add(perspectiveList);
windowMenu.add(perspectiveMenu);
3:让其viewpart显示流线型
在 WorkbenchWindowAdvisor 中的preWindowOpen()中设置
//显示特效
PlatformUI.getPreferenceStore().setDefault(
IWorkbenchPreferenceConstants.ENABLE_ANIMATIONS, true);
//不显示传统的窗口
PlatformUI.getPreferenceStore().setDefault(
IWorkbenchPreferenceConstants.SHOW_TRADITIONAL_STYLE_TABS,
false);
4:可以使用action来做, 调用下面的方法:
IWorkbench.showPerspective(String perspectiveId, IWorkbenchWindow window)
or
IWorkbench.showPerspective(String perspectiveId, IWorkbenchWindow window, IAdaptable input)
IWorkbench和IWorkbenchWindow对象都可以在ViewPart中找到.
5:定义热键
getShell().getDisplay().addFilter(SWT.KeyDown, globEvent);
将plugin.xml里面hotkey
<extension
point="org.eclipse.ui.bindings">
<!--key
commandId="org.eclipse.ui.file.exit"
schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
sequence="CTRL+X">
</key -->
</extension>
6.如何或得RCP中的一些路径问题
从插件中获得绝对路径:
AaaaPlugin.getDefault().getStateLocation().makeAbsolute().toFile().getAbsolutePath());
通过文件得到Project:
IProject project = ((IFile)o).getProject();
通过文件得到全路径:
String path = ((IFile)o).getLocation().makeAbsolute().toFile().getAbsolutePath();
得到整个Workspace的根:
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
从根来查找资源:
IResource resource = root.findMember(new Path(containerName));
从Bundle来查找资源:
Bundle bundle = Platform.getBundle(pluginId);
URL fullPathString = BundleUtility.find(bundle, filePath); //BundleUtility类在ui里,非UI的没法用
还有其它方法:URL fileURL = FileLocator.find(bundle, new Path("some file relative path"), null);
得到Appliaction workspace:
Platform.asLocalURL(PRODUCT_BUNDLE.getEntry("")).getPath()).getAbsolutePath();
得到runtimeworkspace:
Platform.getInstanceLocation().getURL().getPath();
从编辑器来获得编辑文件:
IEditorPart editor = ((DefaultEditDomain)(parent.getViewer().getEditDomain())).getEditorPart();
IEditorInput input = editor.getEditorInput();
if(input instanceof IFileEditorInput){
IFile file = ((IFileEditorInput)input).getFile();
}
得到plugin.xml中的所以ACTION
IContributionItem[] items = getViewSite().getActionBars().getMenuManager().getItems();
for (int i = 0; i < items.length; i++) {
manager.add(items[i]);
}