diff options
| author | jussi | 2024-03-20 19:18:01 +0200 |
|---|---|---|
| committer | jussi | 2024-03-20 19:18:01 +0200 |
| commit | 842e0efe360417556ad0e757d91ef05449bfc8ee (patch) | |
| tree | d51e0734bf31082d3483f6c6a56eb1195372132a /examples/raygui_extensions/tree_item.lua | |
| parent | ae1d0b65f16b24f2e0db39cb8baef4af57b2a12f (diff) | |
| download | reilua-enhanced-842e0efe360417556ad0e757d91ef05449bfc8ee.tar.gz reilua-enhanced-842e0efe360417556ad0e757d91ef05449bfc8ee.tar.bz2 reilua-enhanced-842e0efe360417556ad0e757d91ef05449bfc8ee.zip | |
Raygui tree view.
Diffstat (limited to 'examples/raygui_extensions/tree_item.lua')
| -rw-r--r-- | examples/raygui_extensions/tree_item.lua | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/examples/raygui_extensions/tree_item.lua b/examples/raygui_extensions/tree_item.lua new file mode 100644 index 0000000..043e348 --- /dev/null +++ b/examples/raygui_extensions/tree_item.lua @@ -0,0 +1,96 @@ +local TreeItem = {} +TreeItem.__index = TreeItem + +function TreeItem:new( bounds, text, callbacks, styles, tooltip ) + local object = setmetatable( {}, self ) + object._gui = nil + + object.spacing = 4 -- Between controls. + + object.bounds = bounds:clone() + object.text = text + object.callbacks = callbacks -- toggle, open. + + object.controls = {} + + object.active = false + object.open = false -- Show controls. + object.visible = true + object.disabled = false + object.styles = styles + object.tooltip = tooltip + + object._depth = 0 + object._indentation = 0 + object._id = 0 -- Id in treeView. + object._parent = nil + object._childId = 0 -- Id in parent controls. + + return object +end + +function TreeItem:update() + return RL.CheckCollisionPointRec( RL.GetMousePosition(), self.bounds ) +end + +function TreeItem:setOpenIcon() + if self.open then + return RL.GuiIconText( 120, "" ) + else + return RL.GuiIconText( 119, "" ) + end +end + +function TreeItem:draw() + local buttonRect = Rect:new() + local hasContainer = 0 < #self.controls + local lineCol = RL.GetColor( RL.GuiGetStyle( RL.DEFAULT, RL.LINE_COLOR ) ) + + if hasContainer then + buttonRect:set( self.bounds.x, self.bounds.y, self.bounds.height, self.bounds.height ) + end + -- Draw indentation lines. + for i = 0, self._depth - 1 do + RL.DrawRectangle( { + self.bounds.x - i * self._indentation - self._indentation / 2, + self.bounds.y - self.spacing, + 1, + self.bounds.height + self.spacing * 2 + }, lineCol ) + end + + local toggleRect = Rect:new( + self.bounds.x + buttonRect.width, + self.bounds.y, + self.bounds.width - buttonRect.width, + self.bounds.height + ) + local oldActive = self.active + _, self.active = RL.GuiToggle( toggleRect, self.text, self.active ) + + if self.callbacks.toggle and oldActive ~= self.active then + self.callbacks.toggle( self ) + end + + if hasContainer then + local pressed = RL.GuiLabelButton( buttonRect, self:setOpenIcon() ) + + if self.callbacks.open and 0 < pressed then + self.open = not self.open + self.callbacks.open( self ) + end + end +end + +function TreeItem:setPosition( pos ) + self.bounds.x = pos.x + self.bounds.y = pos.y +end + +function TreeItem:register( gui ) + function gui:TreeItem( bounds, text, callbacks, styles, tooltip ) + return self:addControl( TreeItem:new( bounds, text, callbacks, styles, tooltip ) ) + end +end + +return TreeItem |
