繁体   English   中英

基于选择的Eclipse RCP处理程序支持

[英]Eclipse RCP Handler enablement based on selection

我有点被困住了,因为资源很多,而且他们没有为我澄清这个问题。

假设我有一个命令 ,一个处理程序 ,一个属性测试器 ,并将这些结果作为一个酷炫的项目显示在UI上。

现在,假设我有几个扩展相同基数的视图(例如BaseView )。 所有这些视图都包含ColumnViewer (例如TableViewerTreeViewer ),它们充当选择提供程序

  • enableWhenactiveWhen配置如何了解这些查看器中的选择? 我无法想象如何selection + instanceOf参数工作ISelection (S)。
  • 所选对象如何传递到属性测试器? test方法接收什么实例(作为receiver )?
  • 我注意到一个断点,该处理程序的setEnabled()方法有很多遍。 那是正常的行为吗? 可以重写setEnabled吗?

代码在这里似乎与我无关。 但是无论如何,这些片段涵盖了以下问题:

// --------------------- 1 -----------------------

  <handler
        class="com.example.ggrec.handlers.SampleHandler"
        commandId="com.example.ggrec.commands.sampleCommand">
     <enabledWhen>
        <with
              variable="selection">
           <instanceof
                 value="org.eclipse.jface.viewers.ISelection">
           </instanceof>
        </with>
     </enabledWhen>
  </handler>

// --------------------- 2 -----------------------

  <propertyTester
        class="com.example.ggrec.propertyTesters.SamplePropertyTester"
        id="com.example.ggrec.samplePropertyTester"
        namespace="com.example.ggrec.propertyTesters"
        properties="simpleTest"
        type="java.lang.Object">
  </propertyTester>

// --------------------- 3 -----------------------

/**
 * 
 * @author ggrec
 *
 */
public class SamplePropertyTester extends PropertyTester
{
    @Override
    public boolean test(final Object receiver, final String property, final Object[] args, final Object expectedValue)
    {
        if (receiver instanceof ISelection) // What instance is this?
            System.out.println("RAINBOWS");

        return true;
    }
}

// --------------------- 4 -----------------------

/**
 * 
 * @author ggrec
 *
 */
public class SampleHandler extends AbstractHandler
{
    @Override
    public Object execute(final ExecutionEvent event) throws ExecutionException 
    {
        final IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event);
        MessageDialog.openInformation(window.getShell(), "", "meh");

        return null;
    }

    @Override
    public void setEnabled(final Object evaluationContext)
    {
        super.setEnabled(evaluationContext); // Goes like crazy through here.
    }
}

每个ViewPart (和编辑器部件)都有一个由选择服务维护并由选择提供者设置的单独选择。 enabledWhenvisibleWhen使用从零件选择服务获得的当前活动零件的选择。

属性测试调用通常位于启用表达式中的<with>块内,该表达式建立要测试的对象。 就像是:

<with
    variable="org.eclipse.ui.selection">
   <iterate
         operator="or">
      <adapt
            type="music.resources.data.IMusicFile">
            <or>
                <test property="music.isMusicOrPlaylist"/>
                <test property="music.isVideo"/>
            </or>
       </adapt>
    </iterate>
</with>

它与当前选择配合使用,要求选择适应特定类型,并测试两个属性之一。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM