home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
326.lha
/
DateRequester
/
MRGadgets.c
< prev
next >
Wrap
C/C++ Source or Header
|
1989-12-27
|
8KB
|
259 lines
/* MRGadgets - Miscellaneous gadget support routines.
* Author: Mark R. Rinfret
* Date: 09/02/89
*
* This package contains a set of routines which assist in the use and
* management of gadgets. Many of these were developed while writing
* MRBackup.
*
* Note that an attempt was made to maintain consistency in the order
* that parameters are passed. For most routines, the parameter list
* will begin with
* (gadget, window, requester, ...)
* followed by any additional required parameters.
*/
#include <intuition/intuition.h>
#include "Strings.h"
#include "MRGadgets.h"
/* FUNCTION
EraseGadgetBox - clear the area inside a gadget's border.
SYNOPSIS
void EraseGadgetBox(gadget, window, requester)
struct Gadget *gadget;
struct Window *window;
struct Requester *requester;
DESCRIPTION
EraseGadgetBox must be called with a gadget for which a border
has been defined. It erases the area contained by the border.
This routine supports other routines, such as SetOptionGadget.
If <requester> is non-null, the <requester>'s RastPort is used.
Otherwise, the <window>'s rastport is used.
*/
void
EraseGadgetBox(gadget, window, requester)
struct Gadget *gadget;
struct Window *window;
struct Requester *requester;
{
struct RastPort *rp;
ULONG savePen;
ULONG xmin,ymin,xmax,ymax ;
rp = SelectRastPort(window, requester);
xmin = gadget->LeftEdge;
xmax = xmin + gadget->Width;
ymin = gadget->TopEdge;
ymax = ymin + gadget->Height;
savePen = rp->FgPen;
SetAPen(rp, 0L);
SetDrMd(rp, JAM1);
RectFill(rp, xmin, ymin, xmax, ymax);
SetAPen(rp, savePen);
}
/* FUNCTION
GetGadget - get gadget pointer, given gadget ID.
SYNOPSIS
struct Gadget *GetGadget(id, window)
int id;
struct Window *window;
DESCRIPTION
GetGadget attempts to locate a non-system gadget in <window>
that has the specified <id>. If found, a pointer to the gadget
is found. Otherwise, NULL is returned.
*/
struct Gadget *
GetGadget(id, window)
int id;
struct Window *window;
{
struct Gadget *testGadget;
for (testGadget = window->FirstGadget; testGadget;
testGadget = testGadget->NextGadget) {
/* All system gadget types have high bit set (I think...). */
if ( testGadget->GadgetType & 0x8000 )
continue;
if ( testGadget->GadgetID == id )
break;
}
return testGadget;
}
/* FUNCTION
ResetStringInfo - reset information in a StringInfo structure.
SYNOPSIS
void ResetStringInfo(s)
struct StringInfo *s;
DESCRIPTION
ResetStringInfo resets certain parameters in the StringInfo
structure pointed to by <s>, including:
UndoBuffer
DispPos
UndoPos
NumChars
*/
void
ResetStringInfo(s)
struct StringInfo *s;
{
*(s->UndoBuffer) = '\0';
s->BufferPos = 0;
s->DispPos = 0;
s->UndoPos = 0;
s->NumChars = strlen(s->Buffer);
}
/* Indicate that a gadget is selected by turning on its highlight
* and SELECTED flags.
* Called with:
* gadget: pointer to gadget structure
* window: pointer to window containing gadget
* state
*/
/* FUNCTION
SelectGadget - set a gadget to the SELECTED or !SELECTED state.
SYNOPSIS
void SelectGadget(gadget, window, requester, state)
struct Gadget *gadget;
struct Window *window;
struct Requester *requester;
BOOL state;
DESCRIPTION
SelectGadget removes the <gadget> from the <window's> gadget list,
sets or clears the SELECTED bit according to <state>, then adds
the gadget back to the gadget list and refreshes list. If the
gadget belongs to a requester, then <requester> must be supplied.
Otherwise, it must be NULL.
*/
void
SelectGadget(gadget, window, requester, state)
struct Gadget *gadget;
struct Window *window;
struct Requester *requester;
BOOL state;
{
long position;
position = RemoveGadget(window, gadget);
if (state)
gadget->Flags |= SELECTED;
else
gadget->Flags &= ~SELECTED;
AddGadget(window, gadget, position);
RefreshGList(gadget, window, NULL, 1L);
}
/* FUNCTION
SetOptionGadget - set string value for multi-option gadget.
SYNOPSIS
void SetOptionGadget(gadget, window, requester, option)
struct Gadget *gadget;
struct Window *window;
struct Requester *requester;
char *option;
DESCRIPTION
SetOptionGadget sets the text string of the -last- IntuiText entry
of the <gadget> to the string value in <option>. This supports
the cycling of mode values in a boolean gadget. The <gadget> must
reside in <window> or a <requester> that belongs to <window>. If
the gadget is not part of a requester, <requester> must be NULL.
*/
void
SetOptionGadget(gadget, window, requester, option)
struct Gadget *gadget;
struct Window *window;
struct Requester *requester;
char *option;
{
struct IntuiText *itp;
long position;
/* This is IMPORTANT! The IntuiText structure we are going to modify
MUST be the last entry in the list. The first entry encountered
whose NextText field is NULL is the entry we are looking for.
*/
for (itp = gadget->GadgetText; itp && itp->NextText;
itp = itp->NextText) ;
if (itp)
EraseGadgetBox(gadget, window, requester);
position = RemoveGList(window, gadget, 1L);
itp->IText = (UBYTE *) option;
AddGList(window, gadget, position, 1L, requester);
RefreshGList(gadget, window, requester, 1L);
}
/* FUNCTION
SetStringGadget - set the value of a string gadget.
SYNOPSIS
void SetStringGadget(gadget, window, requester, s)
struct Gadget *gadget;
struct Window *window;
struct Requester *requester;
char *s;
DESCRIPTION
SetStringGadget sets the string value of a <gadget>, which
belongs to <window>, to the character string pointed to by <s>.
It does this in a "polite" way, first removing the gadget from
the list, modifying it, then adding it back and refreshing the
gadget list.
If the <gadget> belongs to a requester, <requester> must contain
the address of that requester. Otherwise, it must be NULL.
If <window> is NULL, the gadget is modified without attempting
to remove/restore it to/from a window gadget list.
*/
void
SetStringGadget(gadget, window, requester, s)
struct Gadget *gadget;
struct Window *window;
struct Requester *requester;
char *s;
{
char *gs; /* pointer to gadget's text */
int max;
ULONG position;
struct StringInfo *sInfo;
char *s1;
/* Make sure we are trying to modify a string gadget. If we aren't,
* just don't do anything.
*/
if (gadget->GadgetType & STRGADGET) {
gs = (char *) GadgetString(gadget);
sInfo = (struct StringInfo *) (gadget->SpecialInfo);
max = sInfo->MaxChars;
if (window)
position = RemoveGList(window, gadget, 1L);
strncpy(gs, s, max); /* Don't exceed gadget capacity. */
if (s1 = index(gs, '\n')) /* Eliminate newline characters. */
*s1 = '\0';
ResetStringInfo(sInfo);
if (window) {
AddGList(window, gadget, position, 1L, requester);
RefreshGList(gadget, window, requester, 1L);
}
}
}