2

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

由于某些原因,我不得不对向导对话框进行子类化(更改了对话框中的完成按钮文本)。如果从菜单启动向导,则操作(在org.eclipse.ui.actionSets中定义)创建并打开这个特殊的向导对话框,一切都很好。

如果向导是从上下文菜单(org.eclipse.ui.newWizards)启动的,则会采用内部类NewWizardShortcutAction创建“正常”向导对话框(而不是我的子类)来打开向导。

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

4

2 回答 2

0

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

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

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

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

于 2012-10-11T03:17:45.290 回答
0

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

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

这是一个 hacky 解决方案,但有效!

于 2012-10-10T10:22:53.583 回答