/* * $Id$ * * (C) 2003-2006 Gabest * (C) 2006-2010 see AUTHORS * * This file is part of mplayerc. * * Mplayerc is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * Mplayerc is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ #include "stdafx.h" #include "mplayerc.h" #include "SubtitleDlDlg.h" // CSubtitleDlDlg dialog //IMPLEMENT_DYNAMIC(CSubtitleDlDlg, CResizableDialog) CSubtitleDlDlg::CSubtitleDlDlg(CList& movies, CWnd* pParent /*=NULL*/) : CResizableDialog(CSubtitleDlDlg::IDD, pParent) { m_movies.AddTail(&movies); } CSubtitleDlDlg::~CSubtitleDlDlg() { } int CSubtitleDlDlg::GetChecked(int iItem) { LVITEM lvi; lvi.iItem = iItem; lvi.iSubItem = 0; lvi.mask = LVIF_IMAGE; m_list.GetItem(&lvi); return(lvi.iImage); } void CSubtitleDlDlg::SetChecked(int iItem, int iChecked) { LVITEM lvi; lvi.iItem = iItem; lvi.iSubItem = 0; lvi.mask = LVIF_IMAGE; lvi.iImage = iChecked; m_list.SetItem(&lvi); } void CSubtitleDlDlg::DoDataExchange(CDataExchange* pDX) { __super::DoDataExchange(pDX); DDX_Control(pDX, IDC_LIST1, m_list); } BEGIN_MESSAGE_MAP(CSubtitleDlDlg, CResizableDialog) ON_NOTIFY(NM_CLICK, IDC_LIST1, OnNMClickList1) ON_UPDATE_COMMAND_UI(IDOK, OnUpdateOk) END_MESSAGE_MAP() // CSubtitleDlDlg message handlers BOOL CSubtitleDlDlg::OnInitDialog() { __super::OnInitDialog(); AddAnchor(IDC_LIST1, TOP_LEFT, BOTTOM_RIGHT); AddAnchor(IDC_CHECK1, BOTTOM_LEFT); AddAnchor(IDOK, BOTTOM_RIGHT); CSize s(200, 150); SetMinTrackSize(s); m_list.SetExtendedStyle(m_list.GetExtendedStyle()|LVS_EX_FULLROWSELECT); m_list.InsertColumn(COL_FILENAME, _T("File"), LVCFMT_LEFT, 160); m_list.InsertColumn(COL_LANGUAGE, _T("Language"), LVCFMT_CENTER, 80); m_list.InsertColumn(COL_FORMAT, _T("Format"), LVCFMT_CENTER, 50); m_list.InsertColumn(COL_DISC, _T("Disc"), LVCFMT_CENTER, 50); m_list.InsertColumn(COL_TITLES, _T("Title(s)"), LVCFMT_LEFT, 300); m_onoff.Create(IDB_ONOFF, 12, 3, 0xffffff); m_list.SetImageList(&m_onoff, LVSIL_SMALL); int i = 0; POSITION pos = m_movies.GetHeadPosition(); while(pos) { isdb_movie& m = m_movies.GetNext(pos); CStringA titlesA = Implode(m.titles, '|'); titlesA.Replace("|", ", "); CString titles = UTF8To16(titlesA); POSITION pos2 = m.subs.GetHeadPosition(); while(pos2) { isdb_subtitle& s = m.subs.GetNext(pos2); CString name = UTF8To16(s.name); CString language = s.language; CString format = s.format; CString disc; disc.Format(_T("%d/%d"), s.disc_no, s.discs); int iItem = m_list.InsertItem(i++, _T("")); m_list.SetItemData(iItem, (DWORD_PTR)&s); m_list.SetItemText(iItem, COL_FILENAME, name); m_list.SetItemText(iItem, COL_LANGUAGE, language); m_list.SetItemText(iItem, COL_FORMAT, format); m_list.SetItemText(iItem, COL_DISC, disc); m_list.SetItemText(iItem, COL_TITLES, titles); } } m_selsubs.RemoveAll(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CSubtitleDlDlg::OnOK() { for(int i = 0; i < m_list.GetItemCount(); i++) if(GetChecked(i)) m_selsubs.AddTail(*(isdb_subtitle*)m_list.GetItemData(i)); m_fReplaceSubs = IsDlgButtonChecked(IDC_CHECK1) == BST_CHECKED; __super::OnOK(); } void CSubtitleDlDlg::OnNMClickList1(NMHDR *pNMHDR, LRESULT *pResult) { LPNMLISTVIEW lpnmlv = (LPNMLISTVIEW)pNMHDR; if(lpnmlv->iItem >= 0) { CRect r; m_list.GetItemRect(lpnmlv->iItem, r, LVIR_ICON); if(r.PtInRect(lpnmlv->ptAction)) { SetChecked(lpnmlv->iItem, (GetChecked(lpnmlv->iItem)&1) == 0 ? 1 : 0); } } *pResult = 0; } void CSubtitleDlDlg::OnUpdateOk(CCmdUI* pCmdUI) { bool fEnable = false; for(int i = 0; !fEnable && i < m_list.GetItemCount(); i++) fEnable = !!GetChecked(i); pCmdUI->Enable(fEnable); }