home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #3 / amigamamagazinepolishissue1998.iso / bazy / db3.4 / designgui.c < prev    next >
C/C++ Source or Header  |  1996-01-03  |  22KB  |  807 lines

  1. /*
  2.  *  Source machine generated by GadToolsBox V2.0b
  3.  *  which is (c) Copyright 1991-1993 Jaba Development
  4.  *
  5.  *  GUI Designed by : David Ekholm, Datadosen
  6.  */
  7.  
  8. #include <exec/types.h>
  9. #include <intuition/intuition.h>
  10. #include <intuition/classes.h>
  11. #include <intuition/classusr.h>
  12. #include <intuition/imageclass.h>
  13. #include <intuition/gadgetclass.h>
  14. #include <libraries/gadtools.h>
  15. #include <graphics/displayinfo.h>
  16. #include <graphics/gfxbase.h>
  17. #include <clib/exec_protos.h>
  18. #include <clib/intuition_protos.h>
  19. #include <clib/gadtools_protos.h>
  20. #include <clib/graphics_protos.h>
  21. #include <clib/utility_protos.h>
  22. #include <string.h>
  23. #include <pragmas/exec_pragmas.h>
  24. #include <pragmas/intuition_pragmas.h>
  25. #include <pragmas/gadtools_pragmas.h>
  26. #include <pragmas/graphics_pragmas.h>
  27. #include <pragmas/utility_pragmas.h>
  28.  
  29. #include "DesignGUI.h"
  30. #include "DesignGUI_fix.h"
  31.  
  32. /*
  33. static struct Window         *MainWnd = NULL;
  34. static struct Window         *TagWnd = NULL;
  35. static struct Window         *NameWnd = NULL;
  36. static struct Window         *FieldWnd = NULL;
  37. */
  38. struct Window         *VisWnd = NULL;
  39.  
  40. /*
  41. static struct Gadget         *MainGList = NULL;
  42. static struct Gadget         *TagGList = NULL;
  43. static struct Gadget         *NameGList = NULL;
  44. static struct Gadget         *FieldGList = NULL;
  45. */
  46. static struct Gadget         *VisGList = NULL;
  47.  
  48. struct Menu           *DesignMenus = NULL;
  49. /*
  50. struct IntuiMessage    MainMsg;
  51. struct IntuiMessage    TagMsg;
  52. struct IntuiMessage    NameMsg;
  53. struct IntuiMessage    FieldMsg;
  54. */
  55. struct IntuiMessage    VisMsg;
  56. /*
  57. static struct Gadget         *MainGadgets[11];
  58. static struct Gadget         *TagGadgets[4];
  59. static struct Gadget         *NameGadgets[3];
  60. static struct Gadget         *FieldGadgets[5];
  61. */
  62. struct Gadget         *VisGadgets[7];
  63. /*
  64. static UWORD                  MainLeft = 227;
  65. static UWORD                  MainTop = 186;
  66. static UWORD                  MainWidth = 305;
  67. static UWORD                  MainHeight = 182;
  68. static UWORD                  TagLeft = 89;
  69. static UWORD                  TagTop = 162;
  70. static UWORD                  TagWidth = 489;
  71. static UWORD                  TagHeight = 63;
  72. static UWORD                  NameLeft = 237;
  73. static UWORD                  NameTop = 199;
  74. static UWORD                  NameWidth = 283;
  75. static UWORD                  NameHeight = 64;
  76. static UWORD                  FieldLeft = 149;
  77. static UWORD                  FieldTop = 218;
  78. static UWORD                  FieldWidth = 329;
  79. static UWORD                  FieldHeight = 102;
  80. */
  81. static UWORD                  VisLeft = 150;
  82. static UWORD                  VisTop = 174;
  83. static UWORD                  VisWidth = 398;
  84. static UWORD                  VisHeight = 102;
  85. /*
  86. static UBYTE                 *MainWdt = (UBYTE *)"List Window";
  87. static UBYTE                 *TagWdt = (UBYTE *)"Edit tag";
  88. static UBYTE                 *NameWdt = (UBYTE *)"Edit name";
  89. static UBYTE                 *FieldWdt = (UBYTE *)"Edit field object";
  90. */
  91. static UBYTE                 *VisWdt = (UBYTE *)"Edit visual field object";
  92. static struct TextAttr       *Font, Attr;
  93. static UWORD                  FontX, FontY;
  94. static UWORD                  OffX, OffY;
  95.  
  96. struct NewMenu DesignNewMenu[] = {
  97.     NM_TITLE, (STRPTR)"Project", NULL, 0, NULL, NULL,
  98.     NM_ITEM, (STRPTR)"About view design...", (STRPTR)"?", 0, 0L, (APTR)DesignPROJECT_ABOUT,
  99.     NM_ITEM, (STRPTR)"Exit view design", (STRPTR)"E", 0, 0L, (APTR)DesignPROJECT_EXIT,
  100.     NM_TITLE, (STRPTR)"Edit", NULL, 0, NULL, NULL,
  101.     NM_ITEM, (STRPTR)"Undo", (STRPTR)"Z", NM_ITEMDISABLED, 0L, (APTR)DesignEDIT_UNDO,
  102.     NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  103.     NM_ITEM, (STRPTR)"Cut", (STRPTR)"X", 0, 0L, (APTR)DesignEDIT_CUT,
  104.     NM_ITEM, (STRPTR)"Copy", (STRPTR)"C", 0, 0L, (APTR)DesignEDIT_COPY,
  105.     NM_ITEM, (STRPTR)"Paste", (STRPTR)"V", NM_ITEMDISABLED, 0L, (APTR)DesignEDIT_PASTE,
  106.     NM_END, NULL, NULL, 0, 0L, NULL };
  107.  
  108. /*
  109. static UWORD MainGTypes[] = {
  110.     LISTVIEW_KIND,
  111.     BUTTON_KIND,
  112.     BUTTON_KIND,
  113.     BUTTON_KIND,
  114.     BUTTON_KIND,
  115.     BUTTON_KIND,
  116.     BUTTON_KIND,
  117.     BUTTON_KIND,
  118.     BUTTON_KIND,
  119.     BUTTON_KIND,
  120.     BUTTON_KIND
  121. };
  122.  
  123. static UWORD TagGTypes[] = {
  124.     STRING_KIND,
  125.     STRING_KIND,
  126.     BUTTON_KIND,
  127.     BUTTON_KIND
  128. };
  129.  
  130. static UWORD NameGTypes[] = {
  131.     STRING_KIND,
  132.     BUTTON_KIND,
  133.     BUTTON_KIND
  134. };
  135.  
  136. static UWORD FieldGTypes[] = {
  137.     STRING_KIND,
  138.     INTEGER_KIND,
  139.     BUTTON_KIND,
  140.     BUTTON_KIND,
  141.     BUTTON_KIND
  142. };
  143. */
  144. static UWORD VisGTypes[] = {
  145.     STRING_KIND,
  146.     INTEGER_KIND,
  147.     BUTTON_KIND,
  148.     BUTTON_KIND,
  149.     BUTTON_KIND,
  150.     TEXT_KIND,
  151.     BUTTON_KIND
  152. };
  153.  
  154. /*
  155. static struct NewGadget MainNGad[] = {
  156.     4, 20, 221, 117, (UBYTE *)"Object list", NULL, GD_LIST, PLACETEXT_ABOVE, NULL, (APTR)LISTClicked,
  157.     232, 20, 69, 17, (UBYTE *)"Top", NULL, GD_TOP, PLACETEXT_IN, NULL, (APTR)TOPClicked,
  158.     232, 44, 69, 17, (UBYTE *)"Up", NULL, GD_UP, PLACETEXT_IN, NULL, (APTR)UPClicked,
  159.     232, 68, 69, 17, (UBYTE *)"Down", NULL, GD_DOWN, PLACETEXT_IN, NULL, (APTR)DOWNClicked,
  160.     232, 92, 69, 17, (UBYTE *)"Bottom", NULL, GD_BOTTOM, PLACETEXT_IN, NULL, (APTR)BOTTOMClicked,
  161.     4, 136, 69, 17, (UBYTE *)"_New...", NULL, GD_NEW, PLACETEXT_IN, NULL, (APTR)NEWClicked,
  162.     80, 136, 69, 17, (UBYTE *)"_Edit...", NULL, GD_EDIT, PLACETEXT_IN, NULL, (APTR)EDITClicked,
  163.     156, 136, 69, 17, (UBYTE *)"Co_py", NULL, GD_COPY, PLACETEXT_IN, NULL, (APTR)COPYClicked,
  164.     232, 136, 69, 17, (UBYTE *)"Remove", NULL, GD_REMOVE, PLACETEXT_IN, NULL, (APTR)REMOVEClicked,
  165.     4, 160, 69, 17, (UBYTE *)"_Use", NULL, GD_USE, PLACETEXT_IN, NULL, (APTR)USEClicked,
  166.     232, 160, 69, 17, (UBYTE *)"_Cancel", NULL, GD_CANCEL, PLACETEXT_IN, NULL, (APTR)CANCELClicked
  167. };
  168.  
  169. static struct NewGadget TagNGad[] = {
  170.     190, 6, 292, 21, (UBYTE *)"_Value", NULL, GD_TAG_VALUE, PLACETEXT_LEFT, NULL, (APTR)TAG_VALUEClicked,
  171.     30, 6, 101, 21, (UBYTE *)"_ID", NULL, GD_TAG_ID, PLACETEXT_LEFT, NULL, (APTR)TAG_IDClicked,
  172.     6, 42, 61, 17, (UBYTE *)"_Ok", NULL, GD_TAG_OK, PLACETEXT_IN, NULL, (APTR)TAG_OKClicked,
  173.     422, 42, 61, 17, (UBYTE *)"_Cancel", NULL, GD_TAG_CANCEL, PLACETEXT_IN, NULL, (APTR)TAG_CANCELClicked
  174. };
  175.  
  176. static struct NewGadget NameNGad[] = {
  177.     52, 6, 225, 21, (UBYTE *)"_Name", NULL, GD_NAME_NAME, PLACETEXT_LEFT, NULL, (APTR)NAME_NAMEClicked,
  178.     6, 42, 61, 17, (UBYTE *)"_Ok", NULL, GD_NAME_OK, PLACETEXT_IN, NULL, (APTR)NAME_OKClicked,
  179.     215, 42, 61, 17, (UBYTE *)"_Cancel", NULL, GD_NAME_CANCEL, PLACETEXT_IN, NULL, (APTR)NAME_CANCELClicked
  180. };
  181.  
  182. static struct NewGadget FieldNGad[] = {
  183.     64, 8, 113, 21, (UBYTE *)"_Name", NULL, GD_FIELD_NAME, PLACETEXT_LEFT, NULL, (APTR)FIELD_NAMEClicked,
  184.     264, 8, 57, 21, (UBYTE *)"Max _length", NULL, GD_FIELD_MAXLEN, PLACETEXT_LEFT, NULL, (APTR)FIELD_MAXLENClicked,
  185.     4, 80, 69, 17, (UBYTE *)"_Ok", NULL, GD_FIELD_OK, PLACETEXT_IN, NULL, (APTR)FIELD_OKClicked,
  186.     256, 80, 69, 17, (UBYTE *)"_Cancel", NULL, GD_FIELD_CANCEL, PLACETEXT_IN, NULL, (APTR)FIELD_CANCELClicked,
  187.     128, 80, 69, 17, (UBYTE *)"_More...", NULL, GD_FIELD_MORE, PLACETEXT_IN, NULL, (APTR)FIELD_MOREClicked
  188. };
  189. */
  190. static struct NewGadget VisNGad[] = {
  191.     64, 8, 205, 21, (UBYTE *)"_Name", NULL, GD_VIS_NAME, PLACETEXT_LEFT, NULL, (APTR)VIS_NAMEClicked,
  192.     335, 8, 57, 21, (UBYTE *)"Si_ze", NULL, GD_VIS_SIZE, PLACETEXT_LEFT, NULL, (APTR)VIS_SIZEClicked,
  193.     4, 80, 69, 17, (UBYTE *)"_Ok", NULL, GD_VIS_OK, PLACETEXT_IN, NULL, (APTR)VIS_OKClicked,
  194.     324, 80, 69, 17, (UBYTE *)"_Cancel", NULL, GD_VIS_CANCEL, PLACETEXT_IN, NULL, (APTR)VIS_CANCELClicked,
  195.     160, 80, 69, 17, (UBYTE *)"_More...", NULL, GD_VIS_MORE, PLACETEXT_IN, NULL, (APTR)VIS_MOREClicked,
  196.     64, 36, 129, 21, (UBYTE *)"Field", NULL, GD_VIS_FIELD, PLACETEXT_LEFT, NULL, NULL,
  197.     200, 40, 69, 17, (UBYTE *)"Select...", NULL, GD_VIS_SELECT, PLACETEXT_IN, NULL, (APTR)VIS_SELECTClicked
  198. };
  199. /*
  200. static ULONG MainGTags[] = {
  201.     (TAG_DONE),
  202.     (TAG_DONE),
  203.     (TAG_DONE),
  204.     (TAG_DONE),
  205.     (TAG_DONE),
  206.     (GT_Underscore), '_', (TAG_DONE),
  207.     (GT_Underscore), '_', (TAG_DONE),
  208.     (GT_Underscore), '_', (TAG_DONE),
  209.     (GT_Underscore), '_', (TAG_DONE),
  210.     (GT_Underscore), '_', (TAG_DONE),
  211.     (GT_Underscore), '_', (TAG_DONE)
  212. };
  213.  
  214. static ULONG TagGTags[] = {
  215.     (GTST_MaxChars), 256, (GT_Underscore), '_', (TAG_DONE),
  216.     (GTST_MaxChars), 45, (GT_Underscore), '_', (TAG_DONE),
  217.     (GT_Underscore), '_', (TAG_DONE),
  218.     (GT_Underscore), '_', (TAG_DONE)
  219. };
  220.  
  221. static ULONG NameGTags[] = {
  222.     (GTST_MaxChars), 45, (GT_Underscore), '_', (TAG_DONE),
  223.     (GT_Underscore), '_', (TAG_DONE),
  224.     (GT_Underscore), '_', (TAG_DONE)
  225. };
  226.  
  227. static ULONG FieldGTags[] = {
  228.     (GTST_MaxChars), 45, (GT_Underscore), '_', (TAG_DONE),
  229.     (GTIN_Number), 200, (GTIN_MaxChars), 5, (GT_Underscore), '_', (TAG_DONE),
  230.     (GT_Underscore), '_', (TAG_DONE),
  231.     (GT_Underscore), '_', (TAG_DONE),
  232.     (GT_Underscore), '_', (TAG_DONE)
  233. };
  234. */
  235. static ULONG VisGTags[] = {
  236.     (GTST_MaxChars), 45, (GT_Underscore), '_', (TAG_DONE),
  237.     (GTIN_Number), 25, (GTIN_MaxChars), 3, (GT_Underscore), '_', (TAG_DONE),
  238.     (GT_Underscore), '_', (TAG_DONE),
  239.     (GT_Underscore), '_', (TAG_DONE),
  240.     (GT_Underscore), '_',(GA_Disabled), TRUE, (TAG_DONE),
  241.     (GTTX_Border), TRUE, (TAG_DONE),
  242.     (GT_Underscore), '_', (TAG_DONE)
  243. };
  244.  
  245. static UWORD ComputeX( UWORD value )
  246. {
  247.     return(( UWORD )((( FontX * value ) + 4 ) / 8 ));
  248. }
  249.  
  250. static UWORD ComputeY( UWORD value )
  251. {
  252.     return(( UWORD )((( FontY * value ) + 6 ) / 13 ));
  253. }
  254.  
  255. static void ComputeFont( UWORD width, UWORD height )
  256. {
  257.     Font = &Attr;
  258.     Font->ta_Name = (STRPTR)Scr->RastPort.Font->tf_Message.mn_Node.ln_Name;
  259.     Font->ta_YSize = FontY = Scr->RastPort.Font->tf_YSize;
  260.     FontX = Scr->RastPort.Font->tf_XSize;
  261.  
  262.     OffX = Scr->WBorLeft;
  263.     OffY = Scr->RastPort.TxHeight + Scr->WBorTop + 1;
  264.  
  265.     if ( width && height ) {
  266.         if (( ComputeX( width ) + OffX + Scr->WBorRight ) > Scr->Width )
  267.             goto UseTopaz;
  268.         if (( ComputeY( height ) + OffY + Scr->WBorBottom ) > Scr->Height )
  269.             goto UseTopaz;
  270.     }
  271.     return;
  272.  
  273. UseTopaz:
  274.     Font->ta_Name = (STRPTR)"topaz.font";
  275.     FontX = FontY = Font->ta_YSize = 8;
  276. }
  277. /*
  278. int HandleMainIDCMP( void )
  279. {
  280.     struct IntuiMessage    *m;
  281.     int            (*func)();
  282.     BOOL            running = TRUE;
  283.  
  284.     while( m = GT_GetIMsg( MainWnd->UserPort )) {
  285.  
  286.         CopyMem(( char * )m, ( char * )&MainMsg, (long)sizeof( struct IntuiMessage ));
  287.  
  288.         GT_ReplyIMsg( m );
  289.  
  290.         switch ( MainMsg.Class ) {
  291.  
  292.             case    IDCMP_REFRESHWINDOW:
  293.                 GT_BeginRefresh( MainWnd );
  294.                 GT_EndRefresh( MainWnd, TRUE );
  295.                 break;
  296.  
  297.             case    IDCMP_CLOSEWINDOW:
  298.                 running = MainCloseWindow();
  299.                 break;
  300.  
  301.             case    IDCMP_VANILLAKEY:
  302.                 running = MainVanillaKey();
  303.                 break;
  304.  
  305.             case    IDCMP_RAWKEY:
  306.                 running = MainRawKey();
  307.                 break;
  308.  
  309.             case    IDCMP_GADGETUP:
  310.             case    IDCMP_GADGETDOWN:
  311.                 func = ( void * )(( struct Gadget * )MainMsg.IAddress )->UserData;
  312.                 running = func();
  313.                 break;
  314.         }
  315.     }
  316.     return( running );
  317. }
  318.  
  319. int OpenMainWindow( void )
  320. {
  321.     struct NewGadget    ng;
  322.     struct Gadget    *g;
  323.     UWORD        lc, tc;
  324.     UWORD        wleft = MainLeft, wtop = MainTop, ww, wh;
  325.  
  326.     ComputeFont( MainWidth, MainHeight );
  327.  
  328.     ww = ComputeX( MainWidth );
  329.     wh = ComputeY( MainHeight );
  330.  
  331.     if (( wleft + ww + OffX + Scr->WBorRight ) > Scr->Width ) wleft = Scr->Width - ww;
  332.     if (( wtop + wh + OffY + Scr->WBorBottom ) > Scr->Height ) wtop = Scr->Height - wh;
  333.  
  334.     if ( ! ( g = CreateContext( &MainGList )))
  335.         return( 1L );
  336.  
  337.     for( lc = 0, tc = 0; lc < Main_CNT; lc++ ) {
  338.  
  339.         CopyMem((char * )&MainNGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
  340.  
  341.         ng.ng_VisualInfo = VisualInfo;
  342.         ng.ng_TextAttr   = Font;
  343.         ng.ng_LeftEdge   = OffX + ComputeX( ng.ng_LeftEdge );
  344.         ng.ng_TopEdge    = OffY + ComputeY( ng.ng_TopEdge );
  345.         ng.ng_Width      = ComputeX( ng.ng_Width );
  346.         ng.ng_Height     = ComputeY( ng.ng_Height);
  347.  
  348.         MainGadgets[ lc ] = g = CreateGadgetA((ULONG)MainGTypes[ lc ], g, &ng, ( struct TagItem * )&MainGTags[ tc ] );
  349.  
  350.         while( MainGTags[ tc ] ) tc += 2;
  351.         tc++;
  352.  
  353.         if ( NOT g )
  354.             return( 2L );
  355.     }
  356.  
  357.     if ( ! ( MainWnd = OpenWindowTags( NULL,
  358.                 WA_Left,    wleft,
  359.                 WA_Top,        wtop,
  360.                 WA_Width,    ww + OffX + Scr->WBorRight,
  361.                 WA_Height,    wh + OffY + Scr->WBorBottom,
  362.                 WA_IDCMP,    LISTVIEWIDCMP|BUTTONIDCMP|IDCMP_CLOSEWINDOW|IDCMP_RAWKEY|IDCMP_VANILLAKEY|IDCMP_REFRESHWINDOW,
  363.                 WA_Flags,    WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH|WFLG_ACTIVATE|WFLG_RMBTRAP,
  364.                 WA_Gadgets,    MainGList,
  365.                 WA_Title,    MainWdt,
  366.                 WA_PubScreen,    Scr,
  367.                 TAG_DONE )))
  368.     return( 4L );
  369.  
  370.     GT_RefreshWindow( MainWnd, NULL );
  371.  
  372.     return( 0L );
  373. }
  374.  
  375. void CloseMainWindow( void )
  376. {
  377.     if ( MainWnd        ) {
  378.         CloseWindow( MainWnd );
  379.         MainWnd = NULL;
  380.     }
  381.  
  382.     if ( MainGList      ) {
  383.         FreeGadgets( MainGList );
  384.         MainGList = NULL;
  385.     }
  386. }
  387.  
  388. int HandleTagIDCMP( void )
  389. {
  390.     struct IntuiMessage    *m;
  391.     int            (*func)();
  392.     BOOL            running = TRUE;
  393.  
  394.     while( m = GT_GetIMsg( TagWnd->UserPort )) {
  395.  
  396.         CopyMem(( char * )m, ( char * )&TagMsg, (long)sizeof( struct IntuiMessage ));
  397.  
  398.         GT_ReplyIMsg( m );
  399.  
  400.         switch ( TagMsg.Class ) {
  401.  
  402.             case    IDCMP_REFRESHWINDOW:
  403.                 GT_BeginRefresh( TagWnd );
  404.                 GT_EndRefresh( TagWnd, TRUE );
  405.                 break;
  406.  
  407.             case    IDCMP_CLOSEWINDOW:
  408.                 running = TagCloseWindow();
  409.                 break;
  410.  
  411.             case    IDCMP_VANILLAKEY:
  412.                 running = TagVanillaKey();
  413.                 break;
  414.  
  415.             case    IDCMP_GADGETUP:
  416.                 func = ( void * )(( struct Gadget * )TagMsg.IAddress )->UserData;
  417.                 running = func();
  418.                 break;
  419.         }
  420.     }
  421.     return( running );
  422. }
  423.  
  424. int OpenTagWindow( void )
  425. {
  426.     struct NewGadget    ng;
  427.     struct Gadget    *g;
  428.     UWORD        lc, tc;
  429.     UWORD        wleft = TagLeft, wtop = TagTop, ww, wh;
  430.  
  431.     ComputeFont( TagWidth, TagHeight );
  432.  
  433.     ww = ComputeX( TagWidth );
  434.     wh = ComputeY( TagHeight );
  435.  
  436.     if (( wleft + ww + OffX + Scr->WBorRight ) > Scr->Width ) wleft = Scr->Width - ww;
  437.     if (( wtop + wh + OffY + Scr->WBorBottom ) > Scr->Height ) wtop = Scr->Height - wh;
  438.  
  439.     if ( ! ( g = CreateContext( &TagGList )))
  440.         return( 1L );
  441.  
  442.     for( lc = 0, tc = 0; lc < Tag_CNT; lc++ ) {
  443.  
  444.         CopyMem((char * )&TagNGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
  445.  
  446.         ng.ng_VisualInfo = VisualInfo;
  447.         ng.ng_TextAttr   = Font;
  448.         ng.ng_LeftEdge   = OffX + ComputeX( ng.ng_LeftEdge );
  449.         ng.ng_TopEdge    = OffY + ComputeY( ng.ng_TopEdge );
  450.         ng.ng_Width      = ComputeX( ng.ng_Width );
  451.         ng.ng_Height     = ComputeY( ng.ng_Height);
  452.  
  453.         TagGadgets[ lc ] = g = CreateGadgetA((ULONG)TagGTypes[ lc ], g, &ng, ( struct TagItem * )&TagGTags[ tc ] );
  454.  
  455.         while( TagGTags[ tc ] ) tc += 2;
  456.         tc++;
  457.  
  458.         if ( NOT g )
  459.             return( 2L );
  460.     }
  461.  
  462.     if ( ! ( TagWnd = OpenWindowTags( NULL,
  463.                 WA_Left,    wleft,
  464.                 WA_Top,        wtop,
  465.                 WA_Width,    ww + OffX + Scr->WBorRight,
  466.                 WA_Height,    wh + OffY + Scr->WBorBottom,
  467.                 WA_IDCMP,    STRINGIDCMP|BUTTONIDCMP|IDCMP_CLOSEWINDOW|IDCMP_VANILLAKEY|IDCMP_REFRESHWINDOW,
  468.                 WA_Flags,    WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH|WFLG_ACTIVATE,
  469.                 WA_Gadgets,    TagGList,
  470.                 WA_Title,    TagWdt,
  471.                 WA_PubScreen,    Scr,
  472.                 TAG_DONE )))
  473.     return( 4L );
  474.  
  475.     GT_RefreshWindow( TagWnd, NULL );
  476.  
  477.     return( 0L );
  478. }
  479.  
  480. void CloseTagWindow( void )
  481. {
  482.     if ( TagWnd        ) {
  483.         CloseWindow( TagWnd );
  484.         TagWnd = NULL;
  485.     }
  486.  
  487.     if ( TagGList      ) {
  488.         FreeGadgets( TagGList );
  489.         TagGList = NULL;
  490.     }
  491. }
  492.  
  493. int HandleNameIDCMP( void )
  494. {
  495.     struct IntuiMessage    *m;
  496.     int            (*func)();
  497.     BOOL            running = TRUE;
  498.  
  499.     while( m = GT_GetIMsg( NameWnd->UserPort )) {
  500.  
  501.         CopyMem(( char * )m, ( char * )&NameMsg, (long)sizeof( struct IntuiMessage ));
  502.  
  503.         GT_ReplyIMsg( m );
  504.  
  505.         switch ( NameMsg.Class ) {
  506.  
  507.             case    IDCMP_REFRESHWINDOW:
  508.                 GT_BeginRefresh( NameWnd );
  509.                 GT_EndRefresh( NameWnd, TRUE );
  510.                 break;
  511.  
  512.             case    IDCMP_CLOSEWINDOW:
  513.                 running = NameCloseWindow();
  514.                 break;
  515.  
  516.             case    IDCMP_VANILLAKEY:
  517.                 running = NameVanillaKey();
  518.                 break;
  519.  
  520.             case    IDCMP_GADGETUP:
  521.                 func = ( void * )(( struct Gadget * )NameMsg.IAddress )->UserData;
  522.                 running = func();
  523.                 break;
  524.         }
  525.     }
  526.     return( running );
  527. }
  528.  
  529. int OpenNameWindow( void )
  530. {
  531.     struct NewGadget    ng;
  532.     struct Gadget    *g;
  533.     UWORD        lc, tc;
  534.     UWORD        wleft = NameLeft, wtop = NameTop, ww, wh;
  535.  
  536.     ComputeFont( NameWidth, NameHeight );
  537.  
  538.     ww = ComputeX( NameWidth );
  539.     wh = ComputeY( NameHeight );
  540.  
  541.     if (( wleft + ww + OffX + Scr->WBorRight ) > Scr->Width ) wleft = Scr->Width - ww;
  542.     if (( wtop + wh + OffY + Scr->WBorBottom ) > Scr->Height ) wtop = Scr->Height - wh;
  543.  
  544.     if ( ! ( g = CreateContext( &NameGList )))
  545.         return( 1L );
  546.  
  547.     for( lc = 0, tc = 0; lc < Name_CNT; lc++ ) {
  548.  
  549.         CopyMem((char * )&NameNGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
  550.  
  551.         ng.ng_VisualInfo = VisualInfo;
  552.         ng.ng_TextAttr   = Font;
  553.         ng.ng_LeftEdge   = OffX + ComputeX( ng.ng_LeftEdge );
  554.         ng.ng_TopEdge    = OffY + ComputeY( ng.ng_TopEdge );
  555.         ng.ng_Width      = ComputeX( ng.ng_Width );
  556.         ng.ng_Height     = ComputeY( ng.ng_Height);
  557.  
  558.         NameGadgets[ lc ] = g = CreateGadgetA((ULONG)NameGTypes[ lc ], g, &ng, ( struct TagItem * )&NameGTags[ tc ] );
  559.  
  560.         while( NameGTags[ tc ] ) tc += 2;
  561.         tc++;
  562.  
  563.         if ( NOT g )
  564.             return( 2L );
  565.     }
  566.  
  567.     if ( ! ( NameWnd = OpenWindowTags( NULL,
  568.                 WA_Left,    wleft,
  569.                 WA_Top,        wtop,
  570.                 WA_Width,    ww + OffX + Scr->WBorRight,
  571.                 WA_Height,    wh + OffY + Scr->WBorBottom,
  572.                 WA_IDCMP,    STRINGIDCMP|BUTTONIDCMP|IDCMP_CLOSEWINDOW|IDCMP_VANILLAKEY|IDCMP_REFRESHWINDOW,
  573.                 WA_Flags,    WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH|WFLG_ACTIVATE,
  574.                 WA_Gadgets,    NameGList,
  575.                 WA_Title,    NameWdt,
  576.                 WA_PubScreen,    Scr,
  577.                 TAG_DONE )))
  578.     return( 4L );
  579.  
  580.     GT_RefreshWindow( NameWnd, NULL );
  581.  
  582.     return( 0L );
  583. }
  584.  
  585. void CloseNameWindow( void )
  586. {
  587.     if ( NameWnd        ) {
  588.         CloseWindow( NameWnd );
  589.         NameWnd = NULL;
  590.     }
  591.  
  592.     if ( NameGList      ) {
  593.         FreeGadgets( NameGList );
  594.         NameGList = NULL;
  595.     }
  596. }
  597.  
  598. int HandleFieldIDCMP( void )
  599. {
  600.     struct IntuiMessage    *m;
  601.     int            (*func)();
  602.     BOOL            running = TRUE;
  603.  
  604.     while( m = GT_GetIMsg( FieldWnd->UserPort )) {
  605.  
  606.         CopyMem(( char * )m, ( char * )&FieldMsg, (long)sizeof( struct IntuiMessage ));
  607.  
  608.         GT_ReplyIMsg( m );
  609.  
  610.         switch ( FieldMsg.Class ) {
  611.  
  612.             case    IDCMP_REFRESHWINDOW:
  613.                 GT_BeginRefresh( FieldWnd );
  614.                 GT_EndRefresh( FieldWnd, TRUE );
  615.                 break;
  616.  
  617.             case    IDCMP_CLOSEWINDOW:
  618.                 running = FieldCloseWindow();
  619.                 break;
  620.  
  621.             case    IDCMP_VANILLAKEY:
  622.                 running = FieldVanillaKey();
  623.                 break;
  624.  
  625.             case    IDCMP_GADGETUP:
  626.                 func = ( void * )(( struct Gadget * )FieldMsg.IAddress )->UserData;
  627.                 running = func();
  628.                 break;
  629.         }
  630.     }
  631.     return( running );
  632. }
  633.  
  634. int OpenFieldWindow( void )
  635. {
  636.     struct NewGadget    ng;
  637.     struct Gadget    *g;
  638.     UWORD        lc, tc;
  639.     UWORD        wleft = FieldLeft, wtop = FieldTop, ww, wh;
  640.  
  641.     ComputeFont( FieldWidth, FieldHeight );
  642.  
  643.     ww = ComputeX( FieldWidth );
  644.     wh = ComputeY( FieldHeight );
  645.  
  646.     if (( wleft + ww + OffX + Scr->WBorRight ) > Scr->Width ) wleft = Scr->Width - ww;
  647.     if (( wtop + wh + OffY + Scr->WBorBottom ) > Scr->Height ) wtop = Scr->Height - wh;
  648.  
  649.     if ( ! ( g = CreateContext( &FieldGList )))
  650.         return( 1L );
  651.  
  652.     for( lc = 0, tc = 0; lc < Field_CNT; lc++ ) {
  653.  
  654.         CopyMem((char * )&FieldNGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
  655.  
  656.         ng.ng_VisualInfo = VisualInfo;
  657.         ng.ng_TextAttr   = Font;
  658.         ng.ng_LeftEdge   = OffX + ComputeX( ng.ng_LeftEdge );
  659.         ng.ng_TopEdge    = OffY + ComputeY( ng.ng_TopEdge );
  660.         ng.ng_Width      = ComputeX( ng.ng_Width );
  661.         ng.ng_Height     = ComputeY( ng.ng_Height);
  662.  
  663.         FieldGadgets[ lc ] = g = CreateGadgetA((ULONG)FieldGTypes[ lc ], g, &ng, ( struct TagItem * )&FieldGTags[ tc ] );
  664.  
  665.         while( FieldGTags[ tc ] ) tc += 2;
  666.         tc++;
  667.  
  668.         if ( NOT g )
  669.             return( 2L );
  670.     }
  671.  
  672.     if ( ! ( FieldWnd = OpenWindowTags( NULL,
  673.                 WA_Left,    wleft,
  674.                 WA_Top,        wtop,
  675.                 WA_Width,    ww + OffX + Scr->WBorRight,
  676.                 WA_Height,    wh + OffY + Scr->WBorBottom,
  677.                 WA_IDCMP,    STRINGIDCMP|INTEGERIDCMP|BUTTONIDCMP|IDCMP_CLOSEWINDOW|IDCMP_VANILLAKEY|IDCMP_REFRESHWINDOW,
  678.                 WA_Flags,    WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH|WFLG_ACTIVATE,
  679.                 WA_Gadgets,    FieldGList,
  680.                 WA_Title,    FieldWdt,
  681.                 WA_PubScreen,    Scr,
  682.                 TAG_DONE )))
  683.     return( 4L );
  684.  
  685.     GT_RefreshWindow( FieldWnd, NULL );
  686.  
  687.     return( 0L );
  688. }
  689.  
  690. void CloseFieldWindow( void )
  691. {
  692.     if ( FieldWnd        ) {
  693.         CloseWindow( FieldWnd );
  694.         FieldWnd = NULL;
  695.     }
  696.  
  697.     if ( FieldGList      ) {
  698.         FreeGadgets( FieldGList );
  699.         FieldGList = NULL;
  700.     }
  701. }
  702. */
  703. int HandleVisIDCMP( void )
  704. {
  705.     struct IntuiMessage    *m;
  706.     int            (*func)();
  707.     BOOL            running = TRUE;
  708.  
  709.     while( m = GT_GetIMsg( VisWnd->UserPort )) {
  710.  
  711.         CopyMem(( char * )m, ( char * )&VisMsg, (long)sizeof( struct IntuiMessage ));
  712.  
  713.         GT_ReplyIMsg( m );
  714.  
  715.         switch ( VisMsg.Class ) {
  716.  
  717.             case    IDCMP_REFRESHWINDOW:
  718.                 GT_BeginRefresh( VisWnd );
  719.                 GT_EndRefresh( VisWnd, TRUE );
  720.                 break;
  721.  
  722.             case    IDCMP_CLOSEWINDOW:
  723.                 running = VisCloseWindow();
  724.                 break;
  725.  
  726.             case    IDCMP_VANILLAKEY:
  727.                 running = VisVanillaKey();
  728.                 break;
  729.  
  730.             case    IDCMP_GADGETUP:
  731.                 func = ( void * )(( struct Gadget * )VisMsg.IAddress )->UserData;
  732.                 running = func();
  733.                 break;
  734.         }
  735.     }
  736.     return( running );
  737. }
  738.  
  739. int OpenVisWindow( void )
  740. {
  741.     struct NewGadget    ng;
  742.     struct Gadget    *g;
  743.     UWORD        lc, tc;
  744.     UWORD        wleft = VisLeft, wtop = VisTop, ww, wh;
  745.  
  746.     ComputeFont( VisWidth, VisHeight );
  747.  
  748.     ww = ComputeX( VisWidth );
  749.     wh = ComputeY( VisHeight );
  750.  
  751.     if (( wleft + ww + OffX + Scr->WBorRight ) > Scr->Width ) wleft = Scr->Width - ww;
  752.     if (( wtop + wh + OffY + Scr->WBorBottom ) > Scr->Height ) wtop = Scr->Height - wh;
  753.  
  754.     if ( ! ( g = CreateContext( &VisGList )))
  755.         return( 1L );
  756.  
  757.     for( lc = 0, tc = 0; lc < Vis_CNT; lc++ ) {
  758.  
  759.         CopyMem((char * )&VisNGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
  760.  
  761.         ng.ng_VisualInfo = VisualInfo;
  762.         ng.ng_TextAttr   = Font;
  763.         ng.ng_LeftEdge   = OffX + ComputeX( ng.ng_LeftEdge );
  764.         ng.ng_TopEdge    = OffY + ComputeY( ng.ng_TopEdge );
  765.         ng.ng_Width      = ComputeX( ng.ng_Width );
  766.         ng.ng_Height     = ComputeY( ng.ng_Height);
  767.  
  768.         VisGadgets[ lc ] = g = CreateGadgetA((ULONG)VisGTypes[ lc ], g, &ng, ( struct TagItem * )&VisGTags[ tc ] );
  769.  
  770.         while( VisGTags[ tc ] ) tc += 2;
  771.         tc++;
  772.  
  773.         if ( NOT g )
  774.             return( 2L );
  775.     }
  776.  
  777.     if ( ! ( VisWnd = OpenWindowTags( NULL,
  778.                 WA_Left,    wleft,
  779.                 WA_Top,        wtop,
  780.                 WA_Width,    ww + OffX + Scr->WBorRight,
  781.                 WA_Height,    wh + OffY + Scr->WBorBottom,
  782.                 WA_IDCMP,    STRINGIDCMP|INTEGERIDCMP|BUTTONIDCMP|TEXTIDCMP|IDCMP_CLOSEWINDOW|IDCMP_VANILLAKEY|IDCMP_REFRESHWINDOW,
  783.                 WA_Flags,    WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH|WFLG_ACTIVATE,
  784.                 WA_Gadgets,    VisGList,
  785.                 WA_Title,    VisWdt,
  786.                 WA_PubScreen,    Scr,
  787.                 TAG_DONE )))
  788.     return( 4L );
  789.  
  790.     GT_RefreshWindow( VisWnd, NULL );
  791.  
  792.     return( 0L );
  793. }
  794.  
  795. void CloseVisWindow( void )
  796. {
  797.     if ( VisWnd        ) {
  798.         CloseWindow( VisWnd );
  799.         VisWnd = NULL;
  800.     }
  801.  
  802.     if ( VisGList      ) {
  803.         FreeGadgets( VisGList );
  804.         VisGList = NULL;
  805.     }
  806. }
  807.