update for HEAD-2003091401
[reactos.git] / subsys / system / explorer / Seashell / SeaShellExt / Include / UIDATA.H
diff --git a/subsys/system/explorer/Seashell/SeaShellExt/Include/UIDATA.H b/subsys/system/explorer/Seashell/SeaShellExt/Include/UIDATA.H
new file mode 100644 (file)
index 0000000..f76d13c
--- /dev/null
@@ -0,0 +1,300 @@
+//*******************************************************************************
+// COPYRIGHT NOTES
+// ---------------
+// You may use this source code, compile or redistribute it as part of your application 
+// for free. You cannot redistribute it as a part of a software development 
+// library without the agreement of the author. If the sources are 
+// distributed along with the application, you should leave the original 
+// copyright notes in the source code without any changes.
+// This code can be used WITHOUT ANY WARRANTIES at your own risk.
+// 
+// For the latest updates to this code, check this site:
+// http://www.masmex.com 
+// after Sept 2000
+// 
+// Copyright(C) 2000 Philip Oldaker <email: philip@masmex.com>
+//*******************************************************************************
+
+#ifndef __LISTCTRLDATA_H__
+#define __LISTCTRLDATA_H__ 
+
+////////////////////////////////////////////////
+// CUIODColumnCtrl
+// Interface for an owner draw control in a list control column
+////////////////////////////////////////////////
+class CUIODColumnCtrl : public CObject
+{
+       DECLARE_DYNAMIC(CUIODColumnCtrl);
+public:
+       CUIODColumnCtrl();
+       virtual ~CUIODColumnCtrl();
+public:
+       virtual void DoPaint(CDC *PaintDC,CRect rcClient,bool bSelected)=0;
+protected:
+private:
+};
+
+inline CUIODColumnCtrl::CUIODColumnCtrl()
+{
+}
+
+inline CUIODColumnCtrl::~CUIODColumnCtrl()
+{
+}
+
+// Internal extension data for each row in the list control
+// if you wish to override the default behaviour
+// a class should be derived from this one and the GetListCtrlData method
+// should be overridden in the list control class
+class CTRL_EXT_CLASS CUIListCtrlData : public CObject 
+{
+public:
+    DECLARE_DYNAMIC(CUIListCtrlData)
+    CUIListCtrlData(int nCols=1);
+    ~CUIListCtrlData();
+       void Init(int nCols);
+    // functions to change the color of each row
+    COLORREF GetTextColor(int nCol=0) const;
+    COLORREF GetBkColor(int nCol=0) const;
+       const CFont *GetFont(int nCol=0) const;
+    void SetBkColor(COLORREF BkColor,int nCol=-1);
+    void SetTextColor(COLORREF TextColor,int nCol=-1);
+       void SetDefaultBkColor(int nCol=-1);
+       void SetDefaultTextColor(int nCol=-1);
+       void SetFont(CFont *pFont,int nCol=-1);
+       void SetCtrl(CUIODColumnCtrl *pCtrl,int nCol);
+       void DestroyCtrl(int nCol);
+       // emulate the CListCtrl class by allowing user defined extension data 
+       DWORD GetExtData() const;
+       void SetExtData(DWORD dwExtData);
+       BOOL IsFontSet(int nCol=-1) const;
+protected:
+       void DestroyFonts();
+       void DestroyCtrls();
+       void CreateNewFont(int nCol,LOGFONT &lf);
+// Get/Set Methods
+public:
+       void SetAutoDelete(bool bAutoDelete);
+       bool GetAutoDelete() const;
+       int GetCtrlCount() const;
+       CUIODColumnCtrl *GetCtrl(int nCol) const;
+       void SetDeleted(bool bDeleted);
+       bool IsDeleted() const;
+private:
+    CDWordArray m_arBkColors;
+    CDWordArray m_arTextColors;
+       CObArray m_arFonts;
+       DWORD m_dwExtData;
+       CObArray m_arCtrl;      
+       bool m_bAutoDelete;
+       bool m_bDeleted;
+};
+
+inline int CUIListCtrlData::GetCtrlCount() const
+{
+       int nCount=0;
+       for(int i=0;i < m_arCtrl.GetSize();i++)
+       {
+               if (m_arCtrl.GetAt(i) != NULL)
+               {
+                       nCount++;
+               }
+       }
+       return nCount;
+}
+
+inline CUIODColumnCtrl *CUIListCtrlData::GetCtrl(int nCol) const
+{
+       CUIODColumnCtrl *pCtrl = (CUIODColumnCtrl*)m_arCtrl.GetAt(nCol);
+       return pCtrl;
+}
+
+inline void CUIListCtrlData::DestroyCtrl(int nCol)
+{
+       CUIODColumnCtrl *pOldCtrl = (CUIODColumnCtrl*)m_arCtrl[nCol];
+       delete pOldCtrl;
+       m_arCtrl[nCol] = NULL;
+}
+
+inline void CUIListCtrlData::SetCtrl(CUIODColumnCtrl *pCtrl,int nCol) 
+{
+       DestroyCtrl(nCol);
+       ASSERT_KINDOF(CUIODColumnCtrl,pCtrl);
+       m_arCtrl[nCol] = pCtrl;
+}
+
+inline void CUIListCtrlData::SetAutoDelete(bool bAutoDelete)
+{
+       m_bAutoDelete = bAutoDelete;
+}
+
+inline bool CUIListCtrlData::GetAutoDelete() const
+{
+       return m_bAutoDelete;
+}
+
+inline void CUIListCtrlData::SetDeleted(bool bDeleted)
+{
+       m_bDeleted = bDeleted;
+}
+
+inline bool CUIListCtrlData::IsDeleted() const
+{
+       return m_bDeleted;
+}
+
+inline const CFont *CUIListCtrlData::GetFont(int nCol) const
+{ 
+       return (const CFont*)m_arFonts[nCol]; 
+}
+
+inline COLORREF CUIListCtrlData::GetTextColor(int nCol) const
+{ 
+       return m_arTextColors[nCol]; 
+}
+
+inline COLORREF CUIListCtrlData::GetBkColor(int nCol) const 
+{ 
+       return m_arBkColors[nCol]; 
+}
+
+inline DWORD CUIListCtrlData::GetExtData() const 
+{ 
+       return m_dwExtData; 
+}
+
+inline void CUIListCtrlData::SetBkColor(COLORREF BkColor,int nCol) 
+{ 
+       if (nCol == -1)
+       {
+               for(int i=0;i < m_arBkColors.GetSize();i++)
+               {
+                       m_arBkColors[i] = BkColor;
+               }
+       }
+       else
+               m_arBkColors[nCol] = BkColor; 
+}
+
+inline void CUIListCtrlData::SetTextColor(COLORREF TextColor,int nCol) 
+{ 
+       if (nCol == -1)
+       {
+               for(int i=0;i < m_arTextColors.GetSize();i++)
+               {
+                       m_arTextColors[i] = TextColor;
+               }
+       }
+       else
+               m_arTextColors[nCol] = TextColor; 
+}
+
+inline void CUIListCtrlData::SetDefaultTextColor(int nCol) 
+{ 
+       SetTextColor(::GetSysColor(COLOR_WINDOWTEXT),nCol); 
+}
+
+inline void CUIListCtrlData::SetDefaultBkColor(int nCol) 
+{ 
+       SetBkColor(::GetSysColor(COLOR_WINDOW),nCol); 
+}
+
+inline void CUIListCtrlData::SetExtData(DWORD dwExtData) 
+{ 
+       m_dwExtData = dwExtData; 
+}
+
+// for ODBC databases
+class CTRL_EXT_CLASS CUIDBListCtrlData : public CUIListCtrlData 
+{
+public:
+       CUIDBListCtrlData(int nCols) : CUIListCtrlData(nCols) { }
+    DECLARE_DYNAMIC(CUIDBListCtrlData)
+       const GetRecNum() { return m_nRecNum; }
+       void SetRecNum(long nRecNum) { m_nRecNum = nRecNum; }
+private:
+       long m_nRecNum;                 // for ODBC connection to record sets
+};
+
+// used by the Ownerdraw combo box
+class CTRL_EXT_CLASS CUIComboBoxData : public CUIListCtrlData 
+{
+    DECLARE_DYNAMIC(CUIComboBoxData)
+public:
+       CUIComboBoxData(int nCols) : CUIListCtrlData(nCols), m_nImageIndex(-1) {}
+       CString GetText(int nCol = -1) const;
+       int GetImageIndex() const { return m_nImageIndex; } 
+       void SetText(LPCTSTR szText) { m_strText = szText; }
+       void SetImageIndex(int nImageIndex) { m_nImageIndex = nImageIndex; }
+private:
+       CString m_strText;                      // for displaying text in OD combo boxes with columns
+       int m_nImageIndex;
+};
+
+// keep our own copy of strings in the list control to ease sorting
+class CTRL_EXT_CLASS CUIStrListCtrlData : public CUIListCtrlData 
+{
+public:
+    DECLARE_DYNAMIC(CUIStrListCtrlData)
+       CUIStrListCtrlData(int nColumns);
+       CUIStrListCtrlData();
+       LPTSTR GetString(int nCol);
+       const CString &GetExtraString() const;
+       void AddExtraString(LPCTSTR pszExtraText);
+       int GetStringLen(int nCol) const;
+       BOOL AddString(int nCol,LPCTSTR szText);
+private:
+       CStringArray m_StringArray;
+       CString m_strExtraText;
+};
+
+inline int CUIStrListCtrlData::GetStringLen(int nCol) const
+{ 
+       return m_StringArray[nCol].GetLength();
+}
+
+inline void CUIStrListCtrlData::AddExtraString(LPCTSTR pszExtraText) 
+{ 
+       m_strExtraText = pszExtraText;
+}
+
+inline const CString &CUIStrListCtrlData::GetExtraString() const
+{ 
+       return m_strExtraText;
+}
+
+// Used internally to help sorting
+class CUIODListCtrlSortInfo : public CObject
+{
+public:
+       CUIODListCtrlSortInfo(int nSubItem,int ColType,BOOL bSortAscending);
+       BOOL Ascending() const;
+       int GetColumn() const;
+       int GetColType() const;
+private:
+       BOOL m_bSortAscending;
+       int m_nSubItem;
+       int m_ColType;
+};
+
+inline CUIODListCtrlSortInfo::CUIODListCtrlSortInfo(int nSubItem,int ColType,BOOL bSortAscending) 
+       : m_nSubItem(nSubItem),m_ColType(ColType),m_bSortAscending(bSortAscending)
+{
+}
+
+inline BOOL CUIODListCtrlSortInfo::Ascending() const
+{
+       return m_bSortAscending;
+}
+
+inline int CUIODListCtrlSortInfo::GetColumn() const
+{
+       return m_nSubItem;
+}
+
+inline int CUIODListCtrlSortInfo::GetColType() const
+{
+       return m_ColType;
+}
+
+#endif // __LISTCTRLDATA_H__