diff --git a/frontend/apps/reader/modules/readerfooter.lua b/frontend/apps/reader/modules/readerfooter.lua index 1d010e4f9..53bc7e8ff 100644 --- a/frontend/apps/reader/modules/readerfooter.lua +++ b/frontend/apps/reader/modules/readerfooter.lua @@ -326,10 +326,7 @@ function ReaderFooter:init() text_font_bold = false, } - local mode_tbl = {} - local mode_name - self.mode_nb = 0 - self.mode_index = {} + -- Remove items not supported by the current device if not Device:isAndroid() then MODE.wifi_status = nil end @@ -339,23 +336,43 @@ function ReaderFooter:init() if Device:isDesktop() then MODE.battery = nil end - for k, v in pairs(MODE) do - mode_tbl[v] = k - end - for i = 0, #mode_tbl do - mode_name = mode_tbl[i] - if mode_name then - self.mode_index[self.mode_nb] = mode_name - self.mode_nb = self.mode_nb + 1 - end - end + + -- self.mode_index will be an array of MODE names, with an additional element + -- with key 0 for "off", which feels a bit strange but seems to work... + -- (The same is true for self.settings.order which is saved in settings.) + self.mode_index = {} + self.mode_nb = 0 + + local handled_modes = {} if self.settings.order then - while #self.settings.order < #self.mode_index do - self.settings.order[#self.settings.order + 1] = self.mode_index[#self.settings.order + 1] + -- Start filling self.mode_index from what's been ordered by the user and saved + for i=0, #self.settings.order do + local name = self.settings.order[i] + -- (if name has been removed from our supported MODEs: ignore it) + if MODE[name] then -- this mode still exists + self.mode_index[self.mode_nb] = name + self.mode_nb = self.mode_nb + 1 + handled_modes[name] = true + end + end + -- go on completing it with remaining new modes in MODE + end + -- If no previous self.settings.order, fill mode_index with what's in MODE + -- in the original indices order + local orig_indexes = {} + local orig_indexes_to_name = {} + for name, orig_index in pairs(MODE) do + if not handled_modes[name] then + table.insert(orig_indexes, orig_index) + orig_indexes_to_name[orig_index] = name end - self.mode_index = self.settings.order - self.mode_nb = #self.mode_index end + table.sort(orig_indexes) + for i = 1, #orig_indexes do + self.mode_index[self.mode_nb] = orig_indexes_to_name[orig_indexes[i]] + self.mode_nb = self.mode_nb + 1 + end + -- require("logger").dbg(self.mode_nb, self.mode_index) -- default margin (like self.horizontal_margin) if not self.settings.progress_margin_width then