@@ -170,65 +170,79 @@ class EnvironmentsPanel(
170170 }
171171
172172 private fun rebuild () {
173-
174- if (components.isNotEmpty()) {
175- this .components.forEach {
176- this .remove(it)
177- }
178- }
179-
173+ val buttonsInfo: MutableMap <String , MutableMap <String ,Any >> = HashMap ()
180174 val usageStatusResult = model.getUsageStatus()
181-
182175 val envsThatHaveUsageSet: Set <String > = buildEnvironmentWithUsages(usageStatusResult)
183176 val hasUsageFunction = fun (env : String ): Boolean { return envsThatHaveUsageSet.contains(env) }
184-
185177 val relevantEnvs = buildRelevantSortedEnvironments(environmentsSupplier, hasUsageFunction)
186-
187-
188178 for (currEnv in relevantEnvs) {
189- val isSelectedEnv = currEnv.contentEquals(environmentsSupplier.getCurrent())
179+ val currentButtonInfo: MutableMap <String ,Any > = HashMap ()
180+
181+ val isSelectedEnv: Boolean = currEnv.contentEquals(environmentsSupplier.getCurrent())
190182 val toolTip = buildToolTip(usageStatusResult, currEnv)
191183 val linkText = buildLinkText(currEnv, isSelectedEnv)
192184
193- SwingUtilities .invokeLater {
194- buildEnvironmentsPanelButtons(currEnv, linkText, isSelectedEnv, toolTip, hasUsageFunction)
195- }
185+ currentButtonInfo[" isSelectedEnv" ] = isSelectedEnv
186+ currentButtonInfo[" toolTip" ] = toolTip
187+ currentButtonInfo[" linkText" ] = linkText
188+ buttonsInfo[currEnv] = currentButtonInfo
189+
190+ }
191+ SwingUtilities .invokeLater{
192+ removeExistingEnvironmentsPanelIfPresent()
193+ buildEnvironmentsPanelButtons(buttonsInfo, hasUsageFunction)
194+ revalidate()
196195 }
197- revalidate()
198196 }
199197
200- private fun buildEnvironmentsPanelButtons (currEnv : String , linkText : String , isSelectedEnv : Boolean ,
201- toolTip : String , hasUsageFunction : (String ) -> Boolean ) {
202- val envLink = EnvLink (currEnv, linkText, isSelectedEnv)
203- envLink.toolTipText = toolTip
198+ private fun buildEnvironmentsPanelButtons (buttonsInfo : MutableMap <String , MutableMap <String , Any >>,
199+ hasUsageFunction : (String ) -> Boolean ) {
200+ buttonsInfo.forEach { button ->
201+ val buttonData = button.value
202+ val currEnv = button.key
203+ val linkText = buttonData.getValue(" linkText" ).toString()
204+ val toolTip = buttonData.getValue(" toolTip" ).toString()
205+ val isSelectedEnv = buttonData.getValue(" isSelectedEnv" ) as Boolean
204206
205- envLink.addActionListener { event ->
207+ val envLink = EnvLink (currEnv, linkText, isSelectedEnv)
208+ envLink.toolTipText = toolTip
206209
207- val currentSelected : EnvLink ? = getSelected()
210+ envLink.addActionListener { event ->
208211
209- if (currentSelected == = event.source) {
210- return @addActionListener
211- }
212+ val currentSelected: EnvLink ? = getSelected()
212213
213- currentSelected?.deselect { buildLinkText(it, false ) }
214+ if (currentSelected == = event.source) {
215+ return @addActionListener
216+ }
214217
215- val clickedLink: EnvLink = event.source as EnvLink
216- clickedLink.select { buildLinkText(it, true ) }
218+ currentSelected?.deselect { buildLinkText(it, false ) }
217219
218- changeEnvAlarm.cancelAllRequests()
219- changeEnvAlarm.addRequest({
220- environmentsSupplier.setCurrent(clickedLink.env)
221- }, 100 )
220+ val clickedLink: EnvLink = event.source as EnvLink
221+ clickedLink.select { buildLinkText(it, true ) }
222222
223- }
223+ changeEnvAlarm.cancelAllRequests()
224+ changeEnvAlarm.addRequest({
225+ environmentsSupplier.setCurrent(clickedLink.env)
226+ }, 100 )
227+
228+ }
229+
230+ val icon: Icon = if (hasUsageFunction(currEnv)) ENVIRONMENT_HAS_USAGE else ENVIRONMENT_HAS_NO_USAGE
231+ val iconComponent = JBLabel (icon)
224232
225- val icon : Icon = if (hasUsageFunction(currEnv)) ENVIRONMENT_HAS_USAGE else ENVIRONMENT_HAS_NO_USAGE
226- val iconComponent = JBLabel (icon)
233+ val singlePanel = SingleEnvPanel (envLink, iconComponent)
234+ singlePanel.toolTipText = toolTip
227235
228- val singlePanel = SingleEnvPanel (envLink, iconComponent)
229- singlePanel.toolTipText = toolTip
236+ this .add(singlePanel)
237+ }
238+ }
230239
231- this .add(singlePanel)
240+ private fun removeExistingEnvironmentsPanelIfPresent () {
241+ if (components.isNotEmpty()) {
242+ this .components.forEach {
243+ this .remove(it)
244+ }
245+ }
232246 }
233247
234248 private fun getSelected (): EnvLink ? {
0 commit comments