diff --git a/frontend/apps/reader/modules/readerdictionary.lua b/frontend/apps/reader/modules/readerdictionary.lua index beb8abcfc..527f8676d 100644 --- a/frontend/apps/reader/modules/readerdictionary.lua +++ b/frontend/apps/reader/modules/readerdictionary.lua @@ -5,6 +5,7 @@ local Geom = require("ui/geometry") local Screen = require("ui/screen") local JSON = require("JSON") local DEBUG = require("dbg") +local _ = require("gettext") local ReaderDictionary = EventListener:new{} @@ -24,10 +25,21 @@ function ReaderDictionary:stardictLookup(word, box) local std_out = io.popen("./sdcv --utf8-input --utf8-output -nj "..("%q"):format(word), "r") local results_str = nil if std_out then results_str = std_out:read("*all") end - if results_str then - --DEBUG("result str:", word, results_str) - local ok, results = pcall(JSON.decode, JSON, results_str) - --DEBUG("lookup result table:", word, results) + --DEBUG("result str:", word, results_str) + local ok, results = pcall(JSON.decode, JSON, results_str) + if ok and results then + DEBUG("lookup result table:", word, results) + self:showDict(results, box) + else + -- dummy results + results = { + { + dict = "", + word = word, + definition = _("No definition found."), + } + } + DEBUG("dummy result table:", word, results) self:showDict(results, box) end end diff --git a/frontend/apps/reader/modules/readermenu.lua b/frontend/apps/reader/modules/readermenu.lua index 66c868b47..8dd3d4f7b 100644 --- a/frontend/apps/reader/modules/readermenu.lua +++ b/frontend/apps/reader/modules/readermenu.lua @@ -1,15 +1,17 @@ local InputContainer = require("ui/widget/container/inputcontainer") local CenterContainer = require("ui/widget/container/centercontainer") +local InfoMessage = require("ui/widget/infomessage") +local InputDialog = require("ui/widget/inputdialog") local TouchMenu = require("ui/widget/touchmenu") +local GestureRange = require("ui/gesturerange") local UIManager = require("ui/uimanager") local Device = require("ui/device") -local GestureRange = require("ui/gesturerange") local Geom = require("ui/geometry") local Event = require("ui/event") local Screen = require("ui/screen") local Menu = require("ui/widget/menu") -local InfoMessage = require("ui/widget/infomessage") local Language = require("ui/language") +local DEBUG = require("dbg") local _ = require("gettext") local ReaderMenu = InputContainer:new{ @@ -81,6 +83,7 @@ function ReaderMenu:setUpdateItemTable() G_reader_settings:saveSetting("night_mode", not night_mode) end }) + table.insert(self.tab_item_table.main, self:genRefreshRateMenu()) table.insert(self.tab_item_table.main, { text = _("Show advanced options"), checked_func = function() return G_reader_settings:readSetting("show_advanced") end, @@ -108,6 +111,88 @@ function ReaderMenu:setUpdateItemTable() }) end +function ReaderMenu:genRefreshRateMenu() + local custom_1 = function() return G_reader_settings:readSetting("refresh_rate_1") or 12 end + local custom_2 = function() return G_reader_settings:readSetting("refresh_rate_2") or 22 end + local custom_3 = function() return G_reader_settings:readSetting("refresh_rate_3") or 99 end + return { + text = _("E-ink full refresh rate"), + sub_item_table = { + { + text = _("Every page"), + checked_func = function() return UIManager:getRefreshRate() == 1 end, + callback = function() UIManager:setRefreshRate(1) end, + }, + { + text = _("Every 6 pages"), + checked_func = function() return UIManager:getRefreshRate() == 6 end, + callback = function() UIManager:setRefreshRate(6) end, + }, + { + text_func = function() return _("Custom ") .. "1: " .. custom_1() .. _(" pages") end, + checked_func = function() return UIManager:getRefreshRate() == custom_1() end, + callback = function() UIManager:setRefreshRate(custom_1()) end, + hold_callback = function() self:makeCustomRateDialog("refresh_rate_1") end, + }, + { + text_func = function() return _("Custom ") .. "2: " .. custom_2() .. _(" pages") end, + checked_func = function() return UIManager:getRefreshRate() == custom_2() end, + callback = function() UIManager:setRefreshRate(custom_2()) end, + hold_callback = function() self:makeCustomRateDialog("refresh_rate_2") end, + }, + { + text_func = function() return _("Custom ") .. "3: " .. custom_3() .. _(" pages") end, + checked_func = function() return UIManager:getRefreshRate() == custom_3() end, + callback = function() UIManager:setRefreshRate(custom_3()) end, + hold_callback = function() self:makeCustomRateDialog("refresh_rate_3") end, + }, + } + } +end + +function ReaderMenu:makeCustomRate(custom_rate) + local number = tonumber(self.custom_dialog:getInputText()) + G_reader_settings:saveSetting(custom_rate, number) +end + +function ReaderMenu:makeCustomRateDialog(custom_rate) + self.custom_dialog = InputDialog:new{ + title = _("Input page number for a full refresh"), + input_hint = "(1 - 99)", + buttons = { + { + { + text = _("Cancel"), + callback = function() + self:closeMakeCustomDialog() + end, + }, + { + text = _("OK"), + callback = function() + self:makeCustomRate(custom_rate) + self:closeMakeCustomDialog() + end, + }, + }, + }, + input_type = "number", + enter_callback = function() + self:makeCustomRate(custom_rate) + self:closeMakeCustomDialog() + end, + width = Screen:getWidth() * 0.8, + height = Screen:getHeight() * 0.2, + } + self.custom_dialog:onShowKeyboard() + UIManager:show(self.custom_dialog) +end + +function ReaderMenu:closeMakeCustomDialog() + self.custom_dialog:onClose() + UIManager:close(self.custom_dialog) +end + function ReaderMenu:onShowReaderMenu() if #self.tab_item_table.main == 0 then self:setUpdateItemTable() diff --git a/frontend/apps/reader/modules/readertypeset.lua b/frontend/apps/reader/modules/readertypeset.lua index 2b46dcd8f..e5649526a 100644 --- a/frontend/apps/reader/modules/readertypeset.lua +++ b/frontend/apps/reader/modules/readertypeset.lua @@ -1,4 +1,6 @@ local InputContainer = require("ui/widget/container/inputcontainer") +local ConfirmBox = require("ui/widget/confirmbox") +local UIManager = require("ui/uimanager") local Screen = require("ui/screen") local Event = require("ui/event") local DEBUG = require("dbg") @@ -33,9 +35,12 @@ function ReaderTypeset:onReadSettings(config) self:onSetPageMargins(config:readSetting("copt_page_margins") or DCREREADER_CONFIG_MARGIN_SIZES_MEDIUM) -- default to enable floating punctuation + -- the floating punctuation should not be boolean value for the following + -- expression otherwise a false value will never be returned but numerical + -- values will survive this expression self.floating_punctuation = config:readSetting("floating_punctuation") or - G_reader_settings:readSetting("floating_punctuation") or true - self:toggleFloatingPunctuation(self.floating_punctuation and 1 or 0) + G_reader_settings:readSetting("floating_punctuation") or 1 + self:toggleFloatingPunctuation(self.floating_punctuation) end function ReaderTypeset:onSaveSettings() @@ -113,6 +118,13 @@ function ReaderTypeset:toggleEmbeddedStyleSheet(toggle) end function ReaderTypeset:toggleFloatingPunctuation(toggle) + -- for some reason the toggle value read from history files may stay boolean + -- and there seems no more elegant way to convert boolean values to numbers + if toggle == true then + toggle = 1 + elseif toggle == false then + toggle = 0 + end self.ui.document:setFloatingPunctuation(toggle) self.ui:handleEvent(Event:new("UpdatePos")) end @@ -125,11 +137,22 @@ function ReaderTypeset:addToMainMenu(tab_item_table) }) table.insert(tab_item_table.typeset, { text = _("Floating punctuation"), - checked_func = function() return self.floating_punctuation == true end, + checked_func = function() return self.floating_punctuation == 1 end, callback = function() - self.floating_punctuation = not self.floating_punctuation - self:toggleFloatingPunctuation(self.floating_punctuation and 1 or 0) - end + self.floating_punctuation = self.floating_punctuation == 1 and 0 or 1 + self:toggleFloatingPunctuation(self.floating_punctuation) + end, + hold_callback = function() self:makeDefaultFloatingPunctuation() end, + }) +end + +function ReaderTypeset:makeDefaultFloatingPunctuation() + local toggler = self.floating_punctuation == 1 and _("On") or _("Off") + UIManager:show(ConfirmBox:new{ + text = _("Set default floating punctuation to ")..toggler.."?", + ok_callback = function() + G_reader_settings:saveSetting("floating_punctuation", self.floating_punctuation) + end, }) end diff --git a/frontend/ui/gesturerange.lua b/frontend/ui/gesturerange.lua index 2ae6a3c61..5e2085d03 100644 --- a/frontend/ui/gesturerange.lua +++ b/frontend/ui/gesturerange.lua @@ -1,12 +1,13 @@ local TimeVal = require("ui/timeval") local GestureRange = { + -- gesture matching type ges = nil, -- spatial range limits the gesture emitting position range = nil, -- temproal range limits the gesture emitting rate rate = nil, - -- span limits of this gesture + -- scale limits of this gesture scale = nil, } @@ -22,11 +23,27 @@ function GestureRange:match(gs) return false end if self.range then - if not self.range:contains(gs.pos) then + -- sometimes widget dimenension is not available when creating a gesturerage + -- for some action, now we accept a range function that will be later called + -- and the result of which will be used to check gesture match + -- e.g. range = function() return self.dimen end + -- for inputcontainer given that the x and y field of `self.dimen` is only + -- filled when the inputcontainer is painted into blitbuffer + local range = nil + if type(self.range) == "function" then + range = self.range() + else + range = self.range + end + if not range:contains(gs.pos) then return false end end if self.rate then + -- This filed restraints the upper limit rate(matches per second). + -- It's most useful for e-ink devices with less powerfull CPUs and + -- screens that cannot handle gesture events that otherwise will be + -- generated local last_time = self.last_time or TimeVal:new{} if gs.time - last_time > TimeVal:new{usec = 1000000 / self.rate} then self.last_time = gs.time diff --git a/frontend/ui/uimanager.lua b/frontend/ui/uimanager.lua index 37ae83f4c..a128906dc 100644 --- a/frontend/ui/uimanager.lua +++ b/frontend/ui/uimanager.lua @@ -45,7 +45,7 @@ local UIManager = { -- after each ui loop partial_refresh = false, -- trigger a full refresh when counter reaches FULL_REFRESH_COUNT - FULL_REFRESH_COUNT = DRCOUNTMAX, + FULL_REFRESH_COUNT = G_reader_settings:readSetting("full_refresh_count") or DRCOUNTMAX, refresh_count = 0, event_handlers = nil, @@ -222,6 +222,19 @@ function UIManager:removeZMQ(zeromq) end end +-- set full refresh rate for e-ink screen +-- and make the refresh rate persistant in global reader settings +function UIManager:setRefreshRate(rate) + DEBUG("set screen full refresh rate", rate) + self.FULL_REFRESH_COUNT = rate + G_reader_settings:saveSetting("full_refresh_count", rate) +end + +-- get full refresh rate for e-ink screen +function UIManager:getRefreshRate(rate) + return self.FULL_REFRESH_COUNT +end + -- signal to quit function UIManager:quit() self._running = false diff --git a/frontend/ui/widget/dictquicklookup.lua b/frontend/ui/widget/dictquicklookup.lua index bf03a7111..d184ea4ed 100644 --- a/frontend/ui/widget/dictquicklookup.lua +++ b/frontend/ui/widget/dictquicklookup.lua @@ -239,6 +239,7 @@ function DictQuickLookup:changeToNextDict() end function DictQuickLookup:changeDictionary(index) + if not self.results[index] then return end self.dict_index = index self.dictionary = self.results[index].dict self.lookupword = self.results[index].word @@ -306,4 +307,13 @@ function DictQuickLookup:onClose() return true end +function DictQuickLookup:onSwipe(arg, ges) + if ges.direction == "west" then + self:changeToNextDict() + elseif ges.direction == "east" then + self:changeToPrevDict() + end + return true +end + return DictQuickLookup diff --git a/frontend/ui/widget/scrolltextwidget.lua b/frontend/ui/widget/scrolltextwidget.lua index bdb45fbb4..43effb72e 100644 --- a/frontend/ui/widget/scrolltextwidget.lua +++ b/frontend/ui/widget/scrolltextwidget.lua @@ -50,10 +50,10 @@ function ScrollTextWidget:init() self.dimen = Geom:new(self[1]:getSize()) if Device:isTouchDevice() then self.ges_events = { - Swipe = { + ScrollText = { GestureRange:new{ ges = "swipe", - range = self.dimen, + range = function() return self.dimen end, }, }, } @@ -70,7 +70,7 @@ function ScrollTextWidget:updateScrollBar(text) ) end -function ScrollTextWidget:onSwipe(arg, ges) +function ScrollTextWidget:onScrollText(arg, ges) if ges.direction == "north" then self.text_widget:scrollDown() self:updateScrollBar(self.text_widget) @@ -79,7 +79,6 @@ function ScrollTextWidget:onSwipe(arg, ges) self:updateScrollBar(self.text_widget) end UIManager:setDirty(self.dialog, "partial") - return true end return ScrollTextWidget diff --git a/l10n/templates/koreader.pot b/l10n/templates/koreader.pot index 9b532c359..067f0398b 100644 --- a/l10n/templates/koreader.pot +++ b/l10n/templates/koreader.pot @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: https://github.com/koreader/koreader-base/issues\n" -"POT-Creation-Date: 2014-07-17 14:32+0000\n" +"POT-Creation-Date: 2014-07-26 14:24+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,6 +17,13 @@ msgid "" " others." msgstr "" +#: frontend/apps/reader/modules/readermenu.lua:132 +#: frontend/apps/reader/modules/readermenu.lua:138 +#: frontend/apps/reader/modules/readermenu.lua:144 +msgid "" +" pages" +msgstr "" + #: frontend/ui/widget/configdialog.lua:582 msgid "" " to " @@ -58,7 +65,7 @@ msgid "" "Apply" msgstr "" -#: frontend/apps/reader/modules/readertypeset.lua:55 +#: frontend/apps/reader/modules/readertypeset.lua:66 msgid "" "Auto" msgstr "" @@ -74,6 +81,7 @@ msgid "" msgstr "" #: frontend/apps/reader/modules/readergoto.lua:36 +#: frontend/apps/reader/modules/readermenu.lua:165 #: frontend/ui/widget/confirmbox.lua:29 #: plugins/evernote.koplugin/main.lua:124 #: plugins/zsync.koplugin/main.lua:279 @@ -117,17 +125,24 @@ msgid "" "Copy" msgstr "" +#: frontend/apps/reader/modules/readermenu.lua:132 +#: frontend/apps/reader/modules/readermenu.lua:138 +#: frontend/apps/reader/modules/readermenu.lua:144 +msgid "" +"Custom " +msgstr "" + #: frontend/apps/filemanager/filemanager.lua:104 msgid "" "Cut" msgstr "" -#: frontend/apps/reader/modules/readerfont.lua:184 +#: frontend/apps/reader/modules/readerfont.lua:185 msgid "" "Decrease gamma to " msgstr "" -#: frontend/apps/reader/modules/readerfont.lua:154 +#: frontend/apps/reader/modules/readerfont.lua:155 msgid "" "Decrease line space to " msgstr "" @@ -164,11 +179,16 @@ msgid "" "Document Language" msgstr "" -#: frontend/apps/reader/modules/readermenu.lua:136 +#: frontend/apps/reader/modules/readermenu.lua:221 msgid "" "Document menu" msgstr "" +#: frontend/apps/reader/modules/readermenu.lua:119 +msgid "" +"E-ink full refresh rate" +msgstr "" + #: frontend/apps/reader/modules/readerhighlight.lua:194 msgid "" "Edit" @@ -201,6 +221,16 @@ msgid "" "Evernote" msgstr "" +#: frontend/apps/reader/modules/readermenu.lua:127 +msgid "" +"Every 6 pages" +msgstr "" + +#: frontend/apps/reader/modules/readermenu.lua:122 +msgid "" +"Every page" +msgstr "" + #: plugins/evernote.koplugin/main.lua:82 msgid "" "Export all notes in this book" @@ -237,6 +267,11 @@ msgid "" "Fine Tuning" msgstr "" +#: frontend/apps/reader/modules/readertypeset.lua:139 +msgid "" +"Floating punctuation" +msgstr "" + #: frontend/ui/data/strings.lua:24 msgid "" "Font Weight" @@ -283,7 +318,7 @@ msgid "" msgstr "" #: frontend/apps/filemanager/filemanagermenu.lua:103 -#: frontend/apps/reader/modules/readermenu.lua:102 +#: frontend/apps/reader/modules/readermenu.lua:105 msgid "" "Help" msgstr "" @@ -304,12 +339,12 @@ msgid "" "Hyphenation" msgstr "" -#: frontend/apps/reader/modules/readerfont.lua:181 +#: frontend/apps/reader/modules/readerfont.lua:182 msgid "" "Increase gamma to " msgstr "" -#: frontend/apps/reader/modules/readerfont.lua:158 +#: frontend/apps/reader/modules/readerfont.lua:159 msgid "" "Increase line space to " msgstr "" @@ -319,6 +354,11 @@ msgid "" "Indentation" msgstr "" +#: frontend/apps/reader/modules/readermenu.lua:160 +msgid "" +"Input page number for a full refresh" +msgstr "" + #: frontend/apps/reader/modules/readerhighlight.lua:93 msgid "" "Invert" @@ -386,11 +426,16 @@ msgid "" msgstr "" #: frontend/apps/filemanager/filemanagermenu.lua:85 -#: frontend/apps/reader/modules/readermenu.lua:76 +#: frontend/apps/reader/modules/readermenu.lua:78 msgid "" "Night mode" msgstr "" +#: frontend/apps/reader/modules/readerdictionary.lua:39 +msgid "" +"No definition found." +msgstr "" + #: reader.lua:95 msgid "" "No reader engine for this file" @@ -402,11 +447,22 @@ msgid "" msgstr "" #: frontend/apps/reader/modules/readerfrontlight.lua:115 +#: frontend/apps/reader/modules/readermenu.lua:171 #: frontend/ui/widget/confirmbox.lua:28 msgid "" "OK" msgstr "" +#: frontend/apps/reader/modules/readertypeset.lua:150 +msgid "" +"Off" +msgstr "" + +#: frontend/apps/reader/modules/readertypeset.lua:150 +msgid "" +"On" +msgstr "" + #: reader.lua:85 msgid "" "Opening file" @@ -438,7 +494,7 @@ msgid "" msgstr "" #: frontend/apps/filemanager/filemanagermenu.lua:106 -#: frontend/apps/reader/modules/readermenu.lua:105 +#: frontend/apps/reader/modules/readermenu.lua:108 msgid "" "Please report bugs to \n" "https://github.com/koreader/koreader/issues" @@ -469,7 +525,7 @@ msgid "" "Received file:" msgstr "" -#: frontend/apps/reader/modules/readerfont.lua:208 +#: frontend/apps/reader/modules/readerfont.lua:209 msgid "" "Redrawing with font " msgstr "" @@ -504,7 +560,12 @@ msgid "" "Set default " msgstr "" -#: frontend/apps/reader/modules/readerfont.lua:223 +#: frontend/apps/reader/modules/readertypeset.lua:152 +msgid "" +"Set default floating punctuation to " +msgstr "" + +#: frontend/apps/reader/modules/readerfont.lua:224 msgid "" "Set default font to " msgstr "" @@ -514,7 +575,7 @@ msgid "" "Set default zoom mode to " msgstr "" -#: frontend/apps/reader/modules/readerfont.lua:139 +#: frontend/apps/reader/modules/readerfont.lua:140 msgid "" "Set font size to " msgstr "" @@ -524,7 +585,7 @@ msgid "" "Set highlight drawer " msgstr "" -#: frontend/apps/reader/modules/readertypeset.lua:9 +#: frontend/apps/reader/modules/readertypeset.lua:11 msgid "" "Set render style" msgstr "" @@ -534,7 +595,7 @@ msgid "" "Share" msgstr "" -#: frontend/apps/reader/modules/readermenu.lua:85 +#: frontend/apps/reader/modules/readermenu.lua:88 msgid "" "Show advanced options" msgstr "" @@ -630,7 +691,7 @@ msgid "" msgstr "" #: frontend/apps/filemanager/filemanagermenu.lua:95 -#: frontend/apps/reader/modules/readermenu.lua:94 +#: frontend/apps/reader/modules/readermenu.lua:97 msgid "" "Version" msgstr "" @@ -716,7 +777,7 @@ msgid "" "bold" msgstr "" -#: frontend/apps/reader/modules/readertypeset.lua:49 +#: frontend/apps/reader/modules/readertypeset.lua:60 msgid "" "clear all external styles" msgstr ""