org.eclipse.team.internal.ui.preferences.SyncViewerPreferencePage.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.team.internal.ui.preferences.SyncViewerPreferencePage.java

Source

/*******************************************************************************
 * Copyright (c) 2000, 2011 IBM Corporation 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:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.team.internal.ui.preferences;

import java.util.Arrays;
import java.util.Comparator;

import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.MessageDialogWithToggle;
import org.eclipse.jface.preference.*;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
import org.eclipse.team.internal.ui.*;
import org.eclipse.ui.*;

import com.ibm.icu.text.Collator;

/**
 * This preference page allows to configure various aspects of the Synchronize View.
 */
public class SyncViewerPreferencePage extends FieldEditorPreferencePage
        implements IWorkbenchPreferencePage, IPreferenceIds {

    private BooleanFieldEditor showSyncInLabels = null;
    private RadioGroupFieldEditor synchronizePerspectiveSwitch = null;
    private RadioGroupFieldEditor defaultLayout = null;
    private boolean includeDefaultLayout = true;

    private static class PerspectiveDescriptorComparator implements Comparator {
        /*
         * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
         */
        public int compare(Object o1, Object o2) {
            if (o1 instanceof IPerspectiveDescriptor && o2 instanceof IPerspectiveDescriptor) {
                String id1 = ((IPerspectiveDescriptor) o1).getLabel();
                String id2 = ((IPerspectiveDescriptor) o2).getLabel();
                return Collator.getInstance().compare(id1, id2);
            }
            return 0;
        }
    }

    public SyncViewerPreferencePage() {
        super(GRID);
        setTitle(TeamUIMessages.SyncViewerPreferencePage_6);
        setDescription(TeamUIMessages.SyncViewerPreferencePage_7);
        setPreferenceStore(TeamUIPlugin.getPlugin().getPreferenceStore());
    }

    /* (non-Javadoc)
     * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
     */
    public void createControl(Composite parent) {
        super.createControl(parent);
        // set F1 help
        PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IHelpContextIds.SYNC_PREFERENCE_PAGE);
    }

    /* (non-Javadoc)
     * @see org.eclipse.jface.preference.FieldEditorPreferencePage#createFieldEditors()
     */
    public void createFieldEditors() {
        showSyncInLabels = new BooleanFieldEditor(SYNCVIEW_VIEW_SYNCINFO_IN_LABEL,
                TeamUIMessages.SyncViewerPreferencePage_19, SWT.NONE, getFieldEditorParent());
        addField(showSyncInLabels);

        addField(new BooleanFieldEditor(SHOW_AUTHOR_IN_COMPARE_EDITOR, TeamUIMessages.SyncViewerPreferencePage_43,
                BooleanFieldEditor.DEFAULT, getFieldEditorParent()));

        addField(new BooleanFieldEditor(MAKE_FILE_WRITTABLE_IF_CONTEXT_MISSING,
                TeamUIMessages.SyncViewerPreferencePage_44, BooleanFieldEditor.DEFAULT, getFieldEditorParent()));

        addField(new BooleanFieldEditor(REUSE_OPEN_COMPARE_EDITOR, TeamUIMessages.SyncViewerPreferencePage_45,
                BooleanFieldEditor.DEFAULT, getFieldEditorParent()));

        addField(new BooleanFieldEditor(RUN_IMPORT_IN_BACKGROUND, TeamUIMessages.SyncViewerPreferencePage_46,
                BooleanFieldEditor.DEFAULT, getFieldEditorParent()));

        addField(new BooleanFieldEditor(APPLY_PATCH_IN_SYNCHRONIZE_VIEW, TeamUIMessages.SyncViewerPreferencePage_47,
                BooleanFieldEditor.DEFAULT, getFieldEditorParent()));

        if (isIncludeDefaultLayout()) {
            defaultLayout = new RadioGroupFieldEditor(SYNCVIEW_DEFAULT_LAYOUT,
                    TeamUIMessages.SyncViewerPreferencePage_0, 3,
                    new String[][] { { TeamUIMessages.SyncViewerPreferencePage_1, FLAT_LAYOUT },
                            { TeamUIMessages.SyncViewerPreferencePage_2, TREE_LAYOUT },
                            { TeamUIMessages.SyncViewerPreferencePage_3, COMPRESSED_LAYOUT } },
                    getFieldEditorParent(), true /* use a group */);
            addField(defaultLayout);
        }

        synchronizePerspectiveSwitch = new RadioGroupFieldEditor(SYNCHRONIZING_COMPLETE_PERSPECTIVE,
                TeamUIMessages.SyncViewerPreferencePage_13, 3,
                new String[][] { { TeamUIMessages.SyncViewerPreferencePage_14, MessageDialogWithToggle.ALWAYS },
                        { TeamUIMessages.SyncViewerPreferencePage_42, MessageDialogWithToggle.NEVER },
                        { TeamUIMessages.SyncViewerPreferencePage_16, MessageDialogWithToggle.PROMPT } },
                getFieldEditorParent(), true);
        addField(synchronizePerspectiveSwitch);

        Group perspectiveGroup = createGroup(getFieldEditorParent(), TeamUIMessages.SyncViewerPreferencePage_15);

        createLabel(perspectiveGroup, TeamUIMessages.SynchronizationViewPreference_defaultPerspectiveDescription,
                1);

        handleDeletedPerspectives();
        String[][] perspectiveNamesAndIds = getPerspectiveNamesAndIds();
        ComboFieldEditor comboEditor = new ComboFieldEditor(SYNCVIEW_DEFAULT_PERSPECTIVE,
                TeamUIMessages.SynchronizationViewPreference_defaultPerspectiveLabel, perspectiveNamesAndIds,
                perspectiveGroup);
        addField(comboEditor);

        Dialog.applyDialogFont(getFieldEditorParent());
        updateLayout(perspectiveGroup);
        getFieldEditorParent().layout(true);
    }

    private Label createLabel(Composite parent, String title, int spacer) {
        GridData data;
        Label l = new Label(parent, SWT.WRAP);
        l.setFont(parent.getFont());
        data = new GridData();
        data.horizontalSpan = 2;
        if (spacer != 0) {
            data.verticalSpan = spacer;
        }
        data.horizontalAlignment = GridData.FILL;
        l.setLayoutData(data);
        if (title != null) {
            l.setText(title);
        }
        return l;
    }

    private Group createGroup(Composite parent, String title) {
        Group display = new Group(parent, SWT.NONE);
        updateLayout(display);
        GridData data = new GridData();
        data.horizontalSpan = 2;
        data.horizontalAlignment = GridData.FILL;
        display.setLayoutData(data);
        display.setText(title);
        return display;
    }

    private void updateLayout(Composite composite) {
        GridLayout layout = new GridLayout();
        layout.numColumns = 2;
        layout.marginWidth = 5;
        layout.marginHeight = 5;
        layout.horizontalSpacing = 5;
        layout.verticalSpacing = 5;
        composite.setLayout(layout);
    }

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

    /* (non-Javadoc)
     * @see org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)
     */
    public void propertyChange(PropertyChangeEvent event) {
        //if(event.getSource() == bkgScheduledRefresh || event.getSource() == scheduledDelay) {         
        //      updateEnablements();   
        //   }
        super.propertyChange(event);
    }

    /* (non-Javadoc)
     * @see org.eclipse.jface.preference.IPreferencePage#performOk()
     */
    public boolean performOk() {
        TeamUIPlugin.getPlugin().savePluginPreferences();
        return super.performOk();
    }

    /* (non-Javadoc)
     * @see org.eclipse.jface.preference.FieldEditorPreferencePage#checkState()
     */
    protected void initialize() {
        super.initialize();
        updateEnablements();
    }

    protected void updateEnablements() {
        //boolean enabled = bkgScheduledRefresh.getBooleanValue();
        //scheduledDelay.setEnabled(enabled, refreshGroup);
        //scheduledDelay.refreshValidState();
    }

    /**
     * Return a 2-dimensional array of perspective names and ids.
     */
    private String[][] getPerspectiveNamesAndIds() {

        IPerspectiveRegistry registry = PlatformUI.getWorkbench().getPerspectiveRegistry();
        IPerspectiveDescriptor[] perspectiveDescriptors = registry.getPerspectives();

        Arrays.sort(perspectiveDescriptors, new PerspectiveDescriptorComparator());

        String[][] table = new String[perspectiveDescriptors.length + 1][2];
        table[0][0] = TeamUIMessages.SynchronizationViewPreference_defaultPerspectiveNone; //;
        table[0][1] = SYNCVIEW_DEFAULT_PERSPECTIVE_NONE;
        for (int i = 0; i < perspectiveDescriptors.length; i++) {
            table[i + 1][0] = perspectiveDescriptors[i].getLabel();
            table[i + 1][1] = perspectiveDescriptors[i].getId();
        }
        return table;
    }

    private static void handleDeletedPerspectives() {
        IPreferenceStore store = TeamUIPlugin.getPlugin().getPreferenceStore();
        String id = store.getString(SYNCVIEW_DEFAULT_PERSPECTIVE);
        if (PlatformUI.getWorkbench().getPerspectiveRegistry().findPerspectiveWithId(id) == null) {
            store.putValue(SYNCVIEW_DEFAULT_PERSPECTIVE, SYNCVIEW_DEFAULT_PERSPECTIVE_NONE);
        }
    }

    public boolean isIncludeDefaultLayout() {
        return includeDefaultLayout;
    }

    public void setIncludeDefaultLayout(boolean includeDefaultLayout) {
        this.includeDefaultLayout = includeDefaultLayout;
    }
}