TouchMenu: show checkboxes in grey for disabled menu items

pull/4487/head
poire-z 5 years ago
parent d98ea4e9ee
commit df28b90419

@ -14,6 +14,7 @@ Example:
]] ]]
local Blitbuffer = require("ffi/blitbuffer")
local Font = require("ui/font") local Font = require("ui/font")
local InputContainer = require("ui/widget/container/inputcontainer") local InputContainer = require("ui/widget/container/inputcontainer")
local OverlapGroup = require("ui/widget/overlapgroup") local OverlapGroup = require("ui/widget/overlapgroup")
@ -22,6 +23,7 @@ local TextWidget = require("ui/widget/textwidget")
local CheckMark = InputContainer:new{ local CheckMark = InputContainer:new{
checkable = true, checkable = true,
checked = false, checked = false,
enabled = true,
face = Font:getFace("smallinfofont"), face = Font:getFace("smallinfofont"),
width = 0, width = 0,
height = 0, height = 0,
@ -36,16 +38,37 @@ function CheckMark:init()
text = "", text = "",
face = self.face, 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{ local empty_widget = TextWidget:new{
text = "", text = "",
face = self.face, face = self.face,
} }
self[1] = self.checkable and OverlapGroup:new{ local widget
(self.checked and checked_widget or empty_widget), if self.checkable then
unchecked_widget if self.enabled then
} widget = OverlapGroup:new{
or empty_widget (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() self.dimen = unchecked_widget:getSize()
end end

@ -73,14 +73,14 @@ function TouchMenuItem:init()
item_checkable = true item_checkable = true
item_checked = self.item.checked_func() item_checked = self.item.checked_func()
end end
local checked_widget = CheckMark:new{ local checkmark_widget = CheckMark:new{
checked = true, checkable = item_checkable,
} checked = item_checked,
local unchecked_widget = CheckMark:new{ enabled = item_enabled,
checked = false,
} }
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 -- text_max_width should be the TouchMenuItem width minus the below
@ -98,11 +98,7 @@ function TouchMenuItem:init()
align = "center", align = "center",
CenterContainer:new{ CenterContainer:new{
dimen = Geom:new{ w = checked_widget:getSize().w }, dimen = Geom:new{ w = checked_widget:getSize().w },
item_checkable and ( checkmark_widget,
item_checked and checked_widget
or unchecked_widget
)
or empty_widget
}, },
TextWidget:new{ TextWidget:new{
text = text, text = text,

Loading…
Cancel
Save