101 lines
2.6 KiB
Plaintext
101 lines
2.6 KiB
Plaintext
|
sub init()
|
||
|
m.buttonBackground = m.top.findNode("buttonBackground")
|
||
|
m.buttonIcon = m.top.findNode("buttonIcon")
|
||
|
m.buttonText = m.top.findNode("buttonText")
|
||
|
|
||
|
m.buttonText.visible = false
|
||
|
|
||
|
m.originalWidth = 0
|
||
|
|
||
|
m.top.observeField("background", "onBackgroundChanged")
|
||
|
m.top.observeField("icon", "onIconChanged")
|
||
|
m.top.observeField("text", "onTextChanged")
|
||
|
m.top.observeField("height", "onHeightChanged")
|
||
|
m.top.observeField("width", "onWidthChanged")
|
||
|
m.top.observeField("padding", "onPaddingChanged")
|
||
|
m.top.observeField("focusedChild", "onFocusChanged")
|
||
|
|
||
|
m.top.observeField("highlighted", "onHighlightChanged")
|
||
|
end sub
|
||
|
|
||
|
sub onFocusChanged()
|
||
|
if m.top.hasFocus()
|
||
|
m.buttonText.visible = true
|
||
|
m.buttonBackground.blendColor = m.top.focusBackground
|
||
|
m.top.width = 250
|
||
|
else
|
||
|
m.buttonText.visible = false
|
||
|
m.top.width = m.originalWidth
|
||
|
onHighlightChanged()
|
||
|
end if
|
||
|
end sub
|
||
|
|
||
|
sub onHighlightChanged()
|
||
|
if m.top.highlighted
|
||
|
m.buttonBackground.blendColor = m.top.highlightBackground
|
||
|
else
|
||
|
m.buttonBackground.blendColor = m.top.background
|
||
|
end if
|
||
|
end sub
|
||
|
|
||
|
sub onBackgroundChanged()
|
||
|
m.buttonBackground.blendColor = m.top.background
|
||
|
m.top.unobserveField("background")
|
||
|
end sub
|
||
|
|
||
|
sub onIconChanged()
|
||
|
m.buttonIcon.uri = m.top.icon
|
||
|
end sub
|
||
|
|
||
|
sub onTextChanged()
|
||
|
m.buttonText.text = m.top.text
|
||
|
end sub
|
||
|
|
||
|
sub setIconSize()
|
||
|
height = m.buttonBackground.height
|
||
|
width = m.buttonBackground.width
|
||
|
if height > 0 and width > 0
|
||
|
' TODO: Use smallest number between them
|
||
|
m.buttonIcon.height = m.top.height
|
||
|
|
||
|
if m.top.padding > 0
|
||
|
m.buttonIcon.height = m.buttonIcon.height - m.top.padding
|
||
|
end if
|
||
|
|
||
|
m.buttonIcon.width = m.buttonIcon.height
|
||
|
|
||
|
m.buttonIcon.translation = [m.top.padding, ((height - m.buttonIcon.height) / 2)]
|
||
|
m.buttonText.translation = [m.top.padding + m.buttonIcon.width + 10, 12]
|
||
|
end if
|
||
|
end sub
|
||
|
|
||
|
sub onHeightChanged()
|
||
|
m.buttonBackground.height = m.top.height
|
||
|
setIconSize()
|
||
|
end sub
|
||
|
|
||
|
sub onWidthChanged()
|
||
|
if m.originalWidth = 0
|
||
|
m.originalWidth = m.top.width
|
||
|
end if
|
||
|
|
||
|
m.buttonBackground.width = m.top.width
|
||
|
setIconSize()
|
||
|
end sub
|
||
|
|
||
|
sub onPaddingChanged()
|
||
|
setIconSize()
|
||
|
end sub
|
||
|
|
||
|
function onKeyEvent(key as string, press as boolean) as boolean
|
||
|
if not press then return false
|
||
|
|
||
|
if key = "OK" and m.top.hasFocus()
|
||
|
' Simply toggle the selected field to trigger the next event
|
||
|
m.top.selected = not m.top.selected
|
||
|
return true
|
||
|
end if
|
||
|
|
||
|
return false
|
||
|
end function
|