home *** CD-ROM | disk | FTP | other *** search
/ The Fred Fish Collection 1.5 / ffcollection-1-5-1992-11.iso / ff_disks / 500-599 / ff589.lza / Term / TermSrc.lha / TransferPanel.c < prev    next >
C/C++ Source or Header  |  1991-12-01  |  9KB  |  397 lines

  1. /* $Revision Header * Header built automatically - do not edit! *************
  2.  *
  3.  *    (C) Copyright 1991 by Olaf 'Olsen' Barthel & MXM
  4.  *
  5.  *    Name .....: TransferPanel.c
  6.  *    Created ..: Monday 21-Jan-91 20:12
  7.  *    Revision .: 0
  8.  *
  9.  *    Date            Author          Comment
  10.  *    =========       ========        ====================
  11.  *    21-Jan-91       Olsen           Created this file!
  12.  *
  13.  * $Revision Header ********************************************************/
  14.  
  15. #include "TermGlobal.h"
  16.  
  17. STATIC struct Gadget    *GadgetList;
  18. STATIC BYTE         LastStatus = -1;
  19.  
  20. STATIC WORD         PositionX = -1,PositionY = -1;
  21.  
  22. #define WIDTH        (70*8+12)
  23. #define HEIGHT        (16*8+24+27)
  24.  
  25. #define ORIGIN_X    13
  26. #define ORIGIN_Y    14
  27.  
  28. enum    {    MEN_ABORT=1,MEN_SKIP,MEN_QUITPANEL };
  29.  
  30. STATIC struct NewMenu NewTransferMenu[] =
  31. {
  32.     { NM_TITLE, "Project",             0 , 0, 0, (APTR)0},
  33.     {  NM_ITEM, "Abort Entire Transfer",    "A", 0, 0, (APTR)MEN_ABORT},
  34.     {  NM_ITEM, "Skip Current File",    "S", 0, 0, (APTR)MEN_SKIP},
  35.     {  NM_ITEM, NM_BARLABEL,         0 , 0, 0, (APTR)0},
  36.     {  NM_ITEM, "Quit",            "Q", 0, 0, (APTR)MEN_QUITPANEL},
  37.     { NM_END, 0,                 0 , 0, 0, (APTR)0}
  38. };
  39.  
  40. STATIC struct Gadget *
  41. CreateAllGadgets(struct Gadget **GadgetArray,struct Gadget **GadgetList,APTR VisualInfo,UWORD TopEdge)
  42. {
  43.     struct Gadget        *Gadget;
  44.     struct NewGadget     NewGadget;
  45.     UWORD             Counter = 0;
  46.  
  47.     memset(&NewGadget,0,sizeof(struct NewGadget));
  48.  
  49.     if(Gadget = CreateContext(GadgetList))
  50.     {
  51.         NewGadget . ng_TextAttr        = &DefaultFont;
  52.         NewGadget . ng_VisualInfo    = VisualInfo;
  53.  
  54.         NewGadget . ng_Width        = (WIDTH - 30) >> 1;
  55.         NewGadget . ng_Height        = 12;
  56.         NewGadget . ng_GadgetText    = "_Abort Entire Transfer";
  57.         NewGadget . ng_GadgetID        = Counter;
  58.         NewGadget . ng_Flags        = 0;
  59.         NewGadget . ng_LeftEdge        = 10;
  60.         NewGadget . ng_TopEdge        = HEIGHT - 3 - NewGadget . ng_Height;
  61.  
  62.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  63.             GT_Underscore,    '_',
  64.         TAG_DONE);
  65.  
  66.         NewGadget . ng_GadgetText    = "_Skip Current File";
  67.         NewGadget . ng_GadgetID        = Counter;
  68.         NewGadget . ng_LeftEdge        = WIDTH - 10 - NewGadget . ng_Width;
  69.  
  70.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  71.             GT_Underscore,    '_',
  72.         TAG_DONE);
  73.  
  74.         NewGadget . ng_Height        = 16;
  75.         NewGadget . ng_GadgetText    = "Data Transferred";
  76.         NewGadget . ng_GadgetID        = Counter;
  77.         NewGadget . ng_Flags        = PLACETEXT_ABOVE;
  78.         NewGadget . ng_LeftEdge        = 10;
  79.         NewGadget . ng_TopEdge        = HEIGHT - 3 - NewGadget . ng_Height - 16;
  80.  
  81.         GadgetArray[Counter++] = Gadget = CreateGadget(TEXT_KIND,Gadget,&NewGadget,
  82.             GTTX_Border,    TRUE,
  83.         TAG_DONE);
  84.  
  85.         NewGadget . ng_GadgetText    = "Time To Go";
  86.         NewGadget . ng_GadgetID        = Counter;
  87.         NewGadget . ng_LeftEdge        = WIDTH - 10 - NewGadget . ng_Width;
  88.  
  89.         GadgetArray[Counter++] = Gadget = CreateGadget(TEXT_KIND,Gadget,&NewGadget,
  90.             GTTX_Border,    TRUE,
  91.         TAG_DONE);
  92.     }
  93.  
  94.     return(Gadget);
  95. }
  96.  
  97. VOID __stdargs
  98. TransferInfo(WORD X,WORD Y,BYTE *String,...)
  99. {
  100.     if(String && TransferWindow)
  101.     {
  102.         va_list    VarArgs;
  103.  
  104.         va_start(VarArgs,String);
  105.         VSPrintf(SharedBuffer,String,VarArgs);
  106.         va_end(VarArgs);
  107.  
  108.         if(String[0] == '%' && String[2] == 'd')
  109.         {
  110.             strcat(SharedBuffer,"              ");
  111.  
  112.             SharedBuffer[11] = 0;
  113.         }
  114.  
  115.         Move(TransferWindow -> RPort,ORIGIN_X + X * 8,ORIGIN_Y + 6 + Y * 4);
  116.         Text(TransferWindow -> RPort,SharedBuffer,strlen(SharedBuffer));
  117.     }
  118. }
  119.  
  120. VOID
  121. GhostStats(struct Gadget *Gadget)
  122. {
  123.     STATIC ULONG __chip     Check = 0x5555AAAA;
  124.     struct RastPort        *RPort = TransferWindow -> RPort;
  125.     BYTE             FgPen = RPort -> FgPen;
  126.  
  127.     SetAPen(RPort,1);
  128.  
  129.     SetAfPt(RPort,(UWORD *)&Check,1);
  130.  
  131.     RectFill(RPort,Gadget -> LeftEdge + 2,Gadget -> TopEdge + 1,Gadget -> LeftEdge + Gadget -> Width - 3,Gadget -> TopEdge + Gadget -> Height - 2);
  132.  
  133.     SetAPen(RPort,FgPen);
  134.  
  135.     SetAfPt(RPort,NULL,0);
  136. }
  137.  
  138. VOID
  139. ShowStats(struct Gadget *Gadget,LONG Value,LONG Max)
  140. {
  141.     if(TransferWindow)
  142.     {
  143.         struct RastPort    *RPort = TransferWindow -> RPort;
  144.         LONG         MaxWidth = Gadget -> Width - 4,Width;
  145.  
  146.         if((Width = (MaxWidth * Value) / Max) > 0)
  147.         {
  148.             if(Width != MaxWidth)
  149.             {
  150.                 BYTE FgPen = RPort -> FgPen;
  151.  
  152.                 SetAPen(RPort,0);
  153.  
  154.                 RectFill(RPort,Gadget -> LeftEdge + 2 + Width - 1,Gadget -> TopEdge + 1,Gadget -> LeftEdge + Gadget -> Width - 3,Gadget -> TopEdge + Gadget -> Height - 2);
  155.  
  156.                 SetAPen(RPort,FgPen);
  157.             }
  158.  
  159.             RectFill(RPort,Gadget -> LeftEdge + 2,Gadget -> TopEdge + 1,Gadget -> LeftEdge + Width + 1,Gadget -> TopEdge + Gadget -> Height - 2);
  160.         }
  161.         else
  162.         {
  163.             BYTE FgPen = RPort -> FgPen;
  164.  
  165.             SetAPen(RPort,0);
  166.  
  167.             RectFill(RPort,Gadget -> LeftEdge + 2,Gadget -> TopEdge + 1,Gadget -> LeftEdge + Gadget -> Width - 3,Gadget -> TopEdge + Gadget -> Height - 2);
  168.  
  169.             SetAPen(RPort,FgPen);
  170.         }
  171.     }
  172. }
  173.  
  174. VOID __stdargs
  175. ShowString(struct Gadget *Gadget,UBYTE *String,...)
  176. {
  177.     if(TransferWindow)
  178.     {
  179.         va_list         VarArgs;
  180.         WORD         Len;
  181.         struct RastPort    *RPort = TransferWindow -> RPort;
  182.  
  183.         va_start(VarArgs,String);
  184.         VSPrintf(SharedBuffer,String,VarArgs);
  185.         va_end(VarArgs);
  186.  
  187.         Len = strlen(SharedBuffer);
  188.  
  189.         Move(RPort,Gadget -> LeftEdge + 2 + (Gadget -> Width - 4 - 8 * Len) / 2,Gadget -> TopEdge + 1 + (Gadget -> Height - 2 - 8) / 2 + 6);
  190.  
  191.         if(Config . ColourMode != COLOUR_MONO)
  192.         {
  193.             BYTE FgPen = RPort -> FgPen,DrawMode = RPort -> DrawMode;
  194.  
  195.             SetAPen(RPort,2);
  196.             SetDrMd(RPort,JAM1);
  197.  
  198.             Text(RPort,SharedBuffer,Len);
  199.  
  200.             SetAPen(RPort,FgPen);
  201.             SetDrMd(RPort,DrawMode);
  202.         }
  203.         else
  204.             Text(RPort,SharedBuffer,Len);
  205.     }
  206. }
  207.  
  208. BYTE
  209. TransferPanel(UBYTE *Title)
  210. {
  211.     if(Status != STATUS_DOWNLOAD && Status != STATUS_UPLOAD)
  212.     {
  213.         LastStatus = Status;
  214.  
  215.         Status = STATUS_DOWNLOAD;
  216.     }
  217.     else
  218.         LastStatus = -1;
  219.  
  220.     if(CreateAllGadgets(&TransferGadgetArray[0],&GadgetList,VisualInfo,Screen -> WBorTop + Screen -> Font -> ta_YSize + 1))
  221.     {
  222.         if(TransferMenu = CreateMenus(NewTransferMenu,
  223.             GTMN_FrontPen, 0,
  224.         TAG_DONE))
  225.         {
  226.             if(LayoutMenus(TransferMenu,VisualInfo,
  227.                 GTMN_TextAttr,&DefaultFont,
  228.             TAG_DONE))
  229.             {
  230.                 if(PositionX == -1)
  231.                     PositionX = (Screen -> Width - WIDTH) >> 1;
  232.  
  233.                 if(PositionY == -1)
  234.                     PositionY = (Screen -> Height - HEIGHT) >> 1;
  235.  
  236.                 if(TransferWindow = OpenWindowTags(NULL,
  237.                     WA_Width,    WIDTH,
  238.                     WA_Height,    HEIGHT,
  239.  
  240.                     WA_Left,    PositionX,
  241.                     WA_Top,        PositionY,
  242.  
  243.                     WA_Activate,    TRUE,
  244.                     WA_DragBar,    TRUE,
  245.                     WA_DepthGadget,    TRUE,
  246.                     WA_CloseGadget,    TRUE,
  247.                     WA_RMBTrap,    TRUE,
  248.  
  249.                     WA_CustomScreen,Screen,
  250.  
  251.                     WA_IDCMP,    IDCMP_CLOSEWINDOW | BUTTONIDCMP | IDCMP_MENUPICK,
  252.  
  253.                     WA_Title,    Title,
  254.                 TAG_DONE))
  255.                 {
  256.                     BYTE Pen1,Pen2;
  257.  
  258.                     DrawBevelBox(TransferWindow -> RPort,10,12,WIDTH - 20,116,
  259.                         GTBB_Recessed,    TRUE,
  260.                         GT_VisualInfo,    VisualInfo,
  261.                     TAG_DONE);
  262.  
  263.                     switch(Config . ColourMode)
  264.                     {
  265.                         case COLOUR_AMIGA:    Pen1 = 1;
  266.                                     Pen2 = 3;
  267.                                     break;
  268.  
  269.                         case COLOUR_EIGHT:    Pen1 = 4;
  270.                                     Pen2 = 7;
  271.                                     break;
  272.  
  273.                         case COLOUR_SIXTEEN:    Pen1 = 15;
  274.                                     Pen2 = 8;
  275.                                     break;
  276.  
  277.                         case COLOUR_MONO:    Pen1 = Pen2 = 1;
  278.                                     break;
  279.                     }
  280.  
  281.                     PushWindow(TransferWindow);
  282.  
  283.                     AddGList(TransferWindow,GadgetList,(UWORD)-1,(UWORD)-1,NULL);
  284.                     RefreshGList(GadgetList,TransferWindow,NULL,(UWORD)-1);
  285.                     GT_RefreshWindow(TransferWindow,NULL);
  286.  
  287.                     SetMenuStrip(TransferWindow,TransferMenu);
  288.  
  289.                     TransferWindow -> Flags &= ~WFLG_RMBTRAP;
  290.  
  291.                     SetAPen(TransferWindow -> RPort,Pen1);
  292.                     SetBPen(TransferWindow -> RPort,0);
  293.                     SetDrMd(TransferWindow -> RPort,JAM2);
  294.  
  295.                     TransferInfo(0, 0,"Protocol..........:");
  296.  
  297.                     TransferInfo(0, 3,"File..............:");
  298.                     TransferInfo(0, 5,"Size..............:");
  299.  
  300.                     TransferInfo(0, 8,"Bytes Transferred.:                Blocks Transferred:");
  301.                     TransferInfo(0,10,"Block Check Type..:                Block Size........:");
  302.  
  303.                     TransferInfo(0,13,"Estimated Time....:                Elapsed Time......:");
  304.  
  305.                     TransferInfo(0,16,"Message...........:");
  306.                     TransferInfo(0,18,"Last Error........:");
  307.  
  308.                     TransferInfo(0,21,"Number Of Errors..:                Number Of Timeouts:");
  309.  
  310.                     TransferInfo(0,24,"Packet Type.......:                Packet Delay......:");
  311.                     TransferInfo(0,26,"Characters/Second.:                Character Delay...:");
  312.  
  313.                     SetAPen(TransferWindow -> RPort,Pen2);
  314.  
  315.                     TransferInfo(20, 0,"Unknown");
  316.  
  317.                     TransferInfo(20, 3,"-");
  318.                     TransferInfo(20, 5,"-");
  319.  
  320.                     TransferInfo(20, 8,"-");
  321.                     TransferInfo(55, 8,"-");
  322.  
  323.                     TransferInfo(20,10,"-");
  324.                     TransferInfo(55,10,"-");
  325.  
  326.                     TransferInfo(20,13,"-");
  327.                     TransferInfo(55,13,"-");
  328.  
  329.                     TransferInfo(20,16,"-- None --");
  330.                     TransferInfo(20,18,"-- None --");
  331.  
  332.                     TransferInfo(20,21,"-");
  333.                     TransferInfo(55,21,"-");
  334.  
  335.                     TransferInfo(20,24,"-");
  336.                     TransferInfo(55,24,"-");
  337.  
  338.                     TransferInfo(20,26,"-");
  339.                     TransferInfo(55,26,"-");
  340.  
  341.                     GhostStats(TransferGadgetArray[2]);
  342.                     GhostStats(TransferGadgetArray[3]);
  343.  
  344.                     return(TRUE);
  345.                 }
  346.             }
  347.         }
  348.     }
  349.  
  350.     return(FALSE);
  351. }
  352.  
  353. VOID
  354. DeleteTransferPanel()
  355. {
  356.     if(FileMatch)
  357.         MatchEnd(FileAnchor);
  358.  
  359.     if(LastStatus != -1)
  360.         Status = LastStatus;
  361.  
  362.     LastStatus = -1;
  363.  
  364.     if(TransferWindow)
  365.     {
  366.         PositionX    = TransferWindow -> LeftEdge;
  367.         PositionY    = TransferWindow -> TopEdge;
  368.  
  369.         TransferWindow -> Flags |= WFLG_RMBTRAP;
  370.  
  371.         ClearMenuStrip(TransferWindow);
  372.  
  373.         if(GadgetList)
  374.             RemoveGList(TransferWindow,GadgetList,(UWORD)-1);
  375.  
  376.         PopWindow();
  377.  
  378.         CloseWindow(TransferWindow);
  379.  
  380.         TransferWindow = NULL;
  381.     }
  382.  
  383.     if(TransferMenu)
  384.     {
  385.         FreeMenus(TransferMenu);
  386.  
  387.         TransferMenu = NULL;
  388.     }
  389.  
  390.     if(GadgetList)
  391.     {
  392.         FreeGadgets(GadgetList);
  393.  
  394.         GadgetList = NULL;
  395.     }
  396. }
  397.