From df28b904195065ee5640b51b2cbaf02061fce83b Mon Sep 17 00:00:00 2001 From: poire-z Date: Tue, 15 Jan 2019 18:37:36 +0100 Subject: [PATCH] TouchMenu: show checkboxes in grey for disabled menu items --- frontend/ui/widget/checkmark.lua | 35 ++++++++++++++++++++++++++------ frontend/ui/widget/touchmenu.lua | 20 ++++++++---------- 2 files changed, 37 insertions(+), 18 deletions(-) diff --git a/frontend/ui/widget/checkmark.lua b/frontend/ui/widget/checkmark.lua index f0e46477b..664c527e0 100644 --- a/frontend/ui/widget/checkmark.lua +++ b/frontend/ui/widget/checkmark.lua @@ -14,6 +14,7 @@ Example: ]] +local Blitbuffer = require("ffi/blitbuffer") local Font = require("ui/font") local InputContainer = require("ui/widget/container/inputcontainer") local OverlapGroup = require("ui/widget/overlapgroup") @@ -22,6 +23,7 @@ local TextWidget = require("ui/widget/textwidget") local CheckMark = InputContainer:new{ checkable = true, checked = false, + enabled = true, face = Font:getFace("smallinfofont"), width = 0, height = 0, @@ -36,16 +38,37 @@ function CheckMark:init() text = "▢ ", face = self.face, } + local disabled_checked_widget = TextWidget:new{ + text = " ✓", -- preceded by thin space for better alignment + face = self.face, + fgcolor = Blitbuffer.COLOR_GREY, + } + local disabled_unchecked_widget = TextWidget:new{ + text = "▢ ", + face = self.face, + fgcolor = Blitbuffer.COLOR_GREY, + } local empty_widget = TextWidget:new{ text = "", face = self.face, } - self[1] = self.checkable and OverlapGroup:new{ - (self.checked and checked_widget or empty_widget), - unchecked_widget - } - or empty_widget - + local widget + if self.checkable then + if self.enabled then + widget = OverlapGroup:new{ + (self.checked and checked_widget or empty_widget), + unchecked_widget + } + else + widget = OverlapGroup:new{ + (self.checked and disabled_checked_widget or empty_widget), + disabled_unchecked_widget + } + end + else + widget = empty_widget + end + self[1] = widget self.dimen = unchecked_widget:getSize() end diff --git a/frontend/ui/widget/touchmenu.lua b/frontend/ui/widget/touchmenu.lua index 43078735c..868fc8aaf 100644 --- a/frontend/ui/widget/touchmenu.lua +++ b/frontend/ui/widget/touchmenu.lua @@ -73,14 +73,14 @@ function TouchMenuItem:init() item_checkable = true item_checked = self.item.checked_func() end - local checked_widget = CheckMark:new{ - checked = true, - } - local unchecked_widget = CheckMark:new{ - checked = false, + local checkmark_widget = CheckMark:new{ + checkable = item_checkable, + checked = item_checked, + enabled = item_enabled, } - local empty_widget = CheckMark:new{ - checkable = false, + + local checked_widget = CheckMark:new{ -- for layout, to :getSize() + checked = true, } -- text_max_width should be the TouchMenuItem width minus the below @@ -98,11 +98,7 @@ function TouchMenuItem:init() align = "center", CenterContainer:new{ dimen = Geom:new{ w = checked_widget:getSize().w }, - item_checkable and ( - item_checked and checked_widget - or unchecked_widget - ) - or empty_widget + checkmark_widget, }, TextWidget:new{ text = text,