Index: src/ch/FolderDialog.cpp =================================================================== diff -u -rc435ab507c8b8280264188b49e9ada56d46c0261 -r8068e0c351055554340ac9755d1bc846893bf2b8 --- src/ch/FolderDialog.cpp (.../FolderDialog.cpp) (revision c435ab507c8b8280264188b49e9ada56d46c0261) +++ src/ch/FolderDialog.cpp (.../FolderDialog.cpp) (revision 8068e0c351055554340ac9755d1bc846893bf2b8) @@ -23,8 +23,11 @@ #include "memdc.h" #include "Theme Helpers.h" #include "shlobj.h" -#include "..\Common\FileSupport.h" #include "StringHelpers.h" +#include "FileSupport.h" +#include "TRecentPathsTools.h" +#include "resource.h" +#include "shortcuts.h" #ifdef _DEBUG #define new DEBUG_NEW @@ -60,7 +63,7 @@ { case WM_ERASEBKGND: return (LRESULT)0; - break; + case WM_PAINT: CWnd* pWnd=CWnd::FromHandle(hwnd); CPaintDC dc(pWnd); @@ -94,7 +97,7 @@ CallWindowProc(pfWndProc, hwnd, WM_PAINT, (WPARAM)memdc.GetSafeHdc(), 0); return 0; - break; + } return CallWindowProc(pfWndProc, hwnd, uMsg, wParam, lParam); @@ -119,7 +122,7 @@ LRESULT CALLBACK CustomWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { int iID=GetDlgCtrlID(hwnd); - WNDPROC pfOld=NULL; + WNDPROC pfOld=nullptr; switch(iID) { case IDC_TOGGLE_BUTTON: @@ -146,13 +149,11 @@ ///////////////////////////////////////////////////////////////////////////// // CFolderDialog dialog -CFolderDialog::CFolderDialog(CWnd* /*pParent*/ /*=NULL*/) +CFolderDialog::CFolderDialog(CWnd* /*pParent*/ /*=nullptr*/) :ictranslate::CLanguageDialog() { - //{{AFX_DATA_INIT(CFolderDialog) - //}}AFX_DATA_INIT - m_hImages=NULL; - m_hLargeImages=NULL; + m_hImages=nullptr; + m_hLargeImages=nullptr; m_bIgnoreUpdate=false; m_bIgnoreTreeRefresh=false; } @@ -427,7 +428,7 @@ for(size_t stIndex = 0; stIndex < m_bdData.cvRecent.size(); ++stIndex) { cbi.iItem = stIndex; - cbi.pszText = m_bdData.cvRecent.at(stIndex); + cbi.pszText = const_cast((PCTSTR)m_bdData.cvRecent.at(stIndex)); sfi.iIcon = -1; SHGetFileInfo(m_bdData.cvRecent.at(stIndex), FILE_ATTRIBUTE_NORMAL, &sfi, sizeof(SHFILEINFO), SHGFI_SYSICONINDEX | SHGFI_SMALLICON); @@ -455,7 +456,7 @@ CShortcut sc; for(size_t stIndex = 0; stIndex < m_bdData.cvShortcuts.size(); ++stIndex) { - sc = CString(m_bdData.cvShortcuts.at(stIndex)); + sc = CShortcut(m_bdData.cvShortcuts.at(stIndex)); sfi.iIcon = -1; SHGetFileInfo(sc.m_strPath, FILE_ATTRIBUTE_NORMAL, &sfi, sizeof(sfi), SHGFI_SYSICONINDEX | SHGFI_LARGEICON); m_ctlShortcuts.InsertItem(boost::numeric_cast(stIndex), sc.m_strName, sfi.iIcon); @@ -545,21 +546,15 @@ if (m_strPath.Right(1) == _T('\\') || m_strPath.Right(1) == _T('/')) m_strPath=m_strPath.Left(m_strPath.GetLength()-1); - // does it exist as a folder ? -/* CFileFind fnd; - BOOL bExist=fnd.FindFile(m_strPath+_T("\\*")); - fnd.Close();*/ -// WIN32_FIND_DATA wfd; -// HANDLE hFind; - -// if (!bExist) if ( GetFileAttributes(m_strPath) == INVALID_FILE_ATTRIBUTES) { MsgBox(IDS_BDPATHDOESNTEXIST_STRING, MB_OK | MB_ICONERROR); return; } - m_bdData.cvRecent.insert(m_bdData.cvRecent.begin(), (const PTSTR)(LPCTSTR)(m_strPath+_T('\\')), true); + // add to the recent paths + CString strNewPath = m_strPath + _T('\\'); + TRecentPathsTools::AddNewPath(m_bdData.cvRecent, strNewPath); CRect rcDlg; GetWindowRect(&rcDlg); @@ -585,7 +580,7 @@ { // currently selected item HTREEITEM hItem=m_ctlTree.GetSelectedItem(); - if (hItem == NULL) + if (hItem == nullptr) return; // insert child item @@ -630,12 +625,14 @@ || shdi.dwDescriptionId == SHDID_COMPUTER_DRIVE525 ) ) bSkipFreeSpace=true; + const size_t BufferSize = 2048; + std::unique_ptr upBuffer(new wchar_t[ BufferSize ]); // some about network bool bNet; CString strData; - NETRESOURCE* pnet=(NETRESOURCE*)m_szBuffer; - if ( (bNet=m_ctlTree.GetItemShellData(pit->hItem, SHGDFIL_NETRESOURCE, pnet, 2048)) == true) + NETRESOURCE* pnet=(NETRESOURCE*)upBuffer.get(); + if ( (bNet=m_ctlTree.GetItemShellData(pit->hItem, SHGDFIL_NETRESOURCE, pnet, BufferSize)) == true) { if (pnet->lpRemoteName && _tcscmp(pnet->lpRemoteName, _T("")) != 0) m_strTip+=GetResManager().LoadString(IDS_BDREMOTENAME_STRING)+CString(pnet->lpRemoteName)+_T("\n"); @@ -651,7 +648,6 @@ // try to get path CString strPath, strMask; - TCHAR szSizeFree[32], szSizeTotal[32]; bool bPath; if ( (bPath=m_ctlTree.GetPath(pit->hItem, strPath.GetBuffer(_MAX_PATH))) == true ) { @@ -662,11 +658,11 @@ if (!bSkipFreeSpace) { // get disk free space - ull_t ullFree, ullTotal; + unsigned long long ullFree, ullTotal; if (GetDynamicFreeSpace(strPath, &ullFree, &ullTotal)) { - m_strTip+=GetResManager().LoadString(IDS_BDFREESPACE_STRING)+CString(GetSizeString(ullFree, szSizeFree, 32, false))+_T("\n"); - m_strTip+=GetResManager().LoadString(IDS_BDCAPACITY_STRING)+CString(GetSizeString(ullTotal, szSizeTotal, 32, false))+_T("\n"); + m_strTip += GetResManager().LoadString(IDS_BDFREESPACE_STRING) + GetSizeString(ullFree, false) + _T("\n"); + m_strTip += GetResManager().LoadString(IDS_BDCAPACITY_STRING) + GetSizeString(ullTotal, false) + _T("\n"); } } } @@ -697,15 +693,15 @@ if (pit->iItem < 0 || pit->iItem >= boost::numeric_cast(m_bdData.cvShortcuts.size())) return; // out of range - CShortcut sc=CString(m_bdData.cvShortcuts.at(pit->iItem)); + CShortcut sc=CShortcut(m_bdData.cvShortcuts.at(pit->iItem)); m_strTip=sc.m_strName+_T("\r\n")+CString(GetResManager().LoadString(IDS_BDPATH2_STRING))+sc.m_strPath; // get disk free space - ull_t ullFree, ullTotal; + unsigned long long ullFree, ullTotal; if (GetDynamicFreeSpace(sc.m_strPath, &ullFree, &ullTotal)) { - m_strTip+=CString(_T("\r\n"))+GetResManager().LoadString(IDS_BDFREESPACE_STRING)+CString(GetSizeString(ullFree, m_szBuffer, 2048, false))+_T("\n"); - m_strTip+=GetResManager().LoadString(IDS_BDCAPACITY_STRING)+CString(GetSizeString(ullTotal, m_szBuffer, 2048, false)); + m_strTip+=CString(_T("\r\n"))+GetResManager().LoadString(IDS_BDFREESPACE_STRING) + GetSizeString(ullFree, false) + _T("\n"); + m_strTip+=GetResManager().LoadString(IDS_BDCAPACITY_STRING) + GetSizeString(ullTotal, false); } pit->pszText=(LPTSTR)(LPCTSTR)m_strTip; @@ -735,11 +731,14 @@ if (m_bIgnoreTreeRefresh) return; + const size_t BufferSize = 32768; + std::unique_ptr upBuffer(new wchar_t[ BufferSize ]); + COMBOBOXEXITEM cbi; - cbi.mask=CBEIF_TEXT; - cbi.iItem=-1; - cbi.pszText=m_szBuffer; - cbi.cchTextMax=_MAX_PATH; + cbi.mask = CBEIF_TEXT; + cbi.iItem = -1; + cbi.pszText = upBuffer.get(); + cbi.cchTextMax = BufferSize; if (!m_ctlPath.GetItem(&cbi)) return; @@ -768,27 +767,29 @@ COMBOBOXEXITEM cbi; - cbi.mask=CBEIF_TEXT | CBEIF_IMAGE; - cbi.iItem=-1; - _tcscpy(m_szBuffer, lpszPath); - cbi.pszText=m_szBuffer; - SHGetFileInfo(cbi.pszText, FILE_ATTRIBUTE_NORMAL, &sfi, sizeof(sfi), SHGFI_SMALLICON | SHGFI_SYSICONINDEX); - cbi.iImage=sfi.iIcon; - m_bIgnoreTreeRefresh=true; + cbi.mask = CBEIF_TEXT | CBEIF_IMAGE; + cbi.iItem = -1; + cbi.pszText = (LPTSTR)lpszPath; + SHGetFileInfo(lpszPath, FILE_ATTRIBUTE_NORMAL, &sfi, sizeof(sfi), SHGFI_SMALLICON | SHGFI_SYSICONINDEX); + cbi.iImage = sfi.iIcon; + m_bIgnoreTreeRefresh = true; m_ctlPath.SetItem(&cbi); - m_bIgnoreTreeRefresh=false; + m_bIgnoreTreeRefresh = false; } ////////////////////////////////////////////////////////////////////////// // updates icon in comboex void CFolderDialog::UpdateComboIcon() { + const size_t BufferSize = 32768; + std::unique_ptr upBuffer(new wchar_t[ BufferSize ]); + // get text from combo COMBOBOXEXITEM cbi; - cbi.mask=CBEIF_TEXT; - cbi.iItem=m_ctlPath.GetCurSel()/*-1*/; - cbi.pszText=m_szBuffer; - cbi.cchTextMax=_MAX_PATH; + cbi.mask = CBEIF_TEXT; + cbi.iItem = m_ctlPath.GetCurSel()/*-1*/; + cbi.pszText = upBuffer.get(); + cbi.cchTextMax = BufferSize; if (!m_ctlPath.GetItem(&cbi)) return; @@ -805,9 +806,9 @@ cbi.mask |= CBEIF_IMAGE; cbi.iItem=-1; - CString str=(LPCTSTR)m_szBuffer; - if (str.Left(2) != _T("\\\\") || str.Find(_T('\\'), 2) != -1) - SHGetFileInfo(cbi.pszText, FILE_ATTRIBUTE_NORMAL, &sfi, sizeof(sfi), SHGFI_SMALLICON | SHGFI_SYSICONINDEX); + CString str = cbi.pszText; + if(str.Left(2) != _T("\\\\") || str.Find(_T('\\'), 2) != -1) + SHGetFileInfo(str, FILE_ATTRIBUTE_NORMAL, &sfi, sizeof(sfi), SHGFI_SMALLICON | SHGFI_SYSICONINDEX); cbi.iImage=sfi.iIcon; @@ -832,7 +833,7 @@ // current selection if (plv->iItem >= 0 && plv->iItem < boost::numeric_cast(m_bdData.cvShortcuts.size())) { - CShortcut sc=CString(m_bdData.cvShortcuts.at(plv->iItem)); + CShortcut sc=CShortcut(m_bdData.cvShortcuts.at(plv->iItem)); m_ctlTree.SetPath(sc.m_strPath); SetComboPath(sc.m_strPath); } @@ -844,12 +845,15 @@ // adding shortcut void CFolderDialog::OnAddShortcut() { + const size_t BufferSize = 32768; + std::unique_ptr upBuffer(new wchar_t[ BufferSize ]); + // get current text COMBOBOXEXITEM cbi; - cbi.mask=CBEIF_TEXT; - cbi.iItem=m_ctlPath.GetCurSel()/*-1*/; - cbi.pszText=m_szBuffer; - cbi.cchTextMax=_MAX_PATH; + cbi.mask = CBEIF_TEXT; + cbi.iItem = m_ctlPath.GetCurSel()/*-1*/; + cbi.pszText = upBuffer.get(); + cbi.cchTextMax = _MAX_PATH; if (!m_ctlPath.GetItem(&cbi)) { @@ -865,14 +869,14 @@ SHGetFileInfo(sc.m_strPath, FILE_ATTRIBUTE_NORMAL, &sfi, sizeof(sfi), SHGFI_SYSICONINDEX | SHGFI_LARGEICON); // add to an array and to shortcuts list - m_bdData.cvShortcuts.push_back((const PTSTR)(LPCTSTR)(CString)(sc), true); + m_bdData.cvShortcuts.push_back(sc); int iIndex = boost::numeric_cast(m_bdData.cvShortcuts.size() - 1); m_ctlShortcuts.InsertItem(iIndex, sc.m_strName, sfi.iIcon); m_ctlShortcuts.SetItem(iIndex, 1, LVIF_TEXT, sc.m_strPath, 0, 0, 0, 0); // edit item m_ctlShortcuts.SetFocus(); - if (m_ctlShortcuts.EditLabel(iIndex) == NULL) + if (m_ctlShortcuts.EditLabel(iIndex) == nullptr) { TRACE("Couldn't edit shortcut list's item label\n"); return; @@ -897,7 +901,7 @@ { int iSel=m_ctlShortcuts.GetNextSelectedItem(pos); m_ctlShortcuts.DeleteItem(iSel); - m_bdData.cvShortcuts.erase(m_bdData.cvShortcuts.begin()+iSel, true); + m_bdData.cvShortcuts.erase(m_bdData.cvShortcuts.begin() + iSel); m_ctlShortcuts.Arrange(LVA_DEFAULT); } @@ -910,20 +914,20 @@ NMLVDISPINFO* pdi = (NMLVDISPINFO*)pNMHDR; // editing has been cancelled - delete item - if (pdi->item.pszText == NULL) + if (pdi->item.pszText == nullptr) { m_ctlShortcuts.DeleteItem(pdi->item.iItem); - m_bdData.cvShortcuts.erase(m_bdData.cvShortcuts.begin()+pdi->item.iItem, true); + m_bdData.cvShortcuts.erase(m_bdData.cvShortcuts.begin() + pdi->item.iItem); *pResult=0; return; } // std editing - success - CShortcut sc=CString(m_bdData.cvShortcuts.at(pdi->item.iItem)); + CShortcut sc=CShortcut(m_bdData.cvShortcuts.at(pdi->item.iItem)); sc.m_strName=pdi->item.pszText; - m_bdData.cvShortcuts.replace(m_bdData.cvShortcuts.begin()+pdi->item.iItem, (const PTSTR)(LPCTSTR)(CString)sc, true, true); + m_bdData.cvShortcuts[pdi->item.iItem] = (CString)sc; *pResult=1; } @@ -950,7 +954,7 @@ } DWORD dwStyle = GetWindowLong(m_ctlShortcuts.GetSafeHwnd(), GWL_STYLE); - + // Only set the window style if the view bits have changed. if ((dwStyle & LVS_TYPEMASK) != dwView) SetWindowLongPtr(m_ctlShortcuts.GetSafeHwnd(), GWL_STYLE, (dwStyle & ~LVS_TYPEMASK) | dwView); @@ -1025,7 +1029,7 @@ // settings const int iMargin=7; // dialog units - const int iTextCount=3; // ilo�� linii textu w staticu + const int iTextCount=3; // count of lines in static // small buttons const int iBmpMargin=1; // margin between button and a bitmap within @@ -1182,7 +1186,7 @@ pWnd->Invalidate(); } - // buttony - ok & cancel + // buttons - ok & cancel rcButton=CRect(iMargin+2*iLargeButtonWidth+3, iMargin+iLargeButtonHeight, iMargin+iLargeButtonWidth+3, iMargin); MapDialogRect(&rcButton); rcButton.left=cx-rcButton.left;