2025-04-27 07:49:33 -04:00

185 lines
4.8 KiB
C++

// Copyright (c) 1997-2001 Microsoft Corporation, All Rights Reserved
#include "precomp.h"
//#include <hmmsvc.h>
#include "hmmvctl.h"
#include "sv.h"
#include "polyview.h"
#include "mv.h"
#include "hmomutil.h"
BEGIN_EVENTSINK_MAP(CSingleView, CSingleViewBase)
//{{AFX_EVENTSINK_MAP(CSingleView)
ON_EVENT_REFLECT(CSingleView, 1 /* NotifyViewModified */, OnNotifyViewModified, VTS_NONE)
ON_EVENT_REFLECT(CSingleView, 2 /* NotifySaveRequired */, OnNotifySaveRequired, VTS_NONE)
ON_EVENT_REFLECT(CSingleView, 3 /* JumpToMultipleInstanceView */, OnJumpToMultipleInstanceView, VTS_BSTR VTS_VARIANT)
ON_EVENT_REFLECT(CSingleView, 4 /* NotifySelectionChanged */, OnNotifySelectionChanged, VTS_NONE)
ON_EVENT_REFLECT(CSingleView, 5 /* NotifyContextChanged */, OnNotifyContextChanged, VTS_I4)
ON_EVENT_REFLECT(CSingleView, 6 /* GetWbemServices */, OnGetWbemServices, VTS_BSTR VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT)
ON_EVENT_REFLECT(CSingleView, 7 /* NOTIFYChangeRootOrNamespace */, OnNOTIFYChangeRootOrNamespace, VTS_BSTR VTS_I4 VTS_I4)
ON_EVENT_REFLECT(CSingleView, 8 /* NotifyInstanceCreated */, OnNotifyInstanceCreated, VTS_BSTR)
ON_EVENT_REFLECT(CSingleView, -609 /* ReadyStateChange */, OnReadyStateChange, VTS_NONE)
ON_EVENT_REFLECT(CSingleView, 9 /* RequestUIActive */, OnRequestUIActive, VTS_NONE)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
CSingleView::CSingleView(CWBEMViewContainerCtrl* phmmv)
{
m_phmmv = phmmv;
}
BOOL CSingleView::IsShowingInstance()
{
CString sPath;
SCODE sc = GetCurrentObjectPath(sPath);
if (FAILED(sc)) {
return FALSE;
}
BOOL bPathIsClass = ::PathIsClass(sPath);
return !bPathIsClass;
}
SCODE CSingleView::GetCurrentObjectPath(CString& sPath)
{
long lPos = StartObjectEnumeration(OBJECT_CURRENT);
if (lPos >= 0) {
sPath = GetObjectPath(lPos);
return S_OK;
}
return E_FAIL;
}
SCODE CSingleView::GetClassPath(CString& sPath)
{
sPath.Empty();
CString sInstPath;
SCODE sc = GetCurrentObjectPath(sInstPath);
if (FAILED(sc)) {
return sc;
}
sc = ::InstPathToClassPath(sPath, sInstPath);
if (FAILED(sc)) {
sPath.Empty();
}
return S_OK;
}
//*********************************************************
// CSingleView::OnNotifyViewModified
//
// This event is fired when a change that requires the
// entire titlebar to be updated. For example, the
// create/delete buttons might be enabled after this
// event and so on.
//
// Parameters:
// None.
//
// Returns:
// Nothing.
//
//********************************************************
void CSingleView::OnNotifyViewModified()
{
m_phmmv->UpdateToolbar();
}
void CSingleView::OnNotifySaveRequired()
{
m_phmmv->NotifyDataChange();
}
void CSingleView::OnJumpToMultipleInstanceView(LPCTSTR szTitle, const VARIANT FAR& varPathArray)
{
// !!!CR: Eventually it will be possible for custom views to select the
// !!!CR: multiple instance view using this event. For now we do nothing.
ASSERT(FALSE);
}
void CSingleView::OnNotifyContextChanged(long bPushContext)
{
if (bPushContext) {
m_phmmv->PushView();
}
else {
m_phmmv->UpdateViewContext();
}
}
void CSingleView::OnNotifySelectionChanged()
{
// One possible design change is to make the multiple instance view show the
// instances of the currently selected class. Cori wanted this disabled so
// that we continue to show instances of the class selected in the tree.
long lPos = StartObjectEnumeration(OBJECT_CURRENT);
if (lPos != -1) {
CMultiView* pmv = m_phmmv->GetView()->GetMultiView();
CString sPath = GetObjectPath(lPos);
if (::PathIsClass(sPath)) {
pmv->ViewClassInstances(sPath);
}
else {
CString sClassPath;
InstPathToClassPath(sClassPath, sPath);
pmv->ViewClassInstances(sClassPath);
}
}
}
void CSingleView::OnGetWbemServices(LPCTSTR szNamespace, VARIANT FAR* pvarUpdatePointer, VARIANT FAR* pvarServices, VARIANT FAR* pvarSc, VARIANT FAR* pvarUserCancel)
{
m_phmmv->PassThroughGetIHmmServices
(szNamespace, pvarUpdatePointer, pvarServices, pvarSc, pvarUserCancel);
}
void CSingleView::OnNOTIFYChangeRootOrNamespace(LPCTSTR szRootOrNamespace, long bChangeNamespace, long bEchoSelectObject)
{
m_phmmv->PassThroughChangeRootOrNamespace(szRootOrNamespace, bChangeNamespace, bEchoSelectObject);
}
void CSingleView::OnNotifyInstanceCreated(LPCTSTR szObjectPath)
{
CPolyView* pview = m_phmmv->GetView();
CMultiView* pmv = pview->GetMultiView();
if (pmv == NULL) {
return;
}
pmv->ExternInstanceCreated(szObjectPath);
m_phmmv->UpdateViewContext();
}
void CSingleView::OnReadyStateChange()
{
// TODO: Add your control notification handler code here
}
void CSingleView::OnRequestUIActive()
{
// TODO: Add your control notification handler code here
m_phmmv->RequestUIActive();
}