From 78ebe4c7cd8c3a75253081033bd26934722fcfd3 Mon Sep 17 00:00:00 2001 From: ryoii <ryoii@foxmail.com> Date: Tue, 18 Feb 2020 22:47:48 +0800 Subject: [PATCH 1/4] logo --- .../src/main/resources/logo.png | Bin 3974 -> 4752 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/mirai-console-graphical/src/main/resources/logo.png b/mirai-console-graphical/src/main/resources/logo.png index 7be6c687173594899ce8f3ef3a8ea47d763168b1..bded5f13787965fb184119546f61ba11c0a5f317 100644 GIT binary patch literal 4752 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 literal 3974 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 From f68df356659382370a7f6c2f8922aeb682d66e1c Mon Sep 17 00:00:00 2001 From: ryoii <ryoii@foxmail.com> Date: Tue, 18 Feb 2020 22:58:15 +0800 Subject: [PATCH 2/4] update md --- mirai-api-http/README_CH.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mirai-api-http/README_CH.md b/mirai-api-http/README_CH.md index d056170e4..895d1b2e3 100644 --- a/mirai-api-http/README_CH.md +++ b/mirai-api-http/README_CH.md @@ -12,7 +12,7 @@ fun main() { MiraiHttpAPIServer.start() - bot.network.awaitDisconnection() + bot.join() } ``` @@ -463,7 +463,7 @@ Content-Type:multipart/form-data { "type": "Image", "imageId": "{01E9451B-70ED-EAE3-B37C-101F1EEBF5B5}.png" //群图片格式 - "imageId": "/f8f1ab55-bf8e-4236-b55e-955848d7069f" //好友图片格式 + //"imageId": "/f8f1ab55-bf8e-4236-b55e-955848d7069f" //好友图片格式 } ``` From 83611ac09f001de829620b764d170aa9b7168856 Mon Sep 17 00:00:00 2001 From: ryoii <ryoii@foxmail.com> Date: Wed, 19 Feb 2020 02:07:18 +0800 Subject: [PATCH 3/4] f**k javafx --- .../mirai/console/graphical/MiraiGraphical.kt | 8 +- .../mirai/console/graphical/model/BotModel.kt | 6 ++ .../mirai/console/graphical/view/Decorator.kt | 9 ++ .../console/graphical/view/LoginFragment.kt | 38 +++++---- .../console/graphical/view/PrimaryView.kt | 84 +++++++------------ 5 files changed, 77 insertions(+), 68 deletions(-) create mode 100644 mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/view/Decorator.kt diff --git a/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/MiraiGraphical.kt b/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/MiraiGraphical.kt index 7e5633dee..b543a06ee 100644 --- a/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/MiraiGraphical.kt +++ b/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/MiraiGraphical.kt @@ -1,9 +1,15 @@ package net.mamoe.mirai.console.graphical +import com.jfoenix.controls.JFXDecorator +import javafx.scene.control.Button +import javafx.stage.Stage import net.mamoe.mirai.console.MiraiConsole import net.mamoe.mirai.console.graphical.controller.MiraiGraphicalUIController +import net.mamoe.mirai.console.graphical.view.Decorator import net.mamoe.mirai.console.graphical.view.PrimaryView import tornadofx.App +import tornadofx.FX.Companion.primaryStage +import tornadofx.UIComponent import tornadofx.find import tornadofx.launch @@ -11,7 +17,7 @@ fun main(args: Array<String>) { launch<MiraiGraphicalUI>(args) } -class MiraiGraphicalUI: App(PrimaryView::class) { +class MiraiGraphicalUI: App(Decorator::class) { override fun init() { super.init() diff --git a/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/model/BotModel.kt b/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/model/BotModel.kt index 8d15d6998..542f8b146 100644 --- a/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/model/BotModel.kt +++ b/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/model/BotModel.kt @@ -11,3 +11,9 @@ class BotModel(val uin: Long) { val logHistory = observableListOf<String>() val admins = observableListOf<Long>() } + +class BotViewModel(botModel: BotModel? = null) : ItemViewModel<BotModel>(botModel) { + val bot = bind(BotModel::botProperty) + val logHistory = bind(BotModel::logHistory) + val admins = bind(BotModel::admins) +} \ No newline at end of file diff --git a/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/view/Decorator.kt b/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/view/Decorator.kt new file mode 100644 index 000000000..9ecff5fda --- /dev/null +++ b/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/view/Decorator.kt @@ -0,0 +1,9 @@ +package net.mamoe.mirai.console.graphical.view + +import com.jfoenix.controls.JFXDecorator +import tornadofx.View + +class Decorator: View() { + + override val root = JFXDecorator(primaryStage, find<PrimaryView>().root) +} \ No newline at end of file diff --git a/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/view/LoginFragment.kt b/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/view/LoginFragment.kt index 437031ca4..387fcc7da 100644 --- a/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/view/LoginFragment.kt +++ b/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/view/LoginFragment.kt @@ -1,6 +1,9 @@ package net.mamoe.mirai.console.graphical.view +import com.jfoenix.controls.JFXAlert +import com.jfoenix.controls.JFXPopup import javafx.beans.property.SimpleStringProperty +import javafx.scene.control.Label import kotlinx.coroutines.runBlocking import net.mamoe.mirai.console.graphical.controller.MiraiGraphicalUIController import net.mamoe.mirai.console.graphical.util.jfxButton @@ -8,26 +11,31 @@ import net.mamoe.mirai.console.graphical.util.jfxPasswordfield import net.mamoe.mirai.console.graphical.util.jfxTextfield import tornadofx.* -class LoginFragment : Fragment() { +class LoginView : View() { - private val controller = find<MiraiGraphicalUIController>(FX.defaultScope) - private val qq = SimpleStringProperty("0") + private val controller = find<MiraiGraphicalUIController>() + private val qq = SimpleStringProperty("") private val psd = SimpleStringProperty("") - override val root = form { - fieldset("登录") { - field("QQ") { - jfxTextfield(qq) + override val root = pane { + form { + fieldset("登录") { + field("QQ") { + jfxTextfield(qq) + } + field("密码") { + jfxPasswordfield(psd) + } } - field("密码") { - jfxPasswordfield(psd) + jfxButton("登录").action { + runAsync { + runBlocking { + controller.login(qq.value, psd.value) + } + }.ui { + // show dialog + } } } - jfxButton("登录").action { - runBlocking { - controller.login(qq.value, psd.value) - } - close() - } } } \ No newline at end of file diff --git a/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/view/PrimaryView.kt b/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/view/PrimaryView.kt index 58036ac6e..1a81c3721 100644 --- a/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/view/PrimaryView.kt +++ b/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/view/PrimaryView.kt @@ -1,20 +1,15 @@ package net.mamoe.mirai.console.graphical.view -import com.jfoenix.controls.JFXListCell -import javafx.geometry.Insets -import javafx.geometry.Pos +import com.jfoenix.controls.* +import javafx.collections.ObservableList import javafx.scene.control.Tab import javafx.scene.control.TabPane import javafx.scene.image.Image -import javafx.scene.paint.Color -import javafx.scene.text.FontWeight import net.mamoe.mirai.console.graphical.controller.MiraiGraphicalUIController import net.mamoe.mirai.console.graphical.model.BotModel -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 tornadofx.* -import java.io.FileInputStream class PrimaryView : View() { @@ -35,20 +30,12 @@ class PrimaryView : View() { setCellFactory { object : JFXListCell<BotModel>() { - var tab: Tab? = null - init { onDoubleClick { - if (tab == null) { - (center as TabPane).tab(item.uin.toString()) { - listview(item.logHistory) - onDoubleClick { close() } - tab = this - } - } else { - (center as TabPane).tabs.add(tab) - } - tab?.select() + (center as TabPane).logTab( + text = item.uin.toString(), + logs = item.logHistory + ).select() } } @@ -65,44 +52,37 @@ class PrimaryView : View() { } } } - - hbox { - padding = Insets(10.0) - spacing = 10.0 - alignment = Pos.CENTER - - jfxButton("L").action { - find<LoginFragment>().openModal() - } - jfxButton("P") - jfxButton("S") - - - style { backgroundColor += c("00BCD4") } - children.style(true) { - backgroundColor += c("00BCD4") - fontSize = 15.px - fontWeight = FontWeight.BOLD - textFill = Color.WHITE - borderRadius += box(25.px) - backgroundRadius += box(25.px) - } - } } center = jfxTabPane { - tab("Main") { - listview(controller.mainLog) { - fitToParentSize() - cellFormat { - graphic = label(it) { - maxWidthProperty().bind(this@listview.widthProperty()) - isWrapText = true - } - } - } + tab("Login") { + this += find<LoginView>().root } + + tab("Plugin") + + tab("Settings") + + logTab("Main", controller.mainLog) } } } + +private fun TabPane.logTab( + text: String? = null, + logs: ObservableList<String>, + op: Tab.() -> Unit = {} +)= tab(text) { + listview(logs) { + + fitToParentSize() + cellFormat { + graphic = label(it) { + maxWidthProperty().bind(this@listview.widthProperty()) + isWrapText = true + } + } + } + also(op) +} \ No newline at end of file From ef679aba6391791bfb1ae365a6fed4ee7fec1be4 Mon Sep 17 00:00:00 2001 From: Him188 <Him188@mamoe.net> Date: Wed, 19 Feb 2020 09:08:33 +0800 Subject: [PATCH 4/4] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f9151ddc1..4e77e9bca 100644 --- a/README.md +++ b/README.md @@ -126,7 +126,7 @@ JVM 上启动需 80M 内存, 每多一个机器人实例需要 30M 内存. 您的 star 是对我们最大的鼓励(点击项目右上角) ## Wiki -在 [Wiki](https://github.com/mamoe/mirai/wiki/Home) 中查看各类帮助,**如 API 示例**(可能过时,待 QQ Android 协议完成后会重写)。 +在 [Wiki](https://github.com/mamoe/mirai/wiki/Home) 中查看各类帮助,**如 API 示例**。 ## Try @@ -187,4 +187,4 @@ bot.subscribeAlways<MemberPermissionChangedEvent> { ## Acknowledgement 特别感谢 [JetBrains](https://www.jetbrains.com/?from=mirai) 为开源项目提供免费的 [IntelliJ IDEA](https://www.jetbrains.com/idea/?from=mirai) 等 IDE 的授权 [<img src=".github/jetbrains-variant-3.png" width="200"/>](https://www.jetbrains.com/?from=mirai) - \ No newline at end of file +