RCP中权限与菜单的操作例子

from:http://blog.csdn.net/meteors1113/archive/2009/06/06/4245475.aspx
1. package com.newautovideo.impclient.app;
2. import java.util.ArrayList;
3. import java.util.HashMap;
4. import java.util.List;
5. import java.util.Map;
6. import org.eclipse.core.runtime.IConfigurationElement;
7. import org.eclipse.swt.graphics.Point;
8. import org.eclipse.swt.widgets.Menu;
9. import org.eclipse.swt.widgets.MenuItem;
10. import org.eclipse.ui.PlatformUI;
11. import org.eclipse.ui.application.ActionBarAdvisor;
12. import org.eclipse.ui.application.IActionBarConfigurer;
13. import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
14. import org.eclipse.ui.application.WorkbenchWindowAdvisor;
15. import org.eclipse.ui.internal.WorkbenchPlugin;
16. import org.eclipse.ui.internal.registry.ActionSetRegistry;
17. import org.eclipse.ui.internal.registry.IActionSetDescriptor;
18. /**
19. * @author zhanggang
20. *
21. */
22. public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
23. private Map<String, IConfigurationElement> elements = new HashMap<String, IConfigurationElement>();// 存放着action的配置信息,以action中的label作为key
24. private List<String> alist = new ArrayList<String>();// 禁用的ActionId,仿服务端返回
25. public ApplicationWorkbenchWindowAdvisor(
26. IWorkbenchWindowConfigurer configurer) {
27. super(configurer);
28. }
29. public ActionBarAdvisor createActionBarAdvisor(
30. IActionBarConfigurer configurer) {
31. return new ApplicationActionBarAdvisor(configurer);
32. }
33. @SuppressWarnings("restriction")
34. public void preWindowOpen() {
35. IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
36. configurer.setInitialSize(new Point(400, 300));
37. configurer.setShowCoolBar(false);
38. configurer.setShowStatusLine(false);
39. configurer.setTitle("Hello RCP");
40. // 好象只能通过actionset来设置action是否可不可见了,暂时对action无法作呀,真哭
41. ActionSetRegistry reg = WorkbenchPlugin.getDefault()
42. .getActionSetRegistry();
43. IActionSetDescriptor[] sets = reg.getActionSets();
44. for (IActionSetDescriptor a : sets) {// 这里取到actionSet,并取到actionSet中的所有action配置,这里还取不到action对象的,需要在postwindow后才能取到
45. IConfigurationElement element = a.getConfigurationElement();
46. IConfigurationElement[] es = element.getChildren();
47. // a.setInitiallyVisible(false);//设置actionSet的属性
48. for (IConfigurationElement e : es) {
49. if (!e.getName().equals("action"))// 记住一定是要action
50. continue;
51. elements.put(e.getAttribute("label"), e);// 存放所有action的配置
52. }
53. }
54. }
55. @SuppressWarnings( { "restriction", "unchecked" })
56. public void postWindowOpen() {// 这里可以设置action为不可用,但不能隐藏
57. super.postWindowOpen();
58. MenuItem[] items = PlatformUI.getWorkbench().getActiveWorkbenchWindow()
59. .getShell().getMenuBar().getItems();
60. alist.add("com.gzhnag.SampleActionTest3");// 有一个禁用权限
61. initMenu(items);
62. PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell()
63. .layout();
64. }
65. /**
66. * 菜单项
67. *
68. * @param items
69. * @return
70. */
71. private boolean initMenu(MenuItem[] items) {
72. String menuId;
73. boolean flag = false;// 此项菜单的父菜单是否显视标志,默认为不可显视,即要dispose(),但若有一个菜单,则为true
74. for (MenuItem item : items) {
75. Menu menu = item.getMenu();
76. if (menu == null)
77. continue;
78. MenuItem[] ims = menu.getItems();
79. int y = 0;
80. for (MenuItem mi : ims) {
81. boolean tmpFlag = false;
82. if (mi.getText().equals("")) {
83. continue;
84. }
85. if (mi.getMenu() != null && mi.getMenu().getItemCount() > 0) {
86. tmpFlag = initMenu(new MenuItem[] { mi });// 递归处理菜单,mi本身就是一个MenuItem
87. if (!tmpFlag) {
88. ims[y--].dispose();// 让分隔线也禁用
89. mi.dispose();
90. continue;
91. }
92. }
93. menuId = getMenuId(mi.getText());// 有下级菜单时是不会取不到id的
94. if (menuId == null)
95. continue;
96. if (alist.contains(menuId)) {// 若禁用权限里包括了些ID则禁用
97. mi.dispose();
98. } else {
99. flag = !flag;// 设为true即显神曲菜单
100. }
101. y++;
102. }
103. }
104. return flag;
105. }
106. /**
107. * @param name
108. * action中的label,注意有快捷方式,有快捷方式会以\t分隔
109. * @return
110. */
111. private String getMenuId(String name) {
112. String lable = name.split(" ")[0];
113. if (elements.get(lable) == null)
114. return null;
115. return elements.get(lable).getAttribute("id");// 快捷方式与label是以\t相隔的
116. }
117. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值