org.eclipse.linuxtools.dataviewers.dialogs.STDataViewersHideShowColumnsDialog.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.linuxtools.dataviewers.dialogs.STDataViewersHideShowColumnsDialog.java

Source

/*******************************************************************************
 * Copyright (c) 2009 STMicroelectronics.
 * 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:
 *    Marzia Maugeri <marzia.maugeri@st.com> - initial API and implementation
 *******************************************************************************/
package org.eclipse.linuxtools.dataviewers.dialogs;

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.IStructuredContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.linuxtools.dataviewers.abstractviewers.AbstractSTViewer;
import org.eclipse.linuxtools.dataviewers.abstractviewers.STDataViewersHideShowManager;
import org.eclipse.linuxtools.dataviewers.abstractviewers.STDataViewersMessages;
import org.eclipse.swt.SWT;
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.swt.widgets.Control;
import org.eclipse.swt.widgets.Item;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;

/**
 * This dialog allows the user to show/hide some columns of the viewer
 * The status of shown/hidden columns is saved in the dialog settings of the view.
 *
 */
public class STDataViewersHideShowColumnsDialog extends Dialog {

    private boolean dirty;

    private STDataViewersHideShowManager manager;

    private CheckboxTableViewer checkButtonsTable;

    private Button selectAllButton;

    private Button deselectAllButton;

    private AbstractSTViewer stViewer;

    /**
     * Constructor
     * @param parentShell
     * @param view
     */
    public STDataViewersHideShowColumnsDialog(AbstractSTViewer stViewer) {
        super(stViewer.getViewer().getControl().getShell());
        this.dirty = false;
        this.stViewer = stViewer;
        this.manager = stViewer.getHideShowManager();
    }

    /* (non-Javadoc)
      * Method declared on Window.
      */
    protected void configureShell(Shell newShell) {
        super.configureShell(newShell);
        newShell.setText(STDataViewersMessages.hideshowDialog_title);
    }

    /* (non-Javadoc)
     * Method declared on Dialog.
     */
    protected Control createDialogArea(Composite parent) {
        Composite composite = (Composite) super.createDialogArea(parent);
        GridData layoutData = new GridData(SWT.FILL, SWT.FILL, false, false, 2, 1);
        composite.setLayoutData(layoutData);
        GridLayout layout = new GridLayout(2, true);
        composite.setLayout(layout);

        initializeDialogUnits(composite);

        layoutData = new GridData(SWT.FILL, SWT.FILL, true, false, 2, 1);
        checkButtonsTable = createCheckboxTable(composite, layoutData);
        checkButtonsTable.setInput(stViewer.getColumns());
        checkButtonsTable.addCheckStateListener(checkStateListener);

        selectAllButton = new Button(composite, SWT.NONE);
        selectAllButton.setText(STDataViewersMessages.selectAll_text);
        selectAllButton.addSelectionListener(new SelectionListener() {
            public void widgetDefaultSelected(SelectionEvent e) {
                widgetSelected(e);
            }

            public void widgetSelected(SelectionEvent e) {
                markDirty();
                checkButtonsTable.setAllChecked(true);
            }
        });
        layoutData = new GridData(SWT.FILL, SWT.TOP, false, false, 1, 1);
        selectAllButton.setLayoutData(layoutData);

        deselectAllButton = new Button(composite, SWT.NONE);
        deselectAllButton.setText(STDataViewersMessages.deselectAll_text);
        deselectAllButton.addSelectionListener(new SelectionListener() {
            public void widgetDefaultSelected(SelectionEvent e) {
                widgetSelected(e);
            }

            public void widgetSelected(SelectionEvent e) {
                markDirty();
                checkButtonsTable.setAllChecked(false);
            }
        });
        layoutData = new GridData(SWT.FILL, SWT.TOP, false, false, 1, 1);
        deselectAllButton.setLayoutData(layoutData);

        createSeparatorLine(composite);
        Dialog.applyDialogFont(composite);

        setDefaultWidgetsValues();

        return composite;
    }

    private void setDefaultWidgetsValues() {
        Item[] columns = stViewer.getColumns();
        for (int i = columns.length; i-- > 0;) {
            boolean state = (manager.getState(i) == STDataViewersHideShowManager.STATE_SHOWN);
            checkButtonsTable.setChecked(columns[i], state);
        }
    }

    private ICheckStateListener checkStateListener = new ICheckStateListener() {
        public void checkStateChanged(CheckStateChangedEvent event) {
            markDirty();
        }
    };

    /**
    * Creates a separator line above the OK/Cancel buttons bar
    * 
    * @param parent
    *            the parent composite
    */
    protected void createSeparatorLine(Composite parent) {
        GridLayout parentLayout = (GridLayout) parent.getLayout();

        // Build the separator line
        Label separator = new Label(parent, SWT.HORIZONTAL | SWT.SEPARATOR);
        GridData layoutData = new GridData(SWT.FILL, SWT.FILL, true, true, parentLayout.numColumns, 1);
        separator.setLayoutData(layoutData);
    }

    private CheckboxTableViewer createCheckboxTable(Composite parent, GridData layoutData) {
        CheckboxTableViewer tableViewer = CheckboxTableViewer.newCheckList(parent,
                SWT.SINGLE | SWT.HIDE_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
        tableViewer.getControl().setLayoutData(layoutData);

        tableViewer.setContentProvider(new IStructuredContentProvider() {
            public Object[] getElements(Object inputElement) {
                if (inputElement instanceof Item[]) {
                    Item[] columns = (Item[]) inputElement;
                    int[] order = stViewer.getColumnOrder();
                    Item[] elements = new Item[columns.length];

                    // sort the columns according to their actual display order
                    for (int i = columns.length; i-- > 0;) {
                        elements[i] = columns[order[i]];
                    }

                    return elements;
                }
                return new Object[] {};
            }

            public void dispose() {
            }

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

        tableViewer.setLabelProvider(new LabelProvider() {
            public String getText(Object element) {
                if (element instanceof Item) {
                    Item column = (Item) element;

                    if (manager.getWidth(stViewer.getColumnIndex(column)) == 0) {
                        return column.getText() + " (width = 0)";
                    }
                    return column.getText();
                }
                return element.toString();
            }
        });

        return tableViewer;
    }

    @Override
    public int open() {
        dirty = false;
        return super.open();
    }

    @Override
    protected void okPressed() {
        if (isDirty()) {
            saveManagerSettings();
        }
        super.okPressed();
    }

    private void saveManagerSettings() {
        Item[] columns = stViewer.getColumns();
        for (int i = columns.length; i-- > 0;) {
            int state = checkButtonsTable.getChecked(columns[i]) ? STDataViewersHideShowManager.STATE_SHOWN
                    : STDataViewersHideShowManager.STATE_HIDDEN;
            manager.setState(i, state);
        }
    }

    /**
     * @return the hideShowManager
     */
    public STDataViewersHideShowManager getManager() {
        return manager;
    }

    /**
     * @return boolean
     */
    public boolean isDirty() {
        return dirty;
    }

    /**
     * Sets the dirty flag to true.
     */
    public void markDirty() {
        dirty = true;
    }

}