home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
594a.lha
/
maker_v0.1
/
double.c
next >
Wrap
C/C++ Source or Header
|
1991-10-18
|
4KB
|
159 lines
#include "global.h"
#include <intuition/gadgetclass.h>
#include <proto/intuition.h>
#include <proto/gadtools.h>
#include <proto/exec.h>
#include <stdio.h>
#include <string.h>
struct NewGadget ng[] =
{
{ 20, 100, 60, 15, "OK", &topaz8, 0, PLACETEXT_IN, 0L, 0L }, // OK
{ 100, 100, 60, 15, "Cancel", &topaz8, 1, PLACETEXT_IN, 0L, 0L }, // Cancel
{ 60, 15, 140, 15, "Text:", &topaz8, 2, PLACETEXT_LEFT, 0L, 0L }, // Text
{ 20, 35, 100, 60, "Place Text:", &topaz8, 3, PLACETEXT_RIGHT, 0L, 0L } // Text
};
BOOL DoubleIText(LinkNode *objPtr)
{
Window *winPtr;
Gadget *context, *stringGadget, *gadgPtr, *placeGadget;
char tempStr[MAX_TEXT_LEN], *strPtr;
ULONG class, textPos;
USHORT code, gadgID;
IntuiMessage *message;
BOOL done = FALSE, isGadget, doPlaceText;
winPtr =
OpenWindowTags(0L,
WA_Left, 20,
WA_Top, 20,
WA_Width, 300,
WA_Height, 150,
WA_IDCMP, WIND_IDCMP,
WA_Flags, WFLG_DRAGBAR | WFLG_ACTIVATE |
WFLG_SMART_REFRESH | WFLG_NOCAREREFRESH,
WA_Title, "Edit IText Object:",
WA_PubScreen, gPubScreen,
TAG_DONE);
if (!winPtr)
{
printf("failed to open a window\n");
return FALSE;
}
if (!CreateContext(&context))
{
printf("createContext() failed\n");
goto itext_done;
}
gadgPtr = context;
isGadget = GetGadgetData(objPtr, 0L, 0L, 0L, 0L, 0L );
strPtr = GetItemText(objPtr);
if (strPtr)
strcpy(tempStr, strPtr);
if (objPtr->type == OTYPE_IText || objPtr->type == OTYPE_Text)
doPlaceText = FALSE;
else
{
doPlaceText = TRUE;
textPos = GetTextPlacement( objPtr );
}
ng[0].ng_VisualInfo = (APTR) gVI;
ng[1].ng_VisualInfo = (APTR) gVI;
ng[2].ng_VisualInfo = (APTR) gVI;
ng[3].ng_VisualInfo = (APTR) gVI;
gadgPtr = CreateGadget(BUTTON_KIND, gadgPtr, &ng[0], TAG_DONE);
gadgPtr = CreateGadget(BUTTON_KIND, gadgPtr, &ng[1], TAG_DONE);
stringGadget = gadgPtr = CreateGadget(STRING_KIND, gadgPtr, &ng[2],
GTST_String, tempStr,
GTST_MaxChars, MAX_TEXT_LEN - 1,
TAG_DONE);
if (doPlaceText)
placeGadget = gadgPtr = CreateGadget(MX_KIND, gadgPtr, &ng[3],
GTMX_Labels, gPlaceText,
GTMX_Active, textPos,
GTMX_Spacing, 3,
TAG_DONE);
AddGList(winPtr, context, -1, -1, 0L);
RefreshGList(context, winPtr, 0L, -1);
GT_RefreshWindow(winPtr, 0L);
while (!done)
{
Wait(1 << winPtr->UserPort->mp_SigBit);
while (message = GT_GetIMsg(winPtr->UserPort))
{
class = message->Class;
code = message->Code;
if (class == GADGETUP || class == GADGETDOWN)
gadgID = ((Gadget *) message->IAddress)->GadgetID;
GT_ReplyIMsg(message);
switch(class)
{
case GADGETUP:
if (gadgID == 0) // the OK button
{
if (isGadget)
{
if (strPtr)
strcpy( strPtr,
( (struct StringInfo *)stringGadget->SpecialInfo)->Buffer);
((GadgetObj *) objPtr)->flags =
( ((GadgetObj *) objPtr)->flags & 0xFFFFFFE0 ) |
( 1 << textPos );
MakeGadget(objPtr);
// if there are any current ListView connections to this gadget,
// update them
UpdateLVConnect(objPtr, FALSE);
ReDraw();
}
else if ( objPtr->type == OTYPE_IText )
{
ITextObj *iTextPtr = (ITextObj *) objPtr;
strcpy(strPtr,
( (struct StringInfo *)stringGadget->SpecialInfo)->Buffer);
iTextPtr->rect.maxX = iTextPtr->rect.minX +
IntuiTextLength(&iTextPtr->iText);
ReDraw();
}
done = TRUE;
}
else if (gadgID == 1)
{
done = TRUE;
}
break;
case GADGETDOWN:
if (gadgID == 3)
{
textPos = code;
}
break;
}
}
}
itext_done:
if (winPtr)
CloseWindow(winPtr);
if (context)
FreeGadgets(context);
}