00001
00002
00003
00004
00005
00006 #include "stdafx.h"
00007 #include "FdmApp.h"
00008 #include "FloatingWndDropTarget.h"
00009 #include "DownloadsWnd.h"
00010 #include "SpiderWnd.h"
00011 #include "SpiderAddPageDlg.h"
00012 #include "MainFrm.h"
00013
00014 #ifdef _DEBUG
00015 #undef THIS_FILE
00016 static char THIS_FILE[]=__FILE__;
00017 #define new DEBUG_NEW
00018 #endif
00019
00020 extern CDownloadsWnd* _pwndDownloads;
00021 extern CSpiderWnd* _pwndSpider;
00022
00023 CFloatingWndDropTarget::CFloatingWndDropTarget()
00024 {
00025
00026 }
00027
00028 CFloatingWndDropTarget::~CFloatingWndDropTarget()
00029 {
00030
00031 }
00032
00033 DROPEFFECT CFloatingWndDropTarget::OnDragEnter(CWnd* pWnd, COleDataObject* pData, DWORD dwKeyState, CPoint pt)
00034 {
00035 return OnDragOver (pWnd, pData, dwKeyState, pt);
00036 }
00037
00038 DROPEFFECT CFloatingWndDropTarget::OnDragOver(CWnd*, COleDataObject* pData, DWORD , CPoint )
00039 {
00040 if (pData->IsDataAvailable (CF_TEXT))
00041 {
00042 HGLOBAL hMem = pData->GetGlobalData (CF_TEXT);
00043 if (hMem)
00044 {
00045 LPCSTR psz = (LPCSTR) GlobalLock (hMem);
00046 fsURL url;
00047 BOOL bOk = url.Crack (psz) == IR_SUCCESS;
00048 GlobalUnlock (hMem);
00049 GlobalFree (hMem);
00050 if (bOk)
00051 return DROPEFFECT_COPY | DROPEFFECT_MOVE | DROPEFFECT_LINK;
00052 }
00053 }
00054 else if (pData->IsDataAvailable (CF_HDROP))
00055 {
00056 return DROPEFFECT_COPY;
00057 }
00058
00059 return DROPEFFECT_NONE;
00060 }
00061
00062 BOOL CFloatingWndDropTarget::OnDrop(CWnd*, COleDataObject *pData, DROPEFFECT, CPoint)
00063 {
00064 CLIPFORMAT cf;
00065 if (pData->IsDataAvailable (CF_TEXT))
00066 cf = CF_TEXT;
00067 else if (pData->IsDataAvailable (CF_HDROP))
00068 cf = CF_HDROP;
00069 else
00070 return FALSE;
00071
00072 HGLOBAL hMem = pData->GetGlobalData (cf);
00073 if (hMem)
00074 {
00075 std::vector <fsString> vUrls;
00076 LPVOID pvLock = GlobalLock (hMem);
00077
00078 if (cf == CF_TEXT)
00079 {
00080 LPCSTR pszUrl = (LPCSTR) pvLock;
00081 fsURL url;
00082 if (url.Crack (pszUrl) == IR_SUCCESS)
00083 vUrls.push_back (pszUrl);
00084 }
00085 else
00086 {
00087 HDROP hDrop = (HDROP) pvLock;
00088 int cFiles = DragQueryFile (hDrop, 0xFFFFFFFF, NULL, 0);
00089 for (int i = 0; i < cFiles; i++)
00090 {
00091 char szFile [MY_MAX_PATH];
00092 DragQueryFile (hDrop, i, szFile, sizeof (szFile));
00093 fsString strUrl = "file://";
00094 strUrl += szFile;
00095 vUrls.push_back (strUrl);
00096 }
00097 }
00098
00099 if (vUrls.size ())
00100 {
00101 BOOL bSilent = _App.Monitor_Silent ();
00102
00103 for (size_t i = 0; i < vUrls.size (); i++)
00104 {
00105 LPCSTR pszUrl = vUrls [i];
00106 BOOL bAdded = _pwndDownloads->CreateDownload (pszUrl, TRUE, NULL, NULL, bSilent);
00107 if (bAdded && bSilent)
00108 CMainFrame::ShowTimeoutBalloon (pszUrl, "Download added", NIIF_INFO, TRUE);
00109 }
00110 }
00111
00112 GlobalUnlock (hMem);
00113 GlobalFree (hMem);
00114
00115 if (vUrls.size ())
00116 return TRUE;
00117 }
00118
00119 return FALSE;
00120 }