com.mountainminds.eclemma.internal.ui.dialogs.CoveragePreferencePage.java Source code

Java tutorial

Introduction

Here is the source code for com.mountainminds.eclemma.internal.ui.dialogs.CoveragePreferencePage.java

Source

/*******************************************************************************
 * Copyright (c) 2006, 2014 Mountainminds GmbH & Co. KG and Contributors
 * 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:
 *    Marc R. Hoffmann - initial API and implementation
 *    
 ******************************************************************************/
package com.mountainminds.eclemma.internal.ui.dialogs;

import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.preference.BooleanFieldEditor;
import org.eclipse.jface.preference.FieldEditor;
import org.eclipse.jface.preference.FieldEditorPreferencePage;
import org.eclipse.jface.preference.StringFieldEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
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 org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.eclipse.ui.dialogs.PreferenceLinkArea;
import org.eclipse.ui.preferences.IWorkbenchPreferenceContainer;

import com.mountainminds.eclemma.internal.ui.ContextHelp;
import com.mountainminds.eclemma.internal.ui.EclEmmaUIPlugin;
import com.mountainminds.eclemma.internal.ui.UIMessages;
import com.mountainminds.eclemma.internal.ui.UIPreferences;

/**
 * Implementation of the "Code Coverage" preferences page.
 */
public class CoveragePreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {

    private static final String DECORATORS_PAGE = "org.eclipse.ui.preferencePages.Decorators"; //$NON-NLS-1$
    private static final String ANNOTATIONS_PAGE = "org.eclipse.ui.editors.preferencePages.Annotations"; //$NON-NLS-1$

    public CoveragePreferencePage() {
        super();
        setDescription(UIMessages.CoveragePreferences_description);
        setPreferenceStore(EclEmmaUIPlugin.getInstance().getPreferenceStore());
    }

    protected Control createContents(final Composite parent) {
        ContextHelp.setHelp(parent, ContextHelp.COVERAGE_PREFERENCES);

        final Composite result = new Composite(parent, SWT.NONE);
        GridLayoutFactory.swtDefaults().margins(0, 0).applyTo(result);

        createSessionManagementGroup(result);
        createDefaultScopeGroup(result);
        createCoverageRuntimeGroup(result);

        // Links:
        createLink(result, UIMessages.CoveragePreferencesDecoratorsLink_label, DECORATORS_PAGE);
        createLink(result, UIMessages.CoveragePreferencesAnnotationsLink_label, ANNOTATIONS_PAGE);

        initialize();
        checkState();
        return result;
    }

    private void createSessionManagementGroup(final Composite parent) {
        FieldEditor editor;
        final Group group = createGroup(parent, UIMessages.CoverageSessionManagement_titel);
        editor = new BooleanFieldEditor(UIPreferences.PREF_SHOW_COVERAGE_VIEW,
                UIMessages.CoveragePreferencesShowCoverageView_label, group);
        addField(editor);
        editor.fillIntoGrid(group, 2);
        editor = new BooleanFieldEditor(UIPreferences.PREF_ACTICATE_NEW_SESSIONS,
                UIMessages.CoveragePreferencesActivateNewSessions_label, group);
        addField(editor);
        editor.fillIntoGrid(group, 2);
        editor = new BooleanFieldEditor(UIPreferences.PREF_AUTO_REMOVE_SESSIONS,
                UIMessages.CoveragePreferencesAutoRemoveSessions_label, group);
        addField(editor);
        editor = new BooleanFieldEditor(UIPreferences.PREF_RESET_ON_DUMP,
                UIMessages.CoveragePreferencesResetOnDump_label, group);
        addField(editor);
        editor.fillIntoGrid(group, 2);
        adjustGroupLayout(group);
    }

    private void createDefaultScopeGroup(final Composite parent) {
        FieldEditor editor;
        final Group group = createGroup(parent, UIMessages.CoveragePreferencesDefaultScope_title);
        editor = new BooleanFieldEditor(UIPreferences.PREF_DEFAULT_SCOPE_SOURCE_FOLDERS_ONLY,
                UIMessages.CoveragePreferencesSourceFoldersOnly_label, group);
        addField(editor);
        editor.fillIntoGrid(group, 2);
        editor = new BooleanFieldEditor(UIPreferences.PREF_DEFAULT_SCOPE_SAME_PROJECT_ONLY,
                UIMessages.CoveragePreferencesSameProjectOnly_label, group);
        addField(editor);
        editor.fillIntoGrid(group, 2);
        editor = new StringFieldEditor(UIPreferences.PREF_DEFAULT_SCOPE_FILTER,
                UIMessages.CoveragePreferencesClasspathFilter_label, group);
        addField(editor);
        editor.fillIntoGrid(group, 2);
        adjustGroupLayout(group);
    }

    private void createCoverageRuntimeGroup(final Composite parent) {
        FieldEditor editor;
        final Group group = createGroup(parent, UIMessages.CoveragePreferencesCoverageRuntime_title);
        editor = new StringFieldEditor(UIPreferences.PREF_AGENT_INCLUDES,
                UIMessages.CoveragePreferencesIncludes_label, group);
        addField(editor);
        editor.fillIntoGrid(group, 2);
        editor = new StringFieldEditor(UIPreferences.PREF_AGENT_EXCLUDES,
                UIMessages.CoveragePreferencesExcludes_label, group);
        addField(editor);
        editor.fillIntoGrid(group, 2);
        editor = new StringFieldEditor(UIPreferences.PREF_AGENT_EXCLCLASSLOADER,
                UIMessages.CoveragePreferencesExcludeClassloaders_label, group);
        addField(editor);
        editor.fillIntoGrid(group, 2);
        Label hint = new Label(group, SWT.WRAP);
        GridDataFactory.fillDefaults().span(2, 1).applyTo(hint);
        hint.setText(UIMessages.CoveragePreferencesCoverageRuntime_message);
        adjustGroupLayout(group);
    }

    private Group createGroup(final Composite parent, final String text) {
        final Group group = new Group(parent, SWT.NONE);
        group.setText(text);
        group.setFont(parent.getFont());
        GridDataFactory.fillDefaults().applyTo(group);
        group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        return group;
    }

    private void adjustGroupLayout(final Group group) {
        // Unlike the top level controls we need margins for a control in a group:
        GridLayout layout = (GridLayout) group.getLayout();
        layout.marginWidth = 5;
        layout.marginHeight = 5;
    }

    private void createLink(final Composite parent, final String text, String target) {
        final PreferenceLinkArea link = new PreferenceLinkArea(parent, SWT.NONE, target, text,
                (IWorkbenchPreferenceContainer) getContainer(), null);
        link.getControl().setLayoutData(new GridData());
    }

    public void init(IWorkbench workbench) {
        // nothing to do here
    }

    protected void createFieldEditors() {
        // we override createContents()
    }

}