gui: live text filter for the downloads and shared-files tables - #633
Merged
Conversation
Type in the new Filter box in either table's header to show only files
whose name contains the text (case-insensitive); clearing it restores
the full list. Requested in the GUI to match the WebUI.
Purely GUI-side (filters the local list model), so it works identically
in the monolithic app and the remote GUI (amulegui) — no EC protocol
change. Both tables are virtual lists, so filtering just changes which
items are in the model and SortList() handles the rest.
- Downloads: SetFilterText() + a PassesTextFilter()/IsVisibleInCat()
predicate AND-ed into the existing category show/hide path.
- Shared files: SetFilterText() rebuilds the model from the master share
applying the filter; per-file adds respect it too.
- Reuses the existing _("Filter:") string — no new translations.
- Shared header relaid out so the 'Show Clients for' radios stay
window-centered next to the new filter box.
This was referenced Jul 28, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #589.
Adds a Filter box to the header of both the Downloads and Shared Files tables. Type text and the list shows only files whose name contains it (case-insensitive); clearing the box restores the full list. This brings the GUI in line with the new WebUI, which already has it.
Design
Purely GUI-side — the filter operates on the local list model, so it works identically in the monolithic app and the remote GUI (
amulegui) with no EC protocol change. Both tables are virtual lists (CMuleVirtualListCtrl), so filtering just changes which items are in the model;SortList()and theOnGetItem*path handle re-render and sorting.CDownloadListCtrl): the model already holds every file independent of what's displayed, and the category tabs already gate visibility through a predicate. The filter addsPassesTextFilter()AND-ed into that predicate viaIsVisibleInCat(), and changing the text re-runs the same repopulate loopChangeCategory()uses.CSharedFilesCtrl):SetFilterText()rebuilds the model from the master share applying the filter; per-file adds respect it too.Modeled on the existing search-results filter (
CSearchListCtrl).Notes
_("Filter:")string — no new translations.muuli_wdrconvention.Built clean on macOS and Linux for both the monolithic app and
amulegui; interactive testing in both tables underway.