Rename project to OBDash + per-metric colored multi-axis

Rename: the app is vehicle-agnostic, so 'ford-obd' was wrong. Rebranded all
code/docs/profile authors to OBDash; Gitea repo renamed justin/ford-obd ->
justin/obdash (remote + description updated). Ford the make and the
ford-6.0-powerstroke profile are unchanged (that vehicle really is a Ford).

Multi-axis upgrade (per request):
- MultiAxisPlot now gives each METRIC its own Y axis, each axis colored to
  match its line; the primary metric owns the LEFT axis, others stack right.
- Click a line to promote it to the left axis (sigClicked -> set_primary).
- Cleaner teardown (no removeItem warnings); axis label no longer doubles the
  unit; Normalize round-trips.

Validated headless: colored per-metric axes, promote-to-left, gauge view,
normalize toggle, profile switch; obdcore + diagnostics tests pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016yT89n4zR4qbrySoSiEyZs
This commit is contained in:
2026-06-30 15:25:26 -04:00
parent e7e04b740e
commit 03223dfd6c
18 changed files with 129 additions and 73 deletions
+6 -6
View File
@@ -1,4 +1,4 @@
"""ford-obd GUI -- vehicle-agnostic scanner shell.
"""OBDash GUI -- vehicle-agnostic scanner shell.
Menu bar: File (captures) | Profile (vehicle profiles) | View | Help.
Toolbar: port / baud / mock / connect + per-profile preset buttons.
@@ -98,7 +98,7 @@ class MainWindow(QtWidgets.QMainWindow):
self.theme_act = self._act(viewm, "Light Theme", self._toggle_theme, checkable=True)
helpm = mb.addMenu("&Help")
self._act(helpm, "About ford-obd", self._about)
self._act(helpm, "About OBDash", self._about)
self._act(helpm, "PID Confidence Legend", self._legend)
self._act(helpm, "Active Profile Info", self._profile_info)
@@ -375,7 +375,7 @@ class MainWindow(QtWidgets.QMainWindow):
self._refresh_title()
def _refresh_title(self):
self.setWindowTitle(f"ford-obd{self.ctl.profile.name}")
self.setWindowTitle(f"OBDash{self.ctl.profile.name}")
def _load_profile(self, path):
if self.ctl.connected:
@@ -643,10 +643,10 @@ class MainWindow(QtWidgets.QMainWindow):
# ---------- help ----------
def _about(self):
QtWidgets.QMessageBox.about(self, "About ford-obd",
"ford-obd — vehicle-agnostic OBD-II scanner\n\n"
QtWidgets.QMessageBox.about(self, "About OBDash",
"OBDash — vehicle-agnostic OBD-II scanner\n\n"
"Open source. Vehicle data lives in JSON profiles you can add/share.\n"
"git.jpaul.io/justin/ford-obd")
"git.jpaul.io/justin/obdash")
def _legend(self):
QtWidgets.QMessageBox.information(self, "PID confidence",