home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 5 Edit
/
05-Edit.zip
/
vile-src.zip
/
vile-8.1
/
visvile
/
dsaddin.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
1998-08-25
|
5KB
|
175 lines
// AddInMod.cpp : implementation file
//
#include "stdafx.h"
#include "VisVile.h"
#include "DSAddIn.h"
#include "Commands.h"
#include "oleauto.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)
{
HRESULT hr;
AFX_MANAGE_STATE(AfxGetStaticModuleState());
*OnConnection = VARIANT_FALSE;
hr = oleauto_init();
if (FAILED(hr))
return (hr);
// Store info passed to us
IApplication* pApplication = NULL;
hr = pApp->QueryInterface(IID_IApplication, (void**) &pApplication);
if (FAILED(hr))
return (ReportLastError(hr));
m_dwCookie = dwCookie;
// Create command dispatch, send info back to DevStudio
CCommandsObj::CreateInstance(&m_pCommands);
if (! m_pCommands)
{
::MessageBox(NULL,
"Unexpected OLE error: CCommandsObj::CreateInstance() failed.",
PROGNAM,
MB_OK|MB_ICONSTOP);
return (E_UNEXPECTED);
}
m_pCommands->AddRef();
// The QueryInterface above AddRef'd the Application object. It will
// be Release'd in CCommand's destructor.
if (! m_pCommands->SetApplicationObject(pApplication))
{
::MessageBox(NULL,
"Unexpected OLE error: CCommands::SetApplicationObject() failed.",
PROGNAM,
MB_OK|MB_ICONSTOP);
return (E_UNEXPECTED);
}
hr = pApplication->SetAddInInfo((long) AfxGetInstanceHandle(),
(LPDISPATCH) m_pCommands,
IDR_TOOLBAR_MEDIUM,
IDR_TOOLBAR_LARGE,
m_dwCookie);
if (FAILED(hr))
return (ReportLastError(hr));
// Inform DevStudio of the commands we implement
if (! AddCommand(pApplication,
"VisVileConfig",
"VisVileConfigCmd",
IDS_CMD_CONFIG,
0,
bFirstTime))
{
return (E_UNEXPECTED);
}
if (! AddCommand(pApplication,
"VisVileEnable",
"VisVileEnableCmd",
IDS_CMD_ENABLE,
1,
bFirstTime))
{
return (E_UNEXPECTED);
}
if (! AddCommand(pApplication,
"VisVileDisable",
"VisVileDisableCmd",
IDS_CMD_DISABLE,
2,
bFirstTime))
{
return (E_UNEXPECTED);
}
if (! AddCommand(pApplication,
"VisVileOpenDoc",
"VisVileOpenDocCmd",
IDS_CMD_LOAD,
3,
bFirstTime))
{
return (E_UNEXPECTED);
}
*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->UnadviseFromEvents();
m_pCommands->Release();
m_pCommands = NULL;
oleauto_exit();
return (S_OK);
}
// Add a command to DevStudio
// Creates a toolbar button for the command also.
// 'MethodName' is the name of the methode specified in the .odl file
// 'StrResId' the resource id of the descriptive string
// 'GlyphIndex' the image index into the command buttons bitmap
// Return true on success
//
bool CDSAddIn::AddCommand(IApplication *pApp,
char *MethodName,
char *CmdName,
UINT StrResId,
UINT GlyphIndex,
VARIANT_BOOL bFirstTime)
{
VARIANT_BOOL bRet;
CString CmdString, CmdText;
CmdText.LoadString (StrResId);
CmdString = CmdName;
CmdString += CmdText;
CComBSTR bszCmdString (CmdString);
CComBSTR bszMethod (MethodName);
CComBSTR bszCmdName (CmdName);
pApp->AddCommand(bszCmdString, bszMethod, GlyphIndex, m_dwCookie, &bRet);
if (bRet == VARIANT_FALSE)
{
CString tmp;
tmp = "Duplicate command installation rejected\r\rDuplicate name: ";
tmp += MethodName;
::MessageBox(NULL,
tmp,
PROGNAM,
MB_OK|MB_ICONSTOP);
}
// 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)
{
HRESULT hr;
hr = pApp->AddCommandBarButton(dsGlyph, bszCmdName, m_dwCookie);
if (FAILED(hr))
{
(void) ReportLastError(hr);
bRet = VARIANT_FALSE;
}
}
return ((bRet == VARIANT_TRUE) ? TRUE : FALSE);
}