/*=========================================================================
* 
* CPAdLBox.hpp :  class CPA_SortedListBox
* 
*
* Version			1.0
* Creation date		
* Revision date
*
* Shaitan
*=======================================================================*/
#ifdef ACTIVE_EDITOR
 
#ifndef __CPA_SORTEDLISTBOX_H__
#define __CPA_SORTEDLISTBOX_H__
 
/****************************************/
#ifndef CPA_EXPORT
#if defined(CPA_WANTS_IMPORT)
#define CPA_EXPORT __declspec(dllimport)
#elif defined(CPA_WANTS_EXPORT)
#define CPA_EXPORT __declspec(dllexport)
#else
#define CPA_EXPORT
#endif
#endif
/****************************************/
 
#include "CPAListB.hpp"
 
class CPA_EditorBase;
class CPA_DialogList;
 
/* sort criteria*/
typedef enum tdeSortCriteria_
{
	E_sc_State,
	E_sc_Icon,
	E_sc_Name,
	E_sc_Type,
	E_sc_Owner,
	E_sc_None
}
tdeSortCriteria;
 
/* style (columns of list control)*/
#define C_lDrawNothing	0
#define C_lDrawState	1
#define C_lDrawIcon		2
#define C_lDrawName		4
#define C_lDrawType		8
#define C_lDrawOwner	16
#define C_lDrawInfo		32
 
#define C_lDrawAllStandard		(C_lDrawName + C_lDrawType + C_lDrawOwner)
#define C_lDrawAllCustom		(C_lDrawAllStandard + C_lDrawInfo)
 
/*#################################################################################*/
/* Sorted ListBox*/
/*#################################################################################*/
/*===========================================================================
*		Description:	Class for Sorted ListBox
*		Creation date:	
*		Author:			Shaitan
*---------------------------------------------------------------------------
*		Revision date:                                                                                          Author:         
*=========================================================================*/
class CPA_EXPORT CPA_SortedListBox : public CListCtrl
{
protected:
	CPA_EditorBase		*m_pOwnerEditor;
	CPA_DialogList		*m_pParentDialog;
 
	CPA_BaseObjectList	*m_pSortedList;
	CImageList			*m_pIconList;
	CImageList			*m_pStateList;
 
	tdeListOrder		m_eCurrentOrder;
	BOOL				m_bDisplayGray;
	BOOL				m_bHeaders;
	long				m_lDrawStyle;
	long				m_lNbColumns;	
	
	int					m_iSelectedItem;
	int					m_iDraggedItem;
	int					m_iTargetItem;
 
	BOOL				m_bCanChangeOrder;
	BOOL				m_bCanChangeDrawStyle;
	BOOL				m_bCanChangeDisplay;
	BOOL				m_bCanChangeHeaders;
 
	BOOL				m_bCanDragDrop;
	BOOL				m_bIsSelecting;
 
	BOOL				m_bAdjustSize;
 
public:
	CPA_SortedListBox();
	~CPA_SortedListBox() { }
 
	void SetOwnerEditor		(CPA_EditorBase *pEditor)			{ m_pOwnerEditor = pEditor; }
	void SetParentDialog	(CPA_DialogList *pParentDialog)		{ m_pParentDialog = pParentDialog; }
	void SetSortedList		(CPA_BaseObjectList *pSortedList);
	void SetIconList		(CImageList *pIconList, BOOL bUpdate = TRUE);
	void SetStateList		(CImageList *pStateList, BOOL bUpdate = TRUE);
 
	tdeListOrder GetOrder			(void) { return m_eCurrentOrder; }
	void		 SetOrder			(tdeListOrder eNewOrder, BOOL bCanChange = TRUE, BOOL bUpdateList = TRUE);
 
	BOOL		 GetColumnHeaders	(void) { return m_bHeaders; }
	void		 SetColumnHeaders	(BOOL bHeaders, BOOL bCanChange = TRUE, BOOL bUpdateList = TRUE) ;
 
	long		 GetDrawStyle		(void) { return m_lDrawStyle; }
	void		 SetDrawStyle		(long lNewStyle, BOOL bCanChange = TRUE, BOOL bUpdateList = TRUE) ;
 
	BOOL		 GetDisplayGray		(void) { return m_bDisplayGray; }
	void		 SetDisplayGray		(BOOL bDisplay, BOOL bCanChange = TRUE, BOOL bUpdateList = TRUE) ;
 
	BOOL		 GetDragDropRight	(void) { return m_bCanDragDrop; }
	void		 SetDragDropRight	(BOOL bCanDragDrop) { m_bCanDragDrop = bCanDragDrop; }
 
	void		 SetOwnerDrawStyle	(BOOL bOwnerDraw);
 
	void		 SetAdjustSize		(BOOL bAdjust);
 
	void fn_vReinitListObjects		(void);
	void fn_vReinitColumnWidth		(void);
 
	BOOL fn_bIsSelecting			(void)	{ return m_bIsSelecting; }
 
	void SetSelectedItem			(int iNumItem);
	int	 GetSelectedItem			(void);
 
	int  InsertNewItem				(int iNumItem, CPA_BaseObject *pElem);
 
	void fn_vDisableIcon			(CDC *pDC, POINT pt, COLORREF cRectColor);
 
	int		GetCorrespondingIndex	(DWORD pData);
	int		GetCorrespondingIcon	(CPA_BaseObject *pObject);
	int		GetCorrespondingState	(CPA_BaseObject *pObject);
	BOOL	GetCorrespondingColors	(CPA_BaseObject *pObject, COLORREF *pRectColor, COLORREF *pTextColor); 
	CString GetCorrespondingInfo	(CPA_BaseObject *pObject);
 
	int GetIndexByStateToDraw		(CPA_BaseObject *pObject);
	int GetIndexByIconToDraw		(CPA_BaseObject *pObject);
	int GetIndexByNameToDraw		(CPA_BaseObject *pObject);
	int GetIndexByTypeToDraw		(CPA_BaseObject *pObject);
	int GetIndexByOwnerToDraw		(CPA_BaseObject *pObject);
	int GetIndexByInfoToDraw		(CPA_BaseObject *pObject);
 
	tdeSortCriteria GetColumnType	(int iNumColumn);
 
	void fn_vSortListByCriteria		(tdeSortCriteria eCriteria);
 
	afx_msg void OnRButtonDown		(UINT nFlags, CPoint point);
	afx_msg void OnLButtonDblClk	(UINT nFlags, CPoint point);
	afx_msg void OnKeyDown			(UINT nChar, UINT nRepCnt, UINT nFlags);
	afx_msg void OnKeyUp			(UINT nChar, UINT nRepCnt, UINT nFlags);
	
	afx_msg void OnBeginDrag		(NMHDR* pNMHDR, LRESULT* pResult);
	afx_msg void OnMouseMove		(UINT nFlags, CPoint point);
	afx_msg void OnLButtonUp		(UINT nFlags, CPoint point);
 
	afx_msg void OnColumnClicked	(NMHDR* pNMHDR, LRESULT* pResult);
 
	virtual void DrawItem			(LPDRAWITEMSTRUCT lpDIS);	
	virtual void fn_vOnKeyDown		(UINT nChar, UINT nRepCnt, UINT nFlags) { };
	
	afx_msg void OnSize				(UINT nType, int cx, int cy);
	
	BOOL OnCommand( WPARAM wParam, LPARAM lParam );
 
	DECLARE_MESSAGE_MAP()
};
 
#endif /*__CPA_SORTEDLISTBOX_H__*/
#endif /* ACTIVE_EDITOR*/
