sortwidget: sort alphabetically

reviewable/pr11705/r1
hius07 2 months ago committed by GitHub
parent caea0e8fb2
commit cbc5a80530
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -2,6 +2,7 @@ local BD = require("ui/bidi")
local Blitbuffer = require("ffi/blitbuffer") local Blitbuffer = require("ffi/blitbuffer")
local BottomContainer = require("ui/widget/container/bottomcontainer") local BottomContainer = require("ui/widget/container/bottomcontainer")
local Button = require("ui/widget/button") local Button = require("ui/widget/button")
local ButtonDialog = require("ui/widget/buttondialog")
local CenterContainer = require("ui/widget/container/centercontainer") local CenterContainer = require("ui/widget/container/centercontainer")
local CheckMark = require("ui/widget/checkmark") local CheckMark = require("ui/widget/checkmark")
local Device = require("device") local Device = require("device")
@ -132,7 +133,7 @@ local SortWidget = FocusManager:extend{
-- table of items to sort -- table of items to sort
item_table = nil, -- mandatory (array) item_table = nil, -- mandatory (array)
callback = nil, callback = nil,
sort_disabled = false sort_disabled = false,
} }
function SortWidget:init() function SortWidget:init()
@ -294,6 +295,8 @@ function SortWidget:init()
bottom_line_color = Blitbuffer.COLOR_DARK_GRAY, bottom_line_color = Blitbuffer.COLOR_DARK_GRAY,
bottom_line_h_padding = padding, bottom_line_h_padding = padding,
title = self.title, title = self.title,
left_icon = "appbar.menu",
left_icon_tap_callback = function() self:showMenu() end,
close_callback = function() self:onClose() end, close_callback = function() self:onClose() end,
show_parent = self, show_parent = self,
} }
@ -338,24 +341,24 @@ function SortWidget:init()
end end
function SortWidget:nextPage() function SortWidget:nextPage()
local new_page = math.min(self.show_page+1, self.pages) if self.show_page < self.pages then
if new_page > self.show_page then self.show_page = self.show_page + 1
self.show_page = new_page if self.marked > 0 then -- put selected item first in the page
if self.marked > 0 then
self:moveItem(self.items_per_page * (self.show_page - 1) + 1 - self.marked) self:moveItem(self.items_per_page * (self.show_page - 1) + 1 - self.marked)
else
self:_populateItems()
end end
self:_populateItems()
end end
end end
function SortWidget:prevPage() function SortWidget:prevPage()
local new_page = math.max(self.show_page-1, 1) if self.show_page > 1 then
if new_page < self.show_page then self.show_page = self.show_page - 1
self.show_page = new_page if self.marked > 0 then -- put selected item first in the page
if self.marked > 0 then
self:moveItem(self.items_per_page * (self.show_page - 1) + 1 - self.marked) self:moveItem(self.items_per_page * (self.show_page - 1) + 1 - self.marked)
else
self:_populateItems()
end end
self:_populateItems()
end end
end end
@ -472,6 +475,48 @@ function SortWidget:onSwipe(arg, ges_ev)
end end
end end
function SortWidget:showMenu()
local dialog
local buttons = {
{{
text = _("Sort A to Z"),
align = "left",
callback = function()
UIManager:close(dialog)
self:sortItems()
end,
}},
{{
text = _("Sort Z to A"),
align = "left",
callback = function()
UIManager:close(dialog)
self:sortItems(true)
end,
}},
}
dialog = ButtonDialog:new{
shrink_unneeded_width = true,
buttons = buttons,
anchor = function()
return self.title_bar.left_button.image.dimen
end,
}
UIManager:show(dialog)
end
function SortWidget:sortItems(reverse)
if not self.orig_item_table then
self.orig_item_table = util.tableDeepCopy(self.item_table)
end
local sort_func = reverse and function(a, b) return a.text > b.text end
or function(a, b) return a.text < b.text end
table.sort(self.item_table, sort_func)
self.show_page = 1
self.marked = 1 -- enable cancel button
self:_populateItems()
end
function SortWidget:onClose() function SortWidget:onClose()
UIManager:close(self) UIManager:close(self)
UIManager:setDirty(nil, "ui") UIManager:setDirty(nil, "ui")

Loading…
Cancel
Save