161 lines
3.1 KiB
C++
161 lines
3.1 KiB
C++
#include "pmcfg.h"
|
|
#include "mru.h"
|
|
|
|
|
|
PpMRU::PpMRU(int nSize) : m_nSize(nSize)
|
|
{
|
|
m_ppszList = new LPTSTR[nSize];
|
|
ZeroMemory(m_ppszList, m_nSize * sizeof(LPTSTR));
|
|
}
|
|
|
|
|
|
PpMRU::~PpMRU()
|
|
{
|
|
int nIndex;
|
|
|
|
if(m_ppszList)
|
|
{
|
|
for(nIndex = 0; nIndex < m_nSize; nIndex++)
|
|
{
|
|
if(m_ppszList[nIndex])
|
|
delete [] m_ppszList[nIndex];
|
|
}
|
|
|
|
delete [] m_ppszList;
|
|
}
|
|
}
|
|
|
|
|
|
BOOL
|
|
PpMRU::insert
|
|
(
|
|
LPCTSTR sz
|
|
)
|
|
{
|
|
int nIndex;
|
|
LPTSTR szNew;
|
|
|
|
//
|
|
// If the string is already in the list, just
|
|
// reshuffle so that it is at the top. Even
|
|
// simpler, if the string is already the first
|
|
// item in the list then do nothing!
|
|
//
|
|
|
|
if(m_ppszList[0] && lstrcmp(sz, m_ppszList[0]) == 0)
|
|
return TRUE;
|
|
|
|
for(nIndex = 1; nIndex < m_nSize && m_ppszList[nIndex]; nIndex++)
|
|
{
|
|
if(lstrcmp(sz, m_ppszList[nIndex]) == 0)
|
|
{
|
|
LPTSTR szTemp = m_ppszList[nIndex];
|
|
for(int nIndex2 = nIndex; nIndex2 > 0; nIndex2--)
|
|
m_ppszList[nIndex2] = m_ppszList[nIndex2 - 1];
|
|
|
|
m_ppszList[0] = szTemp;
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
//
|
|
// New item in list. Allocate memory, copy and
|
|
// shove list down.
|
|
//
|
|
|
|
szNew = new TCHAR[lstrlen(sz) + 1];
|
|
if(!szNew)
|
|
return FALSE;
|
|
|
|
lstrcpy(szNew, sz);
|
|
|
|
if(m_ppszList[m_nSize - 1])
|
|
delete [] m_ppszList[m_nSize - 1];
|
|
|
|
for(nIndex = m_nSize - 1; nIndex > 0; nIndex--)
|
|
{
|
|
m_ppszList[nIndex] = m_ppszList[nIndex - 1];
|
|
}
|
|
|
|
m_ppszList[0] = szNew;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
LPCTSTR
|
|
PpMRU::operator[]
|
|
(
|
|
int nIndex
|
|
)
|
|
{
|
|
return m_ppszList[nIndex];
|
|
}
|
|
|
|
|
|
BOOL
|
|
PpMRU::load
|
|
(
|
|
LPCTSTR szSection,
|
|
LPCTSTR szFilename
|
|
)
|
|
{
|
|
int nIndex;
|
|
TCHAR achNumBuf[16];
|
|
TCHAR achBuf[MAX_PATH];
|
|
|
|
for(nIndex = 0; nIndex < m_nSize; nIndex++)
|
|
{
|
|
_itot(nIndex + 1, achNumBuf, 10);
|
|
|
|
GetPrivateProfileString(szSection,
|
|
achNumBuf,
|
|
TEXT(""),
|
|
achBuf,
|
|
MAX_PATH,
|
|
szFilename);
|
|
|
|
if(lstrlen(achBuf))
|
|
{
|
|
m_ppszList[nIndex] = new TCHAR[lstrlen(achBuf) + 1];
|
|
if(m_ppszList[nIndex])
|
|
lstrcpy(m_ppszList[nIndex], achBuf);
|
|
}
|
|
else
|
|
{
|
|
m_ppszList[nIndex] = NULL;
|
|
}
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
BOOL
|
|
PpMRU::save
|
|
(
|
|
LPCTSTR szSection,
|
|
LPCTSTR szFilename
|
|
)
|
|
{
|
|
int nIndex;
|
|
TCHAR achNumBuf[16];
|
|
|
|
// Make sure any previously existing section is erased.
|
|
WritePrivateProfileString(szSection, NULL, NULL, szFilename);
|
|
|
|
// Now save all the entries.
|
|
for(nIndex = 0; nIndex < m_nSize && m_ppszList[nIndex]; nIndex++)
|
|
{
|
|
_itot(nIndex + 1, achNumBuf, 10);
|
|
|
|
WritePrivateProfileString(szSection,
|
|
achNumBuf,
|
|
m_ppszList[nIndex],
|
|
szFilename
|
|
);
|
|
}
|
|
|
|
return TRUE;
|
|
}
|