|
|
// This is a part of the Microsoft Management Console.
// Copyright (C) 1995-1996 Microsoft Corporation
// All rights reserved.
//
// This source code is only intended as a supplement to the
// Microsoft Management Console and related
// electronic documentation provided with the interfaces.
#include "precomp.hxx"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__; #endif
/////////////////////////////////////////////////////////////////////////////
// Event handlers for IFrame::Notify
HRESULT CSnapin::OnFolder(long cookie, long arg, long param) { ASSERT(FALSE);
return S_OK; }
HRESULT CSnapin::OnShow(long cookie, long arg, long param) { HRESULT hr = S_OK; // Note - arg is TRUE when it is time to enumerate
if (arg == TRUE) { // Show the headers for this nodetype
ASSERT(m_pComponentData != NULL); hr = m_pComponentData->InitializeClassAdmin(); if (SUCCEEDED(hr)) { m_pResult->SetViewMode(m_lViewMode); InitializeHeaders(cookie); InitializeBitmaps(cookie); Enumerate(cookie, param); }
// BUBBUG - Demonstration to should how you can attach
// and a toolbar when a particular nodes gets focus.
// warning this needs to be here as the toolbars are
// currently hidden when the previous node looses focus.
// This should be update to show the user how to hide
// and show toolbars. (Detach and Attach).
//m_pControlbar->Attach(TOOLBAR, (LPUNKNOWN) m_pToolbar1);
//m_pControlbar->Attach(TOOLBAR, (LPUNKNOWN) m_pToolbar2);
} else { m_pResult->GetViewMode(&m_lViewMode);
// BUGBUG - Demonstration this to show how to hide toolbars that
// could be particular to a single node.
// currently this is used to hide the toolbars the console
// does not do any toolbar clean up.
//m_pControlbar->Detach(m_pToolbar1);
//m_pControlbar->Detach(m_pToolbar2);
// Free data associated with the result pane items, because
// your node is no longer being displayed.
// Note: The console will remove the items from the result pane
}
return hr; }
HRESULT CSnapin::OnActivate(long cookie, long arg, long param) { return S_OK; }
HRESULT CSnapin::OnResultItemClkOrDblClk(long cookie, BOOL fDblClick) { return S_OK; }
HRESULT CSnapin::OnMinimize(long cookie, long arg, long param) { return S_OK; }
HRESULT CSnapin::OnSelect(DATA_OBJECT_TYPES type, long cookie, long arg, long param) { if (m_pConsoleVerb) { // Set the default verb to open
m_pConsoleVerb->SetDefaultVerb(MMC_VERB_OPEN);
// If this is one of our items, enable the properties verb.
if (type == CCT_RESULT) m_pConsoleVerb->SetVerbState(MMC_VERB_PROPERTIES, ENABLED, TRUE); }
return S_OK; }
HRESULT CSnapin::OnPropertyChange(long param) // param is the cookie of the item that changed
{ HRESULT hr = S_OK; m_pResult->Sort(0, 0, -1); // EnumerateResultPane(0);
return hr; }
HRESULT CSnapin::OnUpdateView(LPDATAOBJECT lpDataObject) { return S_OK; }
void CSnapin::Enumerate(long cookie, HSCOPEITEM pParent) { EnumerateResultPane(cookie); }
#define NUM_APPS 6
char * rgName[] = { "Application 1", "Application 2", "Word", "XL", "Access", "Notepad" };
char * rgPath[] = { "c:\\foo\\bar", "c:\\bar\\foo", "c:\\program files\\word", "c:\\program files\\excel", "c:\\program files\\access", "c:\\winnt\\notepad" };
long rgSize[] = { 1000, 2000, 23000, 34000, 12034, 100 };
char * rgDescription[] = { "Description of app 1", "Description of app 2", "Word stuff", "Excel stuff", "Database stuff", "yeah, right" };
LCID rgLcid[] = { 0, 0, 100, 32, 45, 123, 45 };
DEPLOYMENT_TYPE rgDT[] = { DT_PUBLISHED, DT_PUBLISHED, DT_ASSIGNED, DT_ASSIGNED, DT_PUBLISHED, DT_ASSIGNED };
void CSnapin::EnumerateResultPane(long cookie) { // put up an hourglass (this could take a while)
CHourglass hourglass;
ASSERT(m_pResult != NULL); // make sure we QI'ed for the interface
ASSERT(m_pComponentData != NULL); ASSERT(m_pComponentData->m_pIClassAdmin != NULL); RESULTDATAITEM resultItem; memset(&resultItem, 0, sizeof(RESULTDATAITEM));
// Right now we only have one folder and it only
// contains a list of application packages so this is really simple.
if (m_pComponentData->m_AppData.begin() == m_pComponentData->m_AppData.end()) // test to see if the data has been initialized
{ IClassAdmin * pICA = m_pComponentData->m_pIClassAdmin; m_pIClassAdmin = pICA; CSPLATFORM csPlatform; memset(&csPlatform, 0, sizeof(CSPLATFORM));
IEnumPackage * pIPE = NULL;
HRESULT hr = pICA->GetPackagesEnum( GUID_NULL, NULL, csPlatform, 0, 0, &pIPE); if (SUCCEEDED(hr)) { hr = pIPE->Reset(); while (SUCCEEDED(hr)) { ULONG nceltFetched; PACKAGEDETAIL * pd = new PACKAGEDETAIL;
hr = pIPE->Next(1, pd, &nceltFetched); if (nceltFetched) { APP_DATA data; data.szName = pd->pszPackageName; if (pd->dwActFlags & ACTFLG_Assigned) { data.type = DT_ASSIGNED; } else { data.type = DT_PUBLISHED; }
data.szPath = pd->pszPath; data.szIconPath = pd->pszIconPath; data.szDesc = pd->pszProductName; data.pDetails = pd; data.fBlockDeletion = FALSE; SetStringData(&data); m_pComponentData->m_AppData[++m_pComponentData->m_lLastAllocated] = data; } else { break; } } SAFE_RELEASE(pIPE); } } std::map<long, APP_DATA>::iterator i = m_pComponentData->m_AppData.begin(); while (i != m_pComponentData->m_AppData.end()) { resultItem.mask = RDI_STR | RDI_IMAGE | RDI_PARAM; resultItem.str = MMC_CALLBACK; resultItem.nImage = 1; resultItem.lParam = i->first; m_pResult->InsertItem(&resultItem); i->second.itemID = resultItem.itemID; i++; }
m_pResult->Sort(0, 0, -1); }
|