#tag Module
Protected Module CorePrinting
#tag Method, Flags = &h1
Protected Function DefaultPrinter() As String
// Raises an exception if an unexpected OS error occured.
#if TargetMacOS
dim printerName as string
dim printers() as PMPrinter = PrinterList
for each printer as PMPrinter in printers
if printer.IsDefault then
printerName = printer.Name
exit
end if
next
return printerName
'declare function PMServerCreatePrinterList lib framework (server as Ptr, byref printerList as Ptr) as Integer
'declare function PMPrinterIsDefault lib framework (printer as Ptr) as Integer
'declare function PMPrinterGetName lib framework (printer as Ptr) as CFStringRef
'declare function CFArrayGetCount lib cfframework (theArray as Ptr) as Integer
'declare function CFArrayGetValueAtIndex lib cfframework (theArray as Ptr, idx as Integer) as Ptr
'
'dim osErr As Integer
'dim pListRef As Ptr
'
'osErr = PMServerCreatePrinterList(nil, pListRef)
'If osErr <> 0 then
'raise new macoslibException ("PMServerCreatePrinterList failed: " + str(osErr))
'return ""
'end
'
'dim pCount as Integer = CFArrayGetCount(pListRef)
'for i as Integer = 0 to pCount-1
'dim pr As Ptr = CFArrayGetValueAtIndex(pListRef, i)
'If PMPrinterIsDefault(pr) <> 0 then
'dim defaultPrinterName as String = PMPrinterGetName(pr)
'return defaultPrinterName
'end
'next
#endif
End Function
#tag EndMethod
#tag Method, Flags = &h1
Protected Function PrinterList() As PMPrinter()
dim list() as PMPrinter
#if TargetMacOS
declare function PMServerCreatePrinterList lib framework ( server As Ptr, ByRef printerList As CFTypeRef ) As Integer
dim arrayRef as CFTypeRef
dim errNum as integer = PMServerCreatePrinterList( nil, arrayRef )
if errNum = 0 then
dim cfArr As new CFArray( arrayRef, CFType.hasOwnership )
dim lastIndex as integer = cfArr.Count - 1
for i as integer = 0 to lastIndex
dim printerRef as PMTypeRef
printerRef.value = cfArr.Value( i )
dim thisPrinter as new PMPrinter( printerRef, not PMObject.hasOwnership )
list.Append thisPrinter
next i
end if
#endif
return list
End Function
#tag EndMethod
#tag Method, Flags = &h1
Protected Function PrintSession() As PMPrintSession
// Returns a new value for PMPrintSession
// Has to be static to retain a value like current printer.
static session as new PMPrintSession
return session
End Function
#tag EndMethod
#tag Method, Flags = &h1
Protected Function SetDefaultPrinter(printerName as String) As Boolean
// Returns true if setting default printer worked.
// Return false if printer isn't found.
// Raises an exception if an unexpected OS error occured.
#if TargetMacOS
dim r as boolean
dim printers() as PMPrinter = PrinterList
for each printer as PMPrinter in printers
if printer.Name = printerName then
printer.SetDefault
r = True
exit
end if
next
return r
'declare function PMServerCreatePrinterList lib framework (server as Ptr, byref printerList as Ptr) as Integer
'declare function PMPrinterGetName lib framework (printer as Ptr) as CFStringRef
'declare function PMPrinterSetDefault lib framework (printer as Ptr) as Integer
'declare function CFArrayGetCount lib cfframework (theArray as Ptr) as Integer
'declare function CFArrayGetValueAtIndex lib cfframework (theArray as Ptr, idx as Integer) as Ptr
'
'dim osErr As Integer
'dim pListRef As Ptr
'
'osErr = PMServerCreatePrinterList(nil, pListRef)
'If osErr <> 0 then
'raise new macoslibException ("PMServerCreatePrinterList failed: " + str(osErr))
'return false
'end
'
'dim targetPrinter as Ptr = nil
'dim pCount as integer = CFArrayGetCount(pListRef)
'for i as Integer = 0 to pCount-1
'dim pr As Ptr = CFArrayGetValueAtIndex(pListRef, i)
'dim pName as string = PMPrinterGetName(pr)
'if pName = printerName then
'targetPrinter = pr
'exit
'end
'next
'
'if targetPrinter = nil then
'// Can't find printer
'return false
'end
'
'osErr = PMPrinterSetDefault(targetPrinter)
'If osErr <> 0 then
'raise new macoslibException ("PMPrinterSetDefault failed: " + str(osErr))
'return false
'end
'
'return true
#else
#pragma unused printerName
#endif
End Function
#tag EndMethod
#tag Note, Name = See also
NSPrinter class
#tag EndNote
#tag Constant, Name = cfframework, Type = String, Dynamic = False, Default = \"CoreFoundation", Scope = Private
#tag EndConstant
#tag Constant, Name = framework, Type = String, Dynamic = False, Default = \"ApplicationServices", Scope = Protected
#tag EndConstant
#tag Structure, Name = PMTypeRef, Flags = &h0
value As Ptr
#tag EndStructure
#tag ViewBehavior
#tag ViewProperty
Name="Index"
Visible=true
Group="ID"
InitialValue="-2147483648"
Type="Integer"
#tag EndViewProperty
#tag ViewProperty
Name="Left"
Visible=true
Group="Position"
InitialValue="0"
Type="Integer"
#tag EndViewProperty
#tag ViewProperty
Name="Name"
Visible=true
Group="ID"
Type="String"
#tag EndViewProperty
#tag ViewProperty
Name="Super"
Visible=true
Group="ID"
Type="String"
#tag EndViewProperty
#tag ViewProperty
Name="Top"
Visible=true
Group="Position"
InitialValue="0"
Type="Integer"
#tag EndViewProperty
#tag EndViewBehavior
End Module
#tag EndModule