- Main Page
- Namespaces
- Classes
- Files
- Directories

- File List
- File Members

# RegFilterChooserDlg.cpp

    00001 /*
    00002  *      Copyright (C) 2003-2005 Gabest
    00003  *      http://www.gabest.org
    00004  *
    00005  *  This Program is free software; you can redistribute it and/or modify
    00006  *  it under the terms of the GNU General Public License as published by
    00007  *  the Free Software Foundation; either version 2, or (at your option)
    00008  *  any later version.
    00009  *
    00010  *  This Program is distributed in the hope that it will be useful,
    00011  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
    00012  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    00013  *  GNU General Public License for more details.
    00014  *
    00015  *  You should have received a copy of the GNU General Public License
    00016  *  along with GNU Make; see the file COPYING.  If not, write to
    00017  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
    00018  *  http://www.gnu.org/copyleft/gpl.html
    00019  *
    00020  */
    00021
    00022 // RegFilterChooserDlg.cpp : implementation file
    00023 //
    00024
    00025 #include "stdafx.h"
    00026 #include "mplayerc.h"
    00027 #include <dmo.h>
    00028 #include "RegFilterChooserDlg.h"
    00029 #include "GraphBuilder.h"
    00030 #include "..\..\DSUtil\DSUtil.h"
    00031
    00032
    00033 // CRegFilterChooserDlg dialog
    00034
    00035 //IMPLEMENT_DYNAMIC(CRegFilterChooserDlg, CResizableDialog)
    00036 CRegFilterChooserDlg::CRegFilterChooserDlg(CWnd* pParent /*=NULL*/)
    00037         : CResizableDialog(CRegFilterChooserDlg::IDD, pParent)
    00038 {
    00039 }
    00040
    00041 CRegFilterChooserDlg::~CRegFilterChooserDlg()
    00042 {
    00043         POSITION pos = m_filters.GetHeadPosition();
    00044         while(pos) delete m_filters.GetNext(pos);
    00045 }
    00046
    00047 void CRegFilterChooserDlg::DoDataExchange(CDataExchange* pDX)
    00048 {
    00049         __super::DoDataExchange(pDX);
    00050         DDX_Control(pDX, IDC_LIST2, m_list);
    00051 }
    00052
    00053 void CRegFilterChooserDlg::AddToList(IMoniker* pMoniker)
    00054 {
    00055         CComPtr<IPropertyBag> pPB;
    00056         if(SUCCEEDED(pMoniker->BindToStorage(0, 0, IID_IPropertyBag, (void**)&pPB)))
    00057         {
    00058                 CComVariant var;
    00059                 if(SUCCEEDED(pPB->Read(CComBSTR(_T("FriendlyName")), &var, NULL)))
    00060                 {
    00061                         m_list.SetItemData(
    00062                                 m_list.InsertItem(-1, CString(CStringW(var.bstrVal))),
    00063                                 (DWORD_PTR)m_monikers.AddTail(pMoniker));
    00064                 }
    00065         }
    00066
    00067 }
    00068
    00069
    00070 BEGIN_MESSAGE_MAP(CRegFilterChooserDlg, CResizableDialog)
    00071         ON_LBN_DBLCLK(IDC_LIST1, OnLbnDblclkList1)
    00072         ON_UPDATE_COMMAND_UI(IDOK, OnUpdateOK)
    00073         ON_BN_CLICKED(IDOK, OnBnClickedOk)
    00074         ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1)
    00075         ON_NOTIFY(NM_DBLCLK, IDC_LIST2, OnNMDblclkList2)
    00076 END_MESSAGE_MAP()
    00077
    00078
    00079 // CRegFilterChooserDlg message handlers
    00080
    00081 BOOL CRegFilterChooserDlg::OnInitDialog()
    00082 {
    00083         __super::OnInitDialog();
    00084
    00085         BeginEnumSysDev(CLSID_LegacyAmFilterCategory, pMoniker)
    00086         {
    00087                 AddToList(pMoniker);
    00088         }
    00089         EndEnumSysDev
    00090
    00091         BeginEnumSysDev(DMOCATEGORY_VIDEO_EFFECT, pMoniker)
    00092         {
    00093                 AddToList(pMoniker);
    00094         }
    00095         EndEnumSysDev
    00096
    00097         BeginEnumSysDev(DMOCATEGORY_AUDIO_EFFECT, pMoniker)
    00098         {
    00099                 AddToList(pMoniker);
    00100         }
    00101         EndEnumSysDev
    00102
    00103         AddAnchor(IDC_LIST2, TOP_LEFT, BOTTOM_RIGHT);
    00104         AddAnchor(IDC_BUTTON1, BOTTOM_LEFT);
    00105         AddAnchor(IDOK, BOTTOM_RIGHT);
    00106         AddAnchor(IDCANCEL, BOTTOM_RIGHT);
    00107
    00108         SetMinTrackSize(CSize(300,100));
    00109
    00110         return TRUE;  // return TRUE unless you set the focus to a control
    00111         // EXCEPTION: OCX Property Pages should return FALSE
    00112 }
    00113
    00114 void CRegFilterChooserDlg::OnLbnDblclkList1()
    00115 {
    00116         SendMessage(WM_COMMAND, IDOK);
    00117 }
    00118
    00119 void CRegFilterChooserDlg::OnUpdateOK(CCmdUI* pCmdUI)
    00120 {
    00121         pCmdUI->Enable(!!m_list.GetFirstSelectedItemPosition());
    00122 }
    00123
    00124 void CRegFilterChooserDlg::OnBnClickedOk()
    00125 {
    00126         CComPtr<IMoniker> pMoniker;
    00127
    00128         POSITION pos = m_list.GetFirstSelectedItemPosition();
    00129         if(pos) pos = (POSITION)m_list.GetItemData(m_list.GetNextSelectedItem(pos));
    00130         if(pos) pMoniker = m_monikers.GetAt(pos);
    00131         if(pMoniker)
    00132         {
    00133                 CGraphRegFilter gf(pMoniker);
    00134                 Filter* f = new Filter;
    00135                 f->fDisabled = false;
    00136                 f->type = Filter::REGISTERED;
    00137                 f->name = gf.GetName();
    00138                 f->dispname = gf.GetDispName();
    00139                 gf.GetGUIDs(f->guids);
    00140                 gf.GetGUIDs(f->backup);
    00141                 f->dwMerit = gf.GetDWORDMerit();
    00142                 f->iLoadType = Filter::MERIT;
    00143                 m_filters.AddTail(f);
    00144         }
    00145
    00146         __super::OnOK();
    00147 }
    00148
    00149 void CRegFilterChooserDlg::OnBnClickedButton1()
    00150 {
    00151         CFileDialog dlg(TRUE, NULL, NULL,
    00152                 OFN_EXPLORER|OFN_ENABLESIZING|OFN_HIDEREADONLY,
    00153                 _T("DirectShow Filters (*.dll,*.ax)|*.dll;*.ax|"), this, 0);
    00154
    00155         if(dlg.DoModal() == IDOK)
    00156         {
    00157                 CFilterMapper2 fm2(false);
    00158                 fm2.Register(dlg.GetPathName());
    00159                 m_filters.AddTail(&fm2.m_filters);
    00160                 fm2.m_filters.RemoveAll();
    00161
    00162                 __super::OnOK();
    00163         }
    00164 }
    00165
    00166 void CRegFilterChooserDlg::OnNMDblclkList2(NMHDR *pNMHDR, LRESULT *pResult)
    00167 {
    00168         if(m_list.GetFirstSelectedItemPosition())
    00169         {
    00170                 OnBnClickedOk();
    00171         }
    00172
    00173         *pResult = 0;
    00174 }