115 lines
3.4 KiB
Lua
115 lines
3.4 KiB
Lua
local utils = require("utils")
|
|
local wrapText = utils.wrapText
|
|
local writeWrappedText = utils.writeWrappedText
|
|
local tHex = require("tHex")
|
|
|
|
return function(name, basalt)
|
|
-- Label
|
|
local base = basalt.getObject("VisualObject")(name, basalt)
|
|
local objectType = "Label"
|
|
|
|
base:setZIndex(3)
|
|
base:setSize(5, 1)
|
|
base:setBackground(false)
|
|
|
|
local autoSize = true
|
|
local text, textAlign = "Label", "left"
|
|
|
|
local object = {
|
|
--- Returns the object type.
|
|
--- @return string
|
|
getType = function(self)
|
|
return objectType
|
|
end,
|
|
|
|
--- Returns the label's base object.
|
|
--- @return object
|
|
getBase = function(self)
|
|
return base
|
|
end,
|
|
|
|
--- Changes the label's text.
|
|
--- @param newText string The new text of the label.
|
|
--- @return object
|
|
setText = function(self, newText)
|
|
text = tostring(newText)
|
|
if(autoSize)then
|
|
local t = wrapText(text, #text)
|
|
local newW, newH = 1,1
|
|
for k,v in pairs(t)do
|
|
newH = newH+1
|
|
newW = math.max(newW, v:len())
|
|
end
|
|
self:setSize(newW, newH)
|
|
autoSize = true
|
|
end
|
|
self:updateDraw()
|
|
return self
|
|
end,
|
|
|
|
--- Returns the label's autoSize property.
|
|
--- @return boolean
|
|
getAutoSize = function(self)
|
|
return autoSize
|
|
end,
|
|
|
|
--- Sets the label's autoSize property.
|
|
--- @param bool boolean The new value of the autoSize property.
|
|
--- @return object
|
|
setAutoSize = function(self, bool)
|
|
autoSize = bool
|
|
return self
|
|
end,
|
|
|
|
--- Returns the label's text.
|
|
--- @return string
|
|
getText = function(self)
|
|
return text
|
|
end,
|
|
|
|
--- Sets the size of the label.
|
|
--- @param width number The width of the label.
|
|
--- @param height number The height of the label.
|
|
--- @return object
|
|
setSize = function(self, width, height)
|
|
base.setSize(self, width, height)
|
|
autoSize = false
|
|
return self
|
|
end,
|
|
|
|
--- Gets the text alignment of the label.
|
|
--- @return string
|
|
getTextAlign = function(self)
|
|
return textAlign
|
|
end,
|
|
|
|
--- Sets the text alignment of the label.
|
|
--- @param align string The alignment of the text. Can be "left", "center", or "right".
|
|
--- @return object
|
|
setTextAlign = function(self, align)
|
|
textAlign = align or textAlign
|
|
return self;
|
|
end,
|
|
|
|
--- Queues a new draw function to be called when the object is drawn.
|
|
draw = function(self)
|
|
base.draw(self)
|
|
self:addDraw("label", function()
|
|
local w, h = self:getSize()
|
|
local align = textAlign=="center" and math.floor(w/2-text:len()/2+0.5) or textAlign=="right" and w-(text:len()-1) or 1
|
|
writeWrappedText(self, align, 1, text, w+1, h)
|
|
end)
|
|
end,
|
|
|
|
--- Initializes the label.
|
|
init = function(self)
|
|
base.init(self)
|
|
local parent = self:getParent()
|
|
self:setForeground(parent:getForeground())
|
|
end
|
|
|
|
}
|
|
|
|
object.__index = object
|
|
return setmetatable(object, base)
|
|
end |