From 524de469542fba80c23348eb4ff7cffe0474c492 Mon Sep 17 00:00:00 2001 From: ryoii Date: Wed, 19 Feb 2020 23:37:27 +0800 Subject: [PATCH] play with ui any way --- .../styleSheet/LoginViewStyleSheet.kt | 47 ++++++++++++++++ .../console/graphical/util/JFoenixAdaptor.kt | 8 +-- .../console/graphical/view/LoginFragment.kt | 41 -------------- .../mirai/console/graphical/view/LoginView.kt | 50 ++++++++++++++++++ .../src/main/resources/character.png | Bin 0 -> 30438 bytes 5 files changed, 101 insertions(+), 45 deletions(-) create mode 100644 mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/styleSheet/LoginViewStyleSheet.kt delete mode 100644 mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/view/LoginFragment.kt create mode 100644 mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/view/LoginView.kt create mode 100644 mirai-console-graphical/src/main/resources/character.png diff --git a/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/styleSheet/LoginViewStyleSheet.kt b/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/styleSheet/LoginViewStyleSheet.kt new file mode 100644 index 000000000..6e0b1f69c --- /dev/null +++ b/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/styleSheet/LoginViewStyleSheet.kt @@ -0,0 +1,47 @@ +package net.mamoe.mirai.console.graphical.styleSheet + +import javafx.scene.Cursor +import javafx.scene.effect.BlurType +import javafx.scene.effect.DropShadow +import javafx.scene.paint.Color +import javafx.scene.text.FontWeight +import tornadofx.* + +class LoginViewStyleSheet : Stylesheet() { + + companion object { + val vBox by csselement("VBox") + } + + init { + + vBox { + maxWidth = 500.px + maxHeight = 500.px + + backgroundColor += c("39c5BB", 0.3) + backgroundRadius += box(15.px) + + padding = box(50.px, 100.px) + spacing = 25.px + + borderRadius += box(15.px) + effect = DropShadow(BlurType.THREE_PASS_BOX, Color.GRAY, 10.0, 0.0, 15.0, 15.0) + } + + textField { + prefHeight = 30.px + textFill = Color.BLACK + fontWeight = FontWeight.BOLD + } + + button { + backgroundColor += c("00BCD4", 0.8) + padding = box(10.px, 0.px) + prefWidth = 500.px + textFill = Color.WHITE + fontWeight = FontWeight.BOLD + cursor = Cursor.HAND + } + } +} \ No newline at end of file diff --git a/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/util/JFoenixAdaptor.kt b/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/util/JFoenixAdaptor.kt index 94663e510..5590d9c44 100644 --- a/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/util/JFoenixAdaptor.kt +++ b/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/util/JFoenixAdaptor.kt @@ -17,20 +17,20 @@ internal fun EventTarget.jfxButton(text: String = "", graphic: Node? = null, op: if (graphic != null) it.graphic = graphic } -fun EventTarget.jfxTextfield(value: String? = null, op: TextField.() -> Unit = {}) = JFXTextField().attachTo(this, op) { +fun EventTarget.jfxTextfield(value: String? = null, op: JFXTextField.() -> Unit = {}) = JFXTextField().attachTo(this, op) { if (value != null) it.text = value } -fun EventTarget.jfxTextfield(property: ObservableValue, op: TextField.() -> Unit = {}) = jfxTextfield().apply { +fun EventTarget.jfxTextfield(property: ObservableValue, op: JFXTextField.() -> Unit = {}) = jfxTextfield().apply { bind(property) op(this) } -fun EventTarget.jfxPasswordfield(value: String? = null, op: TextField.() -> Unit = {}) = JFXPasswordField().attachTo(this, op) { +fun EventTarget.jfxPasswordfield(value: String? = null, op: JFXPasswordField.() -> Unit = {}) = JFXPasswordField().attachTo(this, op) { if (value != null) it.text = value } -fun EventTarget.jfxPasswordfield(property: ObservableValue, op: TextField.() -> Unit = {}) = jfxPasswordfield().apply { +fun EventTarget.jfxPasswordfield(property: ObservableValue, op: JFXPasswordField.() -> Unit = {}) = jfxPasswordfield().apply { bind(property) op(this) } 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 deleted file mode 100644 index 387fcc7da..000000000 --- a/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/view/LoginFragment.kt +++ /dev/null @@ -1,41 +0,0 @@ -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 -import net.mamoe.mirai.console.graphical.util.jfxPasswordfield -import net.mamoe.mirai.console.graphical.util.jfxTextfield -import tornadofx.* - -class LoginView : View() { - - private val controller = find() - private val qq = SimpleStringProperty("") - private val psd = SimpleStringProperty("") - - override val root = pane { - form { - fieldset("登录") { - field("QQ") { - jfxTextfield(qq) - } - field("密码") { - jfxPasswordfield(psd) - } - } - jfxButton("登录").action { - runAsync { - runBlocking { - controller.login(qq.value, psd.value) - } - }.ui { - // show dialog - } - } - } - } -} \ No newline at end of file diff --git a/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/view/LoginView.kt b/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/view/LoginView.kt new file mode 100644 index 000000000..46b9d59dc --- /dev/null +++ b/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/view/LoginView.kt @@ -0,0 +1,50 @@ +package net.mamoe.mirai.console.graphical.view + +import javafx.beans.property.SimpleStringProperty +import javafx.geometry.Pos +import javafx.scene.image.Image +import kotlinx.coroutines.runBlocking +import net.mamoe.mirai.console.graphical.controller.MiraiGraphicalUIController +import net.mamoe.mirai.console.graphical.styleSheet.LoginViewStyleSheet +import net.mamoe.mirai.console.graphical.util.jfxButton +import net.mamoe.mirai.console.graphical.util.jfxPasswordfield +import net.mamoe.mirai.console.graphical.util.jfxTextfield +import tornadofx.* + +class LoginView : View("CNM") { + + private val controller = find() + private val qq = SimpleStringProperty("") + private val psd = SimpleStringProperty("") + + override val root = borderpane { + + addStylesheet(LoginViewStyleSheet::class) + + center = vbox { + + imageview(Image(LoginView::class.java.classLoader.getResourceAsStream("character.png"))) { + alignment = Pos.CENTER + } + + jfxTextfield(qq) { + promptText = "QQ" + isLabelFloat = true + } + + jfxPasswordfield(psd) { + promptText = "Password" + isLabelFloat = true + } + + jfxButton("Login").action { + runAsync { + runBlocking { controller.login(qq.value, psd.value) } + }.ui { + qq.value = "" + psd.value = "" + } + } + } + } +} \ No newline at end of file diff --git a/mirai-console-graphical/src/main/resources/character.png b/mirai-console-graphical/src/main/resources/character.png new file mode 100644 index 0000000000000000000000000000000000000000..b55153f1ec3c344df01a0cbde83fa12319d413a3 GIT binary patch literal 30438 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