com.siteview.mde.internal.ui.wizards.WizardTreeSelectionPage.java Source code

Java tutorial

Introduction

Here is the source code for com.siteview.mde.internal.ui.wizards.WizardTreeSelectionPage.java

Source

/*******************************************************************************
 *  Copyright (c) 2000, 2008 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
 *******************************************************************************/
package com.siteview.mde.internal.ui.wizards;

import org.eclipse.jface.viewers.*;
import org.eclipse.jface.wizard.IWizardNode;
import com.siteview.mde.internal.ui.elements.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.BusyIndicator;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;

public abstract class WizardTreeSelectionPage extends BaseWizardSelectionPage implements ISelectionChangedListener {
    private TreeViewer categoryTreeViewer;
    private String baseCategory;
    protected TableViewer wizardSelectionViewer;

    private WizardCollectionElement wizardCategories;

    public WizardTreeSelectionPage(WizardCollectionElement categories, String baseCategory, String message) {
        super("NewExtension", message); //$NON-NLS-1$
        this.wizardCategories = categories;
        this.baseCategory = baseCategory;
    }

    public void advanceToNextPage() {
        getContainer().showPage(getNextPage());
    }

    public void createControl(Composite parent) {
        // top level group
        Composite container = new Composite(parent, SWT.NULL);
        FillLayout flayout = new FillLayout();
        flayout.marginWidth = 5;
        flayout.marginHeight = 5;
        container.setLayout(flayout);
        SashForm rootSash = new SashForm(container, SWT.VERTICAL);
        SashForm outerSash = new SashForm(rootSash, SWT.HORIZONTAL);
        GridLayout layout = new GridLayout();
        layout.numColumns = 2;

        // tree pane
        Tree tree = new Tree(outerSash, SWT.BORDER);
        categoryTreeViewer = new TreeViewer(tree);
        categoryTreeViewer.setContentProvider(new TreeContentProvider());
        categoryTreeViewer.setLabelProvider(ElementLabelProvider.INSTANCE);

        categoryTreeViewer.setComparator(new WizardCollectionComparator(baseCategory));
        categoryTreeViewer.addSelectionChangedListener(this);

        // wizard actions pane
        Table table = new Table(outerSash, SWT.BORDER);
        new TableColumn(table, SWT.NONE);
        TableLayout tlayout = new TableLayout();
        tlayout.addColumnData(new ColumnWeightData(100));
        table.setLayout(tlayout);

        wizardSelectionViewer = new TableViewer(table);
        wizardSelectionViewer.setContentProvider(new ListContentProvider());
        wizardSelectionViewer.setLabelProvider(ListUtil.TABLE_LABEL_PROVIDER);
        wizardSelectionViewer.setComparator(ListUtil.NAME_COMPARATOR);
        wizardSelectionViewer.addSelectionChangedListener(this);
        wizardSelectionViewer.addDoubleClickListener(new IDoubleClickListener() {
            public void doubleClick(DoubleClickEvent event) {
                BusyIndicator.showWhile(wizardSelectionViewer.getControl().getDisplay(), new Runnable() {
                    public void run() {
                        selectionChanged(new SelectionChangedEvent(wizardSelectionViewer,
                                wizardSelectionViewer.getSelection()));
                        advanceToNextPage();
                    }
                });
            }
        });

        // the new composite below is needed in order to make the label span the two
        // defined columns of outerContainer
        Composite descriptionComposite = new Composite(rootSash, SWT.NONE);
        layout = new GridLayout();
        layout.marginHeight = 0;
        layout.marginWidth = 0;
        descriptionComposite.setLayout(layout);
        createDescriptionIn(descriptionComposite);

        initializeViewers();
        rootSash.setWeights(new int[] { 70, 30 });
        setControl(container);
    }

    protected Object getSingleSelection(IStructuredSelection selection) {
        Object selectedObject = selection.getFirstElement();
        if (selection.size() > 1)
            selectedObject = null; // ie.- a multi-selection
        return selectedObject;
    }

    private void handleCategorySelection(SelectionChangedEvent selectionEvent) {
        setErrorMessage(null);
        setDescriptionText(""); //$NON-NLS-1$
        setSelectedNode(null);

        WizardCollectionElement selectedCategory = (WizardCollectionElement) getSingleSelection(
                (IStructuredSelection) selectionEvent.getSelection());

        if (selectedCategory == null)
            wizardSelectionViewer.setInput(null);
        else
            wizardSelectionViewer.setInput(selectedCategory.getWizards());
    }

    private void handleWizardSelection(SelectionChangedEvent selectionEvent) {
        setErrorMessage(null);

        WizardElement currentSelection = (WizardElement) getSingleSelection(
                (IStructuredSelection) selectionEvent.getSelection());

        // If no single selection, clear and return
        if (currentSelection == null) {
            setDescriptionText(""); //$NON-NLS-1$
            setSelectedNode(null);
            return;
        }
        final WizardElement finalSelection = currentSelection;
        /*
           BusyIndicator.showWhile(categoryTreeViewer.getControl().getDisplay(), new Runnable() {
        public void run() {
        */
        setSelectedNode(createWizardNode(finalSelection));
        setDescriptionText(finalSelection.getDescription());
        /*
        }
           });
        */
    }

    protected void initializeViewers() {
        categoryTreeViewer.setInput(wizardCategories);
        wizardSelectionViewer.addSelectionChangedListener(this);
        Object[] categories = wizardCategories.getChildren();
        if (categories.length > 0)
            categoryTreeViewer.setSelection(new StructuredSelection(categories[0]));
        categoryTreeViewer.getTree().setFocus();
    }

    public void selectionChanged(SelectionChangedEvent selectionEvent) {
        if (selectionEvent.getSelectionProvider().equals(categoryTreeViewer))
            handleCategorySelection(selectionEvent);
        else
            handleWizardSelection(selectionEvent);
    }

    public void setSelectedNode(IWizardNode node) {
        super.setSelectedNode(node);
    }
}