Tobias
11/06/2019, 4:41 AMObservableMap
to populate a TreeView
and dynamically re-render when the underlying data changes. Any advice?Carlton Whitehead
11/06/2019, 5:31 PMtreeview(files) {
instead of treeview {
?Bogdan
11/06/2019, 5:36 PMBogdan
11/06/2019, 5:37 PMTobias
11/06/2019, 6:19 PMBogdan
11/06/2019, 6:22 PMBogdan
11/06/2019, 6:23 PMTobias
11/06/2019, 6:24 PMTobias
11/06/2019, 6:28 PMbindChildren()
function has a form that accepts an ObservableMap
and a converter of type (Map) -> Node
Tobias
11/06/2019, 6:29 PMBogdan
11/06/2019, 6:40 PMbindChildren(observableMap) { file -> TreeItem(file) }
?Tobias
11/06/2019, 6:45 PMObjectBinding<Map<File, <List<File!>>!>
not an ObservableMap<File, <List<File>>
. I though I should be able to use folders.value
to access the map, but I can'tTobias
11/06/2019, 6:49 PMTreeItem(file)
is not a Node
??Bogdan
11/06/2019, 6:55 PMbindChildren
- defined on EventTarget
, and knows nothing about treeview
Tobias
11/06/2019, 6:57 PMBogdan
11/06/2019, 6:57 PMTobias
11/06/2019, 6:59 PMif (file.isDirectory) ... else ...
)Bogdan
11/06/2019, 7:45 PMclass Test : View("My View") {
val rootFile = File("/home/funtik")
val files = observableListOf(rootFile)
override val root = vbox {
treeview(TreeItem(rootFile)) {
cellFormat { text = it.name }
populate {
when {
it.value.isFile -> null
it.value.isDirectory -> it.value.listFiles()?.toList()
else -> null
}
}
}
}
}
Tobias
11/06/2019, 7:49 PMTobias
11/06/2019, 7:51 PMjava.io.File
that I can store my grouping data in. I want to be able to synthetically group Files into "different directories" than the ones they exist in on the Filesystem.Tobias
11/06/2019, 7:51 PMBogdan
11/06/2019, 7:51 PMTobias
11/06/2019, 7:53 PMBogdan
11/06/2019, 7:53 PMBogdan
11/06/2019, 7:54 PMTobias
11/06/2019, 7:54 PMTobias
11/06/2019, 7:55 PMTobias
11/06/2019, 7:57 PMTobias
11/06/2019, 7:58 PMTobias
11/06/2019, 7:59 PMBogdan
11/06/2019, 8:24 PMBogdan
11/06/2019, 8:27 PMBogdan
11/06/2019, 8:30 PMclass Test2 : View("My View") {
val rootFile = File("/home/funtik")
val files = observableListOf(rootFile)
val directories = observableMapOf<File, ObservableList<File>>()
init {
files += File("/home/funtik/Data")
files += File("/home/funtik/Downloads")
}
fun grouping() {
files
.groupBy { File(it.parent) }
.forEach { (k, v) ->
println(v)
val list = directories.getOrPut(k) { observableListOf() }
list.clear()
list += v
}
}
override val root = vbox(10) {
val treeview = treeview(TreeItem(rootFile)) {
isShowRoot = false
cellFormat { text = it.name }
populate {
when {
it.value == rootFile -> it.value.listFiles()?.toList()
it.value.isFile -> null
it.value.isDirectory -> directories.getOrPut(it.value) { observableListOf() }
else -> null
}
}
}
}
}
Bogdan
11/06/2019, 8:41 PMclass Test3 : View("My View") {
val rootFile = File("/home/funtik")
val files = rootFile.listFiles()?.toList()?.toObservable() ?: observableListOf()
val directories = observableMapOf<File, ObservableList<File>>()
init {
// files += File("/home/funtik/Data")
// files += File("/home/funtik/Downloads")
}
override val root = vbox(10) {
val treeview = treeview(TreeItem(rootFile)) {
isShowRoot = false
cellFormat { text = it.name }
populate {
when {
it.value == rootFile -> files
it.value.isFile -> null
it.value.isDirectory -> directories.getOrPut(it.value) { observableListOf() }
else -> null
}
}
}
buttonbar {
button("g").action {
val file = treeview.selectedValue?.takeIf { it.isDirectory } ?: return@action
val files = file.listFiles() ?: return@action
directories.getOrPut(file) { observableListOf() }.let {
it.clear()
it += files
}
}
}
}
}
Bogdan
11/06/2019, 8:51 PMdirectories.getOrPut(file) { observableListOf() }.let {
it.clear()
it += files
}
Bogdan
11/06/2019, 8:55 PM