`

如何有条件的设置Action

阅读更多
最近做的一个PrettyPro的plugin有这样一个需求:用户在Editor中的右键菜单中有Format和Format Selection两个Action,根据用户是否选择了Editor中的内容而决定其中那个是enable的,哪个是disable的。本来以为实现这个功能要动态的添加action而不是在plugin.xml中声明能做到的,但是苦于找不到动态添加action的方法,就回头去啃plugin.xml的dtd,终于让我找到了~

<!----> 1 <extension point="org.eclipse.ui.popupMenus">
 2     <viewerContribution id="com.qad.progress.prettypro.ui.editor.PopupMenuContribution" targetID="#TextEditorContext" >
 3         <menu label="%editorPopupMenuLabel" path="additions" id="com.qad.progress.prettypro.ui.menu.FormatSubPopupMenu">
 4             <separator name="%editorPopupMenuSeparatorName"/>
 5         </menu>         
 6         <action
 7             label = "%editorPopupMenuAction1Label"
 8             icon = "%editorPopupMenuAction1Icon"
 9             class = "com.qad.progress.prettypro.ui.actions.FormatSelectionAction"
10             tooltip = "%editorPopupMenuAction1ToolTip"
11             menubarPath = "com.qad.progress.prettypro.ui.menu.FormatSubPopupMenu/%editorPopupMenuSeparatorName"
12             id = "com.qad.progress.prettypro.ui.actions.editorPopupMenu.FormatSelectionAction"
13             enablesFor="+">
14        </action>  
15        <action
16            label="%editorPopupMenuAction2Label"
17            icon="%editorPopupMenuAction2Icon"
18            class="com.qad.progress.prettypro.ui.actions.FormatAction"
19            tooltip="%editorPopupMenuAction2ToolTip"
20            menubarPath="com.qad.progress.prettypro.ui.menu.FormatSubPopupMenu/%editorPopupMenuSeparatorName"
21            id="com.qad.progress.prettypro.ui.actions.editorPopupMenu.FormatAction"
22            enablesFor="!">   
23        </action> 
24     </viewerContribution>
25 </extension>

注意加重斜体的地方,这就是声明当选中1或多个("+")和不选中("!")时是否要enable这个action。我一开始还以为这个东西只能在outline view或browser view中有具体选择项(如:文件)时才能用,没想到在editor里面判断用户是否选中内容的时候也可以用,真是有趣~

BTW:注意我的两个action action的顺序是Format selection和Format entire file,但是在显示的时候却是反的,不知道是为什么...

分享到:
评论

相关推荐

    structs in action中文完全版\6. 连线 ActionForward.pdf

    1. **标准流程控制**:最常见的应用场景是在一个Action执行完毕后,根据特定的逻辑条件选择不同的ActionForward,从而决定是显示某个JSP页面还是调用另一个Action。 2. **携带参数的转发**:通过在ActionForward的...

    Android代码-Activity设置相同的action进行判断源码.zip

    3. 如果以上条件都未明确,Android会选择优先级最高的Activity,优先级由`android:priority`属性决定,数值越大,优先级越高。如果优先级相同,系统会随机选择一个。 在源码中,你可能会看到如何在Activity内部通过...

    Intent总结03 Action属性

    当有多个应用可以处理相同的Action时,可以使用`createChooser(Intent target, CharSequence title)`创建一个Intent选择器,让用户选择合适的处理应用。 总之,Intent的Action属性是Android中非常关键的一个概念,...

    Android Activity设置相同的action进行判断源码.zip

    在某些场景下,我们可能需要启动多个Activity并设置相同的action,然后在接收方Activity中根据不同的条件进行不同的处理。这个"Android Activity设置相同的action进行判断源码"项目就是针对这种情况进行深入探讨的...

    Android Activity设置相同的action进行判断源码.rar

    5. **选择最佳匹配**:如果有多个Activity满足条件,系统会寻找最佳匹配。这通常意味着找到最具体的Filter,即Data部分匹配最多的Intent。如果仍然无法确定,系统可能会抛出异常,提示开发者必须明确指定目标...

    Action Game Maker 1.04简化版

    此外,软件还提供了丰富的事件系统,让用户能够设置游戏逻辑,例如角色与环境的交互、敌人行为模式等,只需通过简单的条件和动作组合即可实现。 游戏中的动画和动作也是Action Game Maker的一大特色。用户可以...

    No result defined for action.doc

    在Struts2框架下,每个Action方法可以有多个结果集,它们用于指定不同的业务逻辑处理后的页面跳转或者数据返回方式。如果Action执行完毕但没有明确的结果集来指引下一步流程,Struts2会抛出此错误。 #### 示例代码...

    Struts1.2Action之处理多个业务

    3. **组合Action**:创建多个子Action,每个子Action处理一个业务,然后在主Action中根据条件调用合适的子Action。 4. **使用业务层(Service层)**:将业务逻辑封装到Service层,Action只负责调用Service并处理...

    js form action动态修改方法.docx

    当需要根据用户操作或特定条件动态地改变表单的提交目标时,可以使用JavaScript来修改`form action`属性。以下将详细讲解如何使用JavaScript来动态修改`form action`。 1. **基本语法** 在JavaScript中,可以使用`...

    moke测试struts的action

    1. **Action配置**:在Struts配置文件中,每个Action都有一个唯一的名称,这个名称用于映射URL请求。配置还包括了Action类的全限定名,以及Action的输入、成功和错误结果的定义。 2. **Action类**:Action类是...

    action in wxpython中文版

    2. **关联事件处理函数**:`Action`需要有一个或多个事件处理函数,当用户触发`Action`时,这些函数会被调用。在wxPython中,我们可以通过`Bind`方法来绑定事件处理函数。 ```python def on_action_triggered(self, ...

    Android源码——Activity设置相同的action进行判断源码_new_02.zip

    Action是最基本的过滤条件,例如ACTION_VIEW、ACTION_EDIT等。同时,还可以通过category(类别)和data(数据URI)进一步细化过滤。 2. **Intent的匹配过程**:当发送一个Intent时,系统会遍历所有声明了对应action...

    strust_page.rar_Action!_action分页

    2. 在Action中解析请求参数,实例化Page Bean并设置页码信息。 3. 调用DAO进行分页查询,将结果存储在Page Bean中。 4. 将Page Bean作为模型对象传递到JSP页面。 5. 在JSP页面中,使用Struts标签或者JSP标签库显示...

    Manning PHP in Action Jun 2007

    《PHP in Action》是由Manning出版社于2007年6月出版的一本技术书籍,主要面向已经有一定编程基础,想要深入学习PHP的开发者。这本书是PHP开发领域的重要参考资料,它详细介绍了PHP语言的核心概念、最佳实践以及在...

    QTP的ACTION间传递信息的方法

    Action2可以根据条件设置输出参数`ReturnMsg`,并在Action1中通过`Parameter`方法读取。 2. **使用ExitAction和ReturnValue** - `ExitAction`函数可以用来退出Action,并返回一个值。Action1可以通过`RunAction`...

    Action是否线程安全

    - **并发访问共享资源**:如果`Action`实例持有共享资源(如全局变量),则必须使用同步机制,如`synchronized`块或方法,以防止竞态条件。 - **线程局部变量**:如果可能,使用`ThreadLocal`来存储线程相关的状态...

    ant in action 2相关书籍

    5. **条件(Conditions)**:Ant提供了一组条件任务,如`available`检查文件或目录是否存在,`equals`比较两个值等,这些条件可以用于控制构建流程的分支。 6. **依赖关系(Dependencies)**:Ant的任务执行顺序由...

    spring integration in action

    《Spring Integration in Action》这本书覆盖了从基础知识到高级主题的各个方面,不仅提供了理论指导,还包含了大量实用的代码示例和最佳实践,对于希望深入了解 Spring Integration 的开发者来说是一本非常有价值的...

Global site tag (gtag.js) - Google Analytics