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