Releases: Robterheine/nmgui2
v2.8.0 — Data Explorer moves to Files tab
What changed
Files tab — now supports plotting
Select any .tab or .csv file and a [ Table | Plot ] pill pair appears in the toolbar. Table shows the existing virtualised numeric view. Plot opens the full Data Explorer: interactive scatter plot (pyqtgraph), LOESS smooth, colour-by-column, row filters, log axes, Y=0 / Y=X reference lines. Column deduplication (duplicate header names in NONMEM tables) now applies in the Files tab viewer too.
Evaluation tab — simplified
The "Data Explorer" pill has been removed. The tab is now a focused 4-pill diagnostic panel: GOF | Individual Fits | OFV Waterfall | Convergence.
Auto-select sdtab
Navigating to the Files tab when a model is selected automatically highlights that model's sdtab in the file list — one click to plot.
Why
"Files tab = view + edit + plot" is a more coherent mental model than having an exploratory plot tool buried inside a diagnostics tab. The Evaluation tab is now purely for model diagnostics; the Files tab handles all file-level interaction.
v2.7.9 — Fix crash on duplicate sdtab column names
Bug fix
Sim Plot — "arg must be a list, tuple, 1-d array, or Series" crash
NONMEM sdtab files that output the same column name twice (e.g. IPRED appears at position 3 and again at position 18 in sdtabserplulimab02.tab) caused a crash when plotting. Root cause: df['IPRED'] on a DataFrame with duplicate column names returns a two-column DataFrame instead of a Series, and pd.to_numeric() rejects anything that isn't 1-D.
Fix: duplicate column names are now renamed at load time — first occurrence keeps the original name, subsequent ones get a numeric suffix (IPRED_2, IPRED_3, …). The Data card label shows a ⚠ renamed: IPRED note so you know which columns were affected.
v2.7.8 — Sim Plot PI band row redesign
What changed
- Band rows are now single-line cards — rounded, bordered frame; Alpha moved onto the same row as Lo/Hi; eliminates the orphaned second line
- Circular colour swatch — 22×22 circle with a subtle grey ring, hover ring intensifies; looks like a proper colour picker affordance
- Ghost remove button — round 20×20 pill, muted × at rest, turns solid red on hover (filter rows too)
- Dashed "Add band" / "Add filter" buttons — communicates additive intent, not a primary action
- 6 px gap between band cards for breathing room
- Preset tooltip — warns that selecting a preset resets all bands
All changes are pure Qt QSS — identical appearance on macOS, Windows, and Linux.
v2.7.7 — Silence font alias warning
Replaced -apple-system in the base stylesheet with "Helvetica Neue", "Segoe UI", Arial, sans-serif. Qt cannot resolve CSS-level font aliases and was emitting a 71 ms startup warning on every launch.
v2.7.6 — SF Mono actually renders now
What's new
SF Mono actually renders now. Qt's addApplicationFont() registers SFNSMono.ttf under the internal family name .SF NS Mono (with a leading dot and spaces), not SF Mono. The previous release was loading the file but requesting the wrong family name. The font list now uses .SF NS Mono and macOS editors render in SF Mono.
Removed system-ui from the base stylesheet. Qt does not understand this CSS keyword and was emitting a 74 ms startup warning on every launch. Replaced with -apple-system, "Segoe UI", "Helvetica Neue", Arial, sans-serif.
v2.7.5 — SF Mono on macOS
What's new
SF Mono now renders on macOS. Qt's font enumeration cannot see SF Mono through its normal APIs. This release uses QFontDatabase.addApplicationFont() to explicitly register /System/Library/Fonts/SFNSMono.ttf (and the italic variant) at startup. The Models tab editor and the Files tab viewer now show SF Mono on any standard macOS installation, as intended since v2.7.2.
No other changes.
v2.7.4: Virtualised table viewer — no row cap
CSV and NONMEM TABLE files in the Files tab are now backed by QAbstractTableModel + QTableView. Qt only fetches data for currently visible rows, so:
- Files of any size (100k–500k rows) open in under a second
- Scrolling through all rows is smooth — no pagination, no load button
- The 5 000-row cap and "Showing first N rows" notice are gone
- Column header click sorts numerically where possible, otherwise case-insensitive string sort
- Edit/Save/Discard still works — edits are written back to the in-memory model and saved to disk on Save
v2.7.3: SF Mono first in editor font priority
Font priority reordered: SF Mono → Consolas → DejaVu Sans Mono → JetBrains Mono → Cascadia Code → Liberation Mono → Menlo → Ubuntu Mono → Courier New. macOS users will now see SF Mono in both the Models tab editor and the Files tab viewer.
v2.7.2: Wider file list + SF Mono font
- File list panel wider — default middle-pane width increased from 240 → 320 px so filenames are visible without resizing the splitter manually.
- SF Mono added to the monospace font priority list (position 2, after JetBrains Mono). SF Mono is Apple's modern terminal/Xcode font available on macOS 10.12+. On a standard macOS install without JetBrains Mono, the editors will now use SF Mono instead of Menlo.
Full font priority order: JetBrains Mono → SF Mono → Cascadia Code → Cascadia Mono → Consolas → DejaVu Sans Mono → Liberation Mono → Menlo → Ubuntu Mono → Courier New.
v2.7.1: Consistent monospace font
Fixes inconsistent fonts between the Models tab editor and the Files tab viewer.
A shared monospace_font() helper in theme.py now drives both editors. It uses QFont.setFamilies() with a priority list so Qt picks the best available modern font on each platform:
JetBrains Mono → Cascadia Code → Cascadia Mono → Fira Code → Consolas → Menlo → DejaVu Sans Mono → Liberation Mono → Ubuntu Mono → Courier New
StyleHint.TypeWriter guarantees a monospace fallback on minimal installs. Both editors now use 11 pt, matching the standard VS Code / terminal default.