fix/ppd-media-type-and-tray-options
development
This PR implements Issue #5: adding a dedicated Print Quality option (hardware droplet addressability / pass count) alongside input raster resolution. It fully supports Canon's 5-notch Custom slider (including Super Fine mode) and Epson's multi-level quality modes.
PPD Quality Discovery (CUPSManager.swift):
CUPSManager.swift
PPDOptions
PrinterQueue
qualityChoices: [PPDChoice]
qualityKeyword: String?
CNIJPrintQuality
EPIJ_Qual
cupsPrintQuality
PrintQuality
CNIJPrintMode2
Quality
StpQuality
*OpenUI
Super Fine
Fine
Best Quality
Canon Coordinated Multi-Key Driver Injection (PrintEngine.swift):
PrintEngine.swift
0
CNIJPrintQuality=0
CNIJPrintMode2=5
CNIJPQualitySlider=5
5
CNIJPrintQuality=5
CNIJPrintMode2=1
CNIJPQualitySlider=4
10
CNIJPrintQuality=10
CNIJPrintMode2=2
CNIJPQualitySlider=3
15
CNIJPrintQuality=15
CNIJPQualitySlider=2
20
CNIJPrintQuality=20
CNIJPrintMode2=3
CNIJPQualitySlider=1
Inspector UI (InspectorView.swift):
InspectorView.swift
Print quality
qualityPop
Resolution
refillChoices
Job Serialization & Controller (TargetJob.swift, PreviewWindowController.swift):
TargetJob.swift
PreviewWindowController.swift
printQuality: String?
PrintSettings
engine.printQuality
Automated Testing (Tests/PPDOptionsTests.swift, Tests/TestRunnerMain.swift):
Tests/PPDOptionsTests.swift
Tests/TestRunnerMain.swift
TargetJob
Closes #5
No dependencies set.
The note is not visible to the blocked user.
Summary
This PR implements Issue #5: adding a dedicated Print Quality option (hardware droplet addressability / pass count) alongside input raster resolution. It fully supports Canon's 5-notch Custom slider (including Super Fine mode) and Epson's multi-level quality modes.
Key Changes
PPD Quality Discovery (
CUPSManager.swift):PPDOptionsandPrinterQueuewithqualityChoices: [PPDChoice]andqualityKeyword: String?.CNIJPrintQuality,EPIJ_Qual,cupsPrintQuality,PrintQuality,CNIJPrintMode2,Quality,StpQuality) and*OpenUIfallback.Super Fine,Fine,Best Quality) while binding them to driver choice codes.Canon Coordinated Multi-Key Driver Injection (
PrintEngine.swift):0): Super Fine -> injectsCNIJPrintQuality=0,CNIJPrintMode2=5,CNIJPQualitySlider=5.5): Fine -> injectsCNIJPrintQuality=5,CNIJPrintMode2=1,CNIJPQualitySlider=4.10): Normal(Fine) -> injectsCNIJPrintQuality=10,CNIJPrintMode2=2,CNIJPQualitySlider=3.15): Normal(Fast) -> injectsCNIJPrintQuality=15,CNIJPrintMode2=5,CNIJPQualitySlider=2.20): Fast -> injectsCNIJPrintQuality=20,CNIJPrintMode2=3,CNIJPQualitySlider=1.EPIJ_Qual) and generic drivers, seamlessly injects the selected quality code.Inspector UI (
InspectorView.swift):Print qualitydropdown (qualityPop) placed directly aboveResolution.refillChoicesto cleanly preserve selections across queue changes without injecting phantom items.Job Serialization & Controller (
TargetJob.swift,PreviewWindowController.swift):printQuality: String?toPrintSettings.engine.printQuality.Automated Testing (
Tests/PPDOptionsTests.swift,Tests/TestRunnerMain.swift):TargetJobserialization and round-trip parsing.Closes #5