home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 357.lha / intuisup_v1.15 / examples / fileio / window.c < prev    next >
C/C++ Source or Header  |  1990-03-10  |  7KB  |  237 lines

  1. #include <intuition/intuisup.h>
  2. #include <intuition/intuitionbase.h>
  3. #include <graphics/gfxmacros.h>
  4. #include <proto/all.h>
  5.  
  6.  
  7. extern struct  IntuitionBase  *IntuitionBase;
  8.  
  9.  
  10. #define  GREY     0
  11. #define  WHITE    1
  12. #define  BLACK    2
  13. #define  YELLW    3
  14.  
  15. #define  MAX_GADGETS          5
  16. #define  TITLEBAR_HEIGHT      10
  17.  
  18.  
  19. static struct TextAttr safefont = { "topaz.font", 8, 0, 0 };
  20.  
  21. static USHORT chip Close1Data[] =
  22.    {
  23.    0xffff,    /* ################ */
  24.    0xc003,    /* ##............## */
  25.    0xcff3,    /* ##..########..## */
  26.    0xcff3,    /* ##..########..## */
  27.    0xcff3,    /* ##..########..## */
  28.    0xcff3,    /* ##..########..## */
  29.    0xc003,    /* ##............## */
  30.    0xffff,    /* ################ */
  31.  
  32.    0x0000,    /* ................ */
  33.    0x3ffc,    /* ..############.. */
  34.    0x300c,    /* ..##........##.. */
  35.    0x300c,    /* ..##........##.. */
  36.    0x300c,    /* ..##........##.. */
  37.    0x300c,    /* ..##........##.. */
  38.    0x3ffc,    /* ..############.. */
  39.    0x0000,    /* ................ */
  40.    };
  41.  
  42. static USHORT chip Close2Data[] =
  43.    {
  44.    0xffff,    /* ################ */
  45.    0xc003,    /* ##............## */
  46.    0xc3c3,    /* ##....####....## */
  47.    0xcdb3,    /* ##..##.##.##..## */
  48.    0xcdb3,    /* ##..##.##.##..## */
  49.    0xc3c3,    /* ##....####....## */
  50.    0xc003,    /* ##............## */
  51.    0xffff,    /* ################ */
  52.  
  53.    0x0000,    /* ................ */
  54.    0x3ffc,    /* ..############.. */
  55.    0x3c3c,    /* ..####....####.. */
  56.    0x324c,    /* ..##..#..#..##.. */
  57.    0x324c,    /* ..##..#..#..##.. */
  58.    0x3c3c,    /* ..####....####.. */
  59.    0x3ffc,    /* ..############.. */
  60.    0x0000,    /* ................ */
  61.    };
  62.  
  63. static USHORT chip Depth1Data[] =
  64.    {
  65.    0xffff,    /* ################ */
  66.    0xc03f,    /* ##........###### */
  67.    0xcf3f,    /* ##..####..###### */
  68.    0xcc03,    /* ##..##........## */
  69.    0xc003,    /* ##............## */
  70.    0xfc03,    /* ######........## */
  71.    0xfc03,    /* ######........## */
  72.    0xffff,    /* ################ */
  73.  
  74.    0x0000,    /* ................ */
  75.    0x3fc0,    /* ..########...... */
  76.    0x30c0,    /* ..##....##...... */
  77.    0x33fc,    /* ..##..########.. */
  78.    0x3ffc,    /* ..############.. */
  79.    0x03fc,    /* ......########.. */
  80.    0x03fc,    /* ......########.. */
  81.    0x0000,    /* ................ */
  82.    };
  83.  
  84. static USHORT chip Depth2Data[] =
  85.    {
  86.    0xffff,    /* ################ */
  87.    0xc03f,    /* ##........###### */
  88.    0xc03f,    /* ##........###### */
  89.    0xc003,    /* ##............## */
  90.    0xc0f3,    /* ##......####..## */
  91.    0xfcf3,    /* ######..####..## */
  92.    0xfc03,    /* ######........## */
  93.    0xffff,    /* ################ */
  94.  
  95.    0x0000,    /* ................ */
  96.    0x3fc0,    /* ..########...... */
  97.    0x3fc0,    /* ..########...... */
  98.    0x3ffc,    /* ..############.. */
  99.    0x3f0c,    /* ..######....##.. */
  100.    0x030c,    /* ......##....##.. */
  101.    0x03fc,    /* ......########.. */
  102.    0x0000,    /* ................ */
  103.    };
  104.  
  105. static USHORT chip SizeData[] =
  106.    {
  107.    0xfcff,    /* ######..######## */
  108.    0xf3ff,    /* ####..########## */
  109.    0xccff,    /* ##..##..######## */
  110.    0x30ff,    /* ..##....######## */
  111.    0xffff,    /* ################ */
  112.  
  113.    0x0300,    /* ......##........ */
  114.    0x0c00,    /* ....##.......... */
  115.    0x3300,    /* ..##..##........ */
  116.    0xcf00,    /* ##..####........ */
  117.    0x0000,    /* ................ */
  118.    };
  119.  
  120. static   struct   NewWindow   nw =
  121.    {
  122.    10,20, 200,100, 0,1, NULL, SMART_REFRESH | BORDERLESS | ACTIVATE,
  123.    NULL, NULL, NULL, NULL, NULL, 120,60, 2000,2000, CUSTOMSCREEN
  124.    };
  125.  
  126. static SHORT    WBorderData0[] = { 1,0, 1,0, 0,0, 0,0 };
  127. static SHORT    WBorderData1[] = { 0,0, 0,0, 0,0, 0,0, 0,0 };
  128. static struct   Border  WBorder[] =
  129.    {
  130.       { 0, 0, BLACK, 0, JAM1, 4, WBorderData0, &WBorder[1] },
  131.       { 0, 0, BLACK, 0, JAM1, 5, WBorderData1, NULL }
  132.    };
  133. static struct   Box     WBox = { NULL, 1,0, 0,TITLEBAR_HEIGHT, BLACK, BLACK, WHITE, 0, NULL, NULL };
  134.  
  135. static struct   Image   Close1    = { 0,0, 16,8, 2, Close1Data, 0x03,0x00, NULL };
  136. static struct   Image   Close2    = { 0,0, 16,8, 2, Close2Data, 0x03,0x00, NULL };
  137. static struct   Image   Depth1    = { 0,0, 16,8, 2, Depth1Data, 0x03,0x00, NULL };
  138. static struct   Image   Depth2    = { 0,0, 16,8, 2, Depth2Data, 0x03,0x00, NULL };
  139. static struct   Image   Size      = { 0,0, 10,5, 2, SizeData, 0x3,0x0, NULL };
  140. static struct   Gadget  WGadget[MAX_GADGETS] =
  141.    {
  142.       { NULL, -19, 1, 16, 8, GRELRIGHT | GADGIMAGE | GADGHCOMP, RELVERIFY,
  143.         SYSGADGET | WUPFRONT, (APTR)&Depth1, NULL, NULL, NULL, NULL, 0, NULL },
  144.       { NULL, -39, 1, 16, 8, GRELRIGHT | GADGIMAGE | GADGHCOMP, RELVERIFY,
  145.         SYSGADGET | WDOWNBACK, (APTR)&Depth2, NULL, NULL, NULL, NULL, 0, NULL },
  146.       { NULL, -11, -5, 10, 5, GRELRIGHT | GRELBOTTOM | GADGIMAGE | GADGHNONE, 0,
  147.         SYSGADGET | SIZING, (APTR)&Size, NULL, NULL, NULL, NULL, 0, NULL },
  148.       { NULL, 4, 1, 16, 8, GADGIMAGE | GADGHIMAGE, RELVERIFY,
  149.         SYSGADGET | CLOSE, (APTR)&Close1, (APTR)&Close2, NULL, NULL, NULL, 0, NULL },
  150.       { NULL, 23, 0, -65, TITLEBAR_HEIGHT, GRELWIDTH | GADGHNONE, 0,
  151.         SYSGADGET | WDRAGGING, NULL, NULL, NULL, NULL, NULL, 0, NULL },
  152.    };
  153.  
  154. static ULONG StdIDCMP = MOUSEBUTTONS | GADGETUP | GADGETDOWN | RAWKEY | CLOSEWINDOW;
  155.  
  156.  
  157. VOID
  158. CloseStdWindow(window)
  159. struct   Window   *window;
  160. {
  161.    struct   Gadget   *gadget = window->FirstGadget, *g=NULL;
  162.  
  163.    while (gadget)
  164.          {
  165.          if (gadget->GadgetType & SYSGADGET) RemoveGadget(window, (g=gadget));
  166.          gadget = gadget->NextGadget;
  167.          if (g) { Delete(g,1); g=NULL; }
  168.          }
  169.  
  170.    CloseWindow(window);
  171. }
  172.  
  173. VOID
  174. RemakeStdWindow(window, name, pattern)
  175. struct   Window *window;
  176. UBYTE    *name;
  177. USHORT   *pattern;
  178. {
  179.    struct TextFont   *font = window->RPort->Font, *safe;
  180.  
  181.    safe = (struct TextFont *)OpenFont(&safefont);
  182.    SetFont(window->RPort, safe);
  183.    WBorderData0[3] = WBorderData0[5] =
  184.    WBorderData1[3] = WBorderData1[5] = window->Height-1;
  185.    WBorderData0[4] = WBorderData0[6] = window->Width -2;
  186.    WBorderData1[4] = WBorderData1[6] = window->Width -1;
  187.    WBox.Width = window->Width-2;
  188.    WBox.Text  = name;
  189.    DrawBorder(window->RPort, WBorder, 0,0);
  190.    DrawBox   (window->RPort, &WBox,   0,0);
  191.    SetAPen   (window->RPort, WHITE);
  192.    SetBPen   (window->RPort, GREY);
  193.    if (pattern) SetAfPt (window->RPort, pattern, 3);
  194.    RectFill  (window->RPort, 2, TITLEBAR_HEIGHT, window->Width-3, window->Height-2);
  195.    SetAfPt (window->RPort, NULL, 0);
  196.    RefreshGList(window->FirstGadget, window, NULL, -1);
  197.    SetAPen(window->RPort, GREY);
  198.    SetBPen(window->RPort, WHITE);
  199.    SetFont(window->RPort, font);
  200.    CloseFont(safe);
  201. }
  202.  
  203. struct Window *
  204. OpenStdWindow(name, flags, x, y, sx, sy, pattern)
  205. UBYTE    *name, flags;
  206. USHORT   x, y, sx,sy, *pattern;
  207. {
  208.    USHORT   g;
  209.    struct   Window   *window;
  210.    struct   Gadget   *gadget;
  211.  
  212.    nw.LeftEdge   = x;
  213.    nw.TopEdge    = y;
  214.    nw.Width      = sx;
  215.    nw.Height     = sy;
  216.    nw.IDCMPFlags = StdIDCMP;
  217.    nw.Screen     = IntuitionBase->FirstScreen;
  218.    BindWindowToScreen(&nw);
  219.    if (window = (struct Window *)OpenWindow(&nw))
  220.       {
  221.       for(g=0; g<MAX_GADGETS; g++)
  222.          if (flags & (1 << g))
  223.             {
  224.             if (gadget = New(struct Gadget, 1))
  225.                {
  226.                *gadget = WGadget[g]; /* structure copy */
  227.                AddGadget(window, gadget, 0);
  228.                RefreshGList(gadget, window, NULL, 1);
  229.                }
  230.             }
  231.  
  232.       RemakeStdWindow(window, name, pattern);
  233.       return(window);
  234.       }
  235.    return(NULL);
  236. }
  237.