close menus when resizing windows

This commit is contained in:
Eduardo Bart 2012-01-04 23:55:07 -02:00
parent 30ce5e2ba9
commit 24c1f05d66
3 changed files with 40 additions and 4 deletions

View File

@ -19,7 +19,7 @@ function table.copy(t)
return res return res
end end
function table.selective_copy(t, keys) function table.selectivecopy(t, keys)
local res = { } local res = { }
for i,v in ipairs(keys) do for i,v in ipairs(keys) do
res[v] = t[v] res[v] = t[v]
@ -32,3 +32,21 @@ function table.merge(t, src)
t[k] = v t[k] = v
end end
end end
function table.find(t, value)
for k,v in pairs(t) do
if v == value then return k end
end
end
function table.removevalue(t, value)
local queue = {}
for k,v in pairs(t) do
if v == value then
table.insert(queue, k)
end
end
for i,v in pairs(queue) do
table.remove(t, i)
end
end

View File

@ -1,5 +1,7 @@
UIPopupMenu = extends(UIWidget) UIPopupMenu = extends(UIWidget)
local displayedMenuList = {}
function UIPopupMenu.create() function UIPopupMenu.create()
local menu = UIPopupMenu.internalCreate() local menu = UIPopupMenu.internalCreate()
local layout = UIVerticalLayout.create(menu) local layout = UIVerticalLayout.create(menu)
@ -8,6 +10,11 @@ function UIPopupMenu.create()
return menu return menu
end end
function UIPopupMenu:destroy()
table.removevalue(displayedMenuList, self)
UIWidget.destroy(self)
end
function UIPopupMenu:display(pos) function UIPopupMenu:display(pos)
-- don't display if not options was added -- don't display if not options was added
if self:getChildCount() == 0 then if self:getChildCount() == 0 then
@ -19,6 +26,7 @@ function UIPopupMenu:display(pos)
self:bindRectToParent() self:bindRectToParent()
self:grabMouse() self:grabMouse()
self:grabKeyboard() self:grabKeyboard()
table.insert(displayedMenuList, self)
end end
function UIPopupMenu:addOption(optionName, optionCallback) function UIPopupMenu:addOption(optionName, optionCallback)
@ -53,3 +61,12 @@ function UIPopupMenu:onKeyPress(keyCode, keyText, keyboardModifiers)
end end
return false return false
end end
local function onRootGeometryUpdate()
-- close all menus when the window is resized
for i,menu in ipairs(displayedMenuList) do
menu:destroy()
end
end
connect(rootWidget, { onGeometryUpdate = onRootGeometryUpdate} )

View File

@ -117,10 +117,11 @@
<item> openfile </item> <item> closefile </item> <item> openfile </item> <item> closefile </item>
<item> date </item> <item> clock </item> <item> date </item> <item> clock </item>
<item> string.trim </item> <item> string.starts </item> <item> string.trim </item> <item> string.starts </item>
<item> string.split </item> <item> string.split </item>
<item> table.dump </item> <item> table.copy </item> <item> table.dump </item> <item> table.copy </item>
<item> table.selective_copy </item> <item> table.merge </item> <item> table.selectivecopy </item> <item> table.merge </item>
<item> table.find </item> <item> table.removevalue </item>
<item> toboolean </item> <item> toboolean </item>
</list> </list>
<list name="otclient-core-functions"> <list name="otclient-core-functions">