mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
291 lines
6.8 KiB
291 lines
6.8 KiB
/*++
|
|
|
|
Copyright (C) 1997-2001 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
Abstract:
|
|
|
|
History:
|
|
|
|
--*/
|
|
|
|
// PropsPg.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "wmitest.h"
|
|
#include "OpWrap.h"
|
|
#include "PropsPg.h"
|
|
#include "WMITestDoc.h"
|
|
#include "ObjVw.h"
|
|
#include "OpView.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CPropsPg property page
|
|
|
|
IMPLEMENT_DYNCREATE(CPropsPg, CPropertyPage)
|
|
|
|
CPropsPg::CPropsPg() :
|
|
CPropertyPage(CPropsPg::IDD),
|
|
m_pObj(NULL),
|
|
//m_bShowSystemProperties(theApp.m_bShowSystemProperties),
|
|
//m_bShowInheritedProperties(theApp.m_bShowInheritedProperties),
|
|
m_bTranslateValues(theApp.m_bTranslateValues)
|
|
{
|
|
//{{AFX_DATA_INIT(CPropsPg)
|
|
// NOTE: the ClassWizard will add member initialization here
|
|
//}}AFX_DATA_INIT
|
|
|
|
m_bShowSystemProperties =
|
|
theApp.GetProfileInt(_T("Settings"), _T("ShowSysOnDlg"), TRUE);
|
|
|
|
m_bShowInheritedProperties =
|
|
theApp.GetProfileInt(_T("Settings"), _T("ShowInheritedOnDlg"), TRUE);
|
|
}
|
|
|
|
CPropsPg::~CPropsPg()
|
|
{
|
|
theApp.WriteProfileInt(_T("Settings"), _T("ShowSysOnDlg"),
|
|
m_bShowSystemProperties);
|
|
|
|
theApp.WriteProfileInt(_T("Settings"), _T("ShowInheritedOnDlg"),
|
|
m_bShowInheritedProperties);
|
|
}
|
|
|
|
void CPropsPg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CPropertyPage::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CPropsPg)
|
|
DDX_Control(pDX, IDC_PROPS, m_ctlProps);
|
|
//}}AFX_DATA_MAP
|
|
|
|
}
|
|
|
|
void CPropsPg::InitListCtrl()
|
|
{
|
|
RECT rect;
|
|
CString strTemp;
|
|
|
|
m_ctlProps.SetExtendedStyle(LVS_EX_FULLROWSELECT);
|
|
|
|
m_ctlProps.SetImageList(&((CMainFrame *) AfxGetMainWnd())->m_imageList,
|
|
LVSIL_SMALL);
|
|
m_ctlProps.GetClientRect(&rect);
|
|
|
|
strTemp.LoadString(IDS_NAME);
|
|
m_ctlProps.InsertColumn(0, strTemp, LVCFMT_LEFT, rect.right * 25 / 100);
|
|
|
|
strTemp.LoadString(IDS_TYPE);
|
|
m_ctlProps.InsertColumn(1, strTemp, LVCFMT_LEFT, rect.right * 25 / 100);
|
|
|
|
strTemp.LoadString(IDS_VALUE);
|
|
m_ctlProps.InsertColumn(2, strTemp, LVCFMT_LEFT, rect.right * 50 / 100);
|
|
}
|
|
|
|
void CPropsPg::LoadProps()
|
|
{
|
|
int nItems = m_pObj->GetProps()->GetSize(),
|
|
iItem = 0;
|
|
CPropInfo *pProps = m_pObj->GetProps()->GetData();
|
|
|
|
m_ctlProps.DeleteAllItems();
|
|
|
|
for (int i = 0; i < nItems; i++)
|
|
{
|
|
CString strType,
|
|
strValue;
|
|
int iImage,
|
|
iFlavor;
|
|
|
|
m_pObj->GetPropInfo(i, strValue, strType, &iImage, &iFlavor,
|
|
m_bTranslateValues);
|
|
|
|
|
|
if ((m_bShowSystemProperties || iFlavor != WBEM_FLAVOR_ORIGIN_SYSTEM) &&
|
|
(m_bShowInheritedProperties ||
|
|
iFlavor != WBEM_FLAVOR_ORIGIN_PROPAGATED))
|
|
{
|
|
m_ctlProps.InsertItem(iItem, pProps[i].m_strName, iImage);
|
|
m_ctlProps.SetItemData(iItem, i);
|
|
m_ctlProps.SetItemText(iItem, 1, strType);
|
|
m_ctlProps.SetItemText(iItem, 2, strValue);
|
|
|
|
iItem++;
|
|
}
|
|
}
|
|
|
|
UpdateButtons();
|
|
|
|
//if (FAILED(hr))
|
|
// CWMITestDoc::DisplayWMIErrorBox(hr, NULL);
|
|
}
|
|
|
|
int CPropsPg::GetSelectedItem()
|
|
{
|
|
POSITION pos = m_ctlProps.GetFirstSelectedItemPosition();
|
|
|
|
if (pos)
|
|
return m_ctlProps.GetNextSelectedItem(pos);
|
|
else
|
|
return -1;
|
|
}
|
|
|
|
void CPropsPg::UpdateButtons()
|
|
{
|
|
int iIndex = GetSelectedItem();
|
|
|
|
GetDlgItem(IDC_DELETE)->EnableWindow(iIndex != -1);
|
|
GetDlgItem(IDC_EDIT)->EnableWindow(iIndex != -1);
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CPropsPg, CPropertyPage)
|
|
//{{AFX_MSG_MAP(CPropsPg)
|
|
ON_BN_CLICKED(IDC_ADD, OnAdd)
|
|
ON_BN_CLICKED(IDC_EDIT, OnEdit)
|
|
ON_BN_CLICKED(IDC_DELETE, OnDelete)
|
|
ON_NOTIFY(NM_DBLCLK, IDC_PROPS, OnDblclkProps)
|
|
ON_NOTIFY(LVN_ITEMCHANGED, IDC_PROPS, OnItemchangedProps)
|
|
ON_BN_CLICKED(IDC_SYSTEM, OnSystem)
|
|
ON_BN_CLICKED(IDC_INHERITED, OnInherited)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CPropsPg message handlers
|
|
|
|
void CPropsPg::OnAdd()
|
|
{
|
|
CString strName;
|
|
|
|
if (CObjView::AddProperty(m_pObj, strName))
|
|
{
|
|
m_pObj->LoadProps(g_pOpView->GetDocument()->m_pNamespace);
|
|
|
|
LoadProps();
|
|
|
|
// Now try to find the item we just added.
|
|
LVFINDINFO find;
|
|
int iItem;
|
|
|
|
find.flags = LVFI_STRING;
|
|
find.psz = strName;
|
|
|
|
iItem = m_ctlProps.FindItem(&find);
|
|
|
|
if (iItem != -1)
|
|
{
|
|
m_ctlProps.EnsureVisible(iItem, FALSE);
|
|
m_ctlProps.SetItemState(iItem, LVIS_SELECTED, LVIS_SELECTED);
|
|
}
|
|
}
|
|
}
|
|
|
|
void CPropsPg::OnEdit()
|
|
{
|
|
int iItem = GetSelectedItem();
|
|
|
|
if (iItem != -1)
|
|
{
|
|
CPropInfo *pProp;
|
|
_variant_t var;
|
|
|
|
iItem = m_ctlProps.GetItemData(iItem);
|
|
pProp = &m_pObj->GetProps()->GetData()[iItem];
|
|
m_pObj->ValueToVariant(iItem, &var);
|
|
|
|
if (CObjView::EditProperty(m_pObj, pProp, &var))
|
|
{
|
|
LoadProps();
|
|
m_ctlProps.EnsureVisible(iItem, FALSE);
|
|
m_ctlProps.SetItemState(iItem, LVIS_SELECTED, LVIS_SELECTED);
|
|
}
|
|
|
|
// Otherwise the destructor freaks out because it doesn't know what to
|
|
// do with VT_I8.
|
|
if (var.vt == VT_I8)
|
|
var.vt = VT_I4;
|
|
}
|
|
}
|
|
|
|
void CPropsPg::OnDelete()
|
|
{
|
|
int iItem = GetSelectedItem();
|
|
|
|
if (iItem != -1)
|
|
{
|
|
CString strProperty = m_ctlProps.GetItemText(iItem, 0);
|
|
HRESULT hr;
|
|
|
|
hr = m_pObj->m_pObj->Delete(_bstr_t(strProperty));
|
|
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
m_pObj->LoadProps(g_pOpView->GetDocument()->m_pNamespace);
|
|
|
|
LoadProps();
|
|
|
|
if (iItem >= m_ctlProps.GetItemCount())
|
|
iItem--;
|
|
|
|
if (iItem >= 0)
|
|
{
|
|
m_ctlProps.EnsureVisible(iItem, FALSE);
|
|
m_ctlProps.SetItemState(iItem, LVIS_SELECTED, LVIS_SELECTED);
|
|
}
|
|
}
|
|
else
|
|
CWMITestDoc::DisplayWMIErrorBox(hr);
|
|
}
|
|
}
|
|
|
|
void CPropsPg::OnDblclkProps(NMHDR* pNMHDR, LRESULT* pResult)
|
|
{
|
|
OnEdit();
|
|
|
|
*pResult = 0;
|
|
}
|
|
|
|
void CPropsPg::OnItemchangedProps(NMHDR* pNMHDR, LRESULT* pResult)
|
|
{
|
|
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
|
|
|
|
UpdateButtons();
|
|
|
|
*pResult = 0;
|
|
}
|
|
|
|
BOOL CPropsPg::OnInitDialog()
|
|
{
|
|
CPropertyPage::OnInitDialog();
|
|
|
|
CheckDlgButton(IDC_SYSTEM, m_bShowSystemProperties);
|
|
CheckDlgButton(IDC_INHERITED, m_bShowInheritedProperties);
|
|
|
|
InitListCtrl();
|
|
|
|
LoadProps();
|
|
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
void CPropsPg::OnSystem()
|
|
{
|
|
m_bShowSystemProperties ^= 1;
|
|
|
|
LoadProps();
|
|
}
|
|
|
|
void CPropsPg::OnInherited()
|
|
{
|
|
m_bShowInheritedProperties ^= 1;
|
|
|
|
LoadProps();
|
|
}
|