@@ -6,7 +6,6 @@ import com.intellij.openapi.ui.DialogPanel
66import com.intellij.ui.EnumComboBoxModel
77import com.intellij.ui.components.fields.IntegerField
88import com.intellij.ui.dsl.builder.panel
9- import com.intellij.util.ui.JBUI
109import ee.carlrobert.codegpt.CodeGPTBundle
1110import java.awt.Component
1211import javax.swing.DefaultListCellRenderer
@@ -22,151 +21,57 @@ class ContextSuggestionConfigurationForm {
2221 columns = 12
2322 value = service<ConfigurationSettings >().state.contextSuggestionSettings.maxFileSuggestions
2423 }
25-
26- private val maxDirectorySuggestionsField = IntegerField (
27- " max_directory_suggestions" ,
28- 1 ,
29- ContextSuggestionSettings .MAX_DIRECTORY_SUGGESTIONS
30- ).apply {
31- columns = 12
32- value = service<ConfigurationSettings >().state.contextSuggestionSettings.maxDirectorySuggestions
33- }
34- private val blankFileSuggestionModeComboBox =
35- ComboBox (EnumComboBoxModel (ContextSuggestionBlankFileSuggestionMode ::class .java)).apply {
36- selectedItem = service<ConfigurationSettings >().state.contextSuggestionSettings.blankFileSuggestionMode
37- renderer = object : DefaultListCellRenderer () {
38- override fun getListCellRendererComponent (
39- list : JList <* >? ,
40- value : Any? ,
41- index : Int ,
42- isSelected : Boolean ,
43- cellHasFocus : Boolean
44- ): Component {
45- val displayValue =
46- (value as ? ContextSuggestionBlankFileSuggestionMode )?.displayName() ? : value
47- return super .getListCellRendererComponent(
48- list,
49- displayValue,
50- index,
51- isSelected,
52- cellHasFocus
53- )
54- }
55- }
24+ private val maxDirectorySuggestionsField =
25+ IntegerField (
26+ " max_directory_suggestions" ,
27+ 1 ,
28+ ContextSuggestionSettings .MAX_DIRECTORY_SUGGESTIONS
29+ ).apply {
30+ columns = 12
31+ value =
32+ service<ConfigurationSettings >().state.contextSuggestionSettings.maxDirectorySuggestions
5633 }
34+ private val blankFileSuggestionModeComboBox =
35+ createEnumComboBox(
36+ service<ConfigurationSettings >().state.contextSuggestionSettings.blankFileSuggestionMode,
37+ ContextSuggestionBlankFileSuggestionMode ::displayName
38+ )
5739 private val fileSortModeComboBox =
58- ComboBox (EnumComboBoxModel (ContextSuggestionFileSortMode ::class .java)).apply {
59- selectedItem = service<ConfigurationSettings >().state.contextSuggestionSettings.fileSortMode
60- renderer = object : DefaultListCellRenderer () {
61- override fun getListCellRendererComponent (
62- list : JList <* >? ,
63- value : Any? ,
64- index : Int ,
65- isSelected : Boolean ,
66- cellHasFocus : Boolean
67- ): Component {
68- val displayValue = (value as ? ContextSuggestionFileSortMode )?.displayName() ? : value
69- return super .getListCellRendererComponent(
70- list,
71- displayValue,
72- index,
73- isSelected,
74- cellHasFocus
75- )
76- }
77- }
78- }
40+ createEnumComboBox(
41+ service<ConfigurationSettings >().state.contextSuggestionSettings.fileSortMode,
42+ ContextSuggestionFileSortMode ::displayName
43+ )
7944 private val pathDetailsModeComboBox =
80- ComboBox (EnumComboBoxModel (ContextSuggestionPathDetailsMode ::class .java)).apply {
81- selectedItem = service<ConfigurationSettings >().state.contextSuggestionSettings.pathDetailsMode
82- renderer = object : DefaultListCellRenderer () {
83- override fun getListCellRendererComponent (
84- list : JList <* >? ,
85- value : Any? ,
86- index : Int ,
87- isSelected : Boolean ,
88- cellHasFocus : Boolean
89- ): Component {
90- val displayValue = (value as ? ContextSuggestionPathDetailsMode )?.displayName() ? : value
91- return super .getListCellRendererComponent(
92- list,
93- displayValue,
94- index,
95- isSelected,
96- cellHasFocus
97- )
98- }
99- }
100- }
45+ createEnumComboBox(
46+ service<ConfigurationSettings >().state.contextSuggestionSettings.pathDetailsMode,
47+ ContextSuggestionPathDetailsMode ::displayName
48+ )
10149
10250 fun createPanel (): DialogPanel {
10351 return panel {
104- row {
105- label(
106- CodeGPTBundle .get(
107- " configurationConfigurable.section.contextSuggestions.maxFileSuggestions.title"
108- )
109- )
110- cell(maxFileSuggestionsField)
111- .comment(
112- CodeGPTBundle .get(
113- " configurationConfigurable.section.contextSuggestions.maxFileSuggestions.description"
114- )
115- )
116- }
117- row {
118- label(
119- CodeGPTBundle .get(
120- " configurationConfigurable.section.contextSuggestions.maxDirectorySuggestions.title"
121- )
122- )
123- cell(maxDirectorySuggestionsField)
124- .comment(
125- CodeGPTBundle .get(
126- " configurationConfigurable.section.contextSuggestions.maxDirectorySuggestions.description"
127- )
128- )
129- }
130- row {
131- label(
132- CodeGPTBundle .get(
133- " configurationConfigurable.section.contextSuggestions.blankFileSuggestionMode.title"
134- )
135- )
136- cell(blankFileSuggestionModeComboBox)
137- .comment(
138- CodeGPTBundle .get(
139- " configurationConfigurable.section.contextSuggestions.blankFileSuggestionMode.description"
140- )
141- )
142- }
143- row {
144- label(
145- CodeGPTBundle .get(
146- " configurationConfigurable.section.contextSuggestions.fileSortMode.title"
147- )
148- )
149- cell(fileSortModeComboBox)
150- .comment(
151- CodeGPTBundle .get(
152- " configurationConfigurable.section.contextSuggestions.fileSortMode.description"
153- )
154- )
155- }
156- row {
157- label(
158- CodeGPTBundle .get(
159- " configurationConfigurable.section.contextSuggestions.pathDetailsMode.title"
160- )
161- )
162- cell(pathDetailsModeComboBox)
163- .comment(
164- CodeGPTBundle .get(
165- " configurationConfigurable.section.contextSuggestions.pathDetailsMode.description"
166- )
167- )
52+ indent {
53+ row(CodeGPTBundle .get(" configurationConfigurable.section.contextSuggestions.maxFileSuggestions.title" )) {
54+ cell(maxFileSuggestionsField)
55+ .comment(CodeGPTBundle .get(" configurationConfigurable.section.contextSuggestions.maxFileSuggestions.title" ))
56+ }
57+ row(CodeGPTBundle .get(" configurationConfigurable.section.contextSuggestions.maxDirectorySuggestions.title" )) {
58+ cell(maxDirectorySuggestionsField)
59+ .comment(CodeGPTBundle .get(" configurationConfigurable.section.contextSuggestions.maxDirectorySuggestions.description" ))
60+ }
61+ row(CodeGPTBundle .get(" configurationConfigurable.section.contextSuggestions.blankFileSuggestionMode.title" )) {
62+ cell(blankFileSuggestionModeComboBox)
63+ .comment(CodeGPTBundle .get(" configurationConfigurable.section.contextSuggestions.blankFileSuggestionMode.description" ))
64+ }
65+ row(CodeGPTBundle .get(" configurationConfigurable.section.contextSuggestions.fileSortMode.title" )) {
66+ cell(fileSortModeComboBox)
67+ .comment(CodeGPTBundle .get(" configurationConfigurable.section.contextSuggestions.fileSortMode.description" ))
68+ }
69+ row(CodeGPTBundle .get(" configurationConfigurable.section.contextSuggestions.pathDetailsMode.title" )) {
70+ cell(pathDetailsModeComboBox)
71+ .comment(CodeGPTBundle .get(" configurationConfigurable.section.contextSuggestions.pathDetailsMode.description" ))
72+ }
16873 }
169- }.withBorder( JBUI . Borders .emptyLeft( 16 ))
74+ }
17075 }
17176
17277 fun resetForm (prevState : ContextSuggestionSettingsState ) {
@@ -186,8 +91,36 @@ class ContextSuggestionConfigurationForm {
18691 ? : ContextSuggestionBlankFileSuggestionMode .OPEN_AND_RECENT
18792 fileSortMode = fileSortModeComboBox.selectedItem as ? ContextSuggestionFileSortMode
18893 ? : ContextSuggestionFileSortMode .PRESERVE_CURRENT_ORDER
189- pathDetailsMode = pathDetailsModeComboBox.selectedItem as ? ContextSuggestionPathDetailsMode
190- ? : ContextSuggestionPathDetailsMode .FULL_PATH
94+ pathDetailsMode =
95+ pathDetailsModeComboBox.selectedItem as ? ContextSuggestionPathDetailsMode
96+ ? : ContextSuggestionPathDetailsMode .FULL_PATH
97+ }
98+ }
99+
100+ private inline fun <reified T : Enum <T >> createEnumComboBox (
101+ selectedValue : T ,
102+ noinline displayName : (T ) -> String
103+ ): ComboBox <T > {
104+ return ComboBox (EnumComboBoxModel (T ::class .java)).apply {
105+ selectedItem = selectedValue
106+ renderer = object : DefaultListCellRenderer () {
107+ override fun getListCellRendererComponent (
108+ list : JList <* >? ,
109+ value : Any? ,
110+ index : Int ,
111+ isSelected : Boolean ,
112+ cellHasFocus : Boolean
113+ ): Component {
114+ val displayValue = (value as ? T )?.let (displayName) ? : value
115+ return super .getListCellRendererComponent(
116+ list,
117+ displayValue,
118+ index,
119+ isSelected,
120+ cellHasFocus
121+ )
122+ }
123+ }
191124 }
192125 }
193- }
126+ }
0 commit comments