make menu work

This commit is contained in:
Eduardo Bart
2012-01-02 20:09:49 -02:00
parent 43c16a1643
commit 90600bbd69
10 changed files with 128 additions and 47 deletions

View File

@@ -17,11 +17,11 @@ PopupMenuButton < UIButton
$disabled:
color: #555555
PopupMenuFirstButton < PopupMenuButton
margin-top: 3
$first:
margin-top: 3
PopupMenuLastButton < PopupMenuButton
margin-bottom: 3
$last:
margin-bottom: 3
PopupMenuSeparator < UIWidget
margin-left: 2

View File

@@ -7,28 +7,50 @@ function UIPopupMenu.create()
local layout = UIVerticalLayout.create(menu)
layout:setFitParent(true)
menu:setLayout(layout)
menu:setStyle('PopupMenu')
return menu
end
function UIPopupMenu.display(otui, pos)
local menu = UI.display(otui, {x = pos.x, y = pos.y})
function UIPopupMenu.display(menu, pos)
UI.display(menu, {x = pos.x, y = pos.y})
menu:bindRectToParent()
menu:grabMouse()
menu:grabKeyboard()
return menu
end
function UIPopupMenu.addOption(menu, optionName, optionCallback)
local optionWidget = UIButton.create()
local lastOptionWidget = menu:getLastChild()
optionWidget.onClick = function()
optionCallback()
menu:destroy()
end
optionWidget:setText(optionName)
optionWidget:setStyle('PopupMenuButton')
menu:addChild(optionWidget)
end
function UIPopupMenu.addSeparator(menu)
local separatorWidget = UIWidget.create()
separatorWidget:setStyle('PopupMenuSeparator')
menu:addChild(separator)
end
-- hooked events
local function onWidgetStyleApply(widget, style)
if style and style.popupmenu then
widget.popupmenu = style.popupmenu
end
end
local function onWidgetMousePress(widget, mousePos, mouseButton)
if widget.popupmenu and mouseButton == MouseRightButton then
UIPopupMenu.display(widget.popupmenu, mousePos)
function UIPopupMenu.onMousePress(menu, mousePos, mouseButton)
-- clicks outside menu area destroys the menu
if not menu:containsPoint(mousePos) then
menu:destroy()
return true
end
return false
end
connect(UIWidget, { onStyleApply = onWidgetStyleApply,
onMousePress = onWidgetMousePress })
function UIPopupMenu.onKeyPress(menu, keyCode, keyText, keyboardModifiers)
if keyCode == KeyEscape then
menu:destroy()
return true
end
return false
end

View File

@@ -17,9 +17,6 @@ local InventorySlotAmmo = 10
-- public functions
function Inventory.create()
window = UI.display('inventory.otui', { parent = Game.gameRightPanel })
local itemWidget = window:getChildById('feet')
window:setHeight(itemWidget:getPosition().y + itemWidget:getHeight() - window:getPosition().y)
end
function Inventory.destroy()
@@ -66,6 +63,13 @@ function Inventory.onSoulChange(soul)
widget:setText("Soul:\n" .. soul)
end
function Inventory.onInventoryItemMousePress(itemWidget, mousePos, mouseButton)
local menu = UIPopupMenu.create()
menu:addOption('Look', function() print('look') end)
menu:addOption('Use', function() print('use') end)
menu:display(mousePos)
end
connect(Game, { onLogin = Inventory.create,
onLogout = Inventory.destroy,
onInventoryChange = Inventory.onInventoryChange,

View File

@@ -1,8 +1,9 @@
InvetoryItem < Item
popupmenu: /game_inventory/itempopupmenu.otui
&onMousePress: Inventory.onInventoryItemMousePress
UIWindow
width: 192
height: 148
margin-top: 10
margin-left: 6
margin-right: 6