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

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

#include "AutoSelCombo.h"
#include "HammerBar.h"
#include "FilteredComboBox.h"


class CMapView;
class BoundBox;
class CMapClass;
class Vector;
class CPrefab;

#define MAX_PREV_SEL 12


class CObjectBar : public CHammerBar, public CFilteredComboBox::ICallbacks
{
public:
	
	CObjectBar();
	BOOL Create(CWnd *pParentWnd);
	
	static LPCTSTR GetDefaultEntityClass(void);

	virtual BOOL PreTranslateMessage(MSG* pMsg);
	
	void UpdateListForTool(int iTool);
	void SetupForBlockTool();
	void DoHideControls();
	CMapClass *CreateInBox(BoundBox *pBox, CMapView *pView = NULL);
	BOOL GetPrefabBounds(BoundBox *pBox);
	
	// If this is on, then it'll randomize the yaw when entities are placed.
	bool UseRandomYawOnEntityPlacement();

	void DoDataExchange(CDataExchange *pDX);
	
	bool IsEntityToolCreatingPrefab( void );
	bool IsEntityToolCreatingEntity( void );
	CMapClass *BuildPrefabObjectAtPoint( Vector const &HitPos );


// CFilteredComboBox::ICallbacks implementation.

	virtual void OnTextChanged( const char *pText );


private:
	
	enum 
	{
		listPrimitives,
		listPrefabs,
		listEntities
	} ListType;

	//{{AFX_DATA(CMapViewBar)
	enum { IDD = IDD_OBJECTBAR };
	//}}AFX_DATA
	
	CFilteredComboBox	m_CreateList;				// this should really be m_ItemList
	CComboBox			m_CategoryList;
	CEdit				m_Faces;
	CSpinButtonCtrl		m_FacesSpin; 

	CPrefab* FindPrefabByName( const char *pName );

	void LoadBlockCategories( void );
	void LoadEntityCategories( void );
	void LoadPrefabCategories( void );	

	void LoadBlockItems( void );
	void LoadEntityItems( void );
	void LoadPrefabItems( void );

	int UpdatePreviousSelection( int iTool );

	int GetPrevSelIndex(DWORD dwGameID, int *piNewIndex = NULL);
	BOOL EnableFaceControl(CWnd *pWnd, BOOL bModifyWnd);
	
	int iEntitySel;
	int iBlockSel;
	
	// previous selections:
	DWORD m_dwPrevGameID;
	struct tagprevsel
	{
		DWORD dwGameID;
		struct tagblock
		{
			CString strItem;
			CString strCategory;
		} block;
		struct tagentity
		{
			CString strItem;
			CString strCategory;
		} entity;
	} m_PrevSel[MAX_PREV_SEL];
	int m_iLastTool;
	
protected:
	
	afx_msg void UpdateControl(CCmdUI*);
	afx_msg void UpdateFaceControl(CCmdUI*);
	afx_msg void OnCategorylistSelchange();
	afx_msg void OnChangeCategory();
	
	DECLARE_MESSAGE_MAP()
};

#endif // OBJECTBAR_H