Skip to content

Commit bde7101

Browse files
committed
added status bar widget with current user and switch command
1 parent bda5c17 commit bde7101

File tree

8 files changed

+115
-20
lines changed

8 files changed

+115
-20
lines changed

img.png

-18.3 KB
Binary file not shown.

src/main/kotlin/askfar/com/gitusermanager/action/GitUserManagerSwitchAction.kt

+6-2
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,13 @@ import javax.swing.JOptionPane
1212
class GitUserManagerSwitchAction : AnAction() {
1313

1414
private val logger = KotlinLogging.logger {}
15-
private val configManager: ConfigManager = ConfigManagerImpl()
15+
private val configManager: ConfigManager = ConfigManagerImpl.create()
1616

1717
override fun actionPerformed(e: AnActionEvent) {
18+
actionPerformed()
19+
}
20+
21+
fun actionPerformed() {
1822
logger.trace { "Handling the GitUserManagerSwitchAction" }
1923
val gitUsersManager = configManager.getUsersManager()
2024
val userNames = gitUsersManager.users.map { "${it.name} <${it.email}>" }.toTypedArray()
@@ -37,7 +41,7 @@ class GitUserManagerSwitchAction : AnAction() {
3741
Runtime.getRuntime().exec(String.format(GitScripts.CHANGE_USER_EMAIL.script, user.email)).waitFor()
3842
configManager.updateCurrentUser(user)
3943
}
40-
Messages.showMessageDialog("Switched to user:\n ${user.name} <${user.email}>", "Success", Messages.getInformationIcon())
44+
Messages.showMessageDialog("Switched to user:\n ${user.name} (${user.email})", "Success", Messages.getInformationIcon())
4145
}
4246
}
4347
}

src/main/kotlin/askfar/com/gitusermanager/manager/impl/ConfigManagerImpl.kt

+9-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class ConfigManagerImpl : ConfigManager {
1717
private val configFileName = ".git_users.json"
1818
private val gson: Gson = GsonBuilder().setPrettyPrinting().create()
1919
private val configFile = File(System.getProperty("user.home"), configFileName)
20-
private lateinit var currentUser: GitUser
20+
private var currentUser: GitUser
2121

2222
init {
2323
if (!configFile.exists()) {
@@ -30,6 +30,7 @@ class ConfigManagerImpl : ConfigManager {
3030
writeConfig(gitUsersManager)
3131
logger.info { "The configuration file \"${configFileName}\" is initialized by the current user." }
3232
} else {
33+
currentUser = getUsersManager().currentUser
3334
logger.debug { "Configuration file \"${configFileName}\" exist" }
3435
}
3536
}
@@ -53,6 +54,7 @@ class ConfigManagerImpl : ConfigManager {
5354
override fun updateCurrentUser(user: GitUser) {
5455
val gitUsersManager = getUsersManager()
5556
gitUsersManager.currentUser = user
57+
currentUser = user
5658
writeConfig(gitUsersManager)
5759
}
5860

@@ -63,4 +65,10 @@ class ConfigManagerImpl : ConfigManager {
6365
private fun writeConfig(gitUsersManager: GitUsersManager) {
6466
configFile.writeText(gson.toJson(gitUsersManager))
6567
}
68+
69+
companion object ConfigManagerFactory {
70+
private val configManager: ConfigManager = ConfigManagerImpl()
71+
72+
fun create(): ConfigManager = configManager
73+
}
6674
}

src/main/kotlin/askfar/com/gitusermanager/ui/GitUserManagerUI.kt

+4-4
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ import javax.swing.JTextField
1717
class GitUserManagerUI {
1818

1919
private val logger = KotlinLogging.logger {}
20-
private val configManager: ConfigManager = ConfigManagerImpl()
2120
private lateinit var nameField: JTextField
2221
private lateinit var emailField: JTextField
22+
private val configManager: ConfigManager = ConfigManagerImpl.create()
2323

2424
fun createPanel(): DialogPanel {
2525
return panel {
@@ -33,7 +33,7 @@ class GitUserManagerUI {
3333
row {
3434
button("") {
3535
addUserProcess(nameField.text, emailField.text)
36-
}.align(AlignX.LEFT)
36+
}.align(AlignX.CENTER)
3737

3838
button("") {
3939
deleteUserProcess()
@@ -75,10 +75,10 @@ class GitUserManagerUI {
7575
val selected = gitUsersManager.users.firstOrNull { user -> "${user.name} <${user.email}>" == it }
7676
selected?.let { user ->
7777
if (gitUsersManager.currentUser.email == user.email) {
78-
showMessageDialog("This user is current and cannot be deleted:\n ${user.name} <${user.email}>", "Failure", Messages.getErrorIcon())
78+
showMessageDialog("This user is current and cannot be deleted:\n ${user.name} (${user.email})", "Failure", Messages.getErrorIcon())
7979
} else {
8080
configManager.deleteUser(user)
81-
showMessageDialog("Deleted user:\n ${user.name} <${user.email}>", "Success", Messages.getInformationIcon())
81+
showMessageDialog("Deleted user:\n ${user.name} (${user.email})", "Success", Messages.getInformationIcon())
8282
}
8383
}
8484
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package askfar.com.gitusermanager.widget
2+
3+
import askfar.com.gitusermanager.action.GitUserManagerSwitchAction
4+
import askfar.com.gitusermanager.manager.ConfigManager
5+
import askfar.com.gitusermanager.manager.impl.ConfigManagerImpl
6+
import com.intellij.openapi.wm.StatusBar
7+
import com.intellij.openapi.wm.StatusBarWidget
8+
import com.intellij.util.Consumer
9+
import java.awt.event.MouseEvent
10+
11+
class GitUserManagerStatusBarWidget(private val statusBar: StatusBar) : StatusBarWidget, StatusBarWidget.TextPresentation, StatusBarWidget.WidgetPresentation {
12+
13+
private val configManager: ConfigManager = ConfigManagerImpl.create()
14+
private val gitUserManagerSwitchAction: GitUserManagerSwitchAction = GitUserManagerSwitchAction()
15+
16+
override fun ID(): String {
17+
return "GitUserManagerStatusBarWidget"
18+
}
19+
20+
override fun getAlignment(): Float {
21+
return 0f
22+
}
23+
24+
override fun getText(): String {
25+
return "<${configManager.getCurrentUser().email}>"
26+
}
27+
28+
override fun getTooltipText(): String {
29+
return "Git user: ${configManager.getCurrentUser().name} (${configManager.getCurrentUser().email})"
30+
}
31+
32+
override fun getClickConsumer(): Consumer<MouseEvent> {
33+
return Consumer { _ ->
34+
gitUserManagerSwitchAction.actionPerformed()
35+
statusBar.updateWidget(ID())
36+
}
37+
}
38+
39+
override fun getPresentation(): StatusBarWidget.WidgetPresentation {
40+
return this
41+
}
42+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package askfar.com.gitusermanager.widget
2+
3+
import com.intellij.openapi.project.Project
4+
import com.intellij.openapi.wm.StatusBar
5+
import com.intellij.openapi.wm.StatusBarWidget
6+
import com.intellij.openapi.wm.StatusBarWidgetFactory
7+
import com.intellij.openapi.wm.WindowManager
8+
9+
class GitUserManagerStatusBarWidgetFactory : StatusBarWidgetFactory {
10+
11+
override fun getId(): String {
12+
return "GitUserManagerStatusBarWidgetFactory"
13+
}
14+
15+
override fun getDisplayName(): String {
16+
return "Git User Manager"
17+
}
18+
19+
override fun createWidget(project: Project): StatusBarWidget {
20+
val statusBar: StatusBar = WindowManager.getInstance().getStatusBar(project)
21+
return GitUserManagerStatusBarWidget(statusBar)
22+
}
23+
}

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

+2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
<depends>com.intellij.modules.platform</depends>
1414
<extensions
1515
defaultExtensionNs="com.intellij">
16+
<statusBarWidgetFactory id="GitUserManagerStatusBarWidgetFactory"
17+
implementation="askfar.com.gitusermanager.widget.GitUserManagerStatusBarWidgetFactory"/>
1618
</extensions>
1719

1820
<actions>
+29-13
Loading

0 commit comments

Comments
 (0)