From eb89753ed94a8eb7a6599a1f7e94fa42d227d2e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Przemys=C5=82aw=20Pluta?= Date: Sun, 21 Feb 2021 20:17:49 +0100 Subject: [PATCH] [Editor] Enable graphic assets preview in Project Structure panel --- .../editor/main/view/ProjectStructureView.kt | 73 +++++++++++++------ 1 file changed, 50 insertions(+), 23 deletions(-) diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/main/view/ProjectStructureView.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/main/view/ProjectStructureView.kt index b3d6ae5a..bcb49c88 100644 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/main/view/ProjectStructureView.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/main/view/ProjectStructureView.kt @@ -1,20 +1,22 @@ package com.bartlomiejpluta.base.editor.main.view import com.bartlomiejpluta.base.editor.asset.model.Asset +import com.bartlomiejpluta.base.editor.asset.model.GraphicAsset import com.bartlomiejpluta.base.editor.image.asset.ImageAsset import com.bartlomiejpluta.base.editor.main.controller.MainController import com.bartlomiejpluta.base.editor.map.asset.GameMapAsset import com.bartlomiejpluta.base.editor.project.context.ProjectContext import com.bartlomiejpluta.base.editor.tileset.asset.TileSetAsset import javafx.beans.binding.Bindings +import javafx.beans.binding.Bindings.createObjectBinding +import javafx.beans.property.SimpleObjectProperty import javafx.beans.property.SimpleStringProperty import javafx.collections.ObservableList import javafx.scene.Node -import javafx.scene.control.ContextMenu -import javafx.scene.control.MenuItem -import javafx.scene.control.TreeCell -import javafx.scene.control.TreeItem +import javafx.scene.control.* import javafx.scene.control.cell.TextFieldTreeCell +import javafx.scene.image.Image +import javafx.scene.layout.Priority import javafx.util.StringConverter import org.kordamp.ikonli.javafx.FontIcon import tornadofx.* @@ -44,6 +46,17 @@ class ProjectStructureView : View() { ) ) + private var projectStructure: TreeView by singleAssign() + + private val selectedItem = SimpleObjectProperty() + + private val graphicAssetPreview = createObjectBinding({ + when (val item = selectedItem.value) { + is GraphicAsset -> item.graphicFile.inputStream().use { Image(it) } + else -> null + } + }, selectedItem).apply { addListener { _, _, v -> println(v) } } + init { projectContext.projectProperty.addListener { _, _, project -> project?.let { @@ -51,34 +64,48 @@ class ProjectStructureView : View() { Bindings.bindContent(structureMaps.items, it.maps) Bindings.bindContent(structureTileSets.items, it.tileSets) Bindings.bindContent(structureImages.items, it.images) - root.root.expandAll() - root.refresh() + projectStructure.root.expandAll() + projectStructure.refresh() } } } - override val root = treeview { - root = TreeItem(structureRoot) + override val root = vbox { + projectStructure = treeview { + vgrow = Priority.ALWAYS - populate { - when (val value = it.value) { - is StructureCategory -> value.items - else -> null - } - } + root = TreeItem(structureRoot) - setCellFactory { - StructureItemTreeCell(this@ProjectStructureView::renameAsset, this@ProjectStructureView::deleteAsset) - } - - setOnMouseClicked { event -> - if (event.clickCount == 2) { - when (val item = selectionModel?.selectedItem?.value) { - is GameMapAsset -> mainController.openMap(item.uid) + populate { + when (val value = it.value) { + is StructureCategory -> value.items + else -> null } } - event.consume() + setCellFactory { + StructureItemTreeCell(this@ProjectStructureView::renameAsset, this@ProjectStructureView::deleteAsset) + } + + setOnMouseClicked { event -> + if (event.clickCount == 2) { + when (val item = selectionModel?.selectedItem?.value) { + is GameMapAsset -> mainController.openMap(item.uid) + } + } + + event.consume() + } + + bindSelected(selectedItem) + } + + scrollpane { + vgrow = Priority.SOMETIMES + prefWidth = 200.0 + prefHeight = 200.0 + removeWhen(graphicAssetPreview.isNull) + imageview(graphicAssetPreview) } }