104 lines
2.9 KiB
Plaintext
104 lines
2.9 KiB
Plaintext
draw_data = function()
|
|
love.graphics.setLineWidth(3)
|
|
local f, c, py = 36, 50, 5 -- font size, cell side, padding
|
|
local namepx = 5
|
|
love.graphics.setFont(love.graphics.newFont(f))
|
|
local rside = max_row_width(Data) + namepx*2 -- width of name column
|
|
local nt = table.size(Data)
|
|
local hrow = total_row_width(Data) + namepx*2*nt
|
|
local width = rside + hrow + App.width('Total') + namepx*2
|
|
local height = (nt+1)*c
|
|
local top, left = 30,30
|
|
local cx = column_xs(Rows, left+rside, namepx) -- right margin of each column
|
|
-- border
|
|
love.graphics.rectangle('line', left,top, width,height, 5,5)
|
|
do
|
|
-- first column for names
|
|
local hx = left+rside
|
|
love.graphics.line(hx, top, hx, top+height)
|
|
-- remaining columns
|
|
for i=1,#cx do
|
|
love.graphics.line(cx[i], top, cx[i], top+height)
|
|
end
|
|
end
|
|
-- rows
|
|
for i=1,#Rows do
|
|
love.graphics.line(left, top+i*c, left+width, top+i*c)
|
|
i = i+1
|
|
end
|
|
-- print out row headings
|
|
for i,name in ipairs(Rows) do
|
|
love.graphics.print(name, left+namepx, top+i*c+py)
|
|
end
|
|
-- print out column headings
|
|
local l = left+rside
|
|
for i=1,#Rows do
|
|
local r = cx[i]
|
|
local w = r-l
|
|
local px = (w - App.width(Rows[i])) / 2 -- x padding
|
|
love.graphics.print(Rows[i], l+px, top+py)
|
|
l = r
|
|
end
|
|
-- 'Total' doubles as a button that sorts the rows by teams' total score
|
|
button(Global_state, 'total', {
|
|
x=l, y=top,
|
|
w=App.width('Total')+namepx*2,
|
|
h=c,
|
|
bg = {r=0,g=0,b=0, a=0}, -- nothing
|
|
icon = function(params)
|
|
make_button_pop(params)
|
|
App.color{r=0, g=0, b=0}
|
|
love.graphics.print('Total', params.x+namepx, params.y+py)
|
|
end,
|
|
onpress1 = function()
|
|
Rows = ordered_keys(Data)
|
|
end
|
|
})
|
|
love.graphics.print('Total', l+namepx, top+py)
|
|
-- print out cells
|
|
for y,t1 in ipairs(Rows) do
|
|
l = left+rside
|
|
for x,t2 in ipairs(Rows) do
|
|
if t1 == t2 then
|
|
-- no button
|
|
local px = (cx[x] - l - App.width('X')) / 2
|
|
App.color{r=0, g=0, b=0}
|
|
love.graphics.print('X', l+px, top+y*c+py)
|
|
else
|
|
button(Global_state, t1..t2, {
|
|
x=l, y=top+y*c,
|
|
w=cx[x] - l,
|
|
h=c,
|
|
bg = {r=0,g=0,b=0, a=0}, -- nothing
|
|
icon = function(params)
|
|
make_button_pop(params)
|
|
if Data[t1][t2] then
|
|
local px = (params.w - App.width(Data[t1][t2])) / 2
|
|
App.color{r=0, g=0, b=0}
|
|
love.graphics.print(Data[t1][t2], params.x+px, params.y+py)
|
|
end
|
|
end,
|
|
onpress1 = function()
|
|
local v = Data[t1][t2]
|
|
if v == 'X' then
|
|
return
|
|
elseif v == nil then
|
|
Data[t1][t2] = 0 Data[t2][t1] = 2
|
|
elseif v == 0 then
|
|
Data[t1][t2] = 2 Data[t2][t1] = 0
|
|
elseif v == 2 then
|
|
Data[t1][t2] = nil Data[t2][t1] = nil
|
|
else
|
|
error('invalid value')
|
|
end
|
|
end,
|
|
})
|
|
end
|
|
l = cx[x]
|
|
end
|
|
local total = score(Data, t1)
|
|
local px = (App.width('Total') - App.width(total)) / 2
|
|
App.color{r=0, g=0, b=0}
|
|
love.graphics.print(score(Data, t1), l+px, top+y*c+py)
|
|
end
|
|
end |