From 2f4cedd02547fd95e03f8b218a221548e5dfa197 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Sat, 1 Feb 2025 18:47:29 +0100 Subject: [PATCH] Show current files filter as radio buttons I renamed the "Reset filter" item to "No filter" to make it look more like a state than an action, so that it fits the radio button concept better. When there are conflicts and we set the filter to show only conflicting files, then none of the radio buttons light up, which is slightly strange. I guess it's ok though. --- pkg/gui/controllers/files_controller.go | 18 ++++++++++++------ pkg/i18n/english.go | 4 ++-- pkg/integration/tests/conflicts/filter.go | 2 +- .../filter_and_search/filter_by_file_status.go | 2 +- 4 files changed, 16 insertions(+), 10 deletions(-) diff --git a/pkg/gui/controllers/files_controller.go b/pkg/gui/controllers/files_controller.go index cdf3f6241..50f51c35a 100644 --- a/pkg/gui/controllers/files_controller.go +++ b/pkg/gui/controllers/files_controller.go @@ -753,6 +753,7 @@ func (self *FilesController) isResolvingConflicts() bool { } func (self *FilesController) handleStatusFilterPressed() error { + currentFilter := self.context().GetFilter() return self.c.Menu(types.CreateMenuOptions{ Title: self.c.Tr.FilteringMenuTitle, Items: []*types.MenuItem{ @@ -761,35 +762,40 @@ func (self *FilesController) handleStatusFilterPressed() error { OnPress: func() error { return self.setStatusFiltering(filetree.DisplayStaged) }, - Key: 's', + Key: 's', + Widget: types.MakeMenuRadioButton(currentFilter == filetree.DisplayStaged), }, { Label: self.c.Tr.FilterUnstagedFiles, OnPress: func() error { return self.setStatusFiltering(filetree.DisplayUnstaged) }, - Key: 'u', + Key: 'u', + Widget: types.MakeMenuRadioButton(currentFilter == filetree.DisplayUnstaged), }, { Label: self.c.Tr.FilterTrackedFiles, OnPress: func() error { return self.setStatusFiltering(filetree.DisplayTracked) }, - Key: 't', + Key: 't', + Widget: types.MakeMenuRadioButton(currentFilter == filetree.DisplayTracked), }, { Label: self.c.Tr.FilterUntrackedFiles, OnPress: func() error { return self.setStatusFiltering(filetree.DisplayUntracked) }, - Key: 'T', + Key: 'T', + Widget: types.MakeMenuRadioButton(currentFilter == filetree.DisplayUntracked), }, { - Label: self.c.Tr.ResetFilter, + Label: self.c.Tr.NoFilter, OnPress: func() error { return self.setStatusFiltering(filetree.DisplayAll) }, - Key: 'r', + Key: 'r', + Widget: types.MakeMenuRadioButton(currentFilter == filetree.DisplayAll), }, }, }) diff --git a/pkg/i18n/english.go b/pkg/i18n/english.go index 135ab43e1..7bf771e1f 100644 --- a/pkg/i18n/english.go +++ b/pkg/i18n/english.go @@ -89,7 +89,7 @@ type TranslationSet struct { FilterUnstagedFiles string FilterTrackedFiles string FilterUntrackedFiles string - ResetFilter string + NoFilter string MergeConflictsTitle string Checkout string CheckoutTooltip string @@ -1115,7 +1115,7 @@ func EnglishTranslationSet() *TranslationSet { FilterUnstagedFiles: "Show only unstaged files", FilterTrackedFiles: "Show only tracked files", FilterUntrackedFiles: "Show only untracked files", - ResetFilter: "Reset filter", + NoFilter: "No filter", NoChangedFiles: "No changed files", SoftReset: "Soft reset", AlreadyCheckedOutBranch: "You have already checked out this branch", diff --git a/pkg/integration/tests/conflicts/filter.go b/pkg/integration/tests/conflicts/filter.go index 32f5a8cd2..c997d8daa 100644 --- a/pkg/integration/tests/conflicts/filter.go +++ b/pkg/integration/tests/conflicts/filter.go @@ -25,7 +25,7 @@ var Filter = NewIntegrationTest(NewIntegrationTestArgs{ Tap(func() { t.ExpectPopup().Menu(). Title(Equals("Filtering")). - Select(Contains("Reset filter")). + Select(Contains("No filter")). Confirm() }). Lines( diff --git a/pkg/integration/tests/filter_and_search/filter_by_file_status.go b/pkg/integration/tests/filter_and_search/filter_by_file_status.go index 05b38ea96..f2335d28c 100644 --- a/pkg/integration/tests/filter_and_search/filter_by_file_status.go +++ b/pkg/integration/tests/filter_and_search/filter_by_file_status.go @@ -52,7 +52,7 @@ var FilterByFileStatus = NewIntegrationTest(NewIntegrationTestArgs{ Tap(func() { t.ExpectPopup().Menu(). Title(Equals("Filtering")). - Select(Contains("Reset filter")). + Select(Contains("No filter")). Confirm() }). Lines(