Small Fixes
- added Label RichText System - experimental - moved eventhandlers to object - Fixed still listening to incomming events when removing a object - Fixed not passing args when creating a event via xml, args are now always stored inside a table called event
This commit is contained in:
@@ -10,7 +10,6 @@ return function(name, basalt)
|
||||
local events = {}
|
||||
|
||||
local container = {}
|
||||
local activeEvents = {}
|
||||
|
||||
local focusedObject
|
||||
local sorted = true
|
||||
@@ -69,14 +68,14 @@ return function(name, basalt)
|
||||
local function updateZIndex(self, element, newZ)
|
||||
objId = objId + 1
|
||||
evId = evId + 1
|
||||
for k,v in pairs(elements)do
|
||||
for _,v in pairs(elements)do
|
||||
if(v.element==element)then
|
||||
v.zIndex = newZ
|
||||
v.objId = objId
|
||||
break
|
||||
end
|
||||
end
|
||||
for k,v in pairs(events)do
|
||||
for _,v in pairs(events)do
|
||||
for a,b in pairs(v)do
|
||||
if(b.element==element)then
|
||||
b.zIndex = newZ
|
||||
@@ -109,7 +108,6 @@ return function(name, basalt)
|
||||
end
|
||||
end
|
||||
if(tableCount(events[a])<=0)then
|
||||
activeEvents[a] = false
|
||||
if(parent~=nil)then
|
||||
parent:removeEvent(a, self)
|
||||
end
|
||||
@@ -143,7 +141,6 @@ return function(name, basalt)
|
||||
end
|
||||
|
||||
local function removeEvent(self, event, element)
|
||||
local parent = self:getParent()
|
||||
if(events[event]~=nil)then
|
||||
for a, b in pairs(events[event]) do
|
||||
if(b.element == element)then
|
||||
@@ -288,11 +285,11 @@ return function(name, basalt)
|
||||
getEvent = getEvent,
|
||||
addEvent = addEvent,
|
||||
removeEvent = removeEvent,
|
||||
removeEvents = removeEvents,
|
||||
updateZIndex = updateZIndex,
|
||||
|
||||
listenEvent = function(self, event, active)
|
||||
base.listenEvent(self, event, active)
|
||||
activeEvents[event] = active~=nil and active or true
|
||||
if(events[event]==nil)then events[event] = {} end
|
||||
return self
|
||||
end,
|
||||
@@ -348,8 +345,10 @@ return function(name, basalt)
|
||||
if(self.getOffset~=nil)then
|
||||
xO, yO = self:getOffset()
|
||||
end
|
||||
if(obj.element.getIgnoreOffset())then
|
||||
xO, yO = 0, 0
|
||||
if(obj.element.getIgnoreOffset~=nil)then
|
||||
if(obj.element.getIgnoreOffset())then
|
||||
xO, yO = 0, 0
|
||||
end
|
||||
end
|
||||
if (obj.element[v[1]](obj.element, btn, x+xO, y+yO, ...)) then
|
||||
return true
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
local utils = require("utils")
|
||||
local wrapText = utils.wrapText
|
||||
local writeWrappedText = utils.writeWrappedText
|
||||
local tHex = require("tHex")
|
||||
|
||||
return function(name, basalt)
|
||||
@@ -8,92 +9,97 @@ return function(name, basalt)
|
||||
local objectType = "Label"
|
||||
|
||||
base:setZIndex(3)
|
||||
base:setSize(5, 1)
|
||||
base:setBackground(false)
|
||||
|
||||
local autoSize = true
|
||||
local fgColChanged,bgColChanged = false,false
|
||||
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,
|
||||
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
|
||||
self:setSize(#text, 1)
|
||||
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,
|
||||
|
||||
setBackground = function(self, col)
|
||||
base.setBackground(self, col)
|
||||
bgColChanged = true
|
||||
return self
|
||||
end,
|
||||
|
||||
setForeground = function(self, col)
|
||||
base.setForeground(self, col)
|
||||
fgColChanged = true
|
||||
return self
|
||||
end,
|
||||
|
||||
setSize = function(self, ...)
|
||||
base.setSize(self, ...)
|
||||
--- 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,
|
||||
|
||||
--- 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 parent = self:getParent()
|
||||
local obx, oby = self:getPosition()
|
||||
local w,h = self:getSize()
|
||||
local bgCol,fgCol = self:getBackground(), self:getForeground()
|
||||
if not(autoSize)then
|
||||
local text = wrapText(text, w)
|
||||
for k,v in pairs(text)do
|
||||
if(k<=h)then
|
||||
local align = textAlign=="center" and math.floor(w/2-v:len()/2+0.5) or textAlign=="right" and w-(v:len()-1) or 1
|
||||
self:addText(align, k, v)
|
||||
end
|
||||
end
|
||||
else
|
||||
self:addText(1, 1, text:sub(1,w))
|
||||
end
|
||||
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, h)
|
||||
end)
|
||||
end,
|
||||
|
||||
--- Initializes the label.
|
||||
init = function(self)
|
||||
base.init(self)
|
||||
local parent = self:getParent()
|
||||
self:setForeground(parent:getForeground())
|
||||
self:setBackground(parent:getBackground())
|
||||
end
|
||||
|
||||
}
|
||||
|
||||
@@ -99,6 +99,7 @@ return function(name, basalt)
|
||||
remove = function(self)
|
||||
if (parent ~= nil) then
|
||||
parent:removeObject(self)
|
||||
parent:removeEvents(self)
|
||||
end
|
||||
self:updateDraw()
|
||||
return self
|
||||
@@ -140,6 +141,17 @@ return function(name, basalt)
|
||||
return eventSystem:removeEvent(event, index)
|
||||
end,
|
||||
|
||||
eventHandler = function(self, event, ...)
|
||||
local val = self:sendEvent("other_event", event, ...)
|
||||
if(val~=nil)then return val end
|
||||
end,
|
||||
|
||||
customEventHandler = function(self, event, ...)
|
||||
local val = self:sendEvent("custom_event", event, ...)
|
||||
if(val~=nil)then return val end
|
||||
return true
|
||||
end,
|
||||
|
||||
sendEvent = function(self, event, ...)
|
||||
return eventSystem:sendEvent(event, self, event, ...)
|
||||
end,
|
||||
|
||||
@@ -85,6 +85,7 @@ return function(name, basalt)
|
||||
end,
|
||||
|
||||
eventHandler = function(self, event, ...)
|
||||
base.eventHandler(self, event, ...)
|
||||
if (isActive) then
|
||||
if (coroutine.status(cRoutine) == "suspended") then
|
||||
if(filter~=nil)then
|
||||
|
||||
@@ -48,7 +48,8 @@ return function(name, basalt)
|
||||
return self
|
||||
end,
|
||||
|
||||
eventHandler = function(self, event, tObj)
|
||||
eventHandler = function(self, event, ...)
|
||||
base.eventHandler(self, event, ...)
|
||||
if event == "timer" and tObj == timerObj and timerIsActive then
|
||||
self:sendEvent("timed_event")
|
||||
if (repeats >= 1) then
|
||||
|
||||
@@ -395,17 +395,6 @@ return function(name, basalt)
|
||||
end
|
||||
end,
|
||||
|
||||
eventHandler = function(self, event, ...)
|
||||
local val = self:sendEvent("other_event", ...)
|
||||
if(val~=nil)then return val end
|
||||
end,
|
||||
|
||||
customEventHandler = function(self, event, ...)
|
||||
local val = self:sendEvent("custom_event", ...)
|
||||
if(val~=nil)then return val end
|
||||
return true
|
||||
end,
|
||||
|
||||
getFocusHandler = function(self)
|
||||
local val = self:sendEvent("get_focus")
|
||||
if(val~=nil)then return val end
|
||||
|
||||
Reference in New Issue
Block a user