dlg_WavSettings.cpp 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. /******************************************************************************
  2. |* THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
  3. |* ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
  4. |* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
  5. |* PARTICULAR PURPOSE.
  6. |*
  7. |* Copyright 1995-2005 Nero AG. All Rights Reserved.
  8. |*-----------------------------------------------------------------------------
  9. |* PROJECT: Nero Plugin Manager Example
  10. |*
  11. |* FILE: dlg_WavSettings.cpp
  12. |*
  13. |* PURPOSE: Implementation of the target item settings editor dialog.
  14. ******************************************************************************/
  15. #include "stdafx.h"
  16. #include "dlg_WavSettings.h"
  17. #include "AudioPluginEnv.h"
  18. #ifdef _DEBUG
  19. #define new DEBUG_NEW
  20. #undef THIS_FILE
  21. static char THIS_FILE[] = __FILE__;
  22. #endif
  23. extern IAudioPluginMgr* g_pPluginMgr;
  24. // This class doesn't have a default constructor, it must be initialized
  25. // by this one, it receives an array of item handles, font and the language.
  26. CWavSettingsDlg::CWavSettingsDlg(SWavFormat** parItems, int iItemNum)
  27. : CDialog(CWavSettingsDlg::IDD, NULL),
  28. m_parItems (parItems),
  29. m_iItemNumber (iItemNum),
  30. m_pTranslator (NULL)
  31. {
  32. //{{AFX_DATA_INIT(CWavSettingsDlg)
  33. m_iChannels = -1;
  34. m_iSampleSize = -1;
  35. m_csFreq = _T("");
  36. //}}AFX_DATA_INIT
  37. }
  38. void CWavSettingsDlg::DoDataExchange(CDataExchange* pDX)
  39. {
  40. CDialog::DoDataExchange(pDX);
  41. //{{AFX_DATA_MAP(CWavSettingsDlg)
  42. DDX_Control(pDX, IDCOMBO_FREQ, m_comboFreq);
  43. DDX_Control(pDX, IDCOMBO_SAMPLE_SIZE, m_comboSampleSize);
  44. DDX_Control(pDX, IDCOMBO_CHANNELS, m_comboChannels);
  45. DDX_CBIndex(pDX, IDCOMBO_CHANNELS, m_iChannels);
  46. DDX_CBIndex(pDX, IDCOMBO_SAMPLE_SIZE, m_iSampleSize);
  47. DDX_CBString(pDX, IDCOMBO_FREQ, m_csFreq);
  48. //}}AFX_DATA_MAP
  49. }
  50. BEGIN_MESSAGE_MAP(CWavSettingsDlg, CDialog)
  51. //{{AFX_MSG_MAP(CWavSettingsDlg)
  52. ON_WM_DESTROY()
  53. //}}AFX_MSG_MAP
  54. END_MESSAGE_MAP()
  55. // Merges up the fields from received items and initializes controls.
  56. BOOL CWavSettingsDlg::OnInitDialog()
  57. {
  58. CDialog::OnInitDialog();
  59. if(!(m_parItems && m_iItemNumber))
  60. {
  61. ASSERT(FALSE);
  62. EndDialog(IDCANCEL);
  63. return TRUE;
  64. }
  65. SWavFormat mi;
  66. memset(&mi, 0xff, sizeof(SWavFormat));
  67. // Finding equal and different fields in
  68. // items received. Fields which are different
  69. // in mi will have value of MUL_VAL
  70. for(int iCurField = 0; iCurField < (sizeof(SWavFormat) / sizeof(DWORD));
  71. iCurField++)
  72. {
  73. DWORD dwCurValue = MUL_VAL;
  74. for(int iCurItem = 0; iCurItem < m_iItemNumber; iCurItem++)
  75. {
  76. DWORD* pItem = (DWORD*)m_parItems[iCurItem];
  77. if(pItem)
  78. {
  79. DWORD dwCurItemField = pItem[iCurField];
  80. if (dwCurValue == MUL_VAL)
  81. dwCurValue = dwCurItemField;
  82. else
  83. {
  84. if (dwCurValue != dwCurItemField)
  85. break;
  86. }
  87. }
  88. else
  89. {
  90. ASSERT(FALSE);
  91. }
  92. }
  93. // all the items have the same value
  94. if (iCurItem == m_iItemNumber)
  95. ((DWORD*)&mi)[iCurField] = dwCurValue;
  96. }
  97. // Initializing controls from mi
  98. // Filling the frequency combo
  99. int iarSampleRates[] =
  100. {
  101. 6000, 8000, 11025, 12000, 16000, 22050,
  102. 32000, 32075, 36000, 44100, 48000
  103. };
  104. for(int i = 0; i < sizeof(iarSampleRates) / sizeof(int); i++)
  105. {
  106. int iValue = iarSampleRates[i];
  107. CString csTemp;
  108. csTemp.Format("%d", iValue);
  109. m_comboFreq.SetItemData(m_comboFreq.AddString(csTemp), iValue);
  110. }
  111. if(mi.m_iSamplesPerSecond != MUL_VAL)
  112. m_csFreq.Format("%d", mi.m_iSamplesPerSecond);
  113. int iarSampleSizes[] =
  114. {
  115. BITS_PER_BYTE,
  116. BITS_PER_WORD,
  117. BITS_PER_3BYTE,
  118. BITS_PER_DWORD
  119. };
  120. for(i = 0; i < sizeof(iarSampleSizes) / sizeof(int); i++)
  121. {
  122. m_comboSampleSize.SetItemData(i, iarSampleSizes[i]);
  123. if(mi.m_iBitsPerSample == iarSampleSizes[i])
  124. m_iSampleSize = i;
  125. }
  126. int iarChannelsNumber[] =
  127. {
  128. 1,
  129. 2
  130. };
  131. for(i = 0; i < sizeof(iarChannelsNumber) / sizeof(int); i++)
  132. {
  133. m_comboChannels.SetItemData(i, iarChannelsNumber[i]);
  134. if (mi.m_iChannels == iarChannelsNumber[i])
  135. m_iChannels = i;
  136. }
  137. UpdateData(FALSE);
  138. CComQIPtr<ILanguage> pLang = g_pPluginMgr;
  139. ASSERT(pLang);
  140. if(pLang)
  141. {
  142. m_pTranslator = CreateTranslator(IDR_PLUGIN_NLSDATA,
  143. pLang->GetLanguage());
  144. m_pTranslator->TranslateWindow(m_hWnd);
  145. }
  146. return TRUE;
  147. }
  148. // Stores settings from controls in items and closes the dialog
  149. void CWavSettingsDlg::OnOK()
  150. {
  151. UpdateData(TRUE);
  152. DWORD dwarDataFromScr[sizeof(SWavFormat) / sizeof(DWORD)] =
  153. {
  154. m_csFreq.IsEmpty()? MUL_VAL: atoi(m_csFreq),
  155. m_comboSampleSize.GetItemData(m_iSampleSize),
  156. m_comboChannels.GetItemData(m_iChannels)
  157. };
  158. for(int iCurItem = 0; iCurItem < m_iItemNumber; iCurItem++)
  159. {
  160. DWORD* pItem = (DWORD*)m_parItems[iCurItem];
  161. for(int iField = 0, iFieldNum = sizeof(SWavFormat) / sizeof(DWORD);
  162. iField < iFieldNum; iField++)
  163. {
  164. DWORD dwField = dwarDataFromScr[iField];
  165. if(dwField != MUL_VAL)
  166. pItem[iField] = dwField;
  167. }
  168. }
  169. CDialog::OnOK();
  170. }
  171. // Destroys the translator after the dialog has been closed
  172. void CWavSettingsDlg::OnDestroy()
  173. {
  174. CDialog::OnDestroy();
  175. DestroyTranslator(m_pTranslator);
  176. }