diff --git a/widget/check_group.go b/widget/check_group.go index 90c81bfbb1..d468e1fde0 100644 --- a/widget/check_group.go +++ b/widget/check_group.go @@ -1,6 +1,8 @@ package widget import ( + "strings" + "fyne.io/fyne/v2" "fyne.io/fyne/v2/canvas" "fyne.io/fyne/v2/internal/widget" @@ -75,6 +77,27 @@ func (r *CheckGroup) Refresh() { r.BaseWidget.Refresh() } +// Remove removes the first occurrence of the specified option found from a CheckGroup widget. +// Return true if an option was removed. +// +// Since: 2.3 +func (r *CheckGroup) Remove(option string) bool { + for i, o := range r.Options { + if strings.EqualFold(option, o) { + r.Options = append(r.Options[:i], r.Options[i+1:]...) + for j, s := range r.Selected { + if strings.EqualFold(option, s) { + r.Selected = append(r.Selected[:j], r.Selected[j+1:]...) + break + } + } + r.Refresh() + return true + } + } + return false +} + // SetSelected sets the checked options, it can be used to set a default option. func (r *CheckGroup) SetSelected(options []string) { //if r.Selected == options { diff --git a/widget/check_group_test.go b/widget/check_group_test.go index 44c5653662..e8efc9a457 100644 --- a/widget/check_group_test.go +++ b/widget/check_group_test.go @@ -197,3 +197,25 @@ func TestCheckGroup_ToggleSelectionWithSpaceKey(t *testing.T) { test.Type(canvas.Focused(), " ") assert.Equal(t, []string{"Option B"}, check.Selected, "cannot unselect required check") } + +func TestCheckGroup_ManipulateOptions(t *testing.T) { + check := &widget.CheckGroup{Options: []string{}} + assert.Equal(t, 0, len(check.Options)) + + check.Append("test1") + assert.Equal(t, 1, len(check.Options)) + check.SetSelected([]string{"test1"}) + assert.Equal(t, 1, len(check.Selected)) + + check.Append("test2") + assert.Equal(t, 2, len(check.Options)) + + removed := check.Remove("nope") + assert.Equal(t, false, removed) + assert.Equal(t, 2, len(check.Options)) + + removed = check.Remove("test1") + assert.Equal(t, true, removed) + assert.Equal(t, 1, len(check.Options)) + assert.Equal(t, 0, len(check.Selected)) +}