Eclipse Plugin - Как открыть страницу мастера в обработчике команд?

Я пишу плагин для затмения. У меня есть кнопка в меню панели инструментов. и я хочу, чтобы при нажатии на него - диалоговое окно страницы мастера было открыто. Я уже написал класс, который расширяет мастер и реализует IWizardPage, и я написал также все 5 соответствующих страниц, я только не могу найти способ открыть это в обработчике команд.

Вот части моего кода:

Обработчик команд:

public class AddProjectHandler extends AbstractHandler {

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

        return null;
    }
}

Диспетчер страниц мастера:

public class NewProjectWizardManager extends Wizard implements INewWizard {


    private NewProjectWizardPage1 _page1;
    private NewProjectWizardPage2 _page2;
    private NewProjectWizardPage3 _page3;
    private NewProjectWizardPage4 _page4;
    private NewProjectWizardPage5 _page5;

    // constructor
    public NewProjectWizardManager() {
        super();
        setWindowTitle("New Project");
    }

    @Override
    public void init(IWorkbench workbench, IStructuredSelection selection) {
    }

    @Override
    public boolean performCancel() {

        return true;
    }

    @Override
    public void addPages() {
        super.addPages();
        _page1 = new NewProjectWizardPage1();
        addPage(_page1);
        _page2 = new NewProjectWizardPage2(_page1);
        addPage(_page2);
        _page3 = new NewProjectWizardPage3(_page1);
        addPage(_page3);
        _page4 = new NewProjectWizardPage4();
        addPage(_page4);
        _page5 = new NewProjectWizardPage5(_page1);
        addPage(_page5);
    }

    @Override
    public boolean canFinish() {
        IWizardContainer container = getContainer();
        if (_page5.equals(container.getCurrentPage())) {
            return true;
        } else {
            return false;
        }
    }

    @Override
    public IWizardPage getNextPage(IWizardPage page) {
        IWizardPage nextPage = super.getNextPage(page);
        IWizardContainer container = getContainer();
        if (nextPage != null) {
            if (_page2.equals(container.getCurrentPage()) && _page2.isCheckFinishChecked())
                nextPage = super.getNextPage(super.getNextPage(nextPage));
        }
        return nextPage;
    }

    @Override
    public boolean performFinish() {
}
}

Plugin.xml кусочки:

<command
                categoryId="com.commands.category"
                description="Add new Project"
                id="com.commands.AddProject"
                name="Add new Project">
</command>


<handler
                class="com.handlers.AddProjectHandler"
                commandId="com.commands.AddProject">
</handler>

Есть ли у вас какие-либо идеи?

2 ответа

Решение

Использование WizardDialog показать волшебника. Что-то вроде:

public Object execute(ExecutionEvent event) throws ExecutionException
{
  Shell activeShell = HandlerUtil.getActiveShell(event);

  IWizard wizard = new NewProjectWizardManager();

  WizardDialog dialog = new WizardDialog(activeShell, wizard);

  dialog.open();

  return null;
}

Я нашел код ниже от org.eclipse.jdt.ui.actions.AbstractOpenWizardAction. До Eclipse3.4 вы могли расширять этот класс для создания Action.but, но действие устарело, мне интересно, если Eclipse.org предоставляет что-то вроде AbstractOpenWizardAction для выполнения той же работы в режиме обработчика команд. Я еще не нашел это.

public void run() {
    Shell shell = getShell();
    if (!(doCreateProjectFirstOnEmptyWorkspace(shell)))
        return;
    try {
        INewWizard wizard = createWizard();
        wizard.init(PlatformUI.getWorkbench(), getSelection());

        WizardDialog dialog = new WizardDialog(shell, wizard);
        PixelConverter converter = new PixelConverter(JFaceResources.getDialogFont());
        dialog.setMinimumPageSize(converter.convertWidthInCharsToPixels(70),
                converter.convertHeightInCharsToPixels(20));
        dialog.create();
        int res = dialog.open();
        if ((res == 0) && (wizard instanceof NewElementWizard)) {
            this.fCreatedElement = ((NewElementWizard) wizard).getCreatedElement();
        }

        notifyResult(res == 0);
    } catch (CoreException e) {
        String title = NewWizardMessages.AbstractOpenWizardAction_createerror_title;
        String message = NewWizardMessages.AbstractOpenWizardAction_createerror_message;
        ExceptionHandler.handle(e, shell, title, message);
    }
}
Другие вопросы по тегам