ConvertPropsDlg.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. // ConvertPropsDlg.cpp : implementation file
  22. //
  23. #include "stdafx.h"
  24. #include "mplayerc.h"
  25. #include "ConvertPropsDlg.h"
  26. // CConvertPropsDlg dialog
  27. CConvertPropsDlg::CConvertPropsDlg(bool fPin, CWnd* pParent /*=NULL*/)
  28. : CResizableDialog(CConvertPropsDlg::IDD, pParent)
  29. , m_fPin(fPin)
  30. {
  31. }
  32. CConvertPropsDlg::~CConvertPropsDlg()
  33. {
  34. }
  35. void CConvertPropsDlg::DoDataExchange(CDataExchange* pDX)
  36. {
  37. __super::DoDataExchange(pDX);
  38. DDX_Control(pDX, IDC_COMBO1, m_fcc);
  39. DDX_Control(pDX, IDC_EDIT1, m_text);
  40. DDX_Control(pDX, IDC_LIST1, m_list);
  41. }
  42. BEGIN_MESSAGE_MAP(CConvertPropsDlg, CResizableDialog)
  43. ON_NOTIFY(NM_CLICK, IDC_LIST1, OnNMClickList1)
  44. ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1)
  45. ON_UPDATE_COMMAND_UI(IDC_BUTTON1, OnUpdateButton1)
  46. ON_CBN_EDITCHANGE(IDC_COMBO1, OnCbnEditchangeCombo1)
  47. ON_CBN_SELCHANGE(IDC_COMBO1, OnCbnSelchangeCombo1)
  48. ON_NOTIFY(LVN_KEYDOWN, IDC_LIST1, OnLvnKeydownList1)
  49. END_MESSAGE_MAP()
  50. // CConvertPropsDlg message handlers
  51. BOOL CConvertPropsDlg::OnInitDialog()
  52. {
  53. __super::OnInitDialog();
  54. AddAnchor(IDC_COMBO1, TOP_LEFT);
  55. AddAnchor(IDC_EDIT1, TOP_LEFT, TOP_RIGHT);
  56. AddAnchor(IDC_BUTTON1, TOP_RIGHT);
  57. AddAnchor(IDC_LIST1, TOP_LEFT, BOTTOM_RIGHT);
  58. AddAnchor(IDOK, BOTTOM_CENTER);
  59. AddAnchor(IDCANCEL, BOTTOM_CENTER);
  60. if(m_fPin)
  61. {
  62. m_fcc.AddString(_T("NAME"));
  63. m_fcc.AddString(_T("LANG"));
  64. m_fcc.AddString(_T("DESC"));
  65. m_fcc.AddString(_T("SGRP"));
  66. }
  67. else
  68. {
  69. m_fcc.AddString(_T("TITL"));
  70. m_fcc.AddString(_T("AUTH"));
  71. m_fcc.AddString(_T("RTNG"));
  72. m_fcc.AddString(_T("CPYR"));
  73. m_fcc.AddString(_T("DESC"));
  74. }
  75. m_list.InsertColumn(0, _T("ID"), LVCFMT_LEFT, 75);
  76. m_list.InsertColumn(1, _T("Text"), LVCFMT_LEFT, 280);
  77. m_list.SetExtendedStyle(m_list.GetExtendedStyle()|LVS_EX_FULLROWSELECT);
  78. POSITION pos = m_props.GetStartPosition();
  79. while(pos)
  80. {
  81. CString key, value;
  82. m_props.GetNextAssoc(pos, key, value);
  83. SetItem(key, value);
  84. }
  85. return TRUE;  // return TRUE unless you set the focus to a control
  86. // EXCEPTION: OCX Property Pages should return FALSE
  87. }
  88. void CConvertPropsDlg::SetItem(CString key, CString value)
  89. {
  90. LVFINDINFO fi;
  91. fi.flags = LVFI_STRING;
  92. fi.psz = key;
  93. int i = m_list.FindItem(&fi);
  94. if(i < 0) i = m_list.InsertItem(m_list.GetItemCount(), _T(""));
  95. key.Trim();
  96. value.Trim();
  97. if(value.IsEmpty())
  98. {
  99. m_list.DeleteItem(i);
  100. return;
  101. }
  102. if(key == _T("LANG") && value.GetLength() != 3)
  103. {
  104. m_list.DeleteItem(i);
  105. AfxMessageBox(_T("LANG has to be a three letter ISO 639-2 language code."), MB_OK);
  106. return;
  107. }
  108. m_list.SetItemText(i, 0, key);
  109. m_list.SetItemText(i, 1, value);
  110. }
  111. void CConvertPropsDlg::OnOK()
  112. {
  113. m_props.RemoveAll();
  114. for(int i = 0; i < m_list.GetItemCount(); i++)
  115. m_props[m_list.GetItemText(i, 0)] = m_list.GetItemText(i, 1);
  116. __super::OnOK();
  117. }
  118. void CConvertPropsDlg::OnNMClickList1(NMHDR *pNMHDR, LRESULT *pResult)
  119. {
  120. LPNMLISTVIEW lpnmlv = (LPNMLISTVIEW)pNMHDR;
  121. if(lpnmlv->iItem >= 0)
  122. {
  123. m_fcc.SetWindowText(m_list.GetItemText(lpnmlv->iItem, 0));
  124. m_text.SetWindowText(m_list.GetItemText(lpnmlv->iItem, 1));
  125. }
  126. *pResult = 0;
  127. }
  128. void CConvertPropsDlg::OnBnClickedButton1()
  129. {
  130. CString key, value;
  131. m_fcc.GetWindowText(key);
  132. m_text.GetWindowText(value);
  133. if(key.GetLength() != 4) {AfxMessageBox(_T("ID must be 4 characters long!"), MB_OK); return;}
  134. SetItem(key, value);
  135. }
  136. void CConvertPropsDlg::OnUpdateButton1(CCmdUI* pCmdUI)
  137. {
  138. pCmdUI->Enable(GetDlgItem(IDC_EDIT1)->GetWindowTextLength() > 0);
  139. }
  140. void CConvertPropsDlg::OnCbnEditchangeCombo1()
  141. {
  142. int i = m_fcc.GetCurSel();
  143. if(i < 0) return;
  144. CString key;
  145. m_fcc.GetLBText(i, key);
  146. LVFINDINFO fi;
  147. fi.flags = LVFI_STRING;
  148. fi.psz = key;
  149. i = m_list.FindItem(&fi);
  150. if(i > 0) m_text.SetWindowText(m_list.GetItemText(i, 1));
  151. }
  152. void CConvertPropsDlg::OnCbnSelchangeCombo1()
  153. {
  154. OnCbnEditchangeCombo1();
  155. }
  156. void CConvertPropsDlg::OnLvnKeydownList1(NMHDR *pNMHDR, LRESULT *pResult)
  157. {
  158. LPNMLVKEYDOWN pLVKeyDow = reinterpret_cast<LPNMLVKEYDOWN>(pNMHDR);
  159. int i = m_fcc.GetCurSel();
  160. if(i >= 0) m_list.DeleteItem(i);
  161. *pResult = 0;
  162. }