Eclipse Action 3

 
6.2.4. Action 图标
下一步 , 为action关联可以显示在工作台工具栏上的图标。选择在前面章节添加的打开Favorites视图action, 点击出现在icon域右侧的 Browse... 按钮,在打开的结果对话框中,展开树的节点,从icons文件夹中选择sample.gif 条目 (见 图6-5)。点击OK 按钮, icons/sample.gif 将出现在icon 域中。
Figure 6-5. 用来选择图标的资源属性值对话框
 
出现在 icon域和plugin.xml文件的路径是相对于插件的安装目录的。其他的与图标有关的属性还有hoverIcon 和 disabledIcon。
创建你自己的图标
许多程序都可以创建修改图标,像 Jasc's Paint Shop Pro和Adobe's Photoshop。使用这些软件,你可以利用Eclipse提供的图标,进行相应的修改。 (见plugins/org.eclipse.ui_3.1.2.jar 或 plugins/org.eclipse.jdt.ui_3.1.2.jar 下的/icons/full 目录)。图标通常是带透明度颜色的 *.gif 文件。
 
6.2.5. 插入点
Eclipse是由众多插件组合而成,因为每个插件在构建时期都可以在对其他插件未知的情况下贡献action,所以action或子菜单在父亲中的绝对位置直到运行期,才可以知道。即使在执行阶段,如果用户改变了选择,同等级的action会被添加或删除,所以action的位置还是可能改变。因为这个原因,Eclipse使用标示符来引用每一个菜单,组,或者action和路径,也就是作为一个插入点,用来指定菜单或者action显示的位置。
插入点由一个或两个用“ /”分隔的标示符组成,标示action在父亲(此情况指菜单)和组中的位置。例如,Open Favorites View action的菜单栏属性(见 6.2.3节, 定义菜单条目和工具栏按钮,图6-1) 是由两个用“/”分隔的元素组成。
第一个元素, com.qualityeclipse.favorites.workbenchMenu,标示Favorites菜单;第二个元素,content,标示Favorites菜单中的组。在许多情况下,例如当父亲是工作台菜单栏或者视图上下文菜单时,父亲是隐含的,所以在插入点只要指定组就可以了。
插件通过一个空的标记为 "additions"的组,使得别的插件可以添加新的action到它的菜单中。"additions"标示符在Eclipse中是实事上的标准,用来指定新的action和菜单的位置,它是作为一个IWorkbenchActionConstants.MB_ADDITIONS常量被使用。例如,Favorites菜单指定一个路径属性(见 6.2.1节, 定义工作台窗口菜单),属性的值为"additions",它使得Favorites菜单出现在Window菜单的左侧。因为Window菜单的标示符是window,如果Favorites菜单的路径属性设置为"window/additions",Favorites菜单将作为子菜单出现在Window菜单下,而不是出现在工作台菜单栏。
嵌套 ActionSet问题
在 actionSet中定义一个action,actionSet也贡献了一个定义在另一个actionSet的菜单,在Eclipse日志文件中就会出现如下错误:
Invalid Menu Extension (Path is invalid): some.action.id
要解决这个问题,要在两个 actionSet中都定义菜单。更多信息,见Bugzilla条目#36389 和 #105949。
工具栏属性也是一个插入点,它有同 menubarPath属性的结构,但是是标示action出现在工作台工具栏的位置,而不是菜单栏。例如,Open Favorites View action (见 6.2.3节, 定义菜单条目和工具栏按钮)的toolbarPath属性也是由两个由“/”分隔的元素组成: 第一个元素, Normal, 是工作台工具栏的标示符;第二个元素 ,additions,是action要出现在工具栏的组。
6.2.6. 创建 action 代理
action代理包含了关联到action的行为。使用下面是几种方法,你可以为一个action关联一个action代理。
  • class输入框输入action代理的类名。
  • 点击class输入框左边的class:标签,创建一个新的action代理类。
  • 点击点击class输入框右边的Browse...按钮,选择已经存在的action代理。
如果你还没有创建 action类,可以使用Eclipse定制产生一个。选择Open Favorites View action,点击class输入框左边的class:标签 ,打开action类的Java属性编辑器。 (见图6-6).
图6-6. action 类的Java 属性编辑器
 
Package 输入框输入"com.qualityeclipse.favorites.actions" ,在 Name输入框输入"OpenFavoritesViewActionDelegate"。点击 Finish 按钮创建新的action代理,并且打开该类的Java编辑器。
在类被创建,编辑器打开后,按照如下方式进行修改,使得当用户选择 action时,Favorites视图将被打开。加入一个新的成员变量,更改init()方法来存储window对象,window对象在action的执行中会使用到。
private IWorkbenchWindow window;
 
public void init(IWorkbenchWindow window) {
   this.window = window;
}
 
下一步 , 为 FavoritesView 类增加一个常量来作为唯一的标示符,用来打开Favorites视图。
 public static final String ID =
    "com.qualityeclipse.favorites.views.FavoritesView";
 
最后 , 更改OpenFavoritesViewActionDelegate 类的run() 访法,实现打开Favorites 视图的操作。
public void run(IAction action) {
 
 // Get the active page.
 if (window == null)
     return;
 
 IWorkbenchPage page = window.getActivePage();
 if (page == null)
    return;
 
 // Open and activate the Favorites view.
 try {
     page.showView(FavoritesView.ID);
 }
 catch (PartInitException e) {
    FavoritesLog.logError("Failed to open the Favorites view", e);
 }
 }
 
6.2.6.1. selectionChanged 方法
在插件装载文件的 action声明中只是提供了action的初始状态, action的selectionChanged()方法使用IAction接口提供了动态调整action的状态,可用性,甚至action的文字的机会。
例如 , enablesFor 属性 (见 6.3.2节, action过滤和可用性) 用来指定选择了哪些对象,action是可用的。但是如果实现了selectionChanged()方法,可以更精巧的来进行状态设置。这个方法可以根据当前的选择,调用IAction.setEnabled()方法来更新action的可用性。
为了调用 action 代理的selectionChanged() 方法,你需要在你的视图的createPartControl()方法中调用 getViewSite().setSelectionProvider(viewer)。
6.2.6.2. run 方法
当用户选择了 action并期望一个操作被执行的时候,就要调用run()方法。它和selectionChanged()方法相似,可以使用IAction接口根据操作的结果改变action的状态。
必要的守护代码
需要注意的是,如果插件没有被装载,而是用户选择一个菜单选项导致插件被加载, selectionChanged()方法将不会在run()方法之前运行,所以run()方法仍然需要适当的守护代码。另外,run()方法是在主UI线程中执行,所以要考虑将耗时长的操作放到后台线程中(见 20.8节, 后台任务Jobs API)。
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值