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)
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()
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()
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)