opus/sys/modules/opus/ui/components/SlideOut.lua

86 lines
1.6 KiB
Lua

local class = require('opus.class')
local UI = require('opus.ui')
--[[-- SlideOut --]]--
UI.SlideOut = class(UI.Window)
UI.SlideOut.defaults = {
UIElement = 'SlideOut',
pageType = 'modal',
}
function UI.SlideOut:layout()
UI.Window.layout(self)
if not self.canvas then
self.canvas = self:addLayer()
else
self.canvas:resize(self.width, self.height)
end
end
function UI.SlideOut:enable()
end
function UI.SlideOut:toggle()
if self.enabled then
self:hide()
else
self:show()
end
end
function UI.SlideOut:show(...)
self:addTransition('expandUp')
self.canvas:raise()
self.canvas:setVisible(true)
UI.Window.enable(self, ...)
self:draw()
self:capture(self)
self:focusFirst()
end
function UI.SlideOut:disable()
self.canvas:setVisible(false)
UI.Window.disable(self)
end
function UI.SlideOut:hide()
self:disable()
self:release(self)
self:refocus()
end
function UI.SlideOut:eventHandler(event)
if event.type == 'slide_show' then
self:show()
return true
elseif event.type == 'slide_hide' then
self:hide()
return true
end
end
function UI.SlideOut.example()
-- for the transistion to work properly, the parent must have a canvas
return UI.ActiveLayer {
backgroundColor = colors.cyan,
button = UI.Button {
x = 2, y = 2,
text = 'show',
},
slideOut = UI.SlideOut {
backgroundColor = colors.yellow,
y = -4, height = 4,
button = UI.Button {
x = 2, y = 2,
text = 'hide',
},
},
eventHandler = function (self, event)
if event.type == 'button_press' then
self.slideOut.canvas.xxx = true
self.slideOut:toggle()
end
end,
}
end