BOOL GcPropertyGridCtrl::RemoveProperty(CMFCPropertyGridProperty*& pProp, BOOL bRedraw, BOOL bAdjustLayout) { ASSERT_VALID(this); ASSERT_VALID(pProp); BOOL bFound = FALSE; for (POSITION pos = m_lstProps.GetHeadPosition(); pos != NULL;) { POSITION posSaved = pos; CMFCPropertyGridProperty* pListProp = m_lstProps.GetNext(pos); ASSERT_VALID(pListProp); if (pListProp == pProp) // Top level property { bFound = TRUE; m_lstProps.RemoveAt(posSaved); break; } if (pListProp->RemoveSubItem(pProp, FALSE)) { bFound = TRUE; break; } } if (!bFound) { return FALSE; } if (m_pSel == pProp) { m_pSel = NULL; } if (bAdjustLayout) { AdjustLayout(); return TRUE; } if (bRedraw && GetSafeHwnd() != NULL) { RedrawWindow(); } return TRUE; }
void CPropertiesWnd::OnPropDownitem() { if (!IsComboType()) { return; } CMFCPropertyGridProperty *pProp = m_wndPropList.GetCurSel(); if (pProp && pProp->IsGroup()) { CString strName(pProp->GetName()); if (strName.CompareNoCase(_T("ITEM")) == 0) { CMFCPropertyGridProperty *pParentProp = pProp->GetParent(); if (pProp == pParentProp->GetSubItem(pParentProp->GetSubItemsCount() - 1)) { return; } int nEnd = 0; CList<CMFCPropertyGridProperty*, CMFCPropertyGridProperty*> lstSubItems; for (int i = pParentProp->GetSubItemsCount() - 1; i >= nEnd; i--) { CMFCPropertyGridProperty *pChildProp = pParentProp->GetSubItem(i); if (pChildProp) { if (pChildProp == pProp) { nEnd = i; lstSubItems.InsertAfter(lstSubItems.GetHeadPosition(), pChildProp); } else { lstSubItems.AddHead(pChildProp); } pParentProp->RemoveSubItem(pChildProp, FALSE); } } for (POSITION pos = lstSubItems.GetHeadPosition(); pos != NULL;) { CMFCPropertyGridProperty* pProp = lstSubItems.GetNext(pos); ASSERT_VALID(pProp); pParentProp->AddSubItem(pProp); } m_wndPropList.AdjustLayout(); } } }
void CPropertiesWnd::PropertyChanged(CMFCPropertyGridProperty* pProp) { CString strName(pProp->GetName()); if (strName.CompareNoCase(_T("TYPE")) == 0) { CMFCPropertyGridProperty* pPropGroup = pProp->GetParent(); for (int i = pPropGroup->GetSubItemsCount() - 1; i >= 0; i--) { CMFCPropertyGridProperty* pChildProp = pPropGroup->GetSubItem(i); if (pChildProp == pProp) { break; } pPropGroup->RemoveSubItem(pChildProp); } CString strType(pProp->GetValue()); if (strType.CompareNoCase(_T("Combo")) == 0) { CMFCPropertyGridProperty* pNewProp = new CMFCPropertyGridProperty(_T("VALUE"), (COleVariant)_T("")); pPropGroup->AddSubItem(pNewProp); pNewProp = new CMFCPropertyGridProperty(_T("ITEMS"), PROP_DATA_ITEMS, TRUE); pPropGroup->AddSubItem(pNewProp); } else if (strType.CompareNoCase(_T("Number")) == 0) { CMFCPropertyGridProperty* pNewProp = new CMFCPropertyGridProperty(_T("VALUE"), (_variant_t)0, _T("")); pPropGroup->AddSubItem(pNewProp); pNewProp = new CMFCPropertyGridProperty(_T("RANGE MIN"), (_variant_t)0, _T("")); pNewProp->EnableSpinControl(TRUE, -9999, 9999); pPropGroup->AddSubItem(pNewProp); pNewProp = new CMFCPropertyGridProperty(_T("RANGE MAX"), (_variant_t)100, _T("")); pNewProp->EnableSpinControl(TRUE, -9999, 9999); pPropGroup->AddSubItem(pNewProp); BOOL bBuddy = FALSE; pNewProp = new CMFCPropertyGridProperty(_T("BUDDY"), (_variant_t)(bBuddy == TRUE), _T("")); pPropGroup->AddSubItem(pNewProp); pNewProp = new CMFCPropertyGridProperty(_T("SHORT"), (_variant_t)_T(""), _T("")); pPropGroup->AddSubItem(pNewProp); pNewProp = new CMFCPropertyGridProperty(_T("PREVIEW"), (_variant_t)_T(""), _T("")); pPropGroup->AddSubItem(pNewProp); } else if (strType.CompareNoCase(_T("Text")) == 0) { CMFCPropertyGridProperty* pNewProp = new CMFCPropertyGridProperty(_T("VALUE"), (COleVariant)_T("")); pPropGroup->AddSubItem(pNewProp); pNewProp = new CMFCPropertyGridProperty(_T("SHORT"), (COleVariant)_T("")); pPropGroup->AddSubItem(pNewProp); pNewProp = new CMFCPropertyGridProperty(_T("PREVIEW"), (COleVariant)_T("")); pPropGroup->AddSubItem(pNewProp); } m_wndPropList.AdjustLayout(); } else if (strName.CompareNoCase(_T("PREVIEW")) == 0) { ((CMainFrame*)AfxGetMainWnd())->GetClassView()->RefreshPreview(); } else if (strName.CompareNoCase(_T("NAME")) == 0) { ((CMainFrame*)AfxGetMainWnd())->GetFileView()->RefreshPropName(pProp); } ((CMainFrame*)AfxGetMainWnd())->GetFileView()->SetFileModifiedFlag(TRUE); }