bool SendMailCommand::Execute()\r
{\r
CSendMailDlg dlg;\r
+\r
+ dlg.m_PathList = orgPathList;\r
+ \r
if(dlg.DoModal()==IDOK)\r
{\r
return true;\r
#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
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
\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
#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
\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
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
--- /dev/null
+// 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
--- /dev/null
+#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
--- /dev/null
+// 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
--- /dev/null
+#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
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