// FilesDropTarget.h: interface for the CFilesDropTargetBase class.
//
// Автор - Артур Аюханов aka artbear (c) 2007
//
//	обрабатывает передачу файлов (Drag-n-Drop) из проводника или других программ в 1С
//	вызывает событие глобального модуля Событие_OnDrop (meOnDrop)
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_FILESDROPTARGET_H__3FEA44A1_FE0A_450A_BCE1_9A7EC80E06FC__INCLUDED_)
#define AFX_FILESDROPTARGET_H__3FEA44A1_FE0A_450A_BCE1_9A7EC80E06FC__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include <afxole.h>
#include "timer.h"

/////////////////////////////////////////////////////////////////////////////
// CFilesDropTargetBase
/////////////////////////////////////////////////////////////////////////////
class CFilesDropTargetBase : public COleDropTarget
{
public:
    CFilesDropTargetBase();
    virtual ~CFilesDropTargetBase() {}

    void Enable();
    void Disable();

protected:
	virtual BOOL OnFileAccepted(CStringArray& FileNameArray) = 0;
	virtual BOOL OnFileDropped(CStringArray& FileNameArray) = 0;

	virtual BOOL OnURLAccepted(const CString& strURL) = 0;
	virtual BOOL OnURLDropped(const CString& strURL) = 0;

    virtual DROPEFFECT OnDragEnter(CWnd* pWnd, COleDataObject* pDataObject, DWORD dwKeyState, CPoint point);
    virtual DROPEFFECT OnDragOver(CWnd* pWnd, COleDataObject* pDataObject, DWORD dwKeyState, CPoint point);
	virtual BOOL OnDrop(CWnd* pWnd, COleDataObject* pDataObject,
		DROPEFFECT dropEffect, CPoint point);
	
private:
	bool GetFileList( COleDataObject* pDataObject );
	bool IsAccepted() const;

	bool GetURL( COleDataObject* pDataObject, CString& strURL );

	CStringArray m_FileNameArray;
	CString m_strURL;
};

/////////////////////////////////////////////////////////////////////////////
// CFilesDropTarget
/////////////////////////////////////////////////////////////////////////////
class CFilesAndURLDropTarget : public CFilesDropTargetBase
{
protected:
	virtual BOOL OnFileAccepted(CStringArray& FileNameArray)
	{ return TRUE; };
	
	virtual BOOL OnFileDropped(CStringArray& FileNameArray);

	virtual BOOL OnURLAccepted(const CString& strURL)
	{ return TRUE; };

	virtual BOOL OnURLDropped(const CString& strURL);

	// TODO остался баг - передача файлов не работает, если файлы бросаем в окно сообщений 1C
private:
	COnceExecTimer<CTimerSetupStrategy>::PCTimer m_pTimer;
	COnceExecTimer<CTimerSetupStrategy>::PCTimer m_pURLTimer;
};

#endif // !defined(AFX_FILESDROPTARGET_H__3FEA44A1_FE0A_450A_BCE1_9A7EC80E06FC__INCLUDED_)
