View Javadoc
1   package io.github.magwas.inez.ui;
2   
3   import javafx.collections.FXCollections;
4   import javafx.collections.ObservableList;
5   import javafx.scene.control.TreeItem;
6   
7   import io.github.magwas.inez.element.BridiElement;
8   
9   public class BridiElementTreeItem extends TreeItem<BridiElement> {
10  
11  	private boolean isFirstTimeChildren = true;
12  	private boolean isFirstTimeLeaf = true;
13  	private boolean isLeaf;
14  
15  	public BridiElementTreeItem(BridiElement rootElement) {
16  		super(rootElement);
17  	}
18  
19  	@Override
20  	public ObservableList getChildren() {
21  		if (isFirstTimeChildren) {
22  			isFirstTimeChildren = false;
23  			// First call: load children dynamically
24  			super.getChildren().setAll(buildChildren(this));
25  		}
26  		return super.getChildren();
27  	}
28  
29  	@Override
30  	public boolean isLeaf() {
31  		if (isFirstTimeLeaf) {
32  			isFirstTimeLeaf = false;
33  			isLeaf = 0 == getValue().getChildren().count();
34  		}
35  		return isLeaf;
36  	}
37  
38  	private ObservableList buildChildren(BridiElementTreeItem treeItem) {
39  		ObservableList<BridiElementTreeItem> children = FXCollections.observableArrayList();
40  		treeItem.getValue().getChildren().forEach(x -> children.add(new BridiElementTreeItem(x)));
41  		return children;
42  	}
43  }