blob: 45471da2a213ffc05ee76438c491a605b01acb3d [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2017 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* 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.BooleanFieldEditor;
import org.eclipse.jface.preference.ComboFieldEditor;
import org.eclipse.jface.preference.FieldEditorPreferencePage;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.RadioGroupFieldEditor;
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.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.team.internal.ui.IHelpContextIds;
import org.eclipse.team.internal.ui.IPreferenceIds;
import org.eclipse.team.internal.ui.TeamUIMessages;
import org.eclipse.team.internal.ui.TeamUIPlugin;
import org.eclipse.ui.IPerspectiveDescriptor;
import org.eclipse.ui.IPerspectiveRegistry;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.eclipse.ui.PlatformUI;
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 {
@Override
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());
}
@Override
public void createControl(Composite parent) {
super.createControl(parent);
// set F1 help
PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IHelpContextIds.SYNC_PREFERENCE_PAGE);
}
@Override
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);
}
@Override
public void init(IWorkbench workbench) {
}
@Override
public void propertyChange(PropertyChangeEvent event) {
//if(event.getSource() == bkgScheduledRefresh || event.getSource() == scheduledDelay) {
// updateEnablements();
// }
super.propertyChange(event);
}
@Override
public boolean performOk() {
TeamUIPlugin.getPlugin().savePluginPreferences();
return super.performOk();
}
@Override
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;
}
}