From 877cff29334ee9569d7e50b6249804addcce962f Mon Sep 17 00:00:00 2001 From: chrox Date: Thu, 1 May 2014 18:37:12 +0800 Subject: [PATCH] invert button on tap --- .../apps/reader/modules/readercropping.lua | 2 ++ frontend/ui/widget/button.lua | 10 +++++- frontend/ui/widget/buttondialog.lua | 1 + frontend/ui/widget/buttontable.lua | 1 + frontend/ui/widget/confirmbox.lua | 2 ++ frontend/ui/widget/dictquicklookup.lua | 15 +++++---- frontend/ui/widget/inputdialog.lua | 1 + frontend/ui/widget/menu.lua | 2 ++ frontend/ui/widget/touchmenu.lua | 33 ++++++++++++++++--- 9 files changed, 55 insertions(+), 12 deletions(-) diff --git a/frontend/apps/reader/modules/readercropping.lua b/frontend/apps/reader/modules/readercropping.lua index 439176474..df2a07fee 100644 --- a/frontend/apps/reader/modules/readercropping.lua +++ b/frontend/apps/reader/modules/readercropping.lua @@ -32,6 +32,7 @@ function PageCropDialog:init() radius = 7, text_font_face = "cfont", text_font_size = 20, + show_parent = self, } local cancel_button = Button:new{ text = self.cancel_text, @@ -41,6 +42,7 @@ function PageCropDialog:init() radius = 7, text_font_face = "cfont", text_font_size = 20, + show_parent = self, } local ok_container = RightContainer:new{ dimen = Geom:new{ w = Screen:getWidth()*0.33, h = Screen:getHeight()/12}, diff --git a/frontend/ui/widget/button.lua b/frontend/ui/widget/button.lua index eb7415b4a..fb77eae03 100644 --- a/frontend/ui/widget/button.lua +++ b/frontend/ui/widget/button.lua @@ -6,7 +6,9 @@ local Geom = require("ui/geometry") local GestureRange = require("ui/gesturerange") local FrameContainer = require("ui/widget/container/framecontainer") local CenterContainer = require("ui/widget/container/centercontainer") +local UIManager = require("ui/uimanager") local Device = require("ui/device") +local DEBUG = require("dbg") local _ = require("gettext") --[[ @@ -139,7 +141,13 @@ end function Button:onTapSelect() if self.enabled then - self.callback() + self[1].invert = true + UIManager:setDirty(self.show_parent, "partial") + UIManager:scheduleIn(0.1, function() + self.callback() + self[1].invert = false + UIManager:setDirty(self.show_parent, "partial") + end) end return true end diff --git a/frontend/ui/widget/buttondialog.lua b/frontend/ui/widget/buttondialog.lua index 611b8369c..ad4794acd 100644 --- a/frontend/ui/widget/buttondialog.lua +++ b/frontend/ui/widget/buttondialog.lua @@ -39,6 +39,7 @@ function ButtonDialog:init() ButtonTable:new{ width = Screen:getWidth()*0.9, buttons = self.buttons, + show_parent = self, }, background = 0, bordersize = 2, diff --git a/frontend/ui/widget/buttontable.lua b/frontend/ui/widget/buttontable.lua index 36ead3d11..e431c1d56 100644 --- a/frontend/ui/widget/buttontable.lua +++ b/frontend/ui/widget/buttontable.lua @@ -42,6 +42,7 @@ function ButtonTable:init() padding = 0, text_font_face = self.button_font_face, text_font_size = self.button_font_size, + show_parent = self.show_parent, } local button_dim = button:getSize() local vertical_sep = LineWidget:new{ diff --git a/frontend/ui/widget/confirmbox.lua b/frontend/ui/widget/confirmbox.lua index 86cc44c40..9fa53c281 100644 --- a/frontend/ui/widget/confirmbox.lua +++ b/frontend/ui/widget/confirmbox.lua @@ -43,6 +43,7 @@ function ConfirmBox:init() self.ok_callback() UIManager:close(self) end, + show_parent = self, } local cancel_button = Button:new{ text = self.cancel_text, @@ -51,6 +52,7 @@ function ConfirmBox:init() self.cancel_callback() UIManager:close(self) end, + show_parent = self, } self.layout = { { ok_button, cancel_button } } diff --git a/frontend/ui/widget/dictquicklookup.lua b/frontend/ui/widget/dictquicklookup.lua index b5688adff..7d6f1b082 100644 --- a/frontend/ui/widget/dictquicklookup.lua +++ b/frontend/ui/widget/dictquicklookup.lua @@ -34,7 +34,7 @@ local DictQuickLookup = InputContainer:new{ content_face = Font:getFace("cfont", DDICT_FONT_SIZE), width = nil, height = nil, - + title_padding = Screen:scaleByDPI(5), title_margin = Screen:scaleByDPI(2), word_padding = Screen:scaleByDPI(2), @@ -113,13 +113,13 @@ function DictQuickLookup:update() height = self.height*0.7, dialog = self, }, - } + } local button_table = ButtonTable:new{ width = math.max(self.width, definition:getSize().w), button_font_face = "cfont", button_font_size = 20, buttons = { - { + { { text = _("<<"), enabled = self:isPrevDictAvaiable(), @@ -153,6 +153,7 @@ function DictQuickLookup:update() }, }, zero_sep = true, + show_parent = self, } local title_bar = LineWidget:new{ --background = 8, @@ -161,12 +162,12 @@ function DictQuickLookup:update() h = Screen:scaleByDPI(2), } } - + self.dict_bar = OverlapGroup:new{ dimen = {w = button_table:getSize().w, h = self.dict_title:getSize().h}, self.dict_title, } - + self.dict_frame = FrameContainer:new{ radius = 8, bordersize = 3, @@ -237,7 +238,7 @@ function DictQuickLookup:changeDictionary(index) self.dictionary = self.results[index].dict self.lookupword = self.results[index].word self.definition = self.results[index].definition - + local orig_dimen = self.dict_frame and self.dict_frame.dimen or Geom:new{} self:update() @@ -248,7 +249,7 @@ function DictQuickLookup:changeDictionary(index) end end -function DictQuickLookup:changeToDefaultDict() +function DictQuickLookup:changeToDefaultDict() if self.dictionary then -- dictionaries that have definition of the first word(accurate word) -- excluding Fuzzy queries. diff --git a/frontend/ui/widget/inputdialog.lua b/frontend/ui/widget/inputdialog.lua index a4cdb86c8..7e32a132d 100644 --- a/frontend/ui/widget/inputdialog.lua +++ b/frontend/ui/widget/inputdialog.lua @@ -59,6 +59,7 @@ function InputDialog:init() button_font_size = 20, buttons = self.buttons, zero_sep = true, + show_parent = self, } self.title_bar = LineWidget:new{ --background = 8, diff --git a/frontend/ui/widget/menu.lua b/frontend/ui/widget/menu.lua index a96d11f93..d88e300b0 100644 --- a/frontend/ui/widget/menu.lua +++ b/frontend/ui/widget/menu.lua @@ -355,11 +355,13 @@ function Menu:init() icon = "resources/icons/appbar.chevron.left.png", callback = function() self:onPrevPage() end, bordersize = 0, + show_parent = self, } self.page_info_right_chev = Button:new{ icon = "resources/icons/appbar.chevron.right.png", callback = function() self:onNextPage() end, bordersize = 0, + show_parent = self, } self.page_info_left_chev:hide() self.page_info_right_chev:hide() diff --git a/frontend/ui/widget/touchmenu.lua b/frontend/ui/widget/touchmenu.lua index 3d0c3bdd8..cb6de71cd 100644 --- a/frontend/ui/widget/touchmenu.lua +++ b/frontend/ui/widget/touchmenu.lua @@ -41,6 +41,10 @@ function TouchMenuItem:init() }, } + local item_enabled = self.item.enabled + if self.item.enabled_func then + item_enabled = self.item.enabled_func() + end self.item_frame = FrameContainer:new{ width = self.dimen.w, bordersize = 0, @@ -50,6 +54,8 @@ function TouchMenuItem:init() HorizontalSpan:new{ width = 10 }, TextWidget:new{ text = self.item.text or self.item.text_func(), + bgcolor = 0.0, + fgcolor = item_enabled ~= false and 1.0 or 0.5, face = self.face, }, }, @@ -58,6 +64,12 @@ function TouchMenuItem:init() end function TouchMenuItem:onTapSelect(arg, ges) + local enabled = self.item.enabled + if self.item.enabled_func then + enabled = self.item.enabled_func() + end + if enabled == false then return end + self.item_frame.invert = true UIManager:setDirty(self.show_parent, "partial") UIManager:scheduleIn(0.5, function() @@ -401,18 +413,31 @@ function TouchMenu:onSwipe(arg, ges_ev) end function TouchMenu:onMenuSelect(item) - if item.sub_item_table == nil then - if item.callback then + local enabled = item.enabled + if item.enabled_func then + enabled = item.enabled_func() + end + if enabled == false then return end + local sub_item_table = item.sub_item_table + if item.sub_item_table_func then + sub_item_table = item.sub_item_table_func() + end + if sub_item_table == nil then + local callback = item.callback + if item.callback_func then + callback = item.callback_func() + end + if callback then -- put stuff in scheduler so we can See -- the effect of inverted menu item UIManager:scheduleIn(0.1, function() self:closeMenu() - item.callback() + callback() end) end else table.insert(self.item_table_stack, self.item_table) - self.item_table = item.sub_item_table + self.item_table = sub_item_table self:updateItems() end return true