OpenDlg.cpp
上传用户:tangyu_668
上传日期:2014-02-27
资源大小:678k
文件大小:5k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. /* 
  2.  * Copyright (C) 2003-2006 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. // OpenDlg.cpp : implementation file
  22. //
  23. #include "stdafx.h"
  24. #include "mplayerc.h"
  25. #include "OpenDlg.h"
  26. #include "OpenFileDlg.h"
  27. // COpenDlg dialog
  28. //IMPLEMENT_DYNAMIC(COpenDlg, CResizableDialog)
  29. COpenDlg::COpenDlg(CWnd* pParent /*=NULL*/)
  30. : CResizableDialog(COpenDlg::IDD, pParent)
  31. , m_path(_T(""))
  32. , m_path2(_T(""))
  33. , m_fMultipleFiles(false)
  34. , m_fAppendPlaylist(FALSE)
  35. {
  36. }
  37. COpenDlg::~COpenDlg()
  38. {
  39. }
  40. void COpenDlg::DoDataExchange(CDataExchange* pDX)
  41. {
  42. __super::DoDataExchange(pDX);
  43. DDX_Control(pDX, IDC_COMBO1, m_mrucombo);
  44. DDX_CBString(pDX, IDC_COMBO1, m_path);
  45. DDX_Control(pDX, IDC_COMBO2, m_mrucombo2);
  46. DDX_CBString(pDX, IDC_COMBO2, m_path2);
  47. DDX_Control(pDX, IDC_STATIC1, m_label2);
  48. DDX_Check(pDX, IDC_CHECK1, m_fAppendPlaylist);
  49. }
  50. BEGIN_MESSAGE_MAP(COpenDlg, CResizableDialog)
  51. ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedBrowsebutton)
  52. ON_BN_CLICKED(IDC_BUTTON2, OnBnClickedBrowsebutton2)
  53. ON_BN_CLICKED(IDOK, OnBnClickedOk)
  54. ON_UPDATE_COMMAND_UI(IDC_STATIC1, OnUpdateDub)
  55. ON_UPDATE_COMMAND_UI(IDC_COMBO2, OnUpdateDub)
  56. ON_UPDATE_COMMAND_UI(IDC_BUTTON2, OnUpdateDub)
  57. END_MESSAGE_MAP()
  58. // COpenDlg message handlers
  59. BOOL COpenDlg::OnInitDialog()
  60. {
  61. __super::OnInitDialog();
  62. CRecentFileList& MRU = AfxGetAppSettings().MRU;
  63. MRU.ReadList();
  64. m_mrucombo.ResetContent();
  65. for(int i = 0; i < MRU.GetSize(); i++)
  66. if(!MRU[i].IsEmpty())
  67. m_mrucombo.AddString(MRU[i]);
  68. CorrectComboListWidth(m_mrucombo, GetFont());
  69. CRecentFileList& MRUDub = AfxGetAppSettings().MRUDub;
  70. MRUDub.ReadList();
  71. m_mrucombo2.ResetContent();
  72. for(int i = 0; i < MRUDub.GetSize(); i++)
  73. if(!MRUDub[i].IsEmpty())
  74. m_mrucombo2.AddString(MRUDub[i]);
  75. CorrectComboListWidth(m_mrucombo2, GetFont());
  76. if(m_mrucombo.GetCount() > 0) m_mrucombo.SetCurSel(0);
  77. AddAnchor(m_mrucombo, TOP_LEFT, TOP_RIGHT);
  78. AddAnchor(m_mrucombo2, TOP_LEFT, TOP_RIGHT);
  79. AddAnchor(IDC_BUTTON1, TOP_RIGHT);
  80. AddAnchor(IDC_BUTTON2, TOP_RIGHT);
  81. AddAnchor(IDOK, TOP_RIGHT);
  82. AddAnchor(IDCANCEL, TOP_RIGHT);
  83. AddAnchor(IDC_STATIC1, TOP_LEFT, TOP_RIGHT);
  84. CRect r;
  85. GetWindowRect(r);
  86. CSize s = r.Size();
  87. SetMinTrackSize(s);
  88. s.cx = 1000;
  89. SetMaxTrackSize(s);
  90. return TRUE;  // return TRUE unless you set the focus to a control
  91. // EXCEPTION: OCX Property Pages should return FALSE
  92. }
  93. static CString GetFileName(CString str)
  94. {
  95. CPath p = str;
  96. p.StripPath();
  97. return (LPCTSTR)p;
  98. }
  99. void COpenDlg::OnBnClickedBrowsebutton()
  100. {
  101. UpdateData();
  102. CString filter;
  103. CAtlArray<CString> mask;
  104. AfxGetAppSettings().Formats.GetFilter(filter, mask);
  105. COpenFileDlg fd(mask, true, NULL, m_path, 
  106. OFN_EXPLORER|OFN_ENABLESIZING|OFN_HIDEREADONLY|OFN_ALLOWMULTISELECT|OFN_ENABLEINCLUDENOTIFY, 
  107. filter, this);
  108. if(fd.DoModal() != IDOK) return;
  109. m_fns.RemoveAll();
  110. POSITION pos = fd.GetStartPosition();
  111. while(pos)
  112. {
  113. /*
  114. CString str = fd.GetNextPathName(pos);
  115. POSITION insertpos = m_fns.GetTailPosition();
  116. while(insertpos && GetFileName(str).CompareNoCase(GetFileName(m_fns.GetAt(insertpos))) <= 0)
  117. m_fns.GetPrev(insertpos);
  118. if(!insertpos) m_fns.AddHead(str);
  119. else m_fns.InsertAfter(insertpos, str);
  120. */
  121. m_fns.AddTail(fd.GetNextPathName(pos));
  122. }
  123. if(m_fns.GetCount() > 1 
  124. || m_fns.GetCount() == 1 
  125. && (m_fns.GetHead()[m_fns.GetHead().GetLength()-1] == '\'
  126. || m_fns.GetHead()[m_fns.GetHead().GetLength()-1] == '*'))
  127. {
  128. m_fMultipleFiles = true;
  129. EndDialog(IDOK);
  130. return;
  131. }
  132. m_mrucombo.SetWindowText(fd.GetPathName());
  133. }
  134. void COpenDlg::OnBnClickedBrowsebutton2()
  135. {
  136. UpdateData();
  137. CString filter;
  138. CAtlArray<CString> mask;
  139. AfxGetAppSettings().Formats.GetAudioFilter(filter, mask);
  140. COpenFileDlg fd(mask, false, NULL, m_path2, 
  141. OFN_EXPLORER|OFN_ENABLESIZING|OFN_HIDEREADONLY|OFN_ENABLEINCLUDENOTIFY, 
  142. filter, this);
  143. if(fd.DoModal() != IDOK) return;
  144. m_mrucombo2.SetWindowText(fd.GetPathName());
  145. }
  146. void COpenDlg::OnBnClickedOk()
  147. {
  148. UpdateData();
  149. m_fns.RemoveAll();
  150. m_fns.AddTail(m_path);
  151. if(m_mrucombo2.IsWindowEnabled())
  152. m_fns.AddTail(m_path2);
  153. m_fMultipleFiles = false;
  154. OnOK();
  155. }
  156. void COpenDlg::OnUpdateDub(CCmdUI* pCmdUI)
  157. {
  158. m_mrucombo.GetWindowText(m_path);
  159. pCmdUI->Enable(AfxGetAppSettings().Formats.GetEngine(m_path) == DirectShow);
  160. }