Binds the native NSPrintPanel to the selected CUPS queue with all Stage 2 selections pre-applied, and captures the user's dialog changes back into ICCery for subsequent lp spooling.
Paper — two writes (E1):PageSize in PMPrintSettingsplus the PMPageFormat half the panel's paper dropdown reflects — PMPrinterGetPaperList → PMPaperGetID match → PMCreatePageFormatWithPMPaper → PMSessionValidatePageFormat → PMCopyPageFormat into printInfo.pmPageFormat() → updateFromPMPageFormat (TN2248). Custom.<pt>x<pt> tokens set printInfo.paperSize in points.
Media type:PMPrintSettingsSetValue on the queue's detected vendor key via detectMediaTypeKey.
All writes warn-only; NSPrinter display-name fallback logs a warning. PM objects released per Create/Get rules (page-format released; paper list borrowed from printer).
Capture-return + apply-back
Captured k=v string now maps PageSize / detected quality key / orientation-requested 3|4 → portrait|landscape / media (extended extractMediaType to the full vendor roster — CNIJMediaType, EPIJ_Medi, StpMediaType).
openPrinterPreferences passes all five selections and applies results back to selectedPaperSize / selectedQuality / selectedMediaType / printOrientation. workflow.pageSize is never mutated.
Known returned queue switches selectedPrinter + reloads caps; unknown queue is ignored; cancel returns nil with the info notice.
UITestHooks.printPanelResult derives the new fields from ICCERY_TEST_PANEL_OPTIONS through the same extraction helpers.
Notes: the contract's PMPrintSettingsSetValue(…, 1) shorthand was normalized to locked=false — PMCore.h explicitly recommends false. Deprecated-PM symbols verified against the installed 15.2 SDK (PMCreatePageFormatWithPMPaper, not PMPageFormatCreateWithPMPaper).
Driver PDE acceptance of preselect writes (R12) is only verifiable via capture echo on physical hardware — warn-only by design.
Refs #186
## Summary
Binds the native `NSPrintPanel` to the selected CUPS queue with all Stage 2 selections pre-applied, and captures the user's dialog changes back into ICCery for subsequent `lp` spooling.
### Preselect (locked write order: `PMSessionDefault*` → initial selections → ColorSync suppression → modal)
- **Paper — two writes (E1):** `PageSize` in `PMPrintSettings` **plus** the `PMPageFormat` half the panel's paper dropdown reflects — `PMPrinterGetPaperList` → `PMPaperGetID` match → `PMCreatePageFormatWithPMPaper` → `PMSessionValidatePageFormat` → `PMCopyPageFormat` into `printInfo.pmPageFormat()` → `updateFromPMPageFormat` (TN2248). `Custom.<pt>x<pt>` tokens set `printInfo.paperSize` in points.
- **Media type:** `PMPrintSettingsSetValue` on the queue's detected vendor key via `detectMediaTypeKey`.
- **Orientation:** `orientation-requested` 3|4 (portrait/landscape).
- All writes warn-only; NSPrinter display-name fallback logs a warning. PM objects released per Create/Get rules (page-format released; paper list borrowed from printer).
### Capture-return + apply-back
- Captured `k=v` string now maps `PageSize` / detected quality key / `orientation-requested` 3|4 → `portrait`|`landscape` / media (extended `extractMediaType` to the full vendor roster — `CNIJMediaType`, `EPIJ_Medi`, `StpMediaType`).
- `openPrinterPreferences` passes all five selections and applies results back to `selectedPaperSize` / `selectedQuality` / `selectedMediaType` / `printOrientation`. `workflow.pageSize` is never mutated.
- Known returned queue switches `selectedPrinter` + reloads caps; unknown queue is ignored; cancel returns `nil` with the info notice.
- `UITestHooks.printPanelResult` derives the new fields from `ICCERY_TEST_PANEL_OPTIONS` through the same extraction helpers.
Notes: the contract's `PMPrintSettingsSetValue(…, 1)` shorthand was normalized to `locked=false` — PMCore.h explicitly recommends false. Deprecated-PM symbols verified against the installed 15.2 SDK (`PMCreatePageFormatWithPMPaper`, not `PMPageFormatCreateWithPMPaper`).
## Verification
- Targeted gate (`build/DerivedData-feat-186-panel-binding`, x86_64):
- `CupsParserTests` 24, `PrintPanelStubTests` 5, `PrintSessionViewModelTests` 13 — 42/0
- `Milestone11PrintSettingsUITests` 5, `Milestone3UITests` 6 — 11/0
- Wider `ICCeryCoreTests`: **483 tests, 0 failures**
- `git diff --check`: clean
## Hardware gate
Driver PDE acceptance of preselect writes (R12) is only verifiable via capture echo on physical hardware — warn-only by design.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Refs #186
Summary
Binds the native
NSPrintPanelto the selected CUPS queue with all Stage 2 selections pre-applied, and captures the user's dialog changes back into ICCery for subsequentlpspooling.Preselect (locked write order:
PMSessionDefault*→ initial selections → ColorSync suppression → modal)PageSizeinPMPrintSettingsplus thePMPageFormathalf the panel's paper dropdown reflects —PMPrinterGetPaperList→PMPaperGetIDmatch →PMCreatePageFormatWithPMPaper→PMSessionValidatePageFormat→PMCopyPageFormatintoprintInfo.pmPageFormat()→updateFromPMPageFormat(TN2248).Custom.<pt>x<pt>tokens setprintInfo.paperSizein points.PMPrintSettingsSetValueon the queue's detected vendor key viadetectMediaTypeKey.orientation-requested3|4 (portrait/landscape).Capture-return + apply-back
k=vstring now mapsPageSize/ detected quality key /orientation-requested3|4 →portrait|landscape/ media (extendedextractMediaTypeto the full vendor roster —CNIJMediaType,EPIJ_Medi,StpMediaType).openPrinterPreferencespasses all five selections and applies results back toselectedPaperSize/selectedQuality/selectedMediaType/printOrientation.workflow.pageSizeis never mutated.selectedPrinter+ reloads caps; unknown queue is ignored; cancel returnsnilwith the info notice.UITestHooks.printPanelResultderives the new fields fromICCERY_TEST_PANEL_OPTIONSthrough the same extraction helpers.Notes: the contract's
PMPrintSettingsSetValue(…, 1)shorthand was normalized tolocked=false— PMCore.h explicitly recommends false. Deprecated-PM symbols verified against the installed 15.2 SDK (PMCreatePageFormatWithPMPaper, notPMPageFormatCreateWithPMPaper).Verification
build/DerivedData-feat-186-panel-binding, x86_64):CupsParserTests24,PrintPanelStubTests5,PrintSessionViewModelTests13 — 42/0Milestone11PrintSettingsUITests5,Milestone3UITests6 — 11/0ICCeryCoreTests: 483 tests, 0 failuresgit diff --check: cleanHardware gate
Driver PDE acceptance of preselect writes (R12) is only verifiable via capture echo on physical hardware — warn-only by design.