Have icon for "reset" entry in reflog
[egit/eclipse.git] / org.eclipse.egit.ui / src / org / eclipse / egit / ui / internal / preferences / CommittingPreferencePage.java
blob790ead06a8bd96ddd75409b1015437e097e61ce1
1 /*******************************************************************************
2 * Copyright (C) 2010, 2013 Robin Stocker <robin@nibor.org> and others.
3 * Copyright (C) 2015 SAP SE (Christian Georgi <christian.georgi@sap.com>)
4 * Copyright (C) 2016, 2017 Thomas Wolf <thomas.wolf@paranor.ch>
6 * All rights reserved. This program and the accompanying materials
7 * are made available under the terms of the Eclipse Public License 2.0
8 * which accompanies this distribution, and is available at
9 * https://www.eclipse.org/legal/epl-2.0/
11 * SPDX-License-Identifier: EPL-2.0
12 *******************************************************************************/
13 package org.eclipse.egit.ui.internal.preferences;
15 import org.eclipse.core.runtime.preferences.InstanceScope;
16 import org.eclipse.egit.core.GitCorePreferences;
17 import org.eclipse.egit.ui.Activator;
18 import org.eclipse.egit.ui.PluginPreferenceInitializer;
19 import org.eclipse.egit.ui.UIPreferences;
20 import org.eclipse.egit.ui.UIUtils;
21 import org.eclipse.egit.ui.internal.UIText;
22 import org.eclipse.jface.layout.GridDataFactory;
23 import org.eclipse.jface.preference.BooleanFieldEditor;
24 import org.eclipse.jface.preference.ComboFieldEditor;
25 import org.eclipse.jface.preference.FieldEditor;
26 import org.eclipse.jface.preference.IPreferenceStore;
27 import org.eclipse.jface.preference.IntegerFieldEditor;
28 import org.eclipse.jface.util.IPropertyChangeListener;
29 import org.eclipse.jface.util.PropertyChangeEvent;
30 import org.eclipse.swt.SWT;
31 import org.eclipse.swt.events.SelectionAdapter;
32 import org.eclipse.swt.events.SelectionEvent;
33 import org.eclipse.swt.layout.GridData;
34 import org.eclipse.swt.layout.GridLayout;
35 import org.eclipse.swt.widgets.Button;
36 import org.eclipse.swt.widgets.Composite;
37 import org.eclipse.swt.widgets.Group;
38 import org.eclipse.ui.IWorkbench;
39 import org.eclipse.ui.IWorkbenchPreferencePage;
40 import org.eclipse.ui.preferences.ScopedPreferenceStore;
42 /** Preferences for committing with commit dialog/staging view. */
43 public class CommittingPreferencePage extends DoublePreferencesPreferencePage
44 implements IWorkbenchPreferencePage {
46 private BooleanFieldEditor useStagingView;
48 private BooleanFieldEditor autoStage;
50 private Button warnCheckbox;
52 private Group buildProblemsGroup;
54 private ComboFieldEditor warnCombo;
56 private Button blockCheckbox;
58 private ComboFieldEditor blockCombo;
60 private Group generalGroup;
62 /** */
63 public CommittingPreferencePage() {
64 super(GRID);
65 setTitle(UIText.CommittingPreferencePage_title);
68 @Override
69 public void init(IWorkbench workbench) {
70 // Nothing to do
73 @Override
74 protected IPreferenceStore doGetPreferenceStore() {
75 return Activator.getDefault().getPreferenceStore();
78 @Override
79 protected IPreferenceStore doGetSecondaryPreferenceStore() {
80 return new ScopedPreferenceStore(InstanceScope.INSTANCE,
81 org.eclipse.egit.core.Activator.getPluginId());
84 @Override
85 protected void createFieldEditors() {
86 Composite main = getFieldEditorParent();
88 generalGroup = new Group(main, SWT.SHADOW_ETCHED_IN);
89 generalGroup.setText(UIText.CommittingPreferencePage_general);
90 GridDataFactory.fillDefaults().grab(true, false).span(3, 1)
91 .applyTo(generalGroup);
93 useStagingView = new BooleanFieldEditor(
94 UIPreferences.ALWAYS_USE_STAGING_VIEW,
95 UIText.CommittingPreferencePage_AlwaysUseStagingView,
96 generalGroup);
97 addField(useStagingView);
99 autoStage = new BooleanFieldEditor(UIPreferences.AUTO_STAGE_ON_COMMIT,
100 UIText.CommittingPreferencePage_AutoStageOnCommit,
101 generalGroup);
102 GridDataFactory.fillDefaults().indent(UIUtils.getControlIndent(), 0)
103 .applyTo(autoStage.getDescriptionControl(generalGroup));
104 addField(autoStage);
105 autoStage.setEnabled(getPreferenceStore()
106 .getBoolean(UIPreferences.ALWAYS_USE_STAGING_VIEW),
107 generalGroup);
109 BooleanFieldEditor includeUntracked = new BooleanFieldEditor(
110 UIPreferences.COMMIT_DIALOG_INCLUDE_UNTRACKED,
111 UIText.CommittingPreferencePage_includeUntrackedFiles,
112 generalGroup);
113 includeUntracked.getDescriptionControl(generalGroup).setToolTipText(
114 UIText.CommittingPreferencePage_includeUntrackedFilesTooltip);
115 addField(includeUntracked);
117 BooleanFieldEditor autoStageDeletion = new BooleanFieldEditor(
118 GitCorePreferences.core_autoStageDeletion,
119 UIText.CommittingPreferencePage_autoStageDeletion,
120 generalGroup) {
122 @Override
123 public IPreferenceStore getPreferenceStore() {
124 return getSecondaryPreferenceStore();
127 addField(autoStageDeletion);
129 BooleanFieldEditor autoStageMoves = new BooleanFieldEditor(
130 GitCorePreferences.core_autoStageMoves,
131 UIText.CommittingPreferencePage_autoStageMoves, generalGroup) {
133 @Override
134 public IPreferenceStore getPreferenceStore() {
135 return getSecondaryPreferenceStore();
138 addField(autoStageMoves);
140 IntegerFieldEditor historySize = new IntegerFieldEditor(
141 UIPreferences.COMMIT_DIALOG_HISTORY_SIZE,
142 UIText.CommittingPreferencePage_commitMessageHistory,
143 generalGroup);
144 addField(historySize);
146 updateMargins(generalGroup);
148 Group formattingGroup = new Group(main, SWT.SHADOW_ETCHED_IN);
149 formattingGroup.setText(UIText.CommittingPreferencePage_formatting);
150 GridDataFactory.fillDefaults().grab(true, false).span(3, 1)
151 .applyTo(formattingGroup);
153 BooleanFieldEditor hardWrap = new BooleanFieldEditor(
154 UIPreferences.COMMIT_DIALOG_HARD_WRAP_MESSAGE,
155 UIText.CommittingPreferencePage_hardWrapMessage, formattingGroup);
156 hardWrap.getDescriptionControl(formattingGroup).setToolTipText(
157 UIText.CommittingPreferencePage_hardWrapMessageTooltip);
158 addField(hardWrap);
160 BooleanFieldEditor secondLineCheck = new BooleanFieldEditor(
161 UIPreferences.COMMIT_DIALOG_WARN_ABOUT_MESSAGE_SECOND_LINE,
162 UIText.CommittingPreferencePage_warnAboutCommitMessageSecondLine,
163 formattingGroup);
164 addField(secondLineCheck);
166 updateMargins(formattingGroup);
168 Group footersGroup = new Group(main, SWT.SHADOW_ETCHED_IN);
169 footersGroup.setText(UIText.CommittingPreferencePage_footers);
170 GridDataFactory.fillDefaults().grab(true, false).span(3, 1)
171 .applyTo(footersGroup);
173 BooleanFieldEditor signedOffBy = new BooleanFieldEditor(
174 UIPreferences.COMMIT_DIALOG_SIGNED_OFF_BY,
175 UIText.CommittingPreferencePage_signedOffBy,
176 footersGroup);
177 signedOffBy
178 .getDescriptionControl(footersGroup)
179 .setToolTipText(
180 UIText.CommittingPreferencePage_signedOffByTooltip);
181 addField(signedOffBy);
182 updateMargins(footersGroup);
184 buildProblemsGroup = createGroup(main, 1);
185 buildProblemsGroup.setText(
186 UIText.CommittingPreferencePage_WarnBeforeCommittingTitle);
187 GridDataFactory.fillDefaults().grab(true, false).span(3, 1)
188 .applyTo(buildProblemsGroup);
190 warnCheckbox = createCheckBox(buildProblemsGroup,
191 UIText.CommittingPreferencePage_CheckBeforeCommitting);
192 ((GridData) warnCheckbox.getLayoutData()).horizontalSpan = 3;
193 warnCheckbox.setSelection(doGetPreferenceStore()
194 .getBoolean(UIPreferences.WARN_BEFORE_COMMITTING));
195 warnCheckbox.addSelectionListener(new SelectionAdapter() {
196 @Override
197 public void widgetSelected(SelectionEvent e) {
198 handleWarnCheckboxSelection(warnCheckbox.getSelection());
202 warnCombo = new ComboFieldEditor(UIPreferences.WARN_BEFORE_COMMITTING_LEVEL,
203 UIText.CommittingPreferencePage_WarnBeforeCommitting,
204 new String[][] {
205 { UIText.CommittingPreferencePage_WarnBlock_Errors,
206 PluginPreferenceInitializer.COMMITTING_PREFERENCE_PAGE_WARN_BLOCK_ERRORS },
207 { UIText.CommittingPreferencePage_WarnBlock_WarningsAndErrors,
208 PluginPreferenceInitializer.COMMITTING_PREFERENCE_PAGE_WARN_BLOCK_WARNINGS_AND_ERRORS } },
209 buildProblemsGroup);
210 addField(warnCombo);
212 blockCheckbox = createCheckBox(buildProblemsGroup,
213 UIText.CommittingPreferencePage_BlockCommit);
214 ((GridData) blockCheckbox.getLayoutData()).horizontalSpan = 3;
215 blockCheckbox.setSelection(
216 doGetPreferenceStore().getBoolean(UIPreferences.BLOCK_COMMIT));
217 blockCheckbox.addSelectionListener(new SelectionAdapter() {
218 @Override
219 public void widgetSelected(SelectionEvent e) {
220 handleBlockCheckboxSelection(blockCheckbox.getSelection());
224 blockCombo = new ComboFieldEditor(UIPreferences.BLOCK_COMMIT_LEVEL,
225 UIText.CommittingPreferencePage_BlockCommitCombo,
226 new String[][] {
227 { UIText.CommittingPreferencePage_WarnBlock_Errors,
228 PluginPreferenceInitializer.COMMITTING_PREFERENCE_PAGE_WARN_BLOCK_ERRORS },
229 { UIText.CommittingPreferencePage_WarnBlock_WarningsAndErrors,
230 PluginPreferenceInitializer.COMMITTING_PREFERENCE_PAGE_WARN_BLOCK_WARNINGS_AND_ERRORS } },
231 buildProblemsGroup);
232 addField(blockCombo);
234 handleWarnCheckboxSelection(warnCheckbox.getSelection());
235 handleBlockCheckboxSelection(blockCheckbox.getSelection());
236 updateMargins(buildProblemsGroup);
239 @Override
240 protected void initialize() {
241 super.initialize();
242 useStagingView.setPropertyChangeListener(new IPropertyChangeListener() {
243 @Override
244 public void propertyChange(PropertyChangeEvent event) {
245 if (FieldEditor.VALUE.equals(event.getProperty())) {
246 autoStage.setEnabled(
247 ((Boolean) event.getNewValue()).booleanValue(),
248 generalGroup);
254 @Override
255 protected void performDefaults() {
256 super.performDefaults();
257 // We don't get property changed events when the default values are
258 // restored...
259 autoStage.setEnabled(
260 getPreferenceStore().getDefaultBoolean(
261 UIPreferences.ALWAYS_USE_STAGING_VIEW),
262 generalGroup);
265 private void updateMargins(Group group) {
266 // make sure there is some room between the group border
267 // and the controls in the group
268 GridLayout layout = (GridLayout) group.getLayout();
269 layout.marginWidth = 5;
270 layout.marginHeight = 5;
273 private Button createCheckBox(Composite group, String label) {
274 Button button = new Button(group, SWT.CHECK | SWT.LEFT);
275 button.setText(label);
276 GridData data = new GridData(GridData.FILL);
277 data.verticalAlignment = GridData.CENTER;
278 data.horizontalAlignment = GridData.FILL;
279 button.setLayoutData(data);
280 return button;
283 private void handleBlockCheckboxSelection(boolean selection) {
284 blockCombo.setEnabled(selection, buildProblemsGroup);
287 private void handleWarnCheckboxSelection(boolean selection) {
288 warnCombo.setEnabled(selection, buildProblemsGroup);
289 blockCheckbox.setEnabled(selection);
290 blockCombo.setEnabled(selection, buildProblemsGroup);
293 @Override
294 public boolean performOk() {
295 getPreferenceStore().setValue(UIPreferences.WARN_BEFORE_COMMITTING,
296 warnCheckbox.getSelection());
297 getPreferenceStore().setValue(UIPreferences.BLOCK_COMMIT,
298 blockCheckbox.getSelection());
299 return super.performOk();
302 private Group createGroup(Composite parent, int numColumns) {
303 Group group = new Group(parent, SWT.NULL);
304 GridLayout layout = new GridLayout();
305 layout.numColumns = numColumns;
306 group.setLayout(layout);
307 GridData data = new GridData(SWT.FILL);
308 data.horizontalIndent = 0;
309 data.verticalAlignment = SWT.FILL;
310 data.horizontalAlignment = SWT.END;
311 data.grabExcessHorizontalSpace = true;
312 group.setLayoutData(data);
313 return group;