|
|
//+-------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1994 - 1999
//
// File: Renamesnap.cxx
//
// Contents: Classes that implement Rename snapin using the framework.
//
//--------------------------------------------------------------------
#include "stdafx.hxx"
//+-------------------------------------------------------------------
//
// Member: CRenameRootItem::ScInit
//
// Synopsis: Called immeadiately after the item is created to init
// displayname, icon index etc...
//
// Arguments: [CBaseSnapin] -
// [CColumnInfoEx] - Any columns to be displayed for this item.
// [INT] - # of columns
//
// Returns: SC
//
//--------------------------------------------------------------------
SC CRenameRootItem::ScInit(CBaseSnapin *pSnapin, CColumnInfoEx *pcolinfoex, INT ccolinfoex, BOOL fIsRoot) { DECLARE_SC(sc, _T("CRenameRootItem::ScInit"));
sc = CBaseSnapinItem::ScInit(pSnapin, pcolinfoex, ccolinfoex, fIsRoot); if (sc) return sc;
// Init following
// a. Icon index.
// b. Load display name.
m_uIconIndex = 3; // use an enum instead of 3
m_strDisplayName.LoadString(_Module.GetResourceInstance(), IDS_RenameROOT);
return sc; }
//+-------------------------------------------------------------------
//
// Member: CRenameRootItem::ScGetField
//
// Synopsis: Get the string representation for given field to display
// it in result pane.
//
// Arguments: [DAT] - The column requested (this is an enumeration).
// [tstring] - Out string.
//
// Returns: SC
//
//--------------------------------------------------------------------
SC CRenameRootItem::ScGetField (DAT dat, tstring& strField) { DECLARE_SC(sc, _T("CRenameRootItem::ScGetField"));
switch(dat) { case datString1: strField = _T("Root String1"); break;
case datString2: strField = _T("Root String2"); break;
case datString3: strField = _T("Root String3"); break;
default: E_INVALIDARG; break; }
return (sc); }
//+-------------------------------------------------------------------
//
// Member: CRenameRootItem::ScCreateChildren
//
// Synopsis: Create any children (nodes & leaf items) for this item.
//
// Arguments: None
//
// Returns: SC
//
//--------------------------------------------------------------------
SC CRenameRootItem::ScCreateChildren () { DECLARE_SC(sc, _T("CRenameRootItem::ScCreateChildren"));
t_itemChild * pitemChild = NULL; t_itemChild * pitemPrevious = NULL;
// Let us create 10 items for this container.
for (int i = 0; i < 10; ++i) { // Create the child nodes and init them.
sc = CRenameSnapinLVLeafItem::ScCreateLVLeafItem(this, pitemPrevious, &pitemChild, FALSE); // Why FALSE???
if (sc) return sc; pitemPrevious = pitemChild; }
return (sc); }
/*+-------------------------------------------------------------------------*
* * CRenameRootItem::ScOnRename * * PURPOSE: Renames the item * * PARAMETERS: * const tstring : * * RETURNS: * SC * *+-------------------------------------------------------------------------*/ SC CRenameRootItem::ScOnRename(const tstring& strNewName) { DECLARE_SC(sc, TEXT("CRenameRootItem::ScOnRename"));
m_strDisplayName = strNewName;
return sc; }
//+-------------------------------------------------------------------
//
// Member: CRenameSnapinLVLeafItem::ScInit
//
// Synopsis: Called immeadiately after the item is created to init
// displayname, icon index etc...
//
// Arguments: [CBaseSnapin] -
// [CColumnInfoEx] - Any columns to be displayed for this item.
// [INT] - # of columns
//
// Returns: SC
//
//--------------------------------------------------------------------
SC CRenameSnapinLVLeafItem::ScInit(CBaseSnapin *pSnapin, CColumnInfoEx *pcolinfoex, INT ccolinfoex, BOOL fIsRoot) { DECLARE_SC(sc, _T("CRenameSnapinLVLeafItem::ScInit"));
sc = CBaseSnapinItem::ScInit(pSnapin, pcolinfoex, ccolinfoex, fIsRoot); if (sc) return sc;
// Init following
// a. Icon index.
// b. Load display name.
m_uIconIndex = 7; // use an enum instead of 7
m_strDisplayName.LoadString(_Module.GetResourceInstance(), IDS_LVLeafItem);
return sc; }
//+-------------------------------------------------------------------
//
// Member: CRenameSnapinLVLeafItem::ScGetField
//
// Synopsis: Get the string representation for given field to display
// it in result pane.
//
// Arguments: [DAT] - The column requested (this is an enumeration).
// [tstring] - Out string.
//
// Returns: SC
//
//--------------------------------------------------------------------
SC CRenameSnapinLVLeafItem::ScGetField (DAT dat, tstring& strField) { DECLARE_SC(sc, _T("CRenameSnapinLVLeafItem::ScGetField"));
switch(dat) { case datString1: strField = _T("LVLeaf String1"); break;
case datString2: strField = _T("LVLeaf String2"); break;
case datString3: strField = _T("LVLeaf String3"); break;
default: E_INVALIDARG; break; }
return (sc); }
//+-------------------------------------------------------------------
//
// Member: CRenameSnapinLVLeafItem::ScCreateLVLeafItem
//
// Synopsis: Do we really need this method?
//
// Arguments:
//
// Returns: SC
//
//--------------------------------------------------------------------
SC CRenameSnapinLVLeafItem::ScCreateLVLeafItem(CRenameRootItem *pitemParent, t_itemChild * pitemPrevious, t_itemChild ** ppitem, BOOL fNew) { DECLARE_SC(sc, _T("CRenameSnapinLVLeafItem::ScCreateLVLeafItem")); t_itemChild * pitem = NULL; *ppitem = NULL;
// What to do here?
sc = ::ScCreateItem(pitemParent, pitemPrevious, &pitem, fNew); if (sc) return sc;
*ppitem = pitem;
return (sc); }
// Initialize context menu structures. Let us have one item for demonstration.
SnapinMenuItem CRenameSnapinLVLeafItem::s_rgmenuitemLVLeafItem[] = { {IDS_NewLVItem, IDS_NewLVItem, IDS_NewLVItem, CCM_INSERTIONPOINTID_PRIMARY_TOP, NULL, dwMenuAlwaysEnable, dwMenuNeverGray, dwMenuNeverChecked}, {IDS_RenameScopeItem, IDS_RenameScopeItem, IDS_RenameScopeItem, CCM_INSERTIONPOINTID_PRIMARY_TOP, NULL, dwMenuAlwaysEnable, dwMenuNeverGray, dwMenuNeverChecked}, {IDS_RenameResultItem, IDS_RenameResultItem, IDS_RenameResultItem, CCM_INSERTIONPOINTID_PRIMARY_TOP, NULL, dwMenuAlwaysEnable, dwMenuNeverGray, dwMenuNeverChecked}, };
INT CRenameSnapinLVLeafItem::s_cmenuitemLVLeafItem = CMENUITEM(s_rgmenuitemLVLeafItem);
// -----------------------------------------------------------------------------
SnapinMenuItem *CRenameSnapinLVLeafItem::Pmenuitem(void) { return s_rgmenuitemLVLeafItem; }
// -----------------------------------------------------------------------------
INT CRenameSnapinLVLeafItem::CMenuItem(void) { return s_cmenuitemLVLeafItem; }
//+-------------------------------------------------------------------
//
// Member: CRenameSnapinLVLeafItem::ScCommand
//
// Synopsis:
//
// Arguments:
//
// Returns: SC
//
//--------------------------------------------------------------------
SC CRenameSnapinLVLeafItem::ScCommand (long nCommandID, CComponent *pComponent) { DECLARE_SC(sc, _T("CRenameSnapinLVLeafItem::ScCommand"));
switch(nCommandID) { case IDS_NewLVItem: sc = ScInsertResultItem(pComponent); break;
case IDS_RenameScopeItem: sc = ScRenameScopeItem(); break;
case IDS_RenameResultItem: sc = ScRenameResultItem(); break;
default: sc = E_INVALIDARG; break; }
return (sc); }
/*+-------------------------------------------------------------------------*
* * CRenameSnapinLVLeafItem::ScRenameScopeItem * * PURPOSE: Puts the parent scope item into rename mode. * * RETURNS: * SC * *+-------------------------------------------------------------------------*/ SC CRenameSnapinLVLeafItem::ScRenameScopeItem() { DECLARE_SC(sc, _T("CRenameSnapinLVLeafItem::ScRenameScopeItem"));
IConsole3Ptr spConsole3 = IpConsole(); // get a pointer to the IConsole3 interface
sc = ScCheckPointers(spConsole3, PitemParent(), E_FAIL); if(sc) return sc;
sc = spConsole3->RenameScopeItem(PitemParent()->Hscopeitem());
return sc; }
/*+-------------------------------------------------------------------------*
* * CRenameSnapinLVLeafItem::ScInsertResultItem * * PURPOSE: Overrides the base class method because we need to cache the * IResultData2 and HRESULTITEM * * PARAMETERS: * CComponent * pComponent : * * RETURNS: * SC * *+-------------------------------------------------------------------------*/ SC CRenameSnapinLVLeafItem::ScInsertResultItem(CComponent *pComponent) { DECLARE_SC(sc, _T("CRenameSnapinLVLeafItem::ScInsertResultItem"));
RESULTDATAITEM resultdataitem;
ASSERT(pComponent && pComponent->IpResultData());
// Add this item
ZeroMemory(&resultdataitem, sizeof(resultdataitem));
resultdataitem.lParam = Cookie(); resultdataitem.mask = RDI_STR | RDI_PARAM | RDI_IMAGE; // Callback for the display name.
resultdataitem.str = MMC_CALLBACK; // Custom icon
resultdataitem.nImage = (int) MMC_CALLBACK;
sc = pComponent->IpResultData()->InsertItem(&resultdataitem); if (sc) return sc;
// cache this item - NOTE: breaks for multiple views
m_hresultItem = resultdataitem.itemID; m_spResultData2 = pComponent->IpResultData();
return sc; }
/*+-------------------------------------------------------------------------*
* * CRenameSnapinLVLeafItem::ScRenameResultItem * * PURPOSE: Renames the list item * * RETURNS: * SC * *+-------------------------------------------------------------------------*/ SC CRenameSnapinLVLeafItem::ScRenameResultItem() { DECLARE_SC(sc, _T("CRenameSnapinLVLeafItem::ScRenameResultItem"));
sc = ScCheckPointers(m_spResultData2, PitemParent(), E_FAIL); if(sc) return sc;
if(m_hresultItem==NULL) return (sc = E_FAIL);
sc = m_spResultData2->RenameResultItem(m_hresultItem);
return sc; }
//-------------------------------------------------------------------------------------
// class CRenameSnapin
#pragma BEGIN_CODESPACE_DATA
SNR CRenameSnapin::s_rgsnr[] = { SNR(&nodetypeRenameRoot, snrEnumSP ), // Standalone snapin.
SNR(&nodetypeRenameLVLeafItem, snrEnumSP | snrEnumRP ), // enumerates this node in the scope pane and result pane.
};
LONG CRenameSnapin::s_rgiconid[] = {3}; LONG CRenameSnapin::s_iconidStatic = 2;
CColumnInfoEx CRenameSnapin::s_colinfo[] = { CColumnInfoEx(_T("Column Name0"), LVCFMT_LEFT, 180, datString1), CColumnInfoEx(_T("Column Name1"), LVCFMT_LEFT, 180, datString2), CColumnInfoEx(_T("Column Name2"), LVCFMT_LEFT, 180, datString3), };
INT CRenameSnapin::s_ccolinfo = sizeof(s_colinfo) / sizeof(CColumnInfoEx); INT CRenameSnapin::s_colwidths[1]; #pragma END_CODESPACE_DATA
// include members needed for every snapin.
SNAPIN_DEFINE(CRenameSnapin);
/* CRenameSnapin::CRenameSnapin
* * PURPOSE: Constructor * * PARAMETERS: None * */ CRenameSnapin::CRenameSnapin() { m_pstrDisplayName = new tstring();
*m_pstrDisplayName = _T("Rename Snapin Root"); }
/* CRenameSnapin::~CRenameSnapin
* * PURPOSE: Destructor * * PARAMETERS: None * */ CRenameSnapin::~CRenameSnapin() { delete m_pstrDisplayName; }
|