windows-nt/Source/XPSP1/NT/printscan/ui/ssmypics/sscommon/ssdata.cpp

272 lines
7.9 KiB
C++
Raw Normal View History

2020-09-26 03:20:57 -05:00
/*******************************************************************************
*
* (C) COPYRIGHT MICROSOFT CORPORATION, 1998, 1999, 2000
*
* TITLE: SSDATA.CPP
*
* VERSION: 1.0
*
* AUTHOR: ShaunIv
*
* DATE: 1/13/1999
*
* DESCRIPTION: Encapsulates reading and writing setting for this screensaver
* from the registry
*
*******************************************************************************/
#include "precomp.h"
#pragma hdrstop
#include "ssdata.h"
#include <shlobj.h>
#include "simreg.h"
#include "ssutil.h"
// These are defined so I can build using vc5 headers
#if !defined(CSIDL_WINDOWS)
#define CSIDL_WINDOWS 0x0024 // GetWindowsDirectory()
#endif
#if !defined(CSIDL_MYPICTURES)
#define CSIDL_MYPICTURES 0x0027 // C:\Program Files\My Pictures
#endif
CMyDocsScreenSaverData::CMyDocsScreenSaverData( HKEY hKeyRoot, const CSimpleString &strRegistryKeyName )
: m_hKeyRoot(hKeyRoot),
m_strRegistryKeyName(strRegistryKeyName),
m_strImageDirectory(TEXT("")),
m_nPaintTimerInterval(0),
m_nChangeTimerInterval(0),
m_bDisplayFilename(0),
m_nMaxScreenPercent(0),
m_bDisableTransitions(0),
m_bAllowStretching(false),
m_bAllowKeyboardControl(true),
m_nMaxFailedFiles(0),
m_nMaxSuccessfulFiles(0),
m_nMaxDirectories(0),
m_pszImageDirectoryValue(TEXT("ImageDirectory")),
m_pszPaintIntervalValue(TEXT("PaintInterval")),
m_pszChangeIntervalValue(TEXT("ChangeInterval")),
m_pszDisplayFilename(TEXT("DisplayFilename")),
m_pszMaxScreenPercent(TEXT("MaxScreenPercent")),
m_pszDisableTransitions(TEXT("DisableTransitions")),
m_pszAllowStretching(TEXT("AllowStretching")),
m_pszAllowKeyboardControl(TEXT("AllowKeyboardControl")),
m_pszMaxFailedFiles(TEXT("MaxFailedFiles")),
m_pszMaxSuccessfulFiles(TEXT("MaxSuccessfulFiles")),
m_pszMaxDirectories(TEXT("MaxDirectories"))
{
Read();
}
CMyDocsScreenSaverData::~CMyDocsScreenSaverData(void)
{
}
void CMyDocsScreenSaverData::Read(void)
{
CSimpleReg reg( m_hKeyRoot, m_strRegistryKeyName, false, KEY_READ );
m_strImageDirectory = reg.Query( m_pszImageDirectoryValue, GetDefaultImageDir() );
m_nPaintTimerInterval = reg.Query( m_pszPaintIntervalValue, nDefaultPaintInterval );
m_nChangeTimerInterval = reg.Query( m_pszChangeIntervalValue, nDefaultChangeInterval );
m_bDisplayFilename = (reg.Query( m_pszDisplayFilename, bDefaultDisplayFilename ) != 0);
m_nMaxScreenPercent = reg.Query( m_pszMaxScreenPercent, nDefaultScreenPercent );
m_bDisableTransitions = (reg.Query( m_pszDisableTransitions, bDefaultDisableTransitions ) != 0);
m_bAllowStretching = (reg.Query( m_pszAllowStretching, bDefaultAllowStretching ) != 0);
m_bAllowKeyboardControl = (reg.Query( m_pszAllowKeyboardControl, bDefaultAllowKeyboardControl ) != 0);
m_nMaxFailedFiles = reg.Query( m_pszMaxFailedFiles, nDefaultMaxFailedFiles );
m_nMaxSuccessfulFiles = reg.Query( m_pszMaxSuccessfulFiles, nDefaultMaxSuccessfulFiles );
m_nMaxDirectories = reg.Query( m_pszMaxDirectories, nDefaultMaxDirectories );
}
void CMyDocsScreenSaverData::Write(void)
{
CSimpleReg reg( m_hKeyRoot, m_strRegistryKeyName, true, KEY_WRITE );
//
// If we don't have a directory, we will delete the value to cause the default to be used instead
//
if (!m_strImageDirectory.Length())
{
reg.Delete( m_pszImageDirectoryValue );
}
else
{
reg.Set( m_pszImageDirectoryValue, m_strImageDirectory );
}
reg.Set( m_pszPaintIntervalValue, m_nPaintTimerInterval );
reg.Set( m_pszChangeIntervalValue, m_nChangeTimerInterval );
reg.Set( m_pszDisplayFilename, (DWORD)m_bDisplayFilename );
reg.Set( m_pszMaxScreenPercent, m_nMaxScreenPercent );
reg.Set( m_pszDisableTransitions, (DWORD)m_bDisableTransitions );
reg.Set( m_pszAllowStretching, (DWORD)m_bAllowStretching );
reg.Set( m_pszAllowKeyboardControl, (DWORD)m_bAllowKeyboardControl );
reg.Set( m_pszMaxFailedFiles, m_nMaxFailedFiles );
reg.Set( m_pszMaxSuccessfulFiles, m_nMaxSuccessfulFiles );
reg.Set( m_pszMaxDirectories, m_nMaxDirectories );
}
CSimpleString CMyDocsScreenSaverData::ImageDirectory(void) const
{
return(m_strImageDirectory);
}
void CMyDocsScreenSaverData::ImageDirectory( const CSimpleString &str )
{
m_strImageDirectory = str;
}
UINT CMyDocsScreenSaverData::ChangeInterval(void) const
{
return(m_nChangeTimerInterval);
}
void CMyDocsScreenSaverData::ChangeInterval( UINT nInterval )
{
m_nChangeTimerInterval = nInterval;
}
UINT CMyDocsScreenSaverData::PaintInterval(void) const
{
return(m_nPaintTimerInterval);
}
void CMyDocsScreenSaverData::PaintInterval( UINT nInterval )
{
m_nPaintTimerInterval = nInterval;
}
bool CMyDocsScreenSaverData::DisplayFilename(void) const
{
return(m_bDisplayFilename);
}
void CMyDocsScreenSaverData::DisplayFilename( bool bDisplayFilename )
{
m_bDisplayFilename = bDisplayFilename;
}
int CMyDocsScreenSaverData::MaxScreenPercent(void) const
{
return m_nMaxScreenPercent;
}
void CMyDocsScreenSaverData::MaxScreenPercent( int nMaxScreenPercent )
{
m_nMaxScreenPercent = nMaxScreenPercent;
}
bool CMyDocsScreenSaverData::DisableTransitions(void) const
{
return m_bDisableTransitions;
}
void CMyDocsScreenSaverData::DisableTransitions( bool bDisableTransitions )
{
m_bDisableTransitions = bDisableTransitions;
}
bool CMyDocsScreenSaverData::AllowStretching(void) const
{
return m_bAllowStretching;
}
void CMyDocsScreenSaverData::AllowStretching( bool bAllowStretching )
{
m_bAllowStretching = bAllowStretching;
}
bool CMyDocsScreenSaverData::AllowKeyboardControl(void) const
{
return m_bAllowKeyboardControl;
}
void CMyDocsScreenSaverData::AllowKeyboardControl( bool bAllowKeyboardControl )
{
m_bAllowKeyboardControl = bAllowKeyboardControl;
}
int CMyDocsScreenSaverData::MaxFailedFiles(void) const
{
return m_nMaxFailedFiles;
}
void CMyDocsScreenSaverData::MaxFailedFiles( int nMaxFailedFiles )
{
m_nMaxFailedFiles = nMaxFailedFiles;
}
int CMyDocsScreenSaverData::MaxSuccessfulFiles(void) const
{
return m_nMaxSuccessfulFiles;
}
void CMyDocsScreenSaverData::MaxSuccessfulFiles( int nMaxSuccessfulFiles )
{
m_nMaxSuccessfulFiles = nMaxSuccessfulFiles;
}
int CMyDocsScreenSaverData::MaxDirectories(void) const
{
return m_nMaxDirectories;
}
void CMyDocsScreenSaverData::MaxDirectories( int nMaxDirectories )
{
m_nMaxDirectories = nMaxDirectories;
}
CSimpleString CMyDocsScreenSaverData::GetDefaultImageDir(void)
{
CSimpleString strResult(TEXT(""));
LPITEMIDLIST pidl;
TCHAR szPath[MAX_PATH];
LPMALLOC pMalloc;
HRESULT hr = SHGetMalloc(&pMalloc);
if (SUCCEEDED(hr))
{
hr = SHGetSpecialFolderLocation( NULL, CSIDL_MYPICTURES, &pidl );
if (SUCCEEDED(hr))
{
if (SHGetPathFromIDList( pidl, szPath ))
{
if (lstrlen(szPath))
strResult = szPath;
}
pMalloc->Free(pidl);
}
if (0 == strResult.Length())
{
hr = SHGetSpecialFolderLocation( NULL, CSIDL_PERSONAL, &pidl );
if (SUCCEEDED(hr))
{
if (SHGetPathFromIDList( pidl, szPath ))
{
if (lstrlen(szPath))
strResult = szPath;
}
pMalloc->Free(pidl);
}
}
if (0 == strResult.Length())
{
hr = SHGetSpecialFolderLocation( NULL, CSIDL_WINDOWS, &pidl );
if (SUCCEEDED(hr))
{
if (SHGetPathFromIDList( pidl, szPath ))
{
if (lstrlen(szPath))
strResult = szPath;
}
pMalloc->Free(pidl);
}
}
pMalloc->Release();
}
WIA_TRACE((TEXT("CImageScreenSaver::GetDefaultDirectory: returned %s\n"),strResult.String()));
return(strResult);
}