|
|
/////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 1996 Microsoft Corporation
//
// Module Name:
// LCPair.h
//
// Abstract:
// Definition of the CListCtrlPair dialog.
//
// Implementation File:
// LCPair.cpp
//
// Author:
// David Potter (davidp) August 8, 1996
//
// Revision History:
//
// Notes:
//
/////////////////////////////////////////////////////////////////////////////
#ifndef _LCPAIR_H_
#define _LCPAIR_H_
/////////////////////////////////////////////////////////////////////////////
// Include Files
/////////////////////////////////////////////////////////////////////////////
#ifndef _CLUSITEM_H_
#include "ClusItem.h" // for CClusterItemList
#endif
/////////////////////////////////////////////////////////////////////////////
// Forward Class Declarations
/////////////////////////////////////////////////////////////////////////////
class CListCtrlPair;
/////////////////////////////////////////////////////////////////////////////
// Type Definitions
/////////////////////////////////////////////////////////////////////////////
typedef void (*PFNLCPGETCOLUMN)( IN OUT CObject * pobj, IN int iItem, IN int icol, IN OUT CDialog * pdlg, OUT CString & rstr, OUT int * piimg ); typedef int (*PFNLCPDISPPROPS)( IN OUT CObject * pobj );
/////////////////////////////////////////////////////////////////////////////
// CListCtrlPair command target
/////////////////////////////////////////////////////////////////////////////
class CListCtrlPair : public CCmdTarget { DECLARE_DYNAMIC(CListCtrlPair) friend class CListCtrlPairDlg; friend class CListCtrlPairPage; friend class CListCtrlPairWizPage;
// Construction
public: CListCtrlPair(void); // protected constructor used by dynamic creation
CListCtrlPair( IN OUT CDialog * pdlg, IN OUT CClusterItemList * rlpobjRight, IN const CClusterItemList * rlpobjLeft, IN DWORD dwStyle, IN PFNLCPGETCOLUMN pfnGetColumn, IN PFNLCPDISPPROPS pfnDisplayProps );
void CommonConstruct(void);
// Attributes
protected: CDialog * m_pdlg; CClusterItemList * m_plpobjRight; const CClusterItemList * m_plpobjLeft; IDS m_idsRightLabel; IDS m_idsLeftLabel; DWORD m_dwStyle;
#define LCPS_SHOW_IMAGES 0x1
#define LCPS_ALLOW_EMPTY 0x2
#define LCPS_CAN_BE_ORDERED 0x4
#define LCPS_ORDERED 0x8
#define LCPS_DONT_OUTPUT_RIGHT_LIST 0x10
#define LCPS_READ_ONLY 0x20
#define LCPS_PROPERTIES_BUTTON 0x40
#define LCPS_MAX 0x40
PFNLCPGETCOLUMN m_pfnGetColumn; PFNLCPDISPPROPS m_pfnDisplayProps;
BOOL BIsStyleSet(IN DWORD dwStyle) const { return (m_dwStyle & dwStyle) == dwStyle; } void ModifyStyle(IN DWORD dwRemove, IN DWORD dwAdd) { ASSERT((dwRemove & dwAdd) == 0); if (dwRemove != 0) m_dwStyle &= ~dwRemove; if (dwAdd != 0) m_dwStyle |= dwAdd; }
public: CDialog * Pdlg(void) const { return m_pdlg; } CClusterItemList * PlpobjRight(void) const { return m_plpobjRight; } const CClusterItemList * PlpobjLeft(void) const { return m_plpobjLeft; } IDS IdsRightLabel(void) const { return m_idsRightLabel; } IDS IdsLeftLabel(void) const { return m_idsLeftLabel; } DWORD DwStyle(void) const { return m_dwStyle; } BOOL BShowImages(void) const { return BIsStyleSet(LCPS_SHOW_IMAGES); } BOOL BAllowEmpty(void) const { return BIsStyleSet(LCPS_ALLOW_EMPTY); } BOOL BCanBeOrdered(void) const { return BIsStyleSet(LCPS_CAN_BE_ORDERED); } BOOL BOrdered(void) const { return BIsStyleSet(LCPS_ORDERED); } BOOL BReadOnly(void) const { return BIsStyleSet(LCPS_READ_ONLY); } BOOL BPropertiesButton(void) const { return BIsStyleSet(LCPS_PROPERTIES_BUTTON); }
void SetDlg(CDialog * pdlg) { ASSERT_VALID(pdlg); m_pdlg = pdlg; }
void SetLists(IN OUT CClusterItemList * plpobjRight, IN const CClusterItemList * plpobjLeft); void SetLists(IN const CClusterItemList * plpobjRight, IN const CClusterItemList * plpobjLeft);
// Operations
public: int NAddColumn(IN IDS idsText, IN int nWidth); int NInsertItemInListCtrl( IN int iitem, IN OUT CObject * pobj, IN OUT CListCtrl & rlc );
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CListCtrlPair)
//}}AFX_VIRTUAL
virtual BOOL OnSetActive(void); virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
// Implementation
protected: CClusterItemList m_lpobjRight; CClusterItemList m_lpobjLeft; CListCtrl m_lcRight; CListCtrl m_lcLeft; CListCtrl * m_plcFocusList; CButton m_pbAdd; CButton m_pbRemove; CButton m_pbProperties;
public: CClusterItemList & LpobjRight(void) { return m_lpobjRight; } CClusterItemList & LpobjLeft(void) { return m_lpobjLeft; }
protected: void DuplicateLists(void); void FillList(IN OUT CListCtrl & rlc, IN const CClusterItemList & rlpobj); void MoveItems( IN OUT CListCtrl & rlcDst, IN OUT CClusterItemList & rlpobjDst, IN OUT CListCtrl & rlcSrc, IN OUT CClusterItemList & rlpobjSrc );
// Column structure and collection.
struct CColumn { IDS m_idsText; int m_nWidth; }; typedef CArray<CColumn, CColumn&> CColumnArray; CColumnArray m_aColumns;
// Sort information.
struct SortInfo { int m_nDirection; int m_nColumn; }; static int CALLBACK CompareItems(LPARAM lparam1, LPARAM lparam2, LPARAM lparamSort);
SortInfo m_siLeft; SortInfo m_siRight; SortInfo * m_psiCur;
SortInfo & SiLeft(void) { return m_siLeft; } SortInfo & SiRight(void) { return m_siRight; } SortInfo * PsiCur(void) const { return m_psiCur; }
// Generated message map functions
//{{AFX_MSG(CListCtrlPair)
//}}AFX_MSG
public: virtual BOOL OnInitDialog(void); virtual BOOL BSaveChanges(void); protected: afx_msg BOOL OnContextMenu(CWnd* pWnd, CPoint point); afx_msg void OnAdd(void); afx_msg void OnRemove(void); afx_msg void OnProperties(void); afx_msg void OnDblClkLeftList(NMHDR* pNMHDR, LRESULT* pResult); afx_msg void OnDblClkRightList(NMHDR* pNMHDR, LRESULT* pResult); afx_msg void OnItemChangedLeftList(NMHDR* pNMHDR, LRESULT* pResult); afx_msg void OnItemChangedRightList(NMHDR* pNMHDR, LRESULT* pResult); afx_msg void OnColumnClickLeftList(NMHDR* pNMHDR, LRESULT* pResult); afx_msg void OnColumnClickRightList(NMHDR* pNMHDR, LRESULT* pResult);
DECLARE_MESSAGE_MAP()
}; //*** class CListCtrlPair
/////////////////////////////////////////////////////////////////////////////
#endif // _LCPAIR_H_
|