UINT CTortoiseGitBlameView::m_FindDialogMessage;\r
\r
// CTortoiseGitBlameView\r
+IMPLEMENT_DYNAMIC(CSciEditBlame,CSciEdit)\r
\r
IMPLEMENT_DYNCREATE(CTortoiseGitBlameView, CView)\r
\r
ON_COMMAND(ID_EDIT_FIND,OnEditFind)\r
ON_COMMAND(ID_EDIT_GOTO,OnEditGoto)\r
ON_COMMAND(ID_EDIT_COPY,CopySelectedLogToClipboard)\r
+ ON_COMMAND(ID_VIEW_NEXT,OnViewNext)\r
+ ON_COMMAND(ID_VIEW_PREV,OnViewPrev)\r
ON_WM_CREATE()\r
ON_WM_SIZE()\r
ON_WM_MOUSEMOVE()\r
HFONT oldfont = (HFONT)::SelectObject(hDC, m_font);\r
\r
TCHAR buf[MAX_PATH];\r
- //_stprintf_s(buf, MAX_PATH, _T("%8ld "), 88888888);\r
- //::GetTextExtentPoint(hDC, buf, _tcslen(buf), &width);\r
- //m_revwidth = width.cx + BLAMESPACE;\r
- //blamewidth += m_revwidth;\r
\r
int maxnum=0;\r
for (unsigned int i=0;i<this->m_ID.size();i++)\r
CString &data = GetDocument()->m_BlameData;\r
CString one;\r
int pos=0;\r
+ \r
+ BYTE_VECTOR vector;\r
\r
CLogDataVector * pRevs= GetLogData();\r
\r
while( pos>=0 )\r
{\r
one=data.Tokenize(_T("\n"),pos);\r
+ \r
+ if(one.GetLength()>1 && one[0] == _T('^'))\r
+ one=one.Mid(1);\r
+\r
if(one.IsEmpty())\r
continue;\r
m_CommitHash.push_back(one.Left(40));\r
id=pRevs->m_HashMap[one.Left(40)]; \r
}\r
else\r
+ {\r
id=-1;\r
+ if(this->m_NoListCommit.find(one.Left(40)) == m_NoListCommit.end() )\r
+ {\r
+ g_Git.GetLog(vector,one.Left(40),NULL,1);\r
+ this->m_NoListCommit[one.Left(40)].ParserFromLog(vector);\r
+ }\r
+ \r
+ }\r
\r
if(id>=0 && id <(int)GetLogData()->size())\r
{\r
m_ID.push_back(pRevs->size()-id);\r
- m_Authors.push_back(pRevs->at(id).m_AuthorName);\r
+ m_Authors.push_back(pRevs->GetGitRevAt(id).m_AuthorName);\r
}else\r
{\r
m_ID.push_back(id);\r
SendEditor(SCI_SETSCROLLWIDTHTRACKING, TRUE);\r
SendEditor(SCI_SETREADONLY, TRUE);\r
\r
- m_lowestrev=1;\r
- m_highestrev=this->GetLogData()->size();\r
+ m_lowestrev=0;\r
+ m_highestrev=this->GetLogData()->size()+m_NoListCommit.size();\r
\r
GetBlameWidth();\r
CRect rect;\r
if (m_CommitHash[line] != m_SelectedHash)\r
{\r
m_SelectedHash = m_CommitHash[line];\r
-// app.m_selectedorigrev = app.origrevs[line];\r
-// app.m_selectedauthor = app.authors[line];\r
-// app.m_selecteddate = app.dates[line];\r
- \r
\r
if(m_ID[line]>=0)\r
{\r
LVIS_SELECTED);\r
\r
GitRev *pRev;\r
- pRev=&this->GetLogData()->at(this->GetLogList()->GetItemCount()-m_ID[line]);\r
+ pRev=&this->GetLogData()->GetGitRevAt(this->GetLogList()->GetItemCount()-m_ID[line]);\r
this->GetDocument()->GetMainFrame()->m_wndProperties.UpdateProperties(pRev);\r
}else\r
{\r
- this->GetDocument()->GetMainFrame()->m_wndProperties.UpdateProperties(NULL);\r
+ this->GetDocument()->GetMainFrame()->m_wndProperties.UpdateProperties(&m_NoListCommit[m_CommitHash[line]]);\r
}\r
}\r
else\r
{\r
m_SelectedHash.Empty();\r
-// app.m_selecteddate.clear();\r
-// app.m_selectedrev = -2;\r
-// app.m_selectedorigrev = -2;\r
}\r
//::InvalidateRect( NULL, FALSE);\r
this->Invalidate();\r
this->GetDocument()->GetMainFrame()->m_wndProperties.UpdateProperties(pRev);\r
\r
this->Invalidate();\r
+\r
+ int i;\r
+ for(i=0;i<m_CommitHash.size();i++)\r
+ {\r
+ if( pRev->m_CommitHash.ToString() == m_CommitHash[i] )\r
+ break;\r
+ }\r
+ this->GotoLine(i);\r
this->m_TextView.Invalidate();\r
\r
}\r
if (line != m_MouseLine)\r
{\r
m_MouseLine = line;//m_CommitHash[line];\r
-// app.m_selectedorigrev = app.origrevs[line];\r
-// app.m_selectedauthor = app.authors[line];\r
-// app.m_selecteddate = app.dates[line];\r
- \r
+ GitRev *pRev;\r
if(m_ID[line]<0)\r
{\r
- m_ToolTip.AddTool(this,_T(""));\r
- return;\r
+ pRev=&this->m_NoListCommit[m_CommitHash[line]];\r
+\r
+ }else\r
+ {\r
+ pRev=&this->GetLogData()->GetGitRevAt(this->GetLogList()->GetItemCount()-m_ID[line]);\r
}\r
- GitRev *pRev;\r
- pRev=&this->GetLogData()->at(this->GetLogList()->GetItemCount()-m_ID[line]);\r
- //this->GetDocument()->GetMainFrame()->m_wndProperties.UpdateProperties(pRev);\r
+\r
this->ClientToScreen(&point);\r
- //BALLOON_INFO bi;\r
- //if(m_ToolTip.GetTool(this, bi))\r
- //{\r
- // bi.sBalloonTip=pRev->m_CommitHash;\r
- CString str;\r
- str.Format(_T("%s\n<b>%s</b>\n%s\n%s"),pRev->m_CommitHash,\r
+\r
+ CString str;\r
+ str.Format(_T("%s\n<b>%s</b>\n%s %s\n%s"),pRev->m_CommitHash,\r
pRev->m_Subject,\r
+ pRev->m_AuthorName,\r
CAppUtils::FormatDateAndTime( pRev->m_AuthorDate, m_DateFormat ), \r
pRev->m_Body);\r
- m_ToolTip.AddTool(this,str);\r
- m_ToolTip.DisplayToolTip(&point);\r
- //}\r
+ m_ToolTip.AddTool(this,str);\r
+ m_ToolTip.DisplayToolTip(&point);\r
\r
CRect rect;\r
this->ScreenToClient(&point);\r
else\r
{\r
m_MouseLine=-1;\r
-// app.m_selecteddate.clear();\r
-// app.m_selectedrev = -2;\r
-// app.m_selectedorigrev = -2;\r
}\r
- //::InvalidateRect( NULL, FALSE);\r
- //this->Invalidate();\r
}\r
- \r
-// const CString str=_T("this is a <b>Message Balloon</b>\n<hr=100%>\n<ct=0x0000FF>Warning! Warning!</ct>\nSomething unexpected happened");\r
- //CBalloon::ShowBalloon(NULL, point, \r
- // str,\r
- // FALSE, (HICON)IDI_EXCLAMATION,\r
- // (UINT)CBalloon ::BALLOON_RIGHT_TOP, (UINT)CBalloon ::BALLOON_EFFECT_SOLID,(COLORREF)NULL, (COLORREF)NULL, (COLORREF)NULL);\r
}\r
\r
void CTortoiseGitBlameView::OnMouseMove(UINT nFlags, CPoint point)\r
return 0; \r
} \r
\r
+void CTortoiseGitBlameView::OnViewNext()\r
+{\r
+ FindNextLine(this->m_SelectedHash,false);\r
+}\r
+void CTortoiseGitBlameView::OnViewPrev()\r
+{\r
+ FindNextLine(this->m_SelectedHash,true);\r
+}\r
+\r
+int CTortoiseGitBlameView::FindNextLine(CString CommitHash,bool bUpOrDown)\r
+{\r
+ LONG_PTR line = SendEditor(SCI_GETFIRSTVISIBLELINE);\r
+ LONG_PTR startline =line;\r
+ bool findNoMatch =false;\r
+ while(line>=0 && line<m_CommitHash.size())\r
+ {\r
+ if(m_CommitHash[line]!=CommitHash)\r
+ {\r
+ findNoMatch=true;\r
+ }\r
+\r
+ if(m_CommitHash[line] == CommitHash && findNoMatch)\r
+ {\r
+ if( line == startline+2 )\r
+ {\r
+ findNoMatch=false;\r
+ }\r
+ else\r
+ {\r
+ if( bUpOrDown )\r
+ {\r
+ line=FindFirstLine(CommitHash,line);\r
+ }\r
+ SendEditor(SCI_LINESCROLL,0,line-startline-2);\r
+ return line;\r
+ }\r
+ }\r
+ if(bUpOrDown)\r
+ line--;\r
+ else\r
+ line++;\r
+ }\r
+ return -1;\r
+}
\ No newline at end of file