275 lines
9 KiB
C++
275 lines
9 KiB
C++
|
// Copyright (c) 1999 Microsoft Corporation. All Rights Reserved.
|
||
|
/*************************************************************/
|
||
|
/* Name: sprm_OnInitDialog
|
||
|
/* Description: OnInitDialog for the Viewing Options page
|
||
|
/*************************************************************/
|
||
|
#include "stdafx.h"
|
||
|
#include "COptDlg.h"
|
||
|
|
||
|
// Language ID's supported by DVD Nav
|
||
|
WORD langIDs[] = {
|
||
|
LANG_AFRIKAANS ,
|
||
|
LANG_ALBANIAN ,
|
||
|
LANG_ARABIC ,
|
||
|
LANG_BASQUE ,
|
||
|
LANG_BELARUSIAN ,
|
||
|
LANG_BULGARIAN ,
|
||
|
LANG_CATALAN ,
|
||
|
LANG_CHINESE ,
|
||
|
LANG_CROATIAN ,
|
||
|
LANG_CZECH ,
|
||
|
LANG_DANISH ,
|
||
|
LANG_DUTCH ,
|
||
|
LANG_ENGLISH ,
|
||
|
LANG_ESTONIAN ,
|
||
|
LANG_FAEROESE ,
|
||
|
LANG_FARSI ,
|
||
|
LANG_FINNISH ,
|
||
|
LANG_FRENCH ,
|
||
|
LANG_GERMAN ,
|
||
|
LANG_GREEK ,
|
||
|
LANG_HEBREW ,
|
||
|
LANG_HUNGARIAN ,
|
||
|
LANG_ICELANDIC ,
|
||
|
LANG_INDONESIAN ,
|
||
|
LANG_ITALIAN ,
|
||
|
LANG_JAPANESE ,
|
||
|
LANG_KOREAN ,
|
||
|
LANG_LATVIAN ,
|
||
|
LANG_LITHUANIAN ,
|
||
|
LANG_MALAY ,
|
||
|
LANG_NORWEGIAN ,
|
||
|
LANG_POLISH ,
|
||
|
LANG_PORTUGUESE ,
|
||
|
LANG_ROMANIAN ,
|
||
|
LANG_RUSSIAN ,
|
||
|
LANG_SERBIAN ,
|
||
|
LANG_SLOVAK ,
|
||
|
LANG_SLOVENIAN ,
|
||
|
LANG_SPANISH ,
|
||
|
LANG_SWAHILI ,
|
||
|
LANG_SWEDISH ,
|
||
|
LANG_THAI ,
|
||
|
LANG_TURKISH ,
|
||
|
LANG_UKRAINIAN
|
||
|
};
|
||
|
|
||
|
/*************************************************************/
|
||
|
/* Name: sprm_InitLangList
|
||
|
/* Description: Initial a combo box with available languages
|
||
|
/* highlight the one with LCID equal to id
|
||
|
/*************************************************************/
|
||
|
HRESULT COptionsDlg::sprm_InitLangList(HWND cList, WORD id)
|
||
|
{
|
||
|
USES_CONVERSION;
|
||
|
::SendMessage(cList, CB_RESETCONTENT, 0, 0);
|
||
|
|
||
|
LPTSTR pszDefault = LoadStringFromRes(IDS_INI_TITLE_DEFAULT);
|
||
|
::SendMessage(cList, CB_INSERTSTRING, 0, (LPARAM)pszDefault);
|
||
|
::SendMessage(cList, CB_SETCURSEL, 0, 0);
|
||
|
delete pszDefault;
|
||
|
|
||
|
if (id == LANG_NEUTRAL) {
|
||
|
id = PRIMARYLANGID(::GetUserDefaultLangID());
|
||
|
}
|
||
|
|
||
|
for (int i=0; i<sizeof(langIDs)/sizeof(WORD); i++) {
|
||
|
CComBSTR strLang;
|
||
|
m_pDvd->GetLangFromLangID(long(langIDs[i]), &strLang);
|
||
|
::SendMessage(cList, CB_INSERTSTRING, (UINT)-1, (LPARAM)OLE2T(strLang));
|
||
|
if (langIDs[i] == id)
|
||
|
// First item in list is "Title Default"
|
||
|
::SendMessage(cList, CB_SETCURSEL, i+1, 0);
|
||
|
}
|
||
|
|
||
|
return S_OK;
|
||
|
}
|
||
|
|
||
|
/*************************************************************/
|
||
|
/* Name: sprm_OnInitDialog
|
||
|
/* Description:
|
||
|
/*************************************************************/
|
||
|
HRESULT COptionsDlg::sprm_OnInitDialog(HWND hwndDlg)
|
||
|
{
|
||
|
HWND hwndAudList = ::GetDlgItem(hwndDlg, IDC_AUDIO_LANG);
|
||
|
HWND hwndSPList = ::GetDlgItem(hwndDlg, IDC_SUBPIC_LANG);
|
||
|
HWND hwndMenuList = ::GetDlgItem(hwndDlg, IDC_MENU_LANG);
|
||
|
HWND screenSaverCheck = ::GetDlgItem(hwndDlg, IDC_DISABLE_SCREENSAVER);
|
||
|
HWND bookmarkOnStopCheck = ::GetDlgItem(hwndDlg, IDC_BOOKMARK_STOP);
|
||
|
HWND bookmarkOnCloseCheck = ::GetDlgItem(hwndDlg, IDC_BOOKMARK_CLOSE);
|
||
|
|
||
|
if (!hwndAudList || !hwndSPList || !hwndMenuList)
|
||
|
return S_FALSE;
|
||
|
|
||
|
try {
|
||
|
|
||
|
HRESULT hr = S_OK;
|
||
|
CComPtr<IMSDVDAdm> pDvdAdm;
|
||
|
hr = GetDvdAdm((LPVOID*) &pDvdAdm);
|
||
|
if (FAILED(hr) || !pDvdAdm)
|
||
|
throw(hr);
|
||
|
|
||
|
VARIANT_BOOL temp;
|
||
|
LCID audioLCID;
|
||
|
LCID subpictureLCID;
|
||
|
LCID menuLCID;
|
||
|
|
||
|
pDvdAdm->get_DisableScreenSaver(&temp);
|
||
|
BOOL fDisabled = (temp == VARIANT_FALSE? FALSE:TRUE);
|
||
|
::SendMessage(screenSaverCheck, BM_SETCHECK, fDisabled, 0);
|
||
|
|
||
|
pDvdAdm->get_BookmarkOnStop(&temp);
|
||
|
fDisabled = (temp == VARIANT_FALSE? FALSE:TRUE);
|
||
|
::SendMessage(bookmarkOnStopCheck, BM_SETCHECK, fDisabled, 0);
|
||
|
|
||
|
pDvdAdm->get_BookmarkOnClose(&temp);
|
||
|
fDisabled = (temp == VARIANT_FALSE? FALSE:TRUE);
|
||
|
::SendMessage(bookmarkOnCloseCheck, BM_SETCHECK, fDisabled, 0);
|
||
|
|
||
|
pDvdAdm->get_DefaultAudioLCID((long*)&audioLCID);
|
||
|
pDvdAdm->get_DefaultSubpictureLCID((long*)&subpictureLCID);
|
||
|
pDvdAdm->get_DefaultMenuLCID((long*)&menuLCID);
|
||
|
|
||
|
sprm_InitLangList(hwndAudList, PRIMARYLANGID(LANGIDFROMLCID(audioLCID)));
|
||
|
sprm_InitLangList(hwndSPList, PRIMARYLANGID(LANGIDFROMLCID(subpictureLCID)));
|
||
|
sprm_InitLangList(hwndMenuList, PRIMARYLANGID(LANGIDFROMLCID(menuLCID)));
|
||
|
|
||
|
}
|
||
|
catch (HRESULT hr) {
|
||
|
DVDMessageBox(hwndDlg, IDS_SPRM_FAIL);
|
||
|
sprm_OnInitDialog(hwndDlg);
|
||
|
return hr;
|
||
|
}
|
||
|
|
||
|
return S_OK;
|
||
|
}
|
||
|
|
||
|
/*************************************************************/
|
||
|
/* Name: sprm_OnApply
|
||
|
/* Description: OnApply for Viewing Options page
|
||
|
/*************************************************************/
|
||
|
HRESULT COptionsDlg::sprm_OnApply(HWND hwnd)
|
||
|
{
|
||
|
HWND hwndMenuList = ::GetDlgItem(hwnd, IDC_MENU_LANG);
|
||
|
HWND hwndSPList = ::GetDlgItem(hwnd, IDC_SUBPIC_LANG);
|
||
|
HWND hwndAudList = ::GetDlgItem(hwnd, IDC_AUDIO_LANG);
|
||
|
HWND screenSaverCheck = ::GetDlgItem(hwnd, IDC_DISABLE_SCREENSAVER);
|
||
|
HWND bookmarkOnStopCheck = ::GetDlgItem(hwnd, IDC_BOOKMARK_STOP);
|
||
|
HWND bookmarkOnCloseCheck = ::GetDlgItem(hwnd, IDC_BOOKMARK_CLOSE);
|
||
|
|
||
|
// Get current selections;
|
||
|
INT nAudioCurSel = (INT) SendMessage(hwndAudList, CB_GETCURSEL, 0, 0);
|
||
|
INT nMenuCurSel = (INT) SendMessage(hwndMenuList, CB_GETCURSEL, 0, 0);
|
||
|
INT nSPCurSel = (INT) SendMessage(hwndSPList, CB_GETCURSEL, 0, 0);
|
||
|
|
||
|
try {
|
||
|
HRESULT hr = S_OK;
|
||
|
CComPtr<IMSDVDAdm> pDvdAdm;
|
||
|
hr = GetDvdAdm((LPVOID*) &pDvdAdm);
|
||
|
if (FAILED(hr) || !pDvdAdm)
|
||
|
throw(hr);
|
||
|
|
||
|
|
||
|
if (nAudioCurSel>=0 || nMenuCurSel>=0 || nSPCurSel>=0) {
|
||
|
|
||
|
BOOL bSubpictureLCIDChanged = FALSE;
|
||
|
BOOL bAudioLCIDChanged = FALSE;
|
||
|
BOOL bMenuLCIDChanged = FALSE;
|
||
|
|
||
|
// Title default
|
||
|
LCID subpictureLCID = (LCID)-1;
|
||
|
LCID audioLCID = (LCID)-1;
|
||
|
LCID menuLCID = (LCID)-1;
|
||
|
LCID savedLCID;
|
||
|
|
||
|
if (nAudioCurSel>0) {
|
||
|
audioLCID = MAKELCID(MAKELANGID(langIDs[nAudioCurSel-1], SUBLANG_DEFAULT), SORT_DEFAULT);
|
||
|
}
|
||
|
pDvdAdm->get_DefaultAudioLCID((long*)&savedLCID);
|
||
|
if (audioLCID != savedLCID) {
|
||
|
bAudioLCIDChanged = TRUE;
|
||
|
}
|
||
|
|
||
|
if (nSPCurSel>0) {
|
||
|
subpictureLCID = MAKELCID(MAKELANGID(langIDs[nSPCurSel-1], SUBLANG_DEFAULT), SORT_DEFAULT);
|
||
|
}
|
||
|
pDvdAdm->get_DefaultSubpictureLCID((long*)&savedLCID);
|
||
|
if (subpictureLCID != savedLCID) {
|
||
|
bSubpictureLCIDChanged = TRUE;
|
||
|
}
|
||
|
|
||
|
if (nMenuCurSel>0) {
|
||
|
menuLCID = MAKELCID(MAKELANGID(langIDs[nMenuCurSel-1], SUBLANG_DEFAULT), SORT_DEFAULT);
|
||
|
}
|
||
|
pDvdAdm->get_DefaultMenuLCID((long*)&savedLCID);
|
||
|
if (menuLCID != savedLCID) {
|
||
|
bMenuLCIDChanged = TRUE;
|
||
|
}
|
||
|
|
||
|
if (bAudioLCIDChanged || bSubpictureLCIDChanged || bMenuLCIDChanged) {
|
||
|
//m_pDvd->SaveState();
|
||
|
hr = m_pDvd->Stop();
|
||
|
if (FAILED(hr))
|
||
|
throw (hr);
|
||
|
|
||
|
if (bAudioLCIDChanged) {
|
||
|
if (::IsValidLocale(audioLCID, LCID_SUPPORTED)){
|
||
|
hr = m_pDvd->SelectDefaultAudioLanguage(audioLCID, 0);
|
||
|
if (FAILED(hr))
|
||
|
throw (hr);
|
||
|
}
|
||
|
hr = pDvdAdm->put_DefaultAudioLCID(audioLCID);
|
||
|
}
|
||
|
if (bSubpictureLCIDChanged) {
|
||
|
if (::IsValidLocale(subpictureLCID, LCID_SUPPORTED)){
|
||
|
hr = m_pDvd->SelectDefaultSubpictureLanguage(subpictureLCID, dvdSPExt_NotSpecified);
|
||
|
if (FAILED(hr))
|
||
|
throw (hr);
|
||
|
}
|
||
|
hr = pDvdAdm->put_DefaultSubpictureLCID(subpictureLCID);
|
||
|
}
|
||
|
if (bMenuLCIDChanged) {
|
||
|
if (::IsValidLocale(menuLCID, LCID_SUPPORTED)){
|
||
|
hr = m_pDvd->put_DefaultMenuLanguage(menuLCID);
|
||
|
if (FAILED(hr))
|
||
|
throw (hr);
|
||
|
}
|
||
|
hr = pDvdAdm->put_DefaultMenuLCID(menuLCID);
|
||
|
}
|
||
|
|
||
|
hr = m_pDvd->Play();
|
||
|
if (FAILED(hr))
|
||
|
throw (hr);
|
||
|
//m_pDvd->RestoreState();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
BOOL fDisabled = (BOOL) SendMessage(screenSaverCheck, BM_GETCHECK, 0, 0);
|
||
|
VARIANT_BOOL temp = (fDisabled==FALSE? VARIANT_FALSE:VARIANT_TRUE);
|
||
|
hr = pDvdAdm->put_DisableScreenSaver(temp);
|
||
|
if (FAILED(hr))
|
||
|
throw (hr);
|
||
|
|
||
|
BOOL fEnabled = (BOOL) SendMessage(bookmarkOnStopCheck, BM_GETCHECK, 0, 0);
|
||
|
temp = (fEnabled==FALSE? VARIANT_FALSE:VARIANT_TRUE);
|
||
|
hr = pDvdAdm->put_BookmarkOnStop(temp);
|
||
|
if (FAILED(hr))
|
||
|
throw (hr);
|
||
|
|
||
|
fEnabled = (BOOL) SendMessage(bookmarkOnCloseCheck, BM_GETCHECK, 0, 0);
|
||
|
temp = (fEnabled==FALSE? VARIANT_FALSE:VARIANT_TRUE);
|
||
|
hr = pDvdAdm->put_BookmarkOnClose(temp);
|
||
|
if (FAILED(hr))
|
||
|
throw (hr);
|
||
|
|
||
|
}
|
||
|
catch (HRESULT hr) {
|
||
|
DVDMessageBox(hwnd, IDS_SPRM_FAIL);
|
||
|
sprm_OnInitDialog(hwnd);
|
||
|
return hr;
|
||
|
}
|
||
|
|
||
|
return S_OK;
|
||
|
}
|
||
|
|