66import org .eclipse .jface .preference .BooleanFieldEditor ;
77import org .eclipse .jface .preference .ComboFieldEditor ;
88import org .eclipse .jface .preference .IntegerFieldEditor ;
9+ import org .eclipse .jface .preference .IPreferenceStore ;
10+ import org .eclipse .jface .preference .IPersistentPreferenceStore ;
911import org .eclipse .jface .preference .StringButtonFieldEditor ;
1012import org .eclipse .swt .SWT ;
1113import org .eclipse .swt .widgets .Composite ;
2325public class SettingsPreferencePage extends FieldEditorOverlayPage implements
2426 IWorkbenchPreferencePage {
2527
28+ private static final String CPPCHECK_PROJ_STRING = ".cppcheck" ;
29+
2630 private BooleanFieldEditor allCheck ;
2731 private BooleanFieldEditor unusedFunctionsCheck ;
2832 private IntegerFieldEditor numberOfThreads ;
2933 private StringButtonFieldEditor projectFile ;
3034 private List <BooleanFieldEditor > checkEditors ;
3135 private Group checkGroup ;
3236
37+
38+ ExclusiveBooleanFieldEditor misrac12Editor ;
39+ ExclusiveBooleanFieldEditor misrac23Editor ;
40+ ExclusiveBooleanFieldEditor misracpp08Editor ;
41+ ExclusiveBooleanFieldEditor misracpp23Editor ;
42+ private List <BooleanFieldEditor > premiumEditors ;
43+ private Group premiumGroup ;
44+
3345 public SettingsPreferencePage () {
3446 super (GRID , true );
3547 // this is overridden in case of project properties
@@ -122,6 +134,70 @@ protected void valueChanged(boolean oldValue, boolean newValue) {
122134 setCompositeLayout (checkGroup );
123135 }
124136
137+
138+ private void enablePremiumChecks (boolean val ) {
139+ misrac12Editor .setEnabled (val && !misrac23Editor .getBooleanValue (), premiumGroup );
140+ misrac23Editor .setEnabled (val && !misrac12Editor .getBooleanValue (), premiumGroup );
141+ misracpp08Editor .setEnabled (val && !misracpp23Editor .getBooleanValue (), premiumGroup );
142+ misracpp23Editor .setEnabled (val && !misracpp08Editor .getBooleanValue (), premiumGroup );
143+ for (BooleanFieldEditor premiumEditor : premiumEditors ) {
144+ premiumEditor .setEnabled (val , premiumGroup );
145+ }
146+ }
147+
148+ private void createPremiumGroup () {
149+ // available premium options
150+ final Composite parent = getFieldEditorParent ();
151+ premiumGroup = new Group (parent , SWT .NONE );
152+ premiumGroup .setText (Messages .SettingsPreferencePage_PremiumLabel );
153+
154+ premiumEditors = new LinkedList <BooleanFieldEditor >();
155+
156+ BooleanFieldEditor bughuntingEditor = new BooleanFieldEditor (IPreferenceConstants .P_PREMIUM_BUG_HUNTING ,
157+ Messages .SettingsPreferencePage_PremiumBugHunting , premiumGroup );
158+ addField (bughuntingEditor , premiumGroup );
159+ premiumEditors .add (bughuntingEditor );
160+
161+ misrac12Editor = new ExclusiveBooleanFieldEditor (IPreferenceConstants .P_PREMIUM_MISRA_C_12 ,
162+ Messages .SettingsPreferencePage_PremiumMisraC2012 , premiumGroup );
163+ addField (misrac12Editor , premiumGroup );
164+
165+ misrac23Editor = new ExclusiveBooleanFieldEditor (IPreferenceConstants .P_PREMIUM_MISRA_C_23 ,
166+ Messages .SettingsPreferencePage_PremiumMisraC2023 , premiumGroup );
167+ addField (misrac23Editor , premiumGroup );
168+
169+ misrac12Editor .addDependent (misrac23Editor , premiumGroup );
170+ misrac23Editor .addDependent (misrac12Editor , premiumGroup );
171+
172+ misracpp08Editor = new ExclusiveBooleanFieldEditor (IPreferenceConstants .P_PREMIUM_MISRA_CPP_08 ,
173+ Messages .SettingsPreferencePage_PremiumMisraCpp2008 , premiumGroup );
174+ addField (misracpp08Editor , premiumGroup );
175+
176+ misracpp23Editor = new ExclusiveBooleanFieldEditor (IPreferenceConstants .P_PREMIUM_MISRA_CPP_23 ,
177+ Messages .SettingsPreferencePage_PremiumMisraCpp2023 , premiumGroup );
178+ addField (misracpp23Editor , premiumGroup );
179+
180+ misracpp08Editor .addDependent (misracpp23Editor , premiumGroup );
181+ misracpp23Editor .addDependent (misracpp08Editor , premiumGroup );
182+
183+ BooleanFieldEditor certcEditor = new BooleanFieldEditor (IPreferenceConstants .P_PREMIUM_CERT_C ,
184+ Messages .SettingsPreferencePage_PremiumCertC , premiumGroup );
185+ addField (certcEditor , premiumGroup );
186+ premiumEditors .add (certcEditor );
187+
188+ BooleanFieldEditor certcppEditor = new BooleanFieldEditor (IPreferenceConstants .P_PREMIUM_CERT_CPP ,
189+ Messages .SettingsPreferencePage_PremiumCertCpp , premiumGroup );
190+ addField (certcppEditor , premiumGroup );
191+ premiumEditors .add (certcppEditor );
192+
193+ BooleanFieldEditor autosarEditor = new BooleanFieldEditor (IPreferenceConstants .P_PREMIUM_AUTOSAR ,
194+ Messages .SettingsPreferencePage_PremiumAutosar , premiumGroup );
195+ addField (autosarEditor , premiumGroup );
196+ premiumEditors .add (autosarEditor );
197+
198+ setCompositeLayout (premiumGroup );
199+ }
200+
125201 @ Override
126202 protected void createFieldEditors () {
127203
@@ -134,6 +210,14 @@ protected String changePressed() {
134210 return projectFileDialog .open ();
135211 }
136212
213+ @ Override
214+ protected void valueChanged () {
215+ super .valueChanged ();
216+ IPersistentPreferenceStore store = CppcheclipsePlugin .getConfigurationPreferenceStore ();
217+ boolean isPremium = store .getBoolean (IPreferenceConstants .P_PREMIUM );
218+ enablePremiumChecks (isPremium && (getStringValue ().isEmpty () || !getStringValue ().endsWith (CPPCHECK_PROJ_STRING )));
219+ }
220+
137221 };
138222 projectFile .setChangeButtonText (Messages .SettingsPreferencePage_ProjectFileDialogButton );
139223 projectFile .setEmptyStringAllowed (true );
@@ -157,7 +241,8 @@ public void setEnabled(boolean enabled, Composite parent) {
157241 addField (numberOfThreads );
158242
159243 createCheckGroup ();
160-
244+ createPremiumGroup ();
245+
161246 final BooleanFieldEditor inconclusiveChecks = new BooleanFieldEditor (
162247 IPreferenceConstants .P_CHECK_INCONCLUSIVE ,
163248 Messages .SettingsPreferencePage_Inconclusive ,
@@ -252,5 +337,10 @@ private void refresh() {
252337 for (BooleanFieldEditor editor : checkEditors ) {
253338 editor .setEnabled (!allCheck .getBooleanValue (), checkGroup );
254339 }
340+
341+ IPersistentPreferenceStore store = CppcheclipsePlugin .getConfigurationPreferenceStore ();
342+ boolean isPremium = store .getBoolean (IPreferenceConstants .P_PREMIUM );
343+ enablePremiumChecks (isPremium && (projectFile .getStringValue ().isEmpty ()
344+ || !projectFile .getStringValue ().endsWith (CPPCHECK_PROJ_STRING )));
255345 }
256346}
0 commit comments