Skip to content

Commit 57f419c

Browse files
committed
reload UI
1 parent e6ce69e commit 57f419c

File tree

6 files changed

+127
-19
lines changed

6 files changed

+127
-19
lines changed
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package org.digma.intellij.plugin.reload
2+
3+
import com.intellij.openapi.actionSystem.AnAction
4+
import com.intellij.openapi.actionSystem.AnActionEvent
5+
import com.intellij.openapi.components.service
6+
import org.digma.intellij.plugin.errorreporting.ErrorReporter
7+
8+
class ReloadAction : AnAction() {
9+
override fun actionPerformed(p0: AnActionEvent) {
10+
try {
11+
service<ReloadService>().reload()
12+
} catch (e: Throwable) {
13+
ErrorReporter.getInstance().reportError("ReloadAction.actionPerformed", e)
14+
}
15+
}
16+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package org.digma.intellij.plugin.reload
2+
3+
import com.intellij.openapi.components.Service
4+
import org.digma.intellij.plugin.common.EDT
5+
import org.digma.intellij.plugin.ui.panels.ReloadablePanel
6+
7+
@Service(Service.Level.APP)
8+
class ReloadService {
9+
10+
private val reloadables = mutableListOf<ReloadablePanel>()
11+
12+
13+
fun register(reloadablePanel: ReloadablePanel) {
14+
reloadables.add(reloadablePanel)
15+
}
16+
17+
18+
fun reload() {
19+
reloadables.forEach {
20+
EDT.ensureEDT {
21+
it.reload()
22+
}
23+
}
24+
}
25+
26+
27+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package org.digma.intellij.plugin.ui.panels
2+
3+
interface ReloadablePanel {
4+
fun reload()
5+
}

src/main/kotlin/org/digma/intellij/plugin/ui/mainapp/MainAppPanel.kt

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,41 @@
11
package org.digma.intellij.plugin.ui.mainapp
22

3+
import com.intellij.openapi.components.service
34
import com.intellij.openapi.project.Project
45
import com.intellij.openapi.util.Disposer
56
import com.intellij.ui.jcef.JBCefApp
67
import com.intellij.util.ui.JBUI
8+
import org.digma.intellij.plugin.reload.ReloadService
79
import org.digma.intellij.plugin.ui.insights.InsightsService
810
import org.digma.intellij.plugin.ui.jcef.DownloadHandlerAdapter
911
import org.digma.intellij.plugin.ui.jcef.JCefComponent
1012
import org.digma.intellij.plugin.ui.list.listBackground
1113
import org.digma.intellij.plugin.ui.navigation.CodeButtonCaretContextService
1214
import org.digma.intellij.plugin.ui.navigation.NavigationService
1315
import org.digma.intellij.plugin.ui.panels.DisposablePanel
16+
import org.digma.intellij.plugin.ui.panels.ReloadablePanel
1417
import org.digma.intellij.plugin.ui.tests.TestsUpdater
1518
import java.awt.BorderLayout
1619
import java.awt.Insets
1720
import javax.swing.JComponent
1821
import javax.swing.JLabel
1922

20-
class MainAppPanel(private val project: Project) : DisposablePanel() {
23+
class MainAppPanel(private val project: Project) : DisposablePanel(), ReloadablePanel {
24+
25+
private var jCefComponent: JCefComponent? = null
26+
27+
private var parentDisposable = Disposer.newDisposable()
2128

2229
init {
30+
jCefComponent = build()
31+
service<ReloadService>().register(this)
32+
Disposer.register(MainAppService.getInstance(project)) {
33+
dispose()
34+
}
35+
}
36+
37+
38+
private fun build(): JCefComponent? {
2339

2440
val jCefComponent = createJcefComponent()
2541

@@ -30,12 +46,6 @@ class MainAppPanel(private val project: Project) : DisposablePanel() {
3046
add(jcefUiComponent, BorderLayout.CENTER)
3147
background = listBackground()
3248

33-
Disposer.register(MainAppService.getInstance(project)) {
34-
jCefComponent?.dispose()
35-
remove(jcefUiComponent)
36-
dispose()
37-
}
38-
3949
jCefComponent?.let {
4050
MainAppService.getInstance(project).setJCefComponent(it)
4151
TestsUpdater.getInstance(project).setJCefComponent(it)
@@ -44,12 +54,22 @@ class MainAppPanel(private val project: Project) : DisposablePanel() {
4454
CodeButtonCaretContextService.getInstance(project).setJCefComponent(it)
4555
}
4656

57+
return jCefComponent
4758
}
4859

60+
61+
override fun reload() {
62+
dispose()
63+
removeAll()
64+
parentDisposable = Disposer.newDisposable()
65+
jCefComponent = build()
66+
}
67+
68+
4969
private fun createJcefComponent(): JCefComponent? {
5070
return if (JBCefApp.isSupported()) {
5171
JCefComponent.JCefComponentBuilder(
52-
project, "Main", MainAppService.getInstance(project),
72+
project, "Main", parentDisposable,
5373
MAIN_APP_URL,
5474
MainAppMessageRouterHandler(project)
5575
)
@@ -66,6 +86,9 @@ class MainAppPanel(private val project: Project) : DisposablePanel() {
6686
}
6787

6888
override fun dispose() {
69-
//nothing to do
89+
Disposer.dispose(parentDisposable)
90+
jCefComponent?.let {
91+
Disposer.dispose(it)
92+
}
7093
}
7194
}

src/main/kotlin/org/digma/intellij/plugin/ui/recentactivity/RecentActivityPanel.kt

Lines changed: 37 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,45 +5,65 @@ import com.intellij.openapi.project.Project
55
import com.intellij.openapi.util.Disposer
66
import com.intellij.ui.jcef.JBCefApp
77
import com.intellij.util.ui.JBUI
8+
import org.digma.intellij.plugin.reload.ReloadService
89
import org.digma.intellij.plugin.ui.jcef.JCefComponent
910
import org.digma.intellij.plugin.ui.jcef.JCefComponent.JCefComponentBuilder
1011
import org.digma.intellij.plugin.ui.list.listBackground
1112
import org.digma.intellij.plugin.ui.panels.DisposablePanel
13+
import org.digma.intellij.plugin.ui.panels.ReloadablePanel
1214
import java.awt.BorderLayout
15+
import java.awt.Insets
1316
import javax.swing.JComponent
1417
import javax.swing.JLabel
1518

16-
class RecentActivityPanel(private val project: Project) : DisposablePanel() {
19+
class RecentActivityPanel(private val project: Project) : DisposablePanel(), ReloadablePanel {
20+
21+
private var jCefComponent: JCefComponent? = null
22+
23+
private var parentDisposable = Disposer.newDisposable()
1724

1825
init {
26+
jCefComponent = build()
27+
service<ReloadService>().register(this)
28+
Disposer.register(project.service<RecentActivityService>()) {
29+
dispose()
30+
}
31+
}
32+
33+
34+
private fun build(): JCefComponent? {
1935

2036
val jCefComponent = createJcefComponent()
2137

2238
val jcefUiComponent: JComponent = jCefComponent?.getComponent() ?: JLabel("JCEF not supported")
2339

2440
layout = BorderLayout()
2541
border = JBUI.Borders.empty()
26-
background = listBackground()
2742
add(jcefUiComponent, BorderLayout.CENTER)
28-
29-
Disposer.register(project.service<RecentActivityService>()) {
30-
jCefComponent?.dispose()
31-
remove(jcefUiComponent)
32-
dispose()
33-
}
43+
background = listBackground()
3444

3545
jCefComponent?.let {
3646
project.service<RecentActivityService>().setJcefComponent(it)
3747
project.service<RecentActivityUpdater>().setJcefComponent(it)
3848
project.service<LiveViewUpdater>().setJcefComponent(it)
3949
}
50+
51+
return jCefComponent
52+
}
53+
54+
55+
override fun reload() {
56+
dispose()
57+
removeAll()
58+
parentDisposable = Disposer.newDisposable()
59+
jCefComponent = build()
4060
}
4161

4262

4363
private fun createJcefComponent(): JCefComponent? {
4464
return if (JBCefApp.isSupported()) {
4565
JCefComponentBuilder(
46-
project, "RecentActivity", project.service<RecentActivityService>(),
66+
project, "RecentActivity", parentDisposable,
4767
RECENT_ACTIVITY_URL,
4868
RecentActivityMessageRouterHandler(project)
4969
)
@@ -54,7 +74,14 @@ class RecentActivityPanel(private val project: Project) : DisposablePanel() {
5474
}
5575

5676

77+
override fun getInsets(): Insets {
78+
return JBUI.emptyInsets()
79+
}
80+
5781
override fun dispose() {
58-
//nothing to do
82+
Disposer.dispose(parentDisposable)
83+
jCefComponent?.let {
84+
Disposer.dispose(it)
85+
}
5986
}
6087
}

src/main/resources/META-INF/plugin.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,4 +166,14 @@
166166
topic="com.intellij.openapi.project.ProjectCloseListener"/>
167167
</applicationListeners>
168168

169+
170+
<actions>
171+
<action id="org.digma.intellij.plugin.reload.ReloadAction" class="org.digma.intellij.plugin.reload.ReloadAction"
172+
text="Reload Digma UI" description="Reload Digma jcef browsers"
173+
icon="org.digma.intellij.plugin.icons.AppIcons.TOOL_WINDOW">
174+
<add-to-group group-id="HelpMenu" anchor="last"/>
175+
</action>
176+
</actions>
177+
178+
169179
</idea-plugin>

0 commit comments

Comments
 (0)