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

330 lines
9.7 KiB
C++

// Copyright (c) 1997-2001 Microsoft Corporation, All Rights Reserved
//***************************************************************************
//
// (c) 1996, 1997 by Microsoft Corporation
//
// hmmvctl.h
//
// This file contains the implementation of the main view container as well
// as the generic view.
//
//
// a-larryf 17-Sept-96 Created.
//
//***************************************************************************
#ifndef _HmmvCtl_h
#define _HmmvCtl_h
/////////////////////////////////////////////////////////////////////////////
// CWBEMViewContainerCtrl : See HmmvCtl.cpp for implementation.
#include <afxcmn.h>
#include <afxwin.h>
#include "notify.h"
#include "utils.h"
class CTitleBar;
class CIcon;
class CWBEMViewContainerCtrl;
class CViewStack;
class CIconSource;
class CMultiView;
class CSingleView;
class CPolyView;
class CDlgHelpBox;
#define CX_ICON 32
#define CY_ICON 32
#define CX_SMALL_ICON 16
#define CY_SMALL_ICON 16
#define CY_FONT 15
class CHmmvTab;
#define PROPFILTER_SYSTEM 1
#define PROPFILTER_INHERITED 2
#define PROPFILTER_LOCAL 4
class CContainerContext
{
public:
BOOL m_bIsShowingMultiView;
BOOL m_bObjectIsNewlyCreated;
BOOL m_bEmptyContainer;
HWND m_hwndFocus;
};
class CGenericViewContext
{
public:
CGenericViewContext(CSingleView* psv) {m_lContextHandle = NULL; }
~CGenericViewContext();
long m_lContextHandle;
private:
CSingleView* m_psv;
};
enum IconSize;
class CWBEMViewContainerCtrl : public COleControl
{
DECLARE_DYNCREATE(CWBEMViewContainerCtrl)
// Constructor
public:
CWBEMViewContainerCtrl();
// void TestShowInstances();
CWnd* ReestablishFocus();
///////////////////////////////////////////////////////////
// These methods implement polymorphism for the views.
//
void RequestUIActive();
virtual DWORD GetActivationPolicy( );
virtual DWORD GetControlFlags( );
void SelectView(long lPosition);
CPolyView* GetView() {return m_pview; }
void Notify(LONG lEvent);
// void SetPropertyFilters(long lPropFilters);
// long GetPropertyFilters() {return m_lPropFilters; }
long PublicSaveState(BOOL bPromptUser, UINT nType);
// virtual BOOL PreTranslateMessage(MSG* pMsg);
void NotifyDataChange();
LPTSTR MessageBuffer() {return m_szMessageBuffer; }
void Clear(BOOL bRedrawWindow=TRUE);
SCODE JumpToObjectPathFromMultiview(LPCTSTR szObjectPath, BOOL bSetMultiviewClass, BOOL bAddToHistory=TRUE);
SCODE JumpToObjectPath(BSTR bstrObjectPath, BOOL bSetMultiviewClass, BOOL bAddToHistory=TRUE);
BOOL InStudioMode() {return m_bInStudioMode; }
SCODE NotifyInstanceDeleted(COleVariant& varObjectPath) { return S_OK; }
void NotifyContainerOfSelectionChange();
BOOL CustomViewIsRegistered(CLSID& clsid, DWORD dwVersionMS, DWORD dwVersionLS);
void PassThroughChangeRootOrNamespace(LPCTSTR szRootOrNamespace, long bChangeNamespace, long bEchoSelectObject) {FireNOTIFYChangeRootOrNamespace(szRootOrNamespace, bChangeNamespace, bEchoSelectObject); }
void PassThroughGetIHmmServices(LPCTSTR lpctstrNamespace, VARIANT FAR* pvarUpdatePointer, VARIANT FAR* pvarServices, VARIANT FAR* pvarSC, VARIANT FAR* pvarUserCancel);
CFont& GetFont() {return m_font; }
void MultiViewButtonClicked();
void InvalidateControlRect(CRect* prc);
BOOL ShowMultiView(BOOL bShowMultiView, BOOL bAddToHistory);
BOOL ShowSingleView(BOOL bShowSingleView, BOOL bAddToHistory) {return ShowMultiView(!bShowSingleView, bAddToHistory); }
BOOL m_bPathIsClass;
void CreateInstance();
void DeleteInstance();
void GetWbemServices(LPCTSTR szNamespace, VARIANT FAR* pvarUpdatePointer, VARIANT FAR* pvarServices, VARIANT FAR* pvarSc, VARIANT FAR* pvarUserCancel);
// Context stack api.
void PushView();
void UpdateViewContext();
SCODE ContextForward();
SCODE ContextBack();
BOOL QueryCanContextForward();
BOOL QueryCanContextBack();
void UpdateCreateDeleteButtonState();
void GetContainerContext(CContainerContext& ctx);
SCODE SetContainerContextPrologue(CContainerContext& ctx);
SCODE SetContainerContextEpilogue(CContainerContext& ctx);
void ClearGenericView() {Clear(); }
BOOL ObjectIsNewlyCreated(SCODE& sc);
void PublicShowInstances(LPCTSTR pszTitle, const VARIANT FAR& varPathArray){ShowInstances(pszTitle, varPathArray); }
void UpdateToolbar();
void OnDrawPreCreate(CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid);
void InvokeHelp();
void Query();
BOOL IsEmptyContainer(){return m_bEmptyContainer; }
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CWBEMViewContainerCtrl)
public:
virtual void OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid);
virtual void DoPropExchange(CPropExchange* pPX);
virtual void OnResetState();
virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);
virtual BOOL PreTranslateMessage(MSG* pMsg);
protected:
virtual void DoDataExchange(CDataExchange* pDX);
virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
//}}AFX_VIRTUAL
// Implementation
protected:
// afx_msg void OnContextMenu(CWnd*, CPoint point);
BOOL m_bCreationFinished;
~CWBEMViewContainerCtrl();
DECLARE_OLECREATE_EX(CWBEMViewContainerCtrl) // Class factory and guid
DECLARE_OLETYPELIB(CWBEMViewContainerCtrl) // GetTypeInfo
DECLARE_PROPPAGEIDS(CWBEMViewContainerCtrl) // Property page IDs
DECLARE_OLECTLTYPE(CWBEMViewContainerCtrl) // Type name and misc status
// Message maps
//{{AFX_MSG(CWBEMViewContainerCtrl)
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnDestroy();
afx_msg void OnCmdShowObjectAttributes();
afx_msg void OnSetFocus(CWnd* pOldWnd);
afx_msg void OnKillFocus(CWnd* pNewWnd);
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
public:
// Dispatch maps
//{{AFX_DISPATCH(CWBEMViewContainerCtrl)
long m_sc;
afx_msg void OnStatusCodeChanged();
afx_msg VARIANT GetObjectPath();
afx_msg void SetObjectPath(const VARIANT FAR& newValue);
afx_msg BSTR GetNameSpace();
afx_msg void SetNameSpace(LPCTSTR lpszNewValue);
afx_msg long GetStudioModeEnabled();
afx_msg void SetStudioModeEnabled(long nNewValue);
afx_msg long GetPropertyFilter();
afx_msg void SetPropertyFilter(long nNewValue);
afx_msg void ShowInstances(LPCTSTR szTitle, const VARIANT FAR& varPathArray);
afx_msg long SaveState(long bPromptUser, long bUserCanCancel);
afx_msg void QueryViewInstances(LPCTSTR pLabel, LPCTSTR pQueryType, LPCTSTR pQuery, LPCTSTR pClass);
//}}AFX_DISPATCH
DECLARE_DISPATCH_MAP()
protected:
// Event maps
//{{AFX_EVENT(CWBEMViewContainerCtrl)
void FireGetIWbemServices(LPCTSTR szNamespace, VARIANT FAR* pvarUpdatePointer, VARIANT FAR* pvarServices, VARIANT FAR* pvarSc, VARIANT FAR* pvarUserCancel)
{FireEvent(eventidGetIWbemServices,EVENT_PARAM(VTS_BSTR VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT), szNamespace, pvarUpdatePointer, pvarServices, pvarSc, pvarUserCancel);}
void FireNOTIFYChangeRootOrNamespace(LPCTSTR szRootOrNamespace, long bChangeNamespace, long bEchoSelectObject)
{FireEvent(eventidNOTIFYChangeRootOrNamespace,EVENT_PARAM(VTS_BSTR VTS_I4 VTS_I4), szRootOrNamespace, bChangeNamespace, bEchoSelectObject);}
void FireRequestUIActive()
{FireEvent(eventidRequestUIActive,EVENT_PARAM(VTS_NONE));}
//}}AFX_EVENT
DECLARE_EVENT_MAP()
// Dispatch and event IDs
public:
enum {
//{{AFX_DISP_ID(CWBEMViewContainerCtrl)
dispidObjectPath = 2L,
dispidStatusCode = 1L,
dispidNameSpace = 3L,
dispidStudioModeEnabled = 4L,
dispidPropertyFilter = 5L,
dispidShowInstances = 6L,
dispidSaveState = 7L,
dispidQueryViewInstances = 8L,
eventidGetIWbemServices = 1L,
eventidNOTIFYChangeRootOrNamespace = 2L,
eventidRequestUIActive = 3L,
//}}AFX_DISP_ID
};
public:
void DrawBackground(CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid);
void CalcViewRect(CRect& rcView);
void CalcTitleRect(CRect& rcTitle);
BOOL IsInSchemaStudioMode() {return TRUE; }
// void GetObjectByPath(IHmmServices * pProv);
COleVariant m_varObjectPath;
SCODE m_scResult;
CString m_sTitle;
CFont m_font;
BOOL m_bDidInitialDraw;
CTitleBar* m_pTitleBar;
// Generic view
// void UseClonedObject(IHmmClassObject* pcoClone);
int m_cxViewLeftMargin;
int m_cxViewRightMargin;
int m_cyViewTopMargin;
int m_cyViewBottomMargin;
private:
void GetHmomWorkingDirectory();
inline BOOL IsValidWindowPtr(CWnd* pwnd);
HINSTANCE m_htmlHelpInst;
void OnHelp();
SCODE GetCurrentClass(COleVariant& varClassName);
// Common message buffer scratch area for user messages
TCHAR m_szMessageBuffer[1024];
CString m_sNameSpace;
CViewStack* m_pViewStack;
CString m_sNewInstClassPath;
BOOL m_bObjectIsNewlyCreated;
BOOL m_bInStudioMode;
CDlgHelpBox* m_pdlgHelpBox;
friend class CViewStack;
CPolyView* m_pview;
BOOL m_bFiredReadyStateChange;
BOOL m_bUIActive;
long m_lPropFilters;
BOOL m_bSingleViewNeedsRefresh;
BOOL m_bEmptyContainer;
BOOL m_bDelayToolbarUpdate;
BOOL m_bDeadObject;
};
//***********************************************************
// CWBEMViewContainerCtrl::IsValidWindowPtr
//
// Check to see if the window pointer is valid (not NULL and
// has a valid m_hWnd).
//
// Parameters:
// CWnd* pwnd
//
// Returns:
// TRUE if the window pointer is valid, FALSE otherwise.
//
//**********************************************************
BOOL CWBEMViewContainerCtrl::IsValidWindowPtr(CWnd* pwnd)
{
if (pwnd!=NULL && pwnd->m_hWnd!=NULL) {
return TRUE;
}
else {
return FALSE;
}
}
#endif //_HmmvCtl_h