diff --git a/plugins/vocabbuilder.koplugin/main.lua b/plugins/vocabbuilder.koplugin/main.lua index 4276a0b4d..731955eab 100644 --- a/plugins/vocabbuilder.koplugin/main.lua +++ b/plugins/vocabbuilder.koplugin/main.lua @@ -46,9 +46,10 @@ local UIManager = require("ui/uimanager") local VerticalGroup = require("ui/widget/verticalgroup") local VerticalSpan = require("ui/widget/verticalspan") local WidgetContainer = require("ui/widget/container/widgetcontainer") -local T = require("ffi/util").template +local util = require("util") local _ = require("gettext") local C_ = _.pgettext +local T = require("ffi/util").template -------- shared values local word_face = Font:getFace("x_smallinfofont") @@ -77,7 +78,13 @@ local MenuDialog = FocusManager:extend{ function MenuDialog:init() self.layout = {} if Device:hasKeys() then - self.key_events.Close = { { Device.input.group.Back } } + local back_group = util.tableDeepCopy(Device.input.group.Back) + if Device:hasFewKeys() then + table.insert(back_group, "Left") + else + table.insert(back_group, "Menu") + end + self.key_events.Close = { { back_group } } end if Device:isTouchDevice() then self.ges_events.Tap = { @@ -150,7 +157,7 @@ function MenuDialog:setupPluginMenu() text = _("Filter books"), callback = function() self:onClose() - self.show_parent:onShowFilter() + self.vocabbuilder:onShowFilter() end } @@ -160,7 +167,7 @@ function MenuDialog:setupPluginMenu() self:onClose() settings.reverse = not settings.reverse saveSettings() - self.show_parent:reloadItems() + self.vocabbuilder:reloadItems() end } @@ -211,9 +218,9 @@ function MenuDialog:setupPluginMenu() sync_settings.onConfirm = function(server) settings.server = server saveSettings() - DB:batchUpdateItems(self.show_parent.item_table) + DB:batchUpdateItems(self.vocabbuilder.item_table) SyncService.sync(server, DB.path, DB.onSync, false) - self.show_parent:reloadItems() + self.vocabbuilder:reloadItems() end UIManager:close(self.sync_dialogue) UIManager:close(self) @@ -251,9 +258,9 @@ function MenuDialog:setupPluginMenu() callback = function() UIManager:close(self.sync_dialogue) UIManager:close(self) - DB:batchUpdateItems(self.show_parent.item_table) + DB:batchUpdateItems(self.vocabbuilder.item_table) SyncService.sync(server, DB.path, DB.onSync, false) - self.show_parent:reloadItems() + self.vocabbuilder:reloadItems() end } } @@ -277,7 +284,7 @@ function MenuDialog:setupPluginMenu() text = _("Search"), callback = function() UIManager:close(self) - self.show_parent:showSearchDialog() + self.vocabbuilder:showSearchDialog() end } @@ -343,7 +350,7 @@ function MenuDialog:setupPluginMenu() } } } - + self:refocusWidget() end function MenuDialog:setupBookMenu(sort_item, onSuccess) @@ -489,7 +496,7 @@ end --[[-- Individual word info dialogue widget --]]-- -local WordInfoDialog = InputContainer:extend{ +local WordInfoDialog = FocusManager:extend{ title = nil, book_title = nil, dates = nil, @@ -503,6 +510,7 @@ local WordInfoDialog = InputContainer:extend{ local book_title_triangle = BD.mirroredUILayout() and " ⯇" or " ⯈" local word_info_dialog_width function WordInfoDialog:init() + self.layout = {} if self.dismissable then if Device:hasKeys() then self.key_events.Close = { { Device.input.group.Back } } @@ -550,7 +558,7 @@ function WordInfoDialog:init() } local buttons = {{reset_button, remove_button}} - if self.show_parent.item.last_due_time then + if self.vocabbuilder.item.last_due_time then table.insert(buttons, {{ text = _("Undo study status"), callback = function() @@ -586,13 +594,18 @@ function WordInfoDialog:init() padding = Size.padding.button, bordersize = 0, callback = function() - self.show_parent:onShowBookAssignment(function(new_book_title) + self.vocabbuilder:onShowBookAssignment(function(new_book_title) self.book_title = new_book_title self.book_title_button:setText(new_book_title..book_title_triangle, width) end) end, show_parent = self } + + table.insert(self.layout, {copy_button}) + table.insert(self.layout, {self.book_title_button}) + self:mergeLayoutInVertical(focus_button) + local has_context = self.prev_context or self.next_context self[1] = CenterContainer:new{ dimen = Screen:getSize(), @@ -1036,7 +1049,7 @@ function VocabItemWidget:showMore() undo_callback = function() self:undo() end, - show_parent = self + vocabbuilder = self } UIManager:show(dialogue) @@ -1286,6 +1299,7 @@ function VocabularyBuilderWidget:init() self.key_events.Close = { { Device.input.group.Back } } self.key_events.NextPage = { { Device.input.group.PgFwd } } self.key_events.PrevPage = { { Device.input.group.PgBack } } + self.key_events.ShowMenu = { { "Menu" }} end if Device:isTouchDevice() then self.ges_events.Swipe = { @@ -1326,7 +1340,7 @@ function VocabularyBuilderWidget:init() with_bottom_line = true, bottom_line_h_padding = Size.padding.large, left_icon = "appbar.menu", - left_icon_tap_callback = function() self:showMenu() end, + left_icon_tap_callback = function() self:onShowMenu() end, title = self.title, close_callback = function() self:onClose() end, show_parent = self, @@ -1370,7 +1384,7 @@ function VocabularyBuilderWidget:init() background = Blitbuffer.COLOR_WHITE, content } - self.show_parent[1] = self + self.vocabbuilder[1] = self end function VocabularyBuilderWidget:refreshFooter() @@ -1539,6 +1553,7 @@ function VocabularyBuilderWidget:showSearchDialog() { { text = _("Cancel"), + id = "close", callback = function() UIManager:close(dialog) end, @@ -1735,7 +1750,7 @@ function VocabularyBuilderWidget:resetItems() self:_populateItems() end -function VocabularyBuilderWidget:showMenu() +function VocabularyBuilderWidget:onShowMenu() local menu = MenuDialog:new{ is_edit_mode = self.is_edit_mode, edit_callback = function() @@ -1751,7 +1766,7 @@ function VocabularyBuilderWidget:showMenu() reset_callback = function() self:resetItems() end, - show_parent = self + vocabbuilder = self } menu:setupPluginMenu() @@ -1806,6 +1821,17 @@ function VocabularyBuilderWidget:onShowFilter() end, show_parent = self } + + if Device:hasKeys() then + sort_widget.key_events.ShowMenu = { { "Menu" }} + sort_widget.onShowMenu = function(this) + local item = this:getFocusItem() + if item and item.onHold then + item:onHold() + end + end + end + UIManager:show(sort_widget) end @@ -1922,8 +1948,8 @@ end function VocabularyBuilderWidget:onClose() DB:batchUpdateItems(self.item_table) UIManager:close(self) - self.show_parent.widget = nil - self.show_parent[1] = nil + self.vocabbuilder.widget = nil + self.vocabbuilder[1] = nil -- UIManager:setDirty(self, "ui") end @@ -2024,7 +2050,7 @@ end function VocabBuilder:onShowVocabBuilder() self.widget = VocabularyBuilderWidget:new{ title = _("Vocabulary builder"), - show_parent = self, + vocabbuilder = self, ui = self.ui } UIManager:show(self.widget)