From cea353323eae7f3fd04f9eef8844203fc3670f37 Mon Sep 17 00:00:00 2001 From: Giorgio Micotti Date: Mon, 5 Aug 2013 23:06:26 +0200 Subject: [PATCH] Initial light control widget; final fixes for kobo light --- frontend/ui/device.lua | 7 +++ frontend/ui/reader/readerfrontlight.lua | 70 ++++++++++++++++++++++++- frontend/ui/reader/readermenu.lua | 9 +++- frontend/ui/readerui.lua | 4 +- frontend/ui/widget/menu.lua | 1 + 5 files changed, 86 insertions(+), 5 deletions(-) diff --git a/frontend/ui/device.lua b/frontend/ui/device.lua index 34d859365..997954401 100644 --- a/frontend/ui/device.lua +++ b/frontend/ui/device.lua @@ -105,6 +105,13 @@ function Device:isTouchDevice() return (self.model == "KindlePaperWhite") or (self.model == "KindleTouch") or self:isKobo() or util.isEmulated() end +function Device:hasFrontlight() + if not self.model then + self.model = self:getModel() + end + return (self.model == "KindlePaperWhite") or (self.model == "Kobo_dragon") or (self.model == "Kobo_kraken") or (self.model == "Kobo_phoenix") or util.isEmulated() +end + function Device:setTouchInputDev(dev) self.touch_dev = dev end diff --git a/frontend/ui/reader/readerfrontlight.lua b/frontend/ui/reader/readerfrontlight.lua index 93f1f75b5..3ab2d2555 100644 --- a/frontend/ui/reader/readerfrontlight.lua +++ b/frontend/ui/reader/readerfrontlight.lua @@ -1,7 +1,10 @@ require "ui/widget/container" +require "ui/widget/inputdialog" require "ui/device" ReaderFrontLight = InputContainer:new{ + fldial_menu_title = ("Frontlight Settings"), + fl_dialog_title = ("Frontlight Level"), steps = {0,1,2,3,4,5,6,7,8,9,10}, intensity = nil, fl = nil, @@ -31,7 +34,11 @@ function ReaderFrontLight:init() end if Device:isKobo() then self.fl = kobolight.open() - self.intensity = 20 + self.intensity = G_reader_settings:readSetting("frontlight_intensity") + if not self.intensity then + self.intensity = 20 + end + self:setIntensity(self.intensity, "Set intensity") end end @@ -54,7 +61,7 @@ function ReaderFrontLight:onAdjust(arg, ges) end function ReaderFrontLight:setIntensity(intensity, msg) - if self.lipc_handle then + if self.lipc_handle then intensity = intensity < 0 and 0 or intensity intensity = intensity > 24 and 24 or intensity self.intensity = intensity @@ -65,6 +72,8 @@ function ReaderFrontLight:setIntensity(intensity, msg) }) end if Device:isKobo() then + intensity = intensity < 1 and 1 or intensity + intensity = intensity > 100 and 100 or intensity if self.fl == nil then ReaderFrontLight:init() end @@ -87,3 +96,60 @@ function ReaderFrontLight:toggle() end return true end + +function ReaderFrontLight:addToMainMenu(tab_item_table) + -- insert fldial command to main reader menu + table.insert(tab_item_table.main, { + text = self.fldial_menu_title, + callback = function() + self:onShowFlDialog() + end, + }) +end + +function ReaderFrontLight:onShowFlDialog() + DEBUG("show fldial dialog") + self.fl_dialog = InputDialog:new{ + title = self.fl_dialog_title, + input_hint = "(1 - 100)", + buttons = { + { + { + text = _("Apply"), + enabled = true, + callback = function() + self:fldialIntensity() + end, + }, + { + text = _("OK"), + enabled = true, + callback = function() + self:fldialIntensity() + self:close() + end, + }, + + }, + }, + input_type = "number", + width = Screen:getWidth() * 0.8, + height = Screen:getHeight() * 0.2, + } + self.fl_dialog:onShowKeyboard() + UIManager:show(self.fl_dialog) +end + +function ReaderFrontLight:close() + self.fl_dialog:onClose() + G_reader_settings:saveSetting("frontlight_intensity", self.intensity) + UIManager:close(self.fl_dialog) +end + +function ReaderFrontLight:fldialIntensity() + local number = tonumber(self.fl_dialog:getInputText()) + if number then + self:setIntensity(number, "Set intensity") + end + return true +end diff --git a/frontend/ui/reader/readermenu.lua b/frontend/ui/reader/readermenu.lua index e0d297a56..35055b663 100644 --- a/frontend/ui/reader/readermenu.lua +++ b/frontend/ui/reader/readermenu.lua @@ -56,7 +56,14 @@ function ReaderMenu:setUpdateItemTable() for _, widget in pairs(self.registered_widgets) do widget:addToMainMenu(self.tab_item_table) end - + if Device:hasFrontlight() then + table.insert(self.tab_item_table.main, { + text = _("Frontlight settings"), + callback = function() + ReaderFrontLight:onShowFlDialog() + end + }) + end table.insert(self.tab_item_table.main, { text = _("Help"), callback = function() diff --git a/frontend/ui/readerui.lua b/frontend/ui/readerui.lua index 96b8fd079..877ccb200 100644 --- a/frontend/ui/readerui.lua +++ b/frontend/ui/readerui.lua @@ -129,14 +129,14 @@ function ReaderUI:init() view = self[1], ui = self } + table.insert(self.active_widgets, reader_ss) -- frontlight controller local reader_fl = ReaderFrontLight:new{ dialog = self.dialog, view = self[1], ui = self } - table.insert(self.active_widgets, reader_ss) - table.insert(self.active_widgets, reader_fl) + table.insert(self, reader_fl) if self.document.info.has_pages then -- for page specific controller diff --git a/frontend/ui/widget/menu.lua b/frontend/ui/widget/menu.lua index fc157a2df..4b3cbdd86 100644 --- a/frontend/ui/widget/menu.lua +++ b/frontend/ui/widget/menu.lua @@ -1,6 +1,7 @@ require "ui/widget/container" require "ui/widget/focusmanager" require "ui/widget/infomessage" +require "ui/widget/frontlight" require "ui/widget/button" require "ui/widget/text" require "ui/widget/group"