11package com .intellij .csharpier ;
22
3+ import com .intellij .openapi .diagnostic .Logger ;
34import com .intellij .openapi .options .SearchableConfigurable ;
45import com .intellij .openapi .project .Project ;
6+ import com .intellij .openapi .ui .ComboBox ;
57import com .intellij .ui .components .JBCheckBox ;
68import com .intellij .ui .components .JBLabel ;
79import com .intellij .ui .components .JBTextField ;
1416
1517public class CSharpierSettingsComponent implements SearchableConfigurable {
1618
19+ Logger logger = CSharpierLogger .getInstance ();
20+
1721 private final Project project ;
18- private JBCheckBox runOnSaveCheckBox = new JBCheckBox ("Run on Save" );
22+ private final String [] runOnSaveOptions = new String [] {
23+ "Don't run on save" ,
24+ "Never run on save" ,
25+ "Run on save" ,
26+ };
27+ private ComboBox <String > runOnSaveComboBox = new ComboBox <String >(runOnSaveOptions );
1928 private JBCheckBox globalRunOnSaveCheckBox = new JBCheckBox ("Run on Save (Global)" );
2029 private JBCheckBox disableCSharpierServerCheckBox = new JBCheckBox ("Disable CSharpier Server" );
2130 private JBCheckBox useCustomPath = new JBCheckBox ("Override CSharpier Executable" );
@@ -67,7 +76,12 @@ private JComponent createSectionHeader(String label) {
6776 return FormBuilder .createFormBuilder ()
6877 .addComponent (createSectionHeader ("General Settings" ))
6978 .setFormLeftIndent (leftIndent )
70- .addComponent (this .runOnSaveCheckBox , topInset )
79+ .addLabeledComponent (
80+ new JBLabel ("Run on save (Project):" ),
81+ this .runOnSaveComboBox ,
82+ topInset ,
83+ false
84+ )
7185 .addComponent (this .globalRunOnSaveCheckBox , topInset )
7286 .setFormLeftIndent (0 )
7387 .addComponent (createSectionHeader ("Developer Settings" ), 20 )
@@ -87,8 +101,8 @@ private JComponent createSectionHeader(String label) {
87101 @ Override
88102 public boolean isModified () {
89103 return (
90- CSharpierSettings .getInstance (this .project ).getRunOnSave () !=
91- this .runOnSaveCheckBox . isSelected () ||
104+ CSharpierSettings .getInstance (this .project ).getProjectRunOnSave () !=
105+ this .toRunOnSaveOption () ||
92106 CSharpierGlobalSettings .getInstance (this .project ).getRunOnSave () !=
93107 this .globalRunOnSaveCheckBox .isSelected () ||
94108 CSharpierSettings .getInstance (this .project ).getCustomPath () !=
@@ -104,7 +118,7 @@ public boolean isModified() {
104118 public void apply () {
105119 var settings = CSharpierSettings .getInstance (this .project );
106120
107- settings .setRunOnSave (this .runOnSaveCheckBox . isSelected ());
121+ settings .setProjectRunOnSave (this .toRunOnSaveOption ());
108122 settings .setCustomPath (this .customPathTextField .getText ());
109123 settings .setDisableCSharpierServer (this .disableCSharpierServerCheckBox .isSelected ());
110124 settings .setUseCustomPath (this .useCustomPath .isSelected ());
@@ -116,12 +130,39 @@ public void apply() {
116130 @ Override
117131 public void reset () {
118132 var settings = CSharpierSettings .getInstance (this .project );
119- this .runOnSaveCheckBox . setSelected (settings .getRunOnSave ());
133+ this .setSelectedRunOnSave (settings .getProjectRunOnSave ());
120134 this .useCustomPath .setSelected (settings .getUseCustomPath ());
121135 this .customPathTextField .setText (settings .getCustomPath ());
122136 this .disableCSharpierServerCheckBox .setSelected (settings .getDisableCSharpierServer ());
123137
124138 var globalSettings = CSharpierGlobalSettings .getInstance (this .project );
125139 this .globalRunOnSaveCheckBox .setSelected (globalSettings .getRunOnSave ());
126140 }
141+
142+ private ProjectRunOnSaveOption toRunOnSaveOption () {
143+ String selectedItem = (String ) runOnSaveComboBox .getSelectedItem ();
144+
145+ if (selectedItem == runOnSaveOptions [0 ]) {
146+ return ProjectRunOnSaveOption .SoftNeverRun ;
147+ } else if (selectedItem == runOnSaveOptions [1 ]) {
148+ return ProjectRunOnSaveOption .HardNeverRun ;
149+ } else if (selectedItem == runOnSaveOptions [2 ]) {
150+ return ProjectRunOnSaveOption .RunOnSave ;
151+ }
152+
153+ this .logger .debug ("invalid runOnSaveComboBox selection: " + selectedItem );
154+ return ProjectRunOnSaveOption .SoftNeverRun ;
155+ }
156+
157+ private void setSelectedRunOnSave (ProjectRunOnSaveOption saveOption ) {
158+ if (saveOption == ProjectRunOnSaveOption .SoftNeverRun ) {
159+ this .runOnSaveComboBox .setSelectedItem (runOnSaveOptions [0 ]);
160+ } else if (saveOption == ProjectRunOnSaveOption .HardNeverRun ) {
161+ this .runOnSaveComboBox .setSelectedItem (runOnSaveOptions [1 ]);
162+ } else if (saveOption == ProjectRunOnSaveOption .RunOnSave ) {
163+ this .runOnSaveComboBox .setSelectedItem (runOnSaveOptions [2 ]);
164+ }
165+
166+ this .logger .debug ("tried to set invalid ProjectRunOnSaveOption: " + saveOption );
167+ }
127168}
0 commit comments