/*
* $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 "ConvertPropsDlg.h"
// CConvertPropsDlg dialog
CConvertPropsDlg::CConvertPropsDlg(bool fPin, CWnd* pParent /*=NULL*/)
: CResizableDialog(CConvertPropsDlg::IDD, pParent)
, m_fPin(fPin)
{
}
CConvertPropsDlg::~CConvertPropsDlg()
{
}
void CConvertPropsDlg::DoDataExchange(CDataExchange* pDX)
{
__super::DoDataExchange(pDX);
DDX_Control(pDX, IDC_COMBO1, m_fcc);
DDX_Control(pDX, IDC_EDIT1, m_text);
DDX_Control(pDX, IDC_LIST1, m_list);
}
BEGIN_MESSAGE_MAP(CConvertPropsDlg, CResizableDialog)
ON_NOTIFY(NM_CLICK, IDC_LIST1, OnNMClickList1)
ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1)
ON_UPDATE_COMMAND_UI(IDC_BUTTON1, OnUpdateButton1)
ON_CBN_EDITCHANGE(IDC_COMBO1, OnCbnEditchangeCombo1)
ON_CBN_SELCHANGE(IDC_COMBO1, OnCbnSelchangeCombo1)
ON_NOTIFY(LVN_KEYDOWN, IDC_LIST1, OnLvnKeydownList1)
END_MESSAGE_MAP()
// CConvertPropsDlg message handlers
BOOL CConvertPropsDlg::OnInitDialog()
{
__super::OnInitDialog();
AddAnchor(IDC_COMBO1, TOP_LEFT);
AddAnchor(IDC_EDIT1, TOP_LEFT, TOP_RIGHT);
AddAnchor(IDC_BUTTON1, TOP_RIGHT);
AddAnchor(IDC_LIST1, TOP_LEFT, BOTTOM_RIGHT);
AddAnchor(IDOK, BOTTOM_CENTER);
AddAnchor(IDCANCEL, BOTTOM_CENTER);
if(m_fPin)
{
m_fcc.AddString(_T("NAME"));
m_fcc.AddString(_T("LANG"));
m_fcc.AddString(_T("DESC"));
m_fcc.AddString(_T("SGRP"));
}
else
{
m_fcc.AddString(_T("TITL"));
m_fcc.AddString(_T("AUTH"));
m_fcc.AddString(_T("RTNG"));
m_fcc.AddString(_T("CPYR"));
m_fcc.AddString(_T("DESC"));
}
m_list.InsertColumn(0, _T("ID"), LVCFMT_LEFT, 75);
m_list.InsertColumn(1, _T("Text"), LVCFMT_LEFT, 280);
m_list.SetExtendedStyle(m_list.GetExtendedStyle()|LVS_EX_FULLROWSELECT);
POSITION pos = m_props.GetStartPosition();
while(pos)
{
CString key, value;
m_props.GetNextAssoc(pos, key, value);
SetItem(key, value);
}
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CConvertPropsDlg::SetItem(CString key, CString value)
{
LVFINDINFO fi;
fi.flags = LVFI_STRING;
fi.psz = key;
int i = m_list.FindItem(&fi);
if(i < 0) i = m_list.InsertItem(m_list.GetItemCount(), _T(""));
key.Trim();
value.Trim();
if(value.IsEmpty())
{
m_list.DeleteItem(i);
return;
}
if(key == _T("LANG") && value.GetLength() != 3)
{
m_list.DeleteItem(i);
AfxMessageBox(_T("LANG has to be a three letter ISO 639-2 language code."), MB_OK);
return;
}
m_list.SetItemText(i, 0, key);
m_list.SetItemText(i, 1, value);
}
void CConvertPropsDlg::OnOK()
{
m_props.RemoveAll();
for(int i = 0; i < m_list.GetItemCount(); i++)
m_props[m_list.GetItemText(i, 0)] = m_list.GetItemText(i, 1);
__super::OnOK();
}
void CConvertPropsDlg::OnNMClickList1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLISTVIEW lpnmlv = (LPNMLISTVIEW)pNMHDR;
if(lpnmlv->iItem >= 0)
{
m_fcc.SetWindowText(m_list.GetItemText(lpnmlv->iItem, 0));
m_text.SetWindowText(m_list.GetItemText(lpnmlv->iItem, 1));
}
*pResult = 0;
}
void CConvertPropsDlg::OnBnClickedButton1()
{
CString key, value;
m_fcc.GetWindowText(key);
m_text.GetWindowText(value);
if(key.GetLength() != 4)
{
AfxMessageBox(_T("ID must be 4 characters long!"), MB_OK);
return;
}
SetItem(key, value);
}
void CConvertPropsDlg::OnUpdateButton1(CCmdUI* pCmdUI)
{
pCmdUI->Enable(GetDlgItem(IDC_EDIT1)->GetWindowTextLength() > 0);
}
void CConvertPropsDlg::OnCbnEditchangeCombo1()
{
int i = m_fcc.GetCurSel();
if(i < 0) return;
CString key;
m_fcc.GetLBText(i, key);
LVFINDINFO fi;
fi.flags = LVFI_STRING;
fi.psz = key;
i = m_list.FindItem(&fi);
if(i > 0) m_text.SetWindowText(m_list.GetItemText(i, 1));
}
void CConvertPropsDlg::OnCbnSelchangeCombo1()
{
OnCbnEditchangeCombo1();
}
void CConvertPropsDlg::OnLvnKeydownList1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLVKEYDOWN pLVKeyDow = reinterpret_cast(pNMHDR);
UNUSED_ALWAYS(pLVKeyDow);
int i = m_fcc.GetCurSel();
if(i >= 0) m_list.DeleteItem(i);
*pResult = 0;
}