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

  1. //
  2. // ProjectTestB: Test the functions introduced in the IProjectServer3 and 
  3. // IProjectNodeInfo2 interfaces.
  4. //
  5.  
  6.  
  7. #ifndef __AOEXPCH_H
  8.   #include "aoexpch.h"
  9. #endif
  10. #pragma hdrstop
  11.  
  12. #include <ideaddon\itool.h>
  13. #include <ideaddon\iproj.h>
  14.  
  15. #include "project2.h"
  16.  
  17.  
  18.  
  19. ////////////////////////////////
  20. // ProjectTestB Implementation
  21. ////////////////////////////////
  22.  
  23.  
  24. ProjectTestB::ProjectTestB()
  25.        : prjServer(NULL)
  26. {
  27.    
  28. }
  29.  
  30.  
  31. ProjectTestB::~ProjectTestB()
  32. {
  33.    if( prjServer )
  34.        prjServer->Release();
  35. }
  36.  
  37.  
  38. BOOL ProjectTestB::Init()
  39. {
  40.    OutStr( "ProjectTestB::Init()" );
  41.    IProjectServer* _prjServer = GET_INTERFACE( IProjectServer );
  42.    prjServer = QUERY_INTERFACE( _prjServer, IProjectServer3 );
  43.    if( prjServer == NULL )  {
  44.      OutStr( "Unable to retrieve IProjectServer3 interface" );
  45.      _prjServer->Release();
  46.      return FALSE;
  47.    }
  48.    _prjServer->Release();
  49.    return TRUE;            
  50. }
  51.  
  52.  
  53. void ProjectTestB::UnInit()
  54. {
  55.   OutStr( "ProjectTestB::UnInit()" );
  56. }
  57.  
  58.  
  59. const char* ProjectTestB::GetName()
  60. {
  61.    return "Project Test B";
  62. }
  63.  
  64.  
  65. const char* ProjectTestB::GetTestDescription(int testNum)
  66. {
  67.     switch(testNum)  {
  68.       case 1:
  69.         return "Move Selected Node Down One.";
  70.       case 2:
  71.         return "Copy Selected Node."; 
  72.       case 3:
  73.         return "Change Translator for Selected Nodes"; 
  74.       case 4:
  75.         return "Mark Selected Nodes as Dirty";
  76.       default: 
  77.         return "Test Not Implemented";
  78.     }
  79. }
  80.  
  81.  
  82. void ProjectTestB::DoTest(int testNum)
  83. {
  84.     switch(testNum)  {
  85.       case 1:
  86.         MoveNode();
  87.         break;
  88.       case 2:
  89.         CopyNode();
  90.         break;  
  91.       case 3:
  92.         SwapTranslator();
  93.         break; 
  94.       case 4:
  95.         MarkDirty();
  96.         break; 
  97.       default:
  98.         OutStr( "Test Not Implemented" );
  99.     }
  100. }
  101.  
  102.  
  103. //
  104. // Moves the first of the selected nodes down one slot in the project 
  105. // if possible. If not possible (checks with NodeIsValidMove) prints 
  106. // out "Invalid Move".
  107. //
  108. void ProjectTestB::MoveNode()
  109. {
  110.   int i = 0;
  111.   ProjectNode* node1 = prjServer->QuerySelectedNodes( &i );
  112.   if( i == 0 ) {
  113.       OutStr( "No nodes selected." );
  114.       return;
  115.   }
  116.   IProjectNodeInfo* info = prjServer->QueryNodeInfo( *node1 );
  117.   ProjectNode node2 = info->GetNextSibling();
  118.   info->Release();
  119.   if( node2 && 
  120.       prjServer->NodeIsValidMove(*node1,node2,PNP_AfterSibling) )  
  121.     prjServer->NodeMove( *node1, node2, PNP_AfterSibling );
  122.   else
  123.     OutStr( "Invalid Move." ); 
  124. }
  125.  
  126.  
  127. //
  128. // Copies first of selected nodes to the last child of the node's parent. 
  129. // First tests with NodeIsValidCopy to make sure copy operation is valid.
  130. // If not, prints "Invalid Copy". 
  131. //
  132. void ProjectTestB::CopyNode()
  133. {
  134.   int i = 0;
  135.   ProjectNode* node1 = prjServer->QuerySelectedNodes( &i );
  136.   if( i == 0 ) {
  137.       OutStr( "No nodes selected." );
  138.       return;
  139.   }
  140.   IProjectNodeInfo* info = prjServer->QueryNodeInfo( *node1 );
  141.   ProjectNode node2 = info->GetParent();
  142.   info->Release();
  143.   if( node2 && 
  144.       prjServer->NodeIsValidCopy(*node1,node2,PNP_LastChild) )
  145.     prjServer->NodeCopy( *node1, node2, PNP_LastChild );
  146.   else
  147.     OutStr( "Invalid Copy." ); 
  148. }
  149.  
  150.  
  151. //
  152. // Change the translator of the selected nodes to CppToAssembler. Will also
  153. // display old tool name. 
  154. //
  155. void ProjectTestB::SwapTranslator()
  156. {
  157.   int num = 0;
  158.   ProjectNode* nodes = prjServer->QuerySelectedNodes( &num );
  159.   if( num == 0 )  {
  160.     OutStr( "No Nodes Selected" );
  161.     return;
  162.   }   
  163.  
  164.   IToolServer* toolServer = GET_INTERFACE( IToolServer );
  165.   ToolObj cppToAsm = toolServer->ToolFind( MakePolyString("CppToAssembler") );
  166.   if( cppToAsm )  {
  167.     for(int i = 0; i < num; i++ )  {
  168.        IProjectNodeInfo* _nodeInfo = prjServer->QueryNodeInfo( nodes[i] );
  169.        IProjectNodeInfo2* nodeInfo = QUERY_INTERFACE( _nodeInfo, IProjectNodeInfo2 );
  170.        _nodeInfo->Release();
  171.        if( nodeInfo )  {
  172.          char buf[64];
  173.          ToolObj oldTool = nodeInfo->GetTranslator();
  174.          IToolInfo* toolInfo = toolServer->QueryToolInfo( oldTool );
  175.          IPolyString* toolName = toolInfo->GetName();
  176.          IPolyString* nodeName = nodeInfo->GetName();
  177.          toolInfo->Release();
  178.          nodeInfo->Release();
  179.          wsprintf( buf, "Node: %s  OldTool: %s", 
  180.                    nodeName->GetCstr(), toolName->GetCstr() );
  181.          OutStr( buf );
  182.          nodeName->Release();
  183.          toolName->Release();
  184.        }
  185.        prjServer->NodeSetTranslator( nodes[i], cppToAsm );
  186.     }
  187.   }
  188.   toolServer->Release();
  189. }       
  190.  
  191.  
  192. //
  193. // Marks selected nodes as dirty, meaning they will be recompiled during a 
  194. // a make, even if not out of date. 
  195. //
  196. void ProjectTestB::MarkDirty()
  197. {
  198.   int num = 0;
  199.   ProjectNode* nodes = prjServer->QuerySelectedNodes( &num );
  200.   if( num == 0 )  {
  201.     OutStr( "No Nodes Selected" );
  202.     return;
  203.   }
  204.  
  205.   for(int i = 0; i < num; i++)  {
  206.     prjServer->NodeSetDirty( nodes[i] );
  207.   }
  208. }
  209.  
  210.  
  211.  
  212.  
  213.