在Eclipse RCP的命令框架中检查空选择变量值

时间:2013-07-11 06:53:48

标签: eclipse command eclipse-rcp contextmenu rcp

如何在打开编辑器时检查selection变量值是否为null

我想在打开某个编辑器时激活上下文菜单命令,它不是脏的,并且用户没有选择任何内容。前两个编纂工作正常:

<and>
    <with
        variable="activePartId">
        <equals
            value="com.eclipse.someeditor">
        </equals>
    </with>
    <with
        variable="activePart">
        <not>
            <test
                 property="com.eclipse.isEditorDirty">
            </test>
        </not>
    </with>
<and>

我目前的问题是,直接的解决方案是包含另一个条件:

<with variable="selection">
    <count value="0" />
</with>

不幸的是,首次打开编辑器时,计数不是0.它可能是null。如果用户选择了某个内容然后取消选择,则它变为0.任何想法如何检查选择的值是null还是类似?

更新

我还尝试创建一个属性测试器,检查选择的值是否为null,但代码未执行。我认为它会发生,因为如果用户没有选择/取消选择,它甚至不会进入选择范围。

<with variable="selection">
    <test
        property="com.eclipse.isSelectionNullOrEmpty">
    </test>
</with>

2 个答案:

答案 0 :(得分:0)

尝试使用'instanceof'和'and'。像:

<and>
 <instanceof value="fully_qualified_class_name_of_your_selection_class"/>
 <equals value="0" />
</and>

希望这有帮助。

答案 1 :(得分:0)

以下解决方案有效:

我使Editor a SelectionProvider能够委托给另一个SelectionProvider以便能够在它们之间切换(例如,当我有一个提供选择的内部表时,采取行动。

然后我设置getSelection()以在没有委托时返回空StructuredSelection(与返回null相反)。由于这一点,总是返回StructuredSelection,但有时它是空的。

public ISelection getSelection() {
    return delegate == null ? new StructuredSelection() : delegate.getSelection();
}

之后我可以添加我之前提到的简单条件:

<with variable="selection">
    <count value="0" />
</with>

有些人可能觉得这很有用。