Skip to content

Commit

Permalink
feat(statusbar): add AutoDev status bar widget and action
Browse files Browse the repository at this point in the history
- 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.
-
  • Loading branch information
phodal committed Jan 13, 2024
1 parent 38b37f6 commit 6747716
Show file tree
Hide file tree
Showing 10 changed files with 97 additions and 6 deletions.
6 changes: 6 additions & 0 deletions src/222/main/resources/META-INF/autodev-core.xml
Expand Up @@ -33,6 +33,8 @@

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

<statusBarWidgetFactory id="AIAssistant" implementation="cc.unitmesh.devti.statusbar.AutoDevStatusBarWidgetFactory"/>

<runConfigurationProducer
implementation="cc.unitmesh.devti.runconfig.command.AutoDevFeatureConfigurationProducer"/>
<runConfigurationProducer
Expand Down Expand Up @@ -299,5 +301,9 @@

<add-to-group group-id="NewGroup" anchor="last"/>
</group>

<group id="autodev.statusBarPopup">
<reference id="cc.unitmesh.devti.QuickAssistant"/>
</group>
</actions>
</idea-plugin>
8 changes: 4 additions & 4 deletions src/233/main/resources/META-INF/autodev-core.xml
Expand Up @@ -12,20 +12,16 @@
id="cc.unitmesh.devti.settings.AutoDevSettingsConfigurable"
displayName="AutoDev"/>

<projectService serviceImplementation="cc.unitmesh.devti.settings.configurable.CoUnitProjectSettingsService"/>
<projectConfigurable provider="cc.unitmesh.devti.settings.configurable.CoUnitToolConfigurableProvider"
parentId="cc.unitmesh.devti.settings.AutoDevSettingsConfigurable"
id="cc.unitmesh.counit"
bundle="messages.AutoDevBundle" key="counit.name"/>

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


<projectService serviceImplementation="cc.unitmesh.devti.settings.coder.AutoDevCoderSettingService"/>
<projectConfigurable provider="cc.unitmesh.devti.settings.coder.AutoDevCoderConfigurableProvider"
parentId="cc.unitmesh.devti.settings.AutoDevSettingsConfigurable"
id="cc.unitmesh.autodevCoder"
Expand Down Expand Up @@ -302,5 +298,9 @@

<add-to-group group-id="NewGroup" anchor="last"/>
</group>

<group id="autodev.statusBarPopup">
<reference id="cc.unitmesh.devti.QuickAssistant"/>
</group>
</actions>
</idea-plugin>
Expand Up @@ -6,6 +6,7 @@ import com.intellij.openapi.project.Project
val Project.coderSetting: AutoDevCoderSettingService
get() = service<AutoDevCoderSettingService>()

