Commit cf6408cb authored by ryoii's avatar ryoii

console graphical almost done

parent 71b1fb34
package net.mamoe.mirai.console.graphical
import net.mamoe.mirai.console.MiraiConsole
import net.mamoe.mirai.console.graphical.controller.MiraiGraphicalUIController
import net.mamoe.mirai.console.graphical.view.PrimaryView
import tornadofx.App
import tornadofx.find
import tornadofx.launch
fun main(args: Array<String>) {
launch<MainApp>(args)
launch<MiraiGraphicalUI>(args)
}
class MainApp: App(PrimaryView::class) {
class MiraiGraphicalUI: App(PrimaryView::class) {
override fun init() {
super.init()
MiraiConsole.start(find<MiraiGraphicalUIController>())
}
override fun stop() {
super.stop()
MiraiConsole.stop()
}
}
\ No newline at end of file
package net.mamoe.mirai.console.graphical.controller
import net.mamoe.mirai.Bot
import net.mamoe.mirai.console.MiraiConsoleUI
import tornadofx.Controller
class MiraiController : Controller(), MiraiConsoleUI {
override fun pushLog(identity: Long, message: String) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun prePushBot(identity: Long) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun pushBot(bot: Bot) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun pushVersion(consoleVersion: String, consoleBuild: String, coreVersion: String) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override suspend fun requestInput(question: String): String {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun pushBotAdminStatus(identity: Long, admins: List<Long>) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
}
\ No newline at end of file
package net.mamoe.mirai.console.graphical.controller
import javafx.application.Platform
import javafx.stage.Modality
import net.mamoe.mirai.Bot
import net.mamoe.mirai.console.MiraiConsole
import net.mamoe.mirai.console.MiraiConsoleUI
import net.mamoe.mirai.console.graphical.model.BotModel
import net.mamoe.mirai.console.graphical.model.ConsoleInfo
import net.mamoe.mirai.console.graphical.model.VerificationCodeModel
import net.mamoe.mirai.console.graphical.view.VerificationCodeFragment
import tornadofx.Controller
import tornadofx.Scope
import tornadofx.find
import tornadofx.observableListOf
class MiraiGraphicalUIController : Controller(), MiraiConsoleUI {
private val cache = mutableMapOf<Long, BotModel>()
val mainLog = observableListOf<String>()
val botList = observableListOf<BotModel>()
val consoleInfo = ConsoleInfo()
fun login(qq: String, psd: String) {
MiraiConsole.CommandListener.commandChannel.offer("/login $qq $psd")
}
override fun pushLog(identity: Long, message: String) = Platform.runLater {
when (identity) {
0L -> mainLog.add(message)
else -> cache[identity]?.logHistory?.add(message)
}
}
override fun prePushBot(identity: Long) = Platform.runLater {
BotModel(identity).also {
cache[identity] = it
botList.add(it)
}
}
override fun pushBot(bot: Bot) = Platform.runLater {
cache[bot.uin]?.bot = bot
}
override fun pushVersion(consoleVersion: String, consoleBuild: String, coreVersion: String) {
Platform.runLater {
consoleInfo.consoleVersion = consoleVersion
consoleInfo.consoleBuild = consoleBuild
consoleInfo.coreVersion = coreVersion
}
}
override suspend fun requestInput(question: String): String {
val model = VerificationCodeModel()
find<VerificationCodeFragment>(Scope(model)).openModal(
modality = Modality.APPLICATION_MODAL,
resizable = false
)
return model.code.value
}
override fun pushBotAdminStatus(identity: Long, admins: List<Long>) = Platform.runLater {
cache[identity]?.admins?.setAll(admins)
}
}
\ No newline at end of file
package net.mamoe.mirai.console.graphical.model
import javafx.beans.property.SimpleObjectProperty
import net.mamoe.mirai.Bot
import tornadofx.*
class BotModel(val uin: Long) {
val botProperty = SimpleObjectProperty<Bot>(null)
var bot: Bot by botProperty
val logHistory = observableListOf<String>()
val admins = observableListOf<Long>()
}
package net.mamoe.mirai.console.graphical.model
import javafx.beans.property.SimpleStringProperty
import tornadofx.setValue
import tornadofx.getValue
class ConsoleInfo {
val consoleVersionProperty = SimpleStringProperty()
var consoleVersion by consoleVersionProperty
val consoleBuildProperty = SimpleStringProperty()
var consoleBuild by consoleBuildProperty
val coreVersionProperty = SimpleStringProperty()
var coreVersion by coreVersionProperty
}
\ No newline at end of file
package net.mamoe.mirai.console.graphical.model
import javafx.beans.property.SimpleStringProperty
import tornadofx.ItemViewModel
import tornadofx.getValue
import tornadofx.setValue
class VerificationCode {
val codeProperty = SimpleStringProperty("")
var code: String by codeProperty
}
class VerificationCodeModel(code: VerificationCode) : ItemViewModel<VerificationCode>(code) {
constructor(): this(VerificationCode())
val code = bind(VerificationCode::codeProperty)
}
\ No newline at end of file
package net.mamoe.mirai.console.graphical.view
import javafx.beans.property.SimpleStringProperty
import net.mamoe.mirai.console.graphical.controller.MiraiGraphicalUIController
import tornadofx.*
class LoginFragment : Fragment() {
private val controller = find<MiraiGraphicalUIController>(FX.defaultScope)
private val qq = SimpleStringProperty()
private val psd = SimpleStringProperty()
override val root = form {
fieldset("登录") {
field("QQ") {
textfield(qq)
}
field("密码") {
passwordfield(psd)
}
button("登录").action {
controller.login(qq.value, psd.value)
close()
}
}
}
}
\ No newline at end of file
package net.mamoe.mirai.console.graphical.view
import tornadofx.View
import tornadofx.borderpane
import javafx.scene.control.TabPane
import javafx.stage.Modality
import net.mamoe.mirai.Bot
import net.mamoe.mirai.console.graphical.controller.MiraiGraphicalUIController
import tornadofx.*
class PrimaryView : View() {
private val controller = find<MiraiGraphicalUIController>()
override val root = borderpane {
top = menubar {
menu("机器人") {
item("登录").action {
find<LoginFragment>().openModal(
modality = Modality.APPLICATION_MODAL,
resizable = false
)
}
}
}
left = listview(controller.botList) {
fitToParentHeight()
cellFormat {
graphic = vbox {
label(it.uin.toString())
// label(stringBinding(it.botProperty) { if (value != null) value.nick else "登陆中" })
}
onDoubleClick {
(center as TabPane).tab(it.uin.toString()) {
listview(it.logHistory)
isClosable = true
select()
}
}
}
}
center = tabpane {
tab("Main") {
listview(controller.mainLog)
isClosable = false
}
}
}
}
\ No newline at end of file
package net.mamoe.mirai.console.graphical.view
import javafx.scene.Parent
import tornadofx.*
class VerificationCodeFragment : Fragment() {
override val root = vbox {
//TODO: 显示验证码
form {
fieldset {
field("验证码") {
textfield()
}
}
}
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment