home *** CD-ROM | disk | FTP | other *** search
/ World of A1200 / World_Of_A1200.iso / programs / monitors / rsys / source.lha / src / RSysInit.c < prev    next >
C/C++ Source or Header  |  1995-01-09  |  13KB  |  391 lines

  1. /*
  2. ***************************************************************************
  3. *
  4. * Datei:
  5. *    RSysInit.c
  6. *
  7. * Inhalt:
  8. *    void RefreshRastPort(struct Window *wind, struct Gadget **gads, int *gadnum, int cnt);
  9. *    long SetupScreen(void);
  10. *    void CloseDownScreen(void);
  11. *    int OpenSysWindow(void);
  12. *
  13. * Bemerkungen:
  14. *    Initialisierung des Hauptfensters von RSys.
  15. *
  16. * Erstellungsdatum:
  17. *    07-Jul-93    Rolf Böhme
  18. *
  19. * Änderungen:
  20. *    07-Jul-93    Rolf Böhme    Erstellung
  21. *
  22. ***************************************************************************
  23. */
  24.  
  25. #include "RSysDebug.h"
  26. #include "RSysFunc.h"
  27.  
  28.    /*
  29.     * FillGadget() löscht den Hintergrund eines Boolean-Gadgets
  30.     */
  31. static void
  32. FillGadget( struct Window *wind, struct Gadget *gad )
  33. {
  34.    BYTE GadType = (BYTE)gad->GadgetType;
  35.    UWORD pos = RemoveGadget(wind,gad);
  36.  
  37.    if(GadType == GTYP_STRGADGET)
  38.       EraseRect( wind->RPort,(long)gad->LeftEdge - 2,
  39.                              (long)gad->TopEdge - 1,
  40.                              (long)(gad->LeftEdge + gad->Width + 1),
  41.                              (long)(gad->TopEdge + gad->Height) );
  42.    else
  43.       EraseRect( wind->RPort,(long)gad->LeftEdge,
  44.                              (long)gad->TopEdge,
  45.                              (long)(gad->LeftEdge + gad->Width - 1),
  46.                              (long)(gad->TopEdge + gad->Height - 1) );
  47.  
  48.    AddGadget(wind,gad,(ULONG)pos);
  49.  
  50.    return;
  51. }
  52.  
  53.    /*
  54.     * RefreshRastPort() malt das Hintergrundmuster und erneuert
  55.     * die Gadgets und deren Hintergrund
  56.     */
  57. void
  58. RefreshRastPort(struct Window *wind, struct Gadget **gads,
  59.                 int *gadnum, int cnt)
  60. {
  61.    struct RastPort *RP = wind->RPort;
  62.    struct Gadget *gad;
  63.    extern int bpc, bgc;
  64.    extern long bpp;
  65.    register int i;
  66.  
  67.    if((bgc || bpc) && NOT(wind->Flags & WFLG_ZOOMED))
  68.    {
  69.       SetAfPt(RP,(USHORT *)&bpp,1L);
  70.  
  71.       SetAPen(RP,bpc);
  72.       SetBPen(RP,bgc);
  73.  
  74.       SetDrMd(RP,JAM2);
  75.  
  76. /*
  77.       MyEasyRequest(SysWnd, (UBYTE *)"huhu",(UBYTE *)"Ok",
  78.                      (UBYTE *)"OffX: %ld\nScr->WBorRight: %ld",
  79.                      OffX, Scr->WBorRight);
  80. */
  81.  
  82.       RectFill(RP,(long)OffX,(long)OffY,
  83.                   (long)wind->Width - Scr->WBorRight /* - OffX + 3*/,
  84.                   (long)wind->Height - Scr->WBorBottom + 1 );
  85.  
  86.       SetAfPt(RP,NULL,NULL);
  87.  
  88.       for(i = 0; i < cnt; i++)
  89.          FillGadget( wind,gads[gadnum[i]] );
  90.  
  91.  
  92.       for(gad = gads[0]; gad; gad = gad->NextGadget)
  93.          if(gad->GadgetText)
  94.          {
  95.             int pixlen = IntuiTextLength(gad->GadgetText);
  96.             int x = gad->LeftEdge + gad->GadgetText->LeftEdge - 3,
  97.                 y = gad->TopEdge + gad->GadgetText->TopEdge - 2,
  98.                 w = pixlen + 6,
  99.                 h = gad->GadgetText->ITextFont->ta_YSize + 4;
  100.  
  101.             EraseRect( wind->RPort,(long)x, (long)y, (long)(x + w - 1), (long)(y + h - 1));
  102.  
  103.              DrawBevelBox( wind->RPort, x, y, w, h,
  104.                           GTBB_Recessed, TRUE,
  105.                           GT_VisualInfo, VisualInfo,
  106.                           TAG_DONE );
  107.          }
  108.  
  109.       RefreshGadgets(wind->FirstGadget, wind,NULL);
  110.       RefreshWindowFrame(wind);
  111.    }
  112.  
  113.    GT_RefreshWindow( wind, NULL );
  114.  
  115.    return;
  116. }
  117.  
  118.    /*
  119.     * SetupScreen() ermittelt eine Zeiger auf den vordersten
  120.     * Screen. Ist der vorderste Screen kein PublicScreen,
  121.     * wird der WorkBench-Screen als Default-Screen genommen.
  122.     */
  123. long
  124. SetupScreen(void)
  125. {
  126.    extern struct Screen *lastpubscreen;
  127.  
  128.    DPOS;
  129.  
  130.    (void)FindFrontPubScr(lastpubscreen);
  131.  
  132.    if (NOT(Scr = LockPubScreen(namebuffer)))
  133.    {
  134.       strcpy((char *)namebuffer,"Workbench");
  135.       if (NOT(Scr = LockPubScreen(namebuffer)))
  136.          return (1L);
  137.    }
  138.  
  139.    ComputeFont(Scr,(UWORD) 0, (UWORD) 0);
  140.  
  141.    if (NOT(VisualInfo = GetVisualInfo(Scr, TAG_DONE)))
  142.       return (2L);
  143.  
  144.    lastpubscreen = Scr;
  145.  
  146.    return (NULL);
  147. }
  148.  
  149.    /*
  150.     * CloseDownScreen() gibt den Screen frei, auf den ein
  151.     * RSys-Window geöffnet wurde.
  152.     */
  153. void
  154. CloseDownScreen(void)
  155. {
  156.    DPOS;
  157.  
  158.    if (VisualInfo)
  159.    {
  160.       FreeVisualInfo(VisualInfo);
  161.       VisualInfo = NULL;
  162.    }
  163.  
  164.    if (Scr)
  165.    {
  166.       UnlockPubScreen(NULL, Scr);
  167.       Scr = NULL;
  168.    }
  169.  
  170.    return;
  171. }
  172.  
  173. static UWORD SysGTypes[] = {
  174.    BUTTON_KIND,
  175.    BUTTON_KIND,
  176.    BUTTON_KIND,
  177.    BUTTON_KIND,
  178.    BUTTON_KIND,
  179.    BUTTON_KIND,
  180.    BUTTON_KIND,
  181.    BUTTON_KIND,
  182.    BUTTON_KIND,
  183.    BUTTON_KIND,
  184.    BUTTON_KIND,
  185.    BUTTON_KIND,
  186.    BUTTON_KIND,
  187.    BUTTON_KIND,
  188.    BUTTON_KIND,
  189.    BUTTON_KIND,
  190.    LISTVIEW_KIND,
  191.    TEXT_KIND,
  192.    TEXT_KIND
  193. };
  194.  
  195. static struct NewGadget SysNGad[] = {
  196.    5,117,93,12,  (UBYTE *)"_Tasks",NULL,GD_TasksGad,PLACETEXT_IN,NULL,NULL,
  197.    101,117,93,12,(UBYTE *)"_Libraries",NULL,GD_LibrariesGad,PLACETEXT_IN,NULL,NULL,
  198.    197,117,93,12,(UBYTE *)"_Memory",NULL,GD_MemoryGad,PLACETEXT_IN,NULL,NULL,
  199.    293,117,93,12,(UBYTE *)"_Ports",NULL,GD_PortsGad,PLACETEXT_IN,NULL,NULL,
  200.  
  201.    5,131,93,12,  (UBYTE *)"_Volumes",NULL,GD_VolumesGad,PLACETEXT_IN,NULL,NULL,
  202.    101,131,93,12,(UBYTE *)"_Assigns",NULL,GD_AssignsGad,PLACETEXT_IN,NULL,NULL,
  203.    197,131,93,12,(UBYTE *)"_Fonts",NULL,GD_FontsGad,PLACETEXT_IN,NULL,NULL,
  204.    293,131,93,12,(UBYTE *)"_Ressources",NULL,GD_ResourcesGad,PLACETEXT_IN,NULL,NULL,
  205.  
  206.    5,145,93,12,  (UBYTE *)"_Interrupts",NULL,GD_InterruptsGad,PLACETEXT_IN,NULL,NULL,
  207.    101,145,93,12,(UBYTE *)"_Windows",NULL,GD_WindowsGad,PLACETEXT_IN,NULL,NULL,
  208.    197,145,93,12,(UBYTE *)"_Screens",NULL,GD_ScreensGad,PLACETEXT_IN,NULL,NULL,
  209.    293,145,93,12,(UBYTE *)"_HandlerInp",NULL,GD_HandlerInpGad,PLACETEXT_IN,NULL,NULL,
  210.  
  211.    5,159,93,12,  (UBYTE *)"S_ystem",NULL,GD_SystemGad,PLACETEXT_IN,NULL,NULL,
  212.    101,159,93,12,(UBYTE *)"Har_dware",NULL,GD_HardwareGad,PLACETEXT_IN,NULL,NULL,
  213.    197,159,93,12,(UBYTE *)"Save List",NULL,GD_SaveListGad,PLACETEXT_IN,NULL,NULL,
  214.    293,159,93,12,(UBYTE *)"_Jump",NULL,GD_JumpGad,PLACETEXT_IN,NULL,NULL,
  215.  
  216.    5,16,381,85,  (UBYTE *)NULL,NULL,GD_ListeLV,0,NULL,NULL,
  217.  
  218.    5,2,381,12,   (UBYTE *)NULL,NULL,GD_TextHeader,0,NULL,NULL,
  219.  
  220.    5,102,381,13, (UBYTE *)NULL,NULL,GD_InfoMsgGad,0,NULL,NULL
  221. };
  222.  
  223. extern struct List ListeLVList;
  224.  
  225. static ULONG *SysGTags[] = {
  226.    (ULONG *)(GT_Underscore), (ULONG *)'_', (ULONG *)(TAG_DONE),
  227.    (ULONG *)(GT_Underscore), (ULONG *)'_', (ULONG *)(TAG_DONE),
  228.    (ULONG *)(GT_Underscore), (ULONG *)'_', (ULONG *)(TAG_DONE),
  229.    (ULONG *)(GT_Underscore), (ULONG *)'_', (ULONG *)(TAG_DONE),
  230.    (ULONG *)(GT_Underscore), (ULONG *)'_', (ULONG *)(TAG_DONE),
  231.    (ULONG *)(GT_Underscore), (ULONG *)'_', (ULONG *)(TAG_DONE),
  232.    (ULONG *)(GT_Underscore), (ULONG *)'_', (ULONG *)(TAG_DONE),
  233.    (ULONG *)(GT_Underscore), (ULONG *)'_', (ULONG *)(TAG_DONE),
  234.    (ULONG *)(GT_Underscore), (ULONG *)'_', (ULONG *)(TAG_DONE),
  235.    (ULONG *)(GT_Underscore), (ULONG *)'_', (ULONG *)(TAG_DONE),
  236.    (ULONG *)(GT_Underscore), (ULONG *)'_', (ULONG *)(TAG_DONE),
  237.    (ULONG *)(GT_Underscore), (ULONG *)'_', (ULONG *)(TAG_DONE),
  238.    (ULONG *)(GT_Underscore), (ULONG *)'_', (ULONG *)(TAG_DONE),
  239.    (ULONG *)(GT_Underscore), (ULONG *)'_', (ULONG *)(TAG_DONE),
  240.    (ULONG *)(TAG_DONE),
  241.    (ULONG *)(GT_Underscore), (ULONG *)'_', (ULONG *)(TAG_DONE),
  242.  
  243.    (ULONG *)(GTLV_Labels), (ULONG *)&ListeLVList, (ULONG *)(TAG_DONE),
  244.    (ULONG *)(GTTX_Text), (ULONG *)NULL,(ULONG *)(GTTX_Border), (ULONG *)TRUE, (ULONG *)(TAG_DONE),
  245.    (ULONG *)(GTTX_Text), (ULONG *)NULL,(ULONG *)(GTTX_Border), (ULONG *)TRUE,(ULONG *)(TAG_DONE)
  246. };
  247.  
  248. #define Sys_CNT 19
  249.  
  250.    /*
  251.     * OpenSysWindow() öffnet das Hauptfenster von RSys
  252.     */
  253. int
  254. OpenSysWindow(void)
  255. {
  256.    struct NewGadget ng;
  257.    struct Gadget *g;
  258.    UWORD wleft = SysLeft,
  259.          wtop = SysTop,
  260.          ww,
  261.          wh;
  262.    UWORD    lc, tc;
  263.    extern int winddetail,windblock,menudetail;
  264.  
  265.    DPOS;
  266.  
  267.    ComputeFont(Scr,SysWidth, SysHeight);
  268.  
  269.    ww = compute((UWORD) 0, FontX, (int)SysWidth);
  270.    wh = compute((UWORD) 0, FontY, (int)SysHeight);
  271.  
  272.    if ((wleft + ww + OffX + Scr->WBorRight) > Scr->Width)
  273.       wleft = Scr->Width - ww;
  274.    if ((wtop + wh + OffY + Scr->WBorBottom) > Scr->Height)
  275.       wtop = Scr->Height - wh;
  276.  
  277.    ww = compute((UWORD) (OffX + Scr->WBorRight), FontX, (int)SysWidth);
  278.    wh = compute((UWORD) (OffY + Scr->WBorBottom), FontY, (int)SysHeight);
  279.  
  280.    CenterWindow(Scr, &wtop, &wleft, ww, wh);
  281.  
  282.    if (NOT(g = CreateContext(&SysGList)))
  283.       return (1L);
  284.  
  285.    SysGTags[50] = (ULONG *)&EntryAttr[LastID].ea_header[0];
  286.  
  287.    for( lc = 0, tc = 0; lc < Sys_CNT; lc++ ) {
  288.  
  289.       CopyMem(&SysNGad[ lc ], &ng, sizeof( struct NewGadget ));
  290.  
  291.       ng.ng_VisualInfo = VisualInfo;
  292.       ng.ng_TextAttr   = Font;
  293.       ng.ng_LeftEdge   = OffX + ComputeX( ng.ng_LeftEdge );
  294.       ng.ng_TopEdge    = OffY + ComputeY( ng.ng_TopEdge );
  295.       ng.ng_Width      = ComputeX( ng.ng_Width );
  296.       ng.ng_Height     = ComputeY( ng.ng_Height);
  297.  
  298.       SysGadgets[ lc ] = g = CreateGadgetA((ULONG)SysGTypes[ lc ], g, &ng, ( struct TagItem * )&SysGTags[ tc ] );
  299.  
  300.       while( SysGTags[ tc ] ) tc += 2;
  301.       tc++;
  302.  
  303.       if ( NOT g )
  304.          return( 2L );
  305.    }
  306.  
  307. #define FFLAG 62
  308.  
  309.    SysNewMenu[FFLAG].nm_Flags = (Flags.fastmode ? (CHECKIT | CHECKED | MENUTOGGLE) :
  310.                               (CHECKIT | MENUTOGGLE)) ;
  311.    SysNewMenu[FFLAG+1].nm_Flags = (Flags.sortmode ? (CHECKIT | CHECKED | MENUTOGGLE) :
  312.                               (CHECKIT | MENUTOGGLE)) ;
  313.    SysNewMenu[FFLAG+2].nm_Flags = (Flags.workingbar ? (CHECKIT | CHECKED | MENUTOGGLE) :
  314.                               (CHECKIT | MENUTOGGLE)) ;
  315.    SysNewMenu[FFLAG+3].nm_Flags = (Flags.autofront ? (CHECKIT | CHECKED | MENUTOGGLE) :
  316.                               (CHECKIT | MENUTOGGLE)) ;
  317.    SysNewMenu[FFLAG+4].nm_Flags = (Flags.mousewindow ? (CHECKIT | CHECKED | MENUTOGGLE) :
  318.                               (CHECKIT | MENUTOGGLE)) ;
  319.    SysNewMenu[FFLAG+5].nm_Flags = (Flags.sysfont ? (CHECKIT | CHECKED | MENUTOGGLE) :
  320.                               (CHECKIT | MENUTOGGLE));
  321.    SysNewMenu[FFLAG+7].nm_Flags = (Flags.speakmode ? (CHECKIT | CHECKED | MENUTOGGLE) :
  322.                               (CHECKIT | MENUTOGGLE));
  323.    SysNewMenu[FFLAG+9].nm_Flags = (Flags.saveasking ? (CHECKIT | CHECKED | MENUTOGGLE) :
  324.                               (CHECKIT | MENUTOGGLE));
  325.  
  326.    if (NOT(SysMenus = CreateMenus(SysNewMenu, GTMN_FrontPen, menudetail, TAG_DONE)))
  327.       return (3L);
  328.  
  329.    LayoutMenus(SysMenus, VisualInfo, TAG_DONE);
  330.  
  331.    SysZoom[0] = 300;
  332.    SysZoom[1] = 0;
  333.    SysZoom[2] = compute((UWORD) (OffX + Scr->WBorRight), FontX, 158);
  334.    SysZoom[3] = OffY;
  335.  
  336.    if (NOT(SysWnd = OpenWindowTags(NULL,
  337.                                    WA_Left, wleft,
  338.                                    WA_Top, wtop,
  339.                                    WA_Width, ww,
  340.                                    WA_Height, wh,
  341.                                    WA_DetailPen, winddetail,
  342.                                    WA_BlockPen, windblock,
  343.                                    WA_IDCMP, BUTTONIDCMP |
  344.                                    LISTVIEWIDCMP |
  345.                                    IDCMP_MOUSEBUTTONS |
  346.                                    IDCMP_MOUSEMOVE |
  347.                                    IDCMP_CLOSEWINDOW |
  348.                                    IDCMP_ACTIVEWINDOW |
  349.                                    IDCMP_INACTIVEWINDOW |
  350.                                    IDCMP_RAWKEY |
  351.                                    IDCMP_VANILLAKEY |
  352.                                    IDCMP_CHANGEWINDOW |
  353.                                    IDCMP_DISKREMOVED |
  354.                                    IDCMP_DISKINSERTED |
  355.                                    IDCMP_MENUPICK,
  356.                                    WA_Flags, WFLG_DRAGBAR |
  357.                                    WFLG_DEPTHGADGET |
  358.                                    WFLG_CLOSEGADGET |
  359.                                    WFLG_SMART_REFRESH |
  360.                                    WFLG_NOCAREREFRESH,
  361.                                    WA_Gadgets, SysGList,
  362.                                    WA_PubScreenName, (LONG) namebuffer,
  363.                                    WA_PubScreenFallBack, TRUE,
  364.                                    WA_PubScreen, Scr,
  365.                                    WA_Title, SysWdt,
  366.                                    WA_Zoom, SysZoom,
  367. /*                                   WA_Dummy + 0x30, 1L,*/
  368.                                    TAG_DONE)))
  369.       return (4L);
  370.  
  371.    SysZoom[0] = SysWnd->LeftEdge;
  372.    SysZoom[1] = SysWnd->TopEdge;
  373.    SysZoom[2] = SysWnd->Width;
  374.    SysZoom[3] = SysWnd->Height;
  375.  
  376.    SetMenuStrip(SysWnd, SysMenus);
  377.  
  378.    if(NOT(Flags.wb_start))
  379.       OffMenu(SysWnd, 0);
  380.  
  381.    RefreshMainWindowPattern();
  382.  
  383.    if(Flags.autofront)
  384.    {
  385.       WindowToFront(SysWnd);
  386.       ActivateWindow(SysWnd);
  387.    }
  388.  
  389.    return (NULL);
  390. }
  391.