www.pudn.com > DiskInfo.tgz > MyFolder.cpp


// 
////////////////////////////////////////////////////////////////////// 
 
#include "stdafx.h" 
#include "DiskInfo.h" 
#include "MyFolder.h" 
#include "Common/Useful.h" 
 
#ifdef _DEBUG 
#undef THIS_FILE 
static char THIS_FILE[]=__FILE__; 
#define new DEBUG_NEW 
#endif 
 
////////////////////////////////////////////////////////////////////// 
// Construction/Destruction 
////////////////////////////////////////////////////////////////////// 
 
CMyFolder::CMyFolder() 
{ 
	m_strFolderName = _T(""); 
	m_nFileCount = 0; 
	m_dFileSize = 0; 
	m_bSorted = FALSE; 
 
	m_nStatus = -1; 
 
	m_arraySubFolder.SetSize(0, 10); 
} 
 
CMyFolder::~CMyFolder() 
{ 
	DeleteAll(); 
} 
 
BOOL CMyFolder::Add(CMyFolder * pObj) 
{ 
	try  
	{ 
		m_arraySubFolder.Add(pObj); 
		return TRUE; 
	} 
	catch (CMemoryException* e) 
	{ 
		CString strTemp, strMes; 
		strTemp.LoadString(IDS_ERR_OUTOFMEM); 
		strMes.Format(strTemp, 2012); 
		AfxMessageBox(strMes); 
 
		if (pObj !=NULL)  
			delete pObj; 
		e->Delete(); 
		return FALSE; 
	} 
} 
 
void CMyFolder::DeleteAll() 
{ 
	int nCount = m_arraySubFolder.GetSize(); 
	 
	for (int i = 0; i < nCount; i++) 
	{ 
		CMyFolder* pObj = (CMyFolder*)(m_arraySubFolder.GetAt(i)); 
		 
		pObj->DeleteAll(); 
		 
		delete pObj; 
	} 
 
	m_arraySubFolder.RemoveAll(); 
	 
	//m_ptarraySubFolder.RemoveAll(); 
	m_bSorted = FALSE; 
	/* 
	while (m_listSubFolder.GetHeadPosition()) { 
		delete m_listSubFolder.RemoveHead(); 
	}*/ 
	m_nFileCount = 0; 
	m_dFileSize = 0; 
 
	m_nStatus = -1; 
} 
 
int CMyFolder::GetCount() 
{ 
	return m_arraySubFolder.GetSize(); 
} 
 
CMyFolder* CMyFolder::GetAt(int i) 
{ 
	return (CMyFolder*)m_arraySubFolder.GetAt(i); // No check  
	/* 
	POSITION pos = m_listSubFolder.FindIndex(i); 
	if (pos) 
		return m_listSubFolder.GetAt(pos); // No check  
	else 
		return NULL;*/ 
} 
 
long double CMyFolder::GetFolderSize(BOOL bSubFolder) 
{ 
	if (!IsReady()) 
		return 0; 
 
	if (IsFile()) 
		return m_dFileSize; 
 
	CMyFolder* pFolder; 
	long double ldSize = m_dFileSize; 
	if (bSubFolder) 
	{ 
		int nCount = m_arraySubFolder.GetSize(); 
		for (int i = 0; i < nCount; i++) 
		{ 
			pFolder = (CMyFolder*)m_arraySubFolder.GetAt(i); 
			if (!pFolder->IsFile()) 
				ldSize += pFolder->GetFolderSize(bSubFolder); 
		} 
 
/*		POSITION pos = m_listSubFolder.GetHeadPosition(); 
		while( pos != NULL ) 
		{ 
			pFolder = m_listSubFolder.GetNext( pos );  
			if (!pFolder->IsFile()) 
				ldSize += pFolder->GetFolderSize(bSubFolder); 
		}*/ 
 
	} 
	return ldSize; 
} 
 
unsigned long int CMyFolder::GetFolderCount(BOOL bSubFolder, BOOL bRealCount) 
{ 
	if (!IsReady()) 
		return 0; 
 
	int nCount = m_arraySubFolder.GetSize(); 
	unsigned long int nC = nCount; 
 
	if (bRealCount && m_nFileCount!=0 && !(IsFile())) // Exclude the file folder 
		nC --; 
 
	if (bSubFolder) 
	{ 
		for (int i = 0; i < nCount; i++) 
		{ 
			nC += ((CMyFolder*)(m_arraySubFolder.GetAt(i)))-> 
				GetFolderCount(bSubFolder); 
		} 
/* 
		CMyFolder* pFolder; 
 
		POSITION pos = m_listSubFolder.GetHeadPosition(); 
		while( pos != NULL ) 
		{ 
			pFolder = m_listSubFolder.GetNext( pos );  
			nC += pFolder->GetFolderCount(bSubFolder); 
		}*/ 
	} 
 
	return nC; 
} 
 
unsigned long int CMyFolder::GetFileCount(BOOL bSubFolder) 
{ 
	if (!IsReady()) 
		return 0; 
 
	CMyFolder* pFolder; 
	unsigned long int nC = m_nFileCount; 
	if (bSubFolder) 
	{ 
		int nCount = m_arraySubFolder.GetSize(); 
		for (int i = 0; i < nCount; i++) 
		{ 
			pFolder = (CMyFolder*)m_arraySubFolder.GetAt(i); 
			if (!pFolder->IsFile()) 
				nC += pFolder->GetFileCount(bSubFolder); 
		} 
 
		/*POSITION pos = m_listSubFolder.GetHeadPosition(); 
		while( pos != NULL ) 
		{ 
			pFolder = m_listSubFolder.GetNext( pos );  
			if (!pFolder->IsFile()) 
				nC += pFolder->GetFileCount(bSubFolder); 
		}*/ 
	} 
 
	return nC; 
} 
 
/*BOOL CMyFolder::GetSubColor(CMyFolder *pSubFolder, COLORREF& color) 
{	 
	/* 
	if (!m_bSorted) 
	{ 
		if (m_arraySubFolder.GetSize() > 1) 
			qsort((void*)(m_arraySubFolder.GetData()),  
				((size_t)m_arraySubFolder.GetSize()),  
				sizeof(m_arraySubFolder.GetAt(0)), 
				CDetailDlg::CompareFolderSize); 
		m_bSorted = TRUE; 
	} 
 
	int nCount = m_arraySubFolder.GetSize(); 
	for (int i = 0; i < nCount; i++) 
	{ 
		CMyFolder* pFolder = (CMyFolder*)m_arraySubFolder.GetAt(i); 
		if (pFolder->m_strFolderName == pSubFolder->m_strFolderName && 
			pFolder->m_dFileSize == pSubFolder->m_dFileSize) 
		{ 
			if (m_pChart) 
			{ 
				m_pChart->GetItemColor(i, color); 
				return TRUE; 
			} 
		} 
	} 
	return FALSE; 
}*/ 
 
CString CMyFolder::GetItemText(int nSubItem) 
{ 
	if (nSubItem == 0) 
		return m_strFolderName; 
 
	CString str; 
	if (nSubItem == 1) // Size 
	{ 
		FormatByteSize(GetFolderSize(TRUE),str); 
		return str; 
	} 
 
	if (nSubItem == 2) // Folder 
	{ 
		str.Format("%d", GetFolderCount(TRUE)); 
		return str; 
	} 
	 
	if (nSubItem == 3) // File 
	{ 
		str.Format("%d", GetFileCount(TRUE)); 
		return str; 
	} 
 
	return CString(); 
} 
 
BOOL CMyFolder::IsFile() 
{ 
	return m_nStatus == 1; 
} 
 
BOOL CMyFolder::IsReady() 
{ 
	return m_nStatus != -1; 
} 
 
void CMyFolder::SetTitle(CString str) 
{ 
	int nLenght = str.GetLength(); 
	 
	if (nLenght > 0) 
	{ 
		m_strFolderName = str.Left(1); 
		m_strFolderName.MakeUpper(); 
		str = str.Right(nLenght-1); 
		str.MakeLower(); 
		m_strFolderName += str; 
	}else 
		m_strFolderName = ""; 
} 
 
void CMyFolder::SetReady(int n) 
{ 
	/*m_ptarraySubFolder.SetSize(m_listSubFolder.GetCount()); 
 
	POSITION pos = m_listSubFolder.GetHeadPosition(); 
	int nPos=0; 
	while( pos != NULL ) 
	{ 
		m_ptarraySubFolder.SetAt(nPos, m_listSubFolder.GetNext( pos )); 
		nPos ++; 
		 
	} 
 
	//VERIFY(m_ptarraySubFolder.GetSize() == m_listSubFolder.GetCount()); 
*/ 
	m_nStatus = n; 
	m_arraySubFolder.FreeExtra(); 
}