/***************************************************************************/
/* NOTE: */
/* This document is copyright (c) by Oz Solomonovich, and is bound by the */
/* MIT open source license (www.opensource.org/licenses/mit-license.html). */
/* See License.txt for more information. */
/***************************************************************************/
// DSAddIn.cpp : implementation file
//
#include "stdafx.h"
#include "LineCount.h"
#include "DSAddIn.h"
#include "Commands.h"
#include "Config.h"
#include "ExtrnSrc\AICLoader.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
int g_iVerMaj;
int g_iVerMin;
// 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());
// assume the worst
*OnConnection = VARIANT_FALSE;
m_pCommands = NULL;
GetConfiguration();
aiclUseDebugLibrary(FALSE);
aiclLoadAICLibrary(AfxGetInstanceHandle());
// Store info passed to us
IApplication* pApplication = NULL;
if (FAILED(pApp->QueryInterface(IID_IApplication, (void**) &pApplication))
|| pApplication == NULL)
{
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.
LPCTSTR szCommand = _T("LCConsole");
VARIANT_BOOL bRet;
CString strCmdString;
strCmdString.LoadString(IDS_CMD_STRING);
strCmdString = szCommand + strCmdString;
CComBSTR bszCmdString(strCmdString);
CComBSTR bszMethod(_T("LC_Console"));
CComBSTR bszCmdName(szCommand);
/*
VERIFY_OK(pApplication->AddCommand(bszCmdString, bszMethod, 0, m_dwCookie, &bRet));
if (bRet == VARIANT_FALSE)
{
// AddCommand failed because a command with this name already
// exists. You may try adding your command under a different name.
// Or, you can fail to load as we will do here.
return S_OK;
}
// 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(pApplication->
AddCommandBarButton(dsGlyph, bszCmdName, m_dwCookie));
}
*/
szCommand = _T("LCGo");
strCmdString.LoadString(IDS_CMD_STRING2);
strCmdString = szCommand + strCmdString;
bszCmdString = strCmdString;
bszMethod = _T("LC_Go");
bszCmdName = szCommand;
VERIFY_OK(pApplication->AddCommand(bszCmdString, bszMethod, 0, m_dwCookie, &bRet));
if (bFirstTime == VARIANT_TRUE)
{
VERIFY_OK(pApplication->
AddCommandBarButton(dsGlyph, bszCmdName, m_dwCookie));
}
// == Register With AddInComm ==
// LineCounter doens't export any commands, but registration broadcasts
// it's presence.
char buf[256], *p;
int verextra;
strcpy(buf, "Build ");
p = buf + strlen(buf);
// use loader facilities to read own version resource...
aiclGetModuleVersion("LineCount.dll", p);
// extract it numerically
sscanf(p, "%d.%d.%d", &g_iVerMaj, &g_iVerMin, &verextra);
// do actual registration
m_hAddin = AICRegisterAddIn("Line Counter", g_iVerMaj, g_iVerMin,
verextra);
AICSetAddInVersionString(m_hAddin, buf);
*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());
WriteConfiguration();
AICUnregisterAddIn(m_hAddin);
if (m_pCommands)
{
m_pCommands->Release();
m_pCommands = NULL;
}
return S_OK;
}