com.microsoft.tfs.client.common.ui.prefs.MainPreferencePage.java Source code

Java tutorial

Introduction

Here is the source code for com.microsoft.tfs.client.common.ui.prefs.MainPreferencePage.java

Source

// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See License.txt in the repository root.

package com.microsoft.tfs.client.common.ui.prefs;

import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
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.Group;
import org.eclipse.swt.widgets.Label;

import com.microsoft.tfs.client.common.ui.Messages;
import com.microsoft.tfs.client.common.ui.diagnostics.SupportUtils;
import com.microsoft.tfs.client.common.ui.framework.WindowSystem;
import com.microsoft.tfs.client.common.ui.framework.helper.MessageBoxHelpers;
import com.microsoft.tfs.client.common.ui.framework.helper.SWTUtil;
import com.microsoft.tfs.client.common.ui.framework.layout.GridDataBuilder;
import com.microsoft.tfs.client.common.ui.helpers.AutomationIDHelper;

public class MainPreferencePage extends BasePreferencePage {
    public static final String SUPPORT_BUTTON_ID = "MainPreferencePage.supportButton"; //$NON-NLS-1$
    public static final String RECONNECT_CHECKBOX_ID = "MainPreferencePage.reconnectButton"; //$NON-NLS-1$
    public static final String CONNECT_AT_IMPORT_CHECKBOX_ID = "MainPreferencePage.connectAtImportButton"; //$NON-NLS-1$
    public static final String ACCEPT_UNTRUSTED_CERTIFICATES_CHECKBOX_ID = "MainPreferencePage.acceptUntrustedCertificates"; //$NON-NLS-1$

    /**
     * This constant is since SWT 3.7, so we duplicate it here.
     */
    public static final int WEBKIT = 1 << 16;

    private Button reconnectButton;
    private Button connectAtImportButton;
    private Button acceptUntrustedCertificatesButton;

    private Button embeddedBrowserDefault;
    private Button embeddedBrowserMozilla;
    private Button embeddedBrowserWebkit;

    @Override
    protected Control createContents(final Composite parent) {
        final Composite composite = new Composite(parent, SWT.NONE);

        final GridLayout layout = new GridLayout(1, false);
        layout.horizontalSpacing = getHorizontalSpacing();
        layout.verticalSpacing = getVerticalSpacing();
        layout.marginWidth = 0;
        layout.marginHeight = 0;
        composite.setLayout(layout);

        final Label generalLabel = new Label(composite, SWT.WRAP);
        generalLabel.setText(Messages.getString("MainPreferencePage.GeneralPreferencesText")); //$NON-NLS-1$

        reconnectButton = new Button(composite, SWT.CHECK);
        AutomationIDHelper.setWidgetID(reconnectButton, RECONNECT_CHECKBOX_ID);
        reconnectButton.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1));
        reconnectButton.setText(Messages.getString("MainPreferencePage.ReconnectButtonText")); //$NON-NLS-1$

        connectAtImportButton = new Button(composite, SWT.CHECK);
        AutomationIDHelper.setWidgetID(connectAtImportButton, CONNECT_AT_IMPORT_CHECKBOX_ID);
        connectAtImportButton.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1));
        connectAtImportButton.setText(Messages.getString("MainPreferencePage.ConnectAtImportButtonText")); //$NON-NLS-1$

        acceptUntrustedCertificatesButton = new Button(composite, SWT.CHECK);
        AutomationIDHelper.setWidgetID(acceptUntrustedCertificatesButton,
                ACCEPT_UNTRUSTED_CERTIFICATES_CHECKBOX_ID);
        acceptUntrustedCertificatesButton.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1));
        acceptUntrustedCertificatesButton
                .setText(Messages.getString("MainPreferencePage.AcceptUntrustedCertificatesText")); //$NON-NLS-1$

        acceptUntrustedCertificatesButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent e) {
                // Confirm the user really wants to do this
                if (acceptUntrustedCertificatesButton.getSelection()) {
                    final boolean answer = MessageBoxHelpers.dialogYesNoPrompt(getShell(),
                            Messages.getString("MainPreferencePage.AcceptUntrustedCertificatesDialogTitle"), //$NON-NLS-1$
                            Messages.getString("MainPreferencePage.AcceptUntrustedCertificatesDialogText")); //$NON-NLS-1$

                    acceptUntrustedCertificatesButton.setSelection(answer);
                }
            }
        });

        if (showBrowserPreference()) {
            final Group browserGroup = new Group(composite, SWT.NONE);
            browserGroup.setText(Messages.getString("MainPreferencePage.EmbeddedBrowserGroupTitle")); //$NON-NLS-1$
            browserGroup.setLayout(new GridLayout(2, false));
            GridDataBuilder.newInstance().hGrab().hFill().vIndent(getVerticalSpacing()).applyTo(browserGroup);

            embeddedBrowserDefault = new Button(browserGroup, SWT.RADIO);
            embeddedBrowserDefault.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 2, 1));
            embeddedBrowserDefault.setText(Messages.getString("MainPreferencePage.EmbeddedBrowserButtonDefault")); //$NON-NLS-1$
            embeddedBrowserDefault
                    .setToolTipText(Messages.getString("MainPreferencePage.EmbeddedBrowserTooltipDefault")); //$NON-NLS-1$

            embeddedBrowserMozilla = new Button(browserGroup, SWT.RADIO);
            embeddedBrowserMozilla.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 2, 1));
            embeddedBrowserMozilla.setText(Messages.getString("MainPreferencePage.EmbeddedBrowserButtonMozilla")); //$NON-NLS-1$
            embeddedBrowserMozilla
                    .setToolTipText(Messages.getString("MainPreferencePage.EmbeddedBrowserTooltipMozilla")); //$NON-NLS-1$

            embeddedBrowserWebkit = new Button(browserGroup, SWT.RADIO);
            embeddedBrowserWebkit.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 2, 1));
            embeddedBrowserWebkit.setText(Messages.getString("MainPreferencePage.EmbeddedBrowserButtonWebkit")); //$NON-NLS-1$
            embeddedBrowserWebkit
                    .setToolTipText(Messages.getString("MainPreferencePage.EmbeddedBrowserTooltipWebkit")); //$NON-NLS-1$

            addNoteControl(browserGroup, Messages.getString("MainPreferencePage.EmbeddedBrowserNoteText")); //$NON-NLS-1$
        }

        SWTUtil.createGridLayoutSpacer(composite);

        final Button supportButton = SWTUtil.createButton(composite,
                Messages.getString("MainPreferencePage.SupportButtonText")); //$NON-NLS-1$
        GridDataBuilder.newInstance().hGrab().applyTo(supportButton);
        AutomationIDHelper.setWidgetID(supportButton, SUPPORT_BUTTON_ID);

        supportButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent e) {
                SupportUtils.openSupportDialog(((Button) e.widget).getShell(), getClass().getClassLoader());
            }
        });

        initializeValues();

        return composite;
    }

    // get preference settings from the preference store
    private void initializeValues() {
        final IPreferenceStore store = getPreferenceStore();

        reconnectButton.setSelection(store.getBoolean(UIPreferenceConstants.RECONNECT_AT_STARTUP));
        connectAtImportButton
                .setSelection(store.getBoolean(UIPreferenceConstants.CONNECT_MAPPED_PROJECTS_AT_IMPORT));
        acceptUntrustedCertificatesButton
                .setSelection(store.getBoolean(UIPreferenceConstants.ACCEPT_UNTRUSTED_CERTIFICATES));

        if (showBrowserPreference()) {
            setEmbeddedBrowserType(store.getInt(UIPreferenceConstants.EMBEDDED_WEB_BROWSER_TYPE));
        }
    }

    @Override
    protected void performDefaults() {
        final IPreferenceStore store = getPreferenceStore();

        reconnectButton.setSelection(store.getDefaultBoolean(UIPreferenceConstants.RECONNECT_AT_STARTUP));
        connectAtImportButton
                .setSelection(store.getDefaultBoolean(UIPreferenceConstants.CONNECT_MAPPED_PROJECTS_AT_IMPORT));
        acceptUntrustedCertificatesButton
                .setSelection(store.getDefaultBoolean(UIPreferenceConstants.ACCEPT_UNTRUSTED_CERTIFICATES));

        if (showBrowserPreference()) {
            setEmbeddedBrowserType(store.getDefaultInt(UIPreferenceConstants.EMBEDDED_WEB_BROWSER_TYPE));
        }

        super.performDefaults();
    }

    @Override
    public boolean performOk() {
        final IPreferenceStore store = getPreferenceStore();

        store.setValue(UIPreferenceConstants.RECONNECT_AT_STARTUP, reconnectButton.getSelection());
        store.setValue(UIPreferenceConstants.CONNECT_MAPPED_PROJECTS_AT_IMPORT,
                connectAtImportButton.getSelection());
        store.setValue(UIPreferenceConstants.ACCEPT_UNTRUSTED_CERTIFICATES,
                acceptUntrustedCertificatesButton.getSelection());

        if (showBrowserPreference()) {
            store.setValue(UIPreferenceConstants.EMBEDDED_WEB_BROWSER_TYPE, getEmbeddedBrowserType());
        }

        return super.performOk();
    }

    private void addNoteControl(final Composite gridLayoutParent, final String text) {
        final Label noteLabel = new Label(gridLayoutParent, SWT.NONE);
        GridDataBuilder.newInstance().align(SWT.LEFT, SWT.TOP).applyTo(noteLabel);

        final FontData labelFontData = noteLabel.getFont().getFontData()[0];
        labelFontData.setStyle(SWT.BOLD);

        final Font boldFont = new Font(null, labelFontData);

        noteLabel.setFont(boldFont);
        noteLabel.setText(Messages.getString("MainPreferencePage.NoteText")); //$NON-NLS-1$

        final Label noteTextLabel = new Label(gridLayoutParent, SWT.WRAP);
        GridDataBuilder.newInstance().hGrab().hFill().wCHint(noteTextLabel, 30).vAlign(SWT.TOP)
                .applyTo(noteTextLabel);
        noteTextLabel.setText(text);
    }

    private boolean showBrowserPreference() {
        // Choosing a browser doesn't make sense on Windows and Mac OS X
        return !WindowSystem.isCurrentWindowSystem(WindowSystem.WINDOWS)
                && !WindowSystem.isCurrentWindowSystem(WindowSystem.AQUA);
    }

    /**
     * Sets the radio buttons from an {@link SWT} constant
     *
     * @param browserType
     *        the {@link SWT} constant to set the radio buttons with
     */
    private void setEmbeddedBrowserType(final int browserType) {
        embeddedBrowserDefault.setSelection(false);
        embeddedBrowserMozilla.setSelection(false);
        embeddedBrowserWebkit.setSelection(false);

        switch (browserType) {
        case SWT.MOZILLA:
            embeddedBrowserMozilla.setSelection(true);
            break;
        case WEBKIT:
            embeddedBrowserWebkit.setSelection(true);
            break;
        default:
            // Handles SWT.NONE
            embeddedBrowserDefault.setSelection(true);
            break;
        }
    }

    /**
     * @return the {@link SWT} constant that represents the radio button state.
     */
    private int getEmbeddedBrowserType() {
        if (embeddedBrowserMozilla.getSelection()) {
            return SWT.MOZILLA;
        } else if (embeddedBrowserWebkit.getSelection()) {
            return WEBKIT;
        } else {
            return SWT.NONE;
        }
    }
}