From c042ced031abbe2044ca68b761afc008bdb0d5b1 Mon Sep 17 00:00:00 2001 From: Brandon Dyck Date: Mon, 15 Apr 2024 21:27:34 -0600 Subject: [PATCH] Make time controls hideable --- main.lua | 78 ++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 48 insertions(+), 30 deletions(-) diff --git a/main.lua b/main.lua index 7745ed7..3a434f5 100644 --- a/main.lua +++ b/main.lua @@ -49,15 +49,54 @@ function love.load() clock = Clock:new(nil, diameter, clockTransform) local column2X = diameter + 2*margin - local controls = loveframes.Create("panel"):SetPos(column2X, margin) - local toggleTime = loveframes.Create("checkbox"):SetParent(controls):SetPos(0,0) - toggleTime:SetText("Show time") - local hourBox = loveframes.Create("numberbox"):SetMinMax(1, 12):SetValue(12) - hourBox:SetParent(controls):SetPos(0,30) - local minuteBox = loveframes.Create("numberbox"):SetMinMax(0, 59):SetValue(0) - loveframes.Create("text"):SetText(":"):SetParent(controls):SetPos(80,30) - minuteBox:SetParent(controls):SetPos(100,30) + local timeInputs = loveframes.Create("panel") + :SetY(30) + local hourBox = loveframes.Create("numberbox") + :SetMinMax(1, 12) + :SetValue(12) + :SetParent(timeInputs) + timeInputs:SetHeight(hourBox:GetHeight()) + loveframes.Create("text") + :SetText(":") + :SetParent(timeInputs):SetX(80) + local minuteBox = loveframes.Create("numberbox") + :SetMinMax(0, 59) + :SetValue(0) + :SetParent(timeInputs) + :SetX(100) + local controls = loveframes.Create("collapsiblecategory") + :SetPos(column2X, margin) + :SetObject(timeInputs) + + function controls:OnOpenedClosed() + if self:GetOpen() then + self:SetText("Hide time") + else + self:SetText("Show time") + end + end + controls:OnOpenedClosed() + local function setClock() + local t = Time:new(hourBox:GetValue(), minuteBox:GetValue()) + clock:setTime(t) + end + hourBox.OnValueChanged = setClock + minuteBox.OnValueChanged = setClock + + local function updateInputNoCallback(input, value) + local callback = input.OnValueChanged + input.OnValueChanged = nil + input:SetValue(value) + input.OnValueChanged = callback + end + + local function updateInputs(time) + local h, m = time:get() + updateInputNoCallback(hourBox, h) + updateInputNoCallback(minuteBox, math.floor(m)) + end + clock.onSetHands = updateInputs local exitNote = "Press \"Esc\" to exit." local exitNoteWidth = love.graphics.getWidth() - column2X - margin @@ -65,30 +104,9 @@ function love.load() local _, wraps = exitNoteFont:getWrap(exitNote, exitNoteWidth) local exitNoteY = love.graphics.getHeight() - table.maxn(wraps) * exitNoteFont:getHeight() - margin - function setClock() - local t = Time:new(hourBox:GetValue(), minuteBox:GetValue()) - clock:setTime(t) - end - hourBox.OnValueChanged = setClock - minuteBox.OnValueChanged = setClock - - function updateInputNoCallback(input, value) - local callback = input.OnValueChanged - input.OnValueChanged = nil - input:SetValue(value) - input.OnValueChanged = callback - end - - function updateInputs(time) - local h, m = time:get() - updateInputNoCallback(hourBox, h) - updateInputNoCallback(minuteBox, math.floor(m)) - end - clock.onSetHands = updateInputs - love.graphics.setBackgroundColor(0.02,0.53,0.77) - function draw() + local function draw() loveframes.draw() clock:draw() love.graphics.printf(exitNote, exitNoteFont, column2X, exitNoteY, exitNoteWidth)