Пример #1
0
 def reset_text_attributes(self, indent_size):
     font = NSFont.fontWithName_size_("Monaco", 10.0)
     spcw = font.screenFontWithRenderingMode_(NSFontDefaultRenderingMode).advancementForGlyph_(ord(u" ")).width
     ps = NSParagraphStyle.defaultParagraphStyle().mutableCopy()
     ps.setTabStops_([])
     ps.setDefaultTabInterval_(spcw * indent_size)
     ps = ps.copy()
     self._text_attributes = attrs = {NSFontAttributeName: font, NSParagraphStyleAttributeName: ps}
     range = NSMakeRange(0, self.text_storage.length())
     self.text_storage.addAttributes_range_(attrs, range)
     for view in app.iter_views_of_document(self):
         if view.text_view is not None:
             view.text_view.setTypingAttributes_(attrs)
             view.text_view.setDefaultParagraphStyle_(ps)
Пример #2
0
    def reload_document(self):
        """Reload document with the given URL

        This implementation allows the user to undo beyond the reload. The
        down-side is that it may use a lot of memory if the document is very
        large.
        """
        url = self.fileURL()
        if url is None or not os.path.exists(url.path()):
            return
        undo = self.undoManager()
        undo.should_remove = False
        textstore = self.text_storage
        self.text_storage = ak.NSTextStorage.alloc().init()
        try:
            ok, err = self.revertToContentsOfURL_ofType_error_(
                url, self.fileType(), None)
        finally:
            tempstore = self.text_storage
            self.text_storage = textstore
            undo.should_remove = True
        if not ok:
            log.error("could not reload document: %s", err)
            return  # TODO report err
        textview = None
        for view in app.iter_views_of_document(self):
            textview = view.text_view
            if textview is not None:
                break
        text = tempstore.string()
        range = fn.NSRange(0, textstore.length())
        if textview is None:
            textstore.replaceCharactersInRange_withString_(range, text)
            undo.removeAllActions()
        elif textview.shouldChangeTextInRange_replacementString_(range, text):
            #state = self.documentState
            textstore.replaceCharactersInRange_withString_(range, text)
            #self.documentState = state
            textview.didChangeText()
            textview.breakUndoCoalescing()
            # HACK use timed invocation to allow didChangeText notification
            # to update change count before _clearUndo is invoked
            self.performSelector_withObject_afterDelay_(
                "_clearChanges", self, 0)
            textview.setSelectedRange_(fn.NSRange(0, 0))
            self.update_syntaxer()
Пример #3
0
    def reload_document(self):
        """Reload document with the given URL

        This implementation allows the user to undo beyond the reload. The
        down-side is that it may use a lot of memory if the document is very
        large.
        """
        url = self.fileURL()
        if url is None or not os.path.exists(url.path()):
            return
        undo = self.undoManager()
        undo.should_remove = False
        textstore = self.text_storage
        self.text_storage = ak.NSTextStorage.alloc().init()
        try:
            ok, err = self.revertToContentsOfURL_ofType_error_(
                url, self.fileType(), None)
        finally:
            tempstore = self.text_storage
            self.text_storage = textstore
            undo.should_remove = True
        if not ok:
            log.error("could not reload document: %s", err)
            return # TODO report err
        textview = None
        for view in app.iter_views_of_document(self):
            textview = view.text_view
            if textview is not None:
                break
        text = tempstore.string()
        range = fn.NSRange(0, textstore.length())
        if textview is None:
            textstore.replaceCharactersInRange_withString_(range, text)
            undo.removeAllActions()
        elif textview.shouldChangeTextInRange_replacementString_(range, text):
            #state = self.documentState
            textstore.replaceCharactersInRange_withString_(range, text)
            #self.documentState = state
            textview.didChangeText()
            textview.breakUndoCoalescing()
            # HACK use timed invocation to allow didChangeText notification
            # to update change count before _clearUndo is invoked
            self.performSelector_withObject_afterDelay_("_clearChanges", self, 0)
            textview.setSelectedRange_(fn.NSRange(0, 0))
            self.update_syntaxer()
Пример #4
0
 def reset_text_attributes(self, indent_size):
     font = ak.NSFont.fontWithName_size_("Monaco", 10.0)
     spcw = font.screenFontWithRenderingMode_(ak.NSFontDefaultRenderingMode) \
         .advancementForGlyph_(ord(" ")).width
     ps = ak.NSParagraphStyle.defaultParagraphStyle().mutableCopy()
     ps.setTabStops_([])
     ps.setDefaultTabInterval_(spcw * indent_size)
     ps = ps.copy()
     self._text_attributes = attrs = {
         ak.NSFontAttributeName: font,
         ak.NSParagraphStyleAttributeName: ps,
     }
     range = fn.NSMakeRange(0, self.text_storage.length())
     self.text_storage.addAttributes_range_(attrs, range)
     for view in app.iter_views_of_document(self):
         if view.text_view is not None:
             view.text_view.setTypingAttributes_(attrs)
             view.text_view.setDefaultParagraphStyle_(ps)