home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fresh Fish 4
/
FreshFish_May-June1994.bin
/
bbs
/
cbm
/
nduk-v39.lha
/
V39
/
include
/
intuition
/
sghooks.h
< prev
next >
Wrap
C/C++ Source or Header
|
1992-09-24
|
7KB
|
190 lines
#ifndef INTUITION_SGHOOKS_H
#define INTUITION_SGHOOKS_H TRUE
/*
** $VER: sghooks.h 38.1 (11.11.91)
** Includes Release 39.108
**
** string gadget extensions and hooks
**
** (C) Copyright 1988-1992 Commodore-Amiga, Inc.
** All Rights Reserved
*/
#ifndef EXEC_TYPES_H
#include <exec/types.h>
#endif
struct StringExtend {
/* display specifications */
struct TextFont *Font; /* must be an open Font (not TextAttr) */
UBYTE Pens[2]; /* color of text/backgroun */
UBYTE ActivePens[2]; /* colors when gadget is active */
/* edit specifications */
ULONG InitialModes; /* initial mode flags, below */
struct Hook *EditHook; /* if non-NULL, must supply WorkBuffer */
UBYTE *WorkBuffer; /* must be as large as StringInfo.Buffer*/
ULONG Reserved[4]; /* set to 0 */
};
struct SGWork {
/* set up when gadget is first activated */
struct Gadget *Gadget; /* the contestant itself */
struct StringInfo *StringInfo; /* easy access to sinfo */
UBYTE *WorkBuffer; /* intuition's planned result */
UBYTE *PrevBuffer; /* what was there before */
ULONG Modes; /* current mode */
/* modified for each input event */
struct InputEvent *IEvent; /* actual event: do not change */
UWORD Code; /* character code, if one byte */
WORD BufferPos; /* cursor position */
WORD NumChars;
ULONG Actions; /* what Intuition will do */
LONG LongInt; /* temp storage for longint */
struct GadgetInfo *GadgetInfo; /* see cghooks.h */
UWORD EditOp; /* from constants below */
};
/* SGWork.EditOp -
* These values indicate what basic type of operation the global
* editing hook has performed on the string before your gadget's custom
* editing hook gets called. You do not have to be concerned with the
* value your custom hook leaves in the EditOp field, only if you
* write a global editing hook.
*
* For most of these general edit operations, you'll want to compare
* the BufferPos and NumChars of the StringInfo (before global editing)
* and SGWork (after global editing).
*/
#define EO_NOOP (0x0001)
/* did nothing */
#define EO_DELBACKWARD (0x0002)
/* deleted some chars (maybe 0). */
#define EO_DELFORWARD (0x0003)
/* deleted some characters under and in front of the cursor */
#define EO_MOVECURSOR (0x0004)
/* moved the cursor */
#define EO_ENTER (0x0005)
/* "enter" or "return" key, terminate */
#define EO_RESET (0x0006)
/* current Intuition-style undo */
#define EO_REPLACECHAR (0x0007)
/* replaced one character and (maybe) advanced cursor */
#define EO_INSERTCHAR (0x0008)
/* inserted one char into string or added one at end */
#define EO_BADFORMAT (0x0009)
/* didn't like the text data, e.g., Bad LONGINT */
#define EO_BIGCHANGE (0x000A) /* unused by Intuition */
/* complete or major change to the text, e.g. new string */
#define EO_UNDO (0x000B) /* unused by Intuition */
/* some other style of undo */
#define EO_CLEAR (0x000C)
/* clear the string */
#define EO_SPECIAL (0x000D) /* unused by Intuition */
/* some operation that doesn't fit into the categories here */
/* Mode Flags definitions (ONLY first group allowed as InitialModes) */
#define SGM_REPLACE (1L << 0) /* replace mode */
/* please initialize StringInfo with in-range value of BufferPos
* if you are using SGM_REPLACE mode.
*/
#define SGM_FIXEDFIELD (1L << 1) /* fixed length buffer */
/* always set SGM_REPLACE, too */
#define SGM_NOFILTER (1L << 2) /* don't filter control chars */
/* SGM_EXITHELP is new for V37, and ignored by V36: */
#define SGM_EXITHELP (1L << 7) /* exit with code = 0x5F if HELP hit */
/* These Mode Flags are for internal use only */
#define SGM_NOCHANGE (1L << 3) /* no edit changes yet */
#define SGM_NOWORKB (1L << 4) /* Buffer == PrevBuffer */
#define SGM_CONTROL (1L << 5) /* control char escape mode */
#define SGM_LONGINT (1L << 6) /* an intuition longint gadget */
/* String Gadget Action Flags (put in SGWork.Actions by EditHook) */
#define SGA_USE (0x1L) /* use contents of SGWork */
#define SGA_END (0x2L) /* terminate gadget, code in Code field */
#define SGA_BEEP (0x4L) /* flash the screen for the user */
#define SGA_REUSE (0x8L) /* reuse input event */
#define SGA_REDISPLAY (0x10L) /* gadget visuals changed */
/* New for V37: */
#define SGA_NEXTACTIVE (0x20L) /* Make next possible gadget active. */
#define SGA_PREVACTIVE (0x40L) /* Make previous possible gadget active.*/
/* function id for only existing custom string gadget edit hook */
#define SGH_KEY (1L) /* process editing keystroke */
#define SGH_CLICK (2L) /* process mouse click cursor position */
/* Here's a brief summary of how the custom string gadget edit hook works:
* You provide a hook in StringInfo.Extension.EditHook.
* The hook is called in the standard way with the 'object'
* a pointer to SGWork, and the 'message' a pointer to a command
* block, starting either with (longword) SGH_KEY, SGH_CLICK,
* or something new.
*
* You return 0 if you don't understand the command (SGH_KEY is
* required and assumed). Return non-zero if you implement the
* command.
*
* SGH_KEY:
* There are no parameters following the command longword.
*
* Intuition will put its idea of proper values in the SGWork
* before calling you, and if you leave SGA_USE set in the
* SGWork.Actions field, Intuition will use the values
* found in SGWork fields WorkBuffer, NumChars, BufferPos,
* and LongInt, copying the WorkBuffer back to the StringInfo
* Buffer.
*
* NOTE WELL: You may NOT change other SGWork fields.
*
* If you clear SGA_USE, the string gadget will be unchanged.
*
* If you set SGA_END, Intuition will terminate the activation
* of the string gadget. If you also set SGA_REUSE, Intuition
* will reuse the input event after it deactivates your gadget.
*
* In this case, Intuition will put the value found in SGWork.Code
* into the IntuiMessage.Code field of the IDCMP_GADGETUP message it
* sends to the application.
*
* If you set SGA_BEEP, Intuition will call DisplayBeep(); use
* this if the user has typed in error, or buffer is full.
*
* Set SGA_REDISPLAY if the changes to the gadget warrant a
* gadget redisplay. Note: cursor movement requires a redisplay.
*
* Starting in V37, you may set SGA_PREVACTIVE or SGA_NEXTACTIVE
* when you set SGA_END. This tells Intuition that you want
* the next or previous gadget with GFLG_TABCYCLE to be activated.
*
* SGH_CLICK:
* This hook command is called when Intuition wants to position
* the cursor in response to a mouse click in the string gadget.
*
* Again, here are no parameters following the command longword.
*
* This time, Intuition has already calculated the mouse position
* character cell and put it in SGWork.BufferPos. The previous
* BufferPos value remains in the SGWork.StringInfo.BufferPos.
*
* Intuition will again use the SGWork fields listed above for
* SGH_KEY. One restriction is that you are NOT allowed to set
* SGA_END or SGA_REUSE for this command. Intuition will not
* stand for a gadget which goes inactive when you click in it.
*
* You should always leave the SGA_REDISPLAY flag set, since Intuition
* uses this processing when activating a string gadget.
*/
#endif