﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-空谷幽人-随笔分类-Eclipse RCP</title><link>http://www.blogjava.net/wingwing/category/32959.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 16 Sep 2010 18:03:57 GMT</lastBuildDate><pubDate>Thu, 16 Sep 2010 18:03:57 GMT</pubDate><ttl>60</ttl><item><title>如何在RCP中正确加入project explorer view</title><link>http://www.blogjava.net/wingwing/archive/2010/09/16/332201.html</link><dc:creator>Li Ya Qiang</dc:creator><author>Li Ya Qiang</author><pubDate>Thu, 16 Sep 2010 09:02:00 GMT</pubDate><guid>http://www.blogjava.net/wingwing/archive/2010/09/16/332201.html</guid><wfw:comment>http://www.blogjava.net/wingwing/comments/332201.html</wfw:comment><comments>http://www.blogjava.net/wingwing/archive/2010/09/16/332201.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wingwing/comments/commentRss/332201.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wingwing/services/trackbacks/332201.html</trackback:ping><description><![CDATA[原创，转载请注明出处。<br />
<br />
今天都在折腾project explorer，主要是在RCP里加入project explorer以后，不能正常显示，同时刷新的时候又清空那个view，非常奇怪。<br />
<br />
最后按照eclipse.org的help的指导设置成功，<br />
http://help.eclipse.org/ganymede/index.jsp?topic=/org.eclipse.platform.doc.isv/guide/cnf.htm<br />
<br />
主要是要在自己的WorkbenchAdvisor类里面重写的initialize(IWorkbenchConfigurer configurer)的方法。<br />
<br />
<div style="background-color: rgb(238, 238, 238); font-size: 13px; border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; width: 98%;"><span style="color: rgb(0, 128, 128);">&nbsp;1</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;initialize(IWorkbenchConfigurer&nbsp;configurer)&nbsp;{<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;2</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IDE.registerAdapters();<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;3</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">final</span><span style="color: rgb(0, 0, 0);">&nbsp;String&nbsp;ICONS_PATH&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">icons/full/</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;4</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">final</span><span style="color: rgb(0, 0, 0);">&nbsp;String&nbsp;PATH_OBJECT&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;ICONS_PATH&nbsp;</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">obj16/</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;5</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Bundle&nbsp;ideBundle&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;Platform.getBundle(IDEWorkbenchPlugin.IDE_WORKBENCH);<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;6</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;declareWorkbenchImage(configurer,&nbsp;ideBundle,<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;7</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IDE.SharedImages.IMG_OBJ_PROJECT,&nbsp;PATH_OBJECT&nbsp;</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">prj_obj.gif</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;8</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">true</span><span style="color: rgb(0, 0, 0);">);<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;9</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;declareWorkbenchImage(configurer,&nbsp;ideBundle,<br />
</span><span style="color: rgb(0, 128, 128);">10</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IDE.SharedImages.IMG_OBJ_PROJECT_CLOSED,&nbsp;PATH_OBJECT<br />
</span><span style="color: rgb(0, 128, 128);">11</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">cprj_obj.gif</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,&nbsp;</span><span style="color: rgb(0, 0, 255);">true</span><span style="color: rgb(0, 0, 0);">);<br />
</span><span style="color: rgb(0, 128, 128);">12</span>&nbsp;<span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">13</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">super</span><span style="color: rgb(0, 0, 0);">.initialize(configurer);<br />
</span><span style="color: rgb(0, 128, 128);">14</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;configurer.setSaveAndRestore(</span><span style="color: rgb(0, 0, 255);">true</span><span style="color: rgb(0, 0, 0);">);&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: rgb(0, 128, 128);">15</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: rgb(0, 128, 128);">16</span>&nbsp;<span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">17</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;declareWorkbenchImage(IWorkbenchConfigurer&nbsp;configurer_p,<br />
</span><span style="color: rgb(0, 128, 128);">18</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Bundle&nbsp;ideBundle,&nbsp;String&nbsp;symbolicName,&nbsp;String&nbsp;path,&nbsp;</span><span style="color: rgb(0, 0, 255);">boolean</span><span style="color: rgb(0, 0, 0);">&nbsp;shared)&nbsp;{<br />
</span><span style="color: rgb(0, 128, 128);">19</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;URL&nbsp;url&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;ideBundle.getEntry(path);<br />
</span><span style="color: rgb(0, 128, 128);">20</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ImageDescriptor&nbsp;desc&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;ImageDescriptor.createFromURL(url);<br />
</span><span style="color: rgb(0, 128, 128);">21</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;configurer_p.declareImage(symbolicName,&nbsp;desc,&nbsp;shared);<br />
</span><span style="color: rgb(0, 128, 128);">22</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<br />
然后是覆盖getDefaultPageInput方法如下<br />
<br />
<div style="background-color: rgb(238, 238, 238); font-size: 13px; border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; width: 98%;"><span style="color: rgb(0, 128, 128);">1</span>&nbsp;<span style="color: rgb(0, 0, 0);">@Override<br />
</span><span style="color: rgb(0, 128, 128);">2</span>&nbsp;<span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;IAdaptable&nbsp;getDefaultPageInput()&nbsp;{<br />
</span><span style="color: rgb(0, 128, 128);">3</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;ResourcesPlugin.getWorkspace().getRoot();<br />
</span><span style="color: rgb(0, 128, 128);">4</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<br />
<br />
这次得到的教训就是以后有什么问题首先查询eclipse.org，要不浪费太多时间了。<br />
<br />
<img src ="http://www.blogjava.net/wingwing/aggbug/332201.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wingwing/" target="_blank">Li Ya Qiang</a> 2010-09-16 17:02 <a href="http://www.blogjava.net/wingwing/archive/2010/09/16/332201.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>URL中的ASCII标示符</title><link>http://www.blogjava.net/wingwing/archive/2009/05/25/277784.html</link><dc:creator>Li Ya Qiang</dc:creator><author>Li Ya Qiang</author><pubDate>Mon, 25 May 2009 02:19:00 GMT</pubDate><guid>http://www.blogjava.net/wingwing/archive/2009/05/25/277784.html</guid><wfw:comment>http://www.blogjava.net/wingwing/comments/277784.html</wfw:comment><comments>http://www.blogjava.net/wingwing/archive/2009/05/25/277784.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wingwing/comments/commentRss/277784.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wingwing/services/trackbacks/277784.html</trackback:ping><description><![CDATA[（转帖）<br />
URL中的特殊字符&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<br />
&nbsp;&nbsp;有些符号在URL中是不能直接传递的，如果要在URL中传递这些特殊符号，那么就要使用他们的编码了。编码的格式为：%加字符的ASCII码，即一个百分号%，后面跟对应字符的ASCII（16进制）码值。例如&nbsp;&nbsp;&nbsp;空格的编码值是"%20"。&nbsp;&nbsp;&nbsp;
<br />
&nbsp;&nbsp;下表中列出了一些URL特殊符号及编码&nbsp;&nbsp;&nbsp;
<br />
&nbsp;&nbsp;　&nbsp;&nbsp;&nbsp;
<br />
&nbsp;&nbsp;&nbsp;&nbsp;
<br />
&nbsp;&nbsp;　&nbsp;&nbsp;&nbsp;　&nbsp;&nbsp;&nbsp;　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;十六进制值&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<br />
&nbsp;&nbsp;1.&nbsp;&nbsp;&nbsp;+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;URL&nbsp;&nbsp;&nbsp;中+号表示空格&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%2B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<br />
&nbsp;&nbsp;2.&nbsp;&nbsp;&nbsp;空格&nbsp;&nbsp;&nbsp;URL中的空格可以用+号或者编码&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<br />
&nbsp;&nbsp;3.&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;分隔目录和子目录&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%2F&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<br />
&nbsp;&nbsp;4.&nbsp;&nbsp;&nbsp;?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;分隔实际的&nbsp;&nbsp;&nbsp;URL&nbsp;&nbsp;&nbsp;和参数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%3F&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<br />
&nbsp;&nbsp;5.&nbsp;&nbsp;&nbsp;%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;指定特殊字符&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<br />
&nbsp;&nbsp;6.&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;表示书签&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%23&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<br />
&nbsp;&nbsp;7.&nbsp;&nbsp;&nbsp;&amp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;URL&nbsp;&nbsp;&nbsp;中指定的参数间的分隔符&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%26&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<br />
&nbsp;&nbsp;8.&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;URL&nbsp;&nbsp;&nbsp;中指定参数的值&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%3D&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<img src ="http://www.blogjava.net/wingwing/aggbug/277784.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wingwing/" target="_blank">Li Ya Qiang</a> 2009-05-25 10:19 <a href="http://www.blogjava.net/wingwing/archive/2009/05/25/277784.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>（转载）RCP的一些细节部分</title><link>http://www.blogjava.net/wingwing/archive/2008/07/13/214551.html</link><dc:creator>Li Ya Qiang</dc:creator><author>Li Ya Qiang</author><pubDate>Sun, 13 Jul 2008 02:07:00 GMT</pubDate><guid>http://www.blogjava.net/wingwing/archive/2008/07/13/214551.html</guid><wfw:comment>http://www.blogjava.net/wingwing/comments/214551.html</wfw:comment><comments>http://www.blogjava.net/wingwing/archive/2008/07/13/214551.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wingwing/comments/commentRss/214551.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wingwing/services/trackbacks/214551.html</trackback:ping><description><![CDATA[来自http://cary.javaeye.com/blog/32419<br />
<br />
<span class="hilite1">ECLIPSE</span> PLUG-IN RCP
<br />
此部分有的是自己的开发中的经验，有的是在论坛中看到别人的经验。我在这里把部分觉得好的部分收集，整理。希望对大家有帮助。
<br />
1：登陆对话框
<br />
public Object run(Object args) throws Exception {
<br />
Display display = PlatformUI.createDisplay();
<br />
<br />
try {
<br />
Platform.endSplash();
<br />
/**
<br />
* 登录
<br />
*/
<br />
if (!login())
<br />
return IPlatformRunnable.EXIT_OK;
<br />
<br />
logger.info("正在初始化客户端......");
<br />
//
<br />
InitUIProgress.addInfor("初始化主界面...");
<br />
int returnCode = PlatformUI.createAndRunWorkbench(display,
<br />
new ApplicationWorkbenchAdvisor());
<br />
if (returnCode == PlatformUI.RETURN_RESTART) {
<br />
return IPlatformRunnable.EXIT_RESTART;
<br />
}
<br />
<br />
return IPlatformRunnable.EXIT_OK;
<br />
} finally {
<br />
display.dispose();
<br />
}
<br />
}
<br />
<br />
<br />
<br />
2：该写actionBar 的 ActionFactory.OPEN_PERSPECTIVE_DIALOG.create(window)
<br />
<br />
IActionBarConfigurer configurer = getActionBarConfigurer();
<br />
final IWorkbenchWindow window = configurer.getWindowConfigurer().getWindow();
<br />
<br />
MenuManager perspectiveMenu = new MenuManager("Open Perspective");
<br />
IContributionItem perspectiveList = ContributionItemFactory.PERSPECTIVES_SHORTLIST.create(window);
<br />
perspectiveMenu.add(perspectiveList);
<br />
windowMenu.add(perspectiveMenu);
<br />
<br />
3：让其viewpart显示流线型
<br />
在 WorkbenchWindowAdvisor 中的preWindowOpen（）中设置
<br />
//显示特效
<br />
PlatformUI.getPreferenceStore().setDefault(
<br />
IWorkbenchPreferenceConstants.ENABLE_ANIMATIONS, true);
<br />
//不显示传统的窗口
<br />
PlatformUI.getPreferenceStore().setDefault(
<br />
IWorkbenchPreferenceConstants.SHOW_TRADITIONAL_STYLE_TABS,
<br />
false);
<br />
<br />
<br />
4:可以使用action来做, 调用下面的方法:
<br />
<br />
IWorkbench.showPerspective(String perspectiveId, IWorkbenchWindow window)
<br />
or
<br />
IWorkbench.showPerspective(String perspectiveId, IWorkbenchWindow window, IAdaptable input)
<br />
<br />
IWorkbench和IWorkbenchWindow对象都可以在ViewPart中找到.
<br />
<br />
5:定义热键
<br />
getShell().getDisplay().addFilter(SWT.KeyDown, globEvent);
<br />
<br />
将plugin.xml里面hotkey
<br />
&lt;extension
<br />
point="org.<span class="hilite1">eclipse</span>.ui.bindings"&gt;
<br />
&lt;!--key
<br />
commandId="org.<span class="hilite1">eclipse</span>.ui.file.exit"
<br />
schemeId="org.<span class="hilite1">eclipse</span>.ui.defaultAcceleratorConfiguration"
<br />
sequence="CTRL+X"&gt;
<br />
&lt;/key --&gt;
<br />
&lt;/extension&gt;
<br />
<br />
6.如何或得RCP中的一些路径问题
<br />
从插件中获得绝对路径：
<br />
AaaaPlugin.getDefault().getStateLocation().makeAbsolute().toFile().getAbsolutePath());
<br />
<br />
<br />
通过文件得到Project：
<br />
<br />
IProject project = ((IFile)o).getProject();
<br />
<br />
<br />
通过文件得到全路径：
<br />
<br />
String path = ((IFile)o).getLocation().makeAbsolute().toFile().getAbsolutePath();
<br />
<br />
<br />
<br />
得到整个Workspace的根：
<br />
<br />
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
<br />
<br />
<br />
从根来查找资源：
<br />
<br />
IResource resource = root.findMember(new Path(containerName));
<br />
<br />
从Bundle来查找资源：
<br />
<br />
Bundle bundle = Platform.getBundle(pluginId);
<br />
URL fullPathString = BundleUtility.find(bundle, filePath); //BundleUtility类在ui里，非UI的没法用
<br />
<br />
还有其它方法：URL fileURL = FileLocator.find(bundle, new Path("some file relative path"), null); <br />
<br />
<br />
得到Appliaction workspace：
<br />
<br />
Platform.asLocalURL(PRODUCT_BUNDLE.getEntry("")).getPath()).getAbsolutePath();
<br />
<br />
得到runtimeworkspace：
<br />
Platform.getInstanceLocation().getURL().getPath();
<br />
<br />
从编辑器来获得编辑文件：
<br />
<br />
IEditorPart editor = ((DefaultEditDomain)(parent.getViewer().getEditDomain())).getEditorPart();
<br />
IEditorInput input = editor.getEditorInput();
<br />
if(input instanceof IFileEditorInput){
<br />
IFile file = ((IFileEditorInput)input).getFile();
<br />
}
<br />
<br />
得到plugin.xml中的所以ACTION
<br />
IContributionItem[] items = getViewSite().getActionBars().getMenuManager().getItems();
<br />
for (int i = 0; i &lt; items.length; i++) {
<br />
manager.add(items[i]);
<br />
}<br />
<br />
<img src ="http://www.blogjava.net/wingwing/aggbug/214551.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wingwing/" target="_blank">Li Ya Qiang</a> 2008-07-13 10:07 <a href="http://www.blogjava.net/wingwing/archive/2008/07/13/214551.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何在view里得到在workbechwindow里注册到menu的action</title><link>http://www.blogjava.net/wingwing/archive/2008/07/13/214547.html</link><dc:creator>Li Ya Qiang</dc:creator><author>Li Ya Qiang</author><pubDate>Sun, 13 Jul 2008 01:55:00 GMT</pubDate><guid>http://www.blogjava.net/wingwing/archive/2008/07/13/214547.html</guid><wfw:comment>http://www.blogjava.net/wingwing/comments/214547.html</wfw:comment><comments>http://www.blogjava.net/wingwing/archive/2008/07/13/214547.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wingwing/comments/commentRss/214547.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wingwing/services/trackbacks/214547.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; （本人原创，转载请注明出处） &nbsp;  <br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 上周五在项目中遇到一个棘手的问题，需要在自己定义的view中得到在workbechwindow里注册到menu的action。这个action不是通过扩展扩展点actionset定义的，就是通过继承Action对象来定义的。经过一番思索后，感觉有两条路可走：<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 1.&nbsp; 让这个action继承IPartListener接口，并注册到那个view中，这样在view中可以通过getListeners方法得到注册到这个view中的所有Listener列表，再通过id找到这个action，并改变这个action的状态。但是在后来遇到一个问题，这个action由于是在perspective的ApplicatonActionBarAdvisor的方法中实例化的，比view先初始化，故在aciton中无法得到这个view的实例，因此无法把action注册到view中。不知道是不是我的理解有误，如果这条路可以走通，请达人帮忙。<br />
<br />
&nbsp;&nbsp;&nbsp; 2. 然后是在view中调用相应的方法来取得这个action。刚开始时，通过this.getSite().<span style="color: #000000;">getWorkbenchWindow()方法始终无法得到actionbars，只有强制类型转换到WorkbenchWindow才能得到actionbars，</span>主要是通过以下代码：<br />
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">WWinActionBars </span><span style="color: #000000;">winBars </span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp; ((WorkbenchWindow)&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.getSite().<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getWorkbenchWindow()).getActionBars();<br />
IAction&nbsp;action&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #000000;">winBars </span><span style="color: #000000;">.getGlobalActionHandler(</span><span style="color: #000000;">"</span><span style="color: #000000;">actionID</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
action.setEnable(</span><span style="color: #0000ff;">true</span><span style="color: #000000;">);</span></div>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 但是WWinActionBars类并没有实现通过action的ID得到这个action对象的<span style="color: #000000;">getGlobalActionHandler方法，该method只返回null，因此此方法也无法达成目标。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 就在我无计可施的时候，只能想到用最笨的办法来实现了，就是在view中得到管理这个aciton的MenuManager，并通过MenuManager来得到和action相关联的MenuItem，最后改变MenuItem的状态来改变action。主要代码如下：<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; WWinActionBars winBars&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;((WorkbenchWindow)&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.getSite().<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getWorkbenchWindow()).getActionBars();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IContributionItem[] contributionItems&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #000000;">winBars </span><span style="color: #000000;">.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getMenuManager().getItems();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;"> </span><span style="color: #000000;">contributionItems </span><span style="color: #000000;">.length;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">contributionItems</span><span style="color: #000000;">[i]&nbsp;</span><span style="color: #0000ff;">instanceof</span><span style="color: #000000;">&nbsp;MenuManager)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MenuManager&nbsp;menuM </span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(MenuManager)</span><span style="color: #000000;">contributionItems </span><span style="color: #000000;">[i];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">menuM </span><span style="color: #000000;">.getId().equals(</span><span style="color: #000000;">"</span><span style="color: #000000;">menumanagerID"</span><span style="color: #000000;">))&nbsp;{ </span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MenuItem[]&nbsp;menuItems&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #000000;">menuM</span><span style="color: #000000;">.getMenu().getItems();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;j&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;j&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;"> </span><span style="color: #000000;">menuItems</span><span style="color: #000000;">.length;&nbsp;j</span><span style="color: #000000;">++</span><span style="color: #000000;">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">menuItems </span><span style="color: #000000;">[j].getText().equals(</span><span style="color: #000000;">"actionText</span><span style="color: #000000;">"</span><span style="color: #000000;">))&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">menuItems </span><span style="color: #000000;">[j].setEnable(true);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;  <br />
</span></div>
<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
</span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 经过这次研究，对SWT和JFace的menu管理有了更深的理解，如果中间有什么问题，请达人们指出来，大家一起学习，谢谢！<br />
<br />
<img src ="http://www.blogjava.net/wingwing/aggbug/214547.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wingwing/" target="_blank">Li Ya Qiang</a> 2008-07-13 09:55 <a href="http://www.blogjava.net/wingwing/archive/2008/07/13/214547.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>