mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
SortWidget: sort alphabetically (#11705)
This commit is contained in:
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user