Logo Search packages:      
Sourcecode: cccc version File versions

DSAddIn.cpp

// AddInMod.cpp : implementation file
//


#include "stdafx.h"

// Turn off warnings due to long names arising out of STL use
#pragma warning ( disable : 4786 4503 )

#include "CcccDevStudioAddIn.h"
#include "DSAddIn.h"
#include "Commands.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

// This is called when the user first loads the add-in, and on start-up
//  of each subsequent Developer Studio session
STDMETHODIMP CDSAddIn::OnConnection(IApplication* pApp, VARIANT_BOOL bFirstTime,
            long dwCookie, VARIANT_BOOL* OnConnection)
{
      AFX_MANAGE_STATE(AfxGetStaticModuleState());
      
      // Store info passed to us
      IApplication* pApplication = NULL;
      if (FAILED(pApp->QueryInterface(IID_IApplication, (void**) &pApplication))
            || pApplication == NULL)
      {
            *OnConnection = VARIANT_FALSE;
            return S_OK;
      }

      m_dwCookie = dwCookie;

      // Create command dispatch, send info back to DevStudio
      CCommandsObj::CreateInstance(&m_pCommands);
      m_pCommands->AddRef();

      // The QueryInterface above AddRef'd the Application object.  It will
      //  be Release'd in CCommand's destructor.
      m_pCommands->SetApplicationObject(pApplication);

      // (see stdafx.h for the definition of VERIFY_OK)

      VERIFY_OK(pApplication->SetAddInInfo((long) AfxGetInstanceHandle(),
            (LPDISPATCH) m_pCommands, IDR_TOOLBAR_MEDIUM, IDR_TOOLBAR_LARGE, m_dwCookie));

      // Inform DevStudio of the commands we implement

      // TODO: Replace the AddCommand call below with a series of calls,
      //  one for each command your add-in will add.

      // The command name should not be localized to other languages.  The 
      //  tooltip, command description, and other strings related to this
      //  command are stored in the string table (IDS_CMD_STRING) and should
      //  be localized.
      addCommand(pApplication,
            "runCCCCOnActiveFile","run CCCC on the active file", 
            0,bFirstTime);
      addCommand(pApplication,
            "runCCCCOnProjectFiles","run CCCC on all files in the active project",
            1,bFirstTime);
      addCommand(pApplication,
            "runCCCCOnWorkspaceFiles","run CCCC on all files in the active workspace", 
            2,bFirstTime);
      addCommand(pApplication,
            "configureCCCCDevStudioAddIn","configure the add-in", 
            3,bFirstTime);

      int i;
      for (i=0; i<6; i++)
      {
            char userCommandName[1024], userCommandTip[1024];
            sprintf(userCommandName,"UserCommand%d",i+1);
            sprintf(userCommandTip,"User defined command #%d",i+1);
            addCommand(pApplication,
                  userCommandName,userCommandTip,i+4,bFirstTime);
      }


      *OnConnection = VARIANT_TRUE;
      return S_OK;
}

// This is called on shut-down, and also when the user unloads the add-in
STDMETHODIMP CDSAddIn::OnDisconnection(VARIANT_BOOL bLastTime)
{
      AFX_MANAGE_STATE(AfxGetStaticModuleState());

      m_pCommands->Release();
      m_pCommands = NULL;

      // TODO: Perform any cleanup work here

      return S_OK;
}

void CDSAddIn::addCommand(IApplication* pApp, LPCSTR methodName, LPCSTR methodTip, long imageIndex, VARIANT_BOOL bFirstTime)
{
      VARIANT_BOOL bRet;

      // We can simplify on the MS boilerplate code
      // for this activity by deciding that the command name
      // and the method name will always be the same.
      CComBSTR bszMethodName(methodName);
      CComBSTR bszCmdName(methodName);

      // We still have to build up the command string
      CString strMethodName(methodName);
      CString strCmdString;
      strCmdString=
            strMethodName + "\n" + 
            strMethodName + "\n" +
            methodTip + "\n" + 
            methodTip
      ;
      CComBSTR bszCmdString(strCmdString);

      VERIFY_OK(pApp->AddCommand(bszCmdString, bszMethodName, imageIndex, m_dwCookie, &bRet));
      if (bRet == VARIANT_FALSE)
      {
            AfxMessageBox("Failed to load command");
            
      }
      else
      {
            // Add toolbar buttons only if this is the first time the add-in
            //  is being loaded.  Toolbar buttons are automatically remembered
            //  by Developer Studio from session to session, so we should only
            //  add the toolbar buttons once.
            if (bFirstTime == VARIANT_TRUE)
            {
                  VERIFY_OK(pApp->
                        AddCommandBarButton(dsGlyph, bszCmdName, m_dwCookie));
            }
      }
}

Generated by  Doxygen 1.6.0   Back to index