com.siteview.mde.internal.ui.wizards.templates.TemplateSelectionPage.java Source code

Java tutorial

Introduction

Here is the source code for com.siteview.mde.internal.ui.wizards.templates.TemplateSelectionPage.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.templates;

import java.util.ArrayList;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogPage;
import org.eclipse.jface.viewers.*;
import org.eclipse.jface.wizard.*;
import com.siteview.mde.internal.ui.*;
import com.siteview.mde.internal.ui.elements.DefaultContentProvider;
import com.siteview.mde.internal.ui.parts.FormBrowser;
import com.siteview.mde.internal.ui.parts.WizardCheckboxTablePart;
import com.siteview.mde.ui.templates.ITemplateSection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.forms.widgets.FormToolkit;

public class TemplateSelectionPage extends WizardPage {
    private ITemplateSection[] fCandidates;
    private ArrayList fVisiblePages;
    private WizardCheckboxTablePart fTablePart;
    private FormBrowser fDescriptionBrowser;

    class TablePart extends WizardCheckboxTablePart {
        public TablePart(String mainLabel) {
            super(mainLabel);
        }

        protected StructuredViewer createStructuredViewer(Composite parent, int style, FormToolkit toolkit) {
            return super.createStructuredViewer(parent, style | SWT.FULL_SELECTION, toolkit);
        }

        protected void updateCounter(int amount) {
            super.updateCounter(amount);
            if (getContainer() != null)
                getContainer().updateButtons();
        }
    }

    class ListContentProvider extends DefaultContentProvider implements IStructuredContentProvider {
        public Object[] getElements(Object parent) {
            return fCandidates;
        }
    }

    class ListLabelProvider extends LabelProvider implements ITableLabelProvider {
        public String getColumnText(Object obj, int index) {
            ITemplateSection section = (ITemplateSection) obj;
            if (index == 0)
                return section.getLabel();
            return section.getUsedExtensionPoint();
        }

        public Image getColumnImage(Object obj, int index) {
            if (index == 0)
                return MDEPlugin.getDefault().getLabelProvider().get(MDEPluginImages.DESC_EXTENSION_OBJ);
            return MDEPlugin.getDefault().getLabelProvider().get(MDEPluginImages.DESC_EXT_POINT_OBJ);
        }
    }

    /**
     * Constructor for TemplateSelectionPage.
     * @param pageName
     */
    public TemplateSelectionPage(ITemplateSection[] candidates) {
        super("templateSelection"); //$NON-NLS-1$
        fCandidates = candidates;
        setTitle(MDEUIMessages.TemplateSelectionPage_title);
        setDescription(MDEUIMessages.TemplateSelectionPage_desc);
        initializeTemplates();
    }

    private void initializeTemplates() {
        fTablePart = new TablePart(MDEUIMessages.TemplateSelectionPage_table);
        fDescriptionBrowser = new FormBrowser(SWT.BORDER | SWT.V_SCROLL);
        fDescriptionBrowser.setText(""); //$NON-NLS-1$
        MDEPlugin.getDefault().getLabelProvider().connect(this);
        fVisiblePages = new ArrayList();
    }

    public void dispose() {
        super.dispose();
        MDEPlugin.getDefault().getLabelProvider().disconnect(this);
    }

    /**
     * @see IDialogPage#createControl(Composite)
     */
    public void createControl(Composite parent) {
        Composite container = new Composite(parent, SWT.NULL);
        GridLayout layout = new GridLayout();
        container.setLayout(layout);
        layout.numColumns = 2;
        fTablePart.createControl(container);
        CheckboxTableViewer viewer = fTablePart.getTableViewer();
        viewer.setContentProvider(new ListContentProvider());
        viewer.setLabelProvider(new ListLabelProvider());
        initializeTable(viewer.getTable());

        viewer.addSelectionChangedListener(new ISelectionChangedListener() {
            public void selectionChanged(SelectionChangedEvent event) {
                IStructuredSelection sel = (IStructuredSelection) event.getSelection();
                handleSelectionChanged((ITemplateSection) sel.getFirstElement());
            }
        });
        fDescriptionBrowser.createControl(container);
        Control c = fDescriptionBrowser.getControl();
        GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.FILL_VERTICAL);
        gd.heightHint = 100;
        //gd.horizontalSpan = 2;
        c.setLayoutData(gd);
        viewer.setInput(MDEPlugin.getDefault());
        // add all wizard pages to wizard.  Just don't iniatilize them right away (bug 174457)
        initializeWizardPages();
        setControl(container);
        Dialog.applyDialogFont(container);
        PlatformUI.getWorkbench().getHelpSystem().setHelp(container, IHelpContextIds.TEMPLATE_SELECTION);
    }

    private void initializeWizardPages() {
        for (int i = 0; i < fCandidates.length; i++) {
            ITemplateSection section = fCandidates[i];
            if (section.getPagesAdded() == false)
                section.addPages((Wizard) getWizard());
        }
    }

    public ITemplateSection[] getSelectedTemplates() {
        Object[] elements = fTablePart.getTableViewer().getCheckedElements();
        ITemplateSection[] result = new ITemplateSection[elements.length];
        System.arraycopy(elements, 0, result, 0, elements.length);
        return result;
    }

    private void initializeTable(Table table) {
        table.setHeaderVisible(true);
        TableColumn column = new TableColumn(table, SWT.NULL);
        column.setText(MDEUIMessages.TemplateSelectionPage_column_name);
        column.setResizable(true);
        column = new TableColumn(table, SWT.NULL);
        column.setText(MDEUIMessages.TemplateSelectionPage_column_point);
        column.setResizable(true);

        TableLayout layout = new TableLayout();
        layout.addColumnData(new ColumnWeightData(50));
        layout.addColumnData(new ColumnWeightData(50));
        table.setLayout(layout);
    }

    private void handleSelectionChanged(ITemplateSection section) {
        String text = section != null ? section.getDescription() : ""; //$NON-NLS-1$
        if (text.length() > 0)
            text = "<p>" + text + "</p>"; //$NON-NLS-1$ //$NON-NLS-2$
        fDescriptionBrowser.setText(text);
    }

    public boolean canFlipToNextPage() {
        if (fTablePart.getSelectionCount() == 0)
            return false;
        return super.canFlipToNextPage();
    }

    public IWizardPage getNextPage() {
        ITemplateSection[] sections = getSelectedTemplates();
        fVisiblePages.clear();

        for (int i = 0; i < sections.length; i++) {
            ITemplateSection section = sections[i];

            for (int j = 0; j < section.getPageCount(); j++) {
                fVisiblePages.add(section.getPage(j));
            }
        }
        if (fVisiblePages.size() > 0)
            return (IWizardPage) fVisiblePages.get(0);

        return null;
    }

    public IWizardPage getNextVisiblePage(IWizardPage page) {
        if (page == this)
            return page.getNextPage();
        int index = fVisiblePages.indexOf(page);
        if (index >= 0 && index < fVisiblePages.size() - 1)
            return (IWizardPage) fVisiblePages.get(index + 1);
        return null;
    }

}