Skip to content

Commit 6747716

Browse files
committed
feat(statusbar): add AutoDev status bar widget and action
- Added `AutoDevStatusService` class to handle the status bar widget. - Added `AutoDevStatusItemAction` class to handle the action performed when the status bar widget is clicked. - Modified `AutoDevStatusBarWidgetFactory` class to make the status bar widget available. -
1 parent 38b37f6 commit 6747716

File tree

10 files changed

+97
-6
lines changed

10 files changed

+97
-6
lines changed

src/222/main/resources/META-INF/autodev-core.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@
3333

3434
<applicationService serviceImplementation="cc.unitmesh.devti.settings.AutoDevSettingsState"/>
3535

36+
<statusBarWidgetFactory id="AIAssistant" implementation="cc.unitmesh.devti.statusbar.AutoDevStatusBarWidgetFactory"/>
37+
3638
<runConfigurationProducer
3739
implementation="cc.unitmesh.devti.runconfig.command.AutoDevFeatureConfigurationProducer"/>
3840
<runConfigurationProducer
@@ -299,5 +301,9 @@
299301

300302
<add-to-group group-id="NewGroup" anchor="last"/>
301303
</group>
304+
305+
<group id="autodev.statusBarPopup">
306+
<reference id="cc.unitmesh.devti.QuickAssistant"/>
307+
</group>
302308
</actions>
303309
</idea-plugin>

src/233/main/resources/META-INF/autodev-core.xml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,20 +12,16 @@
1212
id="cc.unitmesh.devti.settings.AutoDevSettingsConfigurable"
1313
displayName="AutoDev"/>
1414

15-
<projectService serviceImplementation="cc.unitmesh.devti.settings.configurable.CoUnitProjectSettingsService"/>
1615
<projectConfigurable provider="cc.unitmesh.devti.settings.configurable.CoUnitToolConfigurableProvider"
1716
parentId="cc.unitmesh.devti.settings.AutoDevSettingsConfigurable"
1817
id="cc.unitmesh.counit"
1918
bundle="messages.AutoDevBundle" key="counit.name"/>
2019

21-
<projectService serviceImplementation="cc.unitmesh.devti.settings.custom.TeamPromptsProjectSettingsService"/>
2220
<projectConfigurable provider="cc.unitmesh.devti.settings.custom.TeamPromptsConfigurableProvider"
2321
parentId="cc.unitmesh.devti.settings.AutoDevSettingsConfigurable"
2422
id="cc.unitmesh.promptLibrary"
2523
bundle="messages.AutoDevBundle" key="settings.external.team.prompts.name"/>
2624

27-
28-
<projectService serviceImplementation="cc.unitmesh.devti.settings.coder.AutoDevCoderSettingService"/>
2925
<projectConfigurable provider="cc.unitmesh.devti.settings.coder.AutoDevCoderConfigurableProvider"
3026
parentId="cc.unitmesh.devti.settings.AutoDevSettingsConfigurable"
3127
id="cc.unitmesh.autodevCoder"
@@ -302,5 +298,9 @@
302298

303299
<add-to-group group-id="NewGroup" anchor="last"/>
304300
</group>
301+
302+
<group id="autodev.statusBarPopup">
303+
<reference id="cc.unitmesh.devti.QuickAssistant"/>
304+
</group>
305305
</actions>
306306
</idea-plugin>

src/main/kotlin/cc/unitmesh/devti/settings/coder/AutoDevCoderSettingService.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import com.intellij.openapi.project.Project
66
val Project.coderSetting: AutoDevCoderSettingService
77
get() = service<AutoDevCoderSettingService>()
88

