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 >
C/C++ Source or Header  |  1991-10-18  |  4KB  |  159 lines

  1. #include "global.h"
  2.  
  3. #include <intuition/gadgetclass.h>
  4.  
  5. #include <proto/intuition.h>
  6. #include <proto/gadtools.h>
  7. #include <proto/exec.h>
  8. #include <stdio.h>
  9. #include <string.h>
  10.  
  11. struct NewGadget ng[] =
  12. {
  13.     { 20, 100, 60, 15, "OK", &topaz8, 0, PLACETEXT_IN, 0L, 0L },                    //        OK
  14.     { 100, 100, 60, 15, "Cancel", &topaz8, 1, PLACETEXT_IN, 0L, 0L },                //        Cancel
  15.     { 60, 15, 140, 15, "Text:", &topaz8, 2, PLACETEXT_LEFT, 0L, 0L },                //        Text
  16.     { 20, 35, 100, 60, "Place Text:", &topaz8, 3, PLACETEXT_RIGHT, 0L, 0L }        //        Text
  17. };
  18.  
  19. BOOL DoubleIText(LinkNode *objPtr)
  20. {
  21.     Window        *winPtr;
  22.     Gadget        *context, *stringGadget, *gadgPtr, *placeGadget;
  23.     char            tempStr[MAX_TEXT_LEN], *strPtr;
  24.     ULONG            class, textPos;
  25.     USHORT        code, gadgID;
  26.     IntuiMessage    *message;
  27.     BOOL                done = FALSE, isGadget, doPlaceText;
  28.     
  29.     winPtr = 
  30.             OpenWindowTags(0L,
  31.                                 WA_Left,        20,
  32.                                 WA_Top,        20,
  33.                                 WA_Width,    300,
  34.                                 WA_Height,    150,
  35.                                 WA_IDCMP,    WIND_IDCMP,
  36.                                 WA_Flags,    WFLG_DRAGBAR | WFLG_ACTIVATE |
  37.                                                 WFLG_SMART_REFRESH |    WFLG_NOCAREREFRESH,
  38.                                 WA_Title,    "Edit IText Object:",
  39.                                 WA_PubScreen, gPubScreen,
  40.                                 TAG_DONE);
  41.                                 
  42.     if (!winPtr)
  43.     {
  44.         printf("failed to open a window\n");
  45.         return FALSE;
  46.     }
  47.  
  48.     if (!CreateContext(&context))
  49.     {
  50.         printf("createContext() failed\n");
  51.         goto itext_done;
  52.     }
  53.     gadgPtr = context;
  54.     
  55.     isGadget = GetGadgetData(objPtr, 0L, 0L, 0L, 0L, 0L );
  56.     
  57.     strPtr = GetItemText(objPtr);
  58.     if (strPtr)
  59.         strcpy(tempStr, strPtr);
  60.     
  61.     if (objPtr->type == OTYPE_IText || objPtr->type == OTYPE_Text)
  62.         doPlaceText = FALSE;
  63.     else
  64.     {
  65.         doPlaceText = TRUE;
  66.         textPos = GetTextPlacement( objPtr );
  67.     }
  68.     
  69.     ng[0].ng_VisualInfo = (APTR) gVI;
  70.     ng[1].ng_VisualInfo = (APTR) gVI;
  71.     ng[2].ng_VisualInfo = (APTR) gVI;
  72.     ng[3].ng_VisualInfo = (APTR) gVI;
  73.  
  74.     gadgPtr = CreateGadget(BUTTON_KIND, gadgPtr, &ng[0], TAG_DONE);
  75.     gadgPtr = CreateGadget(BUTTON_KIND, gadgPtr, &ng[1], TAG_DONE);
  76.     stringGadget = gadgPtr = CreateGadget(STRING_KIND, gadgPtr, &ng[2],
  77.                                     GTST_String, tempStr,
  78.                                     GTST_MaxChars, MAX_TEXT_LEN - 1,
  79.                                     TAG_DONE);
  80.     if (doPlaceText)
  81.         placeGadget = gadgPtr = CreateGadget(MX_KIND, gadgPtr, &ng[3],
  82.                                         GTMX_Labels, gPlaceText,
  83.                                         GTMX_Active, textPos,
  84.                                         GTMX_Spacing, 3,
  85.                                         TAG_DONE);
  86.     
  87.     AddGList(winPtr, context, -1, -1, 0L);
  88.     RefreshGList(context, winPtr, 0L, -1);
  89.     GT_RefreshWindow(winPtr, 0L);
  90.     
  91.     while (!done)
  92.     {
  93.         Wait(1 << winPtr->UserPort->mp_SigBit);
  94.         while (message = GT_GetIMsg(winPtr->UserPort))
  95.         {
  96.             class = message->Class;
  97.             code = message->Code;
  98.             if (class == GADGETUP || class == GADGETDOWN)
  99.                 gadgID = ((Gadget *) message->IAddress)->GadgetID;
  100.             GT_ReplyIMsg(message);
  101.             switch(class)
  102.             {
  103.                 case GADGETUP:
  104.                     if (gadgID == 0)        // the OK button
  105.                     {
  106.                         if (isGadget)
  107.                         {
  108.                             if (strPtr)
  109.                                 strcpy( strPtr,
  110.                                         ( (struct StringInfo *)stringGadget->SpecialInfo)->Buffer);
  111.                             ((GadgetObj *) objPtr)->flags =
  112.                                                 ( ((GadgetObj *) objPtr)->flags & 0xFFFFFFE0 ) |
  113.                                                 ( 1 << textPos );
  114.                                                 
  115.                             MakeGadget(objPtr);
  116.                             
  117.                             // if there are any current ListView connections to this gadget,
  118.                             // update them
  119.     
  120.                             UpdateLVConnect(objPtr, FALSE);
  121.     
  122.                             ReDraw();
  123.                         }
  124.                         else if ( objPtr->type == OTYPE_IText )
  125.                         {
  126.                             ITextObj        *iTextPtr = (ITextObj *) objPtr;
  127.                             
  128.                             strcpy(strPtr,
  129.                                         ( (struct StringInfo *)stringGadget->SpecialInfo)->Buffer);
  130.                             iTextPtr->rect.maxX = iTextPtr->rect.minX +
  131.                                                             IntuiTextLength(&iTextPtr->iText);
  132.                             ReDraw();
  133.                         }
  134.                         done = TRUE;
  135.                     }
  136.                     else if (gadgID == 1)
  137.                     {
  138.                         done = TRUE;
  139.                     }
  140.                     break;
  141.                 case GADGETDOWN:
  142.                     if (gadgID == 3)
  143.                     {
  144.                         textPos = code;
  145.                     }
  146.                     break;
  147.             }
  148.         }
  149.     }
  150.     
  151.     
  152. itext_done:
  153.  
  154.     if (winPtr)
  155.         CloseWindow(winPtr);
  156.     
  157.     if (context)
  158.         FreeGadgets(context);
  159. }