Skip to content

(WIP) PickerView + related views: accessibility for blind seismologists#200

Draft
Donavin97 wants to merge 28 commits into
SeisComP:mainfrom
Donavin97:accessability
Draft

(WIP) PickerView + related views: accessibility for blind seismologists#200
Donavin97 wants to merge 28 commits into
SeisComP:mainfrom
Donavin97:accessability

Conversation

@Donavin97

@Donavin97 Donavin97 commented Jun 6, 2026

Copy link
Copy Markdown

Summary

Adds screen reader announcements and audio sonification across SeisComP GUI views, enabling blind seismologists to pick, locate, and review events.

Requires Qt 6.8+ for screen reader announcements via QAccessibleAnnouncementEvent.
Audio sonification works on all Qt versions (uses system aplay/paplay).

Audio sonification (PickerView + AmplitudeView)

  • Ctrl+Shift+A toggles, Ctrl+Space plays full trace at 160x, Ctrl+Shift+Space stops
  • Interactive cursor-tracking: each cursor stop plays a 15s window at 80x (300ms debounce)
  • Uses system aplay/paplay via WAV — no Qt Multimedia dependency
  • DC offset removal and absolute-max normalization

Screen reader announcements

  • PickerView: amplitude, SNR, pick details at cursor; marker navigation; sort, alignment, filter, unit, rotation, zoom, and display changes
  • OriginLocatorView: arrival toggles, commit, import picks, add/remove stations, locator results, plot tab switches, focal mechanism commit
  • EventEdit: origin/FM/magnitude tree selection, fix/release buttons, event type/certainty, journal entries, preferred changes, data loaded
  • MagnitudeView: mag type tabs, recalculate results, channel activate/deactivate, station checkboxes, diagram hover/click, evaluation status
  • AmplitudeView: full PickerView-level audio sonification + component/station/filter/amplitude announcements + commit
  • Dialogs: SelectStation station selection + filter count, PickerSettings slider values + save, OriginDialog coordinates, commit dialog status/type/phases

Keyboard accessibility

  • Context menus via Menu key for picks (polarity/onset/uncertainty with fresh actions)
  • Commit button: Enter commits, Ctrl+Enter shows menu, Ctrl+Shift+Enter opens options dialog
  • Ctrl+Shift+D announces detailed pick info

22 files, +3650/-270

@cla-bot cla-bot Bot added the cla-signed The CLA has been signed by all contributors label Jun 6, 2026
@Donavin97 Donavin97 force-pushed the accessability branch 2 times, most recently from fa4b3e3 to 6e5a89c Compare June 6, 2026 12:10
…ion, context menus

- Screen reader announcements for amplitude, SNR, pick details at cursor
- Announce markers when navigating between picks (Alt+Left/Right)
- Ctrl+Shift+D announces detailed pick info for current position
- Audio sonification of seismic waveforms via WAV file + system aplay/paplay
- Ctrl+Shift+A toggles sonification, Ctrl+Space plays full trace at 160x
- Interactive cursor-tracking audio: 15s window at 80x on cursor stop (300ms debounce)
- Ctrl+Shift+Space stops playback
- DC offset removal and absolute-max normalization for clean audio
- Keyboard-accessible context menus (Menu key) for picks with polarity/onset/uncertainty
- Fixed context menu marker lookup via nearestMarker fallback when cursor text is stale
- Fresh QActions per context menu instance to avoid state corruption from shared actions
Donavin97 added 3 commits June 6, 2026 14:48
…tion changes

- itemSelected now announces 'Station N of M' with station/channel/distance/azimuth
- changeFilter announces the filter name (or 'No filter')
- changeUnit announces the unit type
- changeRotation announces the rotation mode
- Zoom in/out announces level (Ctrl+Left/Right)
- Amplitude up/down announced (Ctrl+Up/Down)
- Maximize amplitudes announced (S key)
- Scale reset announced (W key)
- Default view restored announced (Ctrl+N)
- Show all/single component toggled announced (T key)
- Sort by distance/azimuth/residual/alphabetically announced
- Align on origin time / P arrivals / S arrivals announced
- Show/hide theoretical arrivals, unassociated picks, spectrogram announced
- Reset pick announced
@Donavin97 Donavin97 marked this pull request as draft June 6, 2026 16:38
Donavin97 added 10 commits June 6, 2026 16:49
- Origin committed with N phases
- Arrival toggled on/off with station code
- Imported N picks from other origins
- Added/removed station NET.STA
- Location computed: M X.X, RMS X.XX, gap X
- Plot tab switches (Distance/Azimuth/TravelTime etc.)
- Focal mechanism committed
- Data loaded: loaded N origins, M focal mechanisms
- Journal entry success/failure
- Event type and certainty combo changes
- Tree selection: origin ID+time, FM ID, magnitude type+value
- Fix/release origin, magnitude, focal mechanism
- Preferred origin/magnitude/FM changed
- Mag type tab switches: 'Showing MLv magnitude'
- Recalculate result: 'Recalculated MLv 5.2 ± 0.3 with 12 stations'
- Channel activate/deactivate with counts
- Station checkbox toggles: included/excluded from magnitude
- Diagram hover/click: station and value info
- Evaluation status changes
- Tab close: magnitude removed
- Magnitude created announcement
- Suppression flag for programmatic updates
AmplitudeView:
- Component selection, station selection, filter changes
- Amplitude create/set/confirm/delete/recalculate
- Amplitude commit with count, trace values at cursor

CalculateAmplitudes:
- Computation config on accept, filter state/type changes
- Audio sonification with WaveformAudio: Ctrl+Shift+A toggle,
  Ctrl+Space play full trace at 160x, Ctrl+Shift+Space stop
- Interactive cursor-tracking audio: 15s window at 80x speed
  on cursor stop (300ms debounce), also on scroll/move
- Keyboard context menu via Menu key for markers
- Screen reader announcements from previous commit
AmplitudeView (QMainWindow): uses statusBar()->showMessage() for
visual feedback and QAccessibleAnnouncementEvent for screen readers.
OriginLocatorView, EventEdit, MagnitudeView, CalculateAmplitudes
(QWidget): use QAccessibleAnnouncementEvent + SEISCOMP_DEBUG log.
All were previously no-op stubs.
announceToScreenReader no longer calls statusBar()->showMessage().
Screen reader announcements are silent to sighted users, using only
QAccessibleAnnouncementEvent. Direct statusBar calls for audio
sonification and error states are preserved as legitimate UI feedback.
Commit dialog: announces on open and accept with evaluation status,
event type, and phase count.
SelectStation: filter results count, station selection in table.
PickerSettings: slider release values (pre/post offset, amplitude offsets),
settings saved confirmation.
OriginDialog: origin coordinates on accept.
- Set QToolButton::MenuButtonPopup mode on btnCommit so the
  dropdown arrow is focusable and accessible via keyboard
- Add Ctrl+Shift+Return shortcut to open commit options dialog directly
- Update tooltip to inform users about both access methods
Donavin97 added 3 commits June 7, 2026 09:27
- Set InstantPopup mode on commit button: Space/Enter opens the menu
  instead of committing directly, preventing accidental commits
- Menu now has 'Commit' (Ctrl+Return) for direct commit and
  'With additional options...' (Ctrl+Shift+Return) for the dialog
- Both accessible via keyboard without needing mouse
- Space/Enter on commit button commits immediately (original behavior)
- Ctrl+Return opens 'With additional options...' commit dialog
- MenuButtonPopup mode gives dropdown arrow for mouse users too
- Enter/Space: commit directly
- Ctrl+Enter: show the commit popup menu
- Ctrl+Shift+Enter: open 'With additional options...' dialog directly
@Donavin97 Donavin97 changed the title PickerView accessibility: screen reader announcements, audio sonification, context menus PickerView + related views: accessibility for blind seismologists Jun 7, 2026
@Donavin97 Donavin97 changed the title PickerView + related views: accessibility for blind seismologists (WIP) PickerView + related views: accessibility for blind seismologists Jun 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cla-signed The CLA has been signed by all contributors

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants