//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: 
//
// $NoKeywords: $
//
//=============================================================================//

#ifndef ATTRIBUTEFILEPICKERPANEL_H
#define ATTRIBUTEFILEPICKERPANEL_H
																												
#ifdef _WIN32
#pragma once
#endif

#include "dme_controls/AttributeBasePickerPanel.h"
#include "vgui_controls/PHandle.h"


//-----------------------------------------------------------------------------
// Forward declarations
//-----------------------------------------------------------------------------
class CDmElement;

namespace vgui
{
	class FileOpenDialog;
}


//-----------------------------------------------------------------------------
// CAttributeFilePickerPanel
//-----------------------------------------------------------------------------
class CAttributeFilePickerPanel : public CAttributeBasePickerPanel
{
	DECLARE_CLASS_SIMPLE( CAttributeFilePickerPanel, CAttributeBasePickerPanel );

public:
	CAttributeFilePickerPanel( vgui::Panel *parent, const AttributeWidgetInfo_t &info );
	~CAttributeFilePickerPanel();

private:
	MESSAGE_FUNC_CHARPTR( OnFileSelected, "FileSelected", fullpath );
	virtual void ShowPickerDialog();
	virtual void SetupFileOpenDialog( vgui::FileOpenDialog *pDialog ) = 0;
};


//-----------------------------------------------------------------------------
// Macro to quickly make new attribute types
//-----------------------------------------------------------------------------
#define DECLARE_ATTRIBUTE_FILE_PICKER( _className )							\
	class _className : public CAttributeFilePickerPanel						\
	{																			\
		DECLARE_CLASS_SIMPLE( _className, CAttributeFilePickerPanel );			\
	public:																		\
		_className( vgui::Panel *parent, const AttributeWidgetInfo_t &info ) :	\
			BaseClass( parent, info ) {}										\
	private:																	\
		virtual void SetupFileOpenDialog( vgui::FileOpenDialog *pDialog );		\
	}

#define IMPLEMENT_ATTRIBUTE_FILE_PICKER( _className, _popupTitle, _assetType, _assetExt )	\
	void _className::SetupFileOpenDialog( vgui::FileOpenDialog *pDialog )		\
	{																			\
		pDialog->SetTitle( _popupTitle, true );									\
		pDialog->AddFilter( "*."  _assetExt, _assetType " (*." _assetExt ")", true ); \
		pDialog->AddFilter( "*.*", "All Files (*.*)", false );					\
	}


//-----------------------------------------------------------------------------
// File picker types
//-----------------------------------------------------------------------------
DECLARE_ATTRIBUTE_FILE_PICKER( CAttributeTgaFilePickerPanel );
DECLARE_ATTRIBUTE_FILE_PICKER( CAttributeDmeFilePickerPanel );
DECLARE_ATTRIBUTE_FILE_PICKER( CAttributeAviFilePickerPanel );
DECLARE_ATTRIBUTE_FILE_PICKER( CAttributeShtFilePickerPanel );
DECLARE_ATTRIBUTE_FILE_PICKER( CAttributeRawFilePickerPanel );


#endif // ATTRIBUTEFILEPICKERPANEL_H