text: from Cocoa import *
  
  import UIHandling
  import AppDrawing
  import FrameworkTextDrawing
  
  import objc
  
  # XXX: Why are these global?
  _drawingCommand = UIHandling.kHICommandSimpleRect
  _pdfDocument = None
  
  class MyView (NSView):
      currentMenuItem = objc.IBOutlet()
  
      def initWithFrame_(self, frameRect):
          self = super(MyView, self).initWithFrame_(frameRect)
          if self is None:
              return None
  
          global _pdfDocument
          _pdfDocument = None
          return self
  
  
      if False:
          def isFlipped(self):
              return True
  
  
      def drawRect_(self, rect):
          context = NSGraphicsContext.currentContext().graphicsPort()
  
          if _pdfDocument is None:
              if  _drawingCommand in (UIHandling.kHICommandDrawNSString,
                      UIHandling.kHICommandDrawNSLayoutMgr, UIHandling.kHICommandDrawCustomNSLayoutMgr):
  
                  if _drawingCommand == UIHandling.kHICommandDrawNSString:
                      FrameworkTextDrawing.drawNSStringWithAttributes()
  
                  elif _drawingCommand == UIHandling.kHICommandDrawNSLayoutMgr:
                      FrameworkTextDrawing.drawWithNSLayout()
  
                  else:
                      FrameworkTextDrawing.drawWithCustomNSLayout()
              else:
                  AppDrawing.DispatchDrawing(context, _drawingCommand)
  
          else:
              mediaRect = CGPDFDocumentGetMediaBox(_pdfDocument, 1)
              mediaRect.origin.x = mediaRect.origin.y = 0
              CGContextDrawPDFDocument(context, mediaRect, _pdfDocument, 1)
  
      @objc.IBAction
      def setDrawCommand_(self, sender):
          global _drawingCommand, _pdfDocument
  
          newCommand = sender.tag()
          if _drawingCommand != newCommand:
              _drawingCommand = newCommand
              # The view needs to be redisplayed since there is a new drawing command.
              self.setNeedsDisplay_(True)
  
              # Disable previous menu item.
              if self.currentMenuItem is not None:
                  self.currentMenuItem.setState_(NSOffState)
  
              # Update the current item.
              self.currentMenuItem = sender
  
              # Enable new menu item.
              self.currentMenuItem.setState_(NSOnState)
  
              # If we were showing a pasted document, let's get rid of it.
              if _pdfDocument:
                  _pdfDocument = None
  
      def currentPrintableCommand(self):
          # The best representation for printing or exporting
          # when the current command caches using a bitmap context
          # or a layer is to not do any caching.
          if _drawingCommand in (UIHandling.kHICommandDrawOffScreenImage,
                  UIHandling.kHICommandDrawWithLayer):
              return UIHandling.kHICommandDrawNoOffScreenImage
  
          return _drawingCommand
  
  
      def print_(self, sender):
          global _drawingCommand
  
          savedDrawingCommand = _drawingCommand
          # Set the drawing command to be one that is printable.
          _drawingCommand = self.currentPrintableCommand()
          # Do the printing operation on the view.
          NSPrintOperation.printOperationWithView_(self).runOperation()
          # Restore that before the printing operation.
          _drawingCommand = savedDrawingCommand
  
      def acceptsFirstResponder(self):
          return True
  
  
      @objc.IBAction
      def copy_(self, sender):
          addPDFDataToPasteBoard(_drawingCommand)
  
      @objc.IBAction
      def paste_(self, sender):
          global _pdfDocument
  
          newPDFDocument = createNewPDFRefFromPasteBoard()
          if newPDFDocument is not None:
              _pdfDocument = newPDFDocument
              # The view needs to be redisplayed since there is
              # a new PDF document.
              self.setNeedsDisplay_(True)
  
  
      # Return the number of pages available for printing. For this
      # application it is always 1.
      def knowsPageRange_(self):
          return True, NSRange(1, 1)
  
      # Return the drawing rectangle for a particular page number.
      # For this application it is always the page width and height.
      def rectForPage_(self, page):
          pi = NSPrintOperation.currentOperation().printInfo()
  
          # Calculate the page height in points.
          paperSize = pi.paperSize()
          return NSMakeRect(0, 0, paperSize.width, paperSize.height)
  
      def validateMenuItem_(self, menuItem):
          if menuItem.tag() == _drawingCommand:
              self.currentMenuItem = menuItem
              menuItem.setState_(True)
          else:
              menuItem.setState_(False)
  
          return True
  