`

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. }  
分享到:
评论

相关推荐

    eclipse rcp 菜单小例子

    在这个“eclipse rcp 菜单小例子”项目中,我们将深入探讨如何在Eclipse RCP应用中创建和配置菜单,以及如何通过`visibleWhen`标签控制菜单项的可见性。 首先,让我们了解Eclipse RCP中的菜单结构。菜单主要分为三...

    RCP的Navigator例子源代码(包括修改默认的new右键菜单)

    这个压缩包包含了RCP应用中关于Navigator的一个示例,以及如何自定义“新建”(New) 右键菜单的操作。 在RCP应用中,Navigator视图是通过`org.eclipse.ui.navigator`插件提供的,这个插件包含了展示和管理工作台资源...

    plugin2_RCP菜单_teamcenter_

    2. **菜单与工具栏开发**:在RCP应用中,菜单和工具栏是用户与应用程序交互的主要途径。通过`plugin.xml`文件,开发者可以定义菜单项、子菜单、快捷键和工具栏按钮等,以实现特定的功能。`plugin.xml`配置文件是...

    RCP 菜单与工具栏小结

    菜单和工具栏是RCP应用中用户与软件进行交互的主要界面之一。它们不仅提供了对应用功能的访问途径,还通过直观的设计增强了用户体验。菜单通常包含一系列命令选项,而工具栏则通过图标快速提供常用操作。理解如何在...

    一个RCP的简单例子

    在本例子中,我们看到的是一个基于RCP实现的**客户关系管理(CRM)**系统。 CRM系统主要用于企业管理和优化与客户之间的交互,包括销售、市场营销和服务等环节。通过RCP构建的CRM,我们可以期待一个高度定制化、...

    RCP-1500中文操作手册.pdf

    在操作和维护方面,RCP-1500系列遥控面板提供了一个详细的菜单系统,包括菜单操作、状态画面、着色菜单、文件菜单、维护菜单和配置菜单等。用户可以通过这些菜单来进行高级的配置和设置,以确保设备的性能达到最佳。...

    EclipseRcp 例子程序

    6. **命令与快捷键**:Eclipse RCP提供了命令框架,允许自定义用户操作,如菜单项和快捷键。例子程序会展示如何定义、注册和绑定这些命令。 7. **服务(Service)**:Eclipse RCP支持服务导向的架构,通过服务,...

    通过例子学习EclipseRCP开发

    例如,当用户在视图中执行操作时,可以通过发布事件通知其他组件。 六、插件开发 Eclipse RCP应用由多个插件组成,每个插件负责一部分功能。插件之间通过API进行交互。理解插件依赖、生命周期和导出/导入是很关键的...

    RCP自定义透视图切换按钮的右键菜单

    在Eclipse RCP(Rich Client Platform)开发中,创建用户友好的界面是至关重要的。一个常见的需求是定制透视图(Perspective)的交互方式,包括切换按钮和右键菜单。本教程将详细介绍如何通过`org.eclipse.ui....

    RCP源码例子

    5. **命令(Command)与 Handler**:RCP使用命令模型来处理用户的操作,如点击菜单项或按钮。Handler是命令的具体执行者,它将用户操作映射到实际的行为。 6. **模型(Model)**:在“simplebrowser”中,可能存在...

    RCP和CXF做的例子

    【标题】"RCP和CXF做的例子"指的是一个基于 Rich Client Platform (RCP) 和 Apache CXF 的应用程序示例。RCP 是 Eclipse 平台的一部分,它提供了一个框架,用于构建功能丰富的桌面应用程序。而 CXF 是一个开源服务...

    eclipse rcp 例子 源码

    6. **命令框架**:Eclipse RCP中的命令框架允许你定义应用的动作,并将其绑定到菜单、工具栏或快捷键上。 7. **视图和编辑器**:了解如何创建和管理视图和编辑器,以及它们在工作台中的生命周期。 通过深入研究...

    rcp与spring集成的一个简单例子

    现在我们来详细探讨一下这个"rcp与spring集成的一个简单例子"。 首先,集成的初衷是为了将Spring的灵活性和模块化引入到RCP应用中。通过Spring,我们可以轻松地管理对象的生命周期、实现松耦合,并利用其强大的AOP...

    rcp 学习资料下载,一个简单的rcp例子

    这个"rcp 学习资料下载,一个简单的rcp例子"是一个针对初学者的学习资源,旨在帮助他们快速理解和掌握RCP的开发技术。 在Eclipse RCP中,开发者可以利用工作台(Workbench)、视图(View)、编辑器(Editor)、透视...

    RCP中文入门教程.rar

    6. **命令(Command)**和** Handler**:RCP中的命令系统允许开发者定义用户可以执行的操作,并通过Handler来处理这些操作的逻辑。 7. **透视图(Perspective)**:透视图是工作台的一种布局方式,它可以将视图和...

    RCP弹出日期控件

    在RCP系统中,弹出式日期控件通常是为了简化用户在日期输入时的操作。这种控件不仅允许用户通过点击按钮弹出一个日历视图,还可以在该视图中轻松切换至上一月、下一月,向前或向后滚动一年。这种设计考虑到了用户的...

    Eclipse_RCP_应用(完整的例子)

    - 使用命令:定义命令并在菜单中使用它们,提供用户操作的接口。 - 创建视图(Views):视图是用户界面的一部分,通常用于显示和处理数据。 - 编辑器(Editors):用于编辑数据和内容的部分,通常与视图紧密配合。 -...

    eclipse rcp经典程序

    6. **菜单和工具栏(Menus and Toolbars)**:这是用户与应用程序交互的主要方式。开发者可以自定义菜单项和工具栏按钮,绑定到相应的操作。在HelloWorld中,可能有如何添加和配置这些元素的示例。 7. **命令和 ...

    eclipse rcp demo例子 view editor 图表

    在实际应用中,你可能还需要处理事件监听、菜单和工具栏的创建、以及与其他插件的交互。例如,你可以通过`IActionDelegate`实现自定义的菜单项动作,或通过`ISelectionService`获取当前工作台的选中内容。 在博文...

Global site tag (gtag.js) - Google Analytics