9+
@Service(Service.Level.PROJECT)
910
@State(name = "AutoDevCoderSettings", storages = [Storage("autodev-coder.xml")])
1011
class AutoDevCoderSettingService(
1112
val project: Project,

src/main/kotlin/cc/unitmesh/devti/settings/configurable/CoUnitSettingService.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import com.intellij.openapi.project.Project
66
val Project.coUnitSettings: CoUnitProjectSettingsService
77
get() = service<CoUnitProjectSettingsService>()
88

9+
@Service(Service.Level.PROJECT)
910
@State(name = "CoUnitProjectSettings", storages = [Storage(StoragePathMacros.WORKSPACE_FILE)])
1011
class CoUnitProjectSettingsService(
1112
val project: Project,

src/main/kotlin/cc/unitmesh/devti/settings/custom/TeamPromptsSettingService.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import com.intellij.openapi.project.Project
66
val Project.teamPromptsSettings: TeamPromptsProjectSettingsService
77
get() = service<TeamPromptsProjectSettingsService>()
88

9+
@Service(Service.Level.PROJECT)
910
@State(name = "AutoDevTeamPromptProjectSettings", storages = [Storage(StoragePathMacros.WORKSPACE_FILE)])
1011
class TeamPromptsProjectSettingsService(
1112
val project: Project,

src/main/kotlin/cc/unitmesh/devti/statusbar/AutoDevStatusBarWidget.kt

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,24 @@ package cc.unitmesh.devti.statusbar
22

33
import cc.unitmesh.devti.AutoDevBundle
44
import cc.unitmesh.devti.AutoDevIcons
5+
import com.intellij.openapi.actionSystem.*
56
import com.intellij.openapi.project.Project
6-
import com.intellij.openapi.wm.CustomStatusBarWidget
7+
import com.intellij.openapi.ui.popup.JBPopupFactory
8+
import com.intellij.openapi.ui.popup.ListPopup
9+
import com.intellij.openapi.vfs.VirtualFile
10+
import com.intellij.openapi.wm.StatusBarWidget
11+
import com.intellij.openapi.wm.impl.status.EditorBasedStatusBarPopup
712
import com.intellij.ui.ClickListener
813
import java.awt.event.MouseEvent
914
import javax.swing.JComponent
1015
import javax.swing.JLabel
1116
import javax.swing.SwingUtilities
1217

13-
class AutoDevStatusBarWidget(val project: Project) : CustomStatusBarWidget {
18+
class AutoDevStatusBarWidget(project: Project) : EditorBasedStatusBarPopup(project, false) {
1419
override fun ID(): String = "AutoDev"
20+
override fun createInstance(project: Project): StatusBarWidget {
21+
return AutoDevStatusBarWidget(project)
22+
}
1523

1624
override fun getComponent(): JComponent {
1725
val jLabel = JLabel()
@@ -30,4 +38,32 @@ class AutoDevStatusBarWidget(val project: Project) : CustomStatusBarWidget {
3038

3139
return jLabel
3240
}
41+
42+
43+
override fun createPopup(context: DataContext): ListPopup? {
44+
val statusGroup = DefaultActionGroup()
45+
statusGroup.add(AutoDevStatusItemAction())
46+
47+
val configuredGroup = ActionManager.getInstance().getAction("autodev.statusBarPopup") as? ActionGroup
48+
?: return null
49+
statusGroup.addAll(configuredGroup)
50+
51+
return JBPopupFactory.getInstance().createActionGroupPopup(
52+
AutoDevBundle.message("autodev.statusbar.popup.title"),
53+
statusGroup,
54+
context,
55+
JBPopupFactory.ActionSelectionAid.SPEEDSEARCH,
56+
true
57+
)
58+
}
59+
60+
override fun getWidgetState(file: VirtualFile?): WidgetState {
61+
val widgetState = WidgetState("", "", true)
62+
widgetState.icon = AutoDevIcons.AI_COPILOT
63+
return widgetState
64+
}
65+
66+
override fun dispose() {
67+
super.dispose()
68+
}
3369
}

src/main/kotlin/cc/unitmesh/devti/statusbar/AutoDevStatusBarWidgetFactory.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ import com.intellij.openapi.wm.StatusBarWidgetFactory
88
import org.jetbrains.annotations.NonNls
99

1010
class AutoDevStatusBarWidgetFactory : StatusBarWidgetFactory {
11+
override fun isAvailable(project: Project): Boolean {
12+
return true
13+
}
14+
1115
override fun getId(): @NonNls String = "AutoDev"
1216

1317
override fun getDisplayName(): @NlsContexts.ConfigurableName String {
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package cc.unitmesh.devti.statusbar
2+
3+
import com.intellij.openapi.actionSystem.ActionUpdateThread
4+
import com.intellij.openapi.actionSystem.AnAction
5+
import com.intellij.openapi.actionSystem.AnActionEvent
6+
import com.intellij.openapi.project.DumbAware
7+
8+
class AutoDevStatusItemAction : AnAction(), DumbAware {
9+
override fun update(e: AnActionEvent) {
10+
val presentation = e.presentation
11+
presentation.isEnabled = false
12+
presentation.text = "AutoDev"
13+
}
14+
15+
override fun actionPerformed(e: AnActionEvent) {}
16+
17+
override fun getActionUpdateThread(): ActionUpdateThread {
18+
return ActionUpdateThread.EDT
19+
}
20+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package cc.unitmesh.devti.statusbar
2+
3+
import com.intellij.openapi.Disposable
4+
import com.intellij.openapi.application.ApplicationManager
5+
import com.intellij.util.messages.Topic
6+
7+
class AutoDevStatusService: Disposable {
8+
init {
9+
ApplicationManager.getApplication().messageBus
10+
.connect(this)
11+
.subscribe(TOPIC, this)
12+
}
13+
14+
override fun dispose() {
15+
16+
}
17+
18+
companion object {
19+
val TOPIC = Topic.create("autodev.status", AutoDevStatusService::class.java)
20+
}
21+
}

src/main/resources/messages/AutoDevBundle.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,4 +98,5 @@ settings.autodev.coder.fixIssueCode=Fix issue
9898
settings.autodev.coder.generateTest=Generate test
9999
autodev.statusbar.name=AutoDev Status Bar
100100
autodev.statusbar.toolTipText=AutoDev
101+
autodev.statusbar.popup.title=AutoDevStatus
101102

0 commit comments

Comments
 (0)