PPageFileInfoRes.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 // PPageFileInfoRes.cpp : implementation file
00023 //
00024 
00025 #include "stdafx.h"
00026 #include "mplayerc.h"
00027 #include "PPageFileInfoRes.h"
00028 #include ".\ppagefileinfores.h"
00029 
00030 // CPPageFileInfoRes dialog
00031 
00032 IMPLEMENT_DYNAMIC(CPPageFileInfoRes, CPPageBase)
00033 CPPageFileInfoRes::CPPageFileInfoRes(CString fn, IFilterGraph* pFG)
00034         : CPPageBase(CPPageFileInfoRes::IDD, CPPageFileInfoRes::IDD)
00035         , m_fn(fn)
00036         , m_hIcon(NULL)
00037         , m_pFG(pFG)
00038 {
00039 }
00040 
00041 CPPageFileInfoRes::~CPPageFileInfoRes()
00042 {
00043         if(m_hIcon) DestroyIcon(m_hIcon);
00044 }
00045 
00046 void CPPageFileInfoRes::DoDataExchange(CDataExchange* pDX)
00047 {
00048         __super::DoDataExchange(pDX);
00049         DDX_Control(pDX, IDC_DEFAULTICON, m_icon);
00050         DDX_Text(pDX, IDC_EDIT1, m_fn);
00051         DDX_Control(pDX, IDC_LIST1, m_list);
00052 }
00053 
00054 BEGIN_MESSAGE_MAP(CPPageFileInfoRes, CPPageBase)
00055         ON_BN_CLICKED(IDC_BUTTON1, OnSaveAs)
00056         ON_UPDATE_COMMAND_UI(IDC_BUTTON1, OnUpdateSaveAs)
00057         ON_NOTIFY(NM_DBLCLK, IDC_LIST1, OnNMDblclkList1)
00058 END_MESSAGE_MAP()
00059 
00060 // CPPageFileInfoRes message handlers
00061 
00062 BOOL CPPageFileInfoRes::OnInitDialog()
00063 {
00064         __super::OnInitDialog();
00065 
00066         if(m_hIcon = LoadIcon(m_fn, false))
00067                 m_icon.SetIcon(m_hIcon);
00068 
00069         m_fn.TrimRight('/');
00070         int i = max(m_fn.ReverseFind('\\'), m_fn.ReverseFind('/'));
00071         if(i >= 0 && i < m_fn.GetLength()-1)
00072                 m_fn = m_fn.Mid(i+1);
00073 
00074         m_list.SetExtendedStyle(m_list.GetExtendedStyle()|LVS_EX_FULLROWSELECT);
00075 
00076         m_list.InsertColumn(0, _T("Name"), LVCFMT_LEFT, 187);
00077         m_list.InsertColumn(1, _T("Mime Type"), LVCFMT_LEFT, 127);
00078 
00079         BeginEnumFilters(m_pFG, pEF, pBF)
00080         {
00081                 if(CComQIPtr<IDSMResourceBag> pRB = pBF)
00082                 if(pRB && pRB->ResGetCount() > 0)
00083                 {
00084                         for(DWORD i = 0; i < pRB->ResGetCount(); i++)
00085                         {
00086                                 CComBSTR name, desc, mime;
00087                                 BYTE* pData = NULL;
00088                                 DWORD len = 0;
00089                                 if(SUCCEEDED(pRB->ResGet(i, &name, &desc, &mime, &pData, &len, NULL)))
00090                                 {
00091                                         CDSMResource r;
00092                                         r.name = name;
00093                                         r.desc = desc;
00094                                         r.mime = mime;
00095                                         r.data.SetSize(len);
00096                                         memcpy(r.data.GetData(), pData, r.data.GetSize());
00097                                         CoTaskMemFree(pData);
00098                                         POSITION pos = m_res.AddTail(r);
00099                                         int iItem = m_list.InsertItem(m_list.GetItemCount(), CString(name));
00100                                         m_list.SetItemText(iItem, 1, CString(mime));
00101                                         m_list.SetItemData(iItem, (DWORD_PTR)pos);
00102                                 }
00103                         }
00104                 }
00105         }
00106         EndEnumFilters
00107 
00108         UpdateData(FALSE);
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 CPPageFileInfoRes::OnSaveAs()
00115 {
00116         int i = m_list.GetSelectionMark();
00117         if(i < 0) return;
00118 
00119         CDSMResource& r = m_res.GetAt((POSITION)m_list.GetItemData(i));
00120 
00121         CFileDialog fd(FALSE, NULL, CString(r.name), 
00122                 OFN_EXPLORER|OFN_ENABLESIZING|OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
00123                 _T("All files|*.*||"), this, 0);
00124         if(fd.DoModal() == IDOK)
00125         {
00126                 if(FILE* f = _tfopen(fd.GetPathName(), _T("wb")))
00127                 {
00128                         fwrite(r.data.GetData(), 1, r.data.GetSize(), f);
00129                         fclose(f);
00130                 }
00131         }
00132 }
00133 
00134 void CPPageFileInfoRes::OnUpdateSaveAs(CCmdUI* pCmdUI)
00135 {
00136         pCmdUI->Enable(m_list.GetSelectedCount());
00137 }
00138 
00139 void CPPageFileInfoRes::OnNMDblclkList1(NMHDR *pNMHDR, LRESULT *pResult)
00140 {
00141         int i = m_list.GetSelectionMark();
00142         if(i < 0) return;
00143 
00144         CDSMResource& r = m_res.GetAt((POSITION)m_list.GetItemData(i));
00145 
00146         CString url;
00147         url.Format(_T("http://localhost:%d/convres.html?id=%x"), AfxGetAppSettings().nWebServerPort, (DWORD)&r);
00148         ShellExecute(NULL, _T("open"), url, NULL, NULL, SW_SHOWDEFAULT);
00149 
00150         *pResult = 0;
00151 }

Generated on Tue Dec 13 14:47:00 2005 for guliverkli by  doxygen 1.4.5