一般来说,把 IContributionItem 或 IAction 加入 ToolBarManager中,只会显示相应的图标。
但如果想即显示 图标,又显示文字(就像 Perspective Shortcut)。怎么办?

看了源码,知道 Perspective Shortcut 的是处理 ToolItem, 调用 ToolItem.setText(...)。

所以,只要我能拿到 ToolBarManager 中的 ToolBar 中 ToolItem

但是: 在 ApplicationActionBarAdvisor 或者 ViewPart 中, 当你添加 action 时, 是得不到 ToolItem 的(还没初始化)

像这样:

java 代码
 
  1. public class ApplicationActionBarAdvisor extends ActionBarAdvisor {  
  2.     ...  
  3.     protected void fillCoolBar(ICoolBarManager coolBar) {  
  4.         ToolBarManager menu = new ToolBarManager(SWT.FLAT | SWT.RIGHT);  
  5.         coolBar.add(menu);   
  6.         ... // 添加一些action   
  7.         ... // 但是如何让文字也显示在图标的右边呢?这里Toolbar 没有初始化,但我又不想让代码侵入其他部分.  
  8.     }  
  9. ...  

于是,我写了以下帮助类,它是一个 ContributionItem

java 代码
 
  1. public class ShowTextToolBarContributionItem extends ContributionItem {  
  2.       
  3.     @Override  
  4.     public void fill(ToolBar parent, int index) {  
  5.         ToolItem[] toolItems = parent.getItems();  
  6.         for (ToolItem toolItem : toolItems) {  
  7.             ActionContributionItem contributionItem = (ActionContributionItem) toolItem.getData();  
  8.             IAction action = contributionItem.getAction();  
  9.             if (toolItem.getText() == null || toolItem.getText().length() == 0) {  
  10.                 toolItem.setText(action.getText());  
  11.             }  
  12.         }  
  13.     }  
  14. }  

嘿,"这个时刻",总该让我得到 ToolItem 了吧! 见上面的 fill

然后, 我的 fillToolBar 大概像这样了:

java 代码
 
  1. protected void fillCoolBar(ICoolBarManager coolBar) {  
  2.     ToolBarManager menu = new ToolBarManager(SWT.FLAT | SWT.RIGHT);  
  3.     coolBar.add(menu);   
  4.       
  5. u.add(new ShowTextToolBarContributionItem());   // here  
  6. }  

...
评论
379548695 2008-05-20
你太强啦博主!
发表评论

您还没有登录,请登录后发表评论

bencode
  • 浏览: 30626 次
  • 性别: Icon_minigender_1
  • 来自: 浙江台州
  • 详细资料
搜索本博客
存档
最新评论