@Service(Service.Level.PROJECT)
@State(name = "AutoDevCoderSettings", storages = [Storage("autodev-coder.xml")])
class AutoDevCoderSettingService(
val project: Project,
Expand Down
Expand Up @@ -6,6 +6,7 @@ import com.intellij.openapi.project.Project
val Project.coUnitSettings: CoUnitProjectSettingsService
get() = service<CoUnitProjectSettingsService>()

@Service(Service.Level.PROJECT)
@State(name = "CoUnitProjectSettings", storages = [Storage(StoragePathMacros.WORKSPACE_FILE)])
class CoUnitProjectSettingsService(
val project: Project,
Expand Down
Expand Up @@ -6,6 +6,7 @@ import com.intellij.openapi.project.Project
val Project.teamPromptsSettings: TeamPromptsProjectSettingsService
get() = service<TeamPromptsProjectSettingsService>()

@Service(Service.Level.PROJECT)
@State(name = "AutoDevTeamPromptProjectSettings", storages = [Storage(StoragePathMacros.WORKSPACE_FILE)])
class TeamPromptsProjectSettingsService(
val project: Project,
Expand Down
Expand Up @@ -2,16 +2,24 @@ package cc.unitmesh.devti.statusbar

import cc.unitmesh.devti.AutoDevBundle
import cc.unitmesh.devti.AutoDevIcons
import com.intellij.openapi.actionSystem.*
import com.intellij.openapi.project.Project
import com.intellij.openapi.wm.CustomStatusBarWidget
import com.intellij.openapi.ui.popup.JBPopupFactory
import com.intellij.openapi.ui.popup.ListPopup
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.openapi.wm.StatusBarWidget
import com.intellij.openapi.wm.impl.status.EditorBasedStatusBarPopup
import com.intellij.ui.ClickListener
import java.awt.event.MouseEvent
import javax.swing.JComponent
import javax.swing.JLabel
import javax.swing.SwingUtilities

class AutoDevStatusBarWidget(val project: Project) : CustomStatusBarWidget {
class AutoDevStatusBarWidget(project: Project) : EditorBasedStatusBarPopup(project, false) {
override fun ID(): String = "AutoDev"
override fun createInstance(project: Project): StatusBarWidget {
return AutoDevStatusBarWidget(project)
}

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

return jLabel
}


override fun createPopup(context: DataContext): ListPopup? {
val statusGroup = DefaultActionGroup()
statusGroup.add(AutoDevStatusItemAction())

val configuredGroup = ActionManager.getInstance().getAction("autodev.statusBarPopup") as? ActionGroup
?: return null
statusGroup.addAll(configuredGroup)

return JBPopupFactory.getInstance().createActionGroupPopup(
AutoDevBundle.message("autodev.statusbar.popup.title"),
statusGroup,
context,
JBPopupFactory.ActionSelectionAid.SPEEDSEARCH,
true
)
}

override fun getWidgetState(file: VirtualFile?): WidgetState {
val widgetState = WidgetState("", "", true)
widgetState.icon = AutoDevIcons.AI_COPILOT
return widgetState
}

override fun dispose() {
super.dispose()
}
}
Expand Up @@ -8,6 +8,10 @@ import com.intellij.openapi.wm.StatusBarWidgetFactory
import org.jetbrains.annotations.NonNls

class AutoDevStatusBarWidgetFactory : StatusBarWidgetFactory {
override fun isAvailable(project: Project): Boolean {
return true
}

override fun getId(): @NonNls String = "AutoDev"

override fun getDisplayName(): @NlsContexts.ConfigurableName String {
Expand Down
@@ -0,0 +1,20 @@
package cc.unitmesh.devti.statusbar

import com.intellij.openapi.actionSystem.ActionUpdateThread
import com.intellij.openapi.actionSystem.AnAction
import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.project.DumbAware

class AutoDevStatusItemAction : AnAction(), DumbAware {
override fun update(e: AnActionEvent) {
val presentation = e.presentation
presentation.isEnabled = false
presentation.text = "AutoDev"
}

override fun actionPerformed(e: AnActionEvent) {}

override fun getActionUpdateThread(): ActionUpdateThread {
return ActionUpdateThread.EDT
}
}
@@ -0,0 +1,21 @@
package cc.unitmesh.devti.statusbar

import com.intellij.openapi.Disposable
import com.intellij.openapi.application.ApplicationManager
import com.intellij.util.messages.Topic

class AutoDevStatusService: Disposable {
init {
ApplicationManager.getApplication().messageBus
.connect(this)
.subscribe(TOPIC, this)
}

override fun dispose() {

}

companion object {
val TOPIC = Topic.create("autodev.status", AutoDevStatusService::class.java)
}
}
1 change: 1 addition & 0 deletions src/main/resources/messages/AutoDevBundle.properties
Expand Up @@ -98,4 +98,5 @@ settings.autodev.coder.fixIssueCode=Fix issue
settings.autodev.coder.generateTest=Generate test
autodev.statusbar.name=AutoDev Status Bar
autodev.statusbar.toolTipText=AutoDev
autodev.statusbar.popup.title=AutoDevStatus

0 comments on commit 6747716

Please sign in to comment.