uk.ac.gda.ui.dialog.VisitIDDialog.java Source code

Java tutorial

Introduction

Here is the source code for uk.ac.gda.ui.dialog.VisitIDDialog.java

Source

/*-
 * Copyright  2009 Diamond Light Source Ltd.
 *
 * This file is part of GDA.
 *
 * GDA is free software: you can redistribute it and/or modify it under the
 * terms of the GNU General Public License version 3 as published by the Free
 * Software Foundation.
 *
 * GDA is distributed in the hope that it will be useful, but WITHOUT ANY
 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
 * details.
 *
 * You should have received a copy of the GNU General Public License along
 * with GDA. If not, see <http://www.gnu.org/licenses/>.
 */

package uk.ac.gda.ui.dialog;

import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.ColumnViewerToolTipSupport;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.window.ToolTip;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;

/**
 * Based on table in BationView which is a more complex example of a table
 */
public class VisitIDDialog extends Dialog {
    protected TableViewer userTable;
    private String chosenVisitID = null;
    private String[][] visits;

    /**
     * Create the dialog.
     * 
     * @param parent
     */
    public VisitIDDialog(Display parent, String[][] visits) {
        super(new Shell(parent));
        this.visits = visits;
    }

    @Override
    protected void configureShell(Shell newShell) {
        super.configureShell(newShell);
        newShell.setText("Choose a visit");
    }

    /**
     * Create contents of the dialog.
     * 
     * @param parent
     */
    @Override
    protected Control createDialogArea(Composite parent) {
        Composite container = (Composite) super.createDialogArea(parent);

        final Label l = new Label(container, SWT.NULL);
        l.setText(
                "You can collect data under any of the following visits. Please select the visit you wish to use.");

        // create table viewer and table
        final Table table = new Table(container,
                SWT.SINGLE | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.HIDE_SELECTION);
        final GridData gridData = new GridData(GridData.FILL_BOTH);
        gridData.grabExcessVerticalSpace = true;
        gridData.horizontalSpan = 2;
        table.setLayoutData(gridData);
        table.setLinesVisible(true);
        table.setHeaderVisible(true);

        this.userTable = new TableViewer(table);
        userTable.setUseHashlookup(true);
        createTableColumns();
        createContentProvider();

        userTable.setInput(visits);

        return container;
    }

    private void createTableColumns() {

        ColumnViewerToolTipSupport.enableFor(userTable, ToolTip.NO_RECREATE);

        final TableViewerColumn visitIDCol = new TableViewerColumn(userTable, SWT.NONE, 0);
        TableColumn tableColumn = visitIDCol.getColumn();
        tableColumn.setAlignment(SWT.CENTER);
        visitIDCol.getColumn().setText("Visit ID");
        visitIDCol.getColumn().setWidth(100);
        visitIDCol.setLabelProvider(new VisitIDColumnLabelProvider(0));

        //      final TableViewerColumn proposalCol = new TableViewerColumn(userTable, SWT.NONE, 1);
        //      TableColumn tableColumn_1 = proposalCol.getColumn();
        //      tableColumn_1.setAlignment(SWT.CENTER);
        //      proposalCol.getColumn().setText("Proposal ID");
        //      proposalCol.getColumn().setWidth(100);
        //      proposalCol.setLabelProvider(new VisitIDColumnLabelProvider(1));

        final TableViewerColumn descriptionCol = new TableViewerColumn(userTable, SWT.NONE, 1);
        descriptionCol.getColumn().setText("Title");
        descriptionCol.getColumn().setWidth(300);
        descriptionCol.setLabelProvider(new VisitIDColumnLabelProvider(1));

    }

    private class VisitIDColumnLabelProvider extends ColumnLabelProvider {

        private int columnIndex;

        VisitIDColumnLabelProvider(int columnIndex) {
            this.columnIndex = columnIndex;
        }

        @Override
        public String getText(Object element) {
            if ((element instanceof String[])) {
                return ((String[]) element)[columnIndex];
            }
            return super.getText(element);
        }
    }

    private void createContentProvider() {
        userTable.setContentProvider(new IStructuredContentProvider() {
            @Override
            public void dispose() {
            }

            @Override
            public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
            }

            @Override
            public Object[] getElements(Object inputElement) {
                return visits;
            }
        });
    }

    /**
     * Create contents of the button bar.
     * 
     * @param parent
     */
    @Override
    protected void createButtonsForButtonBar(Composite parent) {
        createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
        createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
    }

    /**
     * Return the initial size of the dialog.
     */
    @Override
    protected Point getInitialSize() {
        return new Point(661, 300);
    }

    public String getChoosenID() {
        return chosenVisitID;
    }

    @Override
    protected void buttonPressed(int buttonId) {
        if (buttonId == IDialogConstants.OK_ID) {
            // only accept one item selected
            if (userTable.getTable().getSelectionCount() != 1) {
                return;
            }
            // FIXME
            if (userTable.getTable().getSelection().length != 1) {
                return;
            }

            TableItem choice = userTable.getTable().getSelection()[0];
            chosenVisitID = ((String[]) choice.getData())[0];

        } else {
            chosenVisitID = null;
        }
        super.buttonPressed(buttonId);
    }

}