/*******************************************************************************
* Copyright (c) 2013 Pivotal Software, Inc.
* 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:
* Pivotal Software, Inc. - initial API and implementation
*******************************************************************************/
package org.springsource.ide.eclipse.commons.ui;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
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.Label;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.eclipse.ui.dialogs.PreferenceLinkArea;
import org.eclipse.ui.preferences.IWorkbenchPreferenceContainer;
import org.springsource.ide.eclipse.commons.core.preferences.GlobalPreferenceEnhancer;
/**
* This preferences page provides a shortcut for setting a group of preferences
* that we believe make Eclipse more awesome
*
* @author Andrew Eisenberg
* @since 3.3.0
*/
public class PreferencesCurator extends PreferencePage implements IWorkbenchPreferencePage {
public final static String PREF_DIALOG_ID = "org.springsource.ide.eclipse.commons.curatorPreferencesPage";
public PreferencesCurator() {
super("Global Preferences Curator");
}
public void init(IWorkbench workbench) {
noDefaultAndApplyButton();
setDescription("Sets/unsets a bunch of preferences that makes Eclipse more awesome");
}
@Override
protected Control createContents(Composite parent) {
Composite contents = new Composite(parent, SWT.NONE);
contents.setLayout(new GridLayout(1, true));
Label desc = new Label(contents, SWT.WRAP);
desc.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
desc.setText("We have scoured the Eclipse preferences pages and determined a handful of preferences\n"
+ "that are not set in an optimal way. Do you trust us?");
Composite allComposite = new Composite(contents, SWT.BORDER);
allComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
allComposite.setLayout(new GridLayout(1, false));
Label label = new Label(allComposite, SWT.NONE);
label.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
label.setText("Set/Reset all curated preferences.");
label.setFont(JFaceResources.getFontRegistry().getBold(JFaceResources.DIALOG_FONT));
Button allSetButton = new Button(allComposite, SWT.PUSH);
allSetButton.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
allSetButton.setText("Set all preferences");
allSetButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
new GlobalPreferenceEnhancer().enhanceAllPreferences();
}
});
Button allUnsetButton = new Button(allComposite, SWT.PUSH);
allUnsetButton.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
allUnsetButton.setText("Reset all preferences");
allUnsetButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
new GlobalPreferenceEnhancer().undoAll();
}
});
Composite jdtComposite = new Composite(contents, SWT.BORDER);
jdtComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
jdtComposite.setLayout(new GridLayout(1, false));
Label jdtLabel = new Label(jdtComposite, SWT.NONE);
jdtLabel.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
jdtLabel.setText("JDT preferences");
jdtLabel.setFont(JFaceResources.getFontRegistry().getBold(JFaceResources.DIALOG_FONT));
Label jdtLabelExplanation = new Label(jdtComposite, SWT.NONE);
jdtLabelExplanation.setLayoutData(new GridData(SWT.BEGINNING, SWT.LEFT, false, false));
jdtLabelExplanation.setText("We set the following JDT preferences:\n" + "* Editor smart paste (true)\n"
+ "* Editor smart semicolon placement (true)\n" + "* Editor smart opening brace placement (true)\n"
+ "* Editor smart backspace (true)\n" + "* Editor smart tab (true)\n"
+ "* Escape text when pasting into a string literal (true)\n"
+ "* Auto activation delay (40 ms)\n");
// + "* Auto activation triggers for Java (._abcdefghijklmnopqrstuvwxyz)\n");
Button jdtSetButton = new Button(jdtComposite, SWT.PUSH);
jdtSetButton.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
jdtSetButton.setText("Set JDT preferences only");
jdtSetButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
new GlobalPreferenceEnhancer().enhanceJDTPreferences();
}
});
Button jdtUnsetButton = new Button(jdtComposite, SWT.PUSH);
jdtUnsetButton.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
jdtUnsetButton.setText("Reset JDT preferences only");
jdtUnsetButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
new GlobalPreferenceEnhancer().undoJDTEnhance();
}
});
PreferenceLinkArea jdtEditorArea = new PreferenceLinkArea(jdtComposite, SWT.WRAP,
"org.eclipse.jdt.ui.preferences.SmartTypingPreferencePage",
"Go to the <a>JDT smart typing preferences page</a>", (IWorkbenchPreferenceContainer) getContainer(),
null);
GridData data = new GridData(SWT.FILL, SWT.CENTER, false, false);
jdtEditorArea.getControl().setLayoutData(data);
PreferenceLinkArea jdtContentAssistArea = new PreferenceLinkArea(jdtComposite, SWT.WRAP,
"org.eclipse.jdt.ui.preferences.CodeAssistPreferencePage",
"Go to the <a>JDT content assist preferences page</a>", (IWorkbenchPreferenceContainer) getContainer(),
null);
data = new GridData(SWT.FILL, SWT.CENTER, false, false);
jdtContentAssistArea.getControl().setLayoutData(data);
Composite m2eComposite = new Composite(contents, SWT.BORDER);
m2eComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
m2eComposite.setLayout(new GridLayout(1, false));
Label m2eLabel = new Label(m2eComposite, SWT.NONE);
m2eLabel.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
m2eLabel.setText("M2E preferences");
m2eLabel.setFont(JFaceResources.getFontRegistry().getBold(JFaceResources.DIALOG_FONT));
Label m2eLabelExplanation = new Label(m2eComposite, SWT.NONE);
m2eLabelExplanation.setLayoutData(new GridData(SWT.BEGINNING, SWT.LEFT, false, false));
m2eLabelExplanation.setText("We set the following M2E preferences:\n"
+ "* Hide folders of physically nested projects (true)\n"
+ "* Download repository updates on startup (false)\n"
+ "* Open XML page in pom editor by default (true)");
Button m2eSetButton = new Button(m2eComposite, SWT.PUSH);
m2eSetButton.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
m2eSetButton.setText("Set M2E preferences only");
m2eSetButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
new GlobalPreferenceEnhancer().enhanceM2EPreferences();
}
});
Button m2eUnsetButton = new Button(m2eComposite, SWT.PUSH);
m2eUnsetButton.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
m2eUnsetButton.setText("Reset M2E preferences only");
m2eUnsetButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
new GlobalPreferenceEnhancer().undoJDTEnhance();
}
});
PreferenceLinkArea m2eArea = new PreferenceLinkArea(m2eComposite, SWT.WRAP,
"org.eclipse.m2e.core.preferences.Maven2PreferencePage", "Go to the <a>M2E preferences page</a>",
(IWorkbenchPreferenceContainer) getContainer(), null);
data = new GridData(SWT.FILL, SWT.CENTER, false, false);
m2eArea.getControl().setLayoutData(data);
PreferenceLinkArea m2eUIArea = new PreferenceLinkArea(m2eComposite, SWT.WRAP,
"org.eclipse.m2e.core.ui.preferences.UserInterfacePreferencePage",
"Go to the <a>M2E UI preferences page</a>", (IWorkbenchPreferenceContainer) getContainer(), null);
data = new GridData(SWT.FILL, SWT.CENTER, false, false);
m2eUIArea.getControl().setLayoutData(data);
// disable m2e components if it is not installed
if (Platform.getBundle("org.eclipse.m2e.core") == null) {
m2eComposite.setEnabled(false);
m2eLabel.setText(m2eLabel.getText() + " (not installed)");
m2eSetButton.setEnabled(false);
m2eUnsetButton.setEnabled(false);
m2eUIArea.getControl().setEnabled(false);
m2eArea.getControl().setEnabled(false);
}
return contents;
}
}