PPageFilters.cpp
上传用户:xjjlds
上传日期:2015-12-05
资源大小:22823k
文件大小:6k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. /* 
  2.  * Copyright (C) 2003-2005 Gabest
  3.  * http://www.gabest.org
  4.  *
  5.  *  This Program is free software; you can redistribute it and/or modify
  6.  *  it under the terms of the GNU General Public License as published by
  7.  *  the Free Software Foundation; either version 2, or (at your option)
  8.  *  any later version.
  9.  *   
  10.  *  This Program is distributed in the hope that it will be useful,
  11.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13.  *  GNU General Public License for more details.
  14.  *   
  15.  *  You should have received a copy of the GNU General Public License
  16.  *  along with GNU Make; see the file COPYING.  If not, write to
  17.  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 
  18.  *  http://www.gnu.org/copyleft/gpl.html
  19.  *
  20.  */
  21. // PPageFilters.cpp : implementation file
  22. //
  23. #include "stdafx.h"
  24. #include "mplayerc.h"
  25. #include "PPageFilters.h"
  26. #include "....filtersfilters.h"
  27. #include ".ppagefilters.h"
  28. static struct filter_t {LPCTSTR label; int type; int flag; UINT nHintID;} s_filters[] = 
  29. {
  30. {_T("AVI"), 0, SRC_AVI, IDS_SRC_AVI},
  31. {_T("CDDA (Audio CD)"), 0, SRC_CDDA, IDS_SRC_CDDA},
  32. {_T("CDXA (VCD/SVCD/XCD)"), 0, SRC_CDXA, IDS_SRC_CDXA},
  33. {_T("Dirac"), 0, SRC_DIRAC, IDS_SRC_DIRAC},
  34. {_T("DirectShow Media"), 0, SRC_DSM, IDS_SRC_DSM},
  35. {_T("DTS/AC3"), 0, SRC_DTSAC3, IDS_SRC_DTSAC3},
  36. {_T("DVD Video Title Set"), 0, SRC_VTS, IDS_SRC_VTS},
  37. {_T("DVD2AVI Project File"), 0, SRC_D2V, IDS_SRC_D2V},
  38. {_T("FLI/FLC"), 0, SRC_FLIC, IDS_SRC_FLIC},
  39. {_T("Matroska"), 0, SRC_MATROSKA, IDS_SRC_MATROSKA},
  40. {_T("MP4"), 0, SRC_MP4, IDS_SRC_MP4},
  41. {_T("MPEG Audio"), 0, SRC_MPA, IDS_SRC_MPA},
  42. {_T("MPEG PS/TS/PVA"), 0, SRC_MPEG, 0},
  43. {_T("Nut"), 0, SRC_NUT, IDS_SRC_NUT},
  44. {_T("Ogg"), 0, SRC_OGG, IDS_SRC_OGG},
  45. {_T("RealMedia"), 0, SRC_REALMEDIA, IDS_SRC_REALMEDIA},
  46. {_T("RoQ"), 0, SRC_ROQ, IDS_SRC_ROQ},
  47. {_T("SHOUTcast"), 0, SRC_SHOUTCAST, IDS_SRC_SHOUTCAST},
  48. __if_exists(CRadGtSplitterFilter) {{_T("Smacker/Bink"), 0, SRC_RADGT, IDS_SRC_RADGT},}
  49. {_T("AAC"), 1, TRA_AAC, IDS_TRA_AAC},
  50. {_T("AC3"), 1, TRA_AC3, IDS_TRA_AC3},
  51. {_T("DTS"), 1, TRA_DTS, IDS_TRA_DTS},
  52. {_T("Dirac"), 1, TRA_DIRAC, IDS_TRA_DIRAC},
  53. {_T("LPCM"), 1, TRA_LPCM, IDS_TRA_LPCM},
  54. {_T("MPEG Audio"), 1, TRA_MPA, IDS_TRA_MPA},
  55. {_T("MPEG-1 Video"), 1, TRA_MPEG1, IDS_TRA_MPEG1},
  56. {_T("MPEG-2 Video"), 1, TRA_MPEG2, IDS_TRA_MPEG2},
  57. {_T("PS2 Audio (PCM/ADPCM)"), 1, TRA_PS2AUD, IDS_TRA_PS2AUD},
  58. {_T("RealVideo"), 1, TRA_RV, IDS_TRA_RV},
  59. {_T("RealAudio"), 1, TRA_RA, IDS_TRA_RA},
  60. };
  61. IMPLEMENT_DYNAMIC(CPPageFiltersListBox, CCheckListBox)
  62. CPPageFiltersListBox::CPPageFiltersListBox()
  63. : CCheckListBox()
  64. {
  65. }
  66. void CPPageFiltersListBox::PreSubclassWindow()
  67. {
  68. __super::PreSubclassWindow();
  69. EnableToolTips(TRUE);
  70. }
  71. INT_PTR CPPageFiltersListBox::OnToolHitTest(CPoint point, TOOLINFO* pTI) const
  72. {
  73. BOOL b = FALSE;
  74. int row = ItemFromPoint(point, b);
  75. if(row < 0) return -1;
  76. CRect r;
  77. GetItemRect(row, r);
  78. pTI->rect = r;
  79. pTI->hwnd = m_hWnd;
  80. pTI->uId = (UINT)row;
  81. pTI->lpszText = LPSTR_TEXTCALLBACK;
  82. pTI->uFlags |= TTF_ALWAYSTIP;
  83. return pTI->uId;
  84. }
  85. BEGIN_MESSAGE_MAP(CPPageFiltersListBox, CCheckListBox)
  86. ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipNotify)
  87. ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipNotify)
  88. END_MESSAGE_MAP()
  89. BOOL CPPageFiltersListBox::OnToolTipNotify(UINT id, NMHDR* pNMHDR, LRESULT* pResult)
  90. {
  91. TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
  92. TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
  93. filter_t* f = (filter_t*)GetItemDataPtr(pNMHDR->idFrom);
  94. if(f->nHintID == 0) return FALSE;
  95. ::SendMessage(pNMHDR->hwndFrom, TTM_SETMAXTIPWIDTH, 0, (LPARAM)(INT)1000);
  96. static CStringA m_strTipTextA;
  97. static CStringW m_strTipTextW;
  98. m_strTipTextA = CString(MAKEINTRESOURCE(f->nHintID));
  99. m_strTipTextW = CString(MAKEINTRESOURCE(f->nHintID));
  100. if(pNMHDR->code == TTN_NEEDTEXTA) pTTTA->lpszText = (LPSTR)(LPCSTR)m_strTipTextA;
  101. else pTTTW->lpszText = (LPWSTR)(LPCWSTR)m_strTipTextW;
  102. *pResult = 0;
  103. return TRUE;    // message was handled
  104. }
  105. // CPPageFilters dialog
  106. IMPLEMENT_DYNAMIC(CPPageFilters, CPPageBase)
  107. CPPageFilters::CPPageFilters()
  108. : CPPageBase(CPPageFilters::IDD, CPPageFilters::IDD)
  109. {
  110. }
  111. CPPageFilters::~CPPageFilters()
  112. {
  113. }
  114. void CPPageFilters::DoDataExchange(CDataExchange* pDX)
  115. {
  116. __super::DoDataExchange(pDX);
  117. DDX_Control(pDX, IDC_LIST1, m_listSrc);
  118. DDX_Control(pDX, IDC_LIST2, m_listTra);
  119. }
  120. BEGIN_MESSAGE_MAP(CPPageFilters, CPPageBase)
  121. END_MESSAGE_MAP()
  122. // CPPageFilters message handlers
  123. BOOL CPPageFilters::OnInitDialog()
  124. {
  125. __super::OnInitDialog();
  126. AppSettings& s = AfxGetAppSettings();
  127. for(int i = 0; i < countof(s_filters); i++)
  128. {
  129. CCheckListBox* l = 
  130. s_filters[i].type == 0 ? &m_listSrc : 
  131. s_filters[i].type == 1 ? &m_listTra : 
  132. NULL; 
  133. UINT* pflags = 
  134. s_filters[i].type == 0 ? &s.SrcFilters : 
  135. s_filters[i].type == 1 ? &s.TraFilters : 
  136. NULL; 
  137. if(l && pflags)
  138. {
  139. int Index = l->AddString(s_filters[i].label);
  140. l->SetCheck(Index, !!(*pflags & s_filters[i].flag));
  141. l->SetItemDataPtr(Index, &s_filters[i]);
  142. }
  143. }
  144. UpdateData(FALSE);
  145. return TRUE;  // return TRUE unless you set the focus to a control
  146. // EXCEPTION: OCX Property Pages should return FALSE
  147. }
  148. BOOL CPPageFilters::OnApply()
  149. {
  150. UpdateData();
  151. AppSettings& s = AfxGetAppSettings();
  152. s.SrcFilters = s.TraFilters = 0;
  153. CList<filter_t*> fl;
  154. for(int i = 0; i < m_listSrc.GetCount(); i++)
  155. if(m_listSrc.GetCheck(i))
  156. fl.AddTail((filter_t*)m_listSrc.GetItemDataPtr(i));
  157. for(int i = 0; i < m_listTra.GetCount(); i++)
  158. if(m_listTra.GetCheck(i))
  159. fl.AddTail((filter_t*)m_listTra.GetItemDataPtr(i));
  160. POSITION pos = fl.GetHeadPosition();
  161. while(pos)
  162. {
  163. filter_t* f = fl.GetNext(pos);
  164. UINT* pflags = 
  165. f->type == 0 ? &s.SrcFilters : 
  166. f->type == 1 ? &s.TraFilters : 
  167. NULL; 
  168. if(pflags)
  169. *pflags |= f->flag;
  170. }
  171. return __super::OnApply();
  172. }