popup.AppendMenuIcon(IDSVNLC_ADD, IDS_STATUSLIST_CONTEXT_ADD, IDI_ADD);\r
}\r
}\r
+\r
+ if (m_dwContextMenus & SVNSLC_POPDELETE)\r
+ {\r
+ popup.AppendMenuIcon(IDSVNLC_DELETE, IDS_MENUREMOVE, IDI_DELETE);\r
+ }\r
//}\r
//if ( (wcStatus == git_wc_status_unversioned) || (wcStatus == git_wc_status_deleted) )\r
//{\r
}\r
break;\r
\r
+ case IDSVNLC_DELETE:\r
+ {\r
+ //Collect paths\r
+ std::vector<int> selectIndex;\r
+\r
+ POSITION pos = GetFirstSelectedItemPosition();\r
+ int index;\r
+ while ((index = GetNextSelectedItem(pos)) >= 0)\r
+ {\r
+ selectIndex.push_back(index);\r
+ }\r
+\r
+ //Create file-list ('\0' separated) for SHFileOperation\r
+ CString filelist;\r
+ for(int i=0;i<selectIndex.size();i++)\r
+ {\r
+ index=selectIndex[i];\r
+\r
+ CTGitPath * path=(CTGitPath*)GetItemData(index);\r
+ ASSERT(path);\r
+ if(path == NULL)\r
+ continue;\r
+\r
+ filelist += path->GetWinPathString();\r
+ filelist += _T("|");\r
+ }\r
+ filelist += _T("|");\r
+ int len = filelist.GetLength();\r
+ TCHAR * buf = new TCHAR[len+2];\r
+ _tcscpy_s(buf, len+2, filelist);\r
+ for (int i=0; i<len; ++i)\r
+ if (buf[i] == '|')\r
+ buf[i] = 0;\r
+ SHFILEOPSTRUCT fileop;\r
+ fileop.hwnd = this->m_hWnd;\r
+ fileop.wFunc = FO_DELETE;\r
+ fileop.pFrom = buf;\r
+ fileop.pTo = NULL;\r
+ fileop.fFlags = FOF_NO_CONNECTED_ELEMENTS | ((GetAsyncKeyState(VK_SHIFT) & 0x8000) ? 0 : FOF_ALLOWUNDO);\r
+ fileop.lpszProgressTitle = _T("deleting file");\r
+ int result = SHFileOperation(&fileop);\r
+ delete [] buf;\r
+\r
+ if ( (result==0) && (!fileop.fAnyOperationsAborted) )\r
+ {\r
+ SetRedraw(FALSE);\r
+ POSITION pos = NULL;\r
+ while ((pos = GetFirstSelectedItemPosition()) != 0)\r
+ {\r
+ int index = GetNextSelectedItem(pos);\r
+ if (GetCheck(index))\r
+ m_nSelected--;\r
+ m_nTotal--;\r
+\r
+ RemoveListEntry(index);\r
+ }\r
+ SetRedraw(TRUE);\r
+ }\r
+ }\r
+ break;\r
+\r
case IDSVNLC_BLAME:\r
{\r
CString sCmd;\r