|
|
|
@ -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)
|
|
|
|
|