org.eclipse.gmt.modisco.jm2t.internal.ui.wizard.TaskWizardPage.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.gmt.modisco.jm2t.internal.ui.wizard.TaskWizardPage.java

Source

/*******************************************************************************
 * Copyright (c) 2003, 2007 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     IBM Corporation - Initial API and implementation
 *     Angelo Zerr <angelo.zerr@gmail.com> - JM2T Support.
 *******************************************************************************/
package org.eclipse.gmt.modisco.jm2t.internal.ui.wizard;

import java.lang.reflect.InvocationTargetException;

import org.eclipse.gmt.modisco.jm2t.internal.ui.Trace;
import org.eclipse.gmt.modisco.jm2t.ui.wizard.IWizardHandle;
import org.eclipse.gmt.modisco.jm2t.ui.wizard.WizardFragment;
import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.wizard.IWizardContainer;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;

/**
 * A task wizard page.
 */
class TaskWizardPage extends WizardPage implements IWizardHandle {
    protected WizardFragment fragment;

    protected boolean isCreated = false;

    public TaskWizardPage(WizardFragment fragment) {
        super(fragment.toString());
        this.fragment = fragment;
    }

    public void createControl(Composite parentComp) {
        Composite comp = null;
        try {
            comp = fragment.createComposite(parentComp, this);
        } catch (Exception e) {
            Trace.trace(Trace.WARNING, "Could not create wizard page composite", e);
        }
        if (comp == null) {
            comp = new Composite(parentComp, SWT.NONE);
            comp.setLayout(new FillLayout(SWT.VERTICAL));
            Label label = new Label(comp, SWT.NONE);
            label.setText("Internal error");
        }
        GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
        data.widthHint = convertHorizontalDLUsToPixels(150);
        comp.setLayoutData(data);
        setControl(comp);

        isCreated = true;
        update();
    }

    public boolean isPageComplete() {
        try {
            if (!fragment.isComplete())
                return false;
        } catch (Exception e) {
            return false;
        }
        return true;
    }

    public boolean canFlipToNextPage() {
        if (getNextPage() == null)
            return false;
        try {
            if (!fragment.isComplete())
                return false;
        } catch (Exception e) {
            return false;
        }
        return true;
    }

    public void setVisible(boolean visible) {
        super.setVisible(visible);

        if (visible) {
            TaskWizard wizard = (TaskWizard) getWizard();
            wizard.switchWizardFragment(fragment);

            if (getContainer().getCurrentPage() != null)
                getContainer().updateButtons();
        }
    }

    public void setMessage(String message, int type) {
        if (type == IMessageProvider.ERROR && "".equals(message)) {
            message = null;
        }
        super.setMessage(message, type);
        WizardFragment frag = ((TaskWizard) getWizard()).getCurrentWizardFragment();
        if (!fragment.equals(frag))
            return;
        getContainer().updateButtons();
    }

    public void run(boolean fork, boolean cancelable, IRunnableWithProgress runnable)
            throws InterruptedException, InvocationTargetException {
        getWizard().getContainer().run(fork, cancelable, runnable);
    }

    public void update() {
        if (!isCreated)
            return;

        final IWizardContainer container = getContainer();
        getShell().getDisplay().syncExec(new Runnable() {
            public void run() {
                fragment.updateChildFragments();
                ((TaskWizard) getWizard()).updatePages();

                if (container.getCurrentPage() != null)
                    container.updateButtons();
            }
        });
    }
}