You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
199 lines
6.4 KiB
199 lines
6.4 KiB
package wow.doge.chatto.controller
|
|
|
|
import javafx.fxml.FXML
|
|
import javafx.scene.control.Label
|
|
import javafx.scene.control.Button
|
|
import javafx.scene.layout.FlowPane
|
|
import javafx.scene.control.TextArea
|
|
import javafx.scene.control.ListView
|
|
import javafx.scene.layout.HBox
|
|
import javafx.scene.layout.VBox
|
|
import scalafx.Includes._
|
|
import wow.doge.chatto.control.UserBox
|
|
import javafx.application.Platform
|
|
import javax.inject.Inject
|
|
import org.scalafx.extras._
|
|
import wow.doge.chatto.messagebuble.BubbledMDFXNode
|
|
import wow.doge.chatto.service.UserService
|
|
import scala.concurrent.ExecutionContext
|
|
import scala.concurrent.ExecutionContext.Implicits.global
|
|
import com.typesafe.scalalogging.LazyLogging
|
|
// import wow.doge.chatto.controller.LoginController.Person
|
|
import com.sfxcode.sapphire.core.value.FXBean
|
|
import wow.doge.chatto.AppDataHandler
|
|
import com.jfoenix.controls.JFXListView
|
|
import scala.async.Async.{async, await}
|
|
import javafx.scene.paint.Color
|
|
import scalafx.collections.ObservableBuffer
|
|
import javafx.beans.property.SimpleListProperty
|
|
import wow.doge.chatto.control.UserBox2
|
|
import javafx.beans.value.ChangeListener
|
|
import com.sfxcode.sapphire.core.value.KeyBindings
|
|
import com.sfxcode.sapphire.core.value.FXBeanAdapter
|
|
import scalafx.collections.ObservableMap
|
|
import com.sfxcode.sapphire.core.value.BeanConversions
|
|
import javafx.util.converter.DateStringConverter
|
|
|
|
class ChatController @Inject() (
|
|
userService: UserService,
|
|
appDataHandler: AppDataHandler
|
|
) extends AbstractViewController
|
|
with LazyLogging
|
|
with BeanConversions {
|
|
|
|
// @FXML private var label: Label = _
|
|
@FXML private var flowPane: FlowPane = _
|
|
@FXML private var submitButton: Button = _
|
|
@FXML private var logoutButton: Button = _
|
|
// @FXML private var chatTextArea: TextArea = _
|
|
@FXML private var chatInput: TextArea = _
|
|
@FXML private var usersVBox: VBox = _
|
|
@FXML var usersListView: JFXListView[UserBox2] = _
|
|
@FXML private var chatListView: JFXListView[HBox] = _
|
|
@FXML private var curUsr: Label = _
|
|
@FXML private var dataContent: Label = _
|
|
// applicationController.show
|
|
private val usersBuffer = ObservableBuffer[FXBean[User]]()
|
|
private val chatDataBuffer = ObservableMap[String, FXBean[User]]()
|
|
|
|
private lazy val curUserKeys = KeyBindings("curUser")
|
|
// bindings.add("person", "Person ${_self.name()} with age of ${_self.age()} is active: ${_self.isActive()}")
|
|
private lazy val curUserAdapter = FXBeanAdapter[User](this)
|
|
|
|
override def didGainVisibilityFirstTime(): Unit = {
|
|
super.didGainVisibilityFirstTime()
|
|
// val ub = new UserBox()
|
|
this.stage.resizable = true
|
|
// ub.messageLabel.text = "Hi there"
|
|
// ub.messageLabel.id =
|
|
// ub.userRadioButton.text = "User 1"
|
|
// usersVBox.children.clear()
|
|
// usersVBox.children += ub
|
|
// println("test")
|
|
// println(s"Result = ${func()}")
|
|
// offFX(println("hello from new thread"))
|
|
// chatTextArea.visible <== !chatInput.text.isEmpty
|
|
// chatTextArea.text <== chatInput.text
|
|
|
|
// for (r <- userService.func2()) yield (logger.info(s"${r.body}"))
|
|
|
|
// val person = Person(0, 10, "Billy")
|
|
// val bean = FXBean[Person](person)
|
|
// ub.messageLabel.text <== bean.getStringProperty("name")
|
|
// bean.getStringProperty("name") <== chatInput.text
|
|
|
|
// bean.getStringProperty("name")() = "Lester"
|
|
// println(bean.getValue("name"))
|
|
// println(bean.getStringProperty("name")())
|
|
// bean.
|
|
// bean.updateValue("name", "Lester")
|
|
// println(bean.bean)
|
|
|
|
// val curUserBean = FXBean[User](User("None"))
|
|
|
|
// logoutButton.onAction = (e) =>
|
|
|
|
// usersListView
|
|
// .getSelectionModel()
|
|
// .selectedItemProperty()
|
|
// .addListener((_, _, newValue) => {
|
|
// curUsr.text() = newValue.usernameLabel.text()
|
|
// })
|
|
curUserKeys.add("content", "${_self.data().content()}")
|
|
// curUserAdapter.addDateConverter()
|
|
curUserAdapter.addBindings(curUserKeys)
|
|
|
|
usersListView
|
|
.getSelectionModel()
|
|
.selectedItemProperty()
|
|
.addListener((_, _, newValue) => {
|
|
if (newValue != null) {
|
|
val dataBean =
|
|
FXBean(User(newValue.usernameLabel.text(), Data("test data")))
|
|
curUserAdapter
|
|
.set(dataBean)
|
|
}
|
|
})
|
|
|
|
// curUsr.text <== usersListView
|
|
// .getSelectionModel()
|
|
// .getSelectedItem()
|
|
// .username
|
|
// .text
|
|
|
|
}
|
|
|
|
override def didGainVisibility(): Unit = {
|
|
super.didGainVisibility()
|
|
chatInput.requestFocus()
|
|
|
|
async {
|
|
val willBeUsers = userService
|
|
.getUsers(appDataHandler.appData.credentials)
|
|
.map(_.body)
|
|
val willBeActiveUsers = userService
|
|
.getActiveUsers(appDataHandler.appData.credentials)
|
|
.map(_.body)
|
|
val maybeUsers = await(willBeUsers)
|
|
val maybeActiveUsers = await(willBeActiveUsers)
|
|
|
|
// maybeActiveUsers.foreach(println)
|
|
logger.debug(s"$maybeActiveUsers")
|
|
|
|
val maybeUsersBoxes = maybeUsers.map(users => {
|
|
// usersBuffer ++= users
|
|
users.map(user => {
|
|
// usersBuffer += FXBean(User(user))
|
|
// val ub = new UserBox()
|
|
// ub.messageLabel.text = "Hi there"
|
|
// ub.userRadioButton.text = user
|
|
// ub
|
|
// new Rectangle {
|
|
// fill <== when(hover) choose (Color.Red)
|
|
// }
|
|
// val hb = new HBox
|
|
new UserBox2(user) {
|
|
// this.children += new Label {
|
|
// textProperty() = user
|
|
// // textFillProperty <== when(this.hover) choose (Color.RED) otherwise (Color.BLUE)
|
|
// }
|
|
// fill <== when(this.hover) choose (Color.RED) otherwise (Color.BLUE)
|
|
}
|
|
})
|
|
})
|
|
onFX {
|
|
maybeUsersBoxes.map(userBoxes => {
|
|
usersListView.items() ++= userBoxes
|
|
// val x = new SimpleListProperty(ObservableBuffer(userBoxes))
|
|
// usersListView.items <== x
|
|
})
|
|
}
|
|
}
|
|
}
|
|
def func() = {
|
|
val x = offFXAndWait {
|
|
2 + 3
|
|
}
|
|
x
|
|
}
|
|
|
|
def actionLogout = {
|
|
offFXAndWait {
|
|
appDataHandler.clearCredentials()
|
|
println(appDataHandler.appData)
|
|
}
|
|
curUserAdapter.set(User.empty)
|
|
usersListView.items().clear()
|
|
chatListView.items().clear()
|
|
applicationController.logout()
|
|
println(appDataHandler.appData)
|
|
}
|
|
}
|
|
|
|
final case class Person(id: Int, age: Int, name: String)
|
|
final case class Data(content: String)
|
|
final case class User(curUser: String, data: Data)
|
|
object User {
|
|
def empty = User("", Data(""))
|
|
}
|
|
// final case class chatData()
|