This is XTAction.h in view mode; [Download] [Up]
/* This file is part of the XText package (version 0.8) Mike Dixon, April 1992 Copyright (c) 1992 Xerox Corporation. All rights reserved. Use and copying of this software and preparation of derivative works based upon this software are permitted. This software is made available AS IS, and Xerox Corporation makes no warranty about the software or its performance. */ #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 81 // table size for a dispatch action #define KEY_CODES (MAPPED_KEYS * 16) // 4 modifiers = 16 combinations/key /* keyCodes are 16 * event->data.key.keyCode, + 1 if control, + 2 if shift, + 4 if alt, + 8 if command */ typedef int keyCode; typedef XTAction *actionTbl[KEY_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 initBase:estream: the first argument is a string naming a 'base' set of initial bindings; the only values currently supported are "emacs" and "none" 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; } - initBase:(const char *)base estream:errs; - bindKey:(keyCode)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.