1
0
mirror of https://github.com/jesseduffield/lazygit.git synced 2025-04-17 12:06:38 +02:00

Support showing checkboxes or radio buttons in menus

For checkboxes it probably doesn't really make sense to use them yet, because
we'd have to find a way how you can toggle them without closing the dialog; but
we already provide rendering for them to lay the ground.

But radio buttons can be used already, because for those it is ok to close the
dialog when choosing a different option (as long as there is only one grounp of
radio buttons in the panel, that is).
This commit is contained in:
Stefan Haller 2024-06-01 20:21:25 +02:00
parent a5620ebe3a
commit 20a4aeab6e
2 changed files with 45 additions and 1 deletions

View File

@ -107,7 +107,21 @@ func (self *MenuViewModel) GetDisplayStrings(_ int, _ int) [][]string {
keyLabel = style.FgCyan.Sprint(keybindings.LabelFromKey(item.Key))
}
displayStrings = utils.Prepend(displayStrings, keyLabel)
checkMark := ""
switch item.Widget {
case types.MenuWidgetNone:
// do nothing
case types.MenuWidgetRadioButtonSelected:
checkMark = "(•)"
case types.MenuWidgetRadioButtonUnselected:
checkMark = "( )"
case types.MenuWidgetCheckboxSelected:
checkMark = "[✓]"
case types.MenuWidgetCheckboxUnselected:
checkMark = "[ ]"
}
displayStrings = utils.Prepend(displayStrings, keyLabel, checkMark)
return displayStrings
})
}

View File

@ -217,6 +217,30 @@ type DisabledReason struct {
ShowErrorInPanel bool
}
type MenuWidget int
const (
MenuWidgetNone MenuWidget = iota
MenuWidgetRadioButtonSelected
MenuWidgetRadioButtonUnselected
MenuWidgetCheckboxSelected
MenuWidgetCheckboxUnselected
)
func MakeMenuRadioButton(value bool) MenuWidget {
if value {
return MenuWidgetRadioButtonSelected
}
return MenuWidgetRadioButtonUnselected
}
func MakeMenuCheckBox(value bool) MenuWidget {
if value {
return MenuWidgetCheckboxSelected
}
return MenuWidgetCheckboxUnselected
}
type MenuItem struct {
Label string
@ -232,6 +256,12 @@ type MenuItem struct {
// item, as opposed to having to navigate to it
Key Key
// A widget to show in front of the menu item. Supported widget types are
// checkboxes and radio buttons,
// This only handles the rendering of the widget; the behavior needs to be
// provided by the client.
Widget MenuWidget
// The tooltip will be displayed upon highlighting the menu item
Tooltip string