// 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; iGetLangFromLangID(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 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 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; }