gov.redhawk.ui.parts.WizardCheckboxTablePart.java Source code

Java tutorial

Introduction

Here is the source code for gov.redhawk.ui.parts.WizardCheckboxTablePart.java

Source

/**
 * This file is protected by Copyright. 
 * Please refer to the COPYRIGHT file distributed with this source distribution.
 * 
 * This file is part of REDHAWK IDE.
 * 
 * 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.
 *
 */
/*******************************************************************************
 * Copyright (c) 2000, 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
 *******************************************************************************/
package gov.redhawk.ui.parts;

import gov.redhawk.ui.util.SWTUtil;
import gov.redhawk.ui.wizards.ListUtil;

import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.StructuredViewer;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.forms.widgets.FormToolkit;

/**
 * The Class WizardCheckboxTablePart.
 */
public class WizardCheckboxTablePart extends CheckboxTablePart {
    private int selectAllIndex = -1;
    private int deselectAllIndex = -1;
    private final String tableName;
    private int counter;
    private Label counterLabel;

    /**
     * Constructor for WizardCheckboxTablePart.
     * 
     * @param buttonLabels the button labels
     * @param tableName the table name
     */
    public WizardCheckboxTablePart(final String tableName, final String[] buttonLabels) {
        super(buttonLabels);
        this.tableName = tableName;
    }

    /**
     * Instantiates a new wizard checkbox table part.
     * 
     * @param mainLabel the main label
     */
    public WizardCheckboxTablePart(final String mainLabel) {
        this(mainLabel, new String[] { "&Select All", "D&eselect All" });
        setSelectAllIndex(0);
        setDeselectAllIndex(1);
    }

    /**
     * Sets the select all index.
     * 
     * @param index the new select all index
     */
    public void setSelectAllIndex(final int index) {
        this.selectAllIndex = index;
    }

    /**
     * Sets the deselect all index.
     * 
     * @param index the new deselect all index
     */
    public void setDeselectAllIndex(final int index) {
        this.deselectAllIndex = index;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    protected void buttonSelected(final Button button, final int index) {
        if (index == this.selectAllIndex) {
            handleSelectAll(true);
        }
        if (index == this.deselectAllIndex) {
            handleSelectAll(false);
        }
    }

    /**
     * Gets the selection.
     * 
     * @return the selection
     */
    public Object[] getSelection() {
        final CheckboxTableViewer viewer = getTableViewer();
        return viewer.getCheckedElements();
    }

    /**
     * Sets the selection.
     * 
     * @param selected the new selection
     */
    public void setSelection(final Object[] selected) {
        final CheckboxTableViewer viewer = getTableViewer();
        viewer.setCheckedElements(selected);
        updateCounter(viewer.getCheckedElements().length);
    }

    /**
     * Creates the control.
     * 
     * @param parent the parent
     */
    public void createControl(final Composite parent) {
        createControl(parent, 2);
    }

    /**
     * Creates the control.
     * 
     * @param parent the parent
     * @param span the span
     */
    public void createControl(final Composite parent, final int span) {
        createControl(parent, SWT.NULL, span, null);
        this.counterLabel = new Label(parent, SWT.NULL);
        final GridData gd = new GridData(GridData.VERTICAL_ALIGN_BEGINNING | GridData.HORIZONTAL_ALIGN_FILL);
        gd.horizontalSpan = span;
        this.counterLabel.setLayoutData(gd);
        updateCounter(0);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    protected Button createButton(final Composite parent, final String label, final int index,
            final FormToolkit toolkit) {
        final Button button = super.createButton(parent, label, index, toolkit);
        SWTUtil.setButtonDimensionHint(button);
        return button;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    protected StructuredViewer createStructuredViewer(final Composite parent, final int style,
            final FormToolkit toolkit) {
        final StructuredViewer viewer = super.createStructuredViewer(parent, style, toolkit);
        viewer.setComparator(ListUtil.NAME_COMPARATOR);
        return viewer;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    protected void createMainLabel(final Composite parent, final int span, final FormToolkit toolkit) {
        if (this.tableName == null) {
            return;
        }
        final Label label = new Label(parent, SWT.NULL);
        label.setText(this.tableName);
        final GridData gd = new GridData();
        gd.horizontalSpan = span;
        label.setLayoutData(gd);
    }

    /**
     * Update counter.
     * 
     * @param amount the amount
     */
    protected void updateCounter(final int amount) {
        this.counter = amount;
        updateCounterLabel();
    }

    /**
     * Update counter label.
     */
    protected void updateCounterLabel() {
        final String number = "" + getSelectionCount(); //$NON-NLS-1$
        final String totalNumber = "" + getTotalCount(); //$NON-NLS-1$
        final String message = NLS.bind("{0} of {1} selected.", (new String[] { number, totalNumber }));
        this.counterLabel.setText(message);
    }

    /**
     * Gets the selection count.
     * 
     * @return the selection count
     */
    public int getSelectionCount() {
        return this.counter;
    }

    /**
     * Select all.
     * 
     * @param select the select
     */
    public void selectAll(final boolean select) {
        handleSelectAll(select);
    }

    /**
     * Gets the total count.
     * 
     * @return the total count
     */
    private int getTotalCount() {
        final CheckboxTableViewer viewer = getTableViewer();
        return viewer.getTable().getItemCount();
    }

    /**
     * Handle select all.
     * 
     * @param select the select
     */
    protected void handleSelectAll(final boolean select) {
        final CheckboxTableViewer viewer = getTableViewer();
        viewer.setAllChecked(select);
        int selected;
        if (!select) {
            selected = 0;
        } else {
            selected = getTotalCount();
        }
        updateCounter(selected);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    protected void elementChecked(final Object element, final boolean checked) {
        final int count = getSelectionCount();
        updateCounter((checked) ? count + 1 : count - 1); // SUPPRESS CHECKSTYLE AvoidInline
    }

    /**
     * Gets the counter label.
     * 
     * @return the counter label
     */
    public Label getCounterLabel() {
        return this.counterLabel;
    }
}