ftp.nice.ch/pub/next/text/apps/eText5.0.93.s.tar.gz#/eText5/Document.subproj/UndoManager.h

This is UndoManager.h in view mode; [Download] [Up]

{\rtf0\ansi{\fonttbl\f0\fmodern Courier;}
\paperw11640
\paperh8400
\margl120
\margr120
\pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f0\b0\i0\ulnone\fs24\fc0\cf0 #import <appkit/appkit.h>\

\b \
//  Written by: Jeff Martin (jmartin@bozell.com)\
//  You may freely copy, distribute and reuse the code in this example.  \
//  Don't even talk to me about warranties.\

\b0 \

\b // Modified subtly & extensively by RK, 10/15-10/18 94.\
// See TextUndo testbed project for details.
\b0 \
\

\i @protocol UndoDelegate\

\i0 //ÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐ\
//	
\b <UndoDelegate> Protocol\

\b0 //\
	- 
\b undoManagerWillUndo
\b0 :sender;\
	- 
\b undoManagerDidUndo
\b0 :sender;\

\i \
@end\

\i0 \

\i @interface UndoManager : Object \{\

\i0 //ÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐ\
//	
\b Instance Variables\

\b0 //\
	id		
\b undoList
\b0 ;			// The list that holds undo records\
	id		
\b redoList
\b0 ;			// The list that holds redo records\
	int		
\b disabled
\b0 ;			// Whether the UndoManager is accepting events\
	BOOL	
\b undoing
\b0 ;			// Whether the UndoManager is currently undoing\
	BOOL	
\b redoing
\b0 ;			// Whether the UndoManager is currently redoing\
	BOOL	
\b recordGrouping
\b0 ;	// Whether UndoRecords are being grouped\
	int		
\b levelsOfUndo
\b0 ;		// How many levels of undo/redo to record\
\
	id		
\b target
\b0 ;				// Current target of registered undo messages\
	id		
\b delegateList
\b0 ;		// List of objects to be notified of UM changes\
	unsigned int 
\b freeArgsMask
\b0 ; // Stores which args to free\
	unsigned int 
\b copyArgsMask
\b0 ; 
// Make undo manager copy pointer args\
	NXAtom	
\b actionName
\b0 , 
\b currentActionName
\b0 ;\

	\}\
\
//ÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐ\
//	
\b Format of an undo/redo record\

\b0 //\

\
typedef struct 
UndoRecord \{\
	
\b marg_list
\b0  	
\b args
\b0 ;\
	int 		
\b freeArgsMask
\b0 ;\
	int 		
\b argSize
\b0 ;\
\} 
\b UndoRecord
\b0 ;\
\
typedef struct RecordGroup \{\
	Storage 	*
\b recordList
\b0 ;\
	NXAtom		
\b actionName
\b0 ;\
\} 
\b RecordGroup
\b0 ;\
\
\
- init;\
\
//ÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐ\

// 
\b Grouping multiple UndoRecords into an undo event
\b0 \
//\
	- 
\b beginUndoRecordGrouping
\b0 ;\
	- 
\b endUndoRecordGrouping
\b0 ;\
\
//ÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐ\

// 
\b Disable/Reenable UndoManager to prevent events from being added to undo list
\b0 \
//\
	- 
\b disableUndoRegistration
\b0 ;\
	- 
\b reenableUndoRegistration
\b0 ;\
\
//ÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐ\

// 
\b Setting the current target for events that are received
\b0 \
//\
	- 
\b setUndoTarget
\b0 :object;\
\
//ÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐ\
// 
\b Setting the current name of RecordGroup
\b0 \
//\
	- 
\b setActionName
\b0 :(const char *)aName;\
\
//ÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐ\
// 
\b Querying the Undo/Redo status for menu validation
\b0 \
//\
	- (const char *)
\b lastUndoName
\b0 ;\
	- (const char *)
\b lastRedoName
\b0 ;\
	- (NXAtom)
\b currentActionName
\b0 ;\
\
//ÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐ\
// 
\b Setting the target or args of the next registered method to be freed when
\b0  \
//  
\b they fall off the end of the undo/redo list or are executed
\b0 \
//\
	- 
\b freeUndoTarget
\b0 ;\
	- 
\b freeUndoArgs
\b0 ;\
	- 
\b freeUndoArgAt
\b0 :(
\b int
\b0 )pos;\
\
//ÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐ\
// 
\b Setting the target or args of the next registered method to be freed when
\b0  \
//  
\b they fall off the end of the undo/redo list
\b0 \
//\
	- 
\b freeUndoTargetOnRecordDiscard
\b0 ;\
	- 
\b freeUndoArgsOnRecordDiscard
\b0 ;\
	- 
\b freeUndoArgOnRecordDiscardAt
\b0 :(
\b int
\b0 )pos;\
\
//ÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐ\
// 
\b Setting the target or args of the next registered method to be freed when
\b0  \
//  
\b they are executed
\b0 \
//\
	- 
\b freeUndoTargetOnRecordExecute
\b0 ;\
	- 
\b freeUndoArgsOnRecordExecute
\b0 ;\
	- 
\b freeUndoArgOnRecordExecuteAt
\b0 :(
\b int
\b0 )pos;\
\
//ÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐ\
// 
\b Make UndoManager copy arguments(like objects or strings) for convenience
\b0 \
//\
	- 
\b copyUndoArgs
\b0 ;\
	- 
\b copyUndoArgAt
\b0 :(
\b int
\b0 )pos;\
\
//ÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐ\
// 
\b Make UndoManager copy arguments and free them when record is discarded
\b0 \
//\
	- 
\b copyUndoArgsFreeOnDiscard
\b0 ;\
	- 
\b copyUndoArgFreeOnDiscardAt
\b0 :(
\b int
\b0 )pos;\
\
//ÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐ\
// 
\b Make UndoManager copy arguments and free them when record is executed
\b0 \
//\
	- 
\b copyUndoArgsFreeOnExecute
\b0 ;\
	- 
\b copyUndoArgFreeOnExecuteAt
\b0 :(
\b int
\b0 )pos;\
\
//ÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐ\
// 
\b Copies the pointer args in undoRecord as requested by copyArgsMask
\b0 \
//\
	- 
\b copyUndoArgsForRecord
\b0 :(
\b UndoRecord
\b0  *)undoRecord;\
\
//ÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐ\
// 
\b Overridden to capture undo/redo messages to be added to current record
\b0 \
//\
	- 
\b forward
\b0 :(
\b SEL
\b0 )aSelector :(
\b marg_list
\b0 )argFrame;\
\
//ÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐ\
// 
\b Removes a record from the undo/redo list and dispatches the messages in it
\b0 .\
//\
	- 
\b undo
\b0 :sender;\
	- 
\b redo
\b0 :sender;\
\
//ÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐ\
// 
\b Query and set the maximum length of the undo/redo list
\b0 \
//\
	- (
\b int
\b0 )
\b levelsOfUndo
\b0 ;\
	- 
\b setLevelsOfUndo
\b0 :(
\b int
\b0 )value;\
\
//ÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐ\
// 
\b These methods add and remove objects that are to receive undo notification
\b0 .\
//\
	- 
\b addUndoDelegate
\b0 :object;\
	- 
\b removeUndoDelegate
\b0 :object;\
	- 
\b sendNotification
\b0 :(
\b SEL
\b0 )action;\
\
//ÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐ\
// 
\b Used internally to free the space used for an undo/redo groups and records
\b0 \
//\
	- 
\b discardRecordGroup
\b0 :(
\b RecordGroup
\b0  *)group;\
	- 
\b executeRecordGroup
\b0 :(
\b RecordGroup
\b0  *)group;\
	- 
\b freeUndoRecord
\b0 :(
\b UndoRecord
\b0  *)undoRecord 
\b withFreeMask
\b0 :(
\b int
\b0 )mask;\
\
//ÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐ\
// 
\b Remove and Free all records currently stored in the UndoManager
\b0  \
//\
	- 
\b emptyUndoManager
\b0 ;\
\
//ÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐ\
// 
\b Free space used by UndoManager
\b0 \
//\
	- 
\b free
\b0 ;\
\

\i @end
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.