-- https://gist.github.com/GammaGames/17e0c64e932e6a5b10919af380276fb1 local pd = playdate local gfx = Graphics local box = playout.box.new local text = playout.text.new local window = { padding = 8, border = 2, borderRadius = 1, minWidth=160, maxWidth=210, backgroundColor = gfx.kColorWhite, font = Noble.Text.FONT_NEWSLEAK } local label = { padding = 4 } local labelText = { alignment = kTextAlignment.left } local input = { padding = 4, paddingLeft = 8, borderRadius = 2, border = 1, minWidth = 140, hAlign = playout.kAlignStart } local inputText = { alignment = kTextAlignment.left, wrap = false } local button = { padding = 4, paddingLeft = 8 } local buttonHover = { padding = 4, paddingLeft = 8, borderRadius = 2, border = 2, backgroundColor = gfx.kColorWhite, font = Noble.Text.FONT_NEWSLEAK_BOLD, } function notify(_text, callback) local tree = playout.tree.new( box({ direction = playout.kDirectionVertical, spacing = 4, style = window, }, { text(_text, labelText), box({ style = button, tabIndex = 1 }, { text("Okay") }), }) ) tree:computeTabIndex() local nodes = tree.tabIndex local selectedIndex = 1 nodes[selectedIndex].style = buttonHover pd.inputHandlers.push({ AButtonDown = function() pd.inputHandlers.pop() callback() end, BButtonDown = function() pd.inputHandlers.pop() callback() end, }, true) return tree:asSprite() end function confirm(_text, callback) local tree = playout.tree.new( box({ direction = playout.kDirectionVertical, spacing = 4, style = window }, { box({ style = label}, { text(_text, labelText) }), box({ direction = playout.kDirectionHorizontal, spacing = 8 }, { box({ style = button, tabIndex = 1 }, { text("No") }), box({ style = button, tabIndex = 2 }, { text("Yes") }), }) }) ) tree:computeTabIndex() local nodes = tree.tabIndex local selectedIndex = 1 nodes[selectedIndex].style = buttonHover pd.inputHandlers.push({ leftButtonDown = function() nodes[selectedIndex].style = button selectedIndex = math.ringInt(selectedIndex - 1, 1, #nodes) nodes[selectedIndex].style = buttonHover tree:draw() end, rightButtonDown = function() nodes[selectedIndex].style = button selectedIndex = math.ringInt(selectedIndex + 1, 1, #nodes) nodes[selectedIndex].style = buttonHover tree:draw() end, AButtonUp = function() pd.inputHandlers.pop() callback(selectedIndex == 2) end, BButtonUp = function() pd.inputHandlers.pop() callback(false) end, }, true) return tree:asSprite() end function prompt(_text, value, callback) local tree = playout.tree.new( box({ direction = playout.kDirectionVertical, style = window, spacing = 4, hAlign = playout.kAlignStart }, { box({ style = label }, { text(_text, labelText) }), box({ style = input, tabIndex = 1 }, { text(value, inputText)}), }) ) tree:computeTabIndex() local nodes = tree.tabIndex local input = nodes[1].children[1] pd.keyboard.show(value) function pd.keyboard.textChangedCallback() input.text = pd.keyboard.text tree:layout() tree:draw() end function pd.keyboard.keyboardWillHideCallback(ok) callback(ok, pd.keyboard.text) end return tree:asSprite() end