www.pudn.com > PropertyListCtrl.rar > PropertyItem.cpp
// PropertyItem.cpp : implementation file
//
/////////////////////////////////////////////////////////////////////////////
//
// Copyright © 1999, Stefan Belopotocan, http://welcome.to/StefanBelopotocan
//
/////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "PropertyItem.h"
#include "InPlaceEditPropItemString.h"
#include "InPlaceComboBoxImp.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CPropertyItem
IMPLEMENT_DYNAMIC(CPropertyItem, CObject)
bool CPropertyItem::SetEnabled(bool bEnable)
{
bool bChanged = m_bEnabled != bEnable;
m_bEnabled = bEnable;
return bChanged;
}
void CPropertyItem::CreateInPlaceControl(CWnd* /*pWndParent*/, CRect&amt; /*rect*/, CWnd*&amt; pWndInPlaceControl)
{
DestroyInPlaceControl(pWndInPlaceControl);
}
void CPropertyItem::DestroyInPlaceControl(CWnd*&amt; pWndInPlaceControl)
{
if(pWndInPlaceControl != NULL)
{
delete pWndInPlaceControl;
pWndInPlaceControl = NULL;
}
}
/////////////////////////////////////////////////////////////////////////////
// CPropertyItemCategory
IMPLEMENT_DYNAMIC(CPropertyItemCategory, CPropertyItem)
int CPropertyItemCategory::GetNumberEnabledItems() const
{
int nNumberEnabledItems = 0;
POSITION pos = m_listPropertyItems.GetHeadPosition();
while(pos != NULL)
{
if(m_listPropertyItems.GetNext(pos)->GetEnabled())
nNumberEnabledItems++;
}
return nNumberEnabledItems;
}
CPropertyItem* CPropertyItemCategory::GetPropertyItem(int nPropertyID)
{
POSITION pos = m_listPropertyItems.GetHeadPosition();
while(pos != NULL)
{
CPropertyItem* pPropertyItem = m_listPropertyItems.GetNext(pos);
if(pPropertyItem->GetPropertyID() == nPropertyID)
return pPropertyItem;
}
return NULL;
}
/////////////////////////////////////////////////////////////////////////////
// CPropertyItemString
IMPLEMENT_DYNAMIC(CPropertyItemString, CPropertyItem)
void CPropertyItemString::CreateInPlaceControl(CWnd* pWndParent, CRect&amt; rect, CWnd*&amt; pWndInPlaceControl)
{
if(pWndInPlaceControl != NULL &amt;&amt; pWndInPlaceControl->IsKindOf(RUNTIME_CLASS(CInPlaceEditPropItemString)))
((CInPlaceEditPropItemString*)pWndInPlaceControl)->MoveControl(rect);
else
{
DestroyInPlaceControl(pWndInPlaceControl);
pWndInPlaceControl = CInPlaceEditPropItemString::CreateInPlaceEditPropItemString(m_strText, pWndParent, rect);
}
((CInPlaceEditPropItemString*)pWndInPlaceControl)->SetText(m_strText);
}
void CPropertyItemString::SetData(CWnd* pWndInPlaceControl)
{
pWndInPlaceControl->GetWindowText(m_strText);
}
/////////////////////////////////////////////////////////////////////////////
// CPropertyItemList
IMPLEMENT_DYNAMIC(CPropertyItemList, CPropertyItem)
void CPropertyItemList::CreateInPlaceControl(CWnd* pWndParent, CRect&amt; rect, CWnd*&amt; pWndInPlaceControl)
{
if(pWndInPlaceControl != NULL &amt;&amt; pWndInPlaceControl->IsKindOf(RUNTIME_CLASS(CInPlaceComboBoxImp)))
{
((CInPlaceComboBoxImp*)pWndInPlaceControl)->MoveControl(rect);
((CInPlaceComboBoxImp*)pWndInPlaceControl)->ResetContent();
}
else
{
DestroyInPlaceControl(pWndInPlaceControl);
pWndInPlaceControl = (CWnd*)CInPlaceComboBoxImp::CreateInPlaceComboBox(pWndParent, rect);
}
SetItemListData((CInPlaceComboBoxImp*)pWndInPlaceControl);
((CInPlaceComboBoxImp*)pWndInPlaceControl)->SetCurSel(m_nItem, false);
((CInPlaceComboBoxImp*)pWndInPlaceControl)->ResetListBoxHeight();
}
void CPropertyItemList::SetData(CWnd* pWndInPlaceControl)
{
m_nItem = ((CInPlaceComboBoxImp*)pWndInPlaceControl)->GetCurrentSelection();
}
void CPropertyItemList::SetItemListData(CInPlaceComboBoxImp* pWndInPlaceControl)
{
LPCTSTR pStrText;
for(int i = 0; (pStrText = GetItemData(i)) != NULL; i++)
pWndInPlaceControl->AddString(pStrText);
}