//#include "EditPropertiesDlg.h"\r
#include "FileDiffDlg.h"\r
\r
-#if (NTDDI_VERSION < NTDDI_LONGHORN)\r
-\r
-enum LISTITEMSTATES_MINE {\r
- LISS_NORMAL = 1,\r
- LISS_HOT = 2,\r
- LISS_SELECTED = 3,\r
- LISS_DISABLED = 4,\r
- LISS_SELECTEDNOTFOCUS = 5,\r
- LISS_HOTSELECTED = 6,\r
-};\r
-\r
-#define MCS_NOTRAILINGDATES 0x0040\r
-#define MCS_SHORTDAYSOFWEEK 0x0080\r
-#define MCS_NOSELCHANGEONNAV 0x0100\r
-\r
-#define DTM_SETMCSTYLE (DTM_FIRST + 11)\r
-\r
-#endif\r
-\r
-#define ICONITEMBORDER 5\r
\r
const UINT CLogDlg::m_FindDialogMessage = RegisterWindowMessage(FINDMSGSTRING);\r
\r
\r
-enum LogDlgContextMenuCommands\r
-{\r
- // needs to start with 1, since 0 is the return value if *nothing* is clicked on in the context menu\r
- ID_COMPARE = 1,\r
- ID_SAVEAS,\r
- ID_COMPARETWO,\r
- ID_UPDATE,\r
- ID_COPY,\r
- ID_REVERTREV,\r
- ID_MERGEREV,\r
- ID_GNUDIFF1,\r
- ID_GNUDIFF2,\r
- ID_FINDENTRY,\r
- ID_OPEN,\r
- ID_BLAME,\r
- ID_REPOBROWSE,\r
- ID_LOG,\r
- ID_POPPROPS,\r
- ID_EDITAUTHOR,\r
- ID_EDITLOG,\r
- ID_DIFF,\r
- ID_OPENWITH,\r
- ID_COPYCLIPBOARD,\r
- ID_CHECKOUT,\r
- ID_REVERTTOREV,\r
- ID_BLAMECOMPARE,\r
- ID_BLAMETWO,\r
- ID_BLAMEDIFF,\r
- ID_VIEWREV,\r
- ID_VIEWPATHREV,\r
- ID_EXPORT,\r
- ID_COMPAREWITHPREVIOUS,\r
- ID_BLAMEWITHPREVIOUS,\r
- ID_GETMERGELOGS,\r
- ID_REVPROPS\r
-};\r
\r
\r
IMPLEMENT_DYNAMIC(CLogDlg, CResizableStandAloneDialog)\r
InterlockedExchange(&m_bNoDispUpdates, TRUE);\r
m_CurrentFilteredChangedArray.RemoveAll();\r
m_logEntries.ClearAll();\r
- DestroyIcon(m_hModifiedIcon);\r
- DestroyIcon(m_hReplacedIcon);\r
- DestroyIcon(m_hAddedIcon);\r
- DestroyIcon(m_hDeletedIcon);\r
+\r
if ( m_pStoreSelection )\r
{\r
delete m_pStoreSelection;\r
ON_REGISTERED_MESSAGE(m_FindDialogMessage, OnFindDialogMessage) \r
ON_BN_CLICKED(IDC_GETALL, OnBnClickedGetall)\r
ON_NOTIFY(NM_DBLCLK, IDC_LOGMSG, OnNMDblclkChangedFileList)\r
- ON_NOTIFY(NM_DBLCLK, IDC_LOGLIST, OnNMDblclkLoglist)\r
ON_WM_CONTEXTMENU()\r
ON_WM_SETCURSOR()\r
ON_BN_CLICKED(IDHELP, OnBnClickedHelp)\r
ON_NOTIFY(LVN_ITEMCHANGED, IDC_LOGLIST, OnLvnItemchangedLoglist)\r
ON_NOTIFY(EN_LINK, IDC_MSGVIEW, OnEnLinkMsgview)\r
ON_BN_CLICKED(IDC_STATBUTTON, OnBnClickedStatbutton)\r
- ON_NOTIFY(NM_CUSTOMDRAW, IDC_LOGLIST, OnNMCustomdrawLoglist)\r
+ //ON_NOTIFY(NM_CUSTOMDRAW, IDC_LOGLIST, OnNMCustomdrawLoglist)\r
ON_MESSAGE(WM_FILTEREDIT_INFOCLICKED, OnClickedInfoIcon)\r
ON_MESSAGE(WM_FILTEREDIT_CANCELCLICKED, OnClickedCancelFilter)\r
- ON_NOTIFY(LVN_GETDISPINFO, IDC_LOGLIST, OnLvnGetdispinfoLoglist)\r
+ //ON_NOTIFY(LVN_GETDISPINFO, IDC_LOGLIST, OnLvnGetdispinfoLoglist)\r
ON_EN_CHANGE(IDC_SEARCHEDIT, OnEnChangeSearchedit)\r
ON_WM_TIMER()\r
ON_NOTIFY(DTN_DATETIMECHANGE, IDC_DATETO, OnDtnDatetimechangeDateto)\r
ON_BN_CLICKED(IDC_NEXTHUNDRED, OnBnClickedNexthundred)\r
ON_NOTIFY(NM_CUSTOMDRAW, IDC_LOGMSG, OnNMCustomdrawChangedFileList)\r
ON_NOTIFY(LVN_GETDISPINFO, IDC_LOGMSG, OnLvnGetdispinfoChangedFileList)\r
- ON_NOTIFY(LVN_COLUMNCLICK, IDC_LOGLIST, OnLvnColumnclick)\r
+ ON_NOTIFY(LVN_COLUMNCLICK,IDC_LOGLIST , OnLvnColumnclick)\r
ON_NOTIFY(LVN_COLUMNCLICK, IDC_LOGMSG, OnLvnColumnclickChangedFileList)\r
ON_BN_CLICKED(IDC_HIDEPATHS, OnBnClickedHidepaths)\r
- ON_NOTIFY(LVN_ODFINDITEM, IDC_LOGLIST, OnLvnOdfinditemLoglist)\r
+ \r
ON_BN_CLICKED(IDC_CHECK_STOPONCOPY, &CLogDlg::OnBnClickedCheckStoponcopy)\r
ON_NOTIFY(DTN_DROPDOWN, IDC_DATEFROM, &CLogDlg::OnDtnDropdownDatefrom)\r
ON_NOTIFY(DTN_DROPDOWN, IDC_DATETO, &CLogDlg::OnDtnDropdownDateto)\r
GetDlgItem(IDC_MSGVIEW)->SendMessage(EM_AUTOURLDETECT, TRUE, NULL);\r
// make the log message rich edit control send a message when the mouse pointer is over a link\r
GetDlgItem(IDC_MSGVIEW)->SendMessage(EM_SETEVENTMASK, NULL, ENM_LINK);\r
- m_LogList.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_DOUBLEBUFFER | LVS_EX_SUBITEMIMAGES);\r
+ //m_LogList.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_DOUBLEBUFFER | LVS_EX_SUBITEMIMAGES);\r
\r
// the "hide unrelated paths" checkbox should be indeterminate\r
m_cHidePaths.SetCheck(BST_INDETERMINATE);\r
\r
- // load the icons for the action columns\r
- m_hModifiedIcon = (HICON)LoadImage(AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ACTIONMODIFIED), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE);\r
- m_hReplacedIcon = (HICON)LoadImage(AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ACTIONREPLACED), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE);\r
- m_hAddedIcon = (HICON)LoadImage(AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ACTIONADDED), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE);\r
- m_hDeletedIcon = (HICON)LoadImage(AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ACTIONDELETED), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE);\r
\r
// if there is a working copy, load the project properties\r
// to get information about the bugtraq: integration\r
\r
// set up the columns\r
m_LogList.DeleteAllItems();\r
+#if 0\r
int c = ((CHeaderCtrl*)(m_LogList.GetDlgItem(0)))->GetItemCount()-1;\r
\r
while (c>=0)\r
m_LogList.SetRedraw(false);\r
ResizeAllListCtrlCols();\r
m_LogList.SetRedraw(true);\r
-\r
+#endif\r
m_ChangedFileListCtrl.SetExtendedStyle ( LVS_EX_FULLROWSELECT | LVS_EX_DOUBLEBUFFER );\r
m_ChangedFileListCtrl.DeleteAllItems();\r
c = ((CHeaderCtrl*)(m_ChangedFileListCtrl.GetDlgItem(0)))->GetItemCount()-1;\r
return 0;\r
}\r
\r
-void CLogDlg::CopySelectionToClipBoard()\r
-{\r
-#if 0\r
- CString sClipdata;\r
- POSITION pos = m_LogList.GetFirstSelectedItemPosition();\r
- if (pos != NULL)\r
- {\r
- CString sRev;\r
- sRev.LoadString(IDS_LOG_REVISION);\r
- CString sAuthor;\r
- sAuthor.LoadString(IDS_LOG_AUTHOR);\r
- CString sDate;\r
- sDate.LoadString(IDS_LOG_DATE);\r
- CString sMessage;\r
- sMessage.LoadString(IDS_LOG_MESSAGE);\r
- while (pos)\r
- {\r
- CString sLogCopyText;\r
- CString sPaths;\r
- PLOGENTRYDATA pLogEntry = reinterpret_cast<PLOGENTRYDATA>(m_arShownList.GetAt(m_LogList.GetNextSelectedItem(pos)));\r
- LogChangedPathArray * cpatharray = pLogEntry->pArChangedPaths;\r
- for (INT_PTR cpPathIndex = 0; cpPathIndex<cpatharray->GetCount(); ++cpPathIndex)\r
- {\r
- LogChangedPath * cpath = cpatharray->GetAt(cpPathIndex);\r
- sPaths += cpath->GetAction() + _T(" : ") + cpath->sPath;\r
- if (cpath->sCopyFromPath.IsEmpty())\r
- sPaths += _T("\r\n");\r
- else\r
- {\r
- CString sCopyFrom;\r
- sCopyFrom.Format(_T(" (%s: %s, %s, %ld)\r\n"), CString(MAKEINTRESOURCE(IDS_LOG_COPYFROM)), \r
- (LPCTSTR)cpath->sCopyFromPath, \r
- (LPCTSTR)CString(MAKEINTRESOURCE(IDS_LOG_REVISION)), \r
- (LPCTSTR)cpath->lCopyFromRev);\r
- sPaths += sCopyFrom;\r
- }\r
- }\r
- sPaths.Trim();\r
- sLogCopyText.Format(_T("%s: %d\r\n%s: %s\r\n%s: %s\r\n%s:\r\n%s\r\n----\r\n%s\r\n\r\n"),\r
- (LPCTSTR)sRev, pLogEntry->Rev,\r
- (LPCTSTR)sAuthor, (LPCTSTR)pLogEntry->sAuthor,\r
- (LPCTSTR)sDate, (LPCTSTR)pLogEntry->sDate,\r
- (LPCTSTR)sMessage, (LPCTSTR)pLogEntry->sMessage,\r
- (LPCTSTR)sPaths);\r
- sClipdata += sLogCopyText;\r
- }\r
- CStringUtils::WriteAsciiStringToClipboard(sClipdata, GetSafeHwnd());\r
- }\r
-#endif\r
-}\r
+\r
\r
void CLogDlg::CopyChangedSelectionToClipBoard()\r
{\r
}\r
}\r
\r
-bool CLogDlg::IsSelectionContinuous()\r
-{\r
- if ( m_LogList.GetSelectedCount()==1 )\r
- {\r
- // if only one revision is selected, the selection is of course\r
- // continuous\r
- return true;\r
- }\r
-\r
- POSITION pos = m_LogList.GetFirstSelectedItemPosition();\r
- bool bContinuous = (m_arShownList.GetCount() == (INT_PTR)m_logEntries.size());\r
- if (bContinuous)\r
- {\r
- int itemindex = m_LogList.GetNextSelectedItem(pos);\r
- while (pos)\r
- {\r
- int nextindex = m_LogList.GetNextSelectedItem(pos);\r
- if (nextindex - itemindex > 1)\r
- {\r
- bContinuous = false;\r
- break;\r
- }\r
- itemindex = nextindex;\r
- }\r
- }\r
- return bContinuous;\r
-}\r
\r
LRESULT CLogDlg::OnFindDialogMessage(WPARAM /*wParam*/, LPARAM /*lParam*/)\r
{\r
}\r
\r
\r
-void CLogDlg::OnNMDblclkLoglist(NMHDR * /*pNMHDR*/, LRESULT *pResult)\r
-{\r
- // a double click on an entry in the revision list has happened\r
- *pResult = 0;\r
-\r
- if (CRegDWORD(_T("Software\\TortoiseGit\\DiffByDoubleClickInLog"), FALSE))\r
- DiffSelectedRevWithPrevious();\r
-}\r
-\r
-void CLogDlg::DiffSelectedRevWithPrevious()\r
-{\r
-#if 0\r
- if (m_bThreadRunning)\r
- return;\r
- UpdateLogInfoLabel();\r
- int selIndex = m_LogList.GetSelectionMark();\r
- if (selIndex < 0)\r
- return;\r
- int selCount = m_LogList.GetSelectedCount();\r
- if (selCount != 1)\r
- return;\r
-\r
- // Find selected entry in the log list\r
- POSITION pos = m_LogList.GetFirstSelectedItemPosition();\r
- PLOGENTRYDATA pLogEntry = reinterpret_cast<PLOGENTRYDATA>(m_arShownList.GetAt(m_LogList.GetNextSelectedItem(pos)));\r
- long rev1 = pLogEntry->Rev;\r
- long rev2 = rev1-1;\r
- CTGitPath path = m_path;\r
-\r
- // See how many files under the relative root were changed in selected revision\r
- int nChanged = 0;\r
- LogChangedPath * changed = NULL;\r
- for (INT_PTR c = 0; c < pLogEntry->pArChangedPaths->GetCount(); ++c)\r
- {\r
- LogChangedPath * cpath = pLogEntry->pArChangedPaths->GetAt(c);\r
- if (cpath && cpath -> sPath.Left(m_sRelativeRoot.GetLength()).Compare(m_sRelativeRoot)==0)\r
- {\r
- ++nChanged;\r
- changed = cpath;\r
- }\r
- }\r
-\r
- if (m_path.IsDirectory() && nChanged == 1) \r
- {\r
- // We're looking at the log for a directory and only one file under dir was changed in the revision\r
- // Do diff on that file instead of whole directory\r
- path.AppendPathString(changed->sPath.Mid(m_sRelativeRoot.GetLength()));\r
- } \r
-\r
- m_bCancelled = FALSE;\r
- DialogEnableWindow(IDOK, FALSE);\r
- SetPromptApp(&theApp);\r
- theApp.DoWaitCursor(1);\r
-\r
- if (PromptShown())\r
- {\r
- GitDiff diff(this, m_hWnd, true);\r
- diff.SetAlternativeTool(!!(GetAsyncKeyState(VK_SHIFT) & 0x8000));\r
- diff.SetHEADPeg(m_LogRevision);\r
- diff.ShowCompare(path, rev2, path, rev1);\r
- }\r
- else\r
- {\r
- CAppUtils::StartShowCompare(m_hWnd, path, rev2, path, rev1, GitRev(), m_LogRevision, !!(GetAsyncKeyState(VK_SHIFT) & 0x8000));\r
- }\r
-\r
- theApp.DoWaitCursor(-1);\r
- EnableOKButton();\r
-#endif\r
-}\r
-\r
void CLogDlg::DoDiffFromLog(INT_PTR selIndex, GitRev* rev1, GitRev* rev2, bool blame, bool unified)\r
{\r
DialogEnableWindow(IDOK, FALSE);\r
#endif\r
}\r
\r
+#if 0\r
void CLogDlg::OnNMCustomdrawLoglist(NMHDR *pNMHDR, LRESULT *pResult)\r
{\r
\r
*pResult = CDRF_DODEFAULT;\r
\r
}\r
+#endif\r
+\r
void CLogDlg::OnNMCustomdrawChangedFileList(NMHDR *pNMHDR, LRESULT *pResult)\r
{\r
\r
temp = _T(" ")+temp;\r
m_cFilter.SetCueBanner(temp);\r
}\r
-\r
+#if 0\r
void CLogDlg::OnLvnGetdispinfoLoglist(NMHDR *pNMHDR, LRESULT *pResult)\r
{\r
NMLVDISPINFO *pDispInfo = reinterpret_cast<NMLVDISPINFO*>(pNMHDR);\r
ASSERT(false);\r
}\r
}\r
-\r
+#endif\r
void CLogDlg::OnLvnGetdispinfoChangedFileList(NMHDR *pNMHDR, LRESULT *pResult)\r
{\r
\r
return 0;\r
}\r
\r
+#if 0\r
void CLogDlg::ResizeAllListCtrlCols()\r
{\r
\r
}\r
\r
}\r
+#endif\r
\r
void CLogDlg::OnBnClickedHidepaths()\r
{\r
}\r
\r
\r
-void CLogDlg::OnLvnOdfinditemLoglist(NMHDR *pNMHDR, LRESULT *pResult)\r
-{\r
- LPNMLVFINDITEM pFindInfo = reinterpret_cast<LPNMLVFINDITEM>(pNMHDR);\r
- *pResult = -1;\r
- \r
- if (pFindInfo->lvfi.flags & LVFI_PARAM)\r
- return; \r
- if ((pFindInfo->iStart < 0)||(pFindInfo->iStart >= m_arShownList.GetCount()))\r
- return;\r
- if (pFindInfo->lvfi.psz == 0)\r
- return;\r
-#if 0\r
- CString sCmp = pFindInfo->lvfi.psz;\r
- CString sRev; \r
- for (int i=pFindInfo->iStart; i<m_arShownList.GetCount(); ++i)\r
- {\r
- GitRev * pLogEntry = reinterpret_cast<GitRev*>(m_arShownList.GetAt(i));\r
- sRev.Format(_T("%ld"), pLogEntry->Rev);\r
- if (pFindInfo->lvfi.flags & LVFI_PARTIAL)\r
- {\r
- if (sCmp.Compare(sRev.Left(sCmp.GetLength()))==0)\r
- {\r
- *pResult = i;\r
- return;\r
- }\r
- }\r
- else\r
- {\r
- if (sCmp.Compare(sRev)==0)\r
- {\r
- *pResult = i;\r
- return;\r
- }\r
- }\r
- }\r
- if (pFindInfo->lvfi.flags & LVFI_WRAP)\r
- {\r
- for (int i=0; i<pFindInfo->iStart; ++i)\r
- {\r
- PLOGENTRYDATA pLogEntry = reinterpret_cast<PLOGENTRYDATA>(m_arShownList.GetAt(i));\r
- sRev.Format(_T("%ld"), pLogEntry->Rev);\r
- if (pFindInfo->lvfi.flags & LVFI_PARTIAL)\r
- {\r
- if (sCmp.Compare(sRev.Left(sCmp.GetLength()))==0)\r
- {\r
- *pResult = i;\r
- return;\r
- }\r
- }\r
- else\r
- {\r
- if (sCmp.Compare(sRev)==0)\r
- {\r
- *pResult = i;\r
- return;\r
- }\r
- }\r
- }\r
- }\r
-#endif\r
- *pResult = -1;\r
-}\r
\r
void CLogDlg::OnBnClickedCheckStoponcopy()\r
{\r
UpdateData(FALSE);\r
}\r
\r
-void CLogDlg::ShowContextMenuForRevisions(CWnd* /*pWnd*/, CPoint point)\r
-{\r
-\r
- int selIndex = m_LogList.GetSelectionMark();\r
- if (selIndex < 0)\r
- return; // nothing selected, nothing to do with a context menu\r
-\r
- // if the user selected the info text telling about not all revisions shown due to\r
- // the "stop on copy/rename" option, we also don't show the context menu\r
- if ((m_bStrictStopped)&&(selIndex == m_arShownList.GetCount()))\r
- return;\r
-\r
- // if the context menu is invoked through the keyboard, we have to use\r
- // a calculated position on where to anchor the menu on\r
- if ((point.x == -1) && (point.y == -1))\r
- {\r
- CRect rect;\r
- m_LogList.GetItemRect(selIndex, &rect, LVIR_LABEL);\r
- m_LogList.ClientToScreen(&rect);\r
- point = rect.CenterPoint();\r
- }\r
- m_nSearchIndex = selIndex;\r
- m_bCancelled = FALSE;\r
-\r
- // calculate some information the context menu commands can use\r
-// CString pathURL = GetURLFromPath(m_path);\r
-\r
- POSITION pos = m_LogList.GetFirstSelectedItemPosition();\r
- int indexNext = m_LogList.GetNextSelectedItem(pos);\r
- if (indexNext < 0)\r
- return;\r
-\r
- GitRev* pSelLogEntry = reinterpret_cast<GitRev*>(m_arShownList.GetAt(indexNext));\r
-#if 0\r
- GitRev revSelected = pSelLogEntry->Rev;\r
- GitRev revPrevious = git_revnum_t(revSelected)-1;\r
- if ((pSelLogEntry->pArChangedPaths)&&(pSelLogEntry->pArChangedPaths->GetCount() <= 2))\r
- {\r
- for (int i=0; i<pSelLogEntry->pArChangedPaths->GetCount(); ++i)\r
- {\r
- LogChangedPath * changedpath = (LogChangedPath *)pSelLogEntry->pArChangedPaths->GetAt(i);\r
- if (changedpath->lCopyFromRev)\r
- revPrevious = changedpath->lCopyFromRev;\r
- }\r
- }\r
- GitRev revSelected2;\r
- if (pos)\r
- {\r
- PLOGENTRYDATA pLogEntry = reinterpret_cast<PLOGENTRYDATA>(m_arShownList.GetAt(m_LogList.GetNextSelectedItem(pos)));\r
- revSelected2 = pLogEntry->Rev;\r
- }\r
- bool bAllFromTheSameAuthor = true;\r
- CString firstAuthor;\r
- CLogDataVector selEntries;\r
- GitRev revLowest, revHighest;\r
- GitRevRangeArray revisionRanges;\r
- {\r
- POSITION pos = m_LogList.GetFirstSelectedItemPosition();\r
- PLOGENTRYDATA pLogEntry = reinterpret_cast<PLOGENTRYDATA>(m_arShownList.GetAt(m_LogList.GetNextSelectedItem(pos)));\r
- revisionRanges.AddRevision(pLogEntry->Rev);\r
- selEntries.push_back(pLogEntry);\r
- firstAuthor = pLogEntry->sAuthor;\r
- revLowest = pLogEntry->Rev;\r
- revHighest = pLogEntry->Rev;\r
- while (pos)\r
- {\r
- pLogEntry = reinterpret_cast<PLOGENTRYDATA>(m_arShownList.GetAt(m_LogList.GetNextSelectedItem(pos)));\r
- revisionRanges.AddRevision(pLogEntry->Rev);\r
- selEntries.push_back(pLogEntry);\r
- if (firstAuthor.Compare(pLogEntry->sAuthor))\r
- bAllFromTheSameAuthor = false;\r
- revLowest = (git_revnum_t(pLogEntry->Rev) > git_revnum_t(revLowest) ? revLowest : pLogEntry->Rev);\r
- revHighest = (git_revnum_t(pLogEntry->Rev) < git_revnum_t(revHighest) ? revHighest : pLogEntry->Rev);\r
- }\r
- }\r
-\r
-#endif\r
-\r
- int FirstSelect=-1, LastSelect=-1;\r
- pos = m_LogList.GetFirstSelectedItemPosition();\r
- FirstSelect = m_LogList.GetNextSelectedItem(pos);\r
- while(pos)\r
- {\r
- LastSelect = m_LogList.GetNextSelectedItem(pos);\r
- }\r
- //entry is selected, now show the popup menu\r
- CIconMenu popup;\r
- if (popup.CreatePopupMenu())\r
- {\r
- if (m_LogList.GetSelectedCount() == 1)\r
- {\r
-#if 0\r
- if (!m_path.IsDirectory())\r
- {\r
- if (m_hasWC)\r
- {\r
- popup.AppendMenuIcon(ID_COMPARE, IDS_LOG_POPUP_COMPARE, IDI_DIFF);\r
- popup.AppendMenuIcon(ID_BLAMECOMPARE, IDS_LOG_POPUP_BLAMECOMPARE, IDI_BLAME);\r
- }\r
- popup.AppendMenuIcon(ID_GNUDIFF1, IDS_LOG_POPUP_GNUDIFF_CH, IDI_DIFF);\r
- popup.AppendMenuIcon(ID_COMPAREWITHPREVIOUS, IDS_LOG_POPUP_COMPAREWITHPREVIOUS, IDI_DIFF);\r
- popup.AppendMenu(MF_SEPARATOR, NULL);\r
- popup.AppendMenuIcon(ID_SAVEAS, IDS_LOG_POPUP_SAVE, IDI_SAVEAS);\r
- popup.AppendMenuIcon(ID_OPEN, IDS_LOG_POPUP_OPEN, IDI_OPEN);\r
- popup.AppendMenuIcon(ID_OPENWITH, IDS_LOG_POPUP_OPENWITH, IDI_OPEN);\r
- popup.AppendMenuIcon(ID_BLAME, IDS_LOG_POPUP_BLAME, IDI_BLAME);\r
- popup.AppendMenu(MF_SEPARATOR, NULL);\r
- }\r
- else\r
-#endif \r
- {\r
- if (m_hasWC)\r
- {\r
- popup.AppendMenuIcon(ID_COMPARE, IDS_LOG_POPUP_COMPARE, IDI_DIFF);\r
- // TODO:\r
- // TortoiseMerge could be improved to take a /blame switch\r
- // and then not 'cat' the files from a unified diff but\r
- // blame then.\r
- // But until that's implemented, the context menu entry for\r
- // this feature is commented out.\r
- //popup.AppendMenu(ID_BLAMECOMPARE, IDS_LOG_POPUP_BLAMECOMPARE, IDI_BLAME);\r
- }\r
- popup.AppendMenuIcon(ID_GNUDIFF1, IDS_LOG_POPUP_GNUDIFF_CH, IDI_DIFF);\r
- popup.AppendMenuIcon(ID_COMPAREWITHPREVIOUS, IDS_LOG_POPUP_COMPAREWITHPREVIOUS, IDI_DIFF);\r
- popup.AppendMenuIcon(ID_BLAMEWITHPREVIOUS, IDS_LOG_POPUP_BLAMEWITHPREVIOUS, IDI_BLAME);\r
- popup.AppendMenu(MF_SEPARATOR, NULL);\r
- }\r
-\r
-// if (!m_ProjectProperties.sWebViewerRev.IsEmpty())\r
-// {\r
-// popup.AppendMenuIcon(ID_VIEWREV, IDS_LOG_POPUP_VIEWREV);\r
-// }\r
-// if (!m_ProjectProperties.sWebViewerPathRev.IsEmpty())\r
-// {\r
-// popup.AppendMenuIcon(ID_VIEWPATHREV, IDS_LOG_POPUP_VIEWPATHREV);\r
-// }\r
-// if ((!m_ProjectProperties.sWebViewerPathRev.IsEmpty())||\r
-// (!m_ProjectProperties.sWebViewerRev.IsEmpty()))\r
-// {\r
-// popup.AppendMenu(MF_SEPARATOR, NULL);\r
-// }\r
-\r
-// popup.AppendMenuIcon(ID_REPOBROWSE, IDS_LOG_BROWSEREPO, IDI_REPOBROWSE);\r
-// popup.AppendMenuIcon(ID_COPY, IDS_LOG_POPUP_COPY);\r
-// if (m_hasWC)\r
-// popup.AppendMenuIcon(ID_UPDATE, IDS_LOG_POPUP_UPDATE, IDI_UPDATE);\r
- if (m_hasWC)\r
- popup.AppendMenuIcon(ID_REVERTTOREV, IDS_LOG_POPUP_REVERTTOREV, IDI_REVERT);\r
- if (m_hasWC)\r
- popup.AppendMenuIcon(ID_REVERTREV, IDS_LOG_POPUP_REVERTREV, IDI_REVERT);\r
-// if (m_hasWC)\r
-// popup.AppendMenuIcon(ID_MERGEREV, IDS_LOG_POPUP_MERGEREV, IDI_MERGE);\r
- popup.AppendMenuIcon(ID_CHECKOUT, IDS_MENUCHECKOUT, IDI_CHECKOUT);\r
- popup.AppendMenuIcon(ID_EXPORT, IDS_MENUEXPORT, IDI_EXPORT);\r
- popup.AppendMenu(MF_SEPARATOR, NULL);\r
- }\r
- else if (m_LogList.GetSelectedCount() >= 2)\r
- {\r
- bool bAddSeparator = false;\r
- if (IsSelectionContinuous() || (m_LogList.GetSelectedCount() == 2))\r
- {\r
- popup.AppendMenuIcon(ID_COMPARETWO, IDS_LOG_POPUP_COMPARETWO, IDI_DIFF);\r
- }\r
- if (m_LogList.GetSelectedCount() == 2)\r
- {\r
- popup.AppendMenuIcon(ID_BLAMETWO, IDS_LOG_POPUP_BLAMEREVS, IDI_BLAME);\r
- popup.AppendMenuIcon(ID_GNUDIFF2, IDS_LOG_POPUP_GNUDIFF, IDI_DIFF);\r
- bAddSeparator = true;\r
- }\r
- if (m_hasWC)\r
- {\r
- popup.AppendMenuIcon(ID_REVERTREV, IDS_LOG_POPUP_REVERTREVS, IDI_REVERT);\r
-// if (m_hasWC)\r
-// popup.AppendMenuIcon(ID_MERGEREV, IDS_LOG_POPUP_MERGEREVS, IDI_MERGE);\r
- bAddSeparator = true;\r
- }\r
- if (bAddSeparator)\r
- popup.AppendMenu(MF_SEPARATOR, NULL);\r
- }\r
-#if 0\r
-// if ((selEntries.size() > 0)&&(bAllFromTheSameAuthor))\r
-// {\r
-// popup.AppendMenuIcon(ID_EDITAUTHOR, IDS_LOG_POPUP_EDITAUTHOR);\r
-// }\r
-// if (m_LogList.GetSelectedCount() == 1)\r
-// {\r
-// popup.AppendMenuIcon(ID_EDITLOG, IDS_LOG_POPUP_EDITLOG);\r
-// popup.AppendMenuIcon(ID_REVPROPS, IDS_REPOBROWSE_SHOWREVPROP, IDI_PROPERTIES); // "Show Revision Properties"\r
-// popup.AppendMenu(MF_SEPARATOR, NULL);\r
-// }\r
-#endif\r
- if (m_LogList.GetSelectedCount() != 0)\r
- {\r
- popup.AppendMenuIcon(ID_COPYCLIPBOARD, IDS_LOG_POPUP_COPYTOCLIPBOARD);\r
- }\r
- popup.AppendMenuIcon(ID_FINDENTRY, IDS_LOG_POPUP_FIND);\r
-\r
- int cmd = popup.TrackPopupMenu(TPM_RETURNCMD | TPM_LEFTALIGN | TPM_NONOTIFY, point.x, point.y, this, 0);\r
- DialogEnableWindow(IDOK, FALSE);\r
-// SetPromptApp(&theApp);\r
- theApp.DoWaitCursor(1);\r
- bool bOpenWith = false;\r
-\r
- switch (cmd)\r
- {\r
- case ID_GNUDIFF1:\r
- {\r
- CString tempfile=GetTempFile();\r
- CString cmd;\r
- GitRev * r1 = reinterpret_cast<GitRev*>(m_arShownList.GetAt(FirstSelect));\r
- cmd.Format(_T("git.cmd diff-tree -r -p --stat %s"),r1->m_CommitHash);\r
- g_Git.RunLogFile(cmd,tempfile);\r
- CAppUtils::StartUnifiedDiffViewer(tempfile,r1->m_CommitHash.Left(6)+_T(":")+r1->m_Subject);\r
- }\r
- break;\r
-\r
- case ID_GNUDIFF2:\r
- {\r
- CString tempfile=GetTempFile();\r
- CString cmd;\r
- GitRev * r1 = reinterpret_cast<GitRev*>(m_arShownList.GetAt(FirstSelect));\r
- GitRev * r2 = reinterpret_cast<GitRev*>(m_arShownList.GetAt(LastSelect));\r
- cmd.Format(_T("git.cmd diff-tree -r -p --stat %s %s"),r1->m_CommitHash,r2->m_CommitHash);\r
- g_Git.RunLogFile(cmd,tempfile);\r
- CAppUtils::StartUnifiedDiffViewer(tempfile,r1->m_CommitHash.Left(6)+_T(":")+r2->m_CommitHash.Left(6));\r
-\r
- }\r
- break;\r
-\r
- case ID_COMPARETWO:\r
- {\r
- GitRev * r1 = reinterpret_cast<GitRev*>(m_arShownList.GetAt(FirstSelect));\r
- GitRev * r2 = reinterpret_cast<GitRev*>(m_arShownList.GetAt(LastSelect));\r
- CFileDiffDlg dlg;\r
- dlg.SetDiff(NULL,*r1,*r2);\r
- dlg.DoModal();\r
- \r
- }\r
- break;\r
-\r
-#if 0\r
- case ID_GNUDIFF1:\r
- {\r
- if (PromptShown())\r
- {\r
- GitDiff diff(this, this->m_hWnd, true);\r
- diff.SetHEADPeg(m_LogRevision);\r
- diff.ShowUnifiedDiff(m_path, revPrevious, m_path, revSelected);\r
- }\r
- else\r
- CAppUtils::StartShowUnifiedDiff(m_hWnd, m_path, revPrevious, m_path, revSelected, GitRev(), m_LogRevision);\r
- }\r
- break;\r
-\r
- case ID_GNUDIFF2:\r
- {\r
- if (PromptShown())\r
- {\r
- GitDiff diff(this, this->m_hWnd, true);\r
- diff.SetHEADPeg(m_LogRevision);\r
- diff.ShowUnifiedDiff(m_path, revSelected2, m_path, revSelected);\r
- }\r
- else\r
- CAppUtils::StartShowUnifiedDiff(m_hWnd, m_path, revSelected2, m_path, revSelected, GitRev(), m_LogRevision);\r
- }\r
- break;\r
- case ID_REVERTREV:\r
- {\r
- // we need an URL to complete this command, so error out if we can't get an URL\r
- if (pathURL.IsEmpty())\r
- {\r
- CString strMessage;\r
- strMessage.Format(IDS_ERR_NOURLOFFILE, (LPCTSTR)(m_path.GetUIPathString()));\r
- CMessageBox::Show(this->m_hWnd, strMessage, _T("TortoiseGit"), MB_ICONERROR);\r
- TRACE(_T("could not retrieve the URL of the folder!\n"));\r
- break; //exit\r
- }\r
- CString msg;\r
- msg.Format(IDS_LOG_REVERT_CONFIRM, m_path.GetWinPath());\r
- if (CMessageBox::Show(this->m_hWnd, msg, _T("TortoiseGit"), MB_YESNO | MB_ICONQUESTION) == IDYES)\r
- {\r
- CGitProgressDlg dlg;\r
- dlg.SetCommand(CGitProgressDlg::GitProgress_Merge);\r
- dlg.SetPathList(CTGitPathList(m_path));\r
- dlg.SetUrl(pathURL);\r
- dlg.SetSecondUrl(pathURL);\r
- revisionRanges.AdjustForMerge(true);\r
- dlg.SetRevisionRanges(revisionRanges);\r
- dlg.SetPegRevision(m_LogRevision);\r
- dlg.DoModal();\r
- }\r
- }\r
- break;\r
- case ID_MERGEREV:\r
- {\r
- // we need an URL to complete this command, so error out if we can't get an URL\r
- if (pathURL.IsEmpty())\r
- {\r
- CString strMessage;\r
- strMessage.Format(IDS_ERR_NOURLOFFILE, (LPCTSTR)(m_path.GetUIPathString()));\r
- CMessageBox::Show(this->m_hWnd, strMessage, _T("TortoiseGit"), MB_ICONERROR);\r
- TRACE(_T("could not retrieve the URL of the folder!\n"));\r
- break; //exit\r
- }\r
-\r
- CString path = m_path.GetWinPathString();\r
- bool bGotSavePath = false;\r
- if ((m_LogList.GetSelectedCount() == 1)&&(!m_path.IsDirectory()))\r
- {\r
- bGotSavePath = CAppUtils::FileOpenSave(path, NULL, IDS_LOG_MERGETO, IDS_COMMONFILEFILTER, true, GetSafeHwnd());\r
- }\r
- else\r
- {\r
- CBrowseFolder folderBrowser;\r
- folderBrowser.SetInfo(CString(MAKEINTRESOURCE(IDS_LOG_MERGETO)));\r
- bGotSavePath = (folderBrowser.Show(GetSafeHwnd(), path, path) == CBrowseFolder::OK);\r
- }\r
- if (bGotSavePath)\r
- {\r
- CGitProgressDlg dlg;\r
- dlg.SetCommand(CGitProgressDlg::GitProgress_Merge);\r
- dlg.SetPathList(CTGitPathList(CTGitPath(path)));\r
- dlg.SetUrl(pathURL);\r
- dlg.SetSecondUrl(pathURL);\r
- revisionRanges.AdjustForMerge(false);\r
- dlg.SetRevisionRanges(revisionRanges);\r
- dlg.SetPegRevision(m_LogRevision);\r
- dlg.DoModal();\r
- }\r
- }\r
- break;\r
- case ID_REVERTTOREV:\r
- {\r
- // we need an URL to complete this command, so error out if we can't get an URL\r
- if (pathURL.IsEmpty())\r
- {\r
- CString strMessage;\r
- strMessage.Format(IDS_ERR_NOURLOFFILE, (LPCTSTR)(m_path.GetUIPathString()));\r
- CMessageBox::Show(this->m_hWnd, strMessage, _T("TortoiseGit"), MB_ICONERROR);\r
- TRACE(_T("could not retrieve the URL of the folder!\n"));\r
- break; //exit\r
- }\r
-\r
- CString msg;\r
- msg.Format(IDS_LOG_REVERTTOREV_CONFIRM, m_path.GetWinPath());\r
- if (CMessageBox::Show(this->m_hWnd, msg, _T("TortoiseGit"), MB_YESNO | MB_ICONQUESTION) == IDYES)\r
- {\r
- CGitProgressDlg dlg;\r
- dlg.SetCommand(CGitProgressDlg::GitProgress_Merge);\r
- dlg.SetPathList(CTGitPathList(m_path));\r
- dlg.SetUrl(pathURL);\r
- dlg.SetSecondUrl(pathURL);\r
- GitRevRangeArray revarray;\r
- revarray.AddRevRange(GitRev::REV_HEAD, revSelected);\r
- dlg.SetRevisionRanges(revarray);\r
- dlg.SetPegRevision(m_LogRevision);\r
- dlg.DoModal();\r
- }\r
- }\r
- break;\r
- case ID_COPY:\r
- {\r
- // we need an URL to complete this command, so error out if we can't get an URL\r
- if (pathURL.IsEmpty())\r
- {\r
- CString strMessage;\r
- strMessage.Format(IDS_ERR_NOURLOFFILE, (LPCTSTR)(m_path.GetUIPathString()));\r
- CMessageBox::Show(this->m_hWnd, strMessage, _T("TortoiseGit"), MB_ICONERROR);\r
- TRACE(_T("could not retrieve the URL of the folder!\n"));\r
- break; //exit\r
- }\r
-\r
- CCopyDlg dlg;\r
- dlg.m_URL = pathURL;\r
- dlg.m_path = m_path;\r
- dlg.m_CopyRev = revSelected;\r
- if (dlg.DoModal() == IDOK)\r
- {\r
- // should we show a progress dialog here? Copies are done really fast\r
- // and without much network traffic.\r
- if (!Copy(CTGitPathList(CTGitPath(pathURL)), CTGitPath(dlg.m_URL), dlg.m_CopyRev, dlg.m_CopyRev, dlg.m_sLogMessage))\r
- CMessageBox::Show(this->m_hWnd, GetLastErrorMessage(), _T("TortoiseGit"), MB_ICONERROR);\r
- else\r
- CMessageBox::Show(this->m_hWnd, IDS_LOG_COPY_SUCCESS, IDS_APPNAME, MB_ICONINFORMATION);\r
- }\r
- } \r
- break;\r
- case ID_COMPARE:\r
- {\r
- //user clicked on the menu item "compare with working copy"\r
- if (PromptShown())\r
- {\r
- GitDiff diff(this, m_hWnd, true);\r
- diff.SetAlternativeTool(!!(GetAsyncKeyState(VK_SHIFT) & 0x8000));\r
- diff.SetHEADPeg(m_LogRevision);\r
- diff.ShowCompare(m_path, GitRev::REV_WC, m_path, revSelected);\r
- }\r
- else\r
- CAppUtils::StartShowCompare(m_hWnd, m_path, GitRev::REV_WC, m_path, revSelected, GitRev(), m_LogRevision, !!(GetAsyncKeyState(VK_SHIFT) & 0x8000));\r
- }\r
- break;\r
- case ID_COMPARETWO:\r
- {\r
- GitRev r1 = revSelected;\r
- GitRev r2 = revSelected2;\r
- if (m_LogList.GetSelectedCount() > 2)\r
- {\r
- r1 = revHighest;\r
- r2 = revLowest;\r
- }\r
- //user clicked on the menu item "compare revisions"\r
- if (PromptShown())\r
- {\r
- GitDiff diff(this, m_hWnd, true);\r
- diff.SetAlternativeTool(!!(GetAsyncKeyState(VK_SHIFT) & 0x8000));\r
- diff.SetHEADPeg(m_LogRevision);\r
- diff.ShowCompare(CTGitPath(pathURL), r2, CTGitPath(pathURL), r1);\r
- }\r
- else\r
- CAppUtils::StartShowCompare(m_hWnd, CTGitPath(pathURL), r2, CTGitPath(pathURL), r1, GitRev(), m_LogRevision, !!(GetAsyncKeyState(VK_SHIFT) & 0x8000));\r
- }\r
- break;\r
- case ID_COMPAREWITHPREVIOUS:\r
- {\r
- if (PromptShown())\r
- {\r
- GitDiff diff(this, m_hWnd, true);\r
- diff.SetAlternativeTool(!!(GetAsyncKeyState(VK_SHIFT) & 0x8000));\r
- diff.SetHEADPeg(m_LogRevision);\r
- diff.ShowCompare(CTGitPath(pathURL), revPrevious, CTGitPath(pathURL), revSelected);\r
- }\r
- else\r
- CAppUtils::StartShowCompare(m_hWnd, CTGitPath(pathURL), revPrevious, CTGitPath(pathURL), revSelected, GitRev(), m_LogRevision, !!(GetAsyncKeyState(VK_SHIFT) & 0x8000));\r
- }\r
- break;\r
- case ID_BLAMECOMPARE:\r
- {\r
- //user clicked on the menu item "compare with working copy"\r
- //now first get the revision which is selected\r
- if (PromptShown())\r
- {\r
- GitDiff diff(this, this->m_hWnd, true);\r
- diff.SetHEADPeg(m_LogRevision);\r
- diff.ShowCompare(m_path, GitRev::REV_BASE, m_path, revSelected, GitRev(), false, true);\r
- }\r
- else\r
- CAppUtils::StartShowCompare(m_hWnd, m_path, GitRev::REV_BASE, m_path, revSelected, GitRev(), m_LogRevision, false, false, true);\r
- }\r
- break;\r
- case ID_BLAMETWO:\r
- {\r
- //user clicked on the menu item "compare and blame revisions"\r
- if (PromptShown())\r
- {\r
- GitDiff diff(this, this->m_hWnd, true);\r
- diff.SetHEADPeg(m_LogRevision);\r
- diff.ShowCompare(CTGitPath(pathURL), revSelected2, CTGitPath(pathURL), revSelected, GitRev(), false, true);\r
- }\r
- else\r
- CAppUtils::StartShowCompare(m_hWnd, CTGitPath(pathURL), revSelected2, CTGitPath(pathURL), revSelected, GitRev(), m_LogRevision, false, false, true);\r
- }\r
- break;\r
- case ID_BLAMEWITHPREVIOUS:\r
- {\r
- //user clicked on the menu item "Compare and Blame with previous revision"\r
- if (PromptShown())\r
- {\r
- GitDiff diff(this, this->m_hWnd, true);\r
- diff.SetHEADPeg(m_LogRevision);\r
- diff.ShowCompare(CTGitPath(pathURL), revPrevious, CTGitPath(pathURL), revSelected, GitRev(), false, true);\r
- }\r
- else\r
- CAppUtils::StartShowCompare(m_hWnd, CTGitPath(pathURL), revPrevious, CTGitPath(pathURL), revSelected, GitRev(), m_LogRevision, false, false, true);\r
- }\r
- break;\r
- case ID_SAVEAS:\r
- {\r
- //now first get the revision which is selected\r
- CString revFilename;\r
- if (m_hasWC)\r
- {\r
- CString strWinPath = m_path.GetWinPathString();\r
- int rfind = strWinPath.ReverseFind('.');\r
- if (rfind > 0)\r
- revFilename.Format(_T("%s-%ld%s"), (LPCTSTR)strWinPath.Left(rfind), (LONG)revSelected, (LPCTSTR)strWinPath.Mid(rfind));\r
- else\r
- revFilename.Format(_T("%s-%ld"), (LPCTSTR)strWinPath, revSelected);\r
- }\r
- if (CAppUtils::FileOpenSave(revFilename, NULL, IDS_LOG_POPUP_SAVE, IDS_COMMONFILEFILTER, false, m_hWnd))\r
- {\r
- CTGitPath tempfile;\r
- tempfile.SetFromWin(revFilename);\r
- CProgressDlg progDlg;\r
- progDlg.SetTitle(IDS_APPNAME);\r
- progDlg.SetAnimation(IDR_DOWNLOAD);\r
- CString sInfoLine;\r
- sInfoLine.Format(IDS_PROGRESSGETFILEREVISION, m_path.GetWinPath(), (LPCTSTR)revSelected.ToString());\r
- progDlg.SetLine(1, sInfoLine, true);\r
- SetAndClearProgressInfo(&progDlg);\r
- progDlg.ShowModeless(m_hWnd);\r
- if (!Cat(m_path, GitRev(GitRev::REV_HEAD), revSelected, tempfile))\r
- {\r
- // try again with another peg revision\r
- if (!Cat(m_path, revSelected, revSelected, tempfile))\r
- {\r
- progDlg.Stop();\r
- SetAndClearProgressInfo((HWND)NULL);\r
- CMessageBox::Show(this->m_hWnd, GetLastErrorMessage(), _T("TortoiseGit"), MB_ICONERROR);\r
- EnableOKButton();\r
- break;\r
- }\r
- }\r
- progDlg.Stop();\r
- SetAndClearProgressInfo((HWND)NULL);\r
- }\r
- }\r
- break;\r
- case ID_OPENWITH:\r
- bOpenWith = true;\r
- case ID_OPEN:\r
- {\r
- CProgressDlg progDlg;\r
- progDlg.SetTitle(IDS_APPNAME);\r
- progDlg.SetAnimation(IDR_DOWNLOAD);\r
- CString sInfoLine;\r
- sInfoLine.Format(IDS_PROGRESSGETFILEREVISION, m_path.GetWinPath(), (LPCTSTR)revSelected.ToString());\r
- progDlg.SetLine(1, sInfoLine, true);\r
- SetAndClearProgressInfo(&progDlg);\r
- progDlg.ShowModeless(m_hWnd);\r
- CTGitPath tempfile = CTempFiles::Instance().GetTempFilePath(false, m_path, revSelected);\r
- bool bSuccess = true;\r
- if (!Cat(m_path, GitRev(GitRev::REV_HEAD), revSelected, tempfile))\r
- {\r
- bSuccess = false;\r
- // try again, but with the selected revision as the peg revision\r
- if (!Cat(m_path, revSelected, revSelected, tempfile))\r
- {\r
- progDlg.Stop();\r
- SetAndClearProgressInfo((HWND)NULL);\r
- CMessageBox::Show(this->m_hWnd, GetLastErrorMessage(), _T("TortoiseGit"), MB_ICONERROR);\r
- EnableOKButton();\r
- break;\r
- }\r
- bSuccess = true;\r
- }\r
- if (bSuccess)\r
- {\r
- progDlg.Stop();\r
- SetAndClearProgressInfo((HWND)NULL);\r
- SetFileAttributes(tempfile.GetWinPath(), FILE_ATTRIBUTE_READONLY);\r
- int ret = 0;\r
- if (!bOpenWith)\r
- ret = (int)ShellExecute(this->m_hWnd, NULL, tempfile.GetWinPath(), NULL, NULL, SW_SHOWNORMAL);\r
- if ((ret <= HINSTANCE_ERROR)||bOpenWith)\r
- {\r
- CString cmd = _T("RUNDLL32 Shell32,OpenAs_RunDLL ");\r
- cmd += tempfile.GetWinPathString() + _T(" ");\r
- CAppUtils::LaunchApplication(cmd, NULL, false);\r
- }\r
- }\r
- }\r
- break;\r
- case ID_BLAME:\r
- {\r
- CBlameDlg dlg;\r
- dlg.EndRev = revSelected;\r
- if (dlg.DoModal() == IDOK)\r
- {\r
- CBlame blame;\r
- CString tempfile;\r
- CString logfile;\r
- tempfile = blame.BlameToTempFile(m_path, dlg.StartRev, dlg.EndRev, dlg.EndRev, logfile, _T(""), dlg.m_bIncludeMerge, TRUE, TRUE);\r
- if (!tempfile.IsEmpty())\r
- {\r
- if (dlg.m_bTextView)\r
- {\r
- //open the default text editor for the result file\r
- CAppUtils::StartTextViewer(tempfile);\r
- }\r
- else\r
- {\r
- CString sParams = _T("/path:\"") + m_path.GetGitPathString() + _T("\" ");\r
- if(!CAppUtils::LaunchTortoiseBlame(tempfile, logfile, CPathUtils::GetFileNameFromPath(m_path.GetFileOrDirectoryName()),sParams))\r
- {\r
- break;\r
- }\r
- }\r
- }\r
- else\r
- {\r
- CMessageBox::Show(this->m_hWnd, blame.GetLastErrorMessage(), _T("TortoiseGit"), MB_ICONERROR);\r
- }\r
- }\r
- }\r
- break;\r
- case ID_UPDATE:\r
- {\r
- CString sCmd;\r
- CString url = _T("tgit:")+pathURL;\r
- sCmd.Format(_T("%s /command:update /path:\"%s\" /rev:%ld"),\r
- (LPCTSTR)(CPathUtils::GetAppDirectory()+_T("TortoiseProc.exe")),\r
- (LPCTSTR)m_path.GetWinPath(), (LONG)revSelected);\r
- CAppUtils::LaunchApplication(sCmd, NULL, false);\r
- }\r
- break;\r
- case ID_FINDENTRY:\r
- {\r
- m_nSearchIndex = m_LogList.GetSelectionMark();\r
- if (m_nSearchIndex < 0)\r
- m_nSearchIndex = 0;\r
- if (m_pFindDialog)\r
- {\r
- break;\r
- }\r
- else\r
- {\r
- m_pFindDialog = new CFindReplaceDialog();\r
- m_pFindDialog->Create(TRUE, NULL, NULL, FR_HIDEUPDOWN | FR_HIDEWHOLEWORD, this); \r
- }\r
- }\r
- break;\r
- case ID_REPOBROWSE:\r
- {\r
- CString sCmd;\r
- sCmd.Format(_T("%s /command:repobrowser /path:\"%s\" /rev:%s"),\r
- (LPCTSTR)(CPathUtils::GetAppDirectory()+_T("TortoiseProc.exe")),\r
- (LPCTSTR)pathURL, (LPCTSTR)revSelected.ToString());\r
-\r
- CAppUtils::LaunchApplication(sCmd, NULL, false);\r
- }\r
- break;\r
- case ID_EDITLOG:\r
- {\r
- EditLogMessage(selIndex);\r
- }\r
- break;\r
- case ID_EDITAUTHOR:\r
- {\r
- EditAuthor(selEntries);\r
- }\r
- break;\r
- case ID_REVPROPS:\r
- {\r
- CEditPropertiesDlg dlg;\r
- dlg.SetProjectProperties(&m_ProjectProperties);\r
- CTGitPathList escapedlist;\r
- dlg.SetPathList(CTGitPathList(CTGitPath(pathURL)));\r
- dlg.SetRevision(revSelected);\r
- dlg.RevProps(true);\r
- dlg.DoModal();\r
- }\r
- break;\r
- case ID_COPYCLIPBOARD:\r
- {\r
- CopySelectionToClipBoard();\r
- }\r
- break;\r
- case ID_EXPORT:\r
- {\r
- CString sCmd;\r
- sCmd.Format(_T("%s /command:export /path:\"%s\" /revision:%ld"),\r
- (LPCTSTR)(CPathUtils::GetAppDirectory()+_T("TortoiseProc.exe")),\r
- (LPCTSTR)pathURL, (LONG)revSelected);\r
- CAppUtils::LaunchApplication(sCmd, NULL, false);\r
- }\r
- break;\r
- case ID_CHECKOUT:\r
- {\r
- CString sCmd;\r
- CString url = _T("tgit:")+pathURL;\r
- sCmd.Format(_T("%s /command:checkout /url:\"%s\" /revision:%ld"),\r
- (LPCTSTR)(CPathUtils::GetAppDirectory()+_T("TortoiseProc.exe")),\r
- (LPCTSTR)url, (LONG)revSelected);\r
- CAppUtils::LaunchApplication(sCmd, NULL, false);\r
- }\r
- break;\r
- case ID_VIEWREV:\r
- {\r
- CString url = m_ProjectProperties.sWebViewerRev;\r
- url = GetAbsoluteUrlFromRelativeUrl(url);\r
- url.Replace(_T("%REVISION%"), revSelected.ToString());\r
- if (!url.IsEmpty())\r
- ShellExecute(this->m_hWnd, _T("open"), url, NULL, NULL, SW_SHOWDEFAULT); \r
- }\r
- break;\r
- case ID_VIEWPATHREV:\r
- {\r
- CString relurl = pathURL;\r
- CString sRoot = GetRepositoryRoot(CTGitPath(relurl));\r
- relurl = relurl.Mid(sRoot.GetLength());\r
- CString url = m_ProjectProperties.sWebViewerPathRev;\r
- url = GetAbsoluteUrlFromRelativeUrl(url);\r
- url.Replace(_T("%REVISION%"), revSelected.ToString());\r
- url.Replace(_T("%PATH%"), relurl);\r
- if (!url.IsEmpty())\r
- ShellExecute(this->m_hWnd, _T("open"), url, NULL, NULL, SW_SHOWDEFAULT); \r
- }\r
- break;\r
-#endif\r
- default:\r
- break;\r
- } // switch (cmd)\r
- theApp.DoWaitCursor(-1);\r
- EnableOKButton();\r
- } // if (popup.CreatePopupMenu())\r
-}\r
-\r
void CLogDlg::ShowContextMenuForChangedpaths(CWnd* /*pWnd*/, CPoint point)\r
{\r
\r