LoveFrames/objects/collapsiblecategory.lua

323 lines
7.6 KiB
Lua
Raw Normal View History

2012-05-06 00:24:42 +00:00
--[[------------------------------------------------
-- L<>ve Frames --
-- Copyright 2012 Kenny Shields --
2012-05-06 00:24:42 +00:00
--]]------------------------------------------------
-- button clas
collapsiblecategory = class("collapsiblecategory", base)
collapsiblecategory:include(loveframes.templates.default)
--[[---------------------------------------------------------
- func: initialize()
- desc: initializes the object
--]]---------------------------------------------------------
function collapsiblecategory:initialize()
self.type = "collapsiblecategory"
self.text = "Category"
self.width = 200
self.height = 25
self.closedheight = 25
self.padding = 5
self.internal = false
self.open = false
self.down = false
2012-05-06 00:24:42 +00:00
self.children = {}
self.OnOpenedClosed = nil
end
--[[---------------------------------------------------------
- func: update(deltatime)
- desc: updates the object
--]]---------------------------------------------------------
function collapsiblecategory:update(dt)
local visible = self.visible
local alwaysupdate = self.alwaysupdate
if visible == false then
if alwaysupdate == false then
2012-05-06 00:24:42 +00:00
return
end
end
local open = self.open
local children = self.children
local curobject = children[1]
2012-05-06 00:24:42 +00:00
self:CheckHover()
-- move to parent if there is a parent
if self.parent ~= loveframes.base and self.parent.type ~= "list" then
2012-05-06 00:24:42 +00:00
self.x = self.parent.x + self.staticx
self.y = self.parent.y + self.staticy
end
if open == true then
curobject:SetWidth(self.width - self.padding*2)
curobject:update(dt)
2012-05-06 00:24:42 +00:00
end
if self.Update then
self.Update(self, dt)
end
end
--[[---------------------------------------------------------
- func: draw()
- desc: draws the object
--]]---------------------------------------------------------
function collapsiblecategory:draw()
local visible = self.visible
if visible == false then
2012-05-06 00:24:42 +00:00
return
end
local open = self.open
local children = self.children
local curobject = children[1]
local skins = loveframes.skins.available
local skinindex = loveframes.config["ACTIVESKIN"]
local defaultskin = loveframes.config["DEFAULTSKIN"]
local selfskin = self.skin
local skin = skins[selfskin] or skins[skinindex]
local drawfunc = skin.DrawCollapsibleCategory or skins[defaultskin].DrawCollapsibleCategory
2012-05-06 00:24:42 +00:00
loveframes.drawcount = loveframes.drawcount + 1
self.draworder = loveframes.drawcount
2012-05-06 00:24:42 +00:00
if self.Draw ~= nil then
self.Draw(self)
else
drawfunc(self)
2012-05-06 00:24:42 +00:00
end
if open == true then
curobject:draw()
2012-05-06 00:24:42 +00:00
end
end
--[[---------------------------------------------------------
- func: mousepressed(x, y, button)
- desc: called when the player presses a mouse button
--]]---------------------------------------------------------
function collapsiblecategory:mousepressed(x, y, button)
local visible = self.visible
if visible == false then
2012-05-06 00:24:42 +00:00
return
end
local hover = self.hover
local open = self.open
local children = self.children
local curobject = children[1]
if hover == true then
2012-05-06 00:24:42 +00:00
local col = loveframes.util.BoundingBox(self.x, x, self.y, y, self.width, 1, self.closedheight, 1)
if button == "l" and col == true then
local baseparent = self:GetBaseParent()
if baseparent and baseparent.type == "frame" then
baseparent:MakeTop()
end
self.down = true
loveframes.hoverobject = self
2012-05-06 00:24:42 +00:00
end
end
if open == true then
curobject:mousepressed(x, y, button)
2012-05-06 00:24:42 +00:00
end
end
--[[---------------------------------------------------------
- func: mousereleased(x, y, button)
- desc: called when the player releases a mouse button
--]]---------------------------------------------------------
function collapsiblecategory:mousereleased(x, y, button)
local visible = self.visible
if visible == false then
2012-05-06 00:24:42 +00:00
return
end
local hover = self.hover
local down = self.down
local clickable = self.clickable
local enabled = self.enabled
local open = self.open
local col = loveframes.util.BoundingBox(self.x, x, self.y, y, self.width, 1, self.closedheight, 1)
local children = self.children
local curobject = children[1]
2012-05-06 00:24:42 +00:00
if hover == true and button == "l" and col == true and self.down == true then
2012-05-06 00:24:42 +00:00
if open == true then
self:SetOpen(false)
else
self:SetOpen(true)
end
self.down = false
2012-05-06 00:24:42 +00:00
end
if open == true then
curobject:mousepressed(x, y, button)
2012-05-06 00:24:42 +00:00
end
end
--[[---------------------------------------------------------
- func: SetText(text)
- desc: sets the object's text
--]]---------------------------------------------------------
function collapsiblecategory:SetText(text)
self.text = text
end
--[[---------------------------------------------------------
- func: GetText()
- desc: gets the object's text
--]]---------------------------------------------------------
function collapsiblecategory:GetText()
return self.text
end
--[[---------------------------------------------------------
- func: SetObject(object)
- desc: sets the category's object
--]]---------------------------------------------------------
function collapsiblecategory:SetObject(object)
local children = self.children
local curobject = children[1]
if curobject then
curobject:Remove()
2012-05-06 00:24:42 +00:00
self.children = {}
end
object:Remove()
object.parent = self
object:SetWidth(self.width - self.padding*2)
object:SetPos(self.padding, self.closedheight + self.padding)
table.insert(self.children, object)
end
--[[---------------------------------------------------------
- func: SetObject(object)
- desc: sets the category's object
--]]---------------------------------------------------------
function collapsiblecategory:GetObject()
local children = self.children
local curobject = children[1]
if curobject then
return curobject
2012-05-06 00:24:42 +00:00
else
return false
end
end
--[[---------------------------------------------------------
- func: SetSize(width, height)
- desc: sets the object's size
--]]---------------------------------------------------------
function collapsiblecategory:SetSize(width, height)
self.width = width
end
--[[---------------------------------------------------------
- func: SetHeight(height)
- desc: sets the object's height
--]]---------------------------------------------------------
function collapsiblecategory:SetHeight(height)
return
end
--[[---------------------------------------------------------
- func: SetClosedHeight(height)
- desc: sets the object's closed height
--]]---------------------------------------------------------
function collapsiblecategory:SetClosedHeight(height)
self.closedheight = height
end
--[[---------------------------------------------------------
- func: GetClosedHeight()
- desc: gets the object's closed height
--]]---------------------------------------------------------
function collapsiblecategory:GetClosedHeight()
return self.closedheight
end
--[[---------------------------------------------------------
- func: SetOpen(bool)
- desc: sets whether the object is opened or closed
--]]---------------------------------------------------------
function collapsiblecategory:SetOpen(bool)
local children = self.children
local curobject = children[1]
2012-05-06 00:24:42 +00:00
self.open = bool
if bool == false then
self.height = self.closedheight
if curobject then
curobject:SetVisible(false)
2012-05-06 00:24:42 +00:00
end
else
self.height = self.closedheight + self.padding*2 + curobject.height
if curobject then
curobject:SetVisible(true)
2012-05-06 00:24:42 +00:00
end
end
if self.OnOpenedClosed then
self.OnOpenedClosed(self)
end
end
--[[---------------------------------------------------------
- func: GetOpen()
- desc: gets whether the object is opened or closed
--]]---------------------------------------------------------
function collapsiblecategory:GetOpen()
return self.opened
end