Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1125 lines
29 KiB

//////////////////////////////////////////////////////////////////////////////
//
// File: cfgDlg.cpp
//
// Description:
//
// Copyright (c) 2000 Microsoft Corp.
//
//////////////////////////////////////////////////////////////////////////////
// App Includes
#include "precomp.h"
#include "resource.h"
#include "main.h"
#include "msprjctr.h"
#include "msprjctr_i.c"
#include <atlconv.h>
#include <commctrl.h>
#include <shlobj.h>
#include <shlwapi.h>
///////////////////////////////
// ErrorState_Enum
//
typedef enum
{
ErrorState_NONE = 0,
ErrorState_IMAGE_DIR_DOESNT_EXIST = 1,
ErrorState_DEVICE_DIR_DOESNT_EXIST = 2,
ErrorState_SLIDESHOW_SERVER_NOT_FOUND = 3,
ErrorState_FAILED_TO_START_SLIDESHOW = 4
} ErrorState_Enum;
///////////////////////////
// GVAR_LOCAL
//
// Global Variable
//
static struct GVAR_LOCAL
{
HINSTANCE hInstance;
HWND hwndMain;
ErrorState_Enum ErrorState;
TCHAR szImagePath[MAX_PATH];
} GVAR_LOCAL =
{
NULL,
NULL,
ErrorState_NONE
};
///////////////////////////////
// GVAR_pSlideshowProjector
//
CComPtr<IUPnPDeviceProvider> GVAR_pProjector;
// Custom user message
#define WM_USER_TASKBAR WM_USER + 100
////////////////////////// Function Prototypes ////////////////////////////////
INT_PTR CALLBACK DlgProc(HWND hwndDlg,
UINT uiMsg,
WPARAM wParam,
LPARAM lParam);
static int InitDlg(HWND hwndDlg);
static int ProcessWMCommand(HWND hwndDlg,
UINT uiMsg,
WPARAM wParam,
LPARAM lParam);
static int ProcessTaskbarMsg(HWND hwnd,
UINT uiMessage,
WPARAM wParam,
LPARAM lParam);
static int ProcessScroll(HWND hwndDlg,
HWND hwndScroll);
static HRESULT LoadCurrentSettings();
static HRESULT SaveCurrentSettings();
static HRESULT ShowConfigWindow();
static BOOL IsChecked(INT iResID);
static void ProcessError(ErrorState_Enum ErrorState);
static HRESULT SetImageFreqTrackbar(DWORD dwImageFreq);
static HRESULT SetImageScaleTrackbar(DWORD dwImageScaleFactor);
static void EnableApplyButton(BOOL bEnable);
static HRESULT GetFirstSlideshowService(ISlideshowService **ppSlideshowService,
ISlideshowAlbum **ppSlideshowAlbum);
//////////////////////////////
// CfgDlg::Init
//
HRESULT CfgDlg::Init(HINSTANCE hInstance)
{
HRESULT hr = S_OK;
TCHAR szImageDir[_MAX_PATH + 1] = {0};
TCHAR szDeviceDir[_MAX_PATH + 1] = {0};
GVAR_LOCAL.hInstance = hInstance;
if (SUCCEEDED(hr))
{
hr = CoCreateInstance(CLSID_Projector,
NULL,
CLSCTX_INPROC_SERVER,
IID_IUPnPDeviceProvider,
(void**) &GVAR_pProjector);
if (FAILED(hr))
{
DBG_ERR(("Failed to CoCreate CLSID_SlideshowDevice. Is the "
"server DLL registered?, hr = 0x%08lx",
hr));
GVAR_LOCAL.ErrorState = ErrorState_SLIDESHOW_SERVER_NOT_FOUND;
}
}
ASSERT(GVAR_pProjector != NULL);
return hr;
}
//////////////////////////////
// CfgDlg::Term
//
HRESULT CfgDlg::Term()
{
HRESULT hr = S_OK;
return hr;
}
//////////////////////////////
// CfgDlg::Create
//
HWND CfgDlg::Create(int nCmdShow)
{
HWND hwnd = CreateDialog(GVAR_LOCAL.hInstance,
MAKEINTRESOURCE(IDD_CONFIG_DIALOG),
NULL,
DlgProc);
// this is set in InitDlg
if (GVAR_LOCAL.hwndMain != NULL)
{
Tray::Init(GVAR_LOCAL.hInstance,
GVAR_LOCAL.hwndMain,
WM_USER_TASKBAR);
::ShowWindow(GVAR_LOCAL.hwndMain, nCmdShow);
}
return GVAR_LOCAL.hwndMain;
}
//////////////////////////////
// ProcessError
//
static void ProcessError(ErrorState_Enum ErrorState)
{
HRESULT hr = S_OK;
TCHAR szErrMsg[255 + 1] = {0};
TCHAR szCaption[63 + 1] = {0};
if (ErrorState == ErrorState_NONE)
{
return;
}
Util::GetString(GVAR_LOCAL.hInstance,
IDS_ERR_CAPTION,
szCaption,
sizeof(szCaption) / sizeof(TCHAR));
if (ErrorState == ErrorState_SLIDESHOW_SERVER_NOT_FOUND)
{
Util::GetString(GVAR_LOCAL.hInstance,
IDS_ERR_SLIDESHOW_SERVER_NOT_FOUND,
szErrMsg,
sizeof(szErrMsg) / sizeof(TCHAR));
}
else if (ErrorState == ErrorState_FAILED_TO_START_SLIDESHOW)
{
Util::GetString(GVAR_LOCAL.hInstance,
IDS_ERR_FAILED_TO_START_SLIDESHOW,
szErrMsg,
sizeof(szErrMsg) / sizeof(TCHAR));
}
else
{
Util::GetString(GVAR_LOCAL.hInstance,
IDS_ERR_SERVER_ERROR,
szErrMsg,
sizeof(szErrMsg) / sizeof(TCHAR));
}
MessageBox(GVAR_LOCAL.hwndMain,
szErrMsg,
szCaption,
MB_ICONERROR | MB_OK);
return;
}
//////////////////////////////
// InitDlg
//
static int InitDlg(HWND hwndDlg)
{
HRESULT hr = S_OK;
GVAR_LOCAL.hwndMain = hwndDlg;
//
// set the image frequency trackbar range.
//
SendDlgItemMessage(hwndDlg,
IDC_FREQUENCY,
TBM_SETRANGE,
(WPARAM) TRUE,
(LPARAM) MAKELONG(MIN_IMAGE_FREQ_IN_SEC, MAX_IMAGE_FREQ_IN_SEC));
//
// set the image scale factor range.
//
SendDlgItemMessage(hwndDlg,
IDC_MAX_SIZE,
TBM_SETRANGE,
(WPARAM) TRUE,
(LPARAM) MAKELONG(MIN_IMAGE_SCALE_FACTOR, MAX_IMAGE_SCALE_FACTOR));
// these are just initial settings in case we fail to load the last
// saved settings.
//
SetImageFreqTrackbar(MIN_IMAGE_FREQ_IN_SEC);
SetImageScaleTrackbar(MAX_IMAGE_SCALE_FACTOR);
if (GVAR_LOCAL.ErrorState == ErrorState_NONE)
{
if (GVAR_pProjector)
{
BSTR bstrInitString = SysAllocString(L"");
// Start the Projector!
hr = GVAR_pProjector->Start(bstrInitString);
if (bstrInitString)
{
::SysFreeString(bstrInitString);
bstrInitString = NULL;
}
if (FAILED(hr))
{
GVAR_LOCAL.ErrorState = ErrorState_FAILED_TO_START_SLIDESHOW;
}
}
if (SUCCEEDED(hr))
{
LoadCurrentSettings();
}
}
ProcessError(GVAR_LOCAL.ErrorState);
return 0;
}
//////////////////////////////
// TermDlg
//
static bool TermDlg()
{
HRESULT hr = S_OK;
if (GVAR_pProjector)
{
// Stop the projector
//
GVAR_pProjector->Stop();
}
Tray::Term(GVAR_LOCAL.hwndMain);
DestroyWindow(GVAR_LOCAL.hwndMain);
return true;
}
//////////////////////////////
// DlgProc
//
INT_PTR CALLBACK DlgProc(HWND hwndDlg,
UINT uiMsg,
WPARAM wParam,
LPARAM lParam)
{
int iReturn = 0;
switch(uiMsg)
{
case WM_INITDIALOG:
// intialize the controls on the dialog.
InitDlg(hwndDlg);
iReturn = TRUE;
break;
case WM_CLOSE:
// rather than closing the window when the user hits the
// X, we hide it, thereby keeping the taskbar icon.
ShowWindow(hwndDlg, SW_HIDE);
break;
case WM_DESTROY:
// if we are destroying the window, then lets
// exit the app.
::PostQuitMessage(0);
break;
case WM_COMMAND:
iReturn = ProcessWMCommand(hwndDlg,
uiMsg,
wParam,
lParam);
break;
case WM_USER_TASKBAR:
iReturn = ProcessTaskbarMsg(hwndDlg,
uiMsg,
wParam,
lParam);
break;
case WM_HSCROLL:
ProcessScroll(hwndDlg, (HWND) lParam);
break;
default:
iReturn = 0;
break;
}
return iReturn;
}
///////////////////////////////
// ProcessWMCommand
//
static int ProcessWMCommand(HWND hwndDlg,
UINT uiMsg,
WPARAM wParam,
LPARAM lParam)
{
int iReturn = 0;
int iControlID = LOWORD(wParam);
int iNotifyCode = HIWORD(wParam);
switch (iControlID)
{
case IDOK:
// the user hit the OK button, save the setting changes
// they made, and hide the window.
SaveCurrentSettings();
ShowWindow(hwndDlg, SW_HIDE);
break;
case IDCANCEL:
// abandoning changes made by the user.
ShowWindow(hwndDlg, SW_HIDE);
EnableApplyButton(FALSE);
break;
case IDC_APPLY:
// the user hit the APPLY button, save the setting changes
// they made, but don't hide the window
SaveCurrentSettings();
break;
case IDC_ALLOWSTRETCHING:
case IDC_DISPLAYFILENAME:
case IDC_ALLOW_KEYBOARDCONTROL:
EnableApplyButton(TRUE);
break;
case IDM_POPUP_OPEN:
ShowConfigWindow();
break;
case IDM_POPUP_EXIT:
TermDlg();
break;
case IDC_BROWSE:
{
TCHAR szTitle[127 + 1] = {0};
bool bNewDirSelected = false;
LoadString(GVAR_LOCAL.hInstance,
IDS_PLEASE_SELECT_IMAGE_DIR,
szTitle,
sizeof(szTitle) / sizeof(TCHAR));
// popup the browse for directories dialog.
// On return this dialog returns the directory selected
// by the user.
bNewDirSelected = Util::BrowseForDirectory(hwndDlg,
szTitle,
GVAR_LOCAL.szImagePath,
sizeof(GVAR_LOCAL.szImagePath) / sizeof(TCHAR));
if (bNewDirSelected)
{
HDC hDC = NULL;
TCHAR szImageDir[MAX_PATH + 1] = {0};
RECT rc = {0};
_tcsncpy(szImageDir,
GVAR_LOCAL.szImagePath,
sizeof(szImageDir) / sizeof(TCHAR));
hDC = GetDC(GetDlgItem(GVAR_LOCAL.hwndMain, IDC_IMAGEDIR));
GetClientRect(GetDlgItem(GVAR_LOCAL.hwndMain, IDC_IMAGEDIR), &rc);
PathCompactPath(hDC, szImageDir, rc.right - rc.left);
SetDlgItemText(GVAR_LOCAL.hwndMain,
IDC_IMAGEDIR,
szImageDir);
if (hDC)
{
ReleaseDC(GetDlgItem(GVAR_LOCAL.hwndMain, IDC_IMAGEDIR), hDC);
hDC = NULL;
}
EnableApplyButton(TRUE);
}
}
break;
default:
break;
}
return iReturn;
}
//////////////////////////////////////////////////////////////////////
// ProcessTaskbarMsg
//
// Desc: Function is called when there is an event at the taskbar
//
//
// Params: - hwnd, handle of main window.
// - uiMessage, message sent.
static int ProcessTaskbarMsg(HWND hwnd,
UINT uiMessage,
WPARAM wParam,
LPARAM lParam)
{
int iReturn = 0;
UINT uID;
UINT uMouseMsg;
uID = (UINT) wParam;
uMouseMsg = (UINT) lParam;
// remove unref param warning
uiMessage = uiMessage;
switch (uMouseMsg)
{
case WM_LBUTTONDBLCLK:
ShowConfigWindow();
break;
case WM_LBUTTONDOWN:
break;
case WM_RBUTTONDOWN:
Tray::PopupMenu(hwnd);
break;
}
return iReturn;
}
///////////////////////////////
// ShowConfigWindow
//
static int ProcessScroll(HWND hwndDlg,
HWND hwndScroll)
{
ASSERT(hwndScroll != NULL);
int iReturn = 0;
HRESULT hr = S_OK;
TCHAR szString[255 + 1] = {0};
if (hwndScroll == NULL)
{
return E_INVALIDARG;
}
if (GetDlgItem(hwndDlg, IDC_FREQUENCY) == hwndScroll)
{
UINT nFrequency = (UINT)SendDlgItemMessage(hwndDlg,
IDC_FREQUENCY,
TBM_GETPOS,
0, 0 );
SetImageFreqTrackbar(nFrequency);
hr = Util::FormatTime(GVAR_LOCAL.hInstance,
nFrequency,
szString,
sizeof(szString) / sizeof(TCHAR));
SendDlgItemMessage(hwndDlg,
IDC_MINUTES_AND_SECONDS,
WM_SETTEXT,
0,
(LPARAM) szString);
}
else if (GetDlgItem(hwndDlg, IDC_MAX_SIZE) == hwndScroll)
{
UINT nScaleFactor = (UINT)SendDlgItemMessage(hwndDlg,
IDC_MAX_SIZE,
TBM_GETPOS,
0, 0 );
SetImageScaleTrackbar(nScaleFactor);
}
EnableApplyButton(TRUE);
return iReturn;
}
///////////////////////////////
// ShowConfigWindow
//
static HRESULT ShowConfigWindow()
{
HRESULT hr = S_OK;
// reload our settings from the DLL to ensure that
// we are reflecting the real state of the settings.
LoadCurrentSettings();
// popup the window on double click.
ShowWindow(GVAR_LOCAL.hwndMain,
SW_SHOW);
// make sure we are the foreground window.
SetForegroundWindow(GVAR_LOCAL.hwndMain);
return hr;
}
///////////////////////////////
// IsChecked
//
static BOOL IsChecked(INT iResID)
{
LRESULT lState = 0;
BOOL bChecked = TRUE;
// Get the Display File Name
lState = SendDlgItemMessage(GVAR_LOCAL.hwndMain,
iResID,
BM_GETCHECK,
0,
0);
if (lState == BST_CHECKED)
{
bChecked = TRUE;
}
else
{
bChecked = FALSE;
}
return bChecked;
}
///////////////////////////////
// SetImageFreqTrackbar
//
static HRESULT SetImageFreqTrackbar(DWORD dwImageFreq)
{
HRESULT hr = S_OK;
if (SUCCEEDED(hr))
{
TCHAR szTime[255 + 1] = {0};
// set the trackbar's current position.
SendDlgItemMessage(GVAR_LOCAL.hwndMain,
IDC_FREQUENCY,
TBM_SETPOS,
(WPARAM) TRUE,
(LPARAM) dwImageFreq);
hr = Util::FormatTime(GVAR_LOCAL.hInstance,
dwImageFreq,
szTime,
sizeof(szTime) / sizeof(TCHAR));
SendDlgItemMessage(GVAR_LOCAL.hwndMain,
IDC_MINUTES_AND_SECONDS,
WM_SETTEXT,
0,
(LPARAM) szTime);
}
return hr;
}
///////////////////////////////
// SetImageScaleTrackbar
//
static HRESULT SetImageScaleTrackbar(DWORD dwImageScaleFactor)
{
HRESULT hr = S_OK;
//
// Set Image Scale Factor Trackbar
//
if (SUCCEEDED(hr))
{
TCHAR szScale[255 + 1] = {0};
// set the trackbar's current position.
SendDlgItemMessage(GVAR_LOCAL.hwndMain,
IDC_MAX_SIZE,
TBM_SETPOS,
(WPARAM) TRUE,
(LPARAM) dwImageScaleFactor);
hr = Util::FormatScale(GVAR_LOCAL.hInstance,
dwImageScaleFactor,
szScale,
sizeof(szScale) / sizeof(TCHAR));
SendDlgItemMessage(GVAR_LOCAL.hwndMain,
IDC_IMAGE_SIZE_DESC,
WM_SETTEXT,
0,
(LPARAM) szScale);
}
return hr;
}
///////////////////////////////
// EnableApplyButton
//
static void EnableApplyButton(BOOL bEnable)
{
EnableWindow(GetDlgItem(GVAR_LOCAL.hwndMain, IDC_APPLY), bEnable);
}
///////////////////////////////
// GetFirstSlideshowService
//
static HRESULT GetFirstSlideshowService(ISlideshowService **ppSlideshowService,
ISlideshowAlbum **ppSlideshowAlbum)
{
ASSERT(ppSlideshowService != NULL);
HRESULT hr = S_OK;
IEnumAlbums *pEnum = NULL;
IAlbumManager *pAlbumManager = NULL;
if (GVAR_pProjector == NULL)
{
hr = E_FAIL;
CHECK_S_OK2(hr, ("GetFirstSlideshowService received a NULL pointer"));
return hr;
}
if (hr == S_OK)
{
hr = GVAR_pProjector->QueryInterface(IID_IAlbumManager, (void**)&pAlbumManager);
}
if (hr == S_OK)
{
hr = pAlbumManager->EnumAlbums(&pEnum);
}
if (hr == S_OK)
{
hr = pEnum->Reset();
}
if (hr == S_OK)
{
ISlideshowAlbum *pSlideshowAlbum = NULL;
DWORD dwFetched = 0;
hr = pEnum->Next(1, &pSlideshowAlbum, &dwFetched);
if (hr == S_OK)
{
if (ppSlideshowService)
{
hr = pSlideshowAlbum->QueryInterface(IID_ISlideshowService,
(void**) ppSlideshowService);
}
if (ppSlideshowAlbum)
{
hr = pSlideshowAlbum->QueryInterface(IID_ISlideshowAlbum,
(void**) ppSlideshowAlbum);
}
if (pSlideshowAlbum)
{
pSlideshowAlbum->Release();
pSlideshowAlbum = NULL;
}
}
}
if (pEnum)
{
pEnum->Release();
pEnum = NULL;
}
if (pAlbumManager)
{
pAlbumManager->Release();
pAlbumManager = NULL;
}
return hr;
}
///////////////////////////////
// LoadCurrentSettings
//
static HRESULT LoadCurrentSettings()
{
USES_CONVERSION;
HRESULT hr = S_OK;
long lImageFreq = 0;
long lImageScaleFactor = 0;
TCHAR szImageDir[_MAX_PATH + 1] = {0};
BOOL bShowFileName = FALSE;
BOOL bAllowKeyControl = FALSE;
BOOL bStretchSmallImages = FALSE;
BSTR bstrImageDir = NULL;
ISlideshowService *pSlideshowService = NULL;
ISlideshowAlbum *pSlideshowAlbum = NULL;
ASSERT(GVAR_pProjector != NULL);
if (GVAR_pProjector == NULL)
{
DBG_ERR(("InitDlg, failed to get Image Frequency, slide show "
"projector object doesn't exist"));
return 0;
}
hr = GetFirstSlideshowService(&pSlideshowService, &pSlideshowAlbum);
if (hr != S_OK)
{
hr = E_FAIL;
CHECK_S_OK2(hr, ("LoadCurrentSettings, failed to get first Slideshow Service"));
return hr;
}
//
// Get the Image Frequency
//
hr = pSlideshowService->get_ImageFrequency(&lImageFreq);
if (SUCCEEDED(hr))
{
if (lImageFreq < MIN_IMAGE_FREQ_IN_SEC)
{
lImageFreq = MIN_IMAGE_FREQ_IN_SEC;
hr = pSlideshowService->put_ImageFrequency(lImageFreq);
}
else if (lImageFreq > MAX_IMAGE_FREQ_IN_SEC)
{
lImageFreq = MAX_IMAGE_FREQ_IN_SEC;
hr = pSlideshowService->put_ImageFrequency(lImageFreq);
}
}
//
// Set Image Frequency Trackbar
//
if (SUCCEEDED(hr))
{
SetImageFreqTrackbar((DWORD) lImageFreq);
}
//
// Get the Image Scale Factor
//
hr = pSlideshowService->get_ImageScaleFactor(&lImageScaleFactor);
if (SUCCEEDED(hr))
{
if (lImageScaleFactor < MIN_IMAGE_SCALE_FACTOR)
{
lImageScaleFactor = MIN_IMAGE_SCALE_FACTOR;
hr = pSlideshowService->put_ImageScaleFactor(lImageScaleFactor);
}
else if (lImageScaleFactor > MAX_IMAGE_SCALE_FACTOR)
{
lImageScaleFactor = MAX_IMAGE_SCALE_FACTOR;
hr = pSlideshowService->put_ImageScaleFactor(lImageScaleFactor);
}
}
//
// Set Image Scale Factor Trackbar
//
if (SUCCEEDED(hr))
{
SetImageScaleTrackbar((DWORD)lImageScaleFactor);
}
//
// Get the current Image Directory
//
hr = pSlideshowAlbum->get_ImagePath(&bstrImageDir);
// set the edit control's image directory to reflect the current
// image directory.
if (SUCCEEDED(hr))
{
HDC hDC = NULL;
TCHAR szImageDir[MAX_PATH + 1] = {0};
RECT rc = {0};
_tcsncpy(szImageDir,
OLE2T(bstrImageDir),
sizeof(szImageDir) / sizeof(TCHAR));
_tcsncpy(GVAR_LOCAL.szImagePath,
OLE2T(bstrImageDir),
sizeof(GVAR_LOCAL.szImagePath) / sizeof(TCHAR));
hDC = GetDC(GetDlgItem(GVAR_LOCAL.hwndMain, IDC_IMAGEDIR));
GetClientRect(GetDlgItem(GVAR_LOCAL.hwndMain, IDC_IMAGEDIR), &rc);
PathCompactPath(hDC, szImageDir, rc.right - rc.left);
SetDlgItemText(GVAR_LOCAL.hwndMain,
IDC_IMAGEDIR,
szImageDir);
if (hDC)
{
ReleaseDC(GetDlgItem(GVAR_LOCAL.hwndMain, IDC_IMAGEDIR), hDC);
hDC = NULL;
}
}
if (bstrImageDir)
{
::SysFreeString(bstrImageDir);
bstrImageDir = NULL;
}
//
// get the "ShowFilename" attribute
//
hr = pSlideshowService->get_ShowFileName(&bShowFileName);
// set the ShowFileName checkbox
if (SUCCEEDED(hr))
{
if (bShowFileName)
{
SendDlgItemMessage(GVAR_LOCAL.hwndMain,
IDC_DISPLAYFILENAME,
BM_SETCHECK,
BST_CHECKED,
0);
}
else
{
SendDlgItemMessage(GVAR_LOCAL.hwndMain,
IDC_DISPLAYFILENAME,
BM_SETCHECK,
BST_UNCHECKED,
0);
}
}
//
// get the "AllowKeyControl" attribute
//
hr = pSlideshowService->get_AllowKeyControl(&bAllowKeyControl);
// set the Allow Keyboard Control checkbox
if (SUCCEEDED(hr))
{
if (bAllowKeyControl)
{
SendDlgItemMessage(GVAR_LOCAL.hwndMain,
IDC_ALLOW_KEYBOARDCONTROL,
BM_SETCHECK,
BST_CHECKED,
0);
}
else
{
SendDlgItemMessage(GVAR_LOCAL.hwndMain,
IDC_ALLOW_KEYBOARDCONTROL,
BM_SETCHECK,
BST_UNCHECKED,
0);
}
}
//
// get the "StretchSmallImages" attribute
//
hr = pSlideshowService->get_StretchSmallImages(&bStretchSmallImages);
// set the Stretch Small Images Control checkbox
if (SUCCEEDED(hr))
{
if (bStretchSmallImages)
{
SendDlgItemMessage(GVAR_LOCAL.hwndMain,
IDC_ALLOWSTRETCHING,
BM_SETCHECK,
BST_CHECKED,
0);
}
else
{
SendDlgItemMessage(GVAR_LOCAL.hwndMain,
IDC_ALLOWSTRETCHING,
BM_SETCHECK,
BST_UNCHECKED,
0);
}
}
if (pSlideshowService)
{
pSlideshowService->Release();
pSlideshowService = NULL;
}
if (pSlideshowAlbum)
{
pSlideshowAlbum->Release();
pSlideshowAlbum = NULL;
}
return hr;
}
///////////////////////////////
// SaveCurrentSettings
//
static HRESULT SaveCurrentSettings()
{
HRESULT hr = S_OK;
DWORD_PTR dwImageFreq = 0;
DWORD_PTR dwImageScaleFactor = 0;
BOOL bShowFileName = FALSE;
BOOL bAllowKeyControl = FALSE;
BOOL bStretchSmallImages = FALSE;
LONG lState = 0;
ISlideshowService *pSlideshowService = NULL;
ISlideshowAlbum *pSlideshowAlbum = NULL;
ASSERT(GVAR_pProjector != NULL);
hr = GetFirstSlideshowService(&pSlideshowService, &pSlideshowAlbum);
if (hr != S_OK)
{
hr = E_FAIL;
CHECK_S_OK2(hr, ("LoadCurrentSettings, failed to get first Slideshow Service"));
return hr;
}
//
// get the image frequency trackbar value
//
dwImageFreq = (DWORD_PTR) SendDlgItemMessage(GVAR_LOCAL.hwndMain,
IDC_FREQUENCY,
TBM_GETPOS,
0,
0);
//
// get the image scale factor trackbar value
//
dwImageScaleFactor = (DWORD_PTR) SendDlgItemMessage(GVAR_LOCAL.hwndMain,
IDC_MAX_SIZE,
TBM_GETPOS,
0,
0);
// Get the Display File Name
bShowFileName = IsChecked(IDC_DISPLAYFILENAME);
// Get the Allow Key Control
bAllowKeyControl = IsChecked(IDC_ALLOW_KEYBOARDCONTROL);
// Get the Stretch Small Images
bStretchSmallImages = IsChecked(IDC_ALLOWSTRETCHING);
//
// set the image frequency
//
hr = pSlideshowService->put_ImageFrequency((DWORD) dwImageFreq);
if (FAILED(hr))
{
DBG_ERR(("SaveCurrentSettings, failed to set image frequency"));
}
//
// set the image scale factor
//
hr = pSlideshowService->put_ImageScaleFactor((DWORD) dwImageScaleFactor);
if (FAILED(hr))
{
DBG_ERR(("SaveCurrentSettings, failed to set image scale factor"));
}
//
// put the show file name attribute
//
hr = pSlideshowService->put_ShowFileName(bShowFileName);
if (FAILED(hr))
{
DBG_ERR(("SaveCurrentSettings, failed to set show filename property"));
}
//
// put the allow key control attribute
//
hr = pSlideshowService->put_AllowKeyControl(bAllowKeyControl);
if (FAILED(hr))
{
DBG_ERR(("SaveCurrentSettings, failed to set Allow Key Control property"));
}
//
// put the Stretch Small Images control attribute
//
hr = pSlideshowService->put_StretchSmallImages(bStretchSmallImages);
if (FAILED(hr))
{
DBG_ERR(("SaveCurrentSettings, failed to set StretchSmallImages property"));
}
//
// set the control's image directory
// Notice we store the image directory rather than the Projector
// server control because it is not something that can be
// set remotely. Only items that can be configured by the client
// are stored by the COM Projector Server
//
hr = pSlideshowAlbum->put_ImagePath(GVAR_LOCAL.szImagePath);
EnableApplyButton(FALSE);
if (pSlideshowService)
{
pSlideshowService->Release();
pSlideshowService = NULL;
}
if (pSlideshowAlbum)
{
pSlideshowAlbum->Release();
pSlideshowAlbum = NULL;
}
return hr;
}