如何编写类似于现有的查找/替换对话框的eclipse插件

时间:2016-07-23 13:12:48

标签: java eclipse plugins eclipse-plugin swt

我想编写一个与现有的“查找/替换”对话框类似的eclipse插件。即如果我在焦点位于任意文本编辑器上时按下我选择的组合键,则会弹出我写的对话框,我需要引用IFindReplaceTargetExtension3接口(或IFindReplaceTarget接口) 。 这怎么可能?我需要扩展哪些扩展点?

我想要实现目标的顺序是

1)按下组合键弹出一个对话框(我必须扩展一个我不知道的扩展点)

2)也许然后我通过获取活动编辑器并将活动编辑器转换为此接口来获取IFindReplaceTarget接口。无论如何,我想以某种方式FindReplaceDialog

3)能够看到有助于查找/替换对话框的插件的完整源代码也很棒。我能够打开对话框,将焦点设置在对话框上,然后按Alt + Shift + F1并访问{{1}}类的源代码。但是我怎样才能看到整个插件的源代码?

2 个答案:

答案 0 :(得分:1)

使用org.eclipse.ui.commands扩展点定义命令。

使用org.eclipse.ui.handlers扩展点为您的命令定义处理程序。处理程序类可以打开您的对话框。

使用org.eclipse.ui.bindings扩展点为您的命令定义键绑定。

您可以使用以下内容获取当前部分的IFindReplaceTarget(如果有的话):

IWorkbenchPart part = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getPartService().getActivePart();

IFindReplaceTarget target = (IFindReplaceTarget)part.getAdapter(IFindReplaceTarget.class);

答案 1 :(得分:0)

以下plugin.xml文件完成了这项工作

    <?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
   <extension
         point="org.eclipse.ui.commands">
      <command
            id="com.florian.regexfindandreplace.commands.FindAndReplaceCommand"
            name="FindAndReplaceCommand">
         <defaultHandler
               class="com.florian.regexfindandreplace.handlers.FindAndReplaceHandler">
            <parameter
                  name="com.florian.regexfindandreplace.parameter1"
                  value="com.florian.regexfindandreplace.parameter1">
            </parameter>
         </defaultHandler>
      </command>
   </extension>
   <extension
         point="org.eclipse.ui.bindings">
      <key
            commandId="com.florian.regexfindandreplace.commands.FindAndReplaceCommand"
            contextId="org.eclipse.ui.textEditorScope"
            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
            sequence="M1+F5">
      </key>

       <scheme
  name="Default"
  description="Default shortcuts for Eclipse"
  id="default.id" />
   </extension>

</plugin>

在我的处理程序中,我必须像这样覆盖execute,isEnabled和isHandled

@Override
    public Object execute(ExecutionEvent event) throws ExecutionException {

        IWorkbenchPart part = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getPartService().getActivePart();

        IFindReplaceTarget target = (IFindReplaceTarget)part.getAdapter(IFindReplaceTarget.class);

        ExtendedFindReplaceDialog dialog = new ExtendedFindReplaceDialog(part.getSite().getShell(), target);
        dialog.setBlockOnOpen(true);
        dialog.open();

        return null;
    }

    @Override
    public boolean isEnabled() {
        // TODO Auto-generated method stub
        return true;
    }

    @Override
    public boolean isHandled() {
        // TODO Auto-generated method stub
        return true;
    }