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 "PPageFormats.h"
00028
00029
00030
00031 IMPLEMENT_DYNAMIC(CPPageFormats, CPPageBase)
00032 CPPageFormats::CPPageFormats()
00033 : CPPageBase(CPPageFormats::IDD, CPPageFormats::IDD)
00034 , m_list(0)
00035 , m_exts(_T(""))
00036 , m_iRtspHandler(0)
00037 , m_fRtspFileExtFirst(FALSE)
00038 {
00039 }
00040
00041 CPPageFormats::~CPPageFormats()
00042 {
00043 }
00044
00045 void CPPageFormats::DoDataExchange(CDataExchange* pDX)
00046 {
00047 __super::DoDataExchange(pDX);
00048 DDX_Control(pDX, IDC_LIST1, m_list);
00049 DDX_Text(pDX, IDC_EDIT1, m_exts);
00050 DDX_Control(pDX, IDC_STATIC1, m_autoplay);
00051 DDX_Control(pDX, IDC_CHECK1, m_apvideo);
00052 DDX_Control(pDX, IDC_CHECK2, m_apmusic);
00053 DDX_Control(pDX, IDC_CHECK3, m_apaudiocd);
00054 DDX_Control(pDX, IDC_CHECK4, m_apdvd);
00055 DDX_Radio(pDX, IDC_RADIO4, m_iRtspHandler);
00056 DDX_Check(pDX, IDC_CHECK5, m_fRtspFileExtFirst);
00057 }
00058
00059 int CPPageFormats::GetChecked(int iItem)
00060 {
00061 LVITEM lvi;
00062 lvi.iItem = iItem;
00063 lvi.iSubItem = 0;
00064 lvi.mask = LVIF_IMAGE;
00065 m_list.GetItem(&lvi);
00066 return(lvi.iImage);
00067 }
00068
00069 void CPPageFormats::SetChecked(int iItem, int iChecked)
00070 {
00071 LVITEM lvi;
00072 lvi.iItem = iItem;
00073 lvi.iSubItem = 0;
00074 lvi.mask = LVIF_IMAGE;
00075 lvi.iImage = iChecked;
00076 m_list.SetItem(&lvi);
00077 }
00078
00079 static bool MakeRegParams(CString ext, CString& path, CString& fn, CString& extfile, CString& cmd)
00080 {
00081 if(ext.GetLength() == 0)
00082 return(false);
00083
00084 TCHAR buff[MAX_PATH];
00085 if(::GetModuleFileName(AfxGetInstanceHandle(), buff, MAX_PATH) == 0)
00086 return(false);
00087
00088 path = buff;
00089
00090 fn = path.Mid(path.ReverseFind('\\')+1).MakeLower();
00091 if(fn.IsEmpty())
00092 return(false);
00093
00094 extfile = ext.TrimLeft('.')+_T("file");
00095
00096 cmd = _T("\"") + path + _T("\" \"%1\"");
00097
00098 return(true);
00099 }
00100
00101 bool CPPageFormats::IsRegistered(CString ext)
00102 {
00103 CString path, fn, extfile, cmd;
00104 if(!MakeRegParams(ext, path, fn, extfile, cmd))
00105 return(false);
00106
00107 TCHAR buff[256];
00108 ULONG len = sizeof(buff);
00109 memset(buff, 0, len);
00110
00111 CRegKey key;
00112
00113 CString ExplExt = _T("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\") + ext;
00114 if(ERROR_SUCCESS == key.Open(HKEY_CURRENT_USER, ExplExt, KEY_READ))
00115 {
00116 len = sizeof(buff);
00117 memset(buff, 0, len);
00118 if(ERROR_SUCCESS == key.QueryStringValue(_T("Application"), buff, &len))
00119 return(CString(buff).Trim() == cmd);
00120 }
00121
00122 if(ERROR_SUCCESS != key.Open(HKEY_CLASSES_ROOT, ext, KEY_READ))
00123 return(false);
00124
00125 len = sizeof(buff);
00126 memset(buff, 0, len);
00127 if(ERROR_SUCCESS != key.QueryStringValue(NULL, buff, &len) || (extfile = buff).Trim().IsEmpty())
00128 return(false);
00129
00130 if(ERROR_SUCCESS != key.Open(HKEY_CLASSES_ROOT, extfile + _T("\\shell\\open\\command"), KEY_READ))
00131 return(false);
00132
00133 len = sizeof(buff);
00134 memset(buff, 0, len);
00135
00136 CRegKey key2;
00137 if(ERROR_SUCCESS == key2.Open(HKEY_CLASSES_ROOT, extfile + _T("\\shell\\open"), KEY_READ)
00138 && ERROR_SUCCESS == key2.QueryStringValue(_T("LegacyDisable"), buff, &len))
00139 return(false);
00140
00141 len = sizeof(buff);
00142 memset(buff, 0, len);
00143
00144 if(ERROR_SUCCESS == key2.Open(HKEY_CLASSES_ROOT, extfile + _T("\\shell\\open\\DropTarget"), KEY_READ))
00145 return(false);
00146
00147 len = sizeof(buff);
00148 memset(buff, 0, len);
00149
00150 return(ERROR_SUCCESS == key.QueryStringValue(NULL, buff, &len)
00151 && !CString(buff).CompareNoCase(cmd));
00152 }
00153
00154 bool CPPageFormats::RegisterExt(CString ext, bool fRegister)
00155 {
00156 if(fRegister == IsRegistered(ext))
00157 return(true);
00158
00159 CString path, fn, extfile, cmd;
00160 if(!MakeRegParams(ext, path, fn, extfile, cmd))
00161 return(false);
00162
00163 TCHAR buff[256];
00164 ULONG len = sizeof(buff);
00165 memset(buff, 0, len);
00166
00167 CRegKey key;
00168
00169 if(ERROR_SUCCESS != key.Create(HKEY_CLASSES_ROOT, ext))
00170 return(false);
00171
00172 len = sizeof(buff);
00173 memset(buff, 0, len);
00174
00175 if(ERROR_SUCCESS == key.QueryStringValue(NULL, buff, &len) && !CString(buff).Trim().IsEmpty())
00176 {
00177 extfile = buff;
00178 }
00179 else
00180 {
00181 if(!fRegister) return(true);
00182 else if(ERROR_SUCCESS != key.SetStringValue(NULL, extfile)) return(false);
00183 }
00184
00185 if(fRegister)
00186 {
00187 if(ERROR_SUCCESS != key.Create(HKEY_CLASSES_ROOT, extfile + _T("\\shell")))
00188 return(false);
00189
00190 len = sizeof(buff);
00191 memset(buff, 0, len);
00192
00193 key.QueryStringValue(NULL, buff, &len);
00194
00195 if(ERROR_SUCCESS != key.SetStringValue(fn + _T(".bak"), buff))
00196 return(false);
00197
00198 if(ERROR_SUCCESS != key.SetStringValue(NULL, _T("open")))
00199 {
00200 key.SetStringValue(NULL, buff);
00201 key.DeleteValue(fn + _T(".bak"));
00202 return(false);
00203 }
00204
00205 if(ERROR_SUCCESS != key.Create(HKEY_CLASSES_ROOT, extfile + _T("\\shell\\open")))
00206 return(false);
00207
00208 len = sizeof(buff);
00209 memset(buff, 0, len);
00210
00211 if(ERROR_SUCCESS != key.SetStringValue(NULL, _T("&Open")))
00212 return(false);
00213
00214 if(ERROR_SUCCESS != key.Create(HKEY_CLASSES_ROOT, extfile + _T("\\shell\\open\\command")))
00215 return(false);
00216
00217 len = sizeof(buff);
00218 memset(buff, 0, len);
00219
00220 key.QueryStringValue(NULL, buff, &len);
00221
00222 if(CString(buff).MakeLower() == cmd)
00223 return(true);
00224
00225 if(ERROR_SUCCESS != key.SetStringValue(fn + _T(".bak"), buff))
00226 return(false);
00227
00228 if(ERROR_SUCCESS != key.SetStringValue(NULL, cmd))
00229 {
00230 key.SetStringValue(NULL, buff);
00231 key.DeleteValue(fn + _T(".bak"));
00232 return(false);
00233 }
00234
00235 len = sizeof(buff);
00236 memset(buff, 0, len);
00237
00238 if(ERROR_SUCCESS == key.Open(HKEY_CLASSES_ROOT, extfile + _T("\\shell\\open")))
00239 {
00240 if(ERROR_SUCCESS == key.QueryStringValue(_T("LegacyDisable"), buff, &len))
00241 {
00242 key.DeleteValue(_T("LegacyDisable"));
00243 key.SetStringValue(_T("LegacyDisable.bak"), _T(""));
00244 }
00245
00246 key.RecurseDeleteKey(_T("ddeexec"));
00247 key.RecurseDeleteKey(_T("DropTarget"));
00248 }
00249
00250 if(ERROR_SUCCESS == key.Open(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\") + ext))
00251 {
00252 key.DeleteValue(_T("Application"));
00253 }
00254 }
00255 else
00256 {
00257 if(ERROR_SUCCESS != key.Open(HKEY_CLASSES_ROOT, extfile + _T("\\shell\\open\\command")))
00258 return(true);
00259
00260 len = sizeof(buff);
00261 memset(buff, 0, len);
00262
00263 if(ERROR_SUCCESS != key.QueryStringValue(fn + _T(".bak"), buff, &len))
00264 buff[0] = 0;
00265
00266 if(CString(buff).Trim().IsEmpty())
00267 {
00268 if(ERROR_SUCCESS != key.Open(HKEY_CLASSES_ROOT, extfile + _T("\\shell\\open"))
00269 || ERROR_SUCCESS != key.RecurseDeleteKey(_T("command")))
00270 return(false);
00271 }
00272 else
00273 {
00274 if(ERROR_SUCCESS != key.SetStringValue(NULL, buff)
00275 || ERROR_SUCCESS != key.DeleteValue(fn + _T(".bak")))
00276 return(false);
00277
00278 len = sizeof(buff);
00279 memset(buff, 0, len);
00280
00281 if(ERROR_SUCCESS == key.Open(HKEY_CLASSES_ROOT, extfile + _T("\\shell\\open"))
00282 && ERROR_SUCCESS == key.QueryStringValue(_T("LegacyDisable.bak"), buff, &len))
00283 {
00284 key.DeleteValue(_T("LegacyDisable.bak"));
00285 key.SetStringValue(_T("LegacyDisable"), _T(""));
00286 }
00287 }
00288
00289 if(ERROR_SUCCESS != key.Open(HKEY_CLASSES_ROOT, extfile + _T("\\shell")))
00290 return(true);
00291
00292 len = sizeof(buff);
00293 memset(buff, 0, len);
00294
00295 if(ERROR_SUCCESS != key.QueryStringValue(fn + _T(".bak"), buff, &len))
00296 return(true);
00297
00298 if(CString(buff).Trim().IsEmpty())
00299 {
00300 if(ERROR_SUCCESS != key.Open(HKEY_CLASSES_ROOT, extfile)
00301 || ERROR_SUCCESS != key.RecurseDeleteKey(_T("shell")))
00302 return(false);
00303 }
00304 else
00305 {
00306 if(ERROR_SUCCESS != key.SetStringValue(NULL, buff)
00307 || ERROR_SUCCESS != key.DeleteValue(fn + _T(".bak")))
00308 return(false);
00309 }
00310 }
00311
00312 return(true);
00313 }
00314
00315 static struct {TCHAR verb[20], cmd[20], action[100];} handlers[] =
00316 {
00317 {_T("VideoFiles"), _T(" %1"), _T("Play Video")},
00318 {_T("MusicFiles"), _T(" %1"), _T("Play Music")},
00319 {_T("CDAudio"), _T(" %1 /cd"), _T("Play Audio CD")},
00320 {_T("DVDMovie"), _T(" %1 /dvd"), _T("Play DVD Movie")},
00321 };
00322
00323 void CPPageFormats::AddAutoPlayToRegistry(autoplay_t ap, bool fRegister)
00324 {
00325 if(!AfxGetAppSettings().fXpOrBetter) return;
00326
00327 TCHAR buff[MAX_PATH];
00328 if(::GetModuleFileName(AfxGetInstanceHandle(), buff, MAX_PATH) == 0) return;
00329 CString exe = buff;
00330
00331 int i = (int)ap;
00332 if(i < 0 || i >= countof(handlers)) return;
00333
00334 CRegKey key;
00335
00336 if(fRegister)
00337 {
00338 if(ERROR_SUCCESS != key.Create(HKEY_CLASSES_ROOT, _T("MediaPlayerClassic.Autorun"))) return;
00339 key.Close();
00340
00341 if(ERROR_SUCCESS != key.Create(HKEY_CLASSES_ROOT,
00342 CString(_T("MediaPlayerClassic.Autorun\\Shell\\Play")) + handlers[i].verb + _T("\\Command"))) return;
00343 key.SetStringValue(NULL, exe + handlers[i].cmd);
00344 key.Close();
00345
00346 if(ERROR_SUCCESS != key.Create(HKEY_LOCAL_MACHINE,
00347 CString(_T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\AutoplayHandlers\\Handlers\\MPCPlay")) + handlers[i].verb + _T("OnArrival"))) return;
00348 key.SetStringValue(_T("Action"), handlers[i].action);
00349 key.SetStringValue(_T("Provider"), _T("Media Player Classic"));
00350 key.SetStringValue(_T("InvokeProgID"), _T("MediaPlayerClassic.Autorun"));
00351 key.SetStringValue(_T("InvokeVerb"), CString(_T("Play")) + handlers[i].verb);
00352 key.SetStringValue(_T("DefaultIcon"), exe + _T(",0"));
00353 key.Close();
00354
00355 if(ERROR_SUCCESS != key.Create(HKEY_LOCAL_MACHINE,
00356 CString(_T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\AutoplayHandlers\\EventHandlers\\Play")) + handlers[i].verb + _T("OnArrival"))) return;
00357 key.SetStringValue(CString(_T("MPCPlay")) + handlers[i].verb + _T("OnArrival"), _T(""));
00358 key.Close();
00359 }
00360 else
00361 {
00362 if(ERROR_SUCCESS != key.Create(HKEY_LOCAL_MACHINE,
00363 CString(_T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\AutoplayHandlers\\EventHandlers\\Play")) + handlers[i].verb + _T("OnArrival"))) return;
00364 key.DeleteValue(CString(_T("MPCPlay")) + handlers[i].verb + _T("OnArrival"));
00365 key.Close();
00366 }
00367 }
00368
00369 bool CPPageFormats::IsAutoPlayRegistered(autoplay_t ap)
00370 {
00371 ULONG len;
00372 TCHAR buff[MAX_PATH];
00373 if(::GetModuleFileName(AfxGetInstanceHandle(), buff, MAX_PATH) == 0) return(false);
00374 CString exe = buff;
00375
00376 int i = (int)ap;
00377 if(i < 0 || i >= countof(handlers)) return(false);
00378
00379 CRegKey key;
00380
00381 if(ERROR_SUCCESS != key.Open(HKEY_LOCAL_MACHINE,
00382 CString(_T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\AutoplayHandlers\\EventHandlers\\Play")) + handlers[i].verb + _T("OnArrival"),
00383 KEY_READ)) return(false);
00384 len = countof(buff);
00385 if(ERROR_SUCCESS != key.QueryStringValue(
00386 CString(_T("MPCPlay")) + handlers[i].verb + _T("OnArrival"),
00387 buff, &len)) return(false);
00388 key.Close();
00389
00390 if(ERROR_SUCCESS != key.Open(HKEY_CLASSES_ROOT,
00391 CString(_T("MediaPlayerClassic.Autorun\\Shell\\Play")) + handlers[i].verb + _T("\\Command"),
00392 KEY_READ)) return(false);
00393 len = countof(buff);
00394 if(ERROR_SUCCESS != key.QueryStringValue(NULL, buff, &len))
00395 return(false);
00396 if(_tcsnicmp(exe, buff, exe.GetLength()))
00397 return(false);
00398 key.Close();
00399
00400 return(true);
00401 }
00402
00403 void CPPageFormats::SetListItemState(int nItem)
00404 {
00405 if(nItem < 0) return;
00406
00407 CString str = AfxGetAppSettings().Formats[(int)m_list.GetItemData(nItem)].GetExtsWithPeriod();
00408
00409 CList<CString> exts;
00410 ExplodeMin(str, exts, ' ');
00411
00412 int cnt = 0;
00413
00414 POSITION pos = exts.GetHeadPosition();
00415 while(pos) if(IsRegistered(exts.GetNext(pos))) cnt++;
00416
00417 SetChecked(nItem, cnt == 0 ? 0 : cnt == exts.GetCount() ? 1 : 2);
00418 }
00419
00420 BEGIN_MESSAGE_MAP(CPPageFormats, CPPageBase)
00421 ON_NOTIFY(NM_CLICK, IDC_LIST1, OnNMClickList1)
00422 ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST1, OnLvnItemchangedList1)
00423 ON_NOTIFY(LVN_BEGINLABELEDIT, IDC_LIST1, OnBeginlabeleditList)
00424 ON_NOTIFY(LVN_DOLABELEDIT, IDC_LIST1, OnDolabeleditList)
00425 ON_NOTIFY(LVN_ENDLABELEDIT, IDC_LIST1, OnEndlabeleditList)
00426 ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1)
00427 ON_BN_CLICKED(IDC_BUTTON12, OnBnClickedButton12)
00428 ON_BN_CLICKED(IDC_BUTTON11, OnBnClickedButton11)
00429 ON_BN_CLICKED(IDC_BUTTON14, OnBnClickedButton14)
00430 ON_BN_CLICKED(IDC_BUTTON13, OnBnClickedButton13)
00431 ON_UPDATE_COMMAND_UI(IDC_BUTTON12, OnUpdateButtonDefault)
00432 ON_UPDATE_COMMAND_UI(IDC_BUTTON11, OnUpdateButtonSet)
00433 END_MESSAGE_MAP()
00434
00435
00436
00437 BOOL CPPageFormats::OnInitDialog()
00438 {
00439 __super::OnInitDialog();
00440
00441 m_list.SetExtendedStyle(m_list.GetExtendedStyle()|LVS_EX_FULLROWSELECT);
00442
00443 m_list.InsertColumn(COL_CATEGORY, _T("Category"), LVCFMT_LEFT, 300);
00444 m_list.InsertColumn(COL_ENGINE, _T("Engine"), LVCFMT_RIGHT, 60);
00445
00446 m_onoff.Create(IDB_ONOFF, 12, 3, 0xffffff);
00447 m_list.SetImageList(&m_onoff, LVSIL_SMALL);
00448
00449 CMediaFormats& mf = AfxGetAppSettings().Formats;
00450 for(int i = 0; i < mf.GetCount(); i++)
00451 {
00452 CString label = mf[i].GetLabel();
00453
00454 if(!label.CompareNoCase(_T("Image file"))) continue;
00455 int iItem = m_list.InsertItem(i, label);
00456 m_list.SetItemData(iItem, i);
00457 engine_t e = mf[i].GetEngineType();
00458 m_list.SetItemText(iItem, COL_ENGINE,
00459 e == DirectShow ? _T("DirectShow") :
00460 e == RealMedia ? _T("RealMedia") :
00461 e == QuickTime ? _T("QuickTime") :
00462 e == ShockWave ? _T("ShockWave") : _T("-"));
00463 }
00464
00465
00466 m_list.SetColumnWidth(COL_ENGINE, LVSCW_AUTOSIZE_USEHEADER);
00467
00468 m_list.SetSelectionMark(0);
00469 m_list.SetItemState(0, LVIS_SELECTED, LVIS_SELECTED);
00470 m_exts = mf[(int)m_list.GetItemData(0)].GetExtsWithPeriod();
00471
00472 AppSettings& s = AfxGetAppSettings();
00473 bool fRtspFileExtFirst;
00474 engine_t e = s.Formats.GetRtspHandler(fRtspFileExtFirst);
00475 m_iRtspHandler = (e==RealMedia?0:e==QuickTime?1:2);
00476 m_fRtspFileExtFirst = fRtspFileExtFirst;
00477
00478 UpdateData(FALSE);
00479
00480 for(int i = 0; i < m_list.GetItemCount(); i++)
00481 {
00482 SetListItemState(i);
00483 }
00484
00485 if(AfxGetAppSettings().fXpOrBetter)
00486 {
00487 m_apvideo.SetCheck(IsAutoPlayRegistered(AP_VIDEO));
00488 m_apmusic.SetCheck(IsAutoPlayRegistered(AP_MUSIC));
00489 m_apaudiocd.SetCheck(IsAutoPlayRegistered(AP_AUDIOCD));
00490 m_apdvd.SetCheck(IsAutoPlayRegistered(AP_DVDMOVIE));
00491 }
00492 else
00493 {
00494 m_autoplay.ShowWindow(SW_HIDE);
00495 m_apvideo.ShowWindow(SW_HIDE);
00496 m_apmusic.ShowWindow(SW_HIDE);
00497 m_apaudiocd.ShowWindow(SW_HIDE);
00498 m_apdvd.ShowWindow(SW_HIDE);
00499 }
00500
00501 return TRUE;
00502
00503 }
00504
00505 BOOL CPPageFormats::OnApply()
00506 {
00507 UpdateData();
00508
00509 {
00510 int i = m_list.GetSelectionMark();
00511 if(i >= 0) i = (int)m_list.GetItemData(i);
00512 if(i >= 0)
00513 {
00514 CMediaFormats& mf = AfxGetAppSettings().Formats;
00515 mf[i].SetExts(m_exts);
00516 m_exts = mf[i].GetExtsWithPeriod();
00517 UpdateData(FALSE);
00518 }
00519 }
00520
00521 CMediaFormats& mf = AfxGetAppSettings().Formats;
00522
00523 for(int i = 0; i < m_list.GetItemCount(); i++)
00524 {
00525 int iChecked = GetChecked(i);
00526 if(iChecked == 2) continue;
00527
00528 CList<CString> exts;
00529 Explode(mf[(int)m_list.GetItemData(i)].GetExtsWithPeriod(), exts, ' ');
00530
00531 POSITION pos = exts.GetHeadPosition();
00532 while(pos) RegisterExt(exts.GetNext(pos), !!iChecked);
00533 }
00534
00535 {
00536 SetListItemState(m_list.GetSelectionMark());
00537 }
00538
00539 AddAutoPlayToRegistry(AP_VIDEO, !!m_apvideo.GetCheck());
00540 AddAutoPlayToRegistry(AP_MUSIC, !!m_apmusic.GetCheck());
00541 AddAutoPlayToRegistry(AP_AUDIOCD, !!m_apaudiocd.GetCheck());
00542 AddAutoPlayToRegistry(AP_DVDMOVIE, !!m_apdvd.GetCheck());
00543
00544
00545
00546 AppSettings& s = AfxGetAppSettings();
00547 s.Formats.SetRtspHandler(m_iRtspHandler==0?RealMedia:m_iRtspHandler==1?QuickTime:DirectShow, !!m_fRtspFileExtFirst);
00548
00549 return __super::OnApply();
00550 }
00551
00552 void CPPageFormats::OnNMClickList1(NMHDR* pNMHDR, LRESULT* pResult)
00553 {
00554 LPNMLISTVIEW lpnmlv = (LPNMLISTVIEW)pNMHDR;
00555
00556 if(lpnmlv->iItem >= 0 && lpnmlv->iSubItem == COL_CATEGORY)
00557 {
00558 CRect r;
00559 m_list.GetItemRect(lpnmlv->iItem, r, LVIR_ICON);
00560 if(r.PtInRect(lpnmlv->ptAction))
00561 {
00562 SetChecked(lpnmlv->iItem, (GetChecked(lpnmlv->iItem)&1) == 0 ? 1 : 0);
00563 SetModified();
00564 }
00565 }
00566
00567 *pResult = 0;
00568 }
00569
00570 void CPPageFormats::OnLvnItemchangedList1(NMHDR *pNMHDR, LRESULT *pResult)
00571 {
00572 LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
00573
00574 if(pNMLV->iItem >= 0 && pNMLV->iSubItem == COL_CATEGORY
00575 && (pNMLV->uChanged&LVIF_STATE) && (pNMLV->uNewState&LVIS_SELECTED))
00576 {
00577 m_exts = AfxGetAppSettings().Formats[(int)m_list.GetItemData(pNMLV->iItem)].GetExtsWithPeriod();
00578 UpdateData(FALSE);
00579 }
00580
00581 *pResult = 0;
00582 }
00583
00584 void CPPageFormats::OnBeginlabeleditList(NMHDR* pNMHDR, LRESULT* pResult)
00585 {
00586 LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
00587 LV_ITEM* pItem = &pDispInfo->item;
00588
00589 *pResult = FALSE;
00590
00591 if(pItem->iItem < 0)
00592 return;
00593
00594 if(pItem->iSubItem == COL_ENGINE)
00595 {
00596 *pResult = TRUE;
00597 }
00598 }
00599
00600 void CPPageFormats::OnDolabeleditList(NMHDR* pNMHDR, LRESULT* pResult)
00601 {
00602 LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
00603 LV_ITEM* pItem = &pDispInfo->item;
00604
00605 *pResult = FALSE;
00606
00607 if(pItem->iItem < 0)
00608 return;
00609
00610 CMediaFormatCategory& mfc = AfxGetAppSettings().Formats[m_list.GetItemData(pItem->iItem)];
00611
00612 CList<CString> sl;
00613 int nSel = -1;
00614
00615 if(pItem->iSubItem == COL_ENGINE)
00616 {
00617 sl.AddTail(_T("DirectShow"));
00618 sl.AddTail(_T("RealMedia"));
00619 sl.AddTail(_T("QuickTime"));
00620 sl.AddTail(_T("ShockWave"));
00621
00622 nSel = (int)mfc.GetEngineType();
00623
00624 m_list.ShowInPlaceComboBox(pItem->iItem, pItem->iSubItem, sl, nSel);
00625
00626 *pResult = TRUE;
00627 }
00628 }
00629
00630 void CPPageFormats::OnEndlabeleditList(NMHDR* pNMHDR, LRESULT* pResult)
00631 {
00632 LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
00633 LV_ITEM* pItem = &pDispInfo->item;
00634
00635 *pResult = FALSE;
00636
00637 if(!m_list.m_fInPlaceDirty)
00638 return;
00639
00640 if(pItem->iItem < 0)
00641 return;
00642
00643 CMediaFormatCategory& mfc = AfxGetAppSettings().Formats[m_list.GetItemData(pItem->iItem)];
00644
00645 if(pItem->iSubItem == COL_ENGINE && pItem->lParam >= 0)
00646 {
00647 mfc.SetEngineType((engine_t)pItem->lParam);
00648 m_list.SetItemText(pItem->iItem, pItem->iSubItem, pItem->pszText);
00649 *pResult = TRUE;
00650 }
00651
00652 if(*pResult)
00653 SetModified();
00654 }
00655
00656 void CPPageFormats::OnBnClickedButton1()
00657 {
00658 for(int i = 0, j = m_list.GetItemCount(); i < j; i++)
00659 {
00660 SetChecked(i, 1);
00661 }
00662
00663 m_apvideo.SetCheck(1);
00664 m_apmusic.SetCheck(1);
00665 m_apaudiocd.SetCheck(1);
00666 m_apdvd.SetCheck(1);
00667
00668 SetModified();
00669 }
00670
00671 void CPPageFormats::OnBnClickedButton14()
00672 {
00673 CMediaFormats& mf = AfxGetAppSettings().Formats;
00674
00675 for(int i = 0, j = m_list.GetItemCount(); i < j; i++)
00676 {
00677 SetChecked(i, mf[(int)m_list.GetItemData(i)].IsAudioOnly()?0:1);
00678 }
00679
00680 m_apvideo.SetCheck(1);
00681 m_apmusic.SetCheck(0);
00682 m_apaudiocd.SetCheck(0);
00683 m_apdvd.SetCheck(1);
00684
00685 SetModified();
00686 }
00687
00688 void CPPageFormats::OnBnClickedButton13()
00689 {
00690 CMediaFormats& mf = AfxGetAppSettings().Formats;
00691
00692 for(int i = 0, j = m_list.GetItemCount(); i < j; i++)
00693 {
00694 SetChecked(i, mf[(int)m_list.GetItemData(i)].IsAudioOnly()?1:0);
00695 }
00696
00697 m_apvideo.SetCheck(0);
00698 m_apmusic.SetCheck(1);
00699 m_apaudiocd.SetCheck(1);
00700 m_apdvd.SetCheck(0);
00701
00702 SetModified();
00703 }
00704
00705 void CPPageFormats::OnBnClickedButton12()
00706 {
00707 int i = m_list.GetSelectionMark();
00708 if(i < 0) return;
00709 i = (int)m_list.GetItemData(i);
00710 CMediaFormats& mf = AfxGetAppSettings().Formats;
00711 mf[i].RestoreDefaultExts();
00712 m_exts = mf[i].GetExtsWithPeriod();
00713 SetListItemState(m_list.GetSelectionMark());
00714 UpdateData(FALSE);
00715
00716 SetModified();
00717 }
00718
00719 void CPPageFormats::OnBnClickedButton11()
00720 {
00721 UpdateData();
00722 int i = m_list.GetSelectionMark();
00723 if(i < 0) return;
00724 i = (int)m_list.GetItemData(i);
00725 CMediaFormats& mf = AfxGetAppSettings().Formats;
00726 mf[i].SetExts(m_exts);
00727 m_exts = mf[i].GetExtsWithPeriod();
00728 SetListItemState(m_list.GetSelectionMark());
00729 UpdateData(FALSE);
00730
00731 SetModified();
00732 }
00733
00734 void CPPageFormats::OnUpdateButtonDefault(CCmdUI* pCmdUI)
00735 {
00736 int i = m_list.GetSelectionMark();
00737 if(i < 0) {pCmdUI->Enable(FALSE); return;}
00738 i = (int)m_list.GetItemData(i);
00739
00740 CString orgexts, newexts;
00741 GetDlgItem(IDC_EDIT1)->GetWindowText(newexts);
00742 newexts.Trim();
00743 orgexts = AfxGetAppSettings().Formats[i].GetBackupExtsWithPeriod();
00744
00745 pCmdUI->Enable(!!newexts.CompareNoCase(orgexts));
00746 }
00747
00748 void CPPageFormats::OnUpdateButtonSet(CCmdUI* pCmdUI)
00749 {
00750 int i = m_list.GetSelectionMark();
00751 if(i < 0) {pCmdUI->Enable(FALSE); return;}
00752 i = (int)m_list.GetItemData(i);
00753
00754 CString orgexts, newexts;
00755 GetDlgItem(IDC_EDIT1)->GetWindowText(newexts);
00756 newexts.Trim();
00757 orgexts = AfxGetAppSettings().Formats[i].GetExtsWithPeriod();
00758
00759 pCmdUI->Enable(!!newexts.CompareNoCase(orgexts));
00760 }