OSDN Git Service

Get Change File List at Sync Dialog
[tortoisegit/TortoiseGitJp.git] / src / Git / GitStatusListCtrl.cpp
index f6acf62..bdd1131 100644 (file)
@@ -1252,6 +1252,9 @@ void CGitStatusListCtrl::Show(DWORD dwShow, DWORD dwCheck /*=0*/, bool bShowFold
 \r
 void CGitStatusListCtrl::Show(DWORD dwShow, const CTGitPathList& checkedList, bool bShowFolders /* = true */)\r
 {\r
+       DeleteAllItems();\r
+       for(int i=0;i<checkedList.GetCount();i++)\r
+               this->AddEntry((CTGitPath *)&checkedList[i],0,i);\r
        return ;\r
 #if 0\r
 \r
@@ -2475,6 +2478,11 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point)
                                                        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
@@ -2717,6 +2725,67 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point)
                                }\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
@@ -5607,6 +5676,7 @@ int CGitStatusListCtrl::RevertSelectedItemToVersion()
 \r
        out.Format(_T("%d files revert to %s"),count,m_CurrentVersion.Left(6));\r
        CMessageBox::Show(NULL,out,_T("TortoiseGit"),MB_OK);\r
+       return 0;\r
 }\r
 \r
 void CGitStatusListCtrl::OpenFile(CTGitPath*filepath,int mode)\r