home *** CD-ROM | disk | FTP | other *** search
/ Amiga Elysian Archive / AmigaElysianArchive.iso / comm / term33so.lha / UploadPanel.c < prev    next >
C/C++ Source or Header  |  1993-04-30  |  5KB  |  186 lines

  1. /*
  2. **    UploadPanel.c
  3. **
  4. **    ZModem auto-upload control panel support routines
  5. **
  6. **    Copyright © 1990-1993 by Olaf `Olsen' Barthel & MXM
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12. enum    {    GAD_SELECT, GAD_TEXTUPLOAD, GAD_BINARY_UPLOAD, GAD_IGNORE, GAD_ABORT };
  13.  
  14. STATIC struct Gadget *
  15. CreateAllGadgets(struct Gadget **GadgetArray,struct Gadget **GadgetList)
  16. {
  17.     struct Gadget        *Gadget;
  18.     struct NewGadget     NewGadget;
  19.     UWORD             Counter = 0;
  20.  
  21.     SZ_SizeSetup(Window -> WScreen,&UserFont,TRUE);
  22.  
  23.     memset(&NewGadget,0,sizeof(struct NewGadget));
  24.  
  25.     if(Gadget = CreateContext(GadgetList))
  26.     {
  27.         SZ_ResetMaxWidth();
  28.  
  29.         SZ_UpdateMaxWidth(TEXT_KIND,LocaleString(MSG_UPLOADPANEL_SELECT_ZMODEM_UPLOAD_TYPE_GAD),0,NULL);
  30.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_UPLOADPANEL_TEXT_UPLOAD_GAD),0,NULL);
  31.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_UPLOADPANEL_BINARY_UPLOAD_GAD),0,NULL);
  32.  
  33.         SZ_SetWidth(SZ_ResetMaxWidth());
  34.  
  35.         NewGadget . ng_GadgetText    = NULL;
  36.         NewGadget . ng_GadgetID        = Counter;
  37.         NewGadget . ng_Flags        = 0;
  38.  
  39.         GadgetArray[Counter++] = Gadget = CreateGadget(TEXT_KIND,Gadget,&NewGadget,
  40.             SZ_Adjust,        TRUE,
  41.             SZ_AutoWidth,        TRUE,
  42.  
  43.             GTTX_Text,        LocaleString(MSG_UPLOADPANEL_SELECT_ZMODEM_UPLOAD_TYPE_GAD),
  44.             GTTX_Border,        TRUE,
  45.         TAG_DONE);
  46.  
  47.         NewGadget . ng_GadgetText    = LocaleString(MSG_UPLOADPANEL_TEXT_UPLOAD_GAD);
  48.         NewGadget . ng_GadgetID        = Counter;
  49.  
  50.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  51.             SZ_Adjust,    TRUE,
  52.             SZ_AutoWidth,    TRUE,
  53.         TAG_DONE);
  54.  
  55.         NewGadget . ng_GadgetText    = LocaleString(MSG_UPLOADPANEL_BINARY_UPLOAD_GAD);
  56.         NewGadget . ng_GadgetID        = Counter;
  57.  
  58.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  59.             SZ_Adjust,    TRUE,
  60.             SZ_AutoWidth,    TRUE,
  61.         TAG_DONE);
  62.  
  63.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_UPLOADPANEL_IGNORE_GAD),0,NULL);
  64.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_ABORT_GAD),0,NULL);
  65.  
  66.         SZ_SetWidth(SZ_ResetMaxWidth());
  67.  
  68.         NewGadget . ng_GadgetText    = LocaleString(MSG_UPLOADPANEL_IGNORE_GAD);
  69.         NewGadget . ng_GadgetID        = Counter;
  70.         NewGadget . ng_Flags        = 0;
  71.  
  72.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  73.             SZ_Adjust,    TRUE,
  74.             SZ_AutoWidth,    TRUE,
  75.             SZ_AlignExtra,    TRUE,
  76.             SZ_AlignLeft,    TRUE,
  77.             SZ_AlignBottom,    TRUE,
  78.         TAG_DONE);
  79.  
  80.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_ABORT_GAD);
  81.         NewGadget . ng_GadgetID        = Counter;
  82.  
  83.         GadgetArray[Counter] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  84.             SZ_Adjust,    TRUE,
  85.             SZ_AutoWidth,    TRUE,
  86.             SZ_AlignRight,    TRUE,
  87.         TAG_DONE);
  88.     }
  89.  
  90.     return(Gadget);
  91. }
  92.  
  93. BYTE
  94. UploadPanel()
  95. {
  96.     struct Window    *PanelWindow;
  97.     struct Gadget    *GadgetList = NULL;
  98.     struct Gadget    *GadgetArray[GAD_ABORT + 1];
  99.     BYTE         Selection;
  100.  
  101.     if(CreateAllGadgets(GadgetArray,&GadgetList))
  102.     {
  103.         if(PanelWindow = OpenWindowTags(NULL,
  104.             WA_Left,    GetScreenLeft(Window) + (GetScreenWidth(Window) - SZ_GetWindowWidth()) / 2,
  105.             WA_Top,        GetScreenTop(Window) + (GetScreenHeight(Window) - SZ_GetWindowHeight())    / 2,
  106.             WA_Width,    SZ_GetWindowWidth(),
  107.             WA_Height,    SZ_GetWindowHeight(),
  108.  
  109.             WA_Activate,    TRUE,
  110.             WA_DragBar,    TRUE,
  111.             WA_DepthGadget,    TRUE,
  112.             WA_RMBTrap,    TRUE,
  113.             WA_DepthGadget,    TRUE,
  114.             WA_CloseGadget,    TRUE,
  115.             WA_CustomScreen,Window -> WScreen,
  116.  
  117.             WA_IDCMP,    IDCMP_VANILLAKEY | IDCMP_RAWKEY | IDCMP_CLOSEWINDOW | BUTTONIDCMP,
  118.  
  119.             WA_Title,    LocaleString(MSG_UPLOADPANEL_UPLOAD_TYPE_TXT),
  120.         TAG_DONE))
  121.         {
  122.             struct IntuiMessage    *Massage;
  123.             ULONG             IClass,Code;
  124.             struct Gadget        *Gadget;
  125.             BYTE             Terminated = FALSE;
  126.  
  127.             PushWindow(PanelWindow);
  128.  
  129.             AddGList(PanelWindow,GadgetList,(UWORD)-1,(UWORD)-1,NULL);
  130.             RefreshGList(GadgetList,PanelWindow,NULL,(UWORD)-1);
  131.             GT_RefreshWindow(PanelWindow,NULL);
  132.  
  133.             ClrSignal(SIG_BREAK);
  134.  
  135.             while(!Terminated)
  136.             {
  137.                 if(Wait(PORTMASK(PanelWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  138.                 {
  139.                     Selection = GAD_ABORT;
  140.  
  141.                     break;
  142.                 }
  143.  
  144.                 while(!Terminated && (Massage = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort)))
  145.                 {
  146.                     IClass    = Massage -> Class;
  147.                     Code    = Massage -> Code;
  148.                     Gadget    = (struct Gadget *)Massage -> IAddress;
  149.  
  150.                     GT_ReplyIMsg(Massage);
  151.  
  152.                     if(IClass == IDCMP_VANILLAKEY)
  153.                         KeySelect(GadgetArray,GAD_ABORT,Code,PanelWindow,&Gadget,&IClass,&Code);
  154.  
  155.                     if(IClass == IDCMP_RAWKEY && Code == HELP_CODE)
  156.                         DisplayBeep(PanelWindow -> WScreen);
  157.  
  158.                     if(IClass == IDCMP_CLOSEWINDOW)
  159.                     {
  160.                         Selection = GAD_ABORT;
  161.  
  162.                         Terminated = TRUE;
  163.                     }
  164.  
  165.                     if(IClass == IDCMP_GADGETUP)
  166.                     {
  167.                         Selection = Gadget -> GadgetID;
  168.  
  169.                         Terminated = TRUE;
  170.                     }
  171.                 }
  172.             }
  173.  
  174.             RemoveGList(PanelWindow,GadgetList,(UWORD)-1);
  175.  
  176.             PopWindow();
  177.  
  178.             CloseWindow(PanelWindow);
  179.         }
  180.     }
  181.  
  182.     FreeGadgets(GadgetList);
  183.  
  184.     return(Selection);
  185. }
  186.