4.1 KiB
Tree
This is the tree class. It provides a hierarchical view of nodes that can be expanded and collapsed, with support for selection and scrolling. run [[ local basaltg = require("basalt") local main = basalt.getMainFrame()
local fileTree = main:addTree() :setPosition(2, 2) :setSize(15, 15) :setBackground(colors.black) :setForeground(colors.white) :setSelectedBackgroundColor(colors.blue) :setSelectedForegroundColor(colors.white) :setScrollBarColor(colors.lightGray) :setScrollBarBackgroundColor(colors.gray)
-- Build a file system-like tree structure local treeData = { { text = "Root", children = { { text = "Documents", children = { {text = "report.txt"}, {text = "notes.txt"}, {text = "todo.txt"} } }, { text = "Pictures", children = { {text = "vacation.png"}, {text = "family.jpg"}, { text = "Archive", children = { {text = "old_photo1.jpg"}, {text = "old_photo2.jpg"}, {text = "old_photo3.jpg"} } } } }, { text = "Music", children = { {text = "song1.mp3"}, {text = "song2.mp3"}, {text = "song3.mp3"}, {text = "song4.mp3"} } }, { text = "Videos", children = { {text = "movie1.mp4"}, {text = "movie2.mp4"} } }, { text = "Projects", children = { { text = "ProjectA", children = { {text = "src"}, {text = "tests"}, {text = "README.md"} } }, { text = "ProjectB", children = { {text = "main.lua"}, {text = "config.lua"} } } } } } } }
fileTree:setNodes(treeData) local textLabel = main:addLabel() :setPosition(2, 18) :setForeground(colors.yellow) :setText("Selected: None")
-- Handle node selection fileTree:onSelect(function(self, node) textLabel :setText("Selected: " .. node.text) :setPosition(2, 18) :setForeground(colors.yellow) end)
-- Info label main:addLabel() :setText("Click nodes to expand/collapse | Scroll to navigate") :setPosition(2, 1) :setForeground(colors.lightGray)
basalt.run() ]]
Extends: VisualElement
Properties
| Property | Type | Default | Description |
|---|---|---|---|
| nodes | table | {} | The tree structure containing node objects with {text, children} properties |
| expandedNodes | table | {} | Table of nodes that are currently expanded |
| offset | number | 0 | Current vertical scroll position |
| horizontalOffset | number | 0 | Current horizontal scroll position |
| selectedForegroundColor | color | white | foreground color of selected node |
| selectedBackgroundColor | color | lightBlue | background color of selected node |
| showScrollBar | boolean | true | Whether to show the scrollbar when nodes exceed height |
| scrollBarSymbol | string | " | " Symbol used for the scrollbar handle |
| scrollBarBackground | string | "\127" | Symbol used for the scrollbar background |
| scrollBarColor | color | lightGray | Color of the scrollbar handle |
| scrollBarBackgroundColor | color | gray | Background color of the scrollbar |
Functions
| Method | Returns | Description |
|---|---|---|
| Tree:expandNode | Tree | Expands a node to show its children |
| Tree:collapseNode | Tree | Collapses a node to hide its children |
| Tree:toggleNode | Tree | Toggles between expanded and collapsed state |
| Tree:onSelect | Tree | Registers a callback for when a node is selected |
| Tree:getNodeSize | number, number | Gets the size of the tree |
Tree:expandNode(node)
Expands a node
Parameters
nodetableThe node to expand
Returns
TreeselfThe Tree instance
Tree:collapseNode(node)
Collapses a node
Parameters
nodetableThe node to collapse
Returns
TreeselfThe Tree instance
Tree:toggleNode(node)
Toggles a node's expanded state
Parameters
nodetableThe node to toggle
Returns
TreeselfThe Tree instance
Tree:onSelect(callback)
Registers a callback for when a node is selected
Parameters
callbackfunctionThe callback function
Returns
TreeselfThe Tree instance
Tree:getNodeSize()
Gets the size of the tree
Returns
numberwidthThe width of the treenumberheightThe height of the tree