00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "stdafx.h"
00026 #include "mplayerc.h"
00027 #include "ConvertPropsDlg.h"
00028
00029
00030
00031
00032 CConvertPropsDlg::CConvertPropsDlg(bool fPin, CWnd* pParent )
00033 : CResizableDialog(CConvertPropsDlg::IDD, pParent)
00034 , m_fPin(fPin)
00035 {
00036 }
00037
00038 CConvertPropsDlg::~CConvertPropsDlg()
00039 {
00040 }
00041
00042 void CConvertPropsDlg::DoDataExchange(CDataExchange* pDX)
00043 {
00044 __super::DoDataExchange(pDX);
00045 DDX_Control(pDX, IDC_COMBO1, m_fcc);
00046 DDX_Control(pDX, IDC_EDIT1, m_text);
00047 DDX_Control(pDX, IDC_LIST1, m_list);
00048 }
00049
00050
00051 BEGIN_MESSAGE_MAP(CConvertPropsDlg, CResizableDialog)
00052 ON_NOTIFY(NM_CLICK, IDC_LIST1, OnNMClickList1)
00053 ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1)
00054 ON_UPDATE_COMMAND_UI(IDC_BUTTON1, OnUpdateButton1)
00055 ON_CBN_EDITCHANGE(IDC_COMBO1, OnCbnEditchangeCombo1)
00056 ON_CBN_SELCHANGE(IDC_COMBO1, OnCbnSelchangeCombo1)
00057 ON_NOTIFY(LVN_KEYDOWN, IDC_LIST1, OnLvnKeydownList1)
00058 END_MESSAGE_MAP()
00059
00060
00061
00062
00063 BOOL CConvertPropsDlg::OnInitDialog()
00064 {
00065 __super::OnInitDialog();
00066
00067 AddAnchor(IDC_COMBO1, TOP_LEFT);
00068 AddAnchor(IDC_EDIT1, TOP_LEFT, TOP_RIGHT);
00069 AddAnchor(IDC_BUTTON1, TOP_RIGHT);
00070 AddAnchor(IDC_LIST1, TOP_LEFT, BOTTOM_RIGHT);
00071 AddAnchor(IDOK, BOTTOM_CENTER);
00072 AddAnchor(IDCANCEL, BOTTOM_CENTER);
00073
00074 if(m_fPin)
00075 {
00076 m_fcc.AddString(_T("NAME"));
00077 m_fcc.AddString(_T("LANG"));
00078 m_fcc.AddString(_T("DESC"));
00079 m_fcc.AddString(_T("SGRP"));
00080 }
00081 else
00082 {
00083 m_fcc.AddString(_T("TITL"));
00084 m_fcc.AddString(_T("AUTH"));
00085 m_fcc.AddString(_T("RTNG"));
00086 m_fcc.AddString(_T("CPYR"));
00087 m_fcc.AddString(_T("DESC"));
00088 }
00089
00090 m_list.InsertColumn(0, _T("ID"), LVCFMT_LEFT, 75);
00091 m_list.InsertColumn(1, _T("Text"), LVCFMT_LEFT, 280);
00092
00093 m_list.SetExtendedStyle(m_list.GetExtendedStyle()|LVS_EX_FULLROWSELECT);
00094
00095 POSITION pos = m_props.GetStartPosition();
00096 while(pos)
00097 {
00098 CString key, value;
00099 m_props.GetNextAssoc(pos, key, value);
00100 SetItem(key, value);
00101 }
00102
00103 return TRUE;
00104
00105 }
00106
00107 void CConvertPropsDlg::SetItem(CString key, CString value)
00108 {
00109 LVFINDINFO fi;
00110 fi.flags = LVFI_STRING;
00111 fi.psz = key;
00112
00113 int i = m_list.FindItem(&fi);
00114 if(i < 0) i = m_list.InsertItem(m_list.GetItemCount(), _T(""));
00115
00116 key.Trim();
00117 value.Trim();
00118
00119 if(value.IsEmpty())
00120 {
00121 m_list.DeleteItem(i);
00122 return;
00123 }
00124
00125 if(key == _T("LANG") && value.GetLength() != 3)
00126 {
00127 m_list.DeleteItem(i);
00128 AfxMessageBox(_T("LANG has to be a three letter ISO 639-2 language code."), MB_OK);
00129 return;
00130 }
00131
00132 m_list.SetItemText(i, 0, key);
00133 m_list.SetItemText(i, 1, value);
00134 }
00135
00136 void CConvertPropsDlg::OnOK()
00137 {
00138 m_props.RemoveAll();
00139
00140 for(int i = 0; i < m_list.GetItemCount(); i++)
00141 m_props[m_list.GetItemText(i, 0)] = m_list.GetItemText(i, 1);
00142
00143 __super::OnOK();
00144 }
00145
00146 void CConvertPropsDlg::OnNMClickList1(NMHDR *pNMHDR, LRESULT *pResult)
00147 {
00148 LPNMLISTVIEW lpnmlv = (LPNMLISTVIEW)pNMHDR;
00149
00150 if(lpnmlv->iItem >= 0)
00151 {
00152 m_fcc.SetWindowText(m_list.GetItemText(lpnmlv->iItem, 0));
00153 m_text.SetWindowText(m_list.GetItemText(lpnmlv->iItem, 1));
00154 }
00155
00156 *pResult = 0;
00157 }
00158
00159 void CConvertPropsDlg::OnBnClickedButton1()
00160 {
00161 CString key, value;
00162 m_fcc.GetWindowText(key);
00163 m_text.GetWindowText(value);
00164 if(key.GetLength() != 4) {AfxMessageBox(_T("ID must be 4 characters long!"), MB_OK); return;}
00165 SetItem(key, value);
00166 }
00167
00168 void CConvertPropsDlg::OnUpdateButton1(CCmdUI* pCmdUI)
00169 {
00170 pCmdUI->Enable(GetDlgItem(IDC_EDIT1)->GetWindowTextLength() > 0);
00171 }
00172
00173 void CConvertPropsDlg::OnCbnEditchangeCombo1()
00174 {
00175 int i = m_fcc.GetCurSel();
00176 if(i < 0) return;
00177
00178 CString key;
00179 m_fcc.GetLBText(i, key);
00180
00181 LVFINDINFO fi;
00182 fi.flags = LVFI_STRING;
00183 fi.psz = key;
00184
00185 i = m_list.FindItem(&fi);
00186 if(i > 0) m_text.SetWindowText(m_list.GetItemText(i, 1));
00187 }
00188
00189 void CConvertPropsDlg::OnCbnSelchangeCombo1()
00190 {
00191 OnCbnEditchangeCombo1();
00192 }
00193
00194 void CConvertPropsDlg::OnLvnKeydownList1(NMHDR *pNMHDR, LRESULT *pResult)
00195 {
00196 LPNMLVKEYDOWN pLVKeyDow = reinterpret_cast<LPNMLVKEYDOWN>(pNMHDR);
00197
00198 int i = m_fcc.GetCurSel();
00199 if(i >= 0) m_list.DeleteItem(i);
00200
00201 *pResult = 0;
00202 }