com.nokia.traceviewer.engine.preferences.TraceViewerAdvancedPreferencesPage.java Source code

Java tutorial

Introduction

Here is the source code for com.nokia.traceviewer.engine.preferences.TraceViewerAdvancedPreferencesPage.java

Source

/*
 * Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies). 
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
 * which accompanies this distribution, and is available
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
 *
 * Initial Contributors:
 * Nokia Corporation - initial contribution.
 *
 * Contributors:
 *
 * Description:
 *
 * Advanced preferences page
 *
 */
package com.nokia.traceviewer.engine.preferences;

import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
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.FileDialog;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.eclipse.ui.PlatformUI;

import com.nokia.traceviewer.TraceViewerHelpContextIDs;
import com.nokia.traceviewer.TraceViewerPlugin;
import com.nokia.traceviewer.engine.TraceViewerGlobals;

/**
 * Advanced preferences page
 * 
 */
public class TraceViewerAdvancedPreferencesPage extends PreferencePage implements IWorkbenchPreferencePage {

    /**
     * Text to show about enabling external filter
     */
    private static final String EXTERNALFILTER_INFORMATION = Messages
            .getString("TraceViewerAdvancedPreferencesPage.ExternalFilterInformation"); //$NON-NLS-1$

    /**
     * PreferenceStore holding all preferences
     */
    private final IPreferenceStore store;

    /**
     * External filter checkbox
     */
    private Button externalFilterCheckBox;

    /**
     * External filter text field
     */
    private Text externalFilterText;

    /**
     * External filter browse button
     */
    private Button externalFilterBrowseButton;

    /**
     * Constructor
     */
    public TraceViewerAdvancedPreferencesPage() {
        super();

        // Set the preference store for the preference page.
        store = TraceViewerPlugin.getDefault().getPreferenceStore();
        setPreferenceStore(store);
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse
     * .swt.widgets.Composite)
     */
    @Override
    protected Control createContents(Composite parent) {

        // Set help
        PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, TraceViewerHelpContextIDs.ADVANCED_PREFERENCES);

        // Create Top composite in top of the parent composite
        Composite top = new Composite(parent, SWT.LEFT);
        GridData topCompositeGridData = new GridData(SWT.FILL, SWT.FILL, true, false);
        top.setLayoutData(topCompositeGridData);
        GridLayout topCompositeGridLayout = new GridLayout();
        topCompositeGridLayout.horizontalSpacing = 0;
        topCompositeGridLayout.verticalSpacing = 0;
        topCompositeGridLayout.marginWidth = 0;
        topCompositeGridLayout.marginHeight = 0;
        top.setLayout(topCompositeGridLayout);

        // Advanced group
        GridLayout advancedGroupGridLayout = new GridLayout();
        advancedGroupGridLayout.numColumns = 3;
        Group advancedGroup = new Group(top, SWT.NONE);
        String advGroupName = Messages.getString("TraceViewerAdvancedPreferencesPage.AdvancedGroupName"); //$NON-NLS-1$
        advancedGroup.setText(advGroupName);
        GridData advancedGroupGridData = new GridData(SWT.FILL, SWT.FILL, true, false);
        advancedGroup.setLayoutData(advancedGroupGridData);
        advancedGroup.setLayout(advancedGroupGridLayout);

        // External filter checkbox
        String extFilterText = Messages.getString("TraceViewerAdvancedPreferencesPage.ExternalFilterText"); //$NON-NLS-1$
        GridData externalFilterGridData = new GridData(SWT.FILL, SWT.FILL, true, false);
        externalFilterGridData.horizontalSpan = 3;
        externalFilterCheckBox = new Button(advancedGroup, SWT.CHECK);
        externalFilterCheckBox.setText(extFilterText);
        externalFilterCheckBox.setToolTipText(extFilterText);
        externalFilterCheckBox.setLayoutData(externalFilterGridData);
        externalFilterCheckBox.setSelection(store.getBoolean(PreferenceConstants.EXTERNAL_FILTER_CHECKBOX));

        // External filter label
        String commandEditorText = Messages.getString("TraceViewerAdvancedPreferencesPage.CommandEditorText"); //$NON-NLS-1$
        Label filterLabel = new Label(advancedGroup, SWT.NONE);
        filterLabel.setText(commandEditorText);

        // External filter text
        GridData externalFilterTextGridData = new GridData();
        externalFilterTextGridData.grabExcessHorizontalSpace = true;
        externalFilterTextGridData.horizontalAlignment = SWT.FILL;
        externalFilterText = new Text(advancedGroup, SWT.BORDER);
        externalFilterText.setText(store.getString(PreferenceConstants.EXTERNAL_FILTER_COMMAND));
        externalFilterText.setLayoutData(externalFilterTextGridData);

        // External filter browse button
        GridData externalFilterBrowseButtonGridData = new GridData();
        externalFilterBrowseButtonGridData.widthHint = 75;
        externalFilterBrowseButton = new Button(advancedGroup, SWT.NONE);
        String browseText = Messages.getString("TraceViewerAdvancedPreferencesPage.BrowseButtonText"); //$NON-NLS-1$
        externalFilterBrowseButton.setText(browseText);
        String browseToolTip = Messages.getString("TraceViewerAdvancedPreferencesPage.BrowseButtonToolTip"); //$NON-NLS-1$
        externalFilterBrowseButton.setToolTipText(browseToolTip);
        externalFilterBrowseButton.setLayoutData(externalFilterBrowseButtonGridData);

        // Disable if checkbox is not checked
        if (!externalFilterCheckBox.getSelection()) {
            externalFilterText.setEnabled(false);
            externalFilterBrowseButton.setEnabled(false);
        }

        // Spacer label
        Label spacerLabel = new Label(advancedGroup, SWT.NONE);
        GridData spacerLabelGridData = new GridData();
        spacerLabelGridData.horizontalSpan = 3;
        spacerLabel.setLayoutData(spacerLabelGridData);

        // Information label
        Label label = new Label(advancedGroup, SWT.WRAP);
        label.setText(EXTERNALFILTER_INFORMATION);
        GridData labelGridData = new GridData();
        labelGridData.horizontalSpan = 3;
        label.setLayoutData(labelGridData);

        // Create action listeners
        createActionListeners();

        return top;
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
     */
    public void init(IWorkbench workbench) {
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.jface.preference.PreferencePage#performDefaults()
     */
    @Override
    protected void performDefaults() {
        if (getControl() != null && !getControl().isDisposed()) {
            externalFilterCheckBox.setSelection(false);
            externalFilterText.setText(""); //$NON-NLS-1$
            super.performDefaults();
        }
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.jface.preference.PreferencePage#performOk()
     */
    @Override
    public boolean performOk() {
        saveSettings();
        return super.performOk();
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.jface.preference.PreferencePage#performApply()
     */
    @Override
    public void performApply() {
        saveSettings();
        super.performApply();
    }

    /**
     * Saves settings
     */
    private void saveSettings() {
        if (getControl() != null && !getControl().isDisposed()) {

            // Give FilterProcessor the information about using external filter
            // or
            TraceViewerGlobals.getTraceViewer().getDataProcessorAccess().getFilterProcessor()
                    .setUsingExternalFilter(externalFilterCheckBox.getSelection());

            store.setValue(PreferenceConstants.EXTERNAL_FILTER_COMMAND, externalFilterText.getText());

            store.setValue(PreferenceConstants.EXTERNAL_FILTER_CHECKBOX, externalFilterCheckBox.getSelection());
        }
    }

    /**
     * Creates action listeners
     */
    private void createActionListeners() {
        // Add listener to checkbox
        externalFilterCheckBox.addSelectionListener(new SelectionAdapter() {

            /*
             * (non-Javadoc)
             * 
             * @see
             * org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse
             * .swt.events.SelectionEvent)
             */
            @Override
            public void widgetSelected(SelectionEvent e) {
                boolean selected = externalFilterCheckBox.getSelection();
                if (selected) {
                    externalFilterText.setEnabled(true);
                    externalFilterBrowseButton.setEnabled(true);
                } else {
                    externalFilterText.setEnabled(false);
                    externalFilterBrowseButton.setEnabled(false);
                }
            }

        });

        // Add listener to Browse button
        externalFilterBrowseButton.addSelectionListener(new SelectionAdapter() {
            /*
             * (non-Javadoc)
             * 
             * @see
             * org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse
             * .swt.events.SelectionEvent)
             */
            @Override
            public void widgetSelected(SelectionEvent e) {
                Shell activeShell = PlatformUI.getWorkbench().getDisplay().getActiveShell();
                Shell fileDialogShell = new Shell(activeShell);
                FileDialog dlg = new FileDialog(fileDialogShell);

                // Move the dialog to the center of the top level shell.
                Rectangle shellBounds = activeShell.getBounds();
                Point dialogSize = fileDialogShell.getSize();
                int middleX = shellBounds.x + ((shellBounds.width - dialogSize.x) / 2);
                int middleY = shellBounds.y + ((shellBounds.height - dialogSize.y) / 2);
                fileDialogShell.setLocation(middleX, middleY);

                String file = dlg.open();
                externalFilterText.setText(file);
            }
        });
    }
}