From 695e095a1a883f8041457daa0d623aa07b743eec Mon Sep 17 00:00:00 2001 From: chrox Date: Wed, 24 Apr 2013 22:57:03 +0800 Subject: [PATCH] add a demo version dictionary --- frontend/ui/reader/readerdictionary.lua | 41 +++++++++++++-- frontend/ui/widget/dict.lua | 69 +++++++++++++++++++++++++ 2 files changed, 105 insertions(+), 5 deletions(-) create mode 100644 frontend/ui/widget/dict.lua diff --git a/frontend/ui/reader/readerdictionary.lua b/frontend/ui/reader/readerdictionary.lua index 3f1eafeea..bc5e1a973 100644 --- a/frontend/ui/reader/readerdictionary.lua +++ b/frontend/ui/reader/readerdictionary.lua @@ -1,24 +1,55 @@ require "ui/device" +require "ui/widget/dict" ReaderDictionary = EventListener:new{} function ReaderDictionary:init() local dev_mod = Device:getModel() if dev_mod == "KindlePaperWhite" or dev_mod == "KindleTouch" then - require "liblipclua" + require("liblipclua") + JSON = require("JSON") self.lipc_handle = lipc.init("com.github.koreader.dictionary") end end function ReaderDictionary:onLookupWord(word) DEBUG("lookup word:", word) - if self.lipc_handle and word then - -- start indicator depends on pillow being enabled + --self:quickLookup() + if self.lipc_handle and JSON and word then self.lipc_handle:set_string_property( "com.lab126.booklet.kpvbooklet.dict", "lookup", word) - local definitions = self.lipc_handle:get_string_property( + local results_str = self.lipc_handle:get_string_property( "com.lab126.booklet.kpvbooklet.word", word) - DEBUG("definitions of word:", word, definitions) + if results_str then + --DEBUG("def str:", word, definitions) + local ok, results_tab = pcall(JSON.decode, JSON, results_str) + --DEBUG("lookup result table:", word, results_tab) + if results_tab[1] then + self:quickLookup(results_tab[1]) + end + end end return true end + +function ReaderDictionary:quickLookup(result) +-- UIManager:show(DictQuickLookup:new{ +-- dict = "Oxford Dictionary of English", +-- definition = "coordination n. [mass noun] 1 the organization of the different elements of a \ +-- complex body or activity so as to enable them to work together effectively: an important managerial \ +-- task is the control and coordination of activities. cooperative effort resulting in an effective \ +-- relationship: action groups work in coordination with local groups to end rainforest destruction. \ +-- the ability to use different parts of the body together smoothly and efficiently: changing from \ +-- one foot position to another requires coordination and balance.", +-- id = "/mnt/us/documents/dictionaries/Oxford_Dictionary_of_English.azw", +-- lang = "en", +-- }) + if result then + UIManager:show(DictQuickLookup:new{ + dict = result.dict, + definition = result.definition, + id = result.ID, + lang = result.lang, + }) + end +end diff --git a/frontend/ui/widget/dict.lua b/frontend/ui/widget/dict.lua new file mode 100644 index 000000000..5716bdeda --- /dev/null +++ b/frontend/ui/widget/dict.lua @@ -0,0 +1,69 @@ +require "ui/widget/container" + +--[[ +Display quick lookup word definition +]] +DictQuickLookup = InputContainer:new{ + dict = nil, + definition = nil, + id = nil, + lang = nil, + + title_face = Font:getFace("tfont", 20), + content_face = Font:getFace("cfont", 18), + width = Screen:getWidth() - 100 +} + +function DictQuickLookup:init() + if Device:hasKeyboard() then + key_events = { + AnyKeyPressed = { { Input.group.Any }, + seqtext = "any key", doc = _("close dialog") } + } + else + self.ges_events.TapClose = { + GestureRange:new{ + ges = "tap", + range = Geom:new{ + x = 0, y = 0, + w = Screen:getWidth(), + h = Screen:getHeight(), + } + } + } + end + -- we construct the actual content here because self.text is only available now + self[1] = CenterContainer:new{ + dimen = Screen:getSize(), + FrameContainer:new{ + margin = 2, + background = 0, + VerticalGroup:new{ + align = "center", + -- title bar + TextBoxWidget:new{ + text = self.dict, + face = self.title_face, + width = self.width, + }, + VerticalSpan:new{ width = 20 }, + TextBoxWidget:new{ + text = self.definition, + face = self.content_face, + width = self.width, + } + } + } + } +end + +function DictQuickLookup:onAnyKeyPressed() + -- triggered by our defined key events + UIManager:close(self) + return true +end + +function DictQuickLookup:onTapClose() + UIManager:close(self) + return true +end