Eclipse RCP是否包含内置的剪切/复制/粘贴处理程序?

3
正如标题所说,我想知道Eclipse RCP 4是否提供任何内置的剪切/复制/粘贴处理程序,可以与org.eclipse.ui.edit.cutorg.eclipse.ui.edit.copyorg.eclipse.ui.edit.paste命令相关联?
我知道对于一些SWT小部件或更复杂的使用情况,可能需要自定义处理程序来进行剪切/复制/粘贴操作,但我不禁感到在尝试从一个组件中复制一些文本并将其粘贴到另一个组件中时,我正在尝试重新发明轮子。
如果没有内置的剪切/复制/粘贴处理程序,是否有任何良好记录的示例来完成此操作?我了解如何使用clipboard.getContentsclipboard.setContents方法,但当尝试查找复制命令被调用时选择了哪个文本以及哪个组件具有焦点以及在粘贴命令被调用时它是否是只读时,这开始变得非常棘手。
我已经查看了StackOverflow问题,但它没有解释是否有内置处理程序或提供编写自己处理程序的任何指导。
1个回答

3

对于一个与3.x兼容模式的Eclipse 4应用程序,这些命令定义如下:

 <command
        name="%command.cut.name"
        description="%command.cut.description"
        categoryId="org.eclipse.ui.category.edit"
        id="org.eclipse.ui.edit.cut"
        defaultHandler="org.eclipse.ui.internal.handlers.WidgetMethodHandler:cut" />
  <command
        name="%command.copy.name"
        description="%command.copy.description"
        categoryId="org.eclipse.ui.category.edit"
        id="org.eclipse.ui.edit.copy"
        defaultHandler="org.eclipse.ui.internal.handlers.WidgetMethodHandler:copy" />
  <command
        name="%command.paste.name"
        description="%command.paste.description"
        categoryId="org.eclipse.ui.category.edit"
        id="org.eclipse.ui.edit.paste"
        defaultHandler="org.eclipse.ui.internal.handlers.WidgetMethodHandler:paste" />

当没有其他处理程序处于活动状态时,它们都使用org.eclipse.ui.internal.handlers.WidgetMethodHandler作为默认处理程序。

此处理程序使用反射查找当前聚焦的SWT小部件中的方法名称cutcopypaste,如果找到该方法,则调用该方法。

对于纯e4应用程序,没有定义剪切/复制/粘贴命令的默认定义,也没有WidgetMethodHandler可用。 SWT控件将继续支持剪切/复制/粘贴功能,但不提供其他支持。

您可以通过以下方式将文本放入剪贴板:

Clipboard clipboard = new Clipboard(Display.getCurrent());

clipboard.setContents(new Object [] {"Text for clipboard"},
                      new Transfer [] {TextTransfer.getInstance()});

clipboard.dispose()

使用以下代码从剪贴板获取文本:

Clipboard clipboard = new Clipboard(Display.getCurrent());

String text = (String)clipboard.getContents(TextTransfer.getInstance());

clipboard.dispose()

这可能是由于我缺乏Eclipse RCP知识,应该是一个单独的问题,但我不确定如何将这些处理程序链接到我的命令。如果我在application.e4xmi中不配置处理程序,则当我运行RCP应用程序时,菜单项就会变灰,因此我猜想我需要做一些事情来使用默认处理程序。 - Paul H
抱歉,您没有明确说明这是一个e4应用程序(请使用标签[tag:e4])。在纯e4应用程序中没有默认的复制/剪切/粘贴支持,并且此处显示的默认处理程序不可用。您需要自己编写所有内容。 - greg-449
你知道有没有关于编写剪切/复制/粘贴处理程序的文档良好的示例吗?即使只是一些指针也将不胜感激。 - Paul H

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接