【问题标题】:SWT - TreeViewer - Single Select vs Multi-SelectSWT - TreeViewer - 单选与多选
【发布时间】:2018-03-23 11:14:08
【问题描述】:

请注意使用了 Eclipse RCP。

我已经为现有的树查看器启用了使用 CTRL+鼠标单击的多选。现在我需要为右键单击提供两个菜单:

 One menu item on Single Selection.
 A different menu item for Multiple Selection.

目前通过plugin.xml 的扩展定义可用于单选,其中检查选定对象是否为instanceof 某个值。

如何识别多选?扩展定义中多选需要检查什么。

   <definition
        id="com.sample.rightclickmenu.singleselect.id.expression">
     <with
           variable="org.eclipse.ui.selection">
        <iterate
              ifEmpty="false"
              operator="and">
           <or>
              <instanceof
                    value="com.sample.ExampleNGroup"> -> Where N=1,2,.. 
              </instanceof>
           </or>
        </iterate>
     </with>
  </definition>

当我在不同的N之间多选时,扩展定义应该是什么。

   <definition
        id="com.sample.rightclickmenu.multiselect.id.expression">
     <with
           variable="org.eclipse.ui.selection">
        <iterate
              ifEmpty="false"
              operator="and">
           <or>
              <instanceof
                    value=??>  -> what needs to be the value here.
              </instanceof>
           </or>
        </iterate>
     </with>
  </definition>

我希望我已经正确解释了这个问题。

【问题讨论】:

  • 您正在遍历选择中的每个项目,因此 instanceof 测试可能是相同的 - 此时您只是测试选择中的单个项目。由于您已指定 operator="and",表达式将检查选择中的所有项目是否与 instanceof 匹配 - 这是您想要的吗?
  • 我已经给出了一个示例定义以供澄清。我所需要的只是区分单选与多选。值不能取决于组的类型,因为可能是不同组的组合。

标签: java eclipse swt eclipse-rcp


【解决方案1】:

您可以使用count 元素来测试选择大小

单个项目被选中:

 <with variable="org.eclipse.ui.selection">
    <count value="1" />
    <iterate ifEmpty="false">
          ....
    </iterate>
 </with>

选择了两个或更多项目

 <with variable="org.eclipse.ui.selection">
    <count value="(2-" />
    <iterate ifEmpty="false">
          ....
    </iterate>
 </with>

【讨论】:

  • 它与 一起使用。如何使单选菜单的选项不出现在多选中?我想让它们相互排斥。
  • 我有太多的单选组合,将 添加到每个组合都是一项艰巨的任务。还有其他方法可以轻松做到吗?
猜你喜欢
  • 2011-09-06
  • 2015-12-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-27
  • 2015-01-13
  • 1970-01-01
  • 1970-01-01
  • 2013-12-02
相关资源
最近更新 更多