OSDN Git Service

Add Patch List to Sendmail Listctrl.
authorFrank Li <lznuaa@gmail.com>
Tue, 14 Apr 2009 05:40:52 +0000 (13:40 +0800)
committerFrank Li <lznuaa@gmail.com>
Tue, 14 Apr 2009 05:40:52 +0000 (13:40 +0800)
Signed-off-by: Frank Li <lznuaa@gmail.com>
src/Resources/TortoiseProcENG.rc
src/TortoiseProc/Commands/SendMailCommand.cpp
src/TortoiseProc/SendMailDlg.cpp
src/TortoiseProc/SendMailDlg.h
src/TortoiseProc/resource.h
src/Utils/ACEdit.cpp [new file with mode: 0644]
src/Utils/ACEdit.h [new file with mode: 0644]
src/Utils/ACListWnd.cpp [new file with mode: 0644]
src/Utils/ACListWnd.h [new file with mode: 0644]
src/Utils/Utils.vcproj

index 928c47e..88ebf07 100644 (file)
Binary files a/src/Resources/TortoiseProcENG.rc and b/src/Resources/TortoiseProcENG.rc differ
index 1dd7a62..2ac80c9 100644 (file)
@@ -5,6 +5,9 @@
 bool SendMailCommand::Execute()\r
 {\r
        CSendMailDlg dlg;\r
+\r
+       dlg.m_PathList  = orgPathList;\r
+       \r
        if(dlg.DoModal()==IDOK)\r
        {\r
                return true;\r
index fdcd57d..47914da 100644 (file)
@@ -4,8 +4,8 @@
 #include "stdafx.h"\r
 #include "TortoiseProc.h"\r
 #include "SendMailDlg.h"\r
-\r
-\r
+#include "MessageBox.h"\r
+#include "commonresource.h"\r
 // CSendMailDlg dialog\r
 \r
 IMPLEMENT_DYNAMIC(CSendMailDlg, CResizableStandAloneDialog)\r
@@ -35,11 +35,14 @@ void CSendMailDlg::DoDataExchange(CDataExchange* pDX)
        DDX_Check(pDX, IDC_SENDMAIL_COMBINE, m_bBranch);\r
        DDX_Control(pDX, IDC_SENDMAIL_PATCHS, m_ctrlList);\r
        DDX_Control(pDX,IDC_SENDMAIL_SETUP, this->m_SmtpSetup);\r
+       DDX_Control(pDX,IDC_SENDMAIL_TO,m_ctrlTO);\r
+       DDX_Control(pDX,IDC_SENDMAIL_CC,m_ctrlCC);\r
 }\r
 \r
 \r
 BEGIN_MESSAGE_MAP(CSendMailDlg, CResizableStandAloneDialog)\r
        ON_BN_CLICKED(IDC_SENDMAIL_COMBINE, &CSendMailDlg::OnBnClickedSendmailCombine)\r
+       ON_BN_CLICKED(IDOK, &CSendMailDlg::OnBnClickedOk)\r
 END_MESSAGE_MAP()\r
 \r
 \r
@@ -61,9 +64,65 @@ BOOL CSendMailDlg::OnInitDialog()
 \r
        this->AddOthersToAnchor();\r
        EnableSaveRestore(_T("SendMailDlg"));\r
+\r
+       m_ctrlCC.Init();\r
+       m_ctrlTO.Init();\r
+\r
+       m_ctrlCC.SetSeparator(_T(";"));\r
+       m_ctrlTO.SetSeparator(_T(";"));\r
+\r
+       m_AddressReg.SetMaxHistoryItems(0xFFFF);\r
+\r
+       m_AddressReg.Load(_T("Software\\TortoiseGit\\TortoiseProc\\EmailAddress\\"),_T("email"));\r
+       for(int i=0;i<m_AddressReg.GetCount();i++)\r
+       {\r
+               m_ctrlCC.AddSearchString(m_AddressReg.GetEntry(i));\r
+               m_ctrlTO.AddSearchString(m_AddressReg.GetEntry(i));\r
+       }\r
+\r
+       m_ctrlList.SetExtendedStyle( m_ctrlList.GetExtendedStyle()| LVS_EX_CHECKBOXES );\r
+\r
+       for(int i=0;i<m_PathList.GetCount();i++)\r
+       {\r
+               m_ctrlList.InsertItem(i,m_PathList[i].GetWinPathString());\r
+               m_ctrlList.SetCheck(i,true);\r
+       }\r
+       \r
+//     m_ctrlCC.AddSearchString(_T("Tortoisegit-dev@google.com"));\r
+//     m_ctrlTO.AddSearchString(_T("Tortoisegit-dev@google.com"));\r
+\r
        return TRUE;\r
 }\r
 void CSendMailDlg::OnBnClickedSendmailCombine()\r
 {\r
        // TODO: Add your control notification handler code here\r
 }\r
+\r
+void CSendMailDlg::OnBnClickedOk()\r
+{\r
+       \r
+       this->UpdateData();\r
+       if(this->m_To.IsEmpty() && this->m_CC.IsEmpty())\r
+       {\r
+               CMessageBox::Show(NULL,IDS_ERR_ADDRESS_NO_EMPTY,IDS_APPNAME,MB_OK|MB_ICONERROR);\r
+               return;\r
+       }\r
+       int start =0;\r
+       CString Address;\r
+       while(start>=0)\r
+       {\r
+               Address=this->m_CC.Tokenize(_T(";"),start);\r
+               m_AddressReg.AddEntry(Address);\r
+               m_AddressReg.Save();\r
+       }\r
+       start =0;\r
+       while(start>=0)\r
+       {\r
+               Address=this->m_To.Tokenize(_T(";"),start);\r
+               m_AddressReg.AddEntry(Address);\r
+               m_AddressReg.Save();\r
+       }       \r
+       \r
+       OnOK();\r
+       // TODO: Add your control notification handler code here\r
+}\r
index 8b119d3..427cfb2 100644 (file)
@@ -3,6 +3,9 @@
 #include "StandAloneDlg.h"\r
 #include "HyperLink.h"\r
 // CSendMailDlg dialog\r
+#include "ACEdit.h"\r
+#include "RegHistory.h"\r
+#include "TGitPath.h"\r
 \r
 class CSendMailDlg : public CResizableStandAloneDialog\r
 {\r
@@ -22,6 +25,9 @@ protected:
 \r
        CHyperLink  m_SmtpSetup;\r
 \r
+       CACEdit         m_ctrlCC;\r
+       CACEdit         m_ctrlTO;\r
+       CRegHistory m_AddressReg;\r
 public:\r
        CString m_To;\r
        CString m_CC;\r
@@ -29,5 +35,8 @@ public:
        BOOL m_bAttachment;\r
        BOOL m_bBranch;\r
        CListCtrl m_ctrlList;\r
+       CTGitPathList m_PathList;\r
+\r
        afx_msg void OnBnClickedSendmailCombine();\r
+       afx_msg void OnBnClickedOk();\r
 };\r
index 90ee32d..c9996a2 100644 (file)
Binary files a/src/TortoiseProc/resource.h and b/src/TortoiseProc/resource.h differ
diff --git a/src/Utils/ACEdit.cpp b/src/Utils/ACEdit.cpp
new file mode 100644 (file)
index 0000000..826fd2d
--- /dev/null
@@ -0,0 +1,680 @@
+// ACEdit.cpp: Implementierungsdatei\r
+//\r
+\r
+#include "stdafx.h"\r
+#include "ACEdit.h"\r
+#include  <io.h>\r
+\r
+\r
+#ifdef _DEBUG\r
+#define new DEBUG_NEW\r
+#undef THIS_FILE\r
+static char THIS_FILE[] = __FILE__;\r
+#endif\r
+\r
+#define _EDIT_ 1\r
+#define _COMBOBOX_ 2\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// CACEdit\r
+\r
+CACEdit::CACEdit()\r
+{\r
+       m_iMode = _MODE_STANDARD_;\r
+       m_iType = -1;\r
+       m_pEdit = NULL;\r
+       m_CursorMode = false;\r
+       m_PrefixChar = 0;\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+CACEdit::~CACEdit()\r
+{\r
+       DestroyWindow();\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+BEGIN_MESSAGE_MAP(CACEdit, CWnd)\r
+       //{{AFX_MSG_MAP(CACEdit)\r
+       ON_CONTROL_REFLECT(EN_KILLFOCUS, OnKillfocus)\r
+       ON_CONTROL_REFLECT(CBN_KILLFOCUS, OnKillfocus)\r
+       ON_WM_KEYDOWN()\r
+       ON_CONTROL_REFLECT(EN_CHANGE, OnChange)\r
+       ON_CONTROL_REFLECT(CBN_EDITCHANGE, OnChange)\r
+       ON_CONTROL_REFLECT(CBN_DROPDOWN, OnCloseList)\r
+       //}}AFX_MSG_MAP\r
+       ON_MESSAGE(ENAC_UPDATE,OnUpdateFromList)\r
+END_MESSAGE_MAP()\r
+\r
+/*********************************************************************/\r
+\r
+void CACEdit::SetMode(int iMode)\r
+{\r
+       if(m_iType == -1)\r
+               Init();\r
+\r
+       m_iMode = iMode;\r
+\r
+       /*\r
+       ** Vers. 1.1\r
+       ** NEW: _MODE_CURSOR_O_LIST_\r
+       */\r
+       if(iMode == _MODE_CURSOR_O_LIST_)\r
+               m_iMode |= _MODE_STANDARD_;\r
+\r
+       if(iMode & _MODE_FILESYSTEM_)\r
+               m_SeparationStr = _T("\\");\r
+\r
+       // Vers. 1.2\r
+       if(iMode & _MODE_FIND_ALL_)\r
+       {\r
+               m_Liste.m_lMode |= _MODE_FIND_ALL_;\r
+       }\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+void CACEdit::Init()\r
+{\r
+       CString szClassName = AfxRegisterWndClass(CS_CLASSDC|CS_SAVEBITS|CS_HREDRAW|CS_VREDRAW,\r
+               0,(HBRUSH) (COLOR_WINDOW), 0);\r
+       CRect rcWnd,rcWnd1;\r
+       GetWindowRect(rcWnd);\r
+\r
+       VERIFY(m_Liste.CreateEx(WS_EX_TOOLWINDOW,\r
+               szClassName,NULL,\r
+               WS_THICKFRAME | WS_CHILD | WS_BORDER |\r
+               WS_CLIPSIBLINGS | WS_OVERLAPPED,\r
+               CRect(rcWnd.left, rcWnd.top +20, rcWnd.left+ 200, rcWnd.top+200),\r
+               GetDesktopWindow(), \r
+               0x3E8, NULL));\r
+\r
+       CString m_ClassName;\r
+       ::GetClassName(GetSafeHwnd(), m_ClassName.GetBuffer(32), 32);\r
+       m_ClassName.ReleaseBuffer();\r
+\r
+       if (m_ClassName.Compare(_T("Edit")) == 0)\r
+       {\r
+               m_iType = _EDIT_;\r
+       }\r
+       else\r
+       {\r
+               if (m_ClassName.Compare(_T("ComboBox")) == 0)\r
+               {\r
+                       m_iType = _COMBOBOX_;\r
+\r
+                       m_pEdit = (CEdit*)GetWindow(GW_CHILD);\r
+                       VERIFY(m_pEdit);\r
+                       ::GetClassName(m_pEdit->GetSafeHwnd(), m_ClassName.GetBuffer(32), 32);\r
+                       m_ClassName.ReleaseBuffer();\r
+                       VERIFY(m_ClassName.Compare(_T("Edit")) == 0);\r
+               }\r
+       }\r
+\r
+       if(m_iType == -1)\r
+       {\r
+               ASSERT(0);\r
+               return;\r
+       }\r
+\r
+       m_Liste.Init(this);\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+void CACEdit::AddSearchStrings(LPCTSTR Strings[])\r
+{\r
+       int i = 0;\r
+       LPCTSTR str;\r
+       if(m_iType == -1) {ASSERT(0); return;}\r
+\r
+       m_Liste.RemoveAll();\r
+\r
+       do\r
+       {\r
+               str = Strings[i];\r
+               if(str)\r
+               {\r
+                       m_Liste.AddSearchString(str);\r
+               }\r
+\r
+               i++;\r
+       }\r
+       while(str);\r
+\r
+       m_Liste.SortSearchList();\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+void CACEdit::AddSearchString(LPCTSTR lpszString)\r
+{\r
+       if(m_iType == -1) {ASSERT(0); return;} \r
+\r
+       m_Liste.AddSearchString(lpszString);\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+void CACEdit::RemoveSearchAll()\r
+{\r
+       if(m_iType == -1) {ASSERT(0); return;}\r
+\r
+       m_Liste.RemoveAll();    \r
+}\r
+\r
+/*********************************************************************/\r
+\r
+void CACEdit::OnKillfocus() \r
+{\r
+       if(m_Liste.GetSafeHwnd()) // fix Vers 1.1\r
+               m_Liste.ShowWindow(false);\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+void CACEdit::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)\r
+{\r
+       if(!HandleKey(nChar,false))\r
+               CWnd::OnKeyDown(nChar, nRepCnt, nFlags);\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+bool CACEdit::HandleKey(UINT nChar, bool m_bFromChild)\r
+{\r
+       if (nChar == VK_ESCAPE ||nChar == VK_RETURN)\r
+       {\r
+               m_Liste.ShowWindow(false);\r
+               return true;\r
+       }\r
+\r
+       if (nChar == VK_DOWN || nChar == VK_UP \r
+               || nChar == VK_PRIOR || nChar == VK_NEXT\r
+               || nChar == VK_HOME || nChar == VK_END) \r
+       {\r
+               /*\r
+               ** Vers. 1.1\r
+               ** NEW: _MODE_CURSOR_O_LIST_\r
+               */\r
+               if(!m_Liste.IsWindowVisible() && (m_iMode & _MODE_CURSOR_O_LIST_))\r
+               {\r
+                       GetWindowText(m_EditText);\r
+                       if(m_EditText.IsEmpty())\r
+                       {\r
+                               m_Liste.CopyList();\r
+                               return true;\r
+                       }       \r
+               }\r
+\r
+               if(m_Liste.IsWindowVisible())\r
+               {\r
+                       int pos;\r
+\r
+\r
+                       if(m_iMode & _MODE_STANDARD_ \r
+                               || m_iMode & _MODE_FILESYSTEM_\r
+                               || m_iMode & _MODE_FS_START_DIR_)\r
+                       {\r
+                               m_CursorMode = true;\r
+\r
+                               if(!m_bFromChild)\r
+                                       m_EditText = m_Liste.GetNextString(nChar);\r
+                               else\r
+                                       m_EditText = m_Liste.GetString();\r
+\r
+                               if(m_iMode & _MODE_FILESYSTEM_)\r
+                               {\r
+                                       if (m_EditText.Right(1) == _T('\\'))\r
+                                               m_EditText = m_EditText.Mid(0,m_EditText.GetLength()-1);\r
+                               }\r
+\r
+                               m_Liste.SelectItem(-1);\r
+                               SetWindowText(m_EditText);\r
+                               pos = m_EditText.GetLength();\r
+\r
+                               if(m_iType == _COMBOBOX_)\r
+                               {\r
+                                       m_pEdit->SetSel(pos,pos,true);\r
+                                       m_pEdit->SetModify(true);\r
+                               }\r
+\r
+                               if(m_iType == _EDIT_)\r
+                               {\r
+                                       ((CEdit*)this)->SetSel(pos,pos,true);\r
+                                       ((CEdit*)this)->SetModify(true);\r
+                               }\r
+\r
+                               GetParent()->SendMessage(ENAC_UPDATE, WM_KEYDOWN, GetDlgCtrlID());\r
+                               m_CursorMode = false;\r
+                               return true;\r
+                       }\r
+\r
+                       if(m_iMode & _MODE_SEPARATION_)\r
+                       {\r
+                               CString m_Text,m_Left,m_Right;\r
+                               int left,right,pos=0,len;\r
+\r
+                               m_CursorMode = true;\r
+\r
+                               GetWindowText(m_EditText);\r
+\r
+                               if(m_iType == _EDIT_)\r
+                                       pos = LOWORD(((CEdit*)this)->CharFromPos(GetCaretPos()));\r
+\r
+                               if(m_iType == _COMBOBOX_)\r
+                                       pos = m_pEdit->CharFromPos(m_pEdit->GetCaretPos());\r
+\r
+                               left  = FindSepLeftPos(pos-1,true);\r
+                               right = FindSepRightPos(pos);\r
+\r
+                               m_Text = m_EditText.Left(left);\r
+\r
+                               if(!m_bFromChild)\r
+                                       m_Text += m_Liste.GetNextString(nChar);\r
+                               else\r
+                                       m_Text += m_Liste.GetString();\r
+\r
+                               m_Liste.SelectItem(-1);\r
+                               m_Text += m_EditText.Mid(right);\r
+                               len = m_Liste.GetString().GetLength();\r
+\r
+                               m_Text += this->m_SeparationStr;\r
+\r
+                               SetWindowText(m_Text);\r
+                               GetParent()->SendMessage(ENAC_UPDATE, WM_KEYDOWN, GetDlgCtrlID());\r
+\r
+                               right = FindSepLeftPos2(pos-1);\r
+                               left -= right;\r
+                               len += right;\r
+\r
+                               left+=m_SeparationStr.GetLength();\r
+\r
+                               if(m_iType == _EDIT_)\r
+                               {\r
+                                       ((CEdit*)this)->SetModify(true);\r
+                                       ((CEdit*)this)->SetSel(left+len,left+len,false);\r
+                               }\r
+\r
+                               if(m_iType == _COMBOBOX_)\r
+                               {\r
+                                       m_pEdit->SetModify(true);\r
+                                       m_pEdit->SetSel(left,left+len,true);\r
+                               }\r
+\r
+                               m_CursorMode = false;\r
+                               return true;\r
+                       }\r
+               }\r
+       }\r
+       return false;\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+void CACEdit::OnChange() \r
+{\r
+       CString m_Text;\r
+       int pos=0,len;\r
+\r
+       if(m_iType == -1) \r
+       {ASSERT(0); return;}\r
+\r
+       GetWindowText(m_EditText);\r
+       len = m_EditText.GetLength();\r
+       //----------------------------------------------\r
+       if(m_iMode & _MODE_FILESYSTEM_ || m_iMode & _MODE_FS_START_DIR_)\r
+       {\r
+               if(!m_CursorMode)\r
+               {\r
+                       if(m_iType == _EDIT_)\r
+                               pos = LOWORD(((CEdit*)this)->CharFromPos(GetCaretPos()));\r
+\r
+                       if(m_iType == _COMBOBOX_)\r
+                               pos = m_pEdit->CharFromPos(m_pEdit->GetCaretPos());\r
+\r
+                       if(m_iMode & _MODE_FS_START_DIR_)\r
+                       {\r
+                               if(len)\r
+                                       m_Liste.FindString(-1,m_EditText);\r
+                               else\r
+                                       m_Liste.ShowWindow(false);\r
+                       }\r
+                       else\r
+                       {\r
+                               if(len > 2 && pos == len)\r
+                               {                       \r
+                                       if(_taccess(m_EditText,0) == 0)\r
+                                       {\r
+                                               ReadDirectory(m_EditText);\r
+                                       }\r
+                                       m_Liste.FindString(-1,m_EditText);\r
+                               }\r
+                               else\r
+                                       m_Liste.ShowWindow(false);\r
+                       }\r
+               } // m_CursorMode\r
+       }\r
+       //----------------------------------------------        \r
+       if(m_iMode & _MODE_SEPARATION_)\r
+       {\r
+               if(!m_CursorMode)\r
+               {\r
+                       if(m_iType == _EDIT_)\r
+                               pos = LOWORD(((CEdit*)this)->CharFromPos(GetCaretPos()));\r
+\r
+                       if(m_iType == _COMBOBOX_)\r
+                               pos = m_pEdit->CharFromPos(m_pEdit->GetCaretPos());\r
+\r
+                       int left,right;\r
+                       left  = FindSepLeftPos(pos-1);\r
+                       right = FindSepRightPos(pos);\r
+                       m_Text = m_EditText.Mid(left,right-left);\r
+                       m_Liste.FindString(-1,m_Text);\r
+               }\r
+       }\r
+       //----------------------------------------------\r
+       if(m_iMode & _MODE_STANDARD_)\r
+       {\r
+               if(!m_CursorMode)\r
+                       m_Liste.FindString(-1,m_EditText);\r
+       }\r
+       //----------------------------------------------\r
+       GetParent()->SendMessage(ENAC_UPDATE, EN_UPDATE, GetDlgCtrlID());\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+int CACEdit::FindSepLeftPos(int pos,bool m_bIncludePrefix)\r
+{\r
+       int len = m_EditText.GetLength(); \r
+       TCHAR ch;\r
+       int i;\r
+\r
+       if(pos >= len && len != 1)\r
+               pos =  len -1;\r
+\r
+       for(i = pos; i >= 0 ; i--)\r
+       {\r
+               ch = m_EditText.GetAt(i);\r
+               if(m_PrefixChar == ch)\r
+                       return i + (m_bIncludePrefix ? 1 : 0);\r
+               if(m_SeparationStr.Find(ch) != -1)\r
+                       break;\r
+       }\r
+\r
+       return  i + 1;\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+int CACEdit::FindSepLeftPos2(int pos)\r
+{\r
+       int len = m_EditText.GetLength(); \r
+       TCHAR ch;\r
+\r
+       if(pos >= len && len != 1)\r
+               pos =  len -1;\r
+\r
+       if(len == 1)\r
+               return 0;\r
+\r
+       for(int i = pos; i >= 0 ; i--)\r
+       {\r
+               ch = m_EditText.GetAt(i);\r
+               if(m_PrefixChar == ch)\r
+                       return 1;\r
+       }\r
+\r
+       return  0;\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+int CACEdit::FindSepRightPos(int pos)\r
+{\r
+       int len = m_EditText.GetLength(); \r
+       TCHAR ch;\r
+       int i;\r
+\r
+       for(i = pos; i < len ; i++)\r
+       {\r
+               ch = m_EditText.GetAt(i);\r
+               if(m_SeparationStr.Find(ch) != -1)\r
+                       break;\r
+       }\r
+\r
+       return i;\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+LONG CACEdit::OnUpdateFromList(UINT lParam, LONG /*wParam*/)\r
+{\r
+       UpdateData(true);\r
+\r
+       if(lParam == WM_KEYDOWN)\r
+       {\r
+               HandleKey(VK_DOWN,true);\r
+       }\r
+       return 0;\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+void CACEdit::OnCloseList()\r
+{\r
+       m_Liste.ShowWindow(false);\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+BOOL CACEdit::PreTranslateMessage(MSG* pMsg) \r
+{\r
+       if(pMsg->message == WM_KEYDOWN)\r
+       {\r
+               if(m_Liste.IsWindowVisible())\r
+               {\r
+                       if(m_iType == _COMBOBOX_)\r
+                       {\r
+                               if(pMsg->wParam == VK_DOWN || pMsg->wParam == VK_UP)\r
+                                       if(HandleKey(pMsg->wParam,false))\r
+                                               return true;\r
+                       }\r
+\r
+                       if(pMsg->wParam == VK_ESCAPE || pMsg->wParam == VK_RETURN)\r
+                               if(HandleKey(pMsg->wParam,false))\r
+                                       return true;\r
+               }\r
+       }\r
+       return CWnd::PreTranslateMessage(pMsg);\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+void CACEdit::ReadDirectory(CString m_Dir)\r
+{\r
+       CFileFind FoundFiles;\r
+       TCHAR ch;\r
+       CWaitCursor hg;\r
+\r
+       // Wenn mittem im Pfad,\r
+       // vorheriges Verzeichnis einlesen.\r
+       if (m_Dir.Right(1) != _T('\\'))\r
+       {\r
+               _tsplitpath(m_Dir, m_szDrive, m_szDir, m_szFname, m_szExt);\r
+               m_Dir.Format(_T("%s%s"),m_szDrive, m_szDir);\r
+       }\r
+\r
+       //ist hübscher\r
+       ch = (TCHAR)towupper(m_Dir.GetAt(0));\r
+       m_Dir.SetAt(0,ch);\r
+\r
+       CString m_Name,m_File,m_Dir1 = m_Dir;   \r
+       if (m_Dir.Right(1) != _T('\\'))\r
+               m_Dir += _T("\\");\r
+\r
+       if(m_LastDirectory.CompareNoCase(m_Dir) == 0 && m_Liste.m_SearchList.GetSize())\r
+               return;\r
+\r
+       m_LastDirectory = m_Dir;\r
+       m_Dir += _T("*.*");\r
+\r
+       BOOL bContinue = FoundFiles.FindFile(m_Dir);\r
+       if(bContinue)\r
+               RemoveSearchAll();\r
+\r
+       while (bContinue == TRUE)\r
+       {\r
+               bContinue = FoundFiles.FindNextFile();\r
+               m_File = FoundFiles.GetFileName();\r
+\r
+               if(FoundFiles.IsHidden() || FoundFiles.IsSystem())\r
+                       continue;\r
+               if(FoundFiles.IsDirectory())\r
+               {\r
+                       if(m_iMode & _MODE_ONLY_FILES)\r
+                               continue;\r
+                       if(FoundFiles.IsDots())\r
+                               continue;\r
+\r
+                       if (m_File.Right(1) != _T('\\'))\r
+                               m_File += _T("\\");\r
+               }\r
+\r
+               if(!FoundFiles.IsDirectory())\r
+                       if(m_iMode & _MODE_ONLY_DIRS)\r
+                               continue;\r
+\r
+               if(m_iMode & _MODE_FS_START_DIR_)\r
+               {\r
+                       m_Name = m_File;\r
+               }\r
+               else\r
+               {\r
+                       m_Name = m_Dir1;\r
+                       if (m_Name.Right(1) != _T('\\'))\r
+                               m_Name += _T("\\");\r
+\r
+                       m_Name += m_File;\r
+               }\r
+\r
+               AddSearchString(m_Name);\r
+       }\r
+       FoundFiles.Close();\r
+       return;\r
+\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+void CACEdit::SetStartDirectory(LPCTSTR lpszString)\r
+{\r
+       if(m_iType == -1) {ASSERT(0); return;}\r
+\r
+       if(m_iMode & _MODE_FS_START_DIR_)\r
+               ReadDirectory(lpszString);\r
+}\r
+\r
+/*********************************************************************\r
+** CComboBox \r
+** NEW:V1.1\r
+*********************************************************************/\r
+\r
+int CACEdit::AddString( LPCTSTR lpszString )\r
+{\r
+       if(m_iType == _COMBOBOX_)\r
+       {\r
+               return ((CComboBox *)this)->AddString(lpszString);\r
+       }\r
+       return CB_ERR;\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+int CACEdit::SetDroppedWidth( UINT nWidth )\r
+{\r
+       if(m_iType == _COMBOBOX_)\r
+       {\r
+               return ((CComboBox *)this)->SetDroppedWidth(nWidth);\r
+       }\r
+       return CB_ERR;\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+int CACEdit::FindString( int nStartAfter, LPCTSTR lpszString )\r
+{\r
+       if(m_iType == _COMBOBOX_)\r
+       {\r
+               return ((CComboBox *)this)->FindString(nStartAfter,lpszString);\r
+       }\r
+       return CB_ERR;\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+int CACEdit::SelectString( int nStartAfter, LPCTSTR lpszString )\r
+{\r
+       if(m_iType == _COMBOBOX_)\r
+       {\r
+               return ((CComboBox *)this)->SelectString(nStartAfter,lpszString);\r
+       }\r
+       return CB_ERR;\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+void CACEdit::ShowDropDown(BOOL bShowIt)\r
+{\r
+       if(m_iType == _COMBOBOX_)\r
+       {\r
+               ((CComboBox *)this)->ShowDropDown(bShowIt);\r
+       }\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+void CACEdit::ResetContent()\r
+{\r
+       if(m_iType == _COMBOBOX_)\r
+       {\r
+               ((CComboBox *)this)->ResetContent();\r
+       }\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+int CACEdit::GetCurSel()\r
+{\r
+       if(m_iType == _COMBOBOX_)\r
+       {\r
+               return ((CComboBox *)this)->GetCurSel();\r
+       }\r
+       return CB_ERR;\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+int CACEdit::GetLBText( int nIndex, LPTSTR lpszText )\r
+{\r
+       if(m_iType == _COMBOBOX_)\r
+       {\r
+               return ((CComboBox *)this)->GetLBText(nIndex,lpszText);\r
+       }\r
+       return CB_ERR;\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+void CACEdit::GetLBText( int nIndex, CString& rString )\r
+{\r
+       if(m_iType == _COMBOBOX_)\r
+       {\r
+               ((CComboBox *)this)->GetLBText(nIndex,rString);\r
+       }\r
+}\r
+\r
+/*********************************************************************/\r
diff --git a/src/Utils/ACEdit.h b/src/Utils/ACEdit.h
new file mode 100644 (file)
index 0000000..26454fa
--- /dev/null
@@ -0,0 +1,117 @@
+#if !defined(AFX_ACEDIT_H__56D21C13_ECEA_41DF_AADF_55980E861AC2__INCLUDED_)\r
+#define AFX_ACEDIT_H__56D21C13_ECEA_41DF_AADF_55980E861AC2__INCLUDED_\r
+\r
+#if _MSC_VER > 1000\r
+#pragma once\r
+#endif // _MSC_VER > 1000\r
+// ACEdit.h : Header-Datei\r
+//\r
+\r
+/*********************************************************************\r
+*\r
+* CACEdit\r
+* Copyright (c) 2003 by Andreas Kapust\r
+* All rights reserved.\r
+* info@akinstaller.de\r
+*\r
+*********************************************************************/\r
+\r
+\r
+#define _MODE_ONLY_FILES               (1L << 16)\r
+#define _MODE_ONLY_DIRS                        (1L << 17)\r
+\r
+#define _MODE_STANDARD_                        (1L << 0)\r
+#define _MODE_SEPARATION_              (1L << 1)\r
+#define _MODE_FILESYSTEM_              (1L << 2)\r
+#define _MODE_FS_START_DIR_            (1L << 3)\r
+#define _MODE_CURSOR_O_LIST_   (1L << 4)\r
+#define _MODE_FIND_ALL_                        (1L << 5)\r
+\r
+#define _MODE_FS_ONLY_FILE_    (_MODE_FILESYSTEM_|_MODE_ONLY_FILES)\r
+#define _MODE_FS_ONLY_DIR_     (_MODE_FILESYSTEM_|_MODE_ONLY_DIRS)\r
+#define _MODE_SD_ONLY_FILE_    (_MODE_FS_START_DIR_|_MODE_ONLY_FILES)\r
+#define _MODE_SD_ONLY_DIR_     (_MODE_FS_START_DIR_|_MODE_ONLY_DIRS)  //Fix 1.2\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// Fenster CACEdit \r
+#include "ACListWnd.h"\r
+\r
+\r
+class CACEdit : public CWnd //CEdit\r
+{\r
+       // Konstruktion\r
+public:\r
+       CACEdit();\r
+       void SetMode(int iMode=_MODE_STANDARD_);\r
+       void SetSeparator(LPCTSTR lpszString,TCHAR lpszPrefixChar = 0)\r
+       {\r
+               m_SeparationStr = lpszString;\r
+               m_Liste.m_PrefixChar = m_PrefixChar = lpszPrefixChar;\r
+               SetMode(_MODE_SEPARATION_);\r
+       }\r
+\r
+       // CComboBox\r
+       int AddString( LPCTSTR lpszString);\r
+       int GetLBText( int nIndex, LPTSTR lpszText );\r
+       void GetLBText( int nIndex, CString& rString );\r
+       int SetDroppedWidth(UINT nWidth);\r
+       int FindString( int nStartAfter, LPCTSTR lpszString );\r
+       int SelectString( int nStartAfter, LPCTSTR lpszString );\r
+       void ShowDropDown(BOOL bShowIt = TRUE );\r
+       void ResetContent();\r
+       int GetCurSel();\r
+       // Attribute\r
+public:\r
+       void Init();\r
+       void AddSearchString(LPCTSTR lpszString);\r
+       void AddSearchStrings(LPCTSTR Strings[]);\r
+       void RemoveSearchAll();\r
+       void SetStartDirectory(LPCTSTR lpszString);\r
+       // Operationen\r
+public:\r
+\r
+       // Überschreibungen\r
+       // Vom Klassen-Assistenten generierte virtuelle Funktionsüberschreibungen\r
+       //{{AFX_VIRTUAL(CACEdit)\r
+public:\r
+       virtual BOOL PreTranslateMessage(MSG* pMsg);\r
+       //}}AFX_VIRTUAL\r
+\r
+       // Implementierung\r
+public:\r
+       virtual ~CACEdit();\r
+       CACListWnd m_Liste;\r
+       // Generierte Nachrichtenzuordnungsfunktionen\r
+protected:\r
+       CString m_EditText, m_SeparationStr,m_LastDirectory;\r
+       TCHAR m_PrefixChar;\r
+       int m_iMode;\r
+       //{{AFX_MSG(CACEdit)\r
+       afx_msg void OnKillfocus();\r
+       afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);\r
+       afx_msg void OnChange();\r
+       afx_msg void OnCloseList();\r
+       //}}AFX_MSG\r
+       afx_msg LONG OnUpdateFromList(UINT lParam, LONG wParam);\r
+       DECLARE_MESSAGE_MAP()\r
+\r
+\r
+       void ReadDirectory(CString m_Dir);\r
+       int FindSepLeftPos(int pos, bool FindSepLeftPos = false);\r
+       int FindSepLeftPos2(int pos);\r
+       int FindSepRightPos(int pos);\r
+       bool HandleKey(UINT nChar, bool m_bFromChild);\r
+\r
+       bool m_CursorMode;\r
+       int m_iType;\r
+       CEdit *m_pEdit;\r
+\r
+       TCHAR m_szDrive[_MAX_DRIVE], m_szDir[_MAX_DIR],m_szFname[_MAX_FNAME], m_szExt[_MAX_EXT];\r
+};\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+\r
+//{{AFX_INSERT_LOCATION}}\r
+// Microsoft Visual C++ fügt unmittelbar vor der vorhergehenden Zeile zusätzliche Deklarationen ein.\r
+\r
+#endif // AFX_ACEDIT_H__56D21C13_ECEA_41DF_AADF_55980E861AC2__INCLUDED_\r
diff --git a/src/Utils/ACListWnd.cpp b/src/Utils/ACListWnd.cpp
new file mode 100644 (file)
index 0000000..4ec4363
--- /dev/null
@@ -0,0 +1,933 @@
+// ACWnd.cpp: Implementierungsdatei\r
+//\r
+\r
+#include "stdafx.h"\r
+#include "ACListWnd.h"\r
+\r
+#ifdef _DEBUG\r
+#define new DEBUG_NEW\r
+#undef THIS_FILE\r
+static char THIS_FILE[] = __FILE__;\r
+#endif\r
+\r
+static UINT auIDStatusBar[] = \r
+{ \r
+       ID_SEPARATOR\r
+};\r
+\r
+#define _MAX_ENTRYS_ 8\r
+#define _MODE_FIND_ALL_                        (1L << 5)\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// CACListWnd\r
+\r
+void DoPaintMessageLoop()\r
+{\r
+       MSG message1;\r
+       while(::PeekMessage(&message1,NULL,WM_PAINT,WM_PAINT, PM_REMOVE))\r
+       {\r
+               ::TranslateMessage(&message1);\r
+               ::DispatchMessage(&message1);\r
+       }\r
+}\r
+\r
+/**********************************************************************/\r
+\r
+CACListWnd::CACListWnd()\r
+{\r
+       m_lTopIndex = 0;\r
+       m_lCount = 0;\r
+       m_ItemHeight = 16;\r
+       m_lSelItem = -1;\r
+       m_VisibleItems = 0;\r
+       m_pEditParent = NULL;\r
+       m_LastSize.SetRectEmpty();\r
+       m_PrefixChar = 0;\r
+       m_lMode = 0;\r
+}\r
+\r
+/**********************************************************************/\r
+\r
+CACListWnd::~CACListWnd()\r
+{\r
+       m_SearchList.RemoveAll();\r
+       m_DisplayList.RemoveAll();\r
+       DestroyWindow();\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+void CACListWnd::OnActivateApp(BOOL bActive, DWORD dwThreadID) \r
+{\r
+#if (_MSC_VER >= 1300)\r
+       CWnd::OnActivateApp(bActive, dwThreadID);  //vc7    FIX 1.2\r
+#else\r
+       CWnd::OnActivateApp(bActive, (HTASK)dwThreadID); //vc6        FIX 1.2\r
+#endif\r
+\r
+       ShowWindow(false);\r
+}\r
+\r
+\r
+BEGIN_MESSAGE_MAP(CACListWnd, CWnd)\r
+       //{{AFX_MSG_MAP(CACListWnd)\r
+       ON_WM_PAINT()\r
+       ON_WM_SIZE()\r
+       ON_WM_ERASEBKGND()\r
+       ON_WM_NCPAINT()\r
+       ON_WM_KEYDOWN()\r
+       ON_WM_NCCALCSIZE()\r
+       ON_WM_VSCROLL()\r
+       ON_WM_ACTIVATEAPP()\r
+       ON_WM_NCHITTEST()\r
+       ON_WM_LBUTTONDOWN()\r
+       ON_WM_RBUTTONDOWN()\r
+       ON_WM_SETCURSOR()\r
+       ON_WM_SHOWWINDOW()\r
+       ON_WM_NCLBUTTONDOWN()\r
+       ON_WM_MOUSEMOVE()\r
+       ON_WM_TIMER()\r
+       ON_WM_GETMINMAXINFO()\r
+       //}}AFX_MSG_MAP\r
+END_MESSAGE_MAP()\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// Behandlungsroutinen für Nachrichten CACListWnd \r
+\r
+void CACListWnd::DrawItem(CDC* pDC,long m_lItem,long width)\r
+{\r
+       long y = m_lItem - m_lTopIndex;\r
+       CRect rcLabel(2,y*m_ItemHeight,width,(y+1)*m_ItemHeight);\r
+\r
+       pDC->SetTextColor(::GetSysColor(COLOR_WINDOWTEXT));\r
+\r
+       if(m_lItem == m_lSelItem)\r
+       {\r
+               rcLabel.left = 0;\r
+               pDC->FillSolidRect(rcLabel,::GetSysColor(COLOR_HIGHLIGHT));\r
+               pDC->SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));\r
+               rcLabel.left = 2;\r
+       }\r
+\r
+       if(m_PrefixChar)\r
+               m_DisplayStr = m_PrefixChar + m_DisplayList.GetAt(m_lItem);\r
+       else\r
+               m_DisplayStr = m_DisplayList.GetAt(m_lItem);\r
+\r
+       pDC->DrawText(m_DisplayStr, -1, rcLabel, DT_LEFT | DT_SINGLELINE | \r
+               DT_NOPREFIX | DT_VCENTER | DT_END_ELLIPSIS);\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+void CACListWnd::OnPaint() \r
+{\r
+       CPaintDC dc(this);\r
+       CRect rcWnd,m_rect, rc;\r
+       CDC MemDC,*pDC=NULL;\r
+       CBitmap  m_bitmap, *m_pOldBitmap;\r
+       int i;\r
+\r
+       GetClientRect(rc);\r
+       rcWnd = m_rect = rc;\r
+\r
+       rc.left = rc.right-GetSystemMetrics(SM_CXHSCROLL);\r
+       rc.top = rc.bottom-GetSystemMetrics(SM_CYVSCROLL);\r
+\r
+       m_rect.right -= ScrollBarWidth();\r
+\r
+       MemDC.CreateCompatibleDC(&dc);\r
+\r
+       m_bitmap.CreateCompatibleBitmap(&dc, m_rect.Width(), m_rect.Height());\r
+       m_pOldBitmap = MemDC.SelectObject(&m_bitmap);\r
+\r
+       MemDC.SetWindowOrg(m_rect.left, m_rect.top);\r
+\r
+       long width = rcWnd.Width() - ScrollBarWidth();\r
+\r
+       MemDC.FillSolidRect(rcWnd,::GetSysColor(COLOR_WINDOW));\r
+       MemDC.SelectObject(GetStockObject(DEFAULT_GUI_FONT)); \r
+       MemDC.SetBkMode(TRANSPARENT);\r
+\r
+       for(i = m_lTopIndex; i < m_lCount;i++)\r
+       {\r
+               DrawItem(&MemDC,i,width);\r
+       }\r
+\r
+\r
+       CPen m_Pen1(PS_SOLID, 1, ::GetSysColor(COLOR_WINDOW));\r
+       CPen m_Pen2(PS_SOLID, 1, ::GetSysColor(COLOR_BTNFACE));\r
+       CPen m_Pen3(PS_SOLID, 1, ::GetSysColor(COLOR_3DSHADOW));\r
+\r
+       pDC = &dc;\r
+\r
+       if(m_VertBar.IsWindowVisible())\r
+               dc.FillSolidRect(rc, ::GetSysColor(COLOR_BTNFACE) );\r
+       else\r
+               pDC = &MemDC;\r
+\r
+       CPen *pOldPen = (CPen*)pDC->SelectObject(&m_Pen1);\r
+       int a = 1,bottom;\r
+\r
+       width = GetSystemMetrics(SM_CXHSCROLL);\r
+       bottom = (rcWnd.bottom-GetSystemMetrics(SM_CXHSCROLL))-1;\r
+\r
+       //gripper\r
+       for( i = 0; i < 20 ;i++,a++)\r
+       {\r
+               if(a==1)\r
+                       pDC->SelectObject(&m_Pen1);\r
+               if(a==2)\r
+                       pDC->SelectObject(&m_Pen2);\r
+               if(a==3)\r
+                       pDC->SelectObject(&m_Pen3);\r
+               if(a > 3)\r
+                       a = 0;\r
+\r
+               pDC->MoveTo(rc.left + i - 1, rcWnd.bottom);\r
+               pDC->LineTo(rc.left + i + width, bottom);\r
+       }\r
+\r
+       dc.BitBlt(m_rect.left, m_rect.top, m_rect.Width(), m_rect.Height(),\r
+               &MemDC, m_rect.left, m_rect.top, SRCCOPY);\r
+\r
+       pDC->SelectObject( pOldPen );\r
+       MemDC.SelectObject(m_pOldBitmap);\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+void CACListWnd::Init(CWnd *pWnd)\r
+{\r
+       VERIFY(m_VertBar.Create(WS_VISIBLE|SBS_VERT|SBS_LEFTALIGN,\r
+               CRect(0,0,GetSystemMetrics(SM_CYVSCROLL),100),this,0));\r
+\r
+       SetScroller();\r
+       m_pEditParent = (CEdit*)pWnd;\r
+\r
+       m_lCount = m_DisplayList.GetSize();\r
+       m_VertBar.SetScrollPos(0,false);\r
+       SetProp();\r
+\r
+       CDC *m_pDC;\r
+       m_pDC = GetDC();\r
+       if(m_pDC)\r
+       {\r
+               m_pDC->SelectObject(GetStockObject(DEFAULT_GUI_FONT));\r
+               CSize m_Size = m_pDC->GetOutputTextExtent(_T("Hg"));\r
+               m_ItemHeight = m_Size.cy;\r
+               ReleaseDC(m_pDC);\r
+       }\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+void CACListWnd::SetScroller()\r
+{\r
+       CRect rcWnd,rcBar;\r
+       GetClientRect(rcWnd);\r
+\r
+       if(m_VertBar.GetSafeHwnd())\r
+       {\r
+               rcBar = rcWnd;\r
+               rcBar.top=-1;\r
+               rcBar.left = (rcWnd.Width()-GetSystemMetrics(SM_CYVSCROLL));\r
+               rcBar.bottom-= GetSystemMetrics(SM_CYHSCROLL);\r
+               m_VertBar.MoveWindow(rcBar);\r
+               rcBar.top = rcWnd.bottom-20;\r
+               rcBar.bottom = rcWnd.bottom;\r
+\r
+               m_VertBar.SetScrollPos(m_lTopIndex,true);       \r
+       }       \r
+\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+void CACListWnd::OnSize(UINT nType, int cx, int cy) \r
+{\r
+       CWnd::OnSize(nType, cx, cy);\r
+       SetScroller();\r
+       SetProp();\r
+\r
+       if(!m_LastSize.IsRectEmpty())\r
+               GetWindowRect(m_LastSize);\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+long CACListWnd::ScrollBarWidth()\r
+{\r
+       if(m_VertBar.IsWindowVisible())\r
+               return GetSystemMetrics(SM_CYVSCROLL);\r
+       else\r
+               return 0;\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+void CACListWnd::SetProp()\r
+{\r
+       CRect rcWnd,rcBar;\r
+\r
+       if(!m_lCount)\r
+               return;\r
+\r
+       CWnd::GetWindowRect(rcWnd);\r
+       ScreenToClient(rcWnd);\r
+\r
+       SCROLLINFO si;\r
+       si.cbSize = sizeof(SCROLLINFO);\r
+       si.fMask =  SIF_PAGE|SIF_RANGE;\r
+       si.nMin = 0;\r
+       si.nMax =  m_lCount-1;\r
+       m_VisibleItems = si.nPage = rcWnd.Height()/m_ItemHeight;\r
+       si.nTrackPos = 2;\r
+       m_VertBar.SetScrollRange(0,m_lCount-1);\r
+       m_VertBar.SetScrollInfo(&si);\r
+\r
+       if(m_VisibleItems > m_lCount-1)\r
+               m_VertBar.ShowWindow(false);\r
+       else\r
+               m_VertBar.ShowWindow(true);\r
+\r
+       if(m_lTopIndex+m_VisibleItems > m_lCount)\r
+       {\r
+               m_lTopIndex = m_lCount-m_VisibleItems;\r
+               if(m_lTopIndex < 0)\r
+                       m_lTopIndex = 0;\r
+               m_VertBar.SetScrollPos(m_lTopIndex,true);\r
+       }\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+BOOL CACListWnd::OnEraseBkgnd(CDC* /*pDC*/) \r
+{\r
+       return false;\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+void CACListWnd::OnNcPaint() \r
+{\r
+       CWindowDC dc(this);\r
+       CRect rectClient, rectWindow,rcWnd;\r
+\r
+       GetClientRect(rectClient);\r
+       GetWindowRect(rectWindow);\r
+       ScreenToClient(rectWindow);\r
+\r
+       rectClient.OffsetRect(-(rectWindow.left), -(rectWindow.top));\r
+       dc.ExcludeClipRect(rectClient);\r
+\r
+       rectWindow.OffsetRect(-rectWindow.left, -rectWindow.top);\r
+\r
+       dc.FillSolidRect(rectWindow,::GetSysColor(COLOR_WINDOWTEXT));\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+void CACListWnd::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) \r
+{\r
+       CWnd::OnKeyDown(nChar, nRepCnt, nFlags);\r
+\r
+       if (nChar == VK_ESCAPE) \r
+               ShowWindow(false);\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+void CACListWnd::OnNcCalcSize(BOOL /*bCalcValidRects*/, NCCALCSIZE_PARAMS FAR* lpncsp) \r
+{\r
+       ::InflateRect(lpncsp->rgrc,\r
+               -GetSystemMetrics(SM_CXBORDER), -GetSystemMetrics(SM_CYBORDER));\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+int CACListWnd::HitTest(CPoint point)\r
+{\r
+       CRect rcItem;\r
+       CRect rcWnd;\r
+\r
+       GetClientRect(rcWnd);\r
+       long width = rcWnd.Width() - ScrollBarWidth();\r
+\r
+       for(int i = m_lTopIndex; i < m_lCount; i++)\r
+       {\r
+               long y = i - m_lTopIndex;\r
+               rcItem.SetRect(2,y*m_ItemHeight,width,(y+1)*m_ItemHeight);\r
+\r
+               if(PtInRect(&rcItem, point))\r
+                       return (m_lSelItem = (y+m_lTopIndex));\r
+       }\r
+\r
+       return -1;\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+LRESULT CACListWnd::OnNcHitTest(CPoint point) \r
+{\r
+       CRect rectClient;\r
+       GetWindowRect(rectClient);\r
+\r
+       rectClient.left = rectClient.right - GetSystemMetrics(SM_CYVSCROLL);\r
+       rectClient.top = rectClient.bottom - GetSystemMetrics(SM_CXVSCROLL);\r
+\r
+       if(rectClient.PtInRect(point))\r
+               return HTBOTTOMRIGHT;\r
+       else\r
+               return HTCLIENT;\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+void CACListWnd::OnLButtonDown(UINT nFlags, CPoint point) \r
+{\r
+       CWnd::OnLButtonDown(nFlags, point);\r
+       int sel = HitTest(point);\r
+\r
+       if(sel >= 0)\r
+       {\r
+               if(!EnsureVisible(sel,true))\r
+                       Invalidate();\r
+               m_lSelItem = sel;\r
+               m_pEditParent->SendMessage(ENAC_UPDATE, WM_KEYDOWN, GetDlgCtrlID());\r
+               DoPaintMessageLoop();\r
+               Sleep(500);\r
+               ShowWindow(false);\r
+       }\r
+       else\r
+       {\r
+               CRect rc;\r
+               GetClientRect(rc);\r
+               if(!rc.PtInRect(point))\r
+                       ShowWindow(false);\r
+       }\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+void CACListWnd::OnRButtonDown(UINT nFlags, CPoint point) \r
+{\r
+       CWnd::OnRButtonDown(nFlags, point);\r
+       ShowWindow(false);\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+BOOL CACListWnd::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) \r
+{\r
+       CRect rectClient;\r
+       CPoint ptCursor;\r
+\r
+       GetWindowRect(rectClient);\r
+       ScreenToClient(&rectClient);\r
+\r
+       rectClient.left = rectClient.right - GetSystemMetrics(SM_CYVSCROLL);\r
+       rectClient.top = rectClient.bottom - GetSystemMetrics(SM_CXVSCROLL);\r
+\r
+\r
+       GetCursorPos(&ptCursor);\r
+       ScreenToClient(&ptCursor);\r
+\r
+       if(rectClient.PtInRect(ptCursor)) // Vergrößerungs-Cursor\r
+       {\r
+               return CWnd::OnSetCursor(pWnd, nHitTest, message);\r
+       }\r
+\r
+       ::SetCursor(AfxGetApp()->LoadStandardCursor(IDC_ARROW));\r
+       return TRUE;            \r
+}\r
+\r
+/*********************************************************************/\r
+\r
+void CACListWnd::InvalidateAndScroll()\r
+{\r
+       m_VertBar.SetScrollPos(m_lTopIndex,true);\r
+       Invalidate();\r
+       DoPaintMessageLoop();\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+bool CACListWnd::EnsureVisible(int item, bool m_bWait)\r
+{\r
+       if(item > m_lTopIndex && item < m_lTopIndex + m_VisibleItems)\r
+               return false; // ist visible\r
+\r
+       if(item > m_lTopIndex)  // scroll down\r
+       {\r
+               long m_len = item;\r
+               for(int i = m_lTopIndex; i < m_len; i++)\r
+               {\r
+                       if(i >= m_lCount-m_VisibleItems)\r
+                               break;\r
+                       if(i >= m_lCount-m_VisibleItems || i + m_VisibleItems > item)\r
+                       {\r
+                               break;\r
+                       }\r
+\r
+                       m_lTopIndex++;\r
+\r
+                       if(m_bWait)\r
+                       {\r
+                               InvalidateAndScroll();\r
+                               Sleep(10);\r
+                               DoPaintMessageLoop();\r
+                       }\r
+               }\r
+               InvalidateAndScroll();\r
+               return true;\r
+       }\r
+\r
+       if(item < m_lTopIndex)  // scroll up\r
+       {\r
+               while(item < m_lTopIndex)\r
+               {\r
+                       if(m_lTopIndex > 0)\r
+                               m_lTopIndex--;\r
+                       else\r
+                       {\r
+                               break;\r
+                       }\r
+\r
+                       if(m_bWait)\r
+                       {\r
+                               InvalidateAndScroll();\r
+                               Sleep(10);\r
+                               DoPaintMessageLoop();\r
+                       }\r
+               }\r
+\r
+               InvalidateAndScroll();\r
+               return true;\r
+       }\r
+\r
+       return false;\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+bool CACListWnd::SelectItem(int item)\r
+{\r
+       if(item > m_lCount)\r
+               return false;\r
+\r
+       if(item == -1)\r
+       {\r
+               EnsureVisible(m_lSelItem,false);\r
+               Invalidate();\r
+               return false;\r
+       }\r
+\r
+       m_lSelItem = item;\r
+\r
+       if(!EnsureVisible(item,true))\r
+               Invalidate();\r
+\r
+       return true;\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+int CACListWnd::FindStringExact( int nStartAfter, LPCTSTR lpszString )\r
+{\r
+       if(nStartAfter > m_SearchList.GetSize())\r
+               return -1;\r
+\r
+       for(int i = nStartAfter+1; i < m_SearchList.GetSize(); i++)\r
+               if(m_SearchList.GetAt(i).Compare(lpszString) == 0)\r
+                       return i;\r
+       return -1;\r
+}\r
+\r
+/*********************************************************************/\r
+/*\r
+** Vers. 1.1\r
+* NEW: m_bDisplayOnly\r
+*/\r
+int CACListWnd::FindString(int nStartAfter, LPCTSTR lpszString, bool m_bDisplayOnly)\r
+{\r
+       long m_AktCount = m_DisplayList.GetSize();\r
+\r
+       if(!m_bDisplayOnly)\r
+       {\r
+               CString m_Str1,m_Str2 = lpszString;\r
+               if(!m_pEditParent)\r
+               {\r
+                       ShowWindow(false);\r
+                       return -1;\r
+               }\r
+\r
+               if(nStartAfter > m_SearchList.GetSize())\r
+               {\r
+                       ShowWindow(false);\r
+                       return -1;\r
+               }\r
+\r
+               if(m_Str2.IsEmpty())\r
+               {\r
+                       ShowWindow(false);\r
+                       return -1;\r
+               }\r
+\r
+               m_DisplayList.RemoveAll();\r
+\r
+               m_Str2.MakeUpper();\r
+\r
+               for(int i = nStartAfter+1; i < m_SearchList.GetSize(); i++)\r
+               {\r
+                       if(m_PrefixChar)\r
+                               m_Str1 = m_PrefixChar;\r
+                       else\r
+                               m_Str1 = _T("");\r
+\r
+                       m_Str1 += m_SearchList.GetAt(i);\r
+\r
+                       m_Str1.MakeUpper();\r
+\r
+                       if(m_lMode & _MODE_FIND_ALL_)\r
+                       {\r
+                               if(m_Str1.Find(m_Str2) >= 0)\r
+                               {\r
+                                       m_DisplayList.Add(m_SearchList.GetAt(i));\r
+                               }\r
+                       }\r
+                       else  // _MODE_FIND_EXACT_\r
+                       {\r
+                               if(m_Str1.Find(m_Str2) == 0)\r
+                               {\r
+                                       m_DisplayList.Add(m_SearchList.GetAt(i));\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+       m_lCount = m_DisplayList.GetSize();\r
+\r
+       if(m_lCount)\r
+       {\r
+               CRect rcWnd;\r
+               int iHeight,iWight;\r
+\r
+               m_pEditParent->GetWindowRect(rcWnd);\r
+\r
+               SetScroller();\r
+               SetProp();\r
+\r
+               ShowWindow(true);\r
+               Invalidate();\r
+\r
+               iHeight = m_lCount*m_ItemHeight+(GetSystemMetrics(SM_CYBORDER)*2);\r
+\r
+               if(m_lCount > _MAX_ENTRYS_)\r
+                       iHeight = _MAX_ENTRYS_*m_ItemHeight+(GetSystemMetrics(SM_CYBORDER)*2);\r
+\r
+               if(!m_LastSize.IsRectEmpty())\r
+               {\r
+                       iWight = m_LastSize.Width(); \r
+                       iHeight = m_LastSize.Height(); \r
+                       rcWnd.top += rcWnd.Height();\r
+                       rcWnd.right = rcWnd.left+iWight;\r
+                       rcWnd.bottom = rcWnd.top+iHeight;\r
+\r
+                       SetWindowPos(&CWnd::wndTopMost, rcWnd.left,\r
+                               rcWnd.top,\r
+                               rcWnd.Width(), \r
+                               rcWnd.Height(), 0);\r
+               }\r
+               else\r
+               {\r
+                       SetWindowPos(&CWnd::wndTopMost, rcWnd.left,\r
+                               rcWnd.top + rcWnd.Height(), \r
+                               rcWnd.Width(), \r
+                               iHeight, 0);\r
+               }\r
+\r
+               if(m_AktCount != m_DisplayList.GetSize())\r
+                       m_lSelItem = -1;\r
+\r
+               SortList(m_DisplayList);\r
+       }\r
+       else\r
+       {\r
+               ShowWindow(false);\r
+       }\r
+\r
+       return 1;       \r
+}\r
+\r
+/*********************************************************************/\r
+\r
+int CACListWnd::SelectString(LPCTSTR lpszString )\r
+{\r
+       int item = FindString(-1, lpszString);\r
+       SelectItem(item);\r
+       return item;\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+bool CACListWnd::GetText(int item, CString& m_Text)\r
+{\r
+       if(item < 0 || item > m_SearchList.GetSize())\r
+               return false;\r
+       m_Text = m_SearchList.GetAt(item);\r
+       return true;\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+void CACListWnd::OnShowWindow(BOOL bShow, UINT nStatus) \r
+{\r
+       if(bShow)\r
+       {\r
+               m_nIDTimer =  SetTimer( IDTimerInstall, 200, NULL);\r
+               m_pEditParent->GetParent()->GetWindowRect(m_ParentRect);\r
+       }\r
+       else\r
+       {\r
+               if(m_nIDTimer)\r
+                       KillTimer(IDTimerInstall);\r
+               m_nIDTimer = 0;\r
+               m_lSelItem = -1;\r
+               m_lTopIndex = 0;\r
+       }\r
+\r
+       CWnd::OnShowWindow(bShow, nStatus);\r
+       ::SetCursor(AfxGetApp()->LoadStandardCursor(IDC_ARROW));\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+void CACListWnd::OnNcLButtonDown(UINT nHitTest, CPoint point) \r
+{\r
+\r
+       if(OnNcHitTest(point) == HTBOTTOMRIGHT)\r
+               GetWindowRect(m_LastSize);      \r
+       CWnd::OnNcLButtonDown(nHitTest, point);\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+CString CACListWnd::GetString()\r
+{\r
+       int i = m_DisplayList.GetSize();\r
+\r
+       if(!i)\r
+               return _T("");\r
+       if(i <= m_lSelItem || m_lSelItem == -1)\r
+               i = 0;\r
+       else\r
+               i = m_lSelItem;\r
+\r
+       return m_DisplayList.GetAt(i);\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+void CACListWnd::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) \r
+{\r
+       CWnd::OnVScroll(nSBCode, nPos, pScrollBar);\r
+       long m_oldlTopIndex = m_lTopIndex;\r
+\r
+       switch(nSBCode)\r
+       {\r
+       case SB_ENDSCROLL:\r
+               break;\r
+\r
+       case SB_PAGEUP:\r
+               m_lTopIndex -= m_VisibleItems;\r
+               if(m_lTopIndex < 0)\r
+                       m_lTopIndex = 0;\r
+               break;\r
+\r
+       case SB_PAGEDOWN:\r
+               m_lTopIndex += m_VisibleItems;\r
+               if(m_lTopIndex >= m_lCount-m_VisibleItems)\r
+                       m_lTopIndex = m_lCount-m_VisibleItems;\r
+               break;\r
+\r
+       case SB_LINEUP:\r
+               m_lTopIndex--;\r
+               if(m_lTopIndex < 0)\r
+                       m_lTopIndex = 0;\r
+               break;\r
+\r
+       case SB_LINEDOWN:\r
+               m_lTopIndex++;\r
+               if(m_lTopIndex >= m_lCount-m_VisibleItems)\r
+                       m_lTopIndex = m_lCount-m_VisibleItems;\r
+               break;\r
+\r
+       case SB_THUMBTRACK:\r
+               m_lTopIndex = nPos;\r
+               break;\r
+       }\r
+\r
+       m_VertBar.SetScrollPos(m_lTopIndex,true);\r
+\r
+       if(m_oldlTopIndex != m_lTopIndex)\r
+               Invalidate();\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+CString CACListWnd::GetNextString(int nChar)\r
+{\r
+       switch(nChar)\r
+       {\r
+       case VK_DOWN:\r
+               m_lSelItem++;\r
+               break;\r
+\r
+       case VK_UP:\r
+               m_lSelItem--;\r
+               break;\r
+\r
+       case VK_PRIOR:\r
+               m_lSelItem -= m_VisibleItems;\r
+               if(m_lSelItem < 0)\r
+                       m_lSelItem = 0;\r
+               break;\r
+\r
+       case VK_NEXT:\r
+               m_lSelItem += m_VisibleItems;\r
+               if(m_lSelItem >= m_lCount-1)\r
+                       m_lSelItem = m_lCount-1;\r
+               break;\r
+\r
+       case VK_HOME:\r
+               m_lSelItem = 0;\r
+               break;\r
+\r
+       case VK_END:\r
+               m_lSelItem = m_lCount-1;\r
+               break;\r
+       }\r
+\r
+       if(m_lSelItem < 0)\r
+               m_lSelItem = m_lCount-1;\r
+\r
+       if(m_lSelItem >= m_lCount)\r
+               m_lSelItem = 0;\r
+\r
+       if(EnsureVisible(m_lSelItem,(m_lCount > 50) ? false : true))\r
+               InvalidateAndScroll();\r
+\r
+       return GetString();\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+void CACListWnd::OnMouseMove(UINT nFlags, CPoint point) \r
+{\r
+       CWnd::OnMouseMove(nFlags, point);\r
+       int sel = HitTest(point);\r
+       if(sel >= 0)\r
+       {\r
+               Invalidate();\r
+       }\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+void CACListWnd::OnTimer(UINT nIDEvent) \r
+{\r
+       CWnd::OnTimer(nIDEvent);\r
+\r
+       CRect m_ParentRect1;\r
+       m_pEditParent->GetParent()->GetWindowRect(m_ParentRect1);\r
+       if(!m_ParentRect1.EqualRect(m_ParentRect))\r
+               ShowWindow(false);\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+void CACListWnd::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) \r
+{\r
+       if(GetSafeHwnd())\r
+       {\r
+               // Vers. 1.2\r
+               long m_lMinY1 = GetSystemMetrics(SM_CYHSCROLL)*2 + GetSystemMetrics(SM_CYSIZEFRAME) + GetSystemMetrics(SM_CXHTHUMB),\r
+                       m_lMinY2 = m_lCount * m_ItemHeight + (GetSystemMetrics(SM_CYBORDER)*2);\r
+\r
+               if(m_VisibleItems > m_lCount-1 &&  m_lMinY2 < m_lMinY1)\r
+                       lpMMI->ptMinTrackSize.y = m_lMinY2;\r
+               else\r
+                       lpMMI->ptMinTrackSize.y = m_lMinY1;\r
+               //---------\r
+\r
+               lpMMI->ptMinTrackSize.x = GetSystemMetrics(SM_CXHSCROLL)*4;\r
+\r
+\r
+               // Vers. 1.2\r
+               if(m_pEditParent != NULL) \r
+               {\r
+                       RECT rc;\r
+                       m_pEditParent->GetWindowRect (&rc);\r
+                       lpMMI->ptMinTrackSize.x = rc.right - rc.left;\r
+               }\r
+       }\r
+       else    \r
+               CWnd::OnGetMinMaxInfo(lpMMI);\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+int CACListWnd::CompareString(const void* p1, const void* p2)\r
+{\r
+       return _stricmp( * ( char** ) p1, * ( char** ) p2 );\r
+}\r
+\r
+/*********************************************************************/\r
+\r
+void CACListWnd::SortList(CStringArray& m_List)\r
+{\r
+       int m_Count = m_List.GetSize();\r
+       int i;\r
+\r
+       if (m_Count > 1)\r
+       {\r
+               CStringArray m_Liste1;\r
+               m_Liste1.Copy(m_List);\r
+\r
+               LPCTSTR* ppSortArray = new LPCTSTR[m_Count+1];\r
+\r
+\r
+               for(i=0; i < m_Count; i++)\r
+               {\r
+                       ppSortArray[i] = (LPCTSTR)m_Liste1.GetAt(i);\r
+               }\r
+\r
+               m_List.RemoveAll();\r
+\r
+               qsort(ppSortArray, m_Count, sizeof(LPCTSTR), CompareString);\r
+\r
+               for(i=0; i < m_Count; i++)\r
+               {\r
+                       m_List.Add((LPCTSTR) ppSortArray[i]);\r
+               }\r
+               m_Liste1.RemoveAll();\r
+               delete [] ppSortArray;\r
+       }\r
+}\r
+\r
+/*********************************************************************/\r
+/*\r
+** Vers. 1.1\r
+** NEW: CopyList()\r
+*/\r
+void CACListWnd::CopyList()\r
+{\r
+       m_DisplayList.Copy(m_SearchList);\r
+       m_lCount = m_DisplayList.GetSize();\r
+       if(m_lCount)\r
+               FindString(0,_T(""),true);\r
+}\r
+\r
+/*********************************************************************/\r
+\r
diff --git a/src/Utils/ACListWnd.h b/src/Utils/ACListWnd.h
new file mode 100644 (file)
index 0000000..6f77924
--- /dev/null
@@ -0,0 +1,110 @@
+#if !defined(AFX_ACWND_H__5CED9BF8_C1CB_4A74_B022_ABA25680CC42__INCLUDED_)\r
+#define AFX_ACWND_H__5CED9BF8_C1CB_4A74_B022_ABA25680CC42__INCLUDED_\r
+\r
+#if _MSC_VER > 1000\r
+#pragma once\r
+#endif // _MSC_VER > 1000\r
+// ACWnd.h : Header-Datei\r
+//\r
+\r
+/*********************************************************************\r
+*\r
+* CACListWnd\r
+* Copyright (c) 200 by Andreas Kapust\r
+* All rights reserved.\r
+* info@akinstaller.de\r
+*\r
+*********************************************************************/\r
+\r
+#include <afxtempl.h>          // CArray\r
+#define ENAC_UPDATE        WM_USER + 1200 \r
+/////////////////////////////////////////////////////////////////////////////\r
+// Fenster CACListWnd \r
+#define IDTimerInstall 10\r
+class CACListWnd : public CWnd\r
+{\r
+       // Konstruktion\r
+public:\r
+       CACListWnd();\r
+       void Init(CWnd *pWnd);\r
+       bool EnsureVisible(int item,bool m_bWait);\r
+       bool SelectItem(int item);\r
+       int FindString(int nStartAfter, LPCTSTR lpszString, bool m_bDisplayOnly = false);\r
+       int FindStringExact( int nIndexStart, LPCTSTR lpszFind );\r
+       int SelectString(LPCTSTR lpszString );\r
+       bool GetText(int item, CString& m_Text);\r
+       void AddSearchString(LPCTSTR lpszString){m_SearchList.Add(lpszString);}\r
+       void RemoveAll(){m_SearchList.RemoveAll(); m_DisplayList.RemoveAll();}\r
+       CString GetString();\r
+       CString GetNextString(int m_iChar);\r
+\r
+       void CopyList();\r
+       void SortSearchList(){SortList(m_SearchList);}\r
+       // Attribute\r
+public:\r
+       CListCtrl m_List;\r
+       CString m_DisplayStr;\r
+       TCHAR m_PrefixChar;\r
+       long m_lMode;\r
+       // Operationen\r
+public:\r
+       CStringArray m_SearchList;\r
+       // Überschreibungen\r
+       // Vom Klassen-Assistenten generierte virtuelle Funktionsüberschreibungen\r
+       //{{AFX_VIRTUAL(CACListWnd)\r
+       //}}AFX_VIRTUAL\r
+\r
+       // Implementierung\r
+public:\r
+       virtual ~CACListWnd();\r
+       void DrawItem(CDC* pDC,long m_lItem,long width);\r
+\r
+       // Generierte Nachrichtenzuordnungsfunktionen\r
+protected:\r
+       //{{AFX_MSG(CACListWnd)\r
+       afx_msg void OnPaint();\r
+       afx_msg void OnSize(UINT nType, int cx, int cy);\r
+       afx_msg BOOL OnEraseBkgnd(CDC* pDC);\r
+       afx_msg void OnNcPaint();\r
+       afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);\r
+       afx_msg void OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS FAR* lpncsp);\r
+       afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);\r
+       afx_msg void OnActivateApp(BOOL bActive, DWORD dwThreadID);\r
+       afx_msg LRESULT OnNcHitTest(CPoint point);\r
+       afx_msg void OnLButtonDown(UINT nFlags, CPoint point);\r
+       afx_msg void OnRButtonDown(UINT nFlags, CPoint point);\r
+       afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);\r
+       afx_msg void OnShowWindow(BOOL bShow, UINT nStatus);\r
+       afx_msg void OnNcLButtonDown(UINT nHitTest, CPoint point);\r
+       afx_msg void OnMouseMove(UINT nFlags, CPoint point);\r
+       afx_msg void OnTimer(UINT nIDEvent);\r
+       afx_msg void OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI);\r
+       //}}AFX_MSG\r
+       DECLARE_MESSAGE_MAP()\r
+\r
+       CStringArray m_DisplayList;\r
+       CScrollBar m_VertBar, m_HoriBar;\r
+       CRect m_LastSize, m_ParentRect;\r
+       CFont *pFontDC;\r
+       CFont fontDC, boldFontDC;\r
+       CEdit *m_pEditParent;\r
+       LOGFONT logfont;\r
+\r
+       int m_nIDTimer;\r
+       long m_lTopIndex,m_lCount,m_ItemHeight,m_VisibleItems,m_lSelItem;\r
+\r
+       int HitTest(CPoint point);\r
+       void SetScroller();\r
+       void SetProp();\r
+       long ScrollBarWidth();\r
+       void InvalidateAndScroll();\r
+       void SortList(CStringArray& m_List);\r
+       static int CompareString(const void* p1, const void* p2);\r
+};\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+\r
+//{{AFX_INSERT_LOCATION}}\r
+// Microsoft Visual C++ fügt unmittelbar vor der vorhergehenden Zeile zusätzliche Deklarationen ein.\r
+\r
+#endif // AFX_ACWND_H__5CED9BF8_C1CB_4A74_B022_ABA25680CC42__INCLUDED_\r
index 6262ffc..789e48b 100644 (file)
                        UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"\r
                        >\r
                        <File\r
+                               RelativePath=".\ACEdit.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\ACEdit.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\ACListWnd.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\ACListWnd.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
                                RelativePath=".\BugTraqAssociations.cpp"\r
                                >\r
                        </File>\r