add return button in menu

pull/876/head
chrox 10 years ago
parent c12cb0367b
commit 69bb4a3df3

@ -11,6 +11,7 @@ local FocusManager = require("ui/widget/focusmanager")
local TextWidget = require("ui/widget/textwidget")
local OverlapGroup = require("ui/widget/overlapgroup")
local VerticalSpan = require("ui/widget/verticalspan")
local HorizontalSpan = require("ui/widget/horizontalspan")
local VerticalGroup = require("ui/widget/verticalgroup")
local HorizontalGroup = require("ui/widget/horizontalgroup")
local Button = require("ui/widget/button")
@ -302,6 +303,9 @@ local Menu = FocusManager:new{
item_group = nil,
page_info = nil,
page_return = nil,
paths = {}, -- table to trace navigation path
-- set this to true to not paint as popup menu
is_borderless = false,
@ -377,17 +381,13 @@ function Menu:init()
bordersize = 0,
show_parent = self,
}
self.page_info_spacer = Button:new{
icon = "resources/icons/appbar.spacer.png",
callback = function() end, -- NoOp
bordersize = 0,
show_parent = self,
self.page_info_spacer = HorizontalSpan:new{
width = Screen:scaleByDPI(32),
}
self.page_info_left_chev:hide()
self.page_info_right_chev:hide()
self.page_info_first_chev:hide()
self.page_info_last_chev:hide()
self.page_info_spacer:hide()
self.page_info_text = TextWidget:new{
text = "",
@ -403,6 +403,21 @@ function Menu:init()
self.page_info_last_chev,
}
-- return button
self.page_return_arrow = Button:new{
icon = "resources/icons/appbar.arrow.left.up.png",
callback = function() self:onReturn() end,
bordersize = 0,
show_parent = self,
}
self.page_return_arrow:hide()
self.return_button = HorizontalGroup:new{
HorizontalSpan:new{
width = Screen:scaleByDPI(5),
},
self.page_return_arrow,
}
local header = VerticalGroup:new{
VerticalSpan:new{width = self.header_padding},
self.title_bar,
@ -412,6 +427,16 @@ function Menu:init()
dimen = self.dimen:copy(),
self.page_info,
}
local page_return = BottomContainer:new{
dimen = self.dimen:copy(),
WidgetContainer:new{
dimen = Geom:new{
w = Screen:getWidth(),
h = self.page_return_arrow:getSize().h,
},
self.return_button,
}
}
local content = nil
if self.no_title then
@ -421,7 +446,8 @@ function Menu:init()
align = "left",
body,
},
footer
page_return,
footer,
}
else
content = OverlapGroup:new{
@ -431,7 +457,8 @@ function Menu:init()
header,
body,
},
footer
page_return,
footer,
}
end
@ -515,6 +542,7 @@ function Menu:updateItems(select_number)
self.layout = {}
self.item_group:clear()
self.page_info:resetLayout()
self.return_button:resetLayout()
self:_recalculateDimen()
-- default to select the first item
@ -571,33 +599,30 @@ function Menu:updateItems(select_number)
self.page_info_right_chev:showHide(self.page_num > 1)
self.page_info_first_chev:showHide(self.page_num > 2)
self.page_info_last_chev:showHide(self.page_num > 2)
self.page_info_spacer:showHide(self.page_num > 2)
self.page_return_arrow:showHide(self.onReturn ~= nil)
self.page_info_left_chev:enableDisable(self.page > 1)
self.page_info_right_chev:enableDisable(self.page < self.page_num)
self.page_info_first_chev:enableDisable(self.page > 1)
self.page_info_last_chev:enableDisable(self.page < self.page_num)
self.page_return_arrow:enableDisable(#self.paths > 0)
else
self.page_info_text.text = _("no choices available")
end
-- FIXME: this is a dirty hack to clear previous menus
-- UIManager.repaint_all = true
--UIManager:setDirty(self)
--nicolua
-- nicolua
-- FIXMED: dirty hack to clear previous menus
UIManager:setDirty(self.show_parent or self)
end
function Menu:swithItemTable(new_title, new_item_table, itemnumber)
if self.menu_title then
if self.menu_title and new_title then
self.menu_title.text = new_title
end
if itemnumber then
self.page = math.ceil(itemnumber / self.perpage)
else
self.page = 1
end
self.item_table = new_item_table
@ -672,6 +697,9 @@ function Menu:onMenuHold(item)
end
function Menu:onNextPage()
if self.onNext and self.page == self.page_num - 1 then
self:onNext()
end
if self.page < self.page_num then
self.page = self.page + 1
self:updateItems(1)

Loading…
Cancel
Save