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

#ifndef FILELISTMANAGER_H
#define FILELISTMANAGER_H

#ifdef _WIN32
#pragma once
#endif

#include "datamodel/idatamodel.h"
#include "vgui_controls/listpanel.h"
#include "vgui_controls/Frame.h"
#include "vgui/KeyCode.h"


//-----------------------------------------------------------------------------
// Forward declarations
//-----------------------------------------------------------------------------
namespace vgui
{
	class CheckButtonList;
}

//-----------------------------------------------------------------------------
// CFileListManager 
//-----------------------------------------------------------------------------
class CFileListManager : public vgui::ListPanel
{
	DECLARE_CLASS_SIMPLE( CFileListManager , vgui::ListPanel );

public:
	CFileListManager( vgui::Panel *parent );

	virtual void Refresh();
	virtual void OnCommand( const char *cmd );
	virtual void OnThink();
	virtual void OnMousePressed( vgui::MouseCode code );

protected:
	MESSAGE_FUNC_PARAMS( OnOpenContextMenu, "OpenContextMenu", pParams );
	MESSAGE_FUNC_PARAMS( OnOpenFile, "open", pParams );
	MESSAGE_FUNC_PARAMS( OnLoadFiles, "load", pParams );
	MESSAGE_FUNC_PARAMS( OnUnloadFiles, "unload", pParams );
	MESSAGE_FUNC_PARAMS( OnSaveFiles, "save", pParams );
	MESSAGE_FUNC_PARAMS( OnSaveFileAs, "saveas", pParams );
	MESSAGE_FUNC_PARAMS( OnAddToPerforce, "p4add", pParams );
	MESSAGE_FUNC_PARAMS( OnOpenForEdit, "p4edit", pParams );
	MESSAGE_FUNC_PARAMS( OnFileSelected, "FileSelected", pParams );
	MESSAGE_FUNC_PARAMS( OnDataChanged, "DataChanged", pParams );

	int AddItem( DmFileId_t fileid, const char *pFilename, const char *pPath, bool bLoaded, int nElements, bool bChanged, bool bInPerforce, bool bOpenForEdit );
	void SetLoaded( DmFileId_t fileid, bool bLoaded );

	vgui::CheckButtonList *m_pFileList;
	bool m_bRefreshRequired;

	vgui::DHANDLE< vgui::Menu >	m_hContextMenu;
};


//-----------------------------------------------------------------------------
// CFileListManagerFrame 
//-----------------------------------------------------------------------------
class CFileManagerFrame : public vgui::Frame
{
	DECLARE_CLASS_SIMPLE( CFileManagerFrame, vgui::Frame );

public:
	CFileManagerFrame( vgui::Panel *parent );

	virtual void Refresh();
	virtual void OnCommand( const char *cmd );
	virtual void PerformLayout();

protected:
	CFileListManager *m_pFileListManager;
};

#endif // FILELISTMANAGER_H