update for HEAD-2003091401
[reactos.git] / subsys / system / explorer / Seashell / SeaShellExt / UIDATA.CPP
diff --git a/subsys/system/explorer/Seashell/SeaShellExt/UIDATA.CPP b/subsys/system/explorer/Seashell/SeaShellExt/UIDATA.CPP
new file mode 100644 (file)
index 0000000..c47c010
--- /dev/null
@@ -0,0 +1,202 @@
+
+//*******************************************************************************
+// 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>
+//*******************************************************************************
+
+/**********************************************************/
+/* implementation of class CUIListCtrlData                  */
+/*                                                        */
+/**********************************************************/
+
+#include "stdafx.h"
+#include "UIData.h"
+
+#ifdef _DEBUG
+#undef THIS_FILE
+static char BASED_CODE THIS_FILE[] = __FILE__;
+#endif
+
+/////////////////////////////////////////////////////////////////////////////
+// CIconObj
+
+IMPLEMENT_DYNAMIC(CUIODColumnCtrl, CObject)
+IMPLEMENT_DYNAMIC(CUIListCtrlData, CObject)
+IMPLEMENT_DYNAMIC(CUIDBListCtrlData, CUIListCtrlData)
+IMPLEMENT_DYNAMIC(CUIStrListCtrlData, CUIListCtrlData)
+IMPLEMENT_DYNAMIC(CUIComboBoxData, CUIListCtrlData)
+
+/////////////////////////////////////////////////////////////////////////////
+// CUIListCtrlData construction/destruction
+CUIListCtrlData::CUIListCtrlData(int nCols)
+{
+       Init(nCols);
+}
+
+void CUIListCtrlData::Init(int nCols)
+{
+       const int cMaxCols=50;
+       m_arCtrl.SetSize(nCols < cMaxCols ? cMaxCols : nCols);
+       m_arFonts.SetSize(nCols < cMaxCols ? cMaxCols : nCols);
+       m_arTextColors.SetSize(nCols < cMaxCols ? cMaxCols : nCols);
+       m_arBkColors.SetSize(nCols);
+       for(int i=0;i < nCols;i++)
+       {
+               SetDefaultTextColor(i);
+               SetDefaultBkColor(i);
+       }
+       m_dwExtData = 0;
+       m_bAutoDelete = false;
+       m_bDeleted = false;
+}
+
+CUIListCtrlData::~CUIListCtrlData()
+{
+       DestroyCtrls();
+       DestroyFonts();
+}
+
+void CUIListCtrlData::DestroyFonts()
+{
+       CFont *pFont=NULL;
+       for(int i=0;i < m_arFonts.GetSize();i++)
+       {
+               pFont = (CFont*)m_arFonts[i];
+               delete pFont;
+       }
+}
+
+void CUIListCtrlData::DestroyCtrls()
+{
+       CUIODColumnCtrl *pCtrl=NULL;
+       for(int i=0;i < m_arCtrl.GetSize();i++)
+       {
+               pCtrl = (CUIODColumnCtrl*)m_arCtrl[i];
+               delete pCtrl;
+       }
+}
+
+BOOL CUIListCtrlData::IsFontSet(int nCol) const
+{
+       if (nCol == -1)
+       {
+               BOOL bRet=TRUE;
+               for(int i=0;i < m_arFonts.GetSize();i++)
+               {
+                       if (m_arFonts[i] == NULL)
+                       {
+                               bRet = FALSE;
+                               break;
+                       }
+               }
+               return bRet;
+       }
+       return(m_arFonts[nCol] && ((CFont*)m_arFonts[nCol])->GetSafeHandle() != NULL);
+}
+
+void CUIListCtrlData::SetFont(CFont *pFont,int nCol) 
+{ 
+       LOGFONT lf;
+       pFont->GetLogFont(&lf);
+       if (nCol == -1)
+       {
+               for(int i=0;i < m_arFonts.GetSize();i++)
+               {
+                       CreateNewFont(i,lf);
+               }
+       }
+       else
+       {
+               CreateNewFont(nCol,lf);
+       }
+}
+
+void CUIListCtrlData::CreateNewFont(int nCol,LOGFONT &lf)
+{
+       CFont *pNewFont = NULL;
+       CFont *pOldFont = (CFont*)m_arFonts[nCol];
+       if (pOldFont)
+       {
+               if (pOldFont->GetSafeHandle())
+                       pOldFont->DeleteObject();
+               pNewFont = pOldFont;
+       }
+       else
+               pNewFont = new CFont;
+       pNewFont->CreateFontIndirect(&lf);
+       m_arFonts[nCol] = pNewFont;     
+}
+/////////////////////////////////////////////////////////////////////////////
+//
+// CUIComboBoxData 
+// 
+/////////////////////////////////////////////////////////////////////////////
+// columns in a combo box
+CString CUIComboBoxData::GetText(int nCol) const
+{ 
+       TCHAR szDest[256];
+       if (nCol == -1 || m_strText.IsEmpty())
+               return m_strText; 
+       LPCTSTR p = m_strText; 
+       LPTSTR pDest;
+       nCol++;
+       while (nCol > 0) 
+       {
+               pDest = szDest;
+               while (*p && *p != _T('\t')) 
+               {
+                         *pDest = *p;
+                         pDest = _tcsinc(pDest);
+                         p = _tcsinc(p);
+               }
+          nCol--;
+          if (*p == _T('\t'))          
+                  p = _tcsinc(p);
+          else
+                  break;
+
+       } 
+       *pDest = '\0';
+       CString str;
+       if (nCol)
+               str.Empty();
+       else
+               str = szDest;
+       return str;
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// CUIStrListCtrlData 
+/////////////////////////////////////////////////////////////////////////////
+CUIStrListCtrlData::CUIStrListCtrlData(int nColumns) : CUIListCtrlData(nColumns)
+{
+       m_StringArray.SetSize(nColumns);
+}
+
+LPTSTR CUIStrListCtrlData::GetString(int nCol)
+{ 
+       return (LPTSTR)(LPCTSTR)m_StringArray[nCol];
+}
+
+// return TRUE if needs updating
+BOOL CUIStrListCtrlData::AddString(int nCol,LPCTSTR szStr)
+{ 
+       if (nCol < 0)
+               return FALSE;
+       BOOL ret = !m_StringArray[nCol].IsEmpty();
+       m_StringArray[nCol] = szStr;
+       return ret;
+}
+/////////////////////////////////////////////////////////////////////////////