mirror of
https://github.com/linux-man/LoveFrames.git
synced 2024-11-26 05:14:21 +00:00
072918fbea
Updated the textinput custom cursor code to use the newest 0.9.0 cursor functions Fixed textinput custom cursors not being reset in certain situations loveframes.hoverobject is now used to reference the currently hovered object loveframes.downobject has been added to assume the previous role of loveframes.hoverobject
430 lines
10 KiB
Lua
430 lines
10 KiB
Lua
--[[------------------------------------------------
|
|
-- Love Frames - A GUI library for LOVE --
|
|
-- Copyright (c) 2013 Kenny Shields --
|
|
--]]------------------------------------------------
|
|
|
|
-- multichoice class
|
|
local newobject = loveframes.NewObject("multichoice", "loveframes_object_multichoice", true)
|
|
|
|
--[[---------------------------------------------------------
|
|
- func: initialize()
|
|
- desc: initializes the object
|
|
--]]---------------------------------------------------------
|
|
function newobject:initialize()
|
|
|
|
self.type = "multichoice"
|
|
self.choice = ""
|
|
self.text = "Select an option"
|
|
self.width = 200
|
|
self.height = 25
|
|
self.listpadding = 0
|
|
self.listspacing = 0
|
|
self.buttonscrollamount = 200
|
|
self.mousewheelscrollamount = 1500
|
|
self.sortfunc = function(a, b) return a < b end
|
|
self.haslist = false
|
|
self.dtscrolling = true
|
|
self.enabled = true
|
|
self.internal = false
|
|
self.choices = {}
|
|
self.listheight = nil
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
- func: update(deltatime)
|
|
- desc: updates the object
|
|
--]]---------------------------------------------------------
|
|
function newobject:update(dt)
|
|
|
|
local state = loveframes.state
|
|
local selfstate = self.state
|
|
|
|
if state ~= selfstate then
|
|
return
|
|
end
|
|
|
|
local visible = self.visible
|
|
local alwaysupdate = self.alwaysupdate
|
|
|
|
if not visible then
|
|
if not alwaysupdate then
|
|
return
|
|
end
|
|
end
|
|
|
|
local parent = self.parent
|
|
local base = loveframes.base
|
|
local update = self.Update
|
|
|
|
self:CheckHover()
|
|
|
|
-- move to parent if there is a parent
|
|
if parent ~= base then
|
|
self.x = self.parent.x + self.staticx
|
|
self.y = self.parent.y + self.staticy
|
|
end
|
|
|
|
if update then
|
|
update(self, dt)
|
|
end
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
- func: draw()
|
|
- desc: draws the object
|
|
--]]---------------------------------------------------------
|
|
function newobject:draw()
|
|
|
|
local state = loveframes.state
|
|
local selfstate = self.state
|
|
|
|
if state ~= selfstate then
|
|
return
|
|
end
|
|
|
|
local visible = self.visible
|
|
|
|
if not visible then
|
|
return
|
|
end
|
|
|
|
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.DrawMultiChoice or skins[defaultskin].DrawMultiChoice
|
|
local draw = self.Draw
|
|
local drawcount = loveframes.drawcount
|
|
|
|
-- set the object's draw order
|
|
self:SetDrawOrder()
|
|
|
|
if draw then
|
|
draw(self)
|
|
else
|
|
drawfunc(self)
|
|
end
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
- func: mousepressed(x, y, button)
|
|
- desc: called when the player presses a mouse button
|
|
--]]---------------------------------------------------------
|
|
function newobject:mousepressed(x, y, button)
|
|
|
|
local state = loveframes.state
|
|
local selfstate = self.state
|
|
|
|
if state ~= selfstate then
|
|
return
|
|
end
|
|
|
|
local visible = self.visible
|
|
|
|
if not visible then
|
|
return
|
|
end
|
|
|
|
local hover = self.hover
|
|
local haslist = self.haslist
|
|
local enabled = self.enabled
|
|
|
|
if hover and not haslist and enabled and button == "l" then
|
|
local baseparent = self:GetBaseParent()
|
|
if baseparent and baseparent.type == "frame" then
|
|
baseparent:MakeTop()
|
|
end
|
|
self.haslist = true
|
|
self.list = loveframes.objects["multichoicelist"]:new(self)
|
|
self.list:SetState(self.state)
|
|
loveframes.downobject = self
|
|
end
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
- func: mousereleased(x, y, button)
|
|
- desc: called when the player releases a mouse button
|
|
--]]---------------------------------------------------------
|
|
function newobject:mousereleased(x, y, button)
|
|
|
|
local state = loveframes.state
|
|
local selfstate = self.state
|
|
|
|
if state ~= selfstate then
|
|
return
|
|
end
|
|
|
|
local visible = self.visible
|
|
|
|
if not visible then
|
|
return
|
|
end
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
- func: AddChoice(choice)
|
|
- desc: adds a choice to the current list of choices
|
|
--]]---------------------------------------------------------
|
|
function newobject:AddChoice(choice)
|
|
|
|
local choices = self.choices
|
|
table.insert(choices, choice)
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
- func: RemoveChoice(choice)
|
|
- desc: removes the specified choice from the object's
|
|
list of choices
|
|
--]]---------------------------------------------------------
|
|
function newobject:RemoveChoice(choice)
|
|
|
|
local choices = self.choices
|
|
|
|
for k, v in ipairs(choices) do
|
|
if v == choice then
|
|
table.remove(choices, k)
|
|
break
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
- func: SetChoice(choice)
|
|
- desc: sets the current choice
|
|
--]]---------------------------------------------------------
|
|
function newobject:SetChoice(choice)
|
|
|
|
self.choice = choice
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
- func: SelectChoice(choice)
|
|
- desc: selects a choice
|
|
--]]---------------------------------------------------------
|
|
function newobject:SelectChoice(choice)
|
|
|
|
local onchoiceselected = self.OnChoiceSelected
|
|
|
|
self.choice = choice
|
|
|
|
if self.list then
|
|
self.list:Close()
|
|
end
|
|
|
|
if onchoiceselected then
|
|
onchoiceselected(self, choice)
|
|
end
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
- func: SetListHeight(height)
|
|
- desc: sets the height of the list of choices
|
|
--]]---------------------------------------------------------
|
|
function newobject:SetListHeight(height)
|
|
|
|
self.listheight = height
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
- func: SetPadding(padding)
|
|
- desc: sets the padding of the list of choices
|
|
--]]---------------------------------------------------------
|
|
function newobject:SetPadding(padding)
|
|
|
|
self.listpadding = padding
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
- func: SetSpacing(spacing)
|
|
- desc: sets the spacing of the list of choices
|
|
--]]---------------------------------------------------------
|
|
function newobject:SetSpacing(spacing)
|
|
|
|
self.listspacing = spacing
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
- func: GetValue()
|
|
- desc: gets the value (choice) of the object
|
|
--]]---------------------------------------------------------
|
|
function newobject:GetValue()
|
|
|
|
return self.choice
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
- func: GetChoice()
|
|
- desc: gets the current choice (same as get value)
|
|
--]]---------------------------------------------------------
|
|
function newobject:GetChoice()
|
|
|
|
return self.choice
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
- func: SetText(text)
|
|
- desc: sets the object's text
|
|
--]]---------------------------------------------------------
|
|
function newobject:SetText(text)
|
|
|
|
self.text = text
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
- func: GetText()
|
|
- desc: gets the object's text
|
|
--]]---------------------------------------------------------
|
|
function newobject:GetText()
|
|
|
|
return self.text
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
- func: SetButtonScrollAmount(speed)
|
|
- desc: sets the scroll amount of the object's scrollbar
|
|
buttons
|
|
--]]---------------------------------------------------------
|
|
function newobject:SetButtonScrollAmount(amount)
|
|
|
|
self.buttonscrollamount = amount
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
- func: GetButtonScrollAmount()
|
|
- desc: gets the scroll amount of the object's scrollbar
|
|
buttons
|
|
--]]---------------------------------------------------------
|
|
function newobject:GetButtonScrollAmount()
|
|
|
|
return self.buttonscrollamount
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
- func: SetMouseWheelScrollAmount(amount)
|
|
- desc: sets the scroll amount of the mouse wheel
|
|
--]]---------------------------------------------------------
|
|
function newobject:SetMouseWheelScrollAmount(amount)
|
|
|
|
self.mousewheelscrollamount = amount
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
- func: GetMouseWheelScrollAmount()
|
|
- desc: gets the scroll amount of the mouse wheel
|
|
--]]---------------------------------------------------------
|
|
function newobject:GetButtonScrollAmount()
|
|
|
|
return self.mousewheelscrollamount
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
- func: SetDTScrolling(bool)
|
|
- desc: sets whether or not the object should use delta
|
|
time when scrolling
|
|
--]]---------------------------------------------------------
|
|
function newobject:SetDTScrolling(bool)
|
|
|
|
self.dtscrolling = bool
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
- func: GetDTScrolling()
|
|
- desc: gets whether or not the object should use delta
|
|
time when scrolling
|
|
--]]---------------------------------------------------------
|
|
function newobject:GetDTScrolling()
|
|
|
|
return self.dtscrolling
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
- func: Sort(func)
|
|
- desc: sorts the object's choices
|
|
--]]---------------------------------------------------------
|
|
function newobject:Sort(func)
|
|
|
|
local default = self.sortfunc
|
|
|
|
if func then
|
|
table.sort(self.choices, func)
|
|
else
|
|
table.sort(self.choices, default)
|
|
end
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
- func: SetSortFunction(func)
|
|
- desc: sets the object's default sort function
|
|
--]]---------------------------------------------------------
|
|
function newobject:SetSortFunction(func)
|
|
|
|
self.sortfunc = func
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
- func: GetSortFunction(func)
|
|
- desc: gets the object's default sort function
|
|
--]]---------------------------------------------------------
|
|
function newobject:GetSortFunction()
|
|
|
|
return self.sortfunc
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
- func: Clear()
|
|
- desc: removes all choices from the object's list
|
|
of choices
|
|
--]]---------------------------------------------------------
|
|
function newobject:Clear()
|
|
|
|
self.choices = {}
|
|
self.choice = ""
|
|
self.text = "Select an option"
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
- func: SetClickable(bool)
|
|
- desc: sets whether or not the object is enabled
|
|
--]]---------------------------------------------------------
|
|
function newobject:SetEnabled(bool)
|
|
|
|
self.enabled = bool
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
- func: GetEnabled()
|
|
- desc: gets whether or not the object is enabled
|
|
--]]---------------------------------------------------------
|
|
function newobject:GetEnabled()
|
|
|
|
return self.enabled
|
|
|
|
end |