2
0
ryoii 6 жил өмнө
parent
commit
62e71ef3a5

+ 10 - 0
mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/controller/MiraiGraphicalUIController.kt

@@ -5,6 +5,7 @@ import javafx.collections.ObservableList
 import javafx.stage.Modality
 import javafx.stage.StageStyle
 import kotlinx.coroutines.delay
+import kotlinx.coroutines.isActive
 import net.mamoe.mirai.Bot
 import net.mamoe.mirai.console.command.CommandManager
 import net.mamoe.mirai.console.command.CommandManager.runCommand
@@ -42,6 +43,15 @@ class MiraiGraphicalUIController : Controller(), MiraiConsoleUI {
         CommandManager.runCommand(ConsoleCommandSender, "/login $qq $psd")
     }
 
+    fun logout(qq: Long) {
+        cache.remove(qq)?.apply {
+            botList.remove(this)
+            if (botProperty.value != null && bot.isActive) {
+                bot.close()
+            }
+        }
+    }
+
     fun sendCommand(command: String) = runCommand(ConsoleCommandSender, command)
 
     override fun pushLog(identity: Long, message: String) = Platform.runLater {

+ 14 - 2
mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/stylesheet/PrimaryStyleSheet.kt

@@ -69,9 +69,21 @@ class PrimaryStyleSheet : BaseStyleSheet() {
                         backgroundColor += c(100, 100, 100, 0.4)
                         backgroundRadius += box(5.px)
 
-                        textFill = c(fontColor)
-                        fontWeight = FontWeight.BOLD
+                        label {
+                            textFill = c(fontColor)
+                            fontWeight = FontWeight.BOLD
+                        }
 
+                        button {
+                            opacity = 0.0
+                            backgroundRadius += box(10.px)
+                            backgroundColor += c(fontColor, 0.1)
+                            cursor = Cursor.HAND
+
+                            and(hover) {
+                                opacity = 1.0
+                            }
+                        }
                     }
                 }
             }

+ 15 - 0
mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/util/SVG.kt

@@ -0,0 +1,15 @@
+package net.mamoe.mirai.console.graphical.util
+
+import com.jfoenix.svg.SVGGlyph
+import javafx.scene.paint.Color
+
+class SVG {
+    companion object {
+        var close = SVGGlyph(
+            0,
+            "CLOSE",
+            "M810 274l-238 238 238 238-60 60-238-238-238 238-60-60 238-238-238-238 60-60 238 238 238-238z",
+            Color.WHITE
+        ).apply { setSize(8.0, 8.0) }
+    }
+}

+ 25 - 3
mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/view/PrimaryView.kt

@@ -5,18 +5,21 @@ import com.jfoenix.controls.JFXListCell
 import javafx.collections.ObservableList
 import javafx.geometry.Insets
 import javafx.geometry.Pos
+import javafx.scene.control.Alert
+import javafx.scene.control.ButtonType
 import javafx.scene.control.Tab
 import javafx.scene.control.TabPane
 import javafx.scene.image.Image
 import javafx.scene.input.KeyCode
+import javafx.scene.layout.Priority
 import javafx.stage.FileChooser
 import kotlinx.coroutines.runBlocking
 import net.mamoe.mirai.console.graphical.controller.MiraiGraphicalUIController
 import net.mamoe.mirai.console.graphical.model.BotModel
+import net.mamoe.mirai.console.graphical.util.*
 import net.mamoe.mirai.console.graphical.util.jfxButton
 import net.mamoe.mirai.console.graphical.util.jfxListView
 import net.mamoe.mirai.console.graphical.util.jfxTabPane
-import net.mamoe.mirai.console.graphical.util.myButtonBar
 import tornadofx.*
 
 class PrimaryView : View() {
@@ -72,8 +75,27 @@ class PrimaryView : View() {
                         override fun updateItem(item: BotModel?, empty: Boolean) {
                             super.updateItem(item, empty)
                             if (item != null && !empty) {
-                                graphic = null
-                                text = item.uin.toString()
+                                graphic = hbox {
+
+                                    alignment = Pos.CENTER_LEFT
+
+                                    label(item.uin.toString())
+                                    pane {
+                                        hgrow = Priority.ALWAYS
+                                    }
+                                    jfxButton(graphic = SVG.close) {
+                                        buttonType = JFXButton.ButtonType.FLAT
+                                        tooltip("退出登录")
+                                    }.action {
+                                        alert(Alert.AlertType.CONFIRMATION, "${item.uin}将会退出登录,是否确认") {
+                                            if (it == ButtonType.OK) {
+                                                tab?.close()
+                                                controller.logout(item.uin)
+                                            }
+                                        }
+                                    }
+                                }
+                                text = ""
                             } else {
                                 graphic = null
                                 text = ""