Lightningbeam/PyGUI-2.5.3/GUI/Cocoa/Printing.py

133 lines
4.2 KiB
Python

#------------------------------------------------------------------------------
#
# PyGUI - Printing - Cocoa
#
#------------------------------------------------------------------------------
from AppKit import NSPrintInfo, NSPageLayout, NSPrintOperation, \
NSKeyedArchiver, NSKeyedUnarchiver, NSData, NSAutoPagination, \
NSPortraitOrientation, NSLandscapeOrientation, NSOKButton
from GUI.GPrinting import PageSetup as GPageSetup, Printable as GPrintable
ns_to_generic_orientation = {
NSPortraitOrientation: 'portrait',
NSLandscapeOrientation: 'landscape',
}
generic_to_ns_orientation = {
'portrait': NSPortraitOrientation,
'landscape': NSLandscapeOrientation,
}
#------------------------------------------------------------------------------
class PageSetup(GPageSetup):
def __init__(self):
ns_pi = NSPrintInfo.sharedPrintInfo().copy()
ns_pi.setLeftMargin_(36)
ns_pi.setTopMargin_(36)
ns_pi.setRightMargin_(36)
ns_pi.setBottomMargin_(36)
ns_pi.setHorizontalPagination_(NSAutoPagination)
self._ns_print_info = ns_pi
def __getstate__(self):
state = GPageSetup.__getstate__(self)
data = NSKeyedArchiver.archivedDataWithRootObject_(self._ns_print_info)
state['_ns_print_info'] = data.bytes()
return state
def __setstate__(self, state):
bytes = state.pop('_ns_print_info', None)
if bytes:
data = NSData.dataWithBytes_length_(bytes, len(bytes))
self._ns_print_info = NSKeyedArchiver.unarchiveObjectWithData_(data)
else:
GPageSetup.__setstate__(self, state)
def copy(self, other):
result = PageSetup.__new__()
result._ns_print_info = other._ns_print_info.copy()
def get_paper_name(self):
return self._ns_print_info.paperName()
def set_paper_name(self, x):
self._ns_print_info.setPaperName_(x)
def get_paper_size(self):
return tuple(self._ns_print_info.paperSize())
def set_paper_size(self, x):
self._ns_print_info.setPaperSize_(x)
def get_paper_width(self):
return self.paper_size[0]
def set_paper_width(self, x):
self.paper_size = x, self.paper_height
def get_paper_height(self):
return self.paper_size[1]
def set_paper_height(self, x):
self.paper_size = self.paper_width, x
def get_left_margin(self):
return self._ns_print_info.leftMargin()
def set_get_left_margin(self, x):
self._ns_print_info.setLefMargin_(x)
def get_right_margin(self):
return self._ns_print_info.rightMargin()
def set_get_right_margin(self, x):
self._ns_print_info.setRightMargin_(x)
def get_top_margin(self):
return self._ns_print_info.topMargin()
def set_get_top_margin(self, x):
self._ns_print_info.setTopMargin_(x)
def get_bottom_margin(self):
return self._ns_print_info.bottomMargin()
def set_get_bottom_margin(self, x):
self._ns_print_info.setBottomMargin_(x)
def get_orientation(self):
return ns_to_generic_orientation[self._ns_print_info.orientation()]
def set_orientation(self, x):
nso = generic_to_ns_orientation.get(x, 'portrait')
self._ns_print_info.setOrientation_(nso)
def get_printable_rect(self):
l, b, w, h = self._ns_print_info.imageablePageBounds()
return (l, b - h, l + w, b)
def get_printer_name(self):
return self._ns_print_info.printer().name()
def set_printer_name(self, x):
self._ns_print_info.setPrinter_(NSPrinter.printerWithName_(x))
#------------------------------------------------------------------------------
class Printable(GPrintable):
def print_view(self, page_setup, prompt = True):
ns_op = NSPrintOperation.printOperationWithView_printInfo_(
self._ns_inner_view, page_setup._ns_print_info)
ns_op.setShowsPrintPanel_(prompt)
ns_op.runOperation()
#------------------------------------------------------------------------------
def present_page_setup_dialog(page_setup):
result = NSPageLayout.pageLayout().runModalWithPrintInfo_(page_setup._ns_print_info)
return result == NSOKButton