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
;
63 public CommittingPreferencePage() {
65 setTitle(UIText
.CommittingPreferencePage_title
);
69 public void init(IWorkbench workbench
) {
74 protected IPreferenceStore
doGetPreferenceStore() {
75 return Activator
.getDefault().getPreferenceStore();
79 protected IPreferenceStore
doGetSecondaryPreferenceStore() {
80 return new ScopedPreferenceStore(InstanceScope
.INSTANCE
,
81 org
.eclipse
.egit
.core
.Activator
.getPluginId());
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
,
97 addField(useStagingView
);
99 autoStage
= new BooleanFieldEditor(UIPreferences
.AUTO_STAGE_ON_COMMIT
,
100 UIText
.CommittingPreferencePage_AutoStageOnCommit
,
102 GridDataFactory
.fillDefaults().indent(UIUtils
.getControlIndent(), 0)
103 .applyTo(autoStage
.getDescriptionControl(generalGroup
));
105 autoStage
.setEnabled(getPreferenceStore()
106 .getBoolean(UIPreferences
.ALWAYS_USE_STAGING_VIEW
),
109 BooleanFieldEditor includeUntracked
= new BooleanFieldEditor(
110 UIPreferences
.COMMIT_DIALOG_INCLUDE_UNTRACKED
,
111 UIText
.CommittingPreferencePage_includeUntrackedFiles
,
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
,
123 public IPreferenceStore
getPreferenceStore() {
124 return getSecondaryPreferenceStore();
127 addField(autoStageDeletion
);
129 BooleanFieldEditor autoStageMoves
= new BooleanFieldEditor(
130 GitCorePreferences
.core_autoStageMoves
,
131 UIText
.CommittingPreferencePage_autoStageMoves
, generalGroup
) {
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
,
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
);
160 BooleanFieldEditor secondLineCheck
= new BooleanFieldEditor(
161 UIPreferences
.COMMIT_DIALOG_WARN_ABOUT_MESSAGE_SECOND_LINE
,
162 UIText
.CommittingPreferencePage_warnAboutCommitMessageSecondLine
,
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
,
178 .getDescriptionControl(footersGroup
)
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() {
197 public void widgetSelected(SelectionEvent e
) {
198 handleWarnCheckboxSelection(warnCheckbox
.getSelection());
202 warnCombo
= new ComboFieldEditor(UIPreferences
.WARN_BEFORE_COMMITTING_LEVEL
,
203 UIText
.CommittingPreferencePage_WarnBeforeCommitting
,
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
} },
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() {
219 public void widgetSelected(SelectionEvent e
) {
220 handleBlockCheckboxSelection(blockCheckbox
.getSelection());
224 blockCombo
= new ComboFieldEditor(UIPreferences
.BLOCK_COMMIT_LEVEL
,
225 UIText
.CommittingPreferencePage_BlockCommitCombo
,
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
} },
232 addField(blockCombo
);
234 handleWarnCheckboxSelection(warnCheckbox
.getSelection());
235 handleBlockCheckboxSelection(blockCheckbox
.getSelection());
236 updateMargins(buildProblemsGroup
);
240 protected void initialize() {
242 useStagingView
.setPropertyChangeListener(new IPropertyChangeListener() {
244 public void propertyChange(PropertyChangeEvent event
) {
245 if (FieldEditor
.VALUE
.equals(event
.getProperty())) {
246 autoStage
.setEnabled(
247 ((Boolean
) event
.getNewValue()).booleanValue(),
255 protected void performDefaults() {
256 super.performDefaults();
257 // We don't get property changed events when the default values are
259 autoStage
.setEnabled(
260 getPreferenceStore().getDefaultBoolean(
261 UIPreferences
.ALWAYS_USE_STAGING_VIEW
),
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
);
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
);
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
);