org.eclipse.team.internal.ccvs.ui.ListSelectionArea.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.team.internal.ccvs.ui.ListSelectionArea.java

Source

/*******************************************************************************
 * Copyright (c) 2000, 2006 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 org.eclipse.team.internal.ccvs.ui;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.viewers.CheckStateChangedEvent;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.ICheckStateListener;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.team.internal.ui.dialogs.DialogArea;

/**
 * Reusable area that provides a list to select from and a select all and
 * deselect all button.
 */
public class ListSelectionArea extends DialogArea {
    private Object inputElement;
    private IStructuredContentProvider contentProvider;
    private ILabelProvider labelProvider;
    private String message;
    private List initialSelections;

    // the visual selection widget group
    private CheckboxTableViewer listViewer;

    private Object[] previousCheckedElements;

    public static final String LIST_SELECTION = "ListSelection"; //$NON-NLS-1$

    /**
     * Constructor for ListSelectionArea.
     * @param parentDialog
     * @param settings
     */
    public ListSelectionArea(Object input, IStructuredContentProvider contentProvider, ILabelProvider labelProvider,
            String message) {
        this.inputElement = input;
        this.contentProvider = contentProvider;
        this.labelProvider = labelProvider;
        this.message = message;
        this.initialSelections = new ArrayList();
    }

    /**
     * @see org.eclipse.team.internal.ccvs.ui.DialogArea#createArea(org.eclipse.swt.widgets.Composite)
     */
    public void createArea(Composite parent) {

        Dialog.applyDialogFont(parent);

        final Composite composite = createComposite(parent, 1, true);

        initializeDialogUnits(composite);

        if (message != null)
            createWrappingLabel(composite, message, 1);

        listViewer = CheckboxTableViewer.newCheckList(composite, SWT.BORDER);
        GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
        data.heightHint = 0; // It will expand to the size of the wizard page!
        data.widthHint = 0;
        listViewer.getTable().setLayoutData(data);

        listViewer.setLabelProvider(labelProvider);
        listViewer.setContentProvider(contentProvider);

        listViewer.addCheckStateListener(new ICheckStateListener() {
            public void checkStateChanged(CheckStateChangedEvent event) {
                Object[] checkedElements = getViewer().getCheckedElements();
                firePropertyChangeChange(LIST_SELECTION, previousCheckedElements, checkedElements);
                previousCheckedElements = checkedElements;
            }
        });

        addSelectionButtons(composite);

        initializeViewer();

        // initialize page
        if (!getInitialElementSelections().isEmpty())
            checkInitialSelections();
    }

    /**
     * Initializes this dialog's viewer after it has been laid out.
     */
    private void initializeViewer() {
        listViewer.setInput(inputElement);
    }

    /**
     * Visually checks the previously-specified elements in this dialog's list
     * viewer.
     */
    private void checkInitialSelections() {
        Iterator itemsToCheck = getInitialElementSelections().iterator();

        while (itemsToCheck.hasNext())
            listViewer.setChecked(itemsToCheck.next(), true);
    }

    /**
     * Add the selection and deselection buttons to the dialog.
     * @param composite org.eclipse.swt.widgets.Composite
     */
    private void addSelectionButtons(Composite composite) {
        Composite buttonComposite = new Composite(composite, SWT.RIGHT);
        buttonComposite.setLayout(new GridLayout(2, false));
        buttonComposite.setData(new GridData(SWT.END, SWT.BEGINNING, true, false));

        Button selectButton = createButton(buttonComposite, CVSUIMessages.ListSelectionArea_selectAll,
                GridData.HORIZONTAL_ALIGN_FILL);

        SelectionListener listener = new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                listViewer.setAllChecked(true);
            }
        };
        selectButton.addSelectionListener(listener);

        Button deselectButton = createButton(buttonComposite, CVSUIMessages.ListSelectionArea_deselectAll,
                GridData.HORIZONTAL_ALIGN_FILL);

        listener = new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                listViewer.setAllChecked(false);

            }
        };
        deselectButton.addSelectionListener(listener);
    }

    /**
     * Returns the list of initial element selections.
     * @return List
     */
    protected List getInitialElementSelections() {
        return initialSelections;
    }

    /**
     * Returns the listViewer.
     * @return CheckboxTableViewer
     */
    public CheckboxTableViewer getViewer() {
        return listViewer;
    }

}