294 lines
7.6 KiB
C++
294 lines
7.6 KiB
C++
// Copyright (c) 1999 Microsoft Corporation. All Rights Reserved.
|
|
// dvdopt.cpp : Implementation of Cdvdopt
|
|
|
|
#include "stdafx.h"
|
|
#include "Msdvdopt.h"
|
|
#include "dvdopt.h"
|
|
#include "COptDlg.h"
|
|
#include "override.h"
|
|
|
|
extern LPTSTR LoadStringFromRes(DWORD redId);
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// Cdvdopt
|
|
|
|
/*************************************************************/
|
|
/* Name: Cdvdopt
|
|
/* Description: Constructor
|
|
/*************************************************************/
|
|
Cdvdopt::Cdvdopt()
|
|
{
|
|
m_pDlgOpt = NULL;
|
|
|
|
m_pDvd = NULL;
|
|
m_hParentWnd = NULL;
|
|
}
|
|
|
|
/*************************************************************/
|
|
/* Name: ~Cdvdopt
|
|
/* Description: destructor
|
|
/*************************************************************/
|
|
Cdvdopt::~Cdvdopt(){
|
|
|
|
ATLTRACE(TEXT("In the destructor of the CDVDOPT !\n"));
|
|
CleanUp();
|
|
#ifdef _DEBUG
|
|
m_pDvd.Release();
|
|
#endif
|
|
}/* end of function Cdvdopt */
|
|
|
|
/*************************************************************/
|
|
/* Name: CleanUp
|
|
/* Description: Delete all dialogs
|
|
/*************************************************************/
|
|
void Cdvdopt::CleanUp()
|
|
{
|
|
if (m_pDlgOpt) {
|
|
delete m_pDlgOpt;
|
|
m_pDlgOpt = NULL;
|
|
}
|
|
}
|
|
|
|
/*************************************************************/
|
|
/* Name: get_WebDVD
|
|
/* Description: Get IDispatch of the IMSWebDVD that the options
|
|
/* dialog is controling
|
|
/*************************************************************/
|
|
STDMETHODIMP Cdvdopt::get_WebDVD(IDispatch **pVal){
|
|
|
|
HRESULT hr = E_FAIL;
|
|
|
|
if(!m_pDvd){
|
|
|
|
return(hr);
|
|
}/* end of if statement */
|
|
|
|
hr = m_pDvd->QueryInterface(IID_IDispatch, (LPVOID*) pVal);
|
|
|
|
return hr;
|
|
}
|
|
|
|
/*************************************************************/
|
|
/* Name: put_WebDVD
|
|
/* Description: Set IDispatch of a IMSWebDVD that the options
|
|
/* dialog is going to control
|
|
/*************************************************************/
|
|
STDMETHODIMP Cdvdopt::put_WebDVD(IDispatch *newVal){
|
|
|
|
HRESULT hr = newVal->QueryInterface(IID_IMSWebDVD, (LPVOID*) &m_pDvd);
|
|
|
|
#ifdef _DEBUG2
|
|
IFilterGraph* pGraph = NULL;
|
|
hr = pDvd->QueryInterface(IID_IFilterGraph, (LPVOID*) &pGraph);
|
|
ATLASSERT(SUCCEEDED(hr));
|
|
if (SUCCEEDED(hr))
|
|
pGraph->Release();
|
|
#endif
|
|
|
|
CleanUp();
|
|
|
|
m_pDlgOpt = new COptionsDlg(m_pDvd);
|
|
m_pDlgOpt->SetDvdOpt(this);
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
/*************************************************************/
|
|
/* Name: get_ParentWindow
|
|
/* Description: Get parent window of the options dialog
|
|
/*************************************************************/
|
|
STDMETHODIMP Cdvdopt::get_ParentWindow(VARIANT *pVal)
|
|
{
|
|
if (NULL == pVal)
|
|
return E_POINTER;
|
|
|
|
/*
|
|
* BUGBUG: If pVal was a properly initialized variant, we should
|
|
* call VariantClear to free any pointers. If it wasn't initialized
|
|
* VariantInit is the right thing to call instead. I prefer a leak
|
|
* to a crash so I'll use VariantInit below
|
|
*/
|
|
|
|
VariantInit(pVal);
|
|
|
|
#ifdef _WIN64
|
|
pVal->vt = VT_I8;
|
|
pVal->llVal = (LONG_PTR)m_hParentWnd;
|
|
#else
|
|
pVal->vt = VT_I4;
|
|
pVal->lVal = (LONG_PTR)m_hParentWnd;
|
|
#endif
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
/*************************************************************/
|
|
/* Name: put_ParentWindow
|
|
/* Description: Set parent window of the options dialog
|
|
/*************************************************************/
|
|
STDMETHODIMP Cdvdopt::put_ParentWindow(VARIANT newVal)
|
|
{
|
|
VARIANT dest;
|
|
VariantInit(&dest);
|
|
HRESULT hr = S_OK;
|
|
#ifdef _WIN64
|
|
hr = VariantChangeTypeEx(&dest, &newVal, 0, 0, VT_I8);
|
|
if (FAILED(hr))
|
|
return hr;
|
|
m_hParentWnd = (HWND) dest.llVal;
|
|
#else
|
|
hr = VariantChangeTypeEx(&dest, &newVal, 0, 0, VT_I4);
|
|
if (FAILED(hr))
|
|
return hr;
|
|
m_hParentWnd = (HWND) dest.lVal;
|
|
#endif
|
|
|
|
return hr;
|
|
}
|
|
|
|
/*************************************************************/
|
|
/* Name: Show
|
|
/* Description: Show the options dialog
|
|
/*************************************************************/
|
|
STDMETHODIMP Cdvdopt::Show()
|
|
{
|
|
m_pDlgOpt->DoModal(m_hParentWnd);
|
|
return S_OK;
|
|
}
|
|
|
|
/*************************************************************/
|
|
/* Name: Close
|
|
/* Description: Close the options dialog
|
|
/*************************************************************/
|
|
STDMETHODIMP Cdvdopt::Close()
|
|
{
|
|
m_pDlgOpt->EndDialog(0);
|
|
return S_OK;
|
|
}
|
|
|
|
/*************************************************************/
|
|
/* Name: Power
|
|
/* Description: Raise a number to a power
|
|
/*************************************************************/
|
|
double Power(LONG n, LONG p)
|
|
{
|
|
double result = 1;
|
|
if (p==0) return result;
|
|
if (p>0) {
|
|
while (p--)
|
|
result *= n;
|
|
return result;
|
|
}
|
|
else {
|
|
while (p++)
|
|
result *= n;
|
|
return 1/result;
|
|
}
|
|
}
|
|
|
|
/*************************************************************/
|
|
/* Name: get_ForwardScanSpeed
|
|
/* Description: return the forward scan speed
|
|
/*************************************************************/
|
|
STDMETHODIMP Cdvdopt::get_ForwardScanSpeed(double *pVal)
|
|
{
|
|
*pVal = m_pDlgOpt->m_dFFSpeed;
|
|
return S_OK;
|
|
}
|
|
|
|
/*************************************************************/
|
|
/* Name: put_ForwardScanSpeed
|
|
/* Description: return the forward scan speed
|
|
/*************************************************************/
|
|
STDMETHODIMP Cdvdopt::put_ForwardScanSpeed(double newVal)
|
|
{
|
|
m_pDlgOpt->m_dFFSpeed = newVal;
|
|
return S_OK;
|
|
}
|
|
|
|
/*************************************************************/
|
|
/* Name: get_BackwardScanSpeed
|
|
/* Description: return backward scan speed
|
|
/*************************************************************/
|
|
STDMETHODIMP Cdvdopt::get_BackwardScanSpeed(double *pVal)
|
|
{
|
|
*pVal = m_pDlgOpt->m_dBWSpeed;
|
|
return S_OK;
|
|
}
|
|
|
|
/*************************************************************/
|
|
/* Name: put_BackwardScanSpeed
|
|
/* Description: return play speed
|
|
/*************************************************************/
|
|
STDMETHODIMP Cdvdopt::put_BackwardScanSpeed(double newVal)
|
|
{
|
|
m_pDlgOpt->m_dBWSpeed = newVal;
|
|
return S_OK;
|
|
}
|
|
|
|
/*************************************************************/
|
|
/* Name: get_PlaySpeed
|
|
/* Description: return play speed
|
|
/*************************************************************/
|
|
STDMETHODIMP Cdvdopt::get_PlaySpeed(double *pVal)
|
|
{
|
|
*pVal = m_pDlgOpt->m_dPlaySpeed;
|
|
return S_OK;
|
|
}
|
|
|
|
/*************************************************************/
|
|
/* Name: put_PlaySpeed
|
|
/* Description: return play speed
|
|
/*************************************************************/
|
|
STDMETHODIMP Cdvdopt::put_PlaySpeed(double newVal)
|
|
{
|
|
m_pDlgOpt->m_dPlaySpeed = newVal;
|
|
return S_OK;
|
|
}
|
|
|
|
/*************************************************************/
|
|
/* Name: ParentalLevelOverride
|
|
/* Description:
|
|
/*************************************************************/
|
|
STDMETHODIMP Cdvdopt::ParentalLevelOverride(PG_OVERRIDE_REASON reason)
|
|
{
|
|
COverrideDlg dlg(m_pDvd);
|
|
dlg.SetReason(reason);
|
|
dlg.DoModal();
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
int DVDMessageBox(HWND hWnd, LPCTSTR lpszText, LPCTSTR lpszCaption, UINT nType)
|
|
{
|
|
LPTSTR csCaption;
|
|
if(lpszCaption == NULL)
|
|
{
|
|
csCaption = LoadStringFromRes(IDS_MSGBOX_TITLE);
|
|
MessageBox(hWnd, lpszText, csCaption, nType );
|
|
delete[] csCaption;
|
|
return 0;
|
|
}
|
|
else
|
|
return MessageBox(hWnd, lpszText, lpszCaption, nType );
|
|
}
|
|
|
|
int DVDMessageBox(HWND hWnd, UINT nID, LPCTSTR lpszCaption, UINT nType)
|
|
{
|
|
LPTSTR csMsgString, csCaption;
|
|
csMsgString = LoadStringFromRes(nID);
|
|
if(lpszCaption == NULL)
|
|
{
|
|
csCaption = LoadStringFromRes(IDS_MSGBOX_TITLE);
|
|
MessageBox(hWnd, csMsgString, csCaption, nType );
|
|
delete[] csCaption;
|
|
}
|
|
else {
|
|
MessageBox(hWnd, csMsgString, lpszCaption, nType );
|
|
}
|
|
|
|
delete[] csMsgString;
|
|
return 0;
|
|
}
|
|
|