# md12c/spacemousemapper architecture

> Architecture diagram of the GitHub repository md12c/spacemousemapper, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/md12c/spacemousemapper
- Repository: https://github.com/md12c/spacemousemapper

## Overview

SpaceMouseMapper is a Windows desktop app that turns 3Dconnexion SpaceMouse axis input into keyboard and mouse actions. The user configures axis bindings, applies changes, connects the device, then uses live gauges and sensitivity sliders to tune behavior; presets can load bindings and sensitivity settings. The graph includes the documented advanced device/byte views and event logging. Relationship evidence is limited to the README and indexed source excerpts; unsampled panel and device implementation details are not expanded beyond supported connections.

Main entry points: [`SpaceMouseMapper/src/GUI/Frame.cpp`](https://github.com/md12c/spacemousemapper/blob/main/SpaceMouseMapper/src/GUI/Frame.cpp) (Main frame), [`SpaceMouseMapper/src/GUI/SensitivityPanel.cpp`](https://github.com/md12c/spacemousemapper/blob/main/SpaceMouseMapper/src/GUI/SensitivityPanel.cpp) (Sensitivity controls), [`SpaceMouseMapper/src/Mouse/Mouse.cpp`](https://github.com/md12c/spacemousemapper/blob/main/SpaceMouseMapper/src/Mouse/Mouse.cpp) (Device input and output), [`SpaceMouseMapper/src/KeybindParsing/JSONParsing.h`](https://github.com/md12c/spacemousemapper/blob/main/SpaceMouseMapper/src/KeybindParsing/JSONParsing.h) (Preset parsing)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Desktop interface"]
  node_app["App startup<br/>[App.cpp]"]
  node_frame["Main frame<br/>[Frame.cpp]"]
  node_about["About panel<br/>[AboutPanel.cpp]"]
end

subgraph group_config["Mapping and presets"]
  node_mapping["Axis mapping<br/>[MapPanel.cpp]"]
  node_sensitivity["Sensitivity controls"]
  node_preset["Preset parsing<br/>[JSONParsing.h]"]
  node_keylookup["Keybind lookup<br/>[KeybindLookup.h]"]
end

subgraph group_runtime["Input runtime"]
  node_mouse["Device input and output<br/>[Mouse.cpp]"]
end

subgraph group_diagnostics["Diagnostics"]
  node_advanced["Advanced device views<br/>[AdvancedPanel.cpp]"]
  node_events["Event log<br/>[EventPanel.cpp]"]
end

node_user(("User"))
node_spacemouse["SpaceMouse device"]
node_keyboard["Keyboard and mouse actions"]

node_user -->|"uses"| node_frame
node_app -->|"starts"| node_frame
node_frame -->|"creates"| node_mapping
node_frame -->|"creates"| node_sensitivity
node_frame -->|"creates"| node_advanced
node_frame -->|"creates"| node_events
node_frame -->|"creates"| node_about
node_frame -->|"dispatches input"| node_mouse
node_frame -->|"loads preset"| node_preset
node_preset -->|"resolves bindings"| node_keylookup
node_frame -->|"populates bindings"| node_mapping
node_frame -->|"populates sliders"| node_sensitivity
node_frame -->|"reads sensitivity"| node_sensitivity
node_frame -->|"refreshes gauges"| node_advanced
node_frame -->|"updates gauges"| node_sensitivity
node_frame -->|"forwards logs"| node_events
node_spacemouse -.->|"sends input"| node_mouse
node_mouse -.->|"emits actions"| node_keyboard

click node_app "https://github.com/md12c/spacemousemapper/blob/main/SpaceMouseMapper/src/App.cpp"
click node_frame "https://github.com/md12c/spacemousemapper/blob/main/SpaceMouseMapper/src/GUI/Frame.cpp"
click node_mapping "https://github.com/md12c/spacemousemapper/blob/main/SpaceMouseMapper/src/GUI/MapPanel.cpp"
click node_sensitivity "https://github.com/md12c/spacemousemapper/blob/main/SpaceMouseMapper/src/GUI/SensitivityPanel.cpp"
click node_preset "https://github.com/md12c/spacemousemapper/blob/main/SpaceMouseMapper/src/KeybindParsing/JSONParsing.h"
click node_keylookup "https://github.com/md12c/spacemousemapper/blob/main/SpaceMouseMapper/src/KeybindParsing/KeybindLookup.h"
click node_mouse "https://github.com/md12c/spacemousemapper/blob/main/SpaceMouseMapper/src/Mouse/Mouse.cpp"
click node_advanced "https://github.com/md12c/spacemousemapper/blob/main/SpaceMouseMapper/src/GUI/AdvancedPanel.cpp"
click node_events "https://github.com/md12c/spacemousemapper/blob/main/SpaceMouseMapper/src/GUI/EventPanel.cpp"
click node_about "https://github.com/md12c/spacemousemapper/blob/main/SpaceMouseMapper/src/GUI/AboutPanel.cpp"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app,node_frame,node_about,node_user toneBlue
class node_mapping,node_sensitivity,node_preset,node_keylookup toneAmber
class node_mouse toneMint
class node_advanced,node_events toneRose
class node_spacemouse,node_keyboard toneIndigo
```

## Components

### Desktop interface

- [App startup](https://github.com/md12c/spacemousemapper/blob/main/SpaceMouseMapper/src/App.cpp): `SpaceMouseMapper/src/App.cpp`
- [Main frame](https://github.com/md12c/spacemousemapper/blob/main/SpaceMouseMapper/src/GUI/Frame.cpp): `SpaceMouseMapper/src/GUI/Frame.cpp`
- [About panel](https://github.com/md12c/spacemousemapper/blob/main/SpaceMouseMapper/src/GUI/AboutPanel.cpp): `SpaceMouseMapper/src/GUI/AboutPanel.cpp`

### Mapping and presets

- [Axis mapping](https://github.com/md12c/spacemousemapper/blob/main/SpaceMouseMapper/src/GUI/MapPanel.cpp): `SpaceMouseMapper/src/GUI/MapPanel.cpp`
- [Sensitivity controls](https://github.com/md12c/spacemousemapper/blob/main/SpaceMouseMapper/src/GUI/SensitivityPanel.cpp): `SpaceMouseMapper/src/GUI/SensitivityPanel.cpp`
- [Preset parsing](https://github.com/md12c/spacemousemapper/blob/main/SpaceMouseMapper/src/KeybindParsing/JSONParsing.h): `SpaceMouseMapper/src/KeybindParsing/JSONParsing.h`
- [Keybind lookup](https://github.com/md12c/spacemousemapper/blob/main/SpaceMouseMapper/src/KeybindParsing/KeybindLookup.h): `SpaceMouseMapper/src/KeybindParsing/KeybindLookup.h`

### Input runtime

- [Device input and output](https://github.com/md12c/spacemousemapper/blob/main/SpaceMouseMapper/src/Mouse/Mouse.cpp): `SpaceMouseMapper/src/Mouse/Mouse.cpp`

### Diagnostics

- [Advanced device views](https://github.com/md12c/spacemousemapper/blob/main/SpaceMouseMapper/src/GUI/AdvancedPanel.cpp): `SpaceMouseMapper/src/GUI/AdvancedPanel.cpp`
- [Event log](https://github.com/md12c/spacemousemapper/blob/main/SpaceMouseMapper/src/GUI/EventPanel.cpp): `SpaceMouseMapper/src/GUI/EventPanel.cpp`

### Other components

- **User**
- **SpaceMouse device**
- **Keyboard and mouse actions**

## Connections

- User → Main frame: uses (evidence: `README.md`)
- App startup → Main frame: starts
- Main frame → Axis mapping: creates (evidence: `SpaceMouseMapper/src/GUI/Frame.cpp`)
- Main frame → Sensitivity controls: creates (evidence: `SpaceMouseMapper/src/GUI/Frame.cpp`)
- Main frame → Advanced device views: creates (evidence: `SpaceMouseMapper/src/GUI/Frame.cpp`)
- Main frame → Event log: creates (evidence: `SpaceMouseMapper/src/GUI/Frame.cpp`)
- Main frame → About panel: creates (evidence: `SpaceMouseMapper/src/GUI/Frame.cpp`)
- Main frame → Device input and output: dispatches input (evidence: `SpaceMouseMapper/src/GUI/Frame.cpp`)
- Main frame → Preset parsing: loads preset (evidence: `SpaceMouseMapper/src/GUI/Frame.cpp`)
- Preset parsing → Keybind lookup: resolves bindings (evidence: `SpaceMouseMapper/src/KeybindParsing/JSONParsing.h`)
- Main frame → Axis mapping: populates bindings (evidence: `SpaceMouseMapper/src/GUI/Frame.cpp`)
- Main frame → Sensitivity controls: populates sliders (evidence: `SpaceMouseMapper/src/GUI/Frame.cpp`)
- Main frame → Sensitivity controls: reads sensitivity (evidence: `SpaceMouseMapper/src/GUI/Frame.cpp`)
- Main frame → Advanced device views: refreshes gauges (evidence: `SpaceMouseMapper/src/GUI/Frame.cpp`)
- Main frame → Sensitivity controls: updates gauges (evidence: `SpaceMouseMapper/src/GUI/Frame.cpp`)
- Main frame → Event log: forwards logs (evidence: `SpaceMouseMapper/src/GUI/Frame.cpp`)
- SpaceMouse device → Device input and output: sends input
- Device input and output → Keyboard and mouse actions: emits actions
