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

多媒体编程

开发平台:

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. // PnSPresetsDlg.cpp : implementation file
  22. //
  23. #include "stdafx.h"
  24. #include "mplayerc.h"
  25. #include "PnSPresetsDlg.h"
  26. // CPnSPresetsDlg dialog
  27. IMPLEMENT_DYNAMIC(CPnSPresetsDlg, CCmdUIDialog)
  28. CPnSPresetsDlg::CPnSPresetsDlg(CWnd* pParent /*=NULL*/)
  29. : CCmdUIDialog(CPnSPresetsDlg::IDD, pParent)
  30. , m_label(_T(""))
  31. {
  32. }
  33. CPnSPresetsDlg::~CPnSPresetsDlg()
  34. {
  35. }
  36. void CPnSPresetsDlg::DoDataExchange(CDataExchange* pDX)
  37. {
  38. __super::DoDataExchange(pDX);
  39. DDX_Control(pDX, IDC_EDIT2, m_PosX);
  40. DDX_Control(pDX, IDC_EDIT3, m_PosY);
  41. DDX_Control(pDX, IDC_EDIT4, m_ZoomX);
  42. DDX_Control(pDX, IDC_EDIT5, m_ZoomY);
  43. DDX_Text(pDX, IDC_EDIT1, m_label);
  44. DDX_Control(pDX, IDC_LIST1, m_list);
  45. }
  46. BOOL CPnSPresetsDlg::OnInitDialog()
  47. {
  48. __super::OnInitDialog();
  49. for(int i = 0, j = m_pnspresets.GetCount(); i < j; i++)
  50. {
  51. CString label;
  52. double PosX, PosY, ZoomX, ZoomY;
  53. StringToParams(m_pnspresets[i], label, PosX, PosY, ZoomX, ZoomY);
  54. m_list.AddString(label);
  55. if(i == 0)
  56. {
  57. m_list.SetCurSel(0);
  58. OnLbnSelchangeList1();
  59. }
  60. }
  61. return TRUE;  // return TRUE unless you set the focus to a control
  62. // EXCEPTION: OCX Property Pages should return FALSE
  63. }
  64. void CPnSPresetsDlg::StringToParams(CString str, CString& label, double& PosX, double& PosY, double& ZoomX, double& ZoomY)
  65. {
  66. int i = 0, j = 0;
  67. for(CString token = str.Tokenize(_T(","), i); !token.IsEmpty(); token = str.Tokenize(_T(","), i), j++)
  68. {
  69. if(j == 0)
  70. {
  71. label = token;
  72. }
  73. else
  74. {
  75. float f = 0;
  76. if(_stscanf(token, _T("%f"), &f) != 1) continue;
  77. switch(j)
  78. {
  79. case 1: PosX = f; break;
  80. case 2: PosY = f; break;
  81. case 3: ZoomX = f; break;
  82. case 4: ZoomY = f; break;
  83. default: break;
  84. }
  85. }
  86. }
  87. }
  88. CString CPnSPresetsDlg::ParamsToString(CString label, double PosX, double PosY, double ZoomX, double ZoomY)
  89. {
  90. CString str;
  91. str.Format(_T("%s,%.3f,%.3f,%.3f,%.3f"), label, PosX, PosY, ZoomX, ZoomY);
  92. return(str);
  93. }
  94. BEGIN_MESSAGE_MAP(CPnSPresetsDlg, CCmdUIDialog)
  95. ON_LBN_SELCHANGE(IDC_LIST1, OnLbnSelchangeList1)
  96. ON_BN_CLICKED(IDC_BUTTON2, OnBnClickedButton2)
  97. ON_UPDATE_COMMAND_UI(IDC_BUTTON2, OnUpdateButton2)
  98. ON_BN_CLICKED(IDC_BUTTON3, OnBnClickedButton6)
  99. ON_UPDATE_COMMAND_UI(IDC_BUTTON3, OnUpdateButton6)
  100. ON_BN_CLICKED(IDC_BUTTON4, OnBnClickedButton9)
  101. ON_UPDATE_COMMAND_UI(IDC_BUTTON4, OnUpdateButton9)
  102. ON_BN_CLICKED(IDC_BUTTON5, OnBnClickedButton10)
  103. ON_UPDATE_COMMAND_UI(IDC_BUTTON5, OnUpdateButton10)
  104. ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1)
  105. ON_UPDATE_COMMAND_UI(IDC_BUTTON1, OnUpdateButton1)
  106. END_MESSAGE_MAP()
  107. // CPnSPresetsDlg message handlers
  108. void CPnSPresetsDlg::OnLbnSelchangeList1()
  109. {
  110. int i = m_list.GetCurSel();
  111. if(i >= 0 && i < m_pnspresets.GetCount())
  112. {
  113. double PosX, PosY, ZoomX, ZoomY;
  114. StringToParams(m_pnspresets[i], m_label, PosX, PosY, ZoomX, ZoomY);
  115. m_PosX = PosX; m_PosY = PosY;
  116. m_ZoomX = ZoomX; m_ZoomY = ZoomY;
  117. }
  118. else
  119. {
  120. m_label.Empty();
  121. m_PosX.SetWindowText(_T(""));
  122. m_PosY.SetWindowText(_T(""));
  123. m_ZoomX.SetWindowText(_T(""));
  124. m_ZoomY.SetWindowText(_T(""));
  125. }
  126. UpdateData(FALSE);
  127. }
  128. void CPnSPresetsDlg::OnBnClickedButton2() // new
  129. {
  130. m_pnspresets.Add(_T("New,0.5,0.5,1.0,1.0"));
  131. m_list.SetCurSel(m_list.AddString(_T("New")));
  132. OnLbnSelchangeList1();
  133. }
  134. void CPnSPresetsDlg::OnUpdateButton2(CCmdUI* pCmdUI)
  135. {
  136. CString str;
  137. int len = m_list.GetCount();
  138. if(len > 0) m_list.GetText(len-1, str);
  139. pCmdUI->Enable(str != _T("New"));
  140. }
  141. void CPnSPresetsDlg::OnBnClickedButton6() // del
  142. {
  143. int i = m_list.GetCurSel();
  144. m_list.DeleteString(i);
  145. m_pnspresets.RemoveAt(i);
  146. if(i ==  m_list.GetCount()) i--;
  147. m_list.SetCurSel(i);
  148. OnLbnSelchangeList1();
  149. }
  150. void CPnSPresetsDlg::OnUpdateButton6(CCmdUI* pCmdUI)
  151. {
  152. pCmdUI->Enable(m_list.GetCurSel() >= 0);
  153. }
  154. void CPnSPresetsDlg::OnBnClickedButton9() // up
  155. {
  156. int i = m_list.GetCurSel();
  157. CString str, str2;
  158. m_list.GetText(i, str);
  159. str2 = m_pnspresets.GetAt(i);
  160. m_list.DeleteString(i);
  161. m_pnspresets.RemoveAt(i);
  162. i--;
  163. m_list.InsertString(i, str);
  164. m_pnspresets.InsertAt(i, str2);
  165. m_list.SetCurSel(i);
  166. }
  167. void CPnSPresetsDlg::OnUpdateButton9(CCmdUI* pCmdUI)
  168. {
  169. pCmdUI->Enable(m_list.GetCurSel() > 0 && m_list.GetCurSel() < m_list.GetCount());
  170. }
  171. void CPnSPresetsDlg::OnBnClickedButton10() // down
  172. {
  173. int i = m_list.GetCurSel();
  174. CString str, str2;
  175. m_list.GetText(i, str);
  176. str2 = m_pnspresets.GetAt(i);
  177. m_list.DeleteString(i);
  178. m_pnspresets.RemoveAt(i);
  179. i++;
  180. m_list.InsertString(i, str);
  181. m_pnspresets.InsertAt(i, str2);
  182. m_list.SetCurSel(i);
  183. }
  184. void CPnSPresetsDlg::OnUpdateButton10(CCmdUI* pCmdUI)
  185. {
  186. pCmdUI->Enable(m_list.GetCurSel() >= 0 && m_list.GetCurSel() < m_list.GetCount()-1);
  187. }
  188. void CPnSPresetsDlg::OnBnClickedButton1() // set
  189. {
  190. int i = m_list.GetCurSel();
  191. UpdateData();
  192. if(m_label.Remove(',') > 0)
  193. UpdateData(FALSE);
  194. m_pnspresets[i] = ParamsToString(m_label, m_PosX, m_PosY, m_ZoomX, m_ZoomY);
  195. m_list.DeleteString(i);
  196. m_list.InsertString(i, m_label);
  197. m_list.SetCurSel(i);
  198. }
  199. void CPnSPresetsDlg::OnUpdateButton1(CCmdUI* pCmdUI)
  200. {
  201. UpdateData();
  202. pCmdUI->Enable(m_list.GetCurSel() >= 0
  203. && !m_label.IsEmpty() && m_label.Find(',') < 0
  204. && m_PosX >= 0 && m_PosX <= 1
  205. && m_PosY >= 0 && m_PosY <= 1
  206. && m_ZoomX >= 0.2 && m_ZoomX <= 3.0
  207. && m_ZoomY >= 0.2 && m_ZoomY <= 3.0);
  208. }
  209. void CPnSPresetsDlg::OnOK()
  210. {
  211. if(m_list.GetCurSel() >= 0)
  212. OnBnClickedButton1();
  213. __super::OnOK();
  214. }