我想编写一个与现有的“查找/替换”对话框类似的eclipse插件。即如果我在焦点位于任意文本编辑器上时按下我选择的组合键,则会弹出我写的对话框,我需要引用IFindReplaceTargetExtension3
接口(或IFindReplaceTarget
接口) 。
这怎么可能?我需要扩展哪些扩展点?
我想要实现目标的顺序是
1)按下组合键弹出一个对话框(我必须扩展一个我不知道的扩展点)
2)也许然后我通过获取活动编辑器并将活动编辑器转换为此接口来获取IFindReplaceTarget
接口。无论如何,我想以某种方式FindReplaceDialog
。
3)能够看到有助于查找/替换对话框的插件的完整源代码也很棒。我能够打开对话框,将焦点设置在对话框上,然后按Alt + Shift + F1并访问{{1}}类的源代码。但是我怎样才能看到整个插件的源代码?
答案 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;
}