• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re:Making undo work with complicated NSTextView subclass
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re:Making undo work with complicated NSTextView subclass


  • Subject: Re:Making undo work with complicated NSTextView subclass
  • From: Shripada Hebbar <email@hidden>
  • Date: Mon, 7 Jan 2008 11:43:10 +0530




I'm working on a core data document-based application. For it I have created
a very complicated NSTextView subclass (about 700 lines of code), which
allows for proper outlining (i.e., nested lists). The most complicated part
of this subclass is the keyDown method, which changes the NSTextStore
primarily by changing the selection and calling [super keyDown], setting
attributes using setAttributes:range: on the text store, using several
string changing methods on the NSTextStore's mutableString method and in a
few cases setting a new NSAttributedString using the text store's
setAttributedString method.


All of these modifications muck with the text view's undo system, and I've
been unable to make it act nicely with them, with the result that some undos
throw errors (generally -[NSBigMutableString characterAtIndex:]: Range or
index out of bounds) while others proceed but restore the text completely
wrong. The apple documentation on subclassing
NSTextView<http://developer.apple.com/documentation/Cocoa/ Conceptual/TextEditing/Tasks/Subclassing.html>says:
however calling these methods doesn't seem to fix my issues.


My basic question is this: is there a way I can make NSTextView's built-in
undo manager work for me, or am I doomed to the unpleasant task of handling
it manually?


Thanks for any help.

--
Micah Wylde
You need to take care of undo and redoing of the additional behavior that you induce
into the text view. You may have to consider grouping of undo operations as well. For instance
as you mentioned you are doing lots of things in the subclass and later also happen to call on super class.
Now that the Undo manger asssociated with the view will have only the invocations of the super class and not at all your
subclass and thats the exact reason why it cant restore the states properly upon undoing.


Now what I think would solve this issue is by grouping together your custom invocations with that of the super class. Thus in the
case of say 'keydown' I would do something like this. Please note that this is just a pseudo code and I am just passing some ideas.


===
-(void)keyDown:(NSEvent*)event
{
[undoMgr beginUndoGrouping];

//register here my undo invocation which would undo the operations I do in this method.


//Do whatever is appropriate for this subclass here -any custom behavior

	//call on the super if needed.

	[undoMgr endUndoGrouping]

}
===


Regards Shripada

Attachment: smime.p7s
Description: S/MIME cryptographic signature

_______________________________________________

Cocoa-dev mailing list (email@hidden)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:

This email sent to email@hidden

  • Prev by Date: Error executing instruction "[NSBezierPath bezierPath]"
  • Next by Date: Re: Window close button issue in Leopard
  • Previous by thread: Making undo work with complicated NSTextView subclass
  • Next by thread: Re: NSKeyValueChangeNewKey returning NSNull, partially solved
  • Index(es):
    • Date
    • Thread