//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Standard file menu
//
//=============================================================================


#ifndef TOOLFILEMENUBUTTON_H
#define TOOLFILEMENUBUTTON_H

#ifdef _WIN32
#pragma once
#endif

#include "toolutils/toolmenubutton.h"


//-----------------------------------------------------------------------------
// forward declarations
//-----------------------------------------------------------------------------
namespace vgui
{
class Panel;
class Menu;
}

class CToolMenuButton;


//-----------------------------------------------------------------------------
// Called back by the file menu 
//-----------------------------------------------------------------------------
class IFileMenuCallbacks
{
public:
	enum MenuItems_t
	{
		FILE_NEW	= 0x01,
		FILE_OPEN	= 0x02,
		FILE_SAVE	= 0x04,
		FILE_SAVEAS = 0x08,
		FILE_CLOSE	= 0x10,
		FILE_RECENT	= 0x20,
		FILE_CLEAR_RECENT	= 0x40,
		FILE_EXIT	= 0x80,

		FILE_ALL = 0xFFFFFFFF
	};

	// Logically OR together all items that should be enabled
	virtual int	 GetFileMenuItemsEnabled( ) = 0;

	// Add recent files to the menu passed in
	virtual void AddRecentFilesToMenu( vgui::Menu *menu ) = 0;

	// Get the perforce file name (to set the various perforce menu options)
	virtual bool GetPerforceFileName( char *pFileName, int nMaxLen ) = 0;

	// Gets the root vgui panel
	virtual vgui::Panel *GetRootPanel() = 0;
};


//-----------------------------------------------------------------------------
// Standard file menu
//-----------------------------------------------------------------------------
class CToolFileMenuButton : public CToolMenuButton
{
	DECLARE_CLASS_SIMPLE( CToolFileMenuButton, CToolMenuButton );
public:

	CToolFileMenuButton( vgui::Panel *parent, const char *panelName, const char *text, vgui::Panel *pActionTarget, IFileMenuCallbacks *pFileMenuCallback );
	virtual void OnShowMenu( vgui::Menu *menu );

private:
	MESSAGE_FUNC( OnPerforceAdd, "OnPerforceAdd" );
	MESSAGE_FUNC( OnPerforceOpen, "OnPerforceOpen" );
	MESSAGE_FUNC( OnPerforceRevert, "OnPerforceRevert" );
	MESSAGE_FUNC( OnPerforceSubmit, "OnPerforceSubmit" );
	MESSAGE_FUNC( OnPerforceP4Win, "OnPerforceP4Win" );
	MESSAGE_FUNC( OnPerforceListOpenFiles, "OnPerforceListOpenFiles" );

	vgui::Menu			*m_pRecentFiles;
	vgui::Menu			*m_pPerforce;
	int					m_nRecentFiles;
	IFileMenuCallbacks *m_pFileMenuCallback;
	int					m_nPerforceAdd;
	int					m_nPerforceOpen;
	int					m_nPerforceRevert;
	int					m_nPerforceSubmit;
	int					m_nPerforceP4Win;
	int					m_nPerforceListOpenFiles;
};


//-----------------------------------------------------------------------------
// Global function to create the switch menu
//-----------------------------------------------------------------------------
CToolMenuButton* CreateToolFileMenuButton( vgui::Panel *parent, const char *panelName, 
	const char *text, vgui::Panel *pActionTarget, IFileMenuCallbacks *pCallbacks );


#endif // TOOLFILEMENUBUTTON_H