Skip to content

Commit cbe7e1b

Browse files
Fix envs panel duplication + fix EDT issue on Envs panel rebuild
1 parent c2901d3 commit cbe7e1b

File tree

1 file changed

+52
-38
lines changed

1 file changed

+52
-38
lines changed

src/main/kotlin/org/digma/intellij/plugin/ui/common/EnvironmentsPanel.kt

Lines changed: 52 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)