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

Loading…
Cancel
Save