blob: 56810a609f6d28eeff09b46712b8b2eaa6a1bdef [file] [log] [blame]
package org.eclipse.nebula.widgets.nattable.renderer.javafx.example
import java.util.HashSet
import javafx.application.Application
import javafx.geometry.Pos
import javafx.scene.Scene
import javafx.scene.control.Label
import javafx.scene.control.Tab
import javafx.scene.control.TabPane
import javafx.scene.control.TreeCell
import javafx.scene.control.TreeItem
import javafx.scene.control.TreeView
import javafx.scene.image.Image
import javafx.scene.image.ImageView
import javafx.scene.layout.BorderPane
import javafx.scene.layout.StackPane
import javafx.stage.Stage
import org.eclipse.nebula.widgets.nattable.core.example.index.NatExamplesIndex
import org.eclipse.nebula.widgets.nattable.core.example.index.node.CategoryNode
import org.eclipse.nebula.widgets.nattable.core.example.index.node.IndexNode
import org.eclipse.nebula.widgets.nattable.core.example.index.node.NatExampleNode
import org.eclipse.nebula.widgets.nattable.renderer.javafx.JavaFXNatTable
class JavaFXNatExamplesRunner extends Application {
def static void main(String[] args) {
launch(args)
}
//
val nodeImage = new Image(class.getResourceAsStream("opened_folder.png"))
val rootTreeItem = new TreeItem<IndexNode>(NatExamplesIndex::rootNode, new ImageView(nodeImage))
val tabPane = new TabPane
val exampleNodes = new HashSet<NatExampleNode>
override start(Stage primaryStage) throws Exception {
primaryStage.title = "NatTable -> JavaFX"
val grid = new BorderPane
// Nav tree
val indexNode = NatExamplesIndex::rootNode
indexNode.createTreeItem(rootTreeItem)
grid.left = new TreeView<IndexNode>(rootTreeItem) => [
showRoot = false
editable = true
cellFactory = [ treeView | new NavTreeCell(this) as TreeCell<IndexNode> ]
]
// Example pane
grid.center = tabPane
val scene = new Scene(grid, 1000, 600)
scene.stylesheets += "style.css"
primaryStage.scene = scene
primaryStage.show
// Stop
for (exampleNode : exampleNodes)
exampleNode.natExample.stop
}
def void createTreeItem(IndexNode indexNode, TreeItem<IndexNode> treeItem) {
for (childIndexNodeName : indexNode.childNodeNames) {
val childIndexNode = indexNode.getChildNode(childIndexNodeName)
val childTreeItem = switch (childIndexNode) {
NatExampleNode: new TreeItem<IndexNode>(childIndexNode)
CategoryNode: new TreeItem<IndexNode>(childIndexNode, new ImageView(nodeImage))
}
childIndexNode.createTreeItem(childTreeItem)
treeItem.children += childTreeItem
}
}
def void openExampleInTab(NatExampleNode node) {
exampleNodes += node
tabPane.tabs += new Tab => [
text = node.displayName
content = new BorderPane => [
// Create example control
center = new StackPane => [
val centerPane = it
children += new JavaFXNatTable(node.natExample.createLayer) => [
widthProperty.bind(centerPane.widthProperty)
heightProperty.bind(centerPane.heightProperty)
]
]
// Description
val description = node.natExample.description
if (description != null && description.length() > 0) {
bottom = new StackPane => [
children += new Label(" Description ") => [
styleClass += "bordered-titled-title"
StackPane::setAlignment(it, Pos::TOP_LEFT)
]
children += new StackPane => [
children += new Label(description) => [
styleClass += "bordered-titled-content"
]
]
styleClass += "bordered-titled-border"
]
}
]
onClosed = [
// Stop
node.natExample.stop
// Remove from map
exampleNodes.remove(node)
]
tabPane.selectionModel.select(it)
]
// Start
node.natExample.start
}
}