changed source project
This commit is contained in:
372
source/project/Object.lua
Normal file
372
source/project/Object.lua
Normal file
@@ -0,0 +1,372 @@
|
||||
local function Object(name)
|
||||
-- Base object
|
||||
local objectType = "Object" -- not changeable
|
||||
--[[
|
||||
local horizontalAnchor = "left"
|
||||
local verticalAnchor = "top"
|
||||
local ignYOffset = false
|
||||
local ignXOffset = false ]]
|
||||
local value
|
||||
local zIndex = 1
|
||||
local hanchor = "left"
|
||||
local vanchor = "top"
|
||||
local ignOffset = false
|
||||
local isVisible = false
|
||||
|
||||
local visualsChanged = true
|
||||
|
||||
local eventSystem = BasaltEvents()
|
||||
|
||||
local object = {
|
||||
x = 1,
|
||||
y = 1,
|
||||
width = 1,
|
||||
height = 1,
|
||||
bgColor = colors.black,
|
||||
fgColor = colors.white,
|
||||
name = name or "Object",
|
||||
parent = nil,
|
||||
|
||||
show = function(self)
|
||||
isVisible = true
|
||||
visualsChanged = true
|
||||
return self
|
||||
end;
|
||||
|
||||
hide = function(self)
|
||||
isVisible = false
|
||||
visualsChanged = true
|
||||
return self
|
||||
end;
|
||||
|
||||
isVisible = function(self)
|
||||
return isVisible
|
||||
end;
|
||||
|
||||
getZIndex = function(self)
|
||||
return zIndex;
|
||||
end;
|
||||
|
||||
setFocus = function(self)
|
||||
if (self.parent ~= nil) then
|
||||
self.parent:setFocusedObject(self)
|
||||
end
|
||||
return self
|
||||
end;
|
||||
|
||||
setZIndex = function(self, index)
|
||||
zIndex = index
|
||||
if (self.parent ~= nil) then
|
||||
self.parent:removeObject(self)
|
||||
self.parent:addObject(self)
|
||||
end
|
||||
return self
|
||||
end;
|
||||
|
||||
getType = function(self)
|
||||
return objectType
|
||||
end;
|
||||
|
||||
getName = function(self)
|
||||
return self.name
|
||||
end;
|
||||
|
||||
remove = function(self)
|
||||
if (self.parent ~= nil) then
|
||||
self.parent:removeObject(self)
|
||||
end
|
||||
return self
|
||||
end;
|
||||
|
||||
setParent = function(self, frame)
|
||||
if (frame.getType ~= nil and frame:getType() == "Frame") then
|
||||
self:remove()
|
||||
frame:addObject(self)
|
||||
if (self.draw) then
|
||||
self:show()
|
||||
end
|
||||
end
|
||||
return self
|
||||
end;
|
||||
|
||||
setValue = function(self, _value)
|
||||
if (value ~= _value) then
|
||||
value = _value
|
||||
visualsChanged = true
|
||||
self:valueChangedHandler()
|
||||
end
|
||||
return self
|
||||
end;
|
||||
|
||||
getValue = function(self)
|
||||
return value
|
||||
end;
|
||||
|
||||
getVisualChanged = function(self)
|
||||
return visualsChanged
|
||||
end;
|
||||
|
||||
setVisualChanged = function(self, change)
|
||||
visualsChanged = change or true
|
||||
return self
|
||||
end;
|
||||
|
||||
|
||||
getEventSystem = function(self)
|
||||
return eventSystem
|
||||
end;
|
||||
|
||||
|
||||
getParent = function(self)
|
||||
return self.parent
|
||||
end;
|
||||
|
||||
setPosition = function(self, xPos, yPos, rel)
|
||||
if (rel) then
|
||||
self.x, self.y = self.x + xPos, self.y + yPos
|
||||
else
|
||||
self.x, self.y = xPos, yPos
|
||||
end
|
||||
visualsChanged = true
|
||||
return self
|
||||
end;
|
||||
|
||||
getPosition = function(self)
|
||||
return self.x, self.y
|
||||
end;
|
||||
|
||||
getVisibility = function(self)
|
||||
return isVisible
|
||||
end;
|
||||
|
||||
setVisibility = function(self, _isVisible)
|
||||
isVisible = _isVisible or not isVisible
|
||||
visualsChanged = true
|
||||
return self
|
||||
end;
|
||||
|
||||
setSize = function(self, width, height)
|
||||
self.width, self.height = width, height
|
||||
visualsChanged = true
|
||||
return self
|
||||
end;
|
||||
|
||||
getHeight = function(self)
|
||||
return self.height
|
||||
end;
|
||||
|
||||
getWidth = function(self)
|
||||
return self.w
|
||||
end;
|
||||
|
||||
setBackground = function(self, color)
|
||||
self.bgColor = color
|
||||
visualsChanged = true
|
||||
return self
|
||||
end;
|
||||
|
||||
getBackground = function(self)
|
||||
return self.bgColor
|
||||
end;
|
||||
|
||||
setForeground = function(self, color)
|
||||
self.fgColor = color
|
||||
visualsChanged = true
|
||||
return self
|
||||
end;
|
||||
|
||||
getForeground = function(self)
|
||||
return self.fgColor
|
||||
end;
|
||||
|
||||
draw = function(self)
|
||||
if (isVisible) then
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end;
|
||||
|
||||
|
||||
getAbsolutePosition = function(self, x, y)
|
||||
-- relative position to absolute position
|
||||
if (x == nil) then
|
||||
x = self.x
|
||||
end
|
||||
if (y == nil) then
|
||||
y = self.y
|
||||
end
|
||||
|
||||
if (self.parent ~= nil) then
|
||||
local fx, fy = self.parent:getAbsolutePosition(self.parent:getAnchorPosition())
|
||||
x = fx + x - 1
|
||||
y = fy + y - 1
|
||||
end
|
||||
return x, y
|
||||
end;
|
||||
|
||||
getAnchorPosition = function(self, x, y, ignOff)
|
||||
if (x == nil) then
|
||||
x = self.x
|
||||
end
|
||||
if (y == nil) then
|
||||
y = self.y
|
||||
end
|
||||
if (hanchor == "right") then
|
||||
x = self.parent.width - x - self.width + 2
|
||||
end
|
||||
if (vanchor == "bottom") then
|
||||
y = self.parent.height - y - self.height + 2
|
||||
end
|
||||
local xO, yO = self:getOffset()
|
||||
if (ignOffset or ignOff) then
|
||||
return x, y
|
||||
end
|
||||
return x + xO, y + yO
|
||||
end;
|
||||
|
||||
getOffset = function(self)
|
||||
if (self.parent ~= nil) and (ignOffset == false) then
|
||||
return self.parent:getFrameOffset()
|
||||
end
|
||||
return 0, 0
|
||||
end;
|
||||
|
||||
ignoreOffset = function(self, ignore)
|
||||
ignOffset = ignore or true
|
||||
return self
|
||||
end;
|
||||
|
||||
setAnchor = function(self, ...)
|
||||
for _, value in pairs(table.pack(...)) do
|
||||
if (value == "right") or (value == "left") then
|
||||
hanchor = value
|
||||
end
|
||||
if (value == "top") or (value == "bottom") then
|
||||
vanchor = value
|
||||
end
|
||||
end
|
||||
visualsChanged = true
|
||||
return self
|
||||
end;
|
||||
|
||||
getAnchor = function(self)
|
||||
return hanchor, vanchor
|
||||
end;
|
||||
|
||||
onChange = function(self, func)
|
||||
self:registerEvent("value_changed", func)
|
||||
return self
|
||||
end;
|
||||
|
||||
onClick = function(self, func)
|
||||
self:registerEvent("mouse_click", func)
|
||||
return self
|
||||
end;
|
||||
|
||||
onEvent = function(self, func)
|
||||
self:registerEvent("custom_event_handler", func)
|
||||
return self
|
||||
end;
|
||||
|
||||
onClickUp = function(self, func)
|
||||
self:registerEvent("mouse_up", func)
|
||||
return self
|
||||
end;
|
||||
|
||||
onKey = function(self, func)
|
||||
self:registerEvent("key", func)
|
||||
self:registerEvent("char", func)
|
||||
return self
|
||||
end;
|
||||
|
||||
onKeyUp = function(self, func)
|
||||
self:registerEvent("key_up", func)
|
||||
return self
|
||||
end;
|
||||
|
||||
onBackgroundKey = function(self, func)
|
||||
self:registerEvent("background_key", func)
|
||||
self:registerEvent("background_char", func)
|
||||
return self
|
||||
end;
|
||||
|
||||
onBackgroundKeyUp = function(self, func)
|
||||
self:registerEvent("background_key_up", func)
|
||||
return self
|
||||
end;
|
||||
|
||||
isFocused = function(self)
|
||||
if (self.parent ~= nil) then
|
||||
return self.parent:getFocusedObject() == self
|
||||
end
|
||||
return false
|
||||
end;
|
||||
|
||||
onGetFocus = function(self, func)
|
||||
self:registerEvent("get_focus", func)
|
||||
return self
|
||||
end;
|
||||
|
||||
onLoseFocus = function(self, func)
|
||||
self:registerEvent("lose_focus", func)
|
||||
return self
|
||||
end;
|
||||
|
||||
registerEvent = function(self, event, func)
|
||||
return eventSystem:registerEvent(event, func)
|
||||
end;
|
||||
|
||||
removeEvent = function(self, event, index)
|
||||
return eventSystem:removeEvent(event, index)
|
||||
end;
|
||||
|
||||
sendEvent = function(self, event, ...)
|
||||
return eventSystem:sendEvent(event, self, ...)
|
||||
end;
|
||||
|
||||
mouseClickHandler = function(self, event, button, x, y)
|
||||
local objX, objY = self:getAbsolutePosition(self:getAnchorPosition())
|
||||
if (objX <= x) and (objX + self.width > x) and (objY <= y) and (objY + self.height > y) and (isVisible) then
|
||||
if (self.parent ~= nil) then
|
||||
self.parent:setFocusedObject(self)
|
||||
end
|
||||
eventSystem:sendEvent(event, self, event, button, x, y)
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end;
|
||||
|
||||
keyHandler = function(self, event, key)
|
||||
if (self:isFocused()) then
|
||||
eventSystem:sendEvent(event, self, event, key)
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end;
|
||||
|
||||
backgroundKeyHandler = function(self, event, key)
|
||||
eventSystem:sendEvent("background_" .. event, self, event, key)
|
||||
end;
|
||||
|
||||
valueChangedHandler = function(self)
|
||||
eventSystem:sendEvent("value_changed", self)
|
||||
end;
|
||||
|
||||
eventHandler = function(self, event, p1, p2, p3, p4)
|
||||
eventSystem:sendEvent("custom_event_handler", self, event, p1, p2, p3, p4)
|
||||
end;
|
||||
|
||||
getFocusHandler = function(self)
|
||||
eventSystem:sendEvent("get_focus", self)
|
||||
end;
|
||||
|
||||
loseFocusHandler = function(self)
|
||||
eventSystem:sendEvent("lose_focus", self)
|
||||
end;
|
||||
|
||||
|
||||
}
|
||||
|
||||
object.__index = object
|
||||
return object
|
||||
end
|
||||
Reference in New Issue
Block a user