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

  1. /*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  2.  
  3.   menutest.cpp
  4.   Created: 10/24/95
  5.   Copyright (c) 1995, Borland International
  6.   $Revision:   1.15  $
  7.    
  8. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/  
  9. #ifndef __AOEXPCH_H
  10.   #include "aoexpch.h"
  11. #endif
  12. #pragma hdrstop
  13.  
  14. #include "menutest.h"
  15.  
  16. static BOOL gCommandsEnabled = TRUE;
  17.  
  18. /*============================================================================
  19.  
  20.       MenuTestA
  21.             
  22. ============================================================================*/            
  23.  
  24. BOOL PASCAL globalCommandEnabler() {
  25.   return gCommandsEnabled;
  26.  
  27. //.............................................................................
  28. MenuTestA::MenuTestA() 
  29.   {
  30.   _startInitFailed = FALSE;
  31.   _menuServer = NULL;
  32.   _windowCmd = NULL;
  33.   _openFileCmd = NULL;
  34.   _pWindowMenuItem = NULL;
  35.   _pOpenFileMenu1 = NULL;
  36.   _pOpenFileMenu2 = NULL;
  37.   _pEditorMenu = NULL;
  38.   _pWindowRestoreMenu = NULL;
  39.   _myMenuClient = new myMenuClient;
  40.  
  41.   _cmdServer  = GET_INTERFACE(ICommandServer);
  42.   if ( !_cmdServer )
  43.     {     
  44.     _startInitFailed = TRUE;
  45.     return;
  46.     }
  47.  
  48.   _menuServer = GET_INTERFACE(IMenuServer);
  49.   if ( !_menuServer )
  50.     {     
  51.     _startInitFailed = TRUE;
  52.     return;
  53.     }
  54.  
  55.   // add a cmd and a menu to the windows menu
  56.   _windowCmd = _cmdServer->CreateCommand();
  57.   if ( _windowCmd )
  58.     {
  59.     // Fill in the cmd
  60.     _windowCmd->SetName( ::MakePolyString ("MinimizeAllExceptMessageView") );
  61.     _windowCmd->SetDescription( ::MakePolyString ("Mininimize all except the message view.") );
  62.     _windowCmd->SetScriptCommand( ::MakePolyString ("IDE.WindowMinimizeAll();IDE.ViewMessage();") );
  63.     _windowCmd->SetToolTip( ::MakePolyString ("Mininimize all except the message view.") );
  64.     _windowCmd->SetHelpHint( ::MakePolyString ("Mininimize all except the message view.")  );
  65.     _windowCmd->SetEnableFunction( globalCommandEnabler );
  66.     _windowCmd->AddRef();
  67.     _cmdServer->AddCommand( _windowCmd );
  68.     _pWindowMenuItem = _menuServer->CreateItem();
  69.     if ( _pWindowMenuItem )
  70.       {
  71.       _windowCmd->AddRef();
  72.       _pWindowMenuItem->SetCommand( _windowCmd );
  73.       _pWindowMenuItem->SetMenuText( ::MakePolyString ("&Window|AddOn Minimize All and Show Message View") );
  74.       _pWindowMenuItem->SetMenuType( MT_IDE );
  75.       //
  76.       // We've done everything except register this menu item, which won't
  77.       // work properly unless we defer it until after the IDE has had a 
  78.       // chance to assign a unique command ID for this command. It
  79.       // is safe to register the menu item when scripts are loading (your
  80.       // script could call back to your dll), when the first project open
  81.       // event arrives (by registering a project client with the project
  82.       // server) or in the case of this example, by waiting for some user 
  83.       // driven event - here it is the init of this test. (See 
  84.       // MenuTestA::Init() below)
  85.       //
  86.       }
  87.     }
  88.  
  89.   // add a file open cmd
  90.   _openFileCmd = _cmdServer->CreateCommand();
  91.   if ( _openFileCmd )
  92.     {
  93.     // Fill in the cmd
  94.     _openFileCmd->SetName( ::MakePolyString ("AnotherFileOpen") );
  95.     _openFileCmd->SetDescription( ::MakePolyString ("Another File Open") );
  96.     _openFileCmd->SetScriptCommand( ::MakePolyString ("IDE.FileOpen();") );
  97.     _openFileCmd->SetToolTip( ::MakePolyString ("A test of the command interface") );
  98.     _openFileCmd->SetHelpHint( ::MakePolyString ("A test of the command interface")  );
  99.     _openFileCmd->SetEnableFunction( globalCommandEnabler );
  100.     _openFileCmd->AddRef();
  101.     _cmdServer->AddCommand( _openFileCmd );
  102.     }
  103.   }
  104.  
  105. //.............................................................................
  106. MenuTestA::~MenuTestA() 
  107.   {
  108.   UnInit();
  109.  
  110.   // Remove the 2 commands we added
  111.   if ( _windowCmd )
  112.     {
  113.     _cmdServer->RemoveCommand( _windowCmd );
  114.     _windowCmd = NULL;
  115.     }
  116.   if ( _openFileCmd )
  117.     {
  118.     _cmdServer->RemoveCommand( _openFileCmd );
  119.     _openFileCmd = NULL;
  120.     }
  121.  
  122.   // Remove the menus we added
  123.   if ( _pWindowMenuItem )
  124.     {
  125.     _menuServer->UnRegisterItem( _pWindowMenuItem );
  126.     _pWindowMenuItem = NULL;
  127.     }
  128.   if ( _pOpenFileMenu1 )
  129.     {
  130.     _menuServer->UnRegisterItem( _pOpenFileMenu1 );
  131.     _pOpenFileMenu1 = NULL;
  132.     }
  133.   if ( _pOpenFileMenu2 )
  134.     {
  135.     _menuServer->UnRegisterItem( _pOpenFileMenu2 );
  136.     _pOpenFileMenu2 = NULL;
  137.     }
  138.   if ( _pWindowRestoreMenu )
  139.     {
  140.     _menuServer->UnRegisterItem( _pWindowRestoreMenu );
  141.     _pWindowRestoreMenu = NULL;
  142.     }
  143.   if ( _pEditorMenu )
  144.     {
  145.     _menuServer->UnRegisterItem( _pEditorMenu );
  146.     _pEditorMenu = NULL;
  147.     }
  148.  
  149.   // Release the 2 servers
  150.   if ( _cmdServer ) 
  151.     {
  152.     _cmdServer->Release();
  153.     _cmdServer = NULL;
  154.     }
  155.   if ( _menuServer ) 
  156.     {
  157.     _menuServer->Release();
  158.     _menuServer = NULL;
  159.     }
  160.   if ( _myMenuClient ) 
  161.     {
  162.     _myMenuClient->Release();
  163.     }
  164.   }
  165. //.............................................................................
  166. BOOL MenuTestA::Init() 
  167.   {
  168.   if ( _startInitFailed )
  169.     {
  170.     OutStr( "MenuTestA was inited at startup but it faiuled" );
  171.     }
  172.   else
  173.     {
  174.     _pWindowMenuItem->AddRef();
  175.     _menuServer->RegisterItem( _pWindowMenuItem, NULL );
  176.     OutStr( "MenuTestA Init()" );
  177.     }
  178.   return TRUE;
  179. }
  180. //.............................................................................
  181. void MenuTestA::UnInit() 
  182.   {
  183.   OutStr( "MenuTestA::UnInit()" );
  184.   }
  185. //.............................................................................
  186. const char * MenuTestA::GetName() 
  187.   {
  188.   return "MenuTestA";
  189.   }
  190. //.............................................................................
  191. const char * MenuTestA::GetTestDescription( int testNum ) 
  192.   {
  193.   switch ( testNum )
  194.     {
  195.     case 1:
  196.       return "Add Addon menus to frame, Window|Restore all, and editor popup menus.";
  197.     case 2:
  198.       return "Toggle command enabler for all addon menu items.";
  199.     case 3:
  200.       return "Toggle editor popup Addon item availability.";
  201.     case 4:
  202.       return "Remove all menus added";
  203.     }
  204.   return "This test not implemented.";
  205.   }  
  206. //.............................................................................
  207. void MenuTestA::DoTest( int testNum ) 
  208.   {
  209.   if ( !_menuServer ) 
  210.     {
  211.     OutStr( "Menu Server not initialized!" );
  212.     return;
  213.     }
  214.   switch ( testNum ) 
  215.     {
  216.     case 1:
  217.       if ( _openFileCmd )
  218.         {
  219.         _pOpenFileMenu1 = _menuServer->CreateItem();
  220.         if ( _pOpenFileMenu1 )
  221.           {
  222.           _openFileCmd->AddRef();
  223.           _pOpenFileMenu1->SetCommand( _openFileCmd );
  224.           _pOpenFileMenu1->SetMenuText( ::MakePolyString ("&Addon|AddOnOpenFile...") );
  225.           _pOpenFileMenu1->SetMenuType( MT_IDE );
  226.           _pOpenFileMenu1->AddRef();
  227.           _menuServer->RegisterItem( _pOpenFileMenu1, NULL );
  228.           }
  229.         _pOpenFileMenu2 = _menuServer->CreateItem();
  230.         if ( _pOpenFileMenu2 )
  231.           {
  232.           _openFileCmd->AddRef();
  233.           _pOpenFileMenu2->SetCommand( _openFileCmd );
  234.           _pOpenFileMenu2->SetMenuText( ::MakePolyString ("&Addon|Another|AddOnOpenFile...") );
  235.           _pOpenFileMenu2->SetMenuType( MT_IDE );
  236.           _pOpenFileMenu2->AddRef();
  237.           _menuServer->RegisterItem( _pOpenFileMenu2, NULL );
  238.           }
  239.         _pWindowRestoreMenu = _menuServer->CreateItem();
  240.         if ( _pWindowRestoreMenu )
  241.           {
  242.           _openFileCmd->AddRef();
  243.           _pWindowRestoreMenu->SetCommand( _openFileCmd );
  244.           _pWindowRestoreMenu->SetMenuText( ::MakePolyString ("&Window|&Restore all|AddOnOpenFile...") );
  245.           _pWindowRestoreMenu->SetMenuType( MT_IDE );
  246.           _pWindowRestoreMenu->AddRef();
  247.           _menuServer->RegisterItem( _pWindowRestoreMenu, NULL );
  248.           }
  249.         _pEditorMenu = _menuServer->CreateItem();
  250.         if ( _pEditorMenu )
  251.           {
  252.           _openFileCmd->AddRef();
  253.           _pEditorMenu->SetCommand( _openFileCmd );
  254.           _pEditorMenu->SetMenuText( ::MakePolyString ("AddOnOpenFile...") );
  255.           _pEditorMenu->SetMenuType( MT_Editor );
  256.           _pEditorMenu->AddRef();
  257.           _menuServer->RegisterItem( _pEditorMenu, _myMenuClient );
  258.           }
  259.         }
  260.       break;
  261.     case 2:
  262.       gCommandsEnabled = !gCommandsEnabled;
  263.       OutStr( FormatStr( "Addon menu commands %s", gCommandsEnabled? "Enabled" : "Disabled" ) );
  264.       break;      
  265.       
  266.     case 3:
  267.       _myMenuClient->MenuAvailable( !_myMenuClient->MenuAvailable() );
  268.       OutStr( FormatStr( "Edit menu AddOn item is %s", 
  269.             _myMenuClient->MenuAvailable()? "Available" : "Unavailable" ) );
  270.       break;
  271.     case 4:
  272.       {
  273.       OutStr( "Removing all AddOn menu items." );
  274.       if ( _pOpenFileMenu1 )
  275.         {
  276.         _menuServer->UnRegisterItem( _pOpenFileMenu1 );
  277.         _pOpenFileMenu1 = NULL;
  278.         }
  279.       if ( _pOpenFileMenu2 )
  280.         {
  281.         _menuServer->UnRegisterItem( _pOpenFileMenu2 );
  282.         _pOpenFileMenu2 = NULL;
  283.         }
  284.       if ( _pWindowRestoreMenu )
  285.         {
  286.         _menuServer->UnRegisterItem( _pWindowRestoreMenu );
  287.         _pWindowRestoreMenu = NULL;
  288.         }
  289.       if ( _pEditorMenu )
  290.         {
  291.         _menuServer->UnRegisterItem( _pEditorMenu );
  292.         _pEditorMenu = NULL;
  293.         }
  294.       }
  295.       break;
  296.  
  297.     default: 
  298.       {
  299.       OutStr( FormatStr( "Test #%d Not Implemented!", testNum ) );
  300.       }
  301.     }
  302.   }
  303.  
  304. /*============================================================================
  305.  
  306.   MenuTestB
  307.   
  308. =============================================================================*/ 
  309.  
  310. //.......... command enablers ---------------
  311. static BOOL cmd1Enabled = FALSE;
  312. static BOOL cmd2Enabled = TRUE;
  313. static BOOL cmd3Enabled = FALSE;
  314. static BOOL cmd4Enabled = TRUE;
  315.  
  316.  
  317. BOOL PASCAL cmd1Enabler() {
  318.   return cmd1Enabled;
  319. BOOL PASCAL cmd2Enabler() {
  320.   return cmd2Enabled;
  321. BOOL PASCAL cmd3Enabler() {
  322.   return cmd3Enabled;
  323. BOOL PASCAL cmd4Enabler() {
  324.   return cmd4Enabled;
  325.  
  326.  
  327. //.............................................................................
  328. MenuTestB::MenuTestB() {
  329.   _cmdServer  = GET_INTERFACE(ICommandServer);
  330.   _menuServer = GET_INTERFACE(IMenuServer);
  331.   _cmd1 = _cmdServer->CreateCommand();
  332.   _cmd2 = _cmdServer->CreateCommand();
  333.   _cmd3 = _cmdServer->CreateCommand();
  334.   _cmd4 = _cmdServer->CreateCommand();
  335.   _cmd1->SetName( MakePolyString( "AddonCommand1" ) );
  336.   _cmd2->SetName( MakePolyString( "AddonCommand2" ) );
  337.   _cmd3->SetName( MakePolyString( "AddonCommand3" ) );
  338.   _cmd4->SetName( MakePolyString( "AddonCommand4" ) );
  339.   _cmd1->SetScriptCommand( MakePolyString( "AddonTestCommand1();" ) );
  340.   _cmd2->SetScriptCommand( MakePolyString( "AddonTestCommand2();" ) );
  341.   _cmd3->SetScriptCommand( MakePolyString( "AddonTestCommand3();" ) );
  342.   _cmd4->SetScriptCommand( MakePolyString( "AddonTestCommand4();" ) );
  343.   _cmd1->SetEnableFunction( cmd1Enabler );
  344.   _cmd2->SetEnableFunction( cmd2Enabler );
  345.   _cmd3->SetEnableFunction( cmd3Enabler );
  346.   _cmd4->SetEnableFunction( cmd4Enabler );
  347.   _cmd1->SetHelpHint( MakePolyString( "Help for addon command #1" ) );
  348.   _cmd2->SetHelpHint( MakePolyString( "Help for addon command #2" ) );
  349.   _cmd3->SetHelpHint( MakePolyString( "Help for addon command #3" ) );
  350.   _cmd4->SetHelpHint( MakePolyString( "Help for addon command #4" ) );
  351.   _menu1 = _menuServer->CreateItem();
  352.   _menu2 = _menuServer->CreateItem();
  353.   _menu3 = _menuServer->CreateItem();
  354.   _menu4 = _menuServer->CreateItem();
  355.   _cmd1->AddRef();
  356.   _cmd2->AddRef();
  357.   _cmd3->AddRef();
  358.   _cmd4->AddRef();
  359.   _cmdServer->AddCommand( _cmd1 );
  360.   _cmdServer->AddCommand( _cmd2 );
  361.   _cmdServer->AddCommand( _cmd3 );
  362.   _cmdServer->AddCommand( _cmd4 );
  363.   _cmd1->AddRef();
  364.   _cmd2->AddRef();
  365.   _cmd3->AddRef();
  366.   _cmd4->AddRef();
  367.   _menu1->SetCommand( _cmd1 );
  368.   _menu2->SetCommand( _cmd2 );
  369.   _menu3->SetCommand( _cmd3 );
  370.   _menu4->SetCommand( _cmd4 );
  371.   _menu1->SetMenuText( MakePolyString( "&AddOn Test|Command &1" ) );
  372.   _menu2->SetMenuText( MakePolyString( "&AddOn Test|Command &2" ) );
  373.   _menu3->SetMenuText( MakePolyString( "&AddOn Test|Command &3" ) );
  374.   _menu4->SetMenuText( MakePolyString( "&AddOn Test|Command &4" ) );
  375.   _menu1->SetMenuType( MT_IDE );
  376.   _menu2->SetMenuType( MT_IDE );
  377.   _menu3->SetMenuType( MT_IDE );
  378.   _menu4->SetMenuType( MT_IDE );
  379. }
  380.  
  381. //.............................................................................
  382. MenuTestB::~MenuTestB() {
  383.   UnInit();
  384.   _menuServer->UnRegisterItem( _menu1 );
  385.   _menuServer->UnRegisterItem( _menu2 );
  386.   _menuServer->UnRegisterItem( _menu3 );
  387.   _menuServer->UnRegisterItem( _menu4 );
  388.   _cmdServer->RemoveCommand( _cmd1 ); 
  389.   _cmdServer->RemoveCommand( _cmd2 ); 
  390.   _cmdServer->RemoveCommand( _cmd3 ); 
  391.   _cmdServer->RemoveCommand( _cmd4 ); 
  392.   _menuServer->Release();
  393.   _cmdServer->Release();
  394. }
  395. //.............................................................................
  396. BOOL MenuTestB::Init()  {
  397.   OutStr( "MenuTestB::Init()" );
  398.   return TRUE;
  399. }
  400. //.............................................................................
  401. void MenuTestB::UnInit() {
  402.   OutStr( "MenuTestB::UnInit()" );
  403. }
  404. //.............................................................................
  405. const char * MenuTestB::GetName() {
  406.   return "MenuTestB";
  407. }
  408. //.............................................................................
  409. const char * MenuTestB::GetTestDescription( int testNum ) {
  410.   switch ( testNum ) {
  411.     case 1:
  412.       return "Add menu Items.";
  413.     case 2:
  414.       return "Toggle enablers.";
  415.   }
  416.   return "This test not implemented.";
  417. }  
  418. //.............................................................................
  419. void MenuTestB::DoTest( int testNum ) {
  420.   switch ( testNum ) {
  421.     case 1:
  422.       OutStr( "Adding menu items." );
  423.       _menu1->AddRef(); 
  424.       _menu2->AddRef(); 
  425.       _menu3->AddRef(); 
  426.       _menu4->AddRef(); 
  427.       _menuServer->RegisterItem( _menu1, NULL );
  428.       _menuServer->RegisterItem( _menu2, NULL );
  429.       _menuServer->RegisterItem( _menu3, NULL );
  430.       _menuServer->RegisterItem( _menu4, NULL );
  431.       break;        
  432.     case 2:
  433.       OutStr( "Toggling enablers." );
  434.       cmd1Enabled = !cmd1Enabled;
  435.       cmd2Enabled = !cmd2Enabled;
  436.       cmd3Enabled = !cmd3Enabled;
  437.       cmd4Enabled = !cmd4Enabled;
  438.       break;            
  439.     default: 
  440.       OutStr( FormatStr( "Test #%d Not Implemented!", testNum ) );
  441.   }
  442. }
  443.