This is XTAction.h in view mode; [Download] [Up]
#import <objc/Object.h> #import <dpsclient/event.h> /* An XTAction specifies the action to be taken in response to a key event. When a key event occurs, the applyTo:event: method is invoked; this is the key method that must be implemented by the subclasses of XTAction. Actions normally return self from the applyTo:event: method, but by returning nil they can cause the event to be handled normally by XText0's superclass (i.e. Text). The class method undefinedAction returns a default action that invokes the text object's unboundKey method. */ @interface XTAction:Object { } + undefinedAction; - applyTo:xtext event:(NXEvent *)event; @end #define MAPPED_KEYS 256 // table size for a dispatch action #define NUM_MASKS 7 // keyboard independent flags /* NX_ALPHASHIFTMASK Shift lock NX_SHIFTMASK Shift key NX_CONTROLMASK Control key NX_ALTERNATEMASK Alt key NX_COMMANDMASK Command key NX_NUMERICPADMASK Number pad key NX_HELPMASK Help key charCodes are 128 * event->data.key.charCode, + 1 if shift lock, + 2 if shift, + 4 if control, + 8 if alt + 16 if command + 32 if numeric keypad + 64 if help key */ #define CHAR_CODES (MAPPED_KEYS * (1 << NUM_MASKS) )//combinations/key typedef int charCode; typedef XTAction *actionTbl[CHAR_CODES]; /* XTMsg0Action, XTMsg1Action, and XTMsg2Action are subclasses of XTAction that send a specified message to the text object with 0, 1, or 2 args. */ @interface XTMsg0Action:XTAction { SEL action_sel; } - initSel:(SEL)sel; @end @interface XTMsg1Action:XTAction { SEL action_sel; int action_arg; } - initSel:(SEL)sel arg:(int)arg; @end @interface XTMsg2Action:XTAction { SEL action_sel; int action_arg1; int action_arg2; } - initSel:(SEL)sel arg:(int)arg1 arg:(int)arg2; @end /* XTDispatchAction is a subclass of XTAction that maintains a dispatch table of other actions and selects one based on the key pressed. The methods are init initializes all actions to `nil'. XText has default NeXT Text Class behavior initBase:estream: the first argument is a string naming a 'base' set of initial bindings; the only values currently supported are "none". loadFromFile:fullName estream:errs loads keybindings from a file. Comments are lines in the file beginning with `#'. This method enables developers to load keybinding files from their .app wrapper directories. bindKey:toAction:estream: bind a key to a specified action; an action of nil will cause the key to be handled normally by the Text class addBindings:estream: parse and install the bindings specified by a string The estream argument is used to report any errors; if it is nil, the default error stream (which simply pops up an alert panel) is used. */ @interface XTDispatchAction:XTAction { actionTbl actions; } - init; - initBase:(const char *)base estream:errs; - loadFromFile:(char *)fullName estream:errs; - bindKey:(charCode)key toAction:action estream:errs; @end @interface XTDispatchAction(parsing) - addBindings:(const char *)bindings estream:errs; @end /* XTEventMsgAction is a subclass of XTAction that sends a specified message to the text object, passing the event as an argument. This is useful for implementing some special-purpose prefix commands like 'quote next character' */ @interface XTEventMsgAction:XTAction { SEL action_sel; } - initSel:(SEL)sel; @end /* XTSeqAction is a subclass of XTAction that invokes a sequence of subactions. */ @interface XTSeqAction:XTAction { int length; XTAction **actions; } - initLength:(int)len actions:(XTAction **)acts; @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.