//m_tFrom = (DWORD)-1;\r
\r
m_LogList.m_Path=m_path;\r
+ m_LogList.m_bShowWC = true;\r
m_LogList.FetchLogAsync(this);\r
\r
GetDlgItem(IDC_LOGLIST)->SetFocus();\r
DialogEnableWindow(IDC_STATBUTTON, FALSE);\r
DialogEnableWindow(IDC_REFRESH, FALSE);\r
DialogEnableWindow(IDC_HIDEPATHS,FALSE);\r
+ \r
\r
}else if( cur == GITLOG_END)\r
{\r
\r
+ if(this->m_LogList.HasText())\r
+ {\r
+ this->m_LogList.ClearText();\r
+ //UpdateLogInfoLabel();\r
+ }\r
+\r
+#if 0\r
//if (!m_bShowedAll)\r
DialogEnableWindow(IDC_SHOWWHOLEPROJECT, TRUE);\r
\r
m_LogList.GetTimeRange(begin,end);\r
m_DateFrom.SetTime(&begin);\r
m_DateTo.SetTime(&end);\r
- \r
- \r
- \r
+#endif\r
+\r
}else\r
{\r
if(this->m_LogList.HasText())\r
}else\r
{\r
// set the log message text\r
- pMsgView->SetWindowText(_T("Commit:")+pLogEntry->m_CommitHash+_T("\r\n\r\n"));\r
+ pMsgView->SetWindowText(_T("Commit:")+pLogEntry->m_CommitHash.ToString()+_T("\r\n\r\n"));\r
// turn bug ID's into links if the bugtraq: properties have been set\r
// and we can find a match of those in the log message\r
\r
\r
void CLogDlg::OnBnClickedRefresh()\r
{\r
- m_limit = 0;\r
+ \r
Refresh (true);\r
}\r
\r
void CLogDlg::Refresh (bool /*autoGoOnline*/)\r
{\r
+ m_limit = 0;\r
m_LogList.Refresh();\r
+ FillLogMessageCtrl(false);\r
}\r
\r
\r
file1.Format(_T("%s%s_%s%s"),\r
temppath, \r
(*m_currentChangedArray)[selIndex].GetBaseFilename(),\r
- rev1->m_CommitHash.Left(6),\r
+ rev1->m_CommitHash.ToString().Left(6),\r
(*m_currentChangedArray)[selIndex].GetFileExtension());\r
\r
CString file2;\r
file2.Format(_T("%s\\%s_%s%s"),\r
temppath, \r
(*m_currentChangedArray)[selIndex].GetBaseFilename(),\r
- rev2->m_CommitHash.Left(6),\r
+ rev2->m_CommitHash.ToString().Left(6),\r
(*m_currentChangedArray)[selIndex].GetFileExtension());\r
\r
CString cmd;\r
*pResult = 0;\r
}\r
\r
+class CDateSorter\r
+{\r
+public:\r
+ class CCommitPointer\r
+ {\r
+ public:\r
+ CCommitPointer():m_cont(NULL){}\r
+ CCommitPointer(const CCommitPointer& P_Right)\r
+ : m_cont(NULL)\r
+ {\r
+ *this = P_Right;\r
+ }\r
+\r
+ CCommitPointer& operator = (const CCommitPointer& P_Right)\r
+ {\r
+ if(IsPointer())\r
+ {\r
+ (*m_cont->m_parDates)[m_place] = P_Right.GetDate();\r
+ (*m_cont->m_parFileChanges)[m_place] = P_Right.GetChanges();\r
+ (*m_cont->m_parAuthors)[m_place] = P_Right.GetAuthor();\r
+ }\r
+ else \r
+ {\r
+ m_Date = P_Right.GetDate();\r
+ m_Changes = P_Right.GetChanges();\r
+ m_csAuthor = P_Right.GetAuthor();\r
+ }\r
+ return *this;\r
+ }\r
+\r
+ void Clone(const CCommitPointer& P_Right)\r
+ {\r
+ m_cont = P_Right.m_cont;\r
+ m_place = P_Right.m_place;\r
+ m_Date = P_Right.m_Date;\r
+ m_Changes = P_Right.m_Changes;\r
+ m_csAuthor = P_Right.m_csAuthor;\r
+ }\r
+\r
+ DWORD GetDate() const {return IsPointer() ? (*m_cont->m_parDates)[m_place] : m_Date;}\r
+ DWORD GetChanges() const {return IsPointer() ? (*m_cont->m_parFileChanges)[m_place] : m_Changes;}\r
+ CString GetAuthor() const {return IsPointer() ? (*m_cont->m_parAuthors)[m_place] : m_csAuthor;}\r
+\r
+ bool IsPointer() const {return m_cont != NULL;}\r
+ //When pointer\r
+ CDateSorter* m_cont;\r
+ int m_place;\r
+\r
+ //When element\r
+ DWORD m_Date;\r
+ DWORD m_Changes;\r
+ CString m_csAuthor;\r
+\r
+ };\r
+ class iterator : public std::iterator<std::random_access_iterator_tag, CCommitPointer>\r
+ {\r
+ public:\r
+ CCommitPointer m_ptr;\r
+\r
+ iterator(){}\r
+ iterator(const iterator& P_Right){*this = P_Right;}\r
+ iterator& operator=(const iterator& P_Right)\r
+ {\r
+ m_ptr.Clone(P_Right.m_ptr);\r
+ return *this;\r
+ }\r
+\r
+ CCommitPointer& operator*(){return m_ptr;}\r
+ CCommitPointer* operator->(){return &m_ptr;}\r
+ const CCommitPointer& operator*()const{return m_ptr;}\r
+ const CCommitPointer* operator->()const{return &m_ptr;}\r
+\r
+ iterator& operator+=(size_t P_iOffset){m_ptr.m_place += P_iOffset;return *this;}\r
+ iterator& operator-=(size_t P_iOffset){m_ptr.m_place -= P_iOffset;return *this;}\r
+ iterator operator+(size_t P_iOffset)const{iterator it(*this); it += P_iOffset;return it;}\r
+ iterator operator-(size_t P_iOffset)const{iterator it(*this); it -= P_iOffset;return it;}\r
+\r
+ iterator& operator++(){++m_ptr.m_place;return *this;}\r
+ iterator& operator--(){--m_ptr.m_place;return *this;}\r
+ iterator operator++(int){iterator it(*this);++*this;return it;}\r
+ iterator operator--(int){iterator it(*this);--*this;return it;}\r
+\r
+ size_t operator-(const iterator& P_itRight)const{return m_ptr.m_place - P_itRight->m_place;}\r
+\r
+ bool operator<(const iterator& P_itRight)const{return m_ptr.m_place < P_itRight->m_place;}\r
+ bool operator!=(const iterator& P_itRight)const{return m_ptr.m_place != P_itRight->m_place;}\r
+ bool operator==(const iterator& P_itRight)const{return m_ptr.m_place == P_itRight->m_place;}\r
+ bool operator>(const iterator& P_itRight)const{return m_ptr.m_place > P_itRight->m_place;}\r
+ };\r
+ iterator begin()\r
+ {\r
+ iterator it;\r
+ it->m_place = 0;\r
+ it->m_cont = this;\r
+ return it;\r
+ }\r
+ iterator end()\r
+ {\r
+ iterator it;\r
+ it->m_place = m_parDates->GetCount();\r
+ it->m_cont = this;\r
+ return it;\r
+ }\r
+\r
+ CDWordArray * m_parDates;\r
+ CDWordArray * m_parFileChanges;\r
+ CStringArray * m_parAuthors;\r
+};\r
+\r
+class CDateSorterLess\r
+{\r
+public:\r
+ bool operator () (const CDateSorter::CCommitPointer& P_Left, const CDateSorter::CCommitPointer& P_Right) const\r
+ {\r
+ return P_Left.GetDate() > P_Right.GetDate(); //Last date first\r
+ }\r
+\r
+};\r
+\r
+\r
+\r
void CLogDlg::OnBnClickedStatbutton()\r
{\r
\r
m_arDatesFiltered.Add(pLogEntry->m_AuthorDate.GetTime());\r
m_arFileChangesFiltered.Add(pLogEntry->m_Files.GetCount());\r
}\r
+\r
+ CDateSorter W_Sorter;\r
+ W_Sorter.m_parAuthors = &m_arAuthorsFiltered;\r
+ W_Sorter.m_parDates = &m_arDatesFiltered;\r
+ W_Sorter.m_parFileChanges = &m_arFileChangesFiltered;\r
+ std::sort(W_Sorter.begin(), W_Sorter.end(), CDateSorterLess());\r
+\r
CStatGraphDlg dlg;\r
dlg.m_parAuthors = &m_arAuthorsFiltered;\r
dlg.m_parDates = &m_arDatesFiltered;\r
{\r
if (this->IsThreadRunning())\r
return; //no sorting while the arrays are filled\r
+#if 0\r
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);\r
const int nColumn = pNMLV->iSubItem;\r
m_bAscending = nColumn == m_nSortColumn ? !m_bAscending : TRUE;\r
SortShownListArray();\r
m_LogList.Invalidate();\r
UpdateLogInfoLabel();\r
- \r
+#endif\r
*pResult = 0;\r
}\r
\r