home *** CD-ROM | disk | FTP | other *** search
/ Amiga Elysian Archive / AmigaElysianArchive.iso / prog / c / objectiv.lha / Examples / Manx / demogadget1.c < prev    next >
C/C++ Source or Header  |  1992-10-21  |  11KB  |  293 lines

  1. /*
  2. ** $Filename: demogadget1.c $
  3. ** $Release : 1.0           $
  4. ** $Revision: 1.319         $
  5. ** $Date    : 21/10/92      $
  6. **
  7. **
  8. ** (C) Copyright 1992 Davide Massarenti
  9. **              All Rights Reserved
  10. **
  11. ** MANX 5.2: cc -ps -wdrunpo -so <name>.c
  12. **           ln -o <name> <name>.o -lOGTglue -lc16
  13. **
  14. */
  15.  
  16. #include <OGT/ObjectiveGadTools.h>
  17.  
  18. #define ARGS_TEMPLATE "FONT/K,SIZE/N"
  19. #define ARGS_FONT       (0)
  20. #define ARGS_SIZE       (1)
  21. #define ARGS_NUMOF      (2)
  22.  
  23. static LONG args[ ARGS_NUMOF ];
  24.  
  25. static char Class_ListView[] = LISTVIEW_OGT_CLASS;
  26.  
  27. struct TextAttr  MyAttr = { "courier.font", 18 };
  28. struct TextFont *MyFont;
  29. struct MsgPort  *MyPort;
  30.  
  31. APTR                     VInfo[ 2 ];
  32. struct Window           *Win  [ 2 ];
  33. Object                 **Gads [ 2 ];
  34. struct RDArgs           *Ra;
  35.  
  36.  
  37. struct TagItem WindowDescTags[] =
  38. {
  39.    { OVI_GimmeZeroZero    , TRUE                                    },
  40.    { OVI_AdaptWidthToFont , TRUE                                    },
  41.    { OVI_AdaptHeightToFont, TRUE                                    },
  42.    { OGT_ScaleLeft        , OGT_DomainRelative                      },
  43.    { OGT_ScaleTop         , OGT_DomainRelative                      },
  44.    { OGT_ScaleWidth       , OGT_DomainRelative                      },
  45.    { OGT_ScaleHeight      , OGT_DomainRelative                      },
  46.    { OGT_DomainXscale     , ~0                                      },
  47.    { OGT_DomainYscale     , ~0                                      },
  48.    { WA_Activate          , TRUE                                    },
  49.    { WA_SmartRefresh      , TRUE                                    },
  50.    { WA_NoCareRefresh     , TRUE                                    },
  51.    { WA_DepthGadget       , TRUE                                    },
  52.    { WA_SizeGadget        , TRUE                                    },
  53.    { WA_SizeBBottom       , TRUE                                    },
  54.    { WA_SizeBRight        , TRUE                                    },
  55.    { WA_DragBar           , TRUE                                    },
  56.    { WA_Left              , 300                                     },
  57.    { WA_Top               , 150                                     },
  58.    { WA_Width             , 280                                     },
  59.    { WA_Height            , 200                                     },
  60.    { WA_MaxWidth          , ~0                                      },
  61.    { WA_MaxHeight         , ~0                                      },
  62.    { WA_IDCMP             , (IDCMP_CLOSEWINDOW | IDCMP_IDCMPUPDATE) },
  63.    { WA_CloseGadget       , TRUE                                    },
  64.    { TAG_DONE                                                       },
  65. };
  66.  
  67. STRPTR Object1Labels[] =
  68. {
  69.    "OVI_GimmeZeroZero, (void *)TRUE",
  70.    "WA_Title         , (void *)DemoGadget1",
  71.    "WA_Activate      , (void *)TRUE",
  72.    "WA_SimpleRefresh , (void *)TRUE",
  73.    "WA_NoCareRefresh , (void *)TRUE",
  74.    "WA_DepthGadget   , (void *)TRUE",
  75.    "WA_SizeGadget    , (void *)TRUE",
  76.    "WA_SizeBBottom   , (void *)TRUE",
  77.    "WA_SizeBRight    , (void *)TRUE",
  78.    "WA_DragBar       , (void *)TRUE",
  79.    "WA_Left          , (void *)300",
  80.    "WA_Top           , (void *)150",
  81.    "WA_Width         , (void *)280",
  82.    "WA_Height        , (void *)200",
  83.    "WA_MinWidth      , (void *)180",
  84.    "WA_MinHeight     , (void *)70",
  85.    "WA_MaxWidth      , (void *)2000",
  86.    "WA_MaxHeight     , (void *)2000",
  87.    "WA_IDCMP         , (void *)(IDCMP_CLOSEWINDOW | IDCMP_IDCMPUPDATE)",
  88.    "WA_CloseGadget   , (void *)TRUE",
  89.    NULL
  90. };
  91.  
  92. struct TagItem Object1Desc[] = /* LISTVIEW_OGT_CLASS */
  93. {
  94.    { GA_ID             , 1                },
  95.  
  96.    { OGT_ScaleWidth    , OGT_FontRelative },
  97.    { OGT_ScaleHeight   , OGT_FontRelative },
  98.    { GA_Left           , 2                },
  99.    { GA_Top            , 12               },
  100.    { OGT_Right         , 136              },
  101.    { OGT_Bottom        , 80               },
  102.  
  103.    { GA_Text           , "_Primo"         },
  104.    { OGT_DrawFrame     , TRUE             },
  105.  
  106.    { OGTLV_Labels      , Object1Labels    },
  107.    { OGTLV_ActiveLabel , 2                },
  108.    { OGTLV_ReadOnly    , TRUE             },
  109.    { OGTLV_ToggleSelect, TRUE             },
  110.  
  111.    { TAG_DONE                             },
  112. };
  113.  
  114. struct TagItem Object2Desc[] = /* LISTVIEW_OGT_CLASS */
  115. {
  116.    { GA_ID             , 2                  },
  117.  
  118.    { GA_Left           , 142                },
  119.    { GA_Top            , 12                 },
  120.    { GA_Width          , 136                },
  121.    { GA_Height         , 80                 },
  122.  
  123.    { GA_Text           , "_Secondo"         },
  124.    { OGT_DrawFrame     , TRUE               },
  125.  
  126.    { OGTLV_Labels      , Object1Labels      },
  127.    { OGTLV_ActiveLabel , 2                  },
  128.    { OGTLV_ShowSelected, TRUE               },
  129.    { TAG_DONE                               },
  130. };
  131.  
  132. struct TagItem Object3Desc[] = /* LISTVIEW_OGT_CLASS */
  133. {
  134.    { GA_ID             , 3                  },
  135.  
  136.    { GA_Left           , 2                  },
  137.    { GA_Top            , 108                },
  138.    { GA_Width          , 136                },
  139.    { GA_Height         , 80                 },
  140.  
  141.    { GA_Text           , "_Terzo"           },
  142.    { OGT_DrawFrame     , TRUE               },
  143.  
  144.    { OGTLV_Labels      , Object1Labels      },
  145.    { OGTLV_ActiveLabel , 2                  },
  146.    { TAG_DONE                               },
  147. };
  148.  
  149. struct OGT_ObjectSettings ListOfObjects[] =
  150. {
  151.    { Class_ListView, Object1Desc, NULL, OGT_NOOBJECT, OGT_NOOBJECT },
  152.    { Class_ListView, Object2Desc, NULL, OGT_NOOBJECT, OGT_NOOBJECT },
  153.    { Class_ListView, Object3Desc, NULL, OGT_NOOBJECT, OGT_NOOBJECT },
  154.    { NULL                                                          },
  155. };
  156.  
  157. struct OGT_ObjectLink ListOfLinks[] =
  158. {
  159.    { OGT_NOOBJECT                }
  160. };
  161.  
  162. static void cleanup           ( char *str );
  163. static void goHandleWindowWait( void      );
  164. static BOOL goHandleWindow    ( int   num );
  165.  
  166. void main( void )
  167. {
  168.    if(!OpenOGT()) cleanup( "no objectivegadtools library\n" );
  169.  
  170.    if(!(Ra = ReadArgs( ARGS_TEMPLATE, args, NULL ))) cleanup( "can't parse args\n" );
  171.  
  172.    if(args[ ARGS_FONT ]) MyAttr.ta_Name  =  (void  *)args[ ARGS_FONT ];
  173.    if(args[ ARGS_SIZE ]) MyAttr.ta_YSize = *(ULONG *)args[ ARGS_SIZE ];
  174.  
  175.    if(MyAttr.ta_Name)
  176.    {
  177.       if(!(MyFont = OpenDiskFont( &MyAttr ))) cleanup( "can't open font!!\n" );
  178.    }
  179.  
  180.    if(!(MyPort = CreateMsgPort())) cleanup( "can't open my port!!\n" );
  181.  
  182.    while(1)
  183.    {
  184.       VInfo[ 0 ] = OGT_GetVisualInfo( MyPort, OGT_TextFont, (ULONG)MyFont         ,
  185.                                               WA_Title    , (ULONG)"DemoGadget1/1",
  186.                                               TAG_MORE    , (ULONG)WindowDescTags );
  187.  
  188.       if(VInfo[ 0 ] == NULL) cleanup( "can't open window 1.\n" );
  189.  
  190.       if(!OGT_BuildObjects( VInfo[ 0 ], ListOfObjects, ListOfLinks, &Gads[ 0 ] )) cleanup( "can't create objects for window 1" );
  191.  
  192.       Win[ 0 ] = OGT_GetWindowPtr( VInfo[ 0 ] );
  193.  
  194.       VInfo[ 1 ] = OGT_GetVisualInfo( MyPort, OGT_TextFont, (ULONG)MyFont         ,
  195.                                               WA_Title    , (ULONG)"DemoGadget1/2",
  196.                                               WA_Left     , (ULONG)0              ,
  197.                                               TAG_MORE    , (ULONG)WindowDescTags );
  198.  
  199.       if(VInfo[ 1 ] == NULL) cleanup( "can't open window 2.\n" );
  200.  
  201.       if(!OGT_BuildObjects( VInfo[ 1 ], ListOfObjects, ListOfLinks, &Gads[ 1 ] )) cleanup( "can't create objects for window 2" );
  202.  
  203.       Win[ 1 ] = OGT_GetWindowPtr( VInfo[ 1 ] );
  204.  
  205.       goHandleWindowWait();
  206.  
  207.       SetGadgetAttrs( Gads[ 0 ][ 0 ], Win[ 0 ], NULL, OGTLV_LockList        , (ULONG)TRUE         ,
  208.                                                       OGTLV_WorkLabelPos    , (ULONG)5            ,
  209.                                                       OGTLV_InsertLabelAfter, (ULONG)"Prova AFTER",
  210.                                                       OGTLV_LockList        , (ULONG)FALSE        ,
  211.                                                       TAG_DONE                                    ); goHandleWindowWait();
  212.  
  213.       SetGadgetAttrs( Gads[ 0 ][ 0 ], Win[ 0 ], NULL, OGTLV_LockList         , (ULONG)TRUE          ,
  214.                                                       OGTLV_WorkLabelPos     , (ULONG)5             ,
  215.                                                       OGTLV_InsertLabelBefore, (ULONG)"Prova BEFORE",
  216.                                                       OGTLV_LockList         , (ULONG)FALSE         ,
  217.                                                       TAG_DONE                                     ); goHandleWindowWait();
  218.  
  219.       SetGadgetAttrs( Gads[ 0 ][ 0 ], Win[ 0 ], NULL, OGTLV_LockList         , (ULONG)TRUE          ,
  220.                                                       OGTLV_WorkLabelPos     , (ULONG)6             ,
  221.                                                       OGTLV_DeleteLabel      , (ULONG)0             ,
  222.                                                       OGTLV_LockList         , (ULONG)FALSE         ,
  223.                                                       TAG_DONE                                     ); goHandleWindowWait();
  224.  
  225.       SetGadgetAttrs( Gads[ 0 ][ 0 ], Win[ 0 ], NULL, OGTLV_ActiveLabel, (ULONG)3    , TAG_DONE ); goHandleWindowWait();
  226.  
  227.       SetGadgetAttrs( Gads[ 0 ][ 0 ], Win[ 0 ], NULL, GA_Disabled      , (ULONG)TRUE , TAG_DONE );
  228.       SetGadgetAttrs( Gads[ 0 ][ 1 ], Win[ 0 ], NULL, GA_Disabled      , (ULONG)TRUE , TAG_DONE ); goHandleWindowWait();
  229.  
  230.       SetGadgetAttrs( Gads[ 0 ][ 0 ], Win[ 0 ], NULL, GA_Disabled      , (ULONG)FALSE, TAG_DONE );
  231.       SetGadgetAttrs( Gads[ 0 ][ 1 ], Win[ 0 ], NULL, GA_Disabled      , (ULONG)FALSE, TAG_DONE ); goHandleWindowWait();
  232.  
  233.       break;
  234.    }
  235.  
  236.    cleanup( "all done" );
  237. }
  238.  
  239. static void cleanup( char *str )
  240. {
  241.    if(str) Printf( "%s\n", str );
  242.  
  243.    if(Gads [ 0 ]) FreeVec           ( Gads [ 0 ] );
  244.    if(Gads [ 1 ]) FreeVec           ( Gads [ 1 ] );
  245.    if(VInfo[ 0 ]) OGT_FreeVisualInfo( VInfo[ 0 ] );
  246.    if(VInfo[ 1 ]) OGT_FreeVisualInfo( VInfo[ 1 ] );
  247.  
  248.    if(Ra    ) FreeArgs     ( Ra     );
  249.    if(MyFont) CloseFont    ( MyFont );
  250.    if(MyPort) DeleteMsgPort( MyPort );
  251.  
  252.    CloseOGT();
  253.  
  254.    Exit( 0 );
  255. }
  256.  
  257. static void goHandleWindowWait( void )
  258. {
  259.    BOOL  keeprunning = TRUE;
  260.    ULONG mask        = 0;
  261.  
  262.    if(Win[ 0 ]) mask |= 1L << Win[ 0 ]->UserPort->mp_SigBit;
  263.    if(Win[ 1 ]) mask |= 1L << Win[ 1 ]->UserPort->mp_SigBit;
  264.  
  265.    while(mask && keeprunning)
  266.    {
  267.       Wait( mask );
  268.  
  269.       keeprunning = goHandleWindow( 0 ) & goHandleWindow( 1 );
  270.    }
  271. }
  272.  
  273. static BOOL goHandleWindow( int num )
  274. {
  275.    BOOL                 keeprunning = TRUE;
  276.  
  277.    struct IntuiMessage *imsg;
  278.  
  279.    while(keeprunning && (imsg = OGT_GetMsg( VInfo[ num ] )))
  280.    {
  281.       switch(imsg->Class)
  282.       {
  283.          case IDCMP_CLOSEWINDOW:
  284.             keeprunning = FALSE;
  285.             break;
  286.       }
  287.  
  288.       OGT_ReplyMsg( imsg );
  289.    }
  290.  
  291.    return( keeprunning );
  292. }
  293.