home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fresh Fish 8
/
FreshFishVol8-CD1.bin
/
gnu
/
os-include
/
intuition
/
sghooks.i
< prev
Wrap
Text File
|
1993-10-15
|
7KB
|
215 lines
IFND INTUITION_SGHOOKS_I
INTUITION_SGHOOKS_I SET 1
**
** $VER: sghooks.i 38.1 (11.11.91)
** Includes Release 40.15
**
** String gadget extensions and hooks
**
** (C) Copyright 1988-1993 Commodore-Amiga, Inc.
** All Rights Reserved
**
IFND EXEC_TYPES_I
INCLUDE "exec/types.i"
ENDC
STRUCTURE StringExtend,0
; display specifications
APTR sex_Font ; must be an open Font (not TextAttr)
STRUCT sex_Pens,2 ; color of text/background
STRUCT sex_ActivePens,2 ; colors when gadget is active
; edit specifications
ULONG sex_InitialModes ; initial mode flags, below
APTR sex_EditHook ; if non-NULL, must supply WorkBuffer
APTR sex_WorkBuffer ; must be as large as StringInfo.Buffer
STRUCT sex_Reserved,16 ; set to 0
LABEL sex_SIZEOF
STRUCTURE SGWork,0
; set up when gadget is first activated
APTR sgw_Gadget ; the contestant itself
APTR sgw_StringInfo ; easy access to sinfo
APTR sgw_WorkBuffer ; intuition's planned result
APTR sgw_PrevBuffer ; what was there before
ULONG sgw_Modes ; current mode
; modified for each input event
APTR sgw_IEvent ; actual event: do not change
UWORD sgw_Code ; character code, if one byte
WORD sgw_BufferPos ; cursor position
WORD sgw_NumChars
ULONG sgw_Actions ; what Intuition will do
LONG sgw_LongInt ; temp storage for longint
APTR sgw_GadgetInfo ; see cghooks.h
UWORD sgw_EditOp ; from constants below
LABEL sgw_SIZEOF ; this may change as the structure is extended
* 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 sgw_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).
EO_NOOP EQU ($0001)
; did nothing
EO_DELBACKWARD EQU ($0002)
; deleted some chars (maybe 0).
EO_DELFORWARD EQU ($0003)
; deleted some characters under and in front of the cursor
EO_MOVECURSOR EQU ($0004)
; moved the cursor
EO_ENTER EQU ($0005)
; "enter" or "return" key, terminate
EO_RESET EQU ($0006)
; current Intuition-style undo
EO_REPLACECHAR EQU ($0007)
; replaced one character and (maybe) advanced cursor
EO_INSERTCHAR EQU ($0008)
; inserted one char into string or added one at end
EO_BADFORMAT EQU ($0009)
; didn't like the text data, e.g., Bad LONGINT
EO_BIGCHANGE EQU ($000A) ; unused by Intuition
; complete or major change to the text, e.g. new string
EO_UNDO EQU ($000B) ; unused by Intuition
; some other style of undo
EO_CLEAR EQU ($000C)
; clear the string
EO_SPECIAL EQU ($000D) ; unused by Intuition
; some operation that doesn't fit into the categories here
; Mode Flags definitions (ONLY first group allowed as InitialModes)
SGM_REPLACE EQU 1
SGMB_REPLACE EQU 0
SGMF_REPLACE EQU 1
; please initialize StringInfo with in-range value of BufferPos
; if you are using SGM_REPLACE mode.
; fixed length buffer, always set SGM_REPLACE, too.
SGM_FIXEDFIELD EQU $00000002
SGMB_FIXEDFIELD EQU 1
SGMF_FIXEDFIELD EQU 2
; don't filter control chars
SGM_NOFILTER EQU $00000004
SGMB_NOFILTER EQU 2
SGMF_NOFILTER EQU 4
; SGM_EXITHELP is new for V37, and ignored by V36:
; exit with code = 0x5F if HELP hit
SGM_EXITHELP EQU $00000080
SGMB_EXITHELP EQU 7
SGMF_EXITHELP EQU $80
; String Gadget Action Flags (put in SGWork.Actions by EditHook)
SGA_USE EQU $1 ; use contents of SGWork
SGAB_USE EQU 0
SGAF_USE EQU $1
SGA_END EQU $2 ; terminate gadget, code in Code field
SGAB_END EQU 1
SGAF_END EQU $2
SGA_BEEP EQU $4 ; flash the screen for the user
SGAB_BEEP EQU 2
SGAF_BEEP EQU $4
SGA_REUSE EQU $8 ; reuse input event
SGAB_REUSE EQU 3
SGAF_REUSE EQU $8
SGA_REDISPLAY EQU $10 ; gadget visuals changed
SGAB_REDISPLAY EQU 4
SGAF_REDISPLAY EQU $10
; New for V37:
SGA_NEXTACTIVE EQU $20 ; Make next possible gadget active.
SGAB_NEXTACTIVE EQU 5
SGAF_NEXTACTIVE EQU $20
; New for V37:
SGA_PREVACTIVE EQU $40 ; Make previous possible gadget active.
SGAB_PREVACTIVE EQU 6
SGAF_PREVACTIVE EQU $40
; function id for only existing custom string gadget edit hook
SGH_KEY EQU 1 ; process editing keystroke
SGH_CLICK EQU 2 ; 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.
ENDC