Eclipse插件:如何修改扩展名“org.Eclipse.ui.newWizards”?

Eclipse插件:如何修改扩展名“org.Eclipse.ui.newWizards”?,eclipse,plugins,wizard,Eclipse,Plugins,Wizard,我有一个向导,应该以不同的方式启动:从菜单org.eclipse.ui.menus+org.eclipse.ui.actionset和新上下文菜单。对于后面的版本,我使用扩展org.eclipse.ui.newWizards将向导添加到上下文菜单中。到目前为止,一切都很好 由于某些原因,我不得不对向导对话框进行子类化,更改了对话框中的“完成”按钮文本。如果从菜单启动向导,org.eclipse.ui.actionset中定义的操作将创建并打开此特殊向导对话框,一切正常 如果从上下文菜单org.e

我有一个向导,应该以不同的方式启动:从菜单org.eclipse.ui.menus+org.eclipse.ui.actionset和新上下文菜单。对于后面的版本,我使用扩展org.eclipse.ui.newWizards将向导添加到上下文菜单中。到目前为止,一切都很好

由于某些原因,我不得不对向导对话框进行子类化,更改了对话框中的“完成”按钮文本。如果从菜单启动向导,org.eclipse.ui.actionset中定义的操作将创建并打开此特殊向导对话框,一切正常

如果从上下文菜单org.eclipse.ui.newWizards启动向导,则会使用内部类NewWizardShortcutAction来创建普通向导对话框,而不是我的子类来打开向导


有没有办法修改扩展点的实现,即只使用我的子类向导对话框

我也在尝试做同样的事情。我将这样做的方式是注册我自己的自定义操作,通过删除旧操作,将发回解决方案,如果它工作

更新:我最终使用了不同的方法。如果在NewWizardShortcutAction中看到run方法,它只是调用init,创建向导对话框并打开它。所以在我重写MyWizard类中的init时,我只是使用了从WizardDialog扩展而来的MyWizardDialog并打开了它。随后,我需要确保run函数不会重新打开WizardDialog,因此我在MyWizard中使用一个布尔值来跟踪它,该布尔值将不允许获取任何页面,以便run方法中的WizardDialog不会显示


这是一个黑客解决方案,但有效

我也在尝试做同样的事情。我将这样做的方式是注册我自己的自定义操作,通过删除旧操作,将发回解决方案,如果它工作

更新:我最终使用了不同的方法。如果在NewWizardShortcutAction中看到run方法,它只是调用init,创建向导对话框并打开它。所以在我重写MyWizard类中的init时,我只是使用了从WizardDialog扩展而来的MyWizardDialog并打开了它。随后,我需要确保run函数不会重新打开WizardDialog,因此我在MyWizard中使用一个布尔值来跟踪它,该布尔值将不允许获取任何页面,以便run方法中的WizardDialog不会显示


这是一个黑客解决方案,但有效

默认情况下,该命令使用org.eclipse.ui.internal.handlers.WizardHandler.New启动“新建向导”对话框,这是为该命令提供的默认处理程序

可以在工作台窗口级别注册不同的处理程序,这将在工作台窗口处于活动状态时覆盖默认处理程序。可以在plugin.xml或您的应用程序ActionBarAdvisor中完成:

IHandlerService hs = (IHandlerService) window.getService(IHandlerService.class);
hs.activateHandler(IWorkbenchCommandConstants.FILE_NEW, new MyNewHandler());

但您必须在处理程序中实现所需的任何支持,才能使用正确的选择启动向导。

默认情况下,命令使用org.eclipse.ui.internal.handlers.WizardHandler.New启动“新建向导”对话框,这是为命令提供的默认处理程序

可以在工作台窗口级别注册不同的处理程序,这将在工作台窗口处于活动状态时覆盖默认处理程序。可以在plugin.xml或您的应用程序ActionBarAdvisor中完成:

IHandlerService hs = (IHandlerService) window.getService(IHandlerService.class);
hs.activateHandler(IWorkbenchCommandConstants.FILE_NEW, new MyNewHandler());
但您必须在处理程序中实现所需的任何支持,才能使用正确的选择启动向导