From 9d4631565188adeef9c23f5235f61e9b076724aa Mon Sep 17 00:00:00 2001 From: marcin Date: Tue, 17 Dec 2024 15:28:08 +0100 Subject: [PATCH] include indexing on statusbar widget --- .../ui/VaadinStatusBarInfoPopupPanel.kt | 26 ++++++---- .../vaadin/plugin/ui/VaadinStatusBarWidget.kt | 50 ++++++++++++++++--- 2 files changed, 58 insertions(+), 18 deletions(-) diff --git a/src/main/kotlin/com/vaadin/plugin/ui/VaadinStatusBarInfoPopupPanel.kt b/src/main/kotlin/com/vaadin/plugin/ui/VaadinStatusBarInfoPopupPanel.kt index 827e310..1b628ee 100644 --- a/src/main/kotlin/com/vaadin/plugin/ui/VaadinStatusBarInfoPopupPanel.kt +++ b/src/main/kotlin/com/vaadin/plugin/ui/VaadinStatusBarInfoPopupPanel.kt @@ -53,19 +53,23 @@ class VaadinStatusBarInfoPopupPanel(private val project: Project) : JPanel() { wrapper.add(panel) if (!status) { - val restart = JButton(AllIcons.Actions.Restart) - restart.addActionListener { - CopilotPluginUtil.removeDotFile(project) - CopilotPluginUtil.saveDotFile(project) - DumbService.getInstance(project).smartInvokeLater { - VaadinStatusBarWidget.update(project) - afterRestart?.invoke() + if (DumbService.isDumb(project)) { + wrapper.add(createDescription("Service will be available after indexing is completed")) + } else { + val restart = JButton(AllIcons.Actions.Restart) + restart.addActionListener { + CopilotPluginUtil.removeDotFile(project) + CopilotPluginUtil.saveDotFile(project) + DumbService.getInstance(project).smartInvokeLater { + VaadinStatusBarWidget.update(project) + afterRestart?.invoke() + } } + panel.add(restart) + wrapper.add( + createDescription( + "Service will be started automatically.
In case of issues you can restart it manually.")) } - panel.add(restart) - wrapper.add( - createDescription( - "Service will be available after indexing is completed.
In case of issues you can restart it manually.")) } return wrapper } diff --git a/src/main/kotlin/com/vaadin/plugin/ui/VaadinStatusBarWidget.kt b/src/main/kotlin/com/vaadin/plugin/ui/VaadinStatusBarWidget.kt index 568c28f..5f76c3f 100644 --- a/src/main/kotlin/com/vaadin/plugin/ui/VaadinStatusBarWidget.kt +++ b/src/main/kotlin/com/vaadin/plugin/ui/VaadinStatusBarWidget.kt @@ -1,5 +1,6 @@ package com.vaadin.plugin.ui +import com.intellij.openapi.project.DumbService import com.intellij.openapi.project.Project import com.intellij.openapi.ui.popup.JBPopupFactory import com.intellij.openapi.wm.StatusBarWidget @@ -8,6 +9,7 @@ import com.intellij.ui.IconManager import com.intellij.ui.awt.RelativePoint import com.intellij.util.Consumer import com.intellij.util.ui.JBUI.CurrentTheme.IconBadge +import com.intellij.util.ui.UIUtil import com.vaadin.plugin.copilot.CopilotPluginUtil import com.vaadin.plugin.utils.VaadinIcons import com.vaadin.plugin.utils.hasEndpoints @@ -24,6 +26,24 @@ class VaadinStatusBarWidget(private val project: Project) : StatusBarWidget, Sta } } + private var clicked: Boolean = false + + init { + project.messageBus + .connect() + .subscribe( + DumbService.DUMB_MODE, + object : DumbService.DumbModeListener { + override fun enteredDumbMode() { + update(project) + } + + override fun exitDumbMode() { + update(project) + } + }) + } + override fun ID(): String { return ID } @@ -33,7 +53,11 @@ class VaadinStatusBarWidget(private val project: Project) : StatusBarWidget, Sta } override fun getClickConsumer(): Consumer { - return Consumer { showPopup(RelativePoint.fromScreen(it.locationOnScreen)) } + return Consumer { + clicked = true + showPopup(RelativePoint.fromScreen(it.locationOnScreen)) + update(project) + } } private fun showPopup(relativePoint: RelativePoint) { @@ -47,18 +71,30 @@ class VaadinStatusBarWidget(private val project: Project) : StatusBarWidget, Sta } override fun getTooltipText(): String { - if (!CopilotPluginUtil.isActive(project) || !hasEndpoints()) { - return "There are issues while running Vaadin plugin, click to see details" + if (CopilotPluginUtil.isActive(project) && hasEndpoints()) { + return "Vaadin plugin is active, all features are available" } - return "Vaadin plugin is active" + if (DumbService.isDumb(project)) { + return "Indexing is in progress, please wait" + } + + return "Not all features are available, click to see details" } override fun getIcon(): Icon { - if (!CopilotPluginUtil.isActive(project) || !hasEndpoints()) { - return IconManager.getInstance().withIconBadge(VaadinIcons.VAADIN, IconBadge.WARNING) + if (clicked) { + return VaadinIcons.VAADIN + } + + if (CopilotPluginUtil.isActive(project) && hasEndpoints()) { + return VaadinIcons.VAADIN + } + + if (DumbService.isDumb(project)) { + return IconManager.getInstance().withIconBadge(VaadinIcons.VAADIN, UIUtil.getLabelForeground()) } - return VaadinIcons.VAADIN + return IconManager.getInstance().withIconBadge(VaadinIcons.VAADIN, IconBadge.WARNING) } }