com.vectrace.MercurialEclipse.preferences.GeneralPreferencePage.java Source code

Java tutorial

Introduction

Here is the source code for com.vectrace.MercurialEclipse.preferences.GeneralPreferencePage.java

Source

/*******************************************************************************
 * Copyright (c) 2006-2008 VecTrace (Zingo Andersen) 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:
 *     Gunnar Ahlberg            - implementation
 *     VecTrace (Zingo Andersen) - updateing it
 *     Jrme Ngre              - adding label decorator section
 *     Stefan C                  - Code cleanup
 *     Andrei Loskutov           - bug fixes
 *     Ilya Ivanov (Intland)    - bug fixes
 *******************************************************************************/

package com.vectrace.MercurialEclipse.preferences;

import static com.vectrace.MercurialEclipse.preferences.MercurialPreferenceConstants.*;

import java.io.File;

import org.eclipse.jface.preference.BooleanFieldEditor;
import org.eclipse.jface.preference.FieldEditorPreferencePage;
import org.eclipse.jface.preference.FileFieldEditor;
import org.eclipse.jface.preference.StringFieldEditor;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;

import com.vectrace.MercurialEclipse.MercurialEclipsePlugin;

/**
 * This class represents a preference page that is contributed to the
 * Preferences dialog. By sub classing <samp>FieldEditorPreferencePage</samp>,
 * we can use the field support built into JFace that allows us to create a page
 * that is small and knows how to save, restore and apply itself.
 * <p>
 * This page is used to modify preferences only. They are stored in the
 * preference store that belongs to the main plug-in class. That way,
 * preferences can be accessed directly via the preference store.
 */

public class GeneralPreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {

    private MercurialExecutableFileFieldEditor execField;

    private static final class MercurialExecutableFileFieldEditor extends FileFieldEditor {
        private MercurialExecutableFileFieldEditor(String name, String labelText, Composite parent) {
            super(name, labelText, false, StringFieldEditor.VALIDATE_ON_KEY_STROKE, parent);
        }

        @Override
        public boolean checkState() {
            // There are other ways of doing this properly but this is
            // better than the default behavior
            String stringValue = getStringValue();
            if (MERCURIAL_EXECUTABLE.equals(stringValue)) {
                clearErrorMessage();
                return true;
            }
            return super.checkState();
        }
    }

    private static final class GpgExecutableFileFieldEditor extends FileFieldEditor {
        private GpgExecutableFileFieldEditor(String name, String labelText, Composite parent) {
            super(name, labelText, false, StringFieldEditor.VALIDATE_ON_KEY_STROKE, parent);
        }

        @Override
        protected boolean checkState() {
            // There are other ways of doing this properly but this is
            // better than the default behaviour
            if (GPG_EXECUTABLE.equals(getStringValue())) {
                clearErrorMessage();
                return true;
            }
            return super.checkState();
        }
    }

    public GeneralPreferencePage() {
        super(GRID);
        setPreferenceStore(MercurialEclipsePlugin.getDefault().getPreferenceStore());
        setDescription(Messages.getString("GeneralPreferencePage.description")); //$NON-NLS-1$
    }

    /**
     * Creates the field editors. Field editors are abstractions of the common
     * GUI blocks needed to manipulate various types of preferences. Each field
     * editor knows how to save and restore itself.
     */
    @Override
    public void createFieldEditors() {

        File integratedHgExecutable = PreferenceInitializer.getIntegratedHgExecutable();
        if (integratedHgExecutable != null) {
            addField(new BooleanFieldEditor(USE_BUILT_IN_HG_EXECUTABLE,
                    "Use default (built-in) Mercurial executable", getFieldEditorParent()) {
                @Override
                protected void fireValueChanged(String property, Object oldValue, Object newValue) {
                    super.fireValueChanged(property, oldValue, newValue);
                    if (newValue instanceof Boolean) {
                        enablePathEditor(!((Boolean) newValue).booleanValue());
                    }
                }

                @Override
                protected void doLoadDefault() {
                    super.doLoadDefault();
                    enablePathEditor(!getBooleanValue());
                }

            });
        }

        execField = new MercurialExecutableFileFieldEditor(MERCURIAL_EXECUTABLE,
                Messages.getString("GeneralPreferencePage.field.hgExecutable"), getFieldEditorParent());

        addField(execField);

        execField.setEmptyStringAllowed(false);

        if (!MercurialEclipsePlugin.getDefault().isHgUsable()) {
            execField.setErrorMessage(Messages.getString("GeneralPreferencePage.error.HgNotInstalled")); //$NON-NLS-1$
        }
        if (integratedHgExecutable != null && getPreferenceStore().getBoolean(USE_BUILT_IN_HG_EXECUTABLE)) {
            execField.setEnabled(false, getFieldEditorParent());
        }

        addField(new GpgExecutableFileFieldEditor(GPG_EXECUTABLE,
                Messages.getString("GeneralPreferencePage.field.gpgExecutable"), getFieldEditorParent())); //$NON-NLS-1$

        addField(new StringFieldEditor(MERCURIAL_USERNAME,
                Messages.getString("GeneralPreferencePage.field.username"), getFieldEditorParent())); //$NON-NLS-1$

        addField(new BooleanFieldEditor(PREF_USE_MERCURIAL_USERNAME,
                "Prefer 'username' value from .hgrc as default user name", getFieldEditorParent())); //$NON-NLS-1$

        addField(new BooleanFieldEditor(PREF_DEFAULT_REBASE_KEEP_BRANCHES,
                "Default to 'Retain the branch name' for Rebase command", getFieldEditorParent())); //$NON-NLS-1$

        addField(new BooleanFieldEditor(PREF_USE_EXTERNAL_MERGE,
                Messages.getString("GeneralPreferencePage.useExternalMergeTool"), getFieldEditorParent())); //$NON-NLS-1$

        BooleanFieldEditor editor = new BooleanFieldEditor(PREF_PUSH_NEW_BRANCH,
                Messages.getString("GeneralPreferencePage.pushNewBranches"), getFieldEditorParent());
        addField(editor);

        addField(new BooleanFieldEditor(PREF_AUTO_SHARE_PROJECTS,
                Messages.getString("GeneralPreferencePage.autoshare"), //$NON-NLS-1$
                getFieldEditorParent()));

        BooleanFieldEditor cert_editor = new BooleanFieldEditor(PREF_VERIFY_SERVER_CERTIFICATE,
                Messages.getString("GeneralPreferencePage.verifyServerCertificate"), //$NON-NLS-1$
                getFieldEditorParent());
        addField(cert_editor);

    }

    protected void enablePathEditor(boolean on) {
        if (execField == null) {
            return;
        }
        execField.setEnabled(on, getFieldEditorParent());
        if (!on) {
            execField.setStringValue(PreferenceInitializer.getIntegratedHgExecutable().getPath());
        }
    }

    @Override
    public void setVisible(boolean visible) {
        super.setVisible(visible);
        if (!execField.checkState()) {
            execField.showErrorMessage();
        }
    }

    @Override
    public boolean isValid() {
        return execField.checkState() && super.isValid();
    }

    public void init(IWorkbench workbench) {
    }

}