home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / BC_502 / ADDON.PAK / MAKETEST.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1997-05-06  |  7.5 KB  |  275 lines

  1. /*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  2.  
  3.   maketest.cpp
  4.   Created: 10/24/95
  5.   Copyright (c) 1995, Borland International
  6.   $Revision:   1.18  $
  7.    
  8. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/  
  9. #ifndef __AOEXPCH_H
  10.   #include "aoexpch.h"
  11. #endif
  12. #pragma hdrstop
  13.  
  14. #include <ideaddon\IProj.h>
  15. #include "maketest.h"
  16.  
  17. //.............................................................................
  18. class ProjectNodeResponder : public IProjectClient
  19. {
  20.   ULONG   m_RefCount;
  21.   MakeTestA *_pMakeTest;
  22.   IMakeServer *_pMakeSrvr;
  23.  
  24.  public:
  25.   ProjectNodeResponder( MakeTestA * pMakeTestA, IMakeServer *pMakeSrvr  ) 
  26.       : m_RefCount( 1 ), _pMakeTest( pMakeTestA ), _pMakeSrvr( pMakeSrvr )  {}
  27.  
  28.   // IUnknown members
  29.   STDMETHODIMP QueryInterface (THIS_ REFIID, LPVOID FAR *)
  30.       { return ResultFromScode(E_NOINTERFACE); }
  31.   STDMETHODIMP_(ULONG) AddRef  (THIS) { return m_RefCount++; }
  32.   STDMETHODIMP_(ULONG) Release (THIS) 
  33.       {return --m_RefCount == 0 ? (delete this, 0) : m_RefCount; }
  34.  
  35.   virtual void OpenNotify( IPolyString * projectName ) {}
  36.   virtual void CloseNotify() {}
  37.   virtual void NodeDeleteNotify( ProjectNode node ) {}
  38.   virtual void NodeAddNotify( ProjectNode node ) {}
  39.   virtual void NodeCopyNotify( ProjectNode, ProjectNode, BOOL ) {}
  40.   virtual void NodeMoveNotify( ProjectNode, ProjectNode ) {}
  41.   virtual void NodeChangeNotify( ProjectNode ) {}
  42.   virtual void DependencyQueryResponder( ProjectNode node, 
  43.                             IPolyString * outputName );
  44.   virtual BOOL HandleAddNodeUI() { return FALSE; }
  45.                             
  46. };
  47.  
  48. void ProjectNodeResponder::DependencyQueryResponder( ProjectNode node, 
  49.                             IPolyString * outputName )
  50.   {
  51.   if ( node )
  52.     {
  53.     char *name;
  54.     if ( outputName && ( name = (char *)outputName->GetCstr() ) != NULL )
  55.       {
  56.       long inputAge = _pMakeSrvr->NodeInputAge( node );
  57.       long outputAge = _pMakeSrvr->NodeOutputAge( node );
  58.       _pMakeTest->OutStr( name );
  59.       _pMakeTest->OutStr( _pMakeTest->FormatStr( "Input Age = %u, Output Age = %u", inputAge, outputAge ) );
  60.       }
  61.     else
  62.       {
  63.       _pMakeTest->OutStr ("Invalid project node name");
  64.       }
  65.     }
  66.   else
  67.     {
  68.     _pMakeTest->OutStr ("Invalid project node value");
  69.     }
  70.   }
  71.  
  72. //.............................................................................
  73. class MakeClientA : public IMakeClient
  74. {
  75.   ULONG m_RefCount;
  76.   MakeTestA *_pOwner;
  77.  
  78.  public:
  79.   MakeClientA(MakeTestA * pMakeTestA) : m_RefCount( 1 ), _pOwner( pMakeTestA )  {}
  80.  
  81.   // IUnknown members
  82.   STDMETHODIMP QueryInterface (THIS_ REFIID, LPVOID FAR *)
  83.       { return ResultFromScode(E_NOINTERFACE); }
  84.   STDMETHODIMP_(ULONG) AddRef  (THIS) { return m_RefCount++; }
  85.   STDMETHODIMP_(ULONG) Release (THIS) 
  86.       {return --m_RefCount == 0 ? (delete this, 0) : m_RefCount; }
  87.  
  88.   virtual void MakeBeginNotify()
  89.       { _pOwner->OutStr( "MakeClientA::MakeBeginNotify()" ); }
  90.   virtual void MakeEndNotify()
  91.       { _pOwner->OutStr( "MakeClientA::MakeEndNotify()" ); }
  92. };
  93.  
  94. //.............................................................................
  95. MakeTestA::MakeTestA() 
  96.   {
  97.   _makeServer = NULL;
  98.   _makeClient = NULL;
  99.   }
  100. //.............................................................................
  101. MakeTestA::~MakeTestA() 
  102.   {
  103.   UnInit();
  104.   }
  105. //.............................................................................
  106. BOOL MakeTestA::Init() 
  107.   {
  108.   if ( !_makeServer ) 
  109.     {
  110.     OutStr( "MakeTestA::Init()" );
  111.     _makeServer = GET_INTERFACE(IMakeServer);
  112.     if ( _makeServer == NULL ) 
  113.       {
  114.       return FALSE;
  115.       }
  116.     }
  117.   return TRUE;
  118. }
  119. //.............................................................................
  120. void MakeTestA::UnInit() 
  121.   {
  122.   OutStr( "MakeTestA::UnInit()" );
  123.   if ( _makeClient )
  124.     {
  125.     if ( _makeServer )
  126.       {
  127.     _makeClient->AddRef();
  128.       _makeServer->UnRegisterMakeClient( _makeClient );
  129.       }
  130.     _makeClient->Release();
  131.     _makeClient = NULL;
  132.     }
  133.   if ( _makeServer ) 
  134.     {
  135.     _makeServer->Release();
  136.     _makeServer = NULL;
  137.     }
  138.   }
  139. //.............................................................................
  140. const char * MakeTestA::GetName() 
  141.   {
  142.   return "MakeTestA";
  143.   }
  144. //.............................................................................
  145. const char * MakeTestA::GetTestDescription( int testNum ) 
  146.   {
  147.   switch ( testNum )
  148.     {
  149.     case 1: 
  150.       return "Register MakeClientA";
  151.     case 2: 
  152.       return "Unregister MakeClientA";
  153.     case 3: 
  154.       return "Make the top node";
  155.     case 4:
  156.       return "Show input and output ages of dependent nodes";
  157.     }
  158.   return "This test not implemented";
  159.   }  
  160. //.............................................................................
  161. void MakeTestA::DoTest( int testNum ) 
  162.   {
  163.   if ( !_makeServer ) 
  164.     {
  165.     OutStr( "Make Server not initialized!" );
  166.     return;
  167.     }
  168.   switch ( testNum ) 
  169.     {  
  170.     case 1: 
  171.       {
  172.       if ( _makeClient )
  173.         {
  174.         OutStr( "MakeClientA is already registered");
  175.         }
  176.       else
  177.         {
  178.         _makeClient = new MakeClientA( this );
  179.         if ( _makeClient )
  180.           {
  181.         _makeClient->AddRef();
  182.           _makeServer->RegisterMakeClient( _makeClient );
  183.           OutStr( "Registered MakeClientA");
  184.           }
  185.         else
  186.           {
  187.           OutStr( "Creation of MakeClientA failed");
  188.           }
  189.         }
  190.       }
  191.       break;
  192.  
  193.     case 2: 
  194.       {
  195.       if ( _makeClient )
  196.         {
  197.        _makeClient->AddRef();
  198.         _makeServer->UnRegisterMakeClient( _makeClient );
  199.  
  200.         _makeClient->Release();
  201.         _makeClient = NULL;
  202.         OutStr( "Unregistered MakeClientA");
  203.         }
  204.       else
  205.         {
  206.         OutStr( "MakeClientA is already unregistered");
  207.         }
  208.       }
  209.       break;
  210.  
  211.     case 3:
  212.       {
  213.       IProjectServer *pProject = GET_INTERFACE(IProjectServer);
  214.       if ( pProject == NULL ) 
  215.         {
  216.         OutStr( "Couldn't make a project server");
  217.         }
  218.       else
  219.         {
  220.         OutStr( "Make the top node");
  221.         ProjectNode node = pProject->QueryTopNode();
  222.         ProjectNode nodes[1];
  223.         nodes[0] = (ProjectNode)node;
  224.         _makeServer->MakeNodes( MM_Make, // Build, Translate
  225.                         nodes,
  226.                         sizeof(nodes)/sizeof(nodes[0]));
  227.         pProject->Release();
  228.         }
  229.       }
  230.       break;
  231.  
  232.  
  233.     case 4:
  234.       {
  235.       IProjectServer *pProject = GET_INTERFACE(IProjectServer);
  236.       if ( pProject == NULL ) 
  237.         {
  238.         OutStr( "Couldn't make a project server");
  239.         }
  240.       else
  241.         {
  242.         ProjectNode * nodeArray;
  243.         int numNodes;
  244.         OutStr( "Ages of dependent nodes of top selected node:" );
  245.         nodeArray = pProject->QuerySelectedNodes( &numNodes );
  246.         if ( numNodes )
  247.           {
  248.           ProjectNodeResponder * nodeResp = new ProjectNodeResponder( this, _makeServer );
  249.           if ( nodeResp )
  250.             {
  251.             pProject->QueryDependencies( nodeArray[0], nodeResp ); 
  252.             }
  253.           else
  254.             {
  255.             OutStr( "Couldn't make a project client" );
  256.             }
  257.           }
  258.         else
  259.           {
  260.           OutStr( "There is no selected node");
  261.           }
  262.         pProject->Release();
  263.         }
  264.       }
  265.       break;
  266.  
  267.     default: 
  268.       {
  269.       OutStr( FormatStr( "Test #%d Not Implemented!", testNum ) );
  270.       }
  271.     }
  272.   }
  273.  
  274. 
  275.