Refactor documentation and examples for Display, Frame, Program, SideNav, TabControl, and Tree elements
This commit is contained in:
@@ -6,13 +6,7 @@ local colorHex = require("libraries/colorHex")
|
|||||||
---@configDescription The Display is a special element which uses the CC Window API which you can use.
|
---@configDescription The Display is a special element which uses the CC Window API which you can use.
|
||||||
---@configDefault false
|
---@configDefault false
|
||||||
|
|
||||||
--- A specialized element that provides direct access to ComputerCraft's Window API.
|
--- A specialized element that provides direct access to ComputerCraft's Window API. It acts as a canvas where you can use standard CC terminal operations.
|
||||||
--- It acts as a canvas where you can use standard CC terminal operations, making it ideal for:
|
|
||||||
--- - Integration with existing CC programs and APIs
|
|
||||||
--- - Custom drawing operations
|
|
||||||
--- - Terminal emulation
|
|
||||||
--- - Complex text manipulation
|
|
||||||
--- The Display maintains its own terminal buffer and can be manipulated using familiar CC terminal methods.
|
|
||||||
--- @usage [[
|
--- @usage [[
|
||||||
--- -- Create a display for a custom terminal
|
--- -- Create a display for a custom terminal
|
||||||
--- local display = main:addDisplay()
|
--- local display = main:addDisplay()
|
||||||
|
|||||||
@@ -117,7 +117,7 @@ end
|
|||||||
--- @return boolean handled Whether the event was handled
|
--- @return boolean handled Whether the event was handled
|
||||||
--- @protected
|
--- @protected
|
||||||
function Frame:mouse_drag(button, x, y)
|
function Frame:mouse_drag(button, x, y)
|
||||||
if self:hasState("clicked") and self.dragging then
|
if self.dragging then
|
||||||
local newX = x - self.dragStartX
|
local newX = x - self.dragStartX
|
||||||
local newY = y - self.dragStartY
|
local newY = y - self.dragStartY
|
||||||
|
|
||||||
@@ -125,10 +125,7 @@ function Frame:mouse_drag(button, x, y)
|
|||||||
self.set("y", newY)
|
self.set("y", newY)
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
if not self.dragging then
|
|
||||||
return Container.mouse_drag(self, button, x, y)
|
return Container.mouse_drag(self, button, x, y)
|
||||||
end
|
|
||||||
return false
|
|
||||||
end
|
end
|
||||||
|
|
||||||
--- @shortDescription Calculates the total height of all children elements
|
--- @shortDescription Calculates the total height of all children elements
|
||||||
|
|||||||
@@ -6,6 +6,60 @@ local errorManager = require("errorManager")
|
|||||||
|
|
||||||
--- This is the program class. It provides a program that runs in a window.
|
--- This is the program class. It provides a program that runs in a window.
|
||||||
---@class Program : VisualElement
|
---@class Program : VisualElement
|
||||||
|
---@run [[
|
||||||
|
--- local basalt = require("basalt")
|
||||||
|
---
|
||||||
|
--- local main = basalt.getMainFrame()
|
||||||
|
---
|
||||||
|
--- local execPath = "rom/programs/fun/worm.lua"
|
||||||
|
---
|
||||||
|
--- local btn = main:addButton({
|
||||||
|
--- x = 5,
|
||||||
|
--- y = 2,
|
||||||
|
--- width = 20,
|
||||||
|
--- height = 3,
|
||||||
|
--- text = "Run Worm",
|
||||||
|
--- }):onClick(function()
|
||||||
|
--- local frame = main:addFrame({
|
||||||
|
--- x = 2,
|
||||||
|
--- y = 2,
|
||||||
|
--- width = 28,
|
||||||
|
--- height = 10,
|
||||||
|
--- title = "Worm Program",
|
||||||
|
--- draggable = true,
|
||||||
|
--- })
|
||||||
|
--- :setDraggingMap({{x=1, y=1, width=27, height=1}})
|
||||||
|
--- :onFocus(function(self)
|
||||||
|
--- self:prioritize()
|
||||||
|
--- end)
|
||||||
|
--- local program = frame:addProgram({
|
||||||
|
--- x = 1,
|
||||||
|
--- y = 2,
|
||||||
|
--- width = 28,
|
||||||
|
--- height = 9,
|
||||||
|
--- })
|
||||||
|
--- program:execute(execPath)
|
||||||
|
--- frame:addLabel({
|
||||||
|
--- x = 2,
|
||||||
|
--- y = 1,
|
||||||
|
--- text = "Worm",
|
||||||
|
--- foreground = colors.lightBlue
|
||||||
|
--- })
|
||||||
|
--- frame:addButton({
|
||||||
|
--- x = frame.get("width"),
|
||||||
|
--- y = 1,
|
||||||
|
--- width = 1,
|
||||||
|
--- height = 1,
|
||||||
|
--- text = "X",
|
||||||
|
--- background = colors.red,
|
||||||
|
--- foreground = colors.white
|
||||||
|
--- }):onClick(function()
|
||||||
|
--- frame:destroy()
|
||||||
|
--- end)
|
||||||
|
--- end)
|
||||||
|
---
|
||||||
|
--- basalt.run()
|
||||||
|
--- ]]
|
||||||
local Program = setmetatable({}, VisualElement)
|
local Program = setmetatable({}, VisualElement)
|
||||||
Program.__index = Program
|
Program.__index = Program
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,100 @@ local tHex = require("libraries/colorHex")
|
|||||||
---@configDescription A SideNav element that provides sidebar navigation with multiple content areas.
|
---@configDescription A SideNav element that provides sidebar navigation with multiple content areas.
|
||||||
|
|
||||||
--- The SideNav is a container that provides sidebar navigation functionality
|
--- The SideNav is a container that provides sidebar navigation functionality
|
||||||
|
--- @run [[
|
||||||
|
--- local basalt = require("basalt")
|
||||||
|
--- local main = basalt.getMainFrame()
|
||||||
|
---
|
||||||
|
--- -- Create a simple SideNav
|
||||||
|
--- local sideNav = main:addSideNav({
|
||||||
|
--- x = 1,
|
||||||
|
--- y = 1,
|
||||||
|
--- sidebarWidth = 12,
|
||||||
|
--- width = 48
|
||||||
|
--- })
|
||||||
|
---
|
||||||
|
--- -- Tab 1: Home
|
||||||
|
--- local homeTab = sideNav:newTab("Home")
|
||||||
|
---
|
||||||
|
--- homeTab:addLabel({
|
||||||
|
--- x = 2,
|
||||||
|
--- y = 2,
|
||||||
|
--- text = "Welcome!",
|
||||||
|
--- foreground = colors.yellow
|
||||||
|
--- })
|
||||||
|
---
|
||||||
|
--- homeTab:addLabel({
|
||||||
|
--- x = 2,
|
||||||
|
--- y = 4,
|
||||||
|
--- text = "This is a simple",
|
||||||
|
--- foreground = colors.white
|
||||||
|
--- })
|
||||||
|
---
|
||||||
|
--- homeTab:addLabel({
|
||||||
|
--- x = 2,
|
||||||
|
--- y = 5,
|
||||||
|
--- text = "SideNav example.",
|
||||||
|
--- foreground = colors.white
|
||||||
|
--- })
|
||||||
|
---
|
||||||
|
--- -- Tab 2: Counter
|
||||||
|
--- local counterTab = sideNav:newTab("Counter")
|
||||||
|
---
|
||||||
|
--- local counterLabel = counterTab:addLabel({
|
||||||
|
--- x = 2,
|
||||||
|
--- y = 2,
|
||||||
|
--- text = "Count: 0",
|
||||||
|
--- foreground = colors.lime
|
||||||
|
--- })
|
||||||
|
---
|
||||||
|
--- local count = 0
|
||||||
|
--- counterTab:addButton({
|
||||||
|
--- x = 2,
|
||||||
|
--- y = 4,
|
||||||
|
--- width = 12,
|
||||||
|
--- height = 3,
|
||||||
|
--- text = "Click Me",
|
||||||
|
--- background = colors.blue
|
||||||
|
--- })
|
||||||
|
--- :setBackgroundState("clicked", colors.lightBlue)
|
||||||
|
--- :onClick(function()
|
||||||
|
--- count = count + 1
|
||||||
|
--- counterLabel:setText("Count: " .. count)
|
||||||
|
--- end)
|
||||||
|
---
|
||||||
|
--- -- Tab 3: Info
|
||||||
|
--- local infoTab = sideNav:newTab("Info")
|
||||||
|
---
|
||||||
|
--- infoTab:addLabel({
|
||||||
|
--- x = 2,
|
||||||
|
--- y = 2,
|
||||||
|
--- text = "SideNav Features:",
|
||||||
|
--- foreground = colors.orange
|
||||||
|
--- })
|
||||||
|
---
|
||||||
|
--- infoTab:addLabel({
|
||||||
|
--- x = 2,
|
||||||
|
--- y = 4,
|
||||||
|
--- text = "- Multiple tabs",
|
||||||
|
--- foreground = colors.gray
|
||||||
|
--- })
|
||||||
|
---
|
||||||
|
--- infoTab:addLabel({
|
||||||
|
--- x = 2,
|
||||||
|
--- y = 5,
|
||||||
|
--- text = "- Easy navigation",
|
||||||
|
--- foreground = colors.gray
|
||||||
|
--- })
|
||||||
|
---
|
||||||
|
--- infoTab:addLabel({
|
||||||
|
--- x = 2,
|
||||||
|
--- y = 6,
|
||||||
|
--- text = "- Content per tab",
|
||||||
|
--- foreground = colors.gray
|
||||||
|
--- })
|
||||||
|
---
|
||||||
|
--- basalt.run()
|
||||||
|
--- ]]
|
||||||
---@class SideNav : Container
|
---@class SideNav : Container
|
||||||
local SideNav = setmetatable({}, Container)
|
local SideNav = setmetatable({}, Container)
|
||||||
SideNav.__index = SideNav
|
SideNav.__index = SideNav
|
||||||
|
|||||||
@@ -6,6 +6,101 @@ local log = require("log")
|
|||||||
---@configDescription A TabControl element that provides tabbed interface with multiple content areas.
|
---@configDescription A TabControl element that provides tabbed interface with multiple content areas.
|
||||||
|
|
||||||
--- The TabControl is a container that provides tabbed interface functionality
|
--- The TabControl is a container that provides tabbed interface functionality
|
||||||
|
--- @run [[
|
||||||
|
--- local basalt = require("basalt")
|
||||||
|
|
||||||
|
--- local main = basalt.getMainFrame()
|
||||||
|
---
|
||||||
|
--- -- Create a simple TabControl
|
||||||
|
--- local tabControl = main:addTabControl({
|
||||||
|
--- x = 2,
|
||||||
|
--- y = 2,
|
||||||
|
--- width = 46,
|
||||||
|
--- height = 15,
|
||||||
|
--- })
|
||||||
|
---
|
||||||
|
--- -- Tab 1: Home
|
||||||
|
--- local homeTab = tabControl:newTab("Home")
|
||||||
|
---
|
||||||
|
--- homeTab:addLabel({
|
||||||
|
--- x = 2,
|
||||||
|
--- y = 2,
|
||||||
|
--- text = "Welcome!",
|
||||||
|
--- foreground = colors.yellow
|
||||||
|
--- })
|
||||||
|
---
|
||||||
|
--- homeTab:addLabel({
|
||||||
|
--- x = 2,
|
||||||
|
--- y = 4,
|
||||||
|
--- text = "This is a TabControl",
|
||||||
|
--- foreground = colors.white
|
||||||
|
--- })
|
||||||
|
---
|
||||||
|
--- homeTab:addLabel({
|
||||||
|
--- x = 2,
|
||||||
|
--- y = 5,
|
||||||
|
--- text = "example with tabs.",
|
||||||
|
--- foreground = colors.white
|
||||||
|
--- })
|
||||||
|
---
|
||||||
|
--- -- Tab 2: Counter
|
||||||
|
--- local counterTab = tabControl:newTab("Counter")
|
||||||
|
---
|
||||||
|
--- local counterLabel = counterTab:addLabel({
|
||||||
|
--- x = 2,
|
||||||
|
--- y = 2,
|
||||||
|
--- text = "Count: 0",
|
||||||
|
--- foreground = colors.lime
|
||||||
|
--- })
|
||||||
|
---
|
||||||
|
--- local count = 0
|
||||||
|
--- counterTab:addButton({
|
||||||
|
--- x = 2,
|
||||||
|
--- y = 4,
|
||||||
|
--- width = 12,
|
||||||
|
--- height = 3,
|
||||||
|
--- text = "Click Me",
|
||||||
|
--- background = colors.blue
|
||||||
|
--- })
|
||||||
|
--- :setBackgroundState("clicked", colors.lightBlue)
|
||||||
|
--- :onClick(function()
|
||||||
|
--- count = count + 1
|
||||||
|
--- counterLabel:setText("Count: " .. count)
|
||||||
|
--- end)
|
||||||
|
---
|
||||||
|
--- -- Tab 3: Info
|
||||||
|
--- local infoTab = tabControl:newTab("Info")
|
||||||
|
---
|
||||||
|
--- infoTab:addLabel({
|
||||||
|
--- x = 2,
|
||||||
|
--- y = 2,
|
||||||
|
--- text = "TabControl Features:",
|
||||||
|
--- foreground = colors.orange
|
||||||
|
--- })
|
||||||
|
---
|
||||||
|
--- infoTab:addLabel({
|
||||||
|
--- x = 2,
|
||||||
|
--- y = 4,
|
||||||
|
--- text = "- Horizontal tabs",
|
||||||
|
--- foreground = colors.gray
|
||||||
|
--- })
|
||||||
|
---
|
||||||
|
--- infoTab:addLabel({
|
||||||
|
--- x = 2,
|
||||||
|
--- y = 5,
|
||||||
|
--- text = "- Easy navigation",
|
||||||
|
--- foreground = colors.gray
|
||||||
|
--- })
|
||||||
|
---
|
||||||
|
--- infoTab:addLabel({
|
||||||
|
--- x = 2,
|
||||||
|
--- y = 6,
|
||||||
|
--- text = "- Content per tab",
|
||||||
|
--- foreground = colors.gray
|
||||||
|
--- })
|
||||||
|
---
|
||||||
|
--- basalt.run()
|
||||||
|
--- ]]
|
||||||
---@class TabControl : Container
|
---@class TabControl : Container
|
||||||
local TabControl = setmetatable({}, Container)
|
local TabControl = setmetatable({}, Container)
|
||||||
TabControl.__index = TabControl
|
TabControl.__index = TabControl
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ end
|
|||||||
|
|
||||||
--- This is the tree class. It provides a hierarchical view of nodes that can be expanded and collapsed, with support for selection and scrolling.
|
--- 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 [[
|
--- @run [[
|
||||||
--- local basaltg = require("basalt")
|
--- local basalt = require("basalt")
|
||||||
--- local main = basalt.getMainFrame()
|
--- local main = basalt.getMainFrame()
|
||||||
---
|
---
|
||||||
--- local fileTree = main:addTree()
|
--- local fileTree = main:addTree()
|
||||||
|
|||||||
Reference in New Issue
Block a user