Skip to content

Instantly share code, notes, and snippets.

@dominiks
Last active March 8, 2017 14:21
Show Gist options
  • Save dominiks/efe2c9b886a6cdc6ff914cfdb951ea0f to your computer and use it in GitHub Desktop.
Save dominiks/efe2c9b886a6cdc6ff914cfdb951ea0f to your computer and use it in GitHub Desktop.
import javafx.beans.property.SimpleObjectProperty
import javafx.beans.property.SimpleStringProperty
import javafx.collections.FXCollections
import tornadofx.*
import java.time.LocalDate
class Project {
val nameProperty = SimpleStringProperty()
var name by nameProperty
val descriptionProperty = SimpleStringProperty()
val dateProperty = SimpleObjectProperty<LocalDate>()
}
class ProjectFragment(val project: Project): Fragment() {
override val root = borderpane {
top {
label(project.nameProperty)
}
center {
vbox(5.0) {
label(project.descriptionProperty)
label(project.dateProperty)
}
}
right {
button("X")
}
style {
backgroundColor += c("yellowgreen")
}
}
}
class ProjectFormFragment: Fragment() {
val result = Project()
override val root = borderpane {
center {
form {
fieldset("New Project") {
field("Name") {
textfield(result.nameProperty)
}
field("Description") {
textfield(result.descriptionProperty)
}
field("Due") {
datepicker(result.dateProperty)
}
}
}
}
bottom {
button("Create").setOnAction { close() }
}
}
}
class ProjectListView() : View() {
val projectList = FXCollections.observableArrayList<Project>()
override val root = borderpane {
left {
vbox(5.0).bindComponents(SortedList(projectList, comparator), ::ProjectFragment)
}
right {
vbox(5.0).bindComponents(projectList, ::ProjectFragment)
}
bottom {
button("New Project").setOnAction {
val fragment = ProjectFormFragment()
fragment.openModal(block = true)
projectList.add(fragment.result)
}
}
}
}
object comparator : Comparator<Project> {
override fun compare(a: Project?, b: Project?): Int {
return a?.name?.compareTo(b?.name?:"") ?: 0
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment