Skip to content

Add standard and extended frame-filter group selectors - #1105

Open
RMBmd wants to merge 1 commit into
collin80:masterfrom
RMBmd:feature/frame-filter-group-selectors
Open

RMBmd wants to merge 1 commit into
collin80:masterfrom
RMBmd:feature/frame-filter-group-selectors

Conversation

@RMBmd

@RMBmd RMBmd commented Jul 11, 2026

Copy link
Copy Markdown

Summary

Add vertically stacked, tri-state bulk-selection controls for standard-range and extended-range CAN frame IDs on the main capture screen.

The controls appear directly below Frame Filtering: and above the existing per-ID filter list:

  • Standard (11-bit)
  • Extended (29-bit)

This allows users to quickly select or deselect potentially large groups of frame IDs without changing every individual checkbox.

Behavior

Standard (11-bit)

Controls all currently known numeric IDs from:

0x000 through 0x7FF

Extended (29-bit)

Controls all currently known numeric IDs from:

0x800 through 0x1FFFFFFF

Each group checkbox displays:

  • Checked when every current ID in that group is selected.
  • Unchecked when no IDs in that group are selected.
  • Partially checked when the group contains mixed selections.
  • Disabled when no current IDs belong to the group.

Changing an individual frame-ID checkbox immediately recalculates the applicable group state.

The existing All and None buttons also synchronize both group checkboxes.

Layout

The two group selectors are stacked vertically rather than placed side by side. This avoids unnecessarily increasing the width of the frame-filtering sidebar.

Implementation

This change:

  • Adds two tri-state checkboxes to the main-window UI.
  • Adds a model operation that updates one numeric ID range and refreshes the filtered frame model once.
  • Synchronizes the group states after:
    • the filter list is refreshed;
    • an individual ID is changed;
    • a group selector is changed;
    • All is selected;
    • None is selected.
  • Removes early returns from MainWindow::updateFilterList() that could leave inhibitFilterUpdate enabled when a filter collection is empty.
  • Updates the main-screen help documentation.

Scope

This PR does not change:

  • Clear Frames
  • Keep Filters When Clearing
  • CANFrameModel::clearFrames()
  • setClearMode()
  • Existing filter-persistence behavior
  • PeakCAN or any other CAN-interface backend

Current model limitation

The existing frame-filter map is keyed only by numeric CAN ID and does not include the extended-frame-format flag in the key.

Accordingly, this focused change groups IDs by numeric range. It does not attempt to distinguish a numerically low extended-format ID from a standard ID with the same numeric identifier. Supporting that distinction would require a broader redesign of the filter model and saved-filter format.

Validation

Tested successfully on Windows x64 with Qt 5.15.2 and MSVC.

Commit tested:

4f8c107

Build validation

  • qmake completed successfully.
  • nmake completed successfully.
  • A release executable was produced.
  • No compiler, linker, or fatal build errors were detected.

Functional validation

  • Standard group selects and deselects IDs from 0x000 through 0x7FF.
  • Extended group selects and deselects IDs from 0x800 through 0x1FFFFFFF.
  • The two groups operate independently.
  • Individual ID changes produce the correct partial state.
  • All and None synchronize both group controls.
  • Empty groups disable the applicable selector.
  • Existing Keep Filters When Clearing behavior remains unchanged.
  • The selectors are vertically stacked to avoid widening the sidebar.

Screenshots

Final screenshots of the vertically stacked controls and partial-selection behavior will be attached below.

Screenshot 2026-07-11 105506 Screenshot 2026-07-11 105547 Screenshot 2026-07-11 105712 Screenshot 2026-07-11 105725 Screenshot 2026-07-11 105744

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant