SortWidget: sort alphabetically (#11705)

reviewable/pr11737/r1
hius07 2 weeks ago committed by GitHub
parent e8544316a8
commit 8ff846ba6e
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 BottomContainer = require("ui/widget/container/bottomcontainer")
local Button = require("ui/widget/button")
local ButtonDialog = require("ui/widget/buttondialog")
local CenterContainer = require("ui/widget/container/centercontainer")
local CheckMark = require("ui/widget/checkmark")
local Device = require("device")
@ -132,7 +133,7 @@ local SortWidget = FocusManager:extend{
-- table of items to sort
item_table = nil, -- mandatory (array)
callback = nil,
sort_disabled = false
sort_disabled = false,
}
function SortWidget:init()
@ -294,6 +295,8 @@ function SortWidget:init()
bottom_line_color = Blitbuffer.COLOR_DARK_GRAY,
bottom_line_h_padding = padding,
title = self.title,
left_icon = not self.sort_disabled and "appbar.menu",
left_icon_tap_callback = function() self:showMenu() end,
close_callback = function() self:onClose() end,
show_parent = self,
}
@ -338,24 +341,24 @@ function SortWidget:init()
end
function SortWidget:nextPage()
local new_page = math.min(self.show_page+1, self.pages)
if new_page > self.show_page then
self.show_page = new_page
if self.marked > 0 then
if self.show_page < self.pages then
self.show_page = self.show_page + 1
if self.marked > 0 then -- put selected item first in the page
self:moveItem(self.items_per_page * (self.show_page - 1) + 1 - self.marked)
else
self:_populateItems()
end
self:_populateItems()
end
end
function SortWidget:prevPage()
local new_page = math.max(self.show_page-1, 1)
if new_page < self.show_page then
self.show_page = new_page
if self.marked > 0 then
if self.show_page > 1 then
self.show_page = self.show_page - 1
if self.marked > 0 then -- put selected item first in the page
self:moveItem(self.items_per_page * (self.show_page - 1) + 1 - self.marked)
else
self:_populateItems()
end
self:_populateItems()
end
end
@ -472,6 +475,64 @@ function SortWidget:onSwipe(arg, ges_ev)
end
end
function SortWidget:showMenu()
local dialog
local buttons = {
{{
text = _("Sort A to Z"),
align = "left",
callback = function()
UIManager:close(dialog)
self:sortItems("strcoll")
end,
}},
{{
text = _("Sort Z to A"),
align = "left",
callback = function()
UIManager:close(dialog)
self:sortItems("strcoll", true)
end,
}},
{{
text = _("Sort A to Z (natural)"),
align = "left",
callback = function()
UIManager:close(dialog)
self:sortItems("natural")
end,
}},
{{
text = _("Sort Z to A (natural)"),
align = "left",
callback = function()
UIManager:close(dialog)
self:sortItems("natural", 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(collate, reverse_collate)
if not self.orig_item_table then
self.orig_item_table = util.tableDeepCopy(self.item_table)
end
local FileChooser = require("ui/widget/filechooser")
local sort_func = FileChooser:getSortingFunction(FileChooser.collates[collate], reverse_collate)
table.sort(self.item_table, sort_func)
self.show_page = 1
self.marked = 1 -- enable cancel button
self:_populateItems()
end
function SortWidget:onClose()
UIManager:close(self)
UIManager:setDirty(nil, "ui")

Loading…
Cancel
Save