Version 0.9.5.12 - Alpha (see changelog.txt)

This commit is contained in:
Kenny Shields 2013-06-10 12:34:01 -04:00
parent 76c6846201
commit 0b5cdb6697
9 changed files with 286 additions and 22 deletions

View File

@ -1,3 +1,25 @@
================================================
Version 0.9.5.12 - Alpha (June 10 - 2013)
================================================
[ADDED] a new columnlist method: SelectRow(row, ctrl)
[ADDED] a new columnlist method: DeselectRow(row)
[ADDED] a new columnlist method: GetSelectedRows()
[ADDED] a new columnlist method: SetSelectionEnabled(bool)
[ADDED] a new columnlist method: GetSelectionEnabled()
[ADDED] a new columnlist method: SetMultiselectEnabled(bool)
[ADDED] a new columnlist method: GetMultiselectEnabled()
[ADDED] a new columnlistrow method: SetSelected(bool)
[ADDED] a new columnlistrow method: GetSelected()
[ADDED] a new columnlistrow method: SetColumnData(data)
[ADDED] a new columnlist event callback: OnRowRightClicked(parent, row, data)
[ADDED] a new columnlist event callback: OnRowSelected(parent, row, data)
[ADDED] a new util library function: GetCollisionCount()
[ADDED] a new util library function: GetHover()
[CHANGED] the default mousewheel scroll-amount value for the list object
[CHANGED] the list object no longer uses delta time for scrolling by default
[CHANGED] some of the columnlistrow object's colors in the default skins
================================================ ================================================
Version 0.9.5.11 - Alpha (May 15 - 2013) Version 0.9.5.11 - Alpha (May 15 - 2013)
================================================ ================================================

View File

@ -3,7 +3,6 @@
-- Copyright (c) 2013 Kenny Shields -- -- Copyright (c) 2013 Kenny Shields --
--]]------------------------------------------------ --]]------------------------------------------------
--
local path = ... local path = ...
-- central library table -- central library table
@ -12,7 +11,7 @@ loveframes = {}
-- library info -- library info
loveframes.info = {} loveframes.info = {}
loveframes.info.author = "Kenny Shields" loveframes.info.author = "Kenny Shields"
loveframes.info.version = "0.9.5.11" loveframes.info.version = "0.9.5.12"
loveframes.info.stage = "Alpha" loveframes.info.stage = "Alpha"
-- library configurations -- library configurations
@ -26,9 +25,11 @@ loveframes.config["DEBUG"] = false
-- misc library vars -- misc library vars
loveframes.state = "none" loveframes.state = "none"
loveframes.drawcount = 0 loveframes.drawcount = 0
loveframes.collisioncount = 0
loveframes.hoverobject = false loveframes.hoverobject = false
loveframes.modalobject = false loveframes.modalobject = false
loveframes.inputobject = false loveframes.inputobject = false
loveframes.hover = false
loveframes.basicfont = love.graphics.newFont(12) loveframes.basicfont = love.graphics.newFont(12)
loveframes.basicfontsmall = love.graphics.newFont(10) loveframes.basicfontsmall = love.graphics.newFont(10)
loveframes.objects = {} loveframes.objects = {}
@ -92,6 +93,9 @@ end
function loveframes.update(dt) function loveframes.update(dt)
local base = loveframes.base local base = loveframes.base
loveframes.collisioncount = 0
loveframes.hover = false
base:update(dt) base:update(dt)
end end
@ -239,7 +243,7 @@ function loveframes.Create(data, parent)
-- to the current object -- to the current object
for i, j in pairs(v) do for i, j in pairs(v) do
if i ~= "children" and i ~= "func" then if i ~= "children" and i ~= "func" then
if child == true then if child then
if i == "x" then if i == "x" then
object["staticx"] = j object["staticx"] = j
elseif i == "y" then elseif i == "y" then

View File

@ -732,10 +732,12 @@ function newobject:CheckHover()
local selfcol = loveframes.util.BoundingBox(x, self.x, y, self.y, 1, self.width, 1, self.height) local selfcol = loveframes.util.BoundingBox(x, self.x, y, self.y, 1, self.width, 1, self.height)
local hoverobject = loveframes.hoverobject local hoverobject = loveframes.hoverobject
local modalobject = loveframes.modalobject local modalobject = loveframes.modalobject
local collisioncount = loveframes.collisioncount
local clickbounds = self.clickbounds local clickbounds = self.clickbounds
-- is the mouse inside the object? -- is the mouse inside the object?
if selfcol then if selfcol then
loveframes.collisioncount = collisioncount + 1
local top = self:IsTopCollision() local top = self:IsTopCollision()
if top then if top then
if not hoverobject then if not hoverobject then
@ -773,6 +775,7 @@ function newobject:CheckHover()
-- this chunk of code handles mouse enter and exit -- this chunk of code handles mouse enter and exit
if self.hover then if self.hover then
loveframes.hover = true
if not self.calledmousefunc then if not self.calledmousefunc then
if self.OnMouseEnter then if self.OnMouseEnter then
self.OnMouseEnter(self) self.OnMouseEnter(self)

View File

@ -21,9 +21,13 @@ function newobject:initialize()
self.autoscroll = false self.autoscroll = false
self.dtscrolling = true self.dtscrolling = true
self.internal = false self.internal = false
self.selectionenabled = true
self.multiselect = false
self.children = {} self.children = {}
self.internals = {} self.internals = {}
self.OnRowClicked = nil self.OnRowClicked = nil
self.OnRowRightClicked = nil
self.OnRowSelected = nil
self.OnScroll = nil self.OnScroll = nil
local list = loveframes.objects["columnlistarea"]:new(self) local list = loveframes.objects["columnlistarea"]:new(self)
@ -159,7 +163,7 @@ function newobject:mousepressed(x, y, button)
baseparent:MakeTop() baseparent:MakeTop()
end end
end end
for k, v in ipairs(internals) do for k, v in ipairs(internals) do
v:mousepressed(x, y, button) v:mousepressed(x, y, button)
end end
@ -478,4 +482,114 @@ function newobject:GetDTScrolling()
return self.dtscrolling return self.dtscrolling
end
--[[---------------------------------------------------------
- func: SelectRow(row, ctrl)
- desc: selects the specfied row in the object's list
of rows
--]]---------------------------------------------------------
function newobject:SelectRow(row, ctrl)
local selectionenabled = self.selectionenabled
if not selectionenabled then
return
end
local list = self.internals[1]
local children = list.children
local multiselect = self.multiselect
local onrowselected = self.OnRowSelected
for k, v in ipairs(children) do
if v == row then
if v.selected and ctrl then
v.selected = false
else
v.selected = true
if onrowselected then
onrowselected(self, row, row:GetColumnData())
end
end
elseif v ~= row and not multiselect and not ctrl then
v.selected = false
end
end
end
--[[---------------------------------------------------------
- func: DeselectRow(row)
- desc: deselects the specfied row in the object's list
of rows
--]]---------------------------------------------------------
function newobject:DeselectRow(row)
row.selected = false
end
--[[---------------------------------------------------------
- func: GetSelectedRows()
- desc: gets the object's selected rows
--]]---------------------------------------------------------
function newobject:GetSelectedRows()
local rows = {}
local list = self.internals[1]
local children = list.children
for k, v in ipairs(children) do
if v.selected then
table.insert(rows, v)
end
end
return v
end
--[[---------------------------------------------------------
- func: SetSelectionEnabled(bool)
- desc: sets whether or not the object's rows can be
selected
--]]---------------------------------------------------------
function newobject:SetSelectionEnabled(bool)
self.selectionenabled = bool
end
--[[---------------------------------------------------------
- func: GetSelectionEnabled()
- desc: gets whether or not the object's rows can be
selected
--]]---------------------------------------------------------
function newobject:GetSelectionEnabled()
return self.selectionenabled
end
--[[---------------------------------------------------------
- func: SetMultiselectEnabled(bool)
- desc: sets whether or not the object can have more
than one row selected
--]]---------------------------------------------------------
function newobject:SetMultiselectEnabled(bool)
self.multiselect = bool
end
--[[---------------------------------------------------------
- func: GetMultiselectEnabled()
- desc: gets whether or not the object can have more
than one row selected
--]]---------------------------------------------------------
function newobject:GetMultiselectEnabled()
return self.multiselect
end end

View File

@ -20,6 +20,7 @@ function newobject:initialize(parent, data)
self.height = 25 self.height = 25
self.textx = 5 self.textx = 5
self.texty = 5 self.texty = 5
self.selected = false
self.internal = true self.internal = true
self.columndata = data self.columndata = data
@ -69,7 +70,7 @@ function newobject:draw()
local visible = self.visible local visible = self.visible
if visible == false then if not visible then
return return
end end
@ -103,11 +104,17 @@ function newobject:mousepressed(x, y, button)
return return
end end
if self.hover and button == "l" then local hover = self.hover
if hover and button == "l" then
local baseparent = self:GetBaseParent() local baseparent = self:GetBaseParent()
if baseparent and baseparent.type == "frame" then if baseparent and baseparent.type == "frame" then
baseparent:MakeTop() baseparent:MakeTop()
end end
local parent1 = self:GetParent()
local parent2 = parent1:GetParent()
local ctrldown = love.keyboard.isDown("lctrl")
parent2:SelectRow(self, ctrldown)
end end
end end
@ -122,12 +129,19 @@ function newobject:mousereleased(x, y, button)
return return
end end
if self.hover and button == "l" then if self.hover then
local parent1 = self:GetParent() local parent1 = self:GetParent()
local parent2 = parent1:GetParent() local parent2 = parent1:GetParent()
local onrowclicked = parent2.OnRowClicked if button == "l" then
if onrowclicked then local onrowclicked = parent2.OnRowClicked
onrowclicked(parent2, self, self.columndata) if onrowclicked then
onrowclicked(parent2, self, self.columndata)
end
elseif button == "r" then
local onrowrightclicked = parent2.OnRowRightClicked
if onrowrightclicked then
onrowrightclicked(parent2, self, self.columndata)
end
end end
end end
@ -194,6 +208,16 @@ function newobject:GetColorIndex()
end end
--[[---------------------------------------------------------
- func: SetColumnData(data)
- desc: sets the object's column data
--]]---------------------------------------------------------
function newobject:SetColumnData(data)
self.columndata = data
end
--[[--------------------------------------------------------- --[[---------------------------------------------------------
- func: GetColumnData() - func: GetColumnData()
- desc: gets the object's column data - desc: gets the object's column data
@ -202,4 +226,24 @@ function newobject:GetColumnData()
return self.columndata return self.columndata
end
--[[---------------------------------------------------------
- func: SetSelected(selected)
- desc: sets whether or not the object is selected
--]]---------------------------------------------------------
function newobject:SetSelected(selected)
self.selected = true
end
--[[---------------------------------------------------------
- func: GetSelected()
- desc: gets whether or not the object is selected
--]]---------------------------------------------------------
function newobject:GetSelected()
return self.selected
end end

View File

@ -24,14 +24,14 @@ function newobject:initialize()
self.offsetx = 0 self.offsetx = 0
self.extrawidth = 0 self.extrawidth = 0
self.extraheight = 0 self.extraheight = 0
self.buttonscrollamount = 200 self.buttonscrollamount = 0.10
self.mousewheelscrollamount = 1500 self.mousewheelscrollamount = 10
self.internal = false self.internal = false
self.hbar = false self.hbar = false
self.vbar = false self.vbar = false
self.autoscroll = false self.autoscroll = false
self.horizontalstacking = false self.horizontalstacking = false
self.dtscrolling = true self.dtscrolling = false
self.internals = {} self.internals = {}
self.children = {} self.children = {}
self.OnScroll = nil self.OnScroll = nil

View File

@ -115,9 +115,13 @@ skin.controls.columnlistheader_text_hover_color = {255, 255, 255, 255}
skin.controls.columnlistheader_text_font = smallfont skin.controls.columnlistheader_text_font = smallfont
-- columnlistrow -- columnlistrow
skin.controls.columnlistrow_body1_color = {232, 232, 232, 255} skin.controls.columnlistrow_body1_color = {245, 245, 245, 255}
skin.controls.columnlistrow_body2_color = {200, 200, 200, 255} skin.controls.columnlistrow_body2_color = {255, 255, 255, 255}
skin.controls.columnlistrow_body_selected_color = {26, 198, 255, 255}
skin.controls.columnlistrow_body_hover_color = {102, 217, 255, 255}
skin.controls.columnlistrow_text_color = {100, 100, 100, 255} skin.controls.columnlistrow_text_color = {100, 100, 100, 255}
skin.controls.columnlistrow_text_hover_color = {255, 255, 255, 255}
skin.controls.columnlistrow_text_selected_color = {255, 255, 255, 255}
-- modalbackground -- modalbackground
skin.controls.modalbackground_body_color = {255, 255, 255, 100} skin.controls.modalbackground_body_color = {255, 255, 255, 100}
@ -1395,13 +1399,29 @@ function skin.DrawColumnListRow(object)
local parent = object:GetParent() local parent = object:GetParent()
local cwidth, cheight = parent:GetParent():GetColumnSize() local cwidth, cheight = parent:GetParent():GetColumnSize()
local theight = font:getHeight("a") local theight = font:getHeight("a")
local hover = object:GetHover()
local selected = object:GetSelected()
local body1color = skin.controls.columnlistrow_body1_color local body1color = skin.controls.columnlistrow_body1_color
local body2color = skin.controls.columnlistrow_body2_color local body2color = skin.controls.columnlistrow_body2_color
local bodyhovercolor = skin.controls.columnlistrow_body_hover_color
local bodyselectedcolor = skin.controls.columnlistrow_body_selected_color
local textcolor = skin.controls.columnlistrow_text_color local textcolor = skin.controls.columnlistrow_text_color
local texthovercolor = skin.controls.columnlistrow_text_hover_color
local textselectedcolor = skin.controls.columnlistrow_text_selected_color
object:SetTextPos(5, height/2 - theight/2) object:SetTextPos(5, height/2 - theight/2)
if colorindex == 1 then if selected then
love.graphics.setColor(bodyselectedcolor)
love.graphics.rectangle("fill", x, y, width, height)
love.graphics.setColor(bordercolor)
skin.OutlinedRectangle(x, y, width, height, true, false, true, true)
elseif hover then
love.graphics.setColor(bodyhovercolor)
love.graphics.rectangle("fill", x, y, width, height)
love.graphics.setColor(bordercolor)
skin.OutlinedRectangle(x, y, width, height, true, false, true, true)
elseif colorindex == 1 then
love.graphics.setColor(body1color) love.graphics.setColor(body1color)
love.graphics.rectangle("fill", x + 1, y + 1, width - 2, height - 2) love.graphics.rectangle("fill", x + 1, y + 1, width - 2, height - 2)
love.graphics.setColor(bordercolor) love.graphics.setColor(bordercolor)
@ -1415,7 +1435,13 @@ function skin.DrawColumnListRow(object)
for k, v in ipairs(columndata) do for k, v in ipairs(columndata) do
love.graphics.setFont(font) love.graphics.setFont(font)
love.graphics.setColor(textcolor) if selected then
love.graphics.setColor(textselectedcolor)
elseif hover then
love.graphics.setColor(texthovercolor)
else
love.graphics.setColor(textcolor)
end
love.graphics.print(v, x + textx, y + texty) love.graphics.print(v, x + textx, y + texty)
x = x + cwidth x = x + cwidth
end end

View File

@ -115,9 +115,13 @@ skin.controls.columnlistheader_text_hover_color = {255, 255, 255, 255}
skin.controls.columnlistheader_text_font = smallfont skin.controls.columnlistheader_text_font = smallfont
-- columnlistrow -- columnlistrow
skin.controls.columnlistrow_body1_color = {232, 232, 232, 255} skin.controls.columnlistrow_body1_color = {245, 245, 245, 255}
skin.controls.columnlistrow_body2_color = {200, 200, 200, 255} skin.controls.columnlistrow_body2_color = {255, 255, 255, 255}
skin.controls.columnlistrow_body_selected_color = {255, 153, 0, 255}
skin.controls.columnlistrow_body_hover_color = {255, 173, 51, 255}
skin.controls.columnlistrow_text_color = {100, 100, 100, 255} skin.controls.columnlistrow_text_color = {100, 100, 100, 255}
skin.controls.columnlistrow_text_hover_color = {255, 255, 255, 255}
skin.controls.columnlistrow_text_selected_color = {255, 255, 255, 255}
-- modalbackground -- modalbackground
skin.controls.modalbackground_body_color = {255, 255, 255, 100} skin.controls.modalbackground_body_color = {255, 255, 255, 100}
@ -1395,13 +1399,29 @@ function skin.DrawColumnListRow(object)
local parent = object:GetParent() local parent = object:GetParent()
local cwidth, cheight = parent:GetParent():GetColumnSize() local cwidth, cheight = parent:GetParent():GetColumnSize()
local theight = font:getHeight("a") local theight = font:getHeight("a")
local hover = object:GetHover()
local selected = object:GetSelected()
local body1color = skin.controls.columnlistrow_body1_color local body1color = skin.controls.columnlistrow_body1_color
local body2color = skin.controls.columnlistrow_body2_color local body2color = skin.controls.columnlistrow_body2_color
local bodyhovercolor = skin.controls.columnlistrow_body_hover_color
local bodyselectedcolor = skin.controls.columnlistrow_body_selected_color
local textcolor = skin.controls.columnlistrow_text_color local textcolor = skin.controls.columnlistrow_text_color
local texthovercolor = skin.controls.columnlistrow_text_hover_color
local textselectedcolor = skin.controls.columnlistrow_text_selected_color
object:SetTextPos(5, height/2 - theight/2) object:SetTextPos(5, height/2 - theight/2)
if colorindex == 1 then if selected then
love.graphics.setColor(bodyselectedcolor)
love.graphics.rectangle("fill", x, y, width, height)
love.graphics.setColor(bordercolor)
skin.OutlinedRectangle(x, y, width, height, true, false, true, true)
elseif hover then
love.graphics.setColor(bodyhovercolor)
love.graphics.rectangle("fill", x, y, width, height)
love.graphics.setColor(bordercolor)
skin.OutlinedRectangle(x, y, width, height, true, false, true, true)
elseif colorindex == 1 then
love.graphics.setColor(body1color) love.graphics.setColor(body1color)
love.graphics.rectangle("fill", x + 1, y + 1, width - 2, height - 2) love.graphics.rectangle("fill", x + 1, y + 1, width - 2, height - 2)
love.graphics.setColor(bordercolor) love.graphics.setColor(bordercolor)
@ -1415,7 +1435,13 @@ function skin.DrawColumnListRow(object)
for k, v in ipairs(columndata) do for k, v in ipairs(columndata) do
love.graphics.setFont(font) love.graphics.setFont(font)
love.graphics.setColor(textcolor) if selected then
love.graphics.setColor(textselectedcolor)
elseif hover then
love.graphics.setColor(texthovercolor)
else
love.graphics.setColor(textcolor)
end
love.graphics.print(v, x + textx, y + texty) love.graphics.print(v, x + textx, y + texty)
x = x + cwidth x = x + cwidth
end end

View File

@ -268,4 +268,29 @@ function loveframes.util.Error(message)
error("[Love Frames] " ..message) error("[Love Frames] " ..message)
end end
--[[---------------------------------------------------------
- func: loveframes.util.GetCollisionCount()
- desc: gets the total number of objects colliding with
the mouse
--]]---------------------------------------------------------
function loveframes.util.GetCollisionCount()
local collisioncount = loveframes.collisioncount
return collisioncount
end
--[[---------------------------------------------------------
- func: loveframes.util.GetHover()
- desc: returns loveframes.hover, can be used to check
if the mouse is colliding with a visible
Love Frames object
--]]---------------------------------------------------------
function loveframes.util.GetHover()
return loveframes.hover
end