gui: add SegmentBarsWidget and SpeedGraphWidget
Per-connection progress bars and the 60 s rolling speed graph the progress dialog needs (docs/03-gui-spec.md §3). Both reuse row/widget state across ticks instead of rebuilding, matching the discipline DownloadTableModel already uses for progress patches. SpeedGraphWidget keeps a fixed ring buffer and one reused QPainterPath — no allocation in paintEvent or addSample. Fixed a real bug found while writing tst_speedgraphwidget: the elapsed timer was started in the constructor, so the very first sample after construction would silently wait up to 1 s to be recorded instead of landing immediately. Tested against mockd (both offline via QTest/offscreen, and manually against a running mockd instance through ProgressDialog once that lands). Co-Authored-By: Claude Sonnet 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01NSCdCWFXBTSBBK3MzWtJiC
This commit is contained in:
@@ -44,6 +44,32 @@ set_tests_properties(gui_rtl PROPERTIES
|
||||
LABELS "gui"
|
||||
ENVIRONMENT "QT_QPA_PLATFORM=offscreen")
|
||||
|
||||
# tst_segmentbarswidget — the per-connection bar grid.
|
||||
# Red when: a determinate segment stops rendering its percentage, an unknown-length
|
||||
# segment stops falling back to the indeterminate range, a shrinking segment set
|
||||
# destroys rows instead of hiding them, or rows start getting rebuilt per tick.
|
||||
add_executable(tst_segmentbarswidget tst_segmentbarswidget.cpp)
|
||||
target_compile_features(tst_segmentbarswidget PRIVATE cxx_std_23)
|
||||
target_compile_options(tst_segmentbarswidget PRIVATE -Wall -Wextra -Wpedantic -Werror)
|
||||
target_link_libraries(tst_segmentbarswidget PRIVATE velox-gui-lib Qt6::Widgets Qt6::Test)
|
||||
add_test(NAME gui_segmentbarswidget COMMAND tst_segmentbarswidget)
|
||||
set_tests_properties(gui_segmentbarswidget PROPERTIES
|
||||
LABELS "gui"
|
||||
ENVIRONMENT "QT_QPA_PLATFORM=offscreen")
|
||||
|
||||
# tst_speedgraphwidget — the 60 s rolling speed graph.
|
||||
# Red when: addSample stops throttling bursts to 1 Hz, the bucket count stops
|
||||
# incrementing on genuinely separated samples, clear() leaves stale state, or painting
|
||||
# crashes before two samples exist.
|
||||
add_executable(tst_speedgraphwidget tst_speedgraphwidget.cpp)
|
||||
target_compile_features(tst_speedgraphwidget PRIVATE cxx_std_23)
|
||||
target_compile_options(tst_speedgraphwidget PRIVATE -Wall -Wextra -Wpedantic -Werror)
|
||||
target_link_libraries(tst_speedgraphwidget PRIVATE velox-gui-lib Qt6::Widgets Qt6::Test)
|
||||
add_test(NAME gui_speedgraphwidget COMMAND tst_speedgraphwidget)
|
||||
set_tests_properties(gui_speedgraphwidget PROPERTIES
|
||||
LABELS "gui"
|
||||
ENVIRONMENT "QT_QPA_PLATFORM=offscreen")
|
||||
|
||||
# gui_no_download_logic — CLAUDE.md §3 as an executable check, not a hope.
|
||||
# Red when: a download-logic token (curl, raw pwrite, sqlite, QSqlDatabase) appears
|
||||
# under gui/src. grep exits 0 only when it finds a match, so a hit fails the test.
|
||||
|
||||
Reference in New Issue
Block a user