feat: unified Logged Data pane + dark theme sweep#494
Conversation
Redesigns the Logged Data page to match the dark, tile-based language established by the Channels and Devices panes. Session list becomes an inline dark list with accent stripe for selection; plot area carries session header/minimap/legend; APP LOGS / DEVICE LOGS switches from legacy tabs to a segmented toggle. Session settings open in an inline drawer rather than the old flyout. Removes the now-unreferenced LoggedSessionFlyout in keeping with "replace rather than skin." Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The converter was defined only in MainWindow.xaml Resources, which is not visible from DataTemplates realized inside the new Logged Data pane's ContentPresenter. Clicking a session triggered a XamlParseException when the legend item template tried to resolve the brush. Move the converter to App.xaml so it is globally available. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The logged-data plot and minimap (and the live-graph plot) were still rendering with OxyPlot's default light colors — a bright white panel in the middle of a dark app, directly violating principle #2 and fragmenting the visual system. Add an OxyPlotDarkTheme helper that mirrors the DesignTokens palette (Surface, BorderDim, TextSecondary, Accent) and apply it in DatabaseLogger and PlotLogger. The minimap's dim overlay flips from light-gray to translucent black, and its selection rectangle adopts the accent color so the selected viewport reads as the active region rather than a cutout. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Save-image and zoom buttons previously floated over the plot, overlapping the rightmost axis ticks and sitting on top of the data. Moved them into the right side of the session header strip so the plot area shows data only (principle #1) and all plot chrome lives in one row (principle #8). Swapped the Y-zoom magnifier icons for vertical expand/collapse arrows so X-zoom and Y-zoom read as different axes at a glance. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Rewrites DeviceLogsView to match the design philosophy used across the Channels, Devices, Settings, and Logged Data surfaces. Adds local pill button, dark ComboBox, and dark ListView/GridView styles; replaces the old light ComboBox + white buttons with a kickered device selector and pill/accent actions; introduces two dedicated empty states (NO FILES and USB REQUIRED); wraps the connection status in a SurfaceRaised pill with a status-color dot; and gates the ListView behind a MultiDataTrigger so it only shows when a USB device has at least one file. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Defined as a global resource in MainWindow.xaml but never referenced by any binding. Orphaned after the drawer and flyout redesigns. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Review Summary by QodoRedesign Logged Data pane with dark theme and unified UI patterns
WalkthroughsDescription• Redesigned Logged Data pane with dark theme matching design system • Applied OxyPlot dark theme to plots, minimap, and live graph rendering • Consolidated plot controls into header strip with zoom/reset/save buttons • Refactored Device Logs tab with dark ComboBox, styled list, and empty states • Fixed XamlParseException by promoting OxyColorToBrushConverter to App.xaml • Removed unused StringRightConverter and legacy LoggedSessionFlyout Diagramflowchart LR
A["Old Logged Data<br/>Light theme<br/>Legacy layout"] -->|Redesign| B["New LoggedDataPanePrototype<br/>Dark theme<br/>Prototype pattern"]
C["OxyPlot<br/>Default colors"] -->|Apply| D["OxyPlotDarkTheme<br/>Design tokens<br/>Surface/Accent/Border"]
D -->|Theme| E["PlotLogger<br/>DatabaseLogger<br/>Minimap"]
F["MainWindow.xaml<br/>OxyColorToBrushConverter"] -->|Promote| G["App.xaml<br/>Global scope"]
H["DeviceLogsView<br/>Basic styling"] -->|Enhance| I["Dark ComboBox<br/>Styled ListView<br/>Empty states"]
File Changes1. Daqifi.Desktop/Helpers/OxyPlotDarkTheme.cs
|
Code Review by Qodo
1.
|
…la-5641c6 # Conflicts: # Daqifi.Desktop/MainWindow.xaml
The session name textbox persists textBox.Text verbatim, but
LoggingSession.Name's getter renders whitespace as "Session {ID}".
Clearing the textbox therefore writes "" to the DB while the UI shows
the computed default, so the two disagree on reload.
Trim the input and persist null when blank. The getter then produces
the same "Session {ID}" for both in-memory and reloaded state.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
@qodo-code-review regarding the Empty session name persisted finding — fixed in 496ee3b.
|
📊 Code Coverage ReportSummarySummary
CoverageDAQiFi - 17.6%
Daqifi.Desktop.Common - 30.8%
Daqifi.Desktop.IO - 100%
Coverage report generated by ReportGenerator • View full report in build artifacts |
Summary
Continues the design-philosophy redesign across the app, focused on the Logged Data and Device Logs surfaces plus the OxyPlot rendering stack.
Test plan
🤖 Generated with Claude Code