??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美日韩电影一区,亚洲一区二区三区中文字幕在线 ,国产91对白在线播放http://www.aygfsteel.com/eroself/category/27855.html关于人生的程式,在这里谱?.....zh-cnMon, 25 Feb 2008 11:28:33 GMTMon, 25 Feb 2008 11:28:33 GMT60RCPpȝ开?/title><link>http://www.aygfsteel.com/eroself/archive/2008/02/25/181955.html</link><dc:creator>D?/dc:creator><author>D?/author><pubDate>Mon, 25 Feb 2008 04:04:00 GMT</pubDate><guid>http://www.aygfsteel.com/eroself/archive/2008/02/25/181955.html</guid><wfw:comment>http://www.aygfsteel.com/eroself/comments/181955.html</wfw:comment><comments>http://www.aygfsteel.com/eroself/archive/2008/02/25/181955.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/eroself/comments/commentRss/181955.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/eroself/services/trackbacks/181955.html</trackback:ping><description><![CDATA[     摘要: 摘自Qhttp://book.csdn.net/bookfiles/493/10049317083.shtml 从本章开始,带领大家进入激动h?j)的Eclipse RCP开发之旅。本章先经Ҏ(gu)系l的架子搭徏hQ例如菜单、工h、主控界面等{,至于pȝ各功能的实现l节Q在随后的章节中层层剥开。ؓ(f)?jin)节省篇q,从本章开始,对于大量需要导入的c,在程序代码中予以省略?本章主要学?fn)到?..  <a href='http://www.aygfsteel.com/eroself/archive/2008/02/25/181955.html'>阅读全文</a><img src ="http://www.aygfsteel.com/eroself/aggbug/181955.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/eroself/" target="_blank">D?/a> 2008-02-25 12:04 <a href="http://www.aygfsteel.com/eroself/archive/2008/02/25/181955.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>扩展Eclipse视图弹出菜单http://www.aygfsteel.com/eroself/archive/2008/02/23/181559.htmlD?/dc:creator>D?/author>Sat, 23 Feb 2008 02:37:00 GMThttp://www.aygfsteel.com/eroself/archive/2008/02/23/181559.htmlhttp://www.aygfsteel.com/eroself/comments/181559.htmlhttp://www.aygfsteel.com/eroself/archive/2008/02/23/181559.html#Feedback0http://www.aygfsteel.com/eroself/comments/commentRss/181559.htmlhttp://www.aygfsteel.com/eroself/services/trackbacks/181559.html转自Qhttp://cnfree2000.spaces.live.com/blog/cns!6201144F025F9D77!426.entry

Eclipse里每U编辑器都有它自q视图Q有时候我们需要在上面d自己的功能,扩充视图弹出菜单则是必不可少的工作之一?

在一个视囄Popup Menu里增加一个菜单项Q含?U方式:(x)

1、viewerContributionQ也是通过视图的id。这样只有视图id和给定的id一致的时候,它的弹出菜单才会(x)增加我们定义的菜单项?

2、objectContributionQ通过对象cd。当在视N选定的对象类型和l定的一致时Q在视图的弹?gu)单增加我们定义的菜单V?

菜单的Action需要承org.eclipse.ui.actions.ActionDelegateQ然后实现特D的View的ActionDelegate接口。比如要扩展Java~辑器:(x)

public class FinderActionDelegate extends ActionDelegate implements
        IEditorActionDelegate {

来看看插件的Plugin.xml的组成部分:(x)

viewerContribution形式Q?
   <extension
         point="org.eclipse.ui.popupMenus">
      <viewerContribution
            targetID="#TextEditorContext"
            id="com.cnfree.finder.editor">
         <action
               label="查找最大ID"
               icon="icon/search.gif"
               helpContextId="com.cnfree.finder.finderaction"
               class="com.cnfree.finder.FinderActionDelegate"
               menubarPath="additions"
               enablesFor="+"
               id="com.cnfree.finder">
         </action>
      </viewerContribution>
      <viewerContribution
            targetID="#CompilationUnitEditorContext"
            id="com.cnfree.finder.editor">
         <action
               label="查找最大ID"
               icon="icon/search.gif"
               helpContextId="com.cnfree.finder.finderaction"
               class="com.cnfree.finder.FinderActionDelegate"
               menubarPath="additions"
               enablesFor="*"
               id="com.cnfree.finder">
         </action>
      </viewerContribution>
   </extension> < br />   <extension
         point="org.eclipse.ui.editorActions">
   </extension>

q里我们需要知道扩展的视图它的菜单在Eclipse插g注册表里定义的idQ稍后我?x)附上Eclipse插g菜单ID注册表)(j)。比如Java~辑器对应的ID为:(x)
#TextEditorContext ?nbsp;#CompilationUnitEditorContextQ我们定义好 targetIDQ就把我们的插gid指向视图菜单的id?jin)。这样Java~辑器就?x)添加我们的菜单?jin)?

<!ATTLIST action
   id            CDATA #REQUIRED
   label         CDATA #REQUIRED
   menubarPath   CDATA #IMPLIED
   toolbarPath   CDATA #IMPLIED
   icon          CDATA #IMPLIED
   disabledIcon  CDATA #IMPLIED
   hoverIcon     CDATA #IMPLIED
   tooltip       CDATA #IMPLIED
   helpContextId CDATA #IMPLIED
   style         (push|radio|toggle) "push"
   state         (true | false) 
   class         CDATA #REQUIRED
   enablesFor    CDATA #IMPLIED>
< br />此元素定义用户可在用L(fng)面中调用的操作?


  • id Q?nbsp;用作此操作的引用的唯一标识?nbsp;
  • label Q?nbsp;用作菜单Ҏ(gu)本或工具栏按钮标{可翻译名U。此名称可包括助记符信息?
  • menubarPath Q?nbsp;用来指定下拉菜单中此操作位置的以斜杠Q?#8220;/”Q定界的路径。\径中的每个标讎ͼ最后一个标记除外)(j)都必表C层ơ结构中现有菜单的有效标识。最后一个标记表C操作添加到其中的命名组。如果省略了(jin)路径Q则此操作将不会(x)出现在下拉菜单中?nbsp;
  • toolbarPath Q?nbsp;目标视图的本地工h内的命名l。如果该l不存在Q则创建它。如果省略该,则操作将不会(x)出现在本地工h中?nbsp;
  • icon Q?nbsp;用来在操作的上下文中可视地表C操作的图标的相对\径。如果省略该且操作出现在工h中,?#8220;工作?#8221;用占位符图标。该路径是相对于d插g?nbsp;plugin.xml 文g的位|的。图标将出现在工h中,但是不会(x)出现在下拉菜单中?
  • disabledIcon Q?nbsp;当禁用操作时Q用于在操作的上下文中可视地表示操作的图标的相对路径。如果省略该,则正常图标将变灰。该路径是相对于d插g?nbsp;plugin.xml 文g的位|的。禁用的图标出现在工具栏中Q但是不?x)出现在下拉菜单中?
  • hoverIcon Q?nbsp;当鼠标指针位于操作上Ӟ用来在操作的上下文中可视地表C操作的图标的相对\径。如果省略此,则将使用正常图标。该路径是相对于d插g?nbsp;plugin.xml 文g的位|的?
  • tooltip Q?nbsp;表示操作的工hC的可翻译文本。仅当操作出现在工具栏中时才使用?
  • helpContextId Q?nbsp;一个指C此操作的帮助上下文的唯一标识。如果操作作单项出现Q则在突出显C菜单Ҏ(gu)?nbsp;F1 键将昄帮助?
  • style Q?nbsp;用来定义操作的用L(fng)面样式类型的可选属性。如果定义了(jin)此项Q则属性值将是下列其中一:(x) 
       push Q?nbsp;作ؓ(f)普通菜单项或工具项?nbsp;
       radio Q?nbsp;作ؓ(f)单选样式菜单项或工具项。同一菜单或工hl内h单选样式的操作相当于单选按钮集。初始值由 state 属性指定?
       toggle Q?nbsp;作ؓ(f)复选样式菜单项或切换工具项。初始值由 state 属性指定?nbsp;
  • state Q?nbsp;指示初始状态(true ?nbsp;falseQ的可选属性,?nbsp;style 属性具有?nbsp;radio ?nbsp;toggle 时用?
  • class Q?nbsp;实现 org.eclipse.ui.IViewActionDelegate 的标准类的名U?
  • enablesFor Q?nbsp;指示必须满才能启用操作的选择计数的倹{如果指定了(jin)此属性ƈ且满x(chng)Ӟ则启用操作。如果条件不满Q则用操作。如果没有指定Q何属性,则对选择?jin)Q意数目的启用操作。下列属性格式受支持Q?nbsp;! Q?nbsp;选择?jin)零?nbsp; 
       ? Q?nbsp;选择?jin)零?gu)一?nbsp; 
       + Q?nbsp;选择?jin)一Ҏ(gu)多项 
       multiple, 2+ Q?nbsp;选择?jin)两?gu)多项 
       n Q?nbsp;选择?jin)精数目的V例如:(x)nablesFor=" 4" 仅当选择?nbsp;4 个项时才启用操作?nbsp;
       * Q?nbsp;选择?jin)Q意数目的?

objectContribution形式Q?

   <objectContribution objectClass="com.cnfree.action.IOpenable" >
      <action
            id="com.cnfree.open"
            menubarPath="new.ext"
            definitionID="com.cnfree.open.selection"
            label="&Open@Ctrl+O"
            tooltip="Open the selected item(s)"
            helpContextId="com.cnfree.open.selection"
            icon="icon/open.gif"
            class="com.cnfree.action.Op enSelectedActionDelegate"
            enablesFor="+">
      </action>
   </objectContribution>

action Open实现?jin)IOpenableQ这样就意味着Q所有包含了(jin)IOpenable对象的视图,当我们选中其中的IOpenable对象Ӟ它的弹出菜单都会(x)增加我们自定义的菜单V?

附带的例子:(x)
cnfree editor plugin

使用说明Q徏立一个Java文gQ在它的注释里添?nbsp;xxx.yyy QxxxZ个类名,yyyZ个三位数IDQ比如cnfee.100,cnfree.101,cnfree.102Q在Java透视N打开q个Java文gQ右键菜单会(x)有一个选项Q查找最大IDQ打开后输入cnfreeQ它?yu)׃?x)自动扑ֈcnfree.102Qƈ该字符串高?sh)显C?

Eclipse插g菜单ID注册表参考:(x)http://www.jdg2e.com/ch21.actions.table/doc/

参考资料:(x)
http://www.eclipsesource.com/EN_ARCHIVE/etips_07072004.html 
Eclipse帮助Q?a target="_blank">org.eclipse.platform.doc.isv/guide/workbench_basicext_popupMenus.htm



]]>
扩展Eclipse视图弹出菜单Q二Q?/title><link>http://www.aygfsteel.com/eroself/archive/2008/02/23/181558.html</link><dc:creator>D?/dc:creator><author>D?/author><pubDate>Sat, 23 Feb 2008 02:29:00 GMT</pubDate><guid>http://www.aygfsteel.com/eroself/archive/2008/02/23/181558.html</guid><wfw:comment>http://www.aygfsteel.com/eroself/comments/181558.html</wfw:comment><comments>http://www.aygfsteel.com/eroself/archive/2008/02/23/181558.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/eroself/comments/commentRss/181558.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/eroself/services/trackbacks/181558.html</trackback:ping><description><![CDATA[<p align="left">转自Q?a href="http://www.aygfsteel.com/cnfree/archive/2006/06/16/53326.html">http://www.aygfsteel.com/cnfree/archive/2006/06/16/53326.html</a><br /> <br /> </p> <div id="wmqeeuq" class="postText"> <p><font face="Courier New" size="2"><a class="" title="" target="_blank"><font color="#000080">上一文?/font></a>我们知道?jin)Eclipse弹出菜单的基本用法。其实Eclipse的弹?gu)单可以用来做很多文章Q简单一点的Ҏ(gu)文gcdQ我们可以进行不同的文g操作Q比如Ant的build.xml我们可以用来buildQJava文g我们可以用Java Editor打开Q这些基于文件类型的操作我们都可以很Ҏ(gu)的实现。但是还有一U情况,如果文gcd一P我们惌行不同的操作Q该怎么实现呢?实际上这L(fng)应用很多Q比如同hJava文gQ含有mainҎ(gu)的Java文g有Run和Debug的选项Q其它的都没有。还有现在的框架都是ZXML文gq行配置的,如果一个项目用了(jin)多个框架Q我们怎么Ҏ(gu)不同的XML文gq行框架的区分呢Q答案就是enablement的test?/font> </p> <p class="code" id="dtd"><font face="Courier New" size="2"><!ELEMENT </font><a name="e.test"><font face="Courier New" size="2">test</font> </a><font face="Courier New" size="2">EMPTY><br /> <!ATTLIST test<br /> property CDATA #REQUIRED <br /> args     CDATA #IMPLIED <br /> value    CDATA #IMPLIED></font> </p> <p><font face="Courier New" size="2"></font></p> <p class="ConfigMarkup" id="elementDesc"><font face="Courier New" size="2">This element is used to evaluate the property state of the object in focus. The set of testable properties can be extended using the propery tester extension point. The test expression returns EvaluationResult.NOT_LOADED if teh property tester doing the actual testing isn't loaded yet.</font> </p> <ul class="ConfigMarkup" id="attlistDesc"> <li><font face="Courier New"><font size="2"><strong>property</strong> - the name of an object's property to test. </font></font> <li><font face="Courier New"><font size="2"><strong>args</strong> - additional arguments passed to the property tester. Multiple arguments are seperated by commas. Each individual argument is converted into a Java base type using the same rules as defined for the value attribute of the test expression. </font></font> <li><font face="Courier New"><font size="2"><strong>value</strong> - the expected value of the property. Can be omitted if the property is a boolean property. The test expression is supposed to return EvaluationResult.TRUE if the property matches the value and EvaluationResult.FALSE otherwise. The value attribute is converted into a Java base type using the following rules: </font></font> <ul> <li><font face="Courier New" size="2">the string "true" is converted into Boolean.TRUE </font> <li><font face="Courier New" size="2">the string "false" is converted into Boolean.FALSE </font> <li><font face="Courier New" size="2">if the string contains a dot then the interpreter tries to convert the value into a Float object. If this fails the string is treated as a java.lang.String </font> <li><font face="Courier New" size="2">if the string only consists of numbers then the interpreter converts the value in an Integer object. </font> <li><font face="Courier New" size="2">in all other cases the string is treated as a java.lang.String </font> <li><font face="Courier New" size="2">the conversion of the string into a Boolean, Float, or Integer can be suppressed by surrounding the string with single quotes. For example, the attribute value="'true'" is converted into the string "true" </font></li> </ul> </li> </ul> <p><br /> <font face="Courier New" size="2">比如我们要让含有mainҎ(gu)的Java文g它的右键弹出菜单包含一个额外的选项“This is main class”Q需要编写如下的Plugin.xmlQ?/font> </p> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><font face="Courier New"><font size="2"><span style="color: #0000ff"><</span> <span style="color: #800000">plugin</span> <span style="color: #0000ff">></span> </font></font><span style="color: #000000"><br /> <font face="Courier New" size="2">   </font> </span><span style="color: #0000ff"><font face="Courier New" size="2"><</font> </span><font face="Courier New"><font size="2"><span style="color: #800000">extension<br />          </span> <span style="color: #ff0000">point</span> <span style="color: #0000ff">="org.eclipse.ui.popupMenus"</span> <span style="color: #0000ff">></span> </font></font><span style="color: #000000"><br /> <font face="Courier New" size="2">      </font> </span><span style="color: #0000ff"><font face="Courier New" size="2"><</font> </span><font face="Courier New"><font size="2"><span style="color: #800000">objectContribution<br />         </span> <span style="color: #ff0000">id</span> <span style="color: #0000ff">="Advanced.PopupMenus"</span> </font></font><span style="color: #ff0000"><br /> <font face="Courier New" size="2">        objectClass</font> </span><font face="Courier New"><font size="2"><span style="color: #0000ff">="java.lang.Object"</span> <span style="color: #0000ff">></span> </font></font><span style="color: #000000"><br /> <font face="Courier New" size="2">     </font> </span><font face="Courier New"><font size="2"><span style="color: #0000ff"><</span> <span style="color: #800000">action </span> <span style="color: #ff0000">id</span> <span style="color: #0000ff">="Advanced.PopupMenus.Action"</span> </font></font><span style="color: #ff0000"><br /> <font face="Courier New" size="2">        label</font> </span><span style="color: #0000ff"><font face="Courier New" size="2">="AdvancedPopupMenus"</font> </span><span style="color: #ff0000"><br /> <font face="Courier New" size="2">        style</font> </span><span style="color: #0000ff"><font face="Courier New" size="2">="pulldown"</font> </span><span style="color: #ff0000"><br /> <font face="Courier New" size="2">        menubarPath</font> </span><span style="color: #0000ff"><font face="Courier New" size="2">="additions"</font> </span><span style="color: #ff0000"><br /> <font face="Courier New" size="2">        class</font> </span><span style="color: #0000ff"><font face="Courier New" size="2">="advancedpopupmenus.popup.actions.AdvancedPopupMenusAction"</font> </span><font face="Courier New"><font size="2"><span style="color: #ff0000"> <br />         enablesFor</span> <span style="color: #0000ff">="+"</span> <span style="color: #0000ff">></span> </font></font><span style="color: #000000"><br /> <font face="Courier New" size="2">     </font> </span><font face="Courier New"><font size="2"><span style="color: #0000ff"></</span> <span style="color: #800000">action</span> <span style="color: #0000ff">></span> </font></font><span style="color: #000000"><br /> <font face="Courier New" size="2">     </font> </span><font face="Courier New"><font size="2"><span style="color: #0000ff"><</span> <span style="color: #800000">enablement</span> <span style="color: #0000ff">></span> </font></font><span style="color: #000000"><br /> <font face="Courier New" size="2">          </font> </span><font face="Courier New"><font size="2"><span style="color: #0000ff"><</span> <span style="color: #800000">test </span> <span style="color: #ff0000">property</span> <span style="color: #0000ff">="advancedpopupmenus.popup.visable"</span> <span style="color: #0000ff">/></span> </font></font><span style="color: #000000"><br /> <font face="Courier New" size="2">     </font> </span><font face="Courier New"><font size="2"><span style="color: #0000ff"></</span> <span style="color: #800000">enablement</span> <span style="color: #0000ff">></span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">  <br />      </span> <span style="color: #0000ff"></</span> <span style="color: #800000">objectContribution</span> <span style="color: #0000ff">></span> </font></font><span style="color: #000000"><br /> <font face="Courier New" size="2">   </font> </span><font face="Courier New"><font size="2"><span style="color: #0000ff"></</span> <span style="color: #800000">extension</span> <span style="color: #0000ff">></span> </font></font><span style="color: #000000"><br /> <font face="Courier New" size="2">   </font> </span><font face="Courier New"><font size="2"><span style="color: #0000ff"><</span> <span style="color: #800000">extension </span> <span style="color: #ff0000">point</span> <span style="color: #0000ff">="org.eclipse.core.expressions.propertyTesters"</span> <span style="color: #0000ff">></span> </font></font><span style="color: #000000"><br /> <font face="Courier New" size="2">   </font> </span><span style="color: #0000ff"><font face="Courier New" size="2"><</font> </span><font face="Courier New"><font size="2"><span style="color: #800000">propertyTester<br />    </span> <span style="color: #ff0000">namespace</span> <span style="color: #0000ff">="advancedpopupmenus.popup"</span> </font></font><span style="color: #ff0000"><br /> <font face="Courier New" size="2">   properties</font> </span><span style="color: #0000ff"><font face="Courier New" size="2">="visable"</font> </span><span style="color: #ff0000"><br /> <font face="Courier New" size="2">   type</font> </span><span style="color: #0000ff"><font face="Courier New" size="2">="java.lang.Object"</font> </span><span style="color: #ff0000"><br /> <font face="Courier New" size="2">   class</font> </span><span style="color: #0000ff"><font face="Courier New" size="2">="advancedpopupmenus.popup.actions.VisablePropertyTester"</font> </span><span style="color: #ff0000"><br /> <font face="Courier New" size="2">   id</font> </span><font face="Courier New"><font size="2"><span style="color: #0000ff">="advancedpopupmenus.popup.propertyTesters.visable"</span> <span style="color: #0000ff">></span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">  <br />    </span> <span style="color: #0000ff"></</span> <span style="color: #800000">propertyTester</span> <span style="color: #0000ff">></span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">      <br />    </span> <span style="color: #0000ff"></</span> <span style="color: #800000">extension</span> <span style="color: #0000ff">></span> </font></font><span style="color: #000000"><br /> </span><font face="Courier New"><font size="2"><span style="color: #0000ff"></</span> <span style="color: #800000">plugin</span> <span style="color: #0000ff">></span> </font></font></div> <p><font face="Courier New" size="2">我们需要检在当前情况下是否需要显C个菜单项Q用扩展点</font> <font color="#0000ff"><font face="Courier New" size="2">org.eclipse.core.expressions.propertyTesters</font> <font face="Courier New" color="#000000" size="2">Q?br /> </font></font><font face="Courier New" color="#000000" size="2"><!ELEMENT propertyTester EMPTY><br /> </font><font face="Courier New" color="#000000" size="2"><!ATTLIST propertyTester<br /> </font><font face="Courier New" color="#000000" size="2">id         CDATA #REQUIRED<br /> </font><font face="Courier New" color="#000000" size="2">type       CDATA #REQUIRED<br /> </font><font face="Courier New" color="#000000" size="2">namespace  CDATA #REQUIRED<br /> </font><font face="Courier New"><font size="2"><font color="#000000">properties CDATA #REQUIRED<br /> </font><font color="#000000">class      CDATA #REQUIRED></font> </font></font></p> <p><font color="#000000"><font face="Courier New"><font size="2"><strong>id</strong> - unique identifier for the property tester <br /> <strong>type</strong> - the type to be extended by this property tester <br /> <strong>namespace</strong> - a unique id determining the name space the properties are added to <br /> <strong>properties</strong> - a comma separated list of properties provided by this property tester <br /> <strong>class</strong> - the name of the class that implements the testing methods. The class must be public and extend <font color="#ff0000">org.eclipse.core.expressions.PropertyTester</font> with a public 0-argument constructor. <br /> <br /> q里只须注意</font> </font></font><span style="color: #800000"><font face="Courier New" color="#000000" size="2">propertyTester的namespace和properties正好对应test的property?br /> </font></span><span style="color: #800000"><font color="#000000"><br /> <font face="Courier New" size="2">至于(g)的逻辑我们在advancedpopupmenus.popup.actions.VisablePropertyTester中实玎ͼq个cdȝ承自<font color="#ff0000">org.eclipse.core.expressions.PropertyTester</font>?/font> </font></span></p> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff"><font face="Courier New" size="2">package</font> </span><font face="Courier New"><font size="2"><span style="color: #000000"> advancedpopupmenus.popup.actions;<br /> <br /> </span><span style="color: #0000ff">import</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000"> org.eclipse.core.expressions.PropertyTester;<br /> </span><span style="color: #0000ff">import</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000"> org.eclipse.jdt.core.IMethod;<br /> </span><span style="color: #0000ff">import</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000"> org.eclipse.jdt.core.IType;<br /> </span><span style="color: #0000ff">import</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000"> org.eclipse.jdt.core.JavaModelException;<br /> </span><span style="color: #0000ff">import</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000"> org.eclipse.jdt.internal.core.CompilationUnit;<br /> <br /> </span><span style="color: #0000ff">public</span> <span style="color: #000000"> </span> <span style="color: #0000ff">class</span> <span style="color: #000000"> VisablePropertyTester </span> <span style="color: #0000ff">extends</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000"> PropertyTester<br /> {<br />     </span> <span style="color: #0000ff">public</span> <span style="color: #000000"> </span> <span style="color: #0000ff">boolean</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000"> test( Object receiver, String property, Object[] args,<br />             Object expectedValue )<br />     {<br />         </span> <span style="color: #0000ff">if</span> <span style="color: #000000"> ( </span> <span style="color: #000000">!</span> <span style="color: #000000">( receiver </span> <span style="color: #0000ff">instanceof</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000"> CompilationUnit ) )<br />             </span> <span style="color: #0000ff">return</span> <span style="color: #000000"> </span> <span style="color: #0000ff">false</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">;<br />         CompilationUnit unit </span> <span style="color: #000000">=</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000"> (CompilationUnit) receiver;<br />         </span> <span style="color: #0000ff">try</span> </font></font><span style="color: #000000"><br /> <font face="Courier New" size="2">        {<br />             IType[] types </font> </span><span style="color: #000000"><font face="Courier New" size="2">=</font> </span><font face="Courier New"><font size="2"><span style="color: #000000"> unit.getTypes( );<br />             </span> <span style="color: #0000ff">if</span> <span style="color: #000000"> ( types </span> <span style="color: #000000">==</span> <span style="color: #000000"> </span> <span style="color: #0000ff">null</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000"> )<br />                 </span> <span style="color: #0000ff">return</span> <span style="color: #000000"> </span> <span style="color: #0000ff">false</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">;<br />             </span> <span style="color: #0000ff">for</span> <span style="color: #000000"> ( </span> <span style="color: #0000ff">int</span> <span style="color: #000000"> i </span> <span style="color: #000000">=</span> <span style="color: #000000"> </span> <span style="color: #000000">0</span> <span style="color: #000000">; i </span> <span style="color: #000000"><</span> <span style="color: #000000"> types.length; i</span> <span style="color: #000000">++</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000"> )<br />             {<br />                 IMethod[] methods </span> <span style="color: #000000">=</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000"> types[i].getMethods( );<br />                 </span> <span style="color: #0000ff">if</span> <span style="color: #000000"> ( methods </span> <span style="color: #000000">==</span> <span style="color: #000000"> </span> <span style="color: #0000ff">null</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000"> )<br />                     </span> <span style="color: #0000ff">return</span> <span style="color: #000000"> </span> <span style="color: #0000ff">false</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">;<br />                 </span> <span style="color: #0000ff">for</span> <span style="color: #000000"> ( </span> <span style="color: #0000ff">int</span> <span style="color: #000000"> j </span> <span style="color: #000000">=</span> <span style="color: #000000"> </span> <span style="color: #000000">0</span> <span style="color: #000000">; j </span> <span style="color: #000000"><</span> <span style="color: #000000"> methods.length; j</span> <span style="color: #000000">++</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000"> )<br />                 {<br />                     </span> <span style="color: #0000ff">if</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000"> ( methods[j].isMainMethod( ) )<br />                         </span> <span style="color: #0000ff">return</span> <span style="color: #000000"> </span> <span style="color: #0000ff">true</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">;<br />                 }<br />             }<br />         }<br />         </span> <span style="color: #0000ff">catch</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000"> ( JavaModelException e )<br />         {<br />             e.printStackTrace( );<br />         }<br />         </span> <span style="color: #0000ff">return</span> <span style="color: #000000"> </span> <span style="color: #0000ff">false</span> </font></font><span style="color: #000000"><font face="Courier New" size="2">;<br />     }<br /> }<br /> </font></span></div> <p><font face="Courier New" size="2">我们只要判断接受的Java文g中是否含有mainҎ(gu)Q如果有Q则q回TrueQ没有则q回False?br /> <br /> 如果我们是要接受一个Web开发的配置文gQ我们可以这样写Q?/font> </p> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><font face="Courier New"><font size="2"><span style="color: #0000ff"><</span> <span style="color: #800000">plugin</span> <span style="color: #0000ff">></span> </font></font><span style="color: #000000"><br /> <font face="Courier New" size="2">   </font> </span><span style="color: #0000ff"><font face="Courier New" size="2"><</font> </span><font face="Courier New"><font size="2"><span style="color: #800000">extension<br />          </span> <span style="color: #ff0000">point</span> <span style="color: #0000ff">="org.eclipse.ui.popupMenus"</span> <span style="color: #0000ff">></span> </font></font><span style="color: #000000"><br /> <font face="Courier New" size="2">      </font> </span><span style="color: #0000ff"><font face="Courier New" size="2"><</font> </span><font face="Courier New"><font size="2"><span style="color: #800000">objectContribution<br />         </span> <span style="color: #ff0000">id</span> <span style="color: #0000ff">="Advanced.PopupMenus"</span> </font></font><span style="color: #ff0000"><br /> <font face="Courier New" size="2">        objectClass</font> </span><span style="color: #0000ff"><font face="Courier New" size="2">="org.eclipse.core.resources.IFile"</font> </span><span style="color: #ff0000"><br /> <font face="Courier New" size="2">        nameFilter</font> </span><font face="Courier New"><font size="2"><span style="color: #0000ff">="*.xml"</span> <span style="color: #0000ff">></span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">   <br />         </span> <span style="color: #0000ff"><</span> <span style="color: #800000">action </span> <span style="color: #ff0000">id</span> <span style="color: #0000ff">="Advanced.PopupMenus.Action"</span> </font></font><span style="color: #ff0000"><br /> <font face="Courier New" size="2">           label</font> </span><span style="color: #0000ff"><font face="Courier New" size="2">="This is web xml"</font> </span><span style="color: #ff0000"><br /> <font face="Courier New" size="2">           style</font> </span><span style="color: #0000ff"><font face="Courier New" size="2">="pulldown"</font> </span><span style="color: #ff0000"><br /> <font face="Courier New" size="2">           menubarPath</font> </span><span style="color: #0000ff"><font face="Courier New" size="2">="additions"</font> </span><span style="color: #ff0000"><br /> <font face="Courier New" size="2">           class</font> </span><span style="color: #0000ff"><font face="Courier New" size="2">="advancedpopupmenus.popup.actions.AdvancedPopupMenusAction"</font> </span><font face="Courier New"><font size="2"><span style="color: #ff0000">    <br />            enablesFor</span> <span style="color: #0000ff">="+"</span> <span style="color: #0000ff">></span> </font></font><span style="color: #000000"><br /> <font face="Courier New" size="2">        </font> </span><font face="Courier New"><font size="2"><span style="color: #0000ff"></</span> <span style="color: #800000">action</span> <span style="color: #0000ff">></span> </font></font><span style="color: #000000"><br /> <font face="Courier New" size="2">        </font> </span><font face="Courier New"><font size="2"><span style="color: #0000ff"><</span> <span style="color: #800000">enablement</span> <span style="color: #0000ff">></span> </font></font><span style="color: #000000"><br /> <font face="Courier New" size="2">             </font> </span><font face="Courier New"><font size="2"><span style="color: #0000ff"><</span> <span style="color: #800000">test </span> <span style="color: #ff0000">property</span> <span style="color: #0000ff">="advancedpopupmenus.popup.visable"</span> <span style="color: #0000ff">/></span> </font></font><span style="color: #000000"><br /> <font face="Courier New" size="2">        </font> </span><font face="Courier New"><font size="2"><span style="color: #0000ff"></</span> <span style="color: #800000">enablement</span> <span style="color: #0000ff">></span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">  <br />      </span> <span style="color: #0000ff"></</span> <span style="color: #800000">objectContribution</span> <span style="color: #0000ff">></span> </font></font><span style="color: #000000"><br /> <font face="Courier New" size="2">   </font> </span><font face="Courier New"><font size="2"><span style="color: #0000ff"></</span> <span style="color: #800000">extension</span> <span style="color: #0000ff">></span> </font></font><span style="color: #000000"><br /> <font face="Courier New" size="2">   </font> </span><font face="Courier New"><font size="2"><span style="color: #0000ff"><</span> <span style="color: #800000">extension </span> <span style="color: #ff0000">point</span> <span style="color: #0000ff">="org.eclipse.core.expressions.propertyTesters"</span> <span style="color: #0000ff">></span> </font></font><span style="color: #000000"><br /> <font face="Courier New" size="2">      </font> </span><span style="color: #0000ff"><font face="Courier New" size="2"><</font> </span><font face="Courier New"><font size="2"><span style="color: #800000">propertyTester<br />             </span> <span style="color: #ff0000">namespace</span> <span style="color: #0000ff">="advancedpopupmenus.popup"</span> </font></font><span style="color: #ff0000"><br /> <font face="Courier New" size="2">            properties</font> </span><span style="color: #0000ff"><font face="Courier New" size="2">="visable"</font> </span><span style="color: #ff0000"><br /> <font face="Courier New" size="2">            type</font> </span><span style="color: #0000ff"><font face="Courier New" size="2">="org.eclipse.core.resources.IFile"</font> </span><span style="color: #ff0000"><br /> <font face="Courier New" size="2">            class</font> </span><span style="color: #0000ff"><font face="Courier New" size="2">="advancedpopupmenus.popup.actions.VisablePropertyTester"</font> </span><span style="color: #ff0000"><br /> <font face="Courier New" size="2">            id</font> </span><font face="Courier New"><font size="2"><span style="color: #0000ff">="advancedpopupmenus.popup.propertyTesters.visable"</span> <span style="color: #0000ff">></span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">        <br />       </span> <span style="color: #0000ff"></</span> <span style="color: #800000">propertyTester</span> <span style="color: #0000ff">></span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">      <br />    </span> <span style="color: #0000ff"></</span> <span style="color: #800000">extension</span> <span style="color: #0000ff">></span> </font></font><span style="color: #000000"><br /> </span><font face="Courier New"><font size="2"><span style="color: #0000ff"></</span> <span style="color: #800000">plugin</span> <span style="color: #0000ff">></span> </font></font></div> <p><font face="Courier New"><font size="2">注意和上一个例子不同的地方QobjectClassQnameFileter和type(在上一个例子中Q我们也可以使用<font color="#ff0000">objectClass</font><span style="color: #0000ff">="org.eclipse.core.resources.IFile" </span><span style="color: #ff0000">nameFilter</span></font> </font><span style="color: #0000ff"><font face="Courier New" size="2">="*.java"</font> <font color="#000000"><font face="Courier New" size="2">)Q相应的我们的VisablePropertyTestercM要做一些改动:(x)</font> </font></span></p> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff"><font face="Courier New" size="2">package</font> </span><font face="Courier New"><font size="2"><span style="color: #000000"> advancedpopupmenus.popup.actions;<br /> <br /> </span><span style="color: #0000ff">import</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000"> javax.xml.parsers.DocumentBuilder;<br /> </span><span style="color: #0000ff">import</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000"> javax.xml.parsers.DocumentBuilderFactory;<br /> </span><span style="color: #0000ff">import</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000"> org.eclipse.core.expressions.PropertyTester;<br /> </span><span style="color: #0000ff">import</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000"> org.eclipse.core.resources.IFile;<br /> </span><span style="color: #0000ff">import</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000"> org.w3c.dom.Document;<br /> </span><span style="color: #0000ff">import</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000"> org.w3c.dom.DocumentType;<br /> <br /> </span><span style="color: #0000ff">public</span> <span style="color: #000000"> </span> <span style="color: #0000ff">class</span> <span style="color: #000000"> VisablePropertyTester </span> <span style="color: #0000ff">extends</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000"> PropertyTester<br /> {<br />     </span> <span style="color: #0000ff">public</span> <span style="color: #000000"> </span> <span style="color: #0000ff">boolean</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000"> test( Object receiver, String property, Object[] args,<br />             Object expectedValue )<br />     {<br />         </span> <span style="color: #0000ff">if</span> <span style="color: #000000"> ( </span> <span style="color: #000000">!</span> <span style="color: #000000">( receiver </span> <span style="color: #0000ff">instanceof</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000"> IFile ) )<br />             </span> <span style="color: #0000ff">return</span> <span style="color: #000000"> </span> <span style="color: #0000ff">false</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">;<br />         IFile xml </span> <span style="color: #000000">=</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000"> (IFile) receiver;<br />         </span> <span style="color: #0000ff">try</span> </font></font><span style="color: #000000"><br /> <font face="Courier New" size="2">        {<br />             DocumentBuilderFactory dbf </font> </span><span style="color: #000000"><font face="Courier New" size="2">=</font> </span><font face="Courier New"><font size="2"><span style="color: #000000"> DocumentBuilderFactory.newInstance( );<br />             DocumentBuilder db </span> <span style="color: #000000">=</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000"> dbf.newDocumentBuilder( );<br />             Document doc </span> <span style="color: #000000">=</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000"> db.parse( xml.getContents( ) );<br />             DocumentType type </span> <span style="color: #000000">=</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000"> doc.getDoctype( );<br />             </span> <span style="color: #0000ff">if</span> <span style="color: #000000">(type.getSystemId( ).equalsIgnoreCase( </span> <span style="color: #000000">"</span> <span style="color: #000000">http://java.sun.com/j2ee/dtds/web-app_2_2.dtd</span> <span style="color: #000000">"</span> <span style="color: #000000"> ))</span> <span style="color: #0000ff">return</span> <span style="color: #000000"> </span> <span style="color: #0000ff">true</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">;<br />         }<br />         </span> <span style="color: #0000ff">catch</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000"> ( Exception e )<br />         {<br />             e.printStackTrace( );<br />         }        <br />         </span> <span style="color: #0000ff">return</span> <span style="color: #000000"> </span> <span style="color: #0000ff">false</span> </font></font><span style="color: #000000"><font face="Courier New" size="2">;<br />     }<br /> }</font> </span></div> <p><font face="Courier New" size="2">q样Ҏ(gu)不同的xml SystemIDQ我们就能够知道到底q是哪一U框架的配置文g?jin)?/font> </p> </div> <img src ="http://www.aygfsteel.com/eroself/aggbug/181558.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/eroself/" target="_blank">D?/a> 2008-02-23 10:29 <a href="http://www.aygfsteel.com/eroself/archive/2008/02/23/181558.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>方便理plugin或rcp的iconshttp://www.aygfsteel.com/eroself/archive/2008/01/30/178564.htmlD?/dc:creator>D?/author>Wed, 30 Jan 2008 09:24:00 GMThttp://www.aygfsteel.com/eroself/archive/2008/01/30/178564.htmlhttp://www.aygfsteel.com/eroself/comments/178564.htmlhttp://www.aygfsteel.com/eroself/archive/2008/01/30/178564.html#Feedback0http://www.aygfsteel.com/eroself/comments/commentRss/178564.htmlhttp://www.aygfsteel.com/eroself/services/trackbacks/178564.html转自Qhttp://blog.csdn.net/moneyice/archive/2006/04/25/677423.aspx

每个UIE序都离不开囄Q一般的Eclipse插gQ在一个类中定义了(jin)若干?rn)态常量,每一个常量指定一个icon的名字,在程序中用到囄的时候,通过q个帔R计算得到囄。Eclipse的插件一般规模较大,囄很多Q而且分不同的像素Q彩Ԍ灰白{。这h利于l一的管理和开发h员的沟通?/div>
       但ƈ不是每个plugin或者rcp都要用到q么多图片,如果只有很少的图片的话,可以用图片的名字作ؓ(f)key,来存取图片。程序例子如下:(x)
public class ImageShop {
       private static ImageRegistry register = new ImageRegistry();
 
       private static Set keys = new HashSet();
       static {
              initial();
       }
       public static ImageDescriptor getDescriptor(String key) {
              ImageDescriptor image = register.getDescriptor(key);
              if (image == null) {
                     image = ImageDescriptor.getMissingImageDescriptor();
              }
              return image;
       }
       public static Image get(String key) {
              Image image = register.get(key);
              if (image == null) {
                     image = ImageDescriptor.getMissingImageDescriptor().createImage();
              }
              return image;
       }
       public static String[] getImageKey() {
              return (String[]) keys.toArray(new String[keys.size()]);
       }
       private static void initial() {
              Bundle bundle = Platform.getBundle(PwdgatePlugin.ID);
              URL url = bundle.getEntry("icons");
              try {
                     url = Platform.asLocalURL(url);
              } catch (Exception e) {
                     PwdgatePlugin.log("get root path", e);
              }
              File file = new File(url.getPath());
              File[] images = file.listFiles();
              for (int i = 0; i < images.length; i++) {
                     File f = images[i];
                     if (!f.isFile()) {
                            continue;
                     }
                     String name = f.getName();
                     if (!name.endsWith(".gif")) {
                            continue;
                     }
                     String key = name.substring(0, name.indexOf('.'));
                     URL fullPathString = bundle.getEntry("icons/" + name);
                     ImageDescriptor des = ImageDescriptor.createFromURL(fullPathString);
                     register.put(key, des);
                     keys.add(key);
              }
       }
}
 
所有的囄都放在根目录/icons目录下,在系l中如果用到名字为default.gif的图片,只要调用ImageShop.get(“default”)卛_Q有时在Action中需要用到ImageDescriptorQ调用ImageShop. getDescriptor(“default”)可以取到?/div>

]]> վ֩ģ壺 ʯʨ| | Ҿ| Է| ԭ| | | ɽ| | | ղ| | | ֦| ǿ| | ˮ| | | ¤| | Ӣɳ| | | ˹| ƽ| ȫ| | | | ³ľ| ¡| | | ڶ| | | | ƽ| ï| |