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

多媒体编程

开发平台:

Visual C++

  1. // SubtitleDlDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "mplayerc.h"
  5. #include "SubtitleDlDlg.h"
  6. // CSubtitleDlDlg dialog
  7. //IMPLEMENT_DYNAMIC(CSubtitleDlDlg, CResizableDialog)
  8. CSubtitleDlDlg::CSubtitleDlDlg(CList<isdb_movie>& movies, CWnd* pParent /*=NULL*/)
  9. : CResizableDialog(CSubtitleDlDlg::IDD, pParent)
  10. {
  11. m_movies.AddTail(&movies);
  12. }
  13. CSubtitleDlDlg::~CSubtitleDlDlg()
  14. {
  15. }
  16. int CSubtitleDlDlg::GetChecked(int iItem)
  17. {
  18. LVITEM lvi;
  19. lvi.iItem = iItem;
  20. lvi.iSubItem = 0;
  21. lvi.mask = LVIF_IMAGE;
  22. m_list.GetItem(&lvi);
  23. return(lvi.iImage);
  24. }
  25. void CSubtitleDlDlg::SetChecked(int iItem, int iChecked)
  26. {
  27. LVITEM lvi;
  28. lvi.iItem = iItem;
  29. lvi.iSubItem = 0;
  30. lvi.mask = LVIF_IMAGE;
  31. lvi.iImage = iChecked;
  32. m_list.SetItem(&lvi);
  33. }
  34. void CSubtitleDlDlg::DoDataExchange(CDataExchange* pDX)
  35. {
  36. __super::DoDataExchange(pDX);
  37. DDX_Control(pDX, IDC_LIST1, m_list);
  38. }
  39. BEGIN_MESSAGE_MAP(CSubtitleDlDlg, CResizableDialog)
  40. ON_NOTIFY(NM_CLICK, IDC_LIST1, OnNMClickList1)
  41. ON_UPDATE_COMMAND_UI(IDOK, OnUpdateOk)
  42. END_MESSAGE_MAP()
  43. // CSubtitleDlDlg message handlers
  44. BOOL CSubtitleDlDlg::OnInitDialog()
  45. {
  46. __super::OnInitDialog();
  47. AddAnchor(IDC_LIST1, TOP_LEFT, BOTTOM_RIGHT);
  48. AddAnchor(IDC_CHECK1, BOTTOM_LEFT);
  49. AddAnchor(IDOK, BOTTOM_RIGHT);
  50. CSize s(200, 150);
  51. SetMinTrackSize(s);
  52. m_list.SetExtendedStyle(m_list.GetExtendedStyle()|LVS_EX_FULLROWSELECT);
  53. m_list.InsertColumn(COL_FILENAME, _T("File"), LVCFMT_LEFT, 160);
  54. m_list.InsertColumn(COL_LANGUAGE, _T("Language"), LVCFMT_CENTER, 80);
  55. m_list.InsertColumn(COL_FORMAT, _T("Format"), LVCFMT_CENTER, 50);
  56. m_list.InsertColumn(COL_DISC, _T("Disc"), LVCFMT_CENTER, 50);
  57. m_list.InsertColumn(COL_TITLES, _T("Title(s)"), LVCFMT_LEFT, 300);
  58. m_onoff.Create(IDB_ONOFF, 12, 3, 0xffffff);
  59. m_list.SetImageList(&m_onoff, LVSIL_SMALL);
  60. int i = 0;
  61. POSITION pos = m_movies.GetHeadPosition();
  62. while(pos)
  63. {
  64. isdb_movie& m = m_movies.GetNext(pos);
  65. CStringA titlesA = Implode(m.titles, '|');
  66. titlesA.Replace("|", ", ");
  67. CString titles = UTF8To16(titlesA);
  68. POSITION pos2 = m.subs.GetHeadPosition();
  69. while(pos2)
  70. {
  71. isdb_subtitle& s = m.subs.GetNext(pos2);
  72. CString name = UTF8To16(s.name);
  73. CString language = s.language;
  74. CString format = s.format;
  75. CString disc;
  76. disc.Format(_T("%d/%d"), s.disc_no, s.discs);
  77. int iItem = m_list.InsertItem(i++, _T(""));
  78. m_list.SetItemData(iItem, (DWORD_PTR)&s);
  79. m_list.SetItemText(iItem, COL_FILENAME, name);
  80. m_list.SetItemText(iItem, COL_LANGUAGE, language);
  81. m_list.SetItemText(iItem, COL_FORMAT, format);
  82. m_list.SetItemText(iItem, COL_DISC, disc);
  83. m_list.SetItemText(iItem, COL_TITLES, titles);
  84. }
  85. }
  86. m_selsubs.RemoveAll();
  87. return TRUE;  // return TRUE unless you set the focus to a control
  88. // EXCEPTION: OCX Property Pages should return FALSE
  89. }
  90. void CSubtitleDlDlg::OnOK()
  91. {
  92. for(int i = 0; i < m_list.GetItemCount(); i++)
  93. if(GetChecked(i))
  94. m_selsubs.AddTail(*(isdb_subtitle*)m_list.GetItemData(i));
  95. m_fReplaceSubs = IsDlgButtonChecked(IDC_CHECK1) == BST_CHECKED;
  96. __super::OnOK();
  97. }
  98. void CSubtitleDlDlg::OnNMClickList1(NMHDR *pNMHDR, LRESULT *pResult)
  99. {
  100. LPNMLISTVIEW lpnmlv = (LPNMLISTVIEW)pNMHDR;
  101. if(lpnmlv->iItem >= 0)
  102. {
  103. CRect r;
  104. m_list.GetItemRect(lpnmlv->iItem, r, LVIR_ICON);
  105. if(r.PtInRect(lpnmlv->ptAction))
  106. {
  107. SetChecked(lpnmlv->iItem, (GetChecked(lpnmlv->iItem)&1) == 0 ? 1 : 0);
  108. }
  109. }
  110. *pResult = 0;
  111. }
  112. void CSubtitleDlDlg::OnUpdateOk(CCmdUI* pCmdUI)
  113. {
  114. bool fEnable = false;
  115. for(int i = 0; !fEnable && i < m_list.GetItemCount(); i++)
  116. fEnable = !!GetChecked(i);
  117. pCmdUI->Enable(fEnable);
  118. }