, m_nSortColumn(0)\r
, m_bShowedAll(false)\r
, m_bSelect(false)\r
- , m_regLastStrict(_T("Software\\TortoiseGit\\LastLogStrict"), FALSE)\r
\r
, m_bSelectionMustBeContinuous(false)\r
, m_bShowBugtraqColumn(false)\r
DDX_Control(pDX, IDC_PROGRESS, m_LogProgress);\r
DDX_Control(pDX, IDC_SPLITTERTOP, m_wndSplitter1);\r
DDX_Control(pDX, IDC_SPLITTERBOTTOM, m_wndSplitter2);\r
- DDX_Check(pDX, IDC_CHECK_STOPONCOPY, m_bStrict);\r
DDX_Text(pDX, IDC_SEARCHEDIT, m_LogList.m_sFilterText);\r
DDX_Control(pDX, IDC_DATEFROM, m_DateFrom);\r
DDX_Control(pDX, IDC_DATETO, m_DateTo);\r
DDX_Control(pDX, IDC_HIDEPATHS, m_cHidePaths);\r
DDX_Control(pDX, IDC_GETALL, m_btnShow);\r
+ DDX_Control(pDX, IDC_SHOWWHOLEPROJECT,m_btnShowWholeProject);\r
DDX_Text(pDX, IDC_LOGINFO, m_sLogInfo);\r
DDX_Check(pDX, IDC_INCLUDEMERGE, m_bIncludeMerges);\r
DDX_Control(pDX, IDC_SEARCHEDIT, m_cFilter);\r
\r
ON_MESSAGE(WM_FILTEREDIT_INFOCLICKED, OnClickedInfoIcon)\r
ON_MESSAGE(WM_FILTEREDIT_CANCELCLICKED, OnClickedCancelFilter)\r
+\r
+ ON_MESSAGE(MSG_LOAD_PERCENTAGE,OnLogListLoading)\r
\r
ON_EN_CHANGE(IDC_SEARCHEDIT, OnEnChangeSearchedit)\r
ON_WM_TIMER()\r
ON_NOTIFY(DTN_DATETIMECHANGE, IDC_DATETO, OnDtnDatetimechangeDateto)\r
ON_NOTIFY(DTN_DATETIMECHANGE, IDC_DATEFROM, OnDtnDatetimechangeDatefrom)\r
- ON_BN_CLICKED(IDC_NEXTHUNDRED, OnBnClickedNexthundred)\r
+ ON_BN_CLICKED(IDC_SHOWWHOLEPROJECT, OnBnClickShowWholeProject)\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_LOGMSG, OnLvnColumnclickChangedFileList)\r
ON_BN_CLICKED(IDC_HIDEPATHS, OnBnClickedHidepaths)\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
ON_WM_SIZE()\r
ON_COMMAND(ID_EDIT_COPY, &CLogDlg::OnEditCopy)\r
END_MESSAGE_MAP()\r
\r
-void CLogDlg::SetParams(const CTGitPath& path, GitRev pegrev, GitRev startrev, GitRev endrev, int limit, BOOL bStrict /* = FALSE */, BOOL bSaveStrict /* = TRUE */)\r
+void CLogDlg::SetParams(const CTGitPath& path, GitRev pegrev, GitRev startrev, GitRev endrev, int limit /* = FALSE */)\r
{\r
m_path = path;\r
m_pegrev = pegrev;\r
m_LogRevision = startrev;\r
m_endrev = endrev;\r
m_hasWC = !path.IsUrl();\r
- m_bStrict = bStrict;\r
- m_bSaveStrict = bSaveStrict;\r
m_limit = limit;\r
if (::IsWindow(m_hWnd))\r
UpdateData(FALSE);\r
\r
BOOL CLogDlg::OnInitDialog()\r
{\r
+ CString temp;\r
CResizableStandAloneDialog::OnInitDialog();\r
\r
m_hAccel = LoadAccelerators(AfxGetResourceHandle(),MAKEINTRESOURCE(IDR_ACC_LOGDLG));\r
m_bVista = (fullver >= 0x0600);\r
\r
// use the state of the "stop on copy/rename" option from the last time\r
- if (!m_bStrict)\r
- m_bStrict = m_regLastStrict;\r
UpdateData(FALSE);\r
- CString temp;\r
- if (m_limit)\r
- temp.Format(IDS_LOG_SHOWNEXT, m_limit);\r
- else\r
- temp.Format(IDS_LOG_SHOWNEXT, (int)(DWORD)CRegDWORD(_T("Software\\TortoiseGit\\NumberOfLogs"), 100));\r
-\r
- SetDlgItemText(IDC_NEXTHUNDRED, temp);\r
-\r
+ \r
// set the font to use in the log message view, configured in the settings dialog\r
CAppUtils::CreateFontForLogs(m_logFont);\r
GetDlgItem(IDC_MSGVIEW)->SetFont(&m_logFont);\r
m_LogList.DeleteAllItems();\r
m_LogList.InsertGitColumn();\r
\r
- m_ChangedFileListCtrl.Init(SVNSLC_COLEXT | SVNSLC_COLSTATUS |IDS_STATUSLIST_COLADD|IDS_STATUSLIST_COLDEL , _T("LogDlg"));\r
+ m_ChangedFileListCtrl.Init(SVNSLC_COLEXT | SVNSLC_COLSTATUS |IDS_STATUSLIST_COLADD|IDS_STATUSLIST_COLDEL , _T("LogDlg"),(SVNSLC_POPALL ^ SVNSLC_POPCOMMIT),false);\r
\r
GetDlgItem(IDC_LOGLIST)->UpdateData(FALSE);\r
\r
m_cFilter.SetValidator(this);\r
\r
AdjustControlSize(IDC_HIDEPATHS);\r
- AdjustControlSize(IDC_CHECK_STOPONCOPY);\r
AdjustControlSize(IDC_INCLUDEMERGE);\r
\r
GetClientRect(m_DlgOrigRect);\r
\r
AddAnchor(IDC_LOGINFO, BOTTOM_LEFT, BOTTOM_RIGHT); \r
AddAnchor(IDC_HIDEPATHS, BOTTOM_LEFT); \r
- AddAnchor(IDC_CHECK_STOPONCOPY, BOTTOM_LEFT);\r
AddAnchor(IDC_INCLUDEMERGE, BOTTOM_LEFT);\r
AddAnchor(IDC_GETALL, BOTTOM_LEFT);\r
- AddAnchor(IDC_NEXTHUNDRED, BOTTOM_LEFT);\r
+ AddAnchor(IDC_SHOWWHOLEPROJECT, BOTTOM_LEFT);\r
AddAnchor(IDC_REFRESH, BOTTOM_LEFT);\r
AddAnchor(IDC_STATBUTTON, BOTTOM_RIGHT);\r
AddAnchor(IDC_PROGRESS, BOTTOM_LEFT, BOTTOM_RIGHT);\r
// set the choices for the "Show All" button\r
temp.LoadString(IDS_LOG_SHOWALL);\r
m_btnShow.AddEntry(temp);\r
- temp.LoadString(IDS_LOG_SHOW_WHOLE);\r
+ CString format;\r
+ format.LoadString(IDS_LOG_SHOW_CURRENT_BRANCH);\r
+ temp.Format(format,g_Git.GetCurrentBranch());\r
+ m_btnShow.AddEntry(temp);\r
+ temp.LoadString(IDS_LOG_SHOW_FIRST_PARENT);\r
+ m_btnShow.AddEntry(temp);\r
+ temp.LoadString(IDS_LOG_SHOW_NO_MERGE);\r
m_btnShow.AddEntry(temp);\r
m_btnShow.SetCurrentEntry((LONG)CRegDWORD(_T("Software\\TortoiseGit\\ShowAllEntry")));\r
\r
+ temp.LoadString(IDS_LOG_SHOW_WHOLE);\r
+ this->m_btnShowWholeProject.AddEntry(temp);\r
+ format.LoadString(IDS_LOG_SHOW_CURRENT_PATH);\r
+ temp.Format(format,m_path.GetGitPathString());\r
+ if(!m_path.IsEmpty())\r
+ {\r
+ this->m_btnShowWholeProject.AddEntry(temp);\r
+ this->m_btnShowWholeProject.SetCurrentEntry((LONG)CRegDWORD(_T("Software\\TortoiseGit\\ShowWholeProject")));\r
+ }\r
+\r
+\r
m_mergedRevs.clear();\r
\r
// first start a thread to obtain the log messages without\r
//m_tFrom = (DWORD)-1;\r
\r
m_LogList.m_Path=m_path;\r
- m_LogList.FetchLogAsync(LogCallBack,this);\r
+ m_LogList.FetchLogAsync(this);\r
\r
GetDlgItem(IDC_LOGLIST)->SetFocus();\r
return FALSE;\r
}\r
\r
-void CLogDlg::LogRunStatus(int cur)\r
+LRESULT CLogDlg::OnLogListLoading(WPARAM wParam, LPARAM lParam)\r
{\r
+ int cur=(int)wParam;\r
+\r
if( cur == GITLOG_START )\r
{\r
CString temp;\r
temp.LoadString(IDS_PROGRESSWAIT);\r
\r
+ this->m_LogList.ShowText(temp, true);\r
+\r
// change the text of the close button to "Cancel" since now the thread\r
// is running, and simply closing the dialog doesn't work.\r
if (!GetDlgItem(IDOK)->IsWindowVisible())\r
GetDlgItem(IDC_PROGRESS)->ShowWindow(TRUE);\r
\r
//DialogEnableWindow(IDC_GETALL, FALSE);\r
- DialogEnableWindow(IDC_NEXTHUNDRED, FALSE);\r
- DialogEnableWindow(IDC_CHECK_STOPONCOPY, FALSE);\r
- DialogEnableWindow(IDC_INCLUDEMERGE, FALSE);\r
+ //DialogEnableWindow(IDC_SHOWWHOLEPROJECT, FALSE);\r
+ //DialogEnableWindow(IDC_INCLUDEMERGE, FALSE);\r
DialogEnableWindow(IDC_STATBUTTON, FALSE);\r
DialogEnableWindow(IDC_REFRESH, FALSE);\r
DialogEnableWindow(IDC_HIDEPATHS,FALSE);\r
- }\r
\r
- if( cur == GITLOG_END)\r
+ }else if( cur == GITLOG_END)\r
{\r
\r
- if (!m_bShowedAll)\r
- DialogEnableWindow(IDC_NEXTHUNDRED, TRUE);\r
+ //if (!m_bShowedAll)\r
+ DialogEnableWindow(IDC_SHOWWHOLEPROJECT, TRUE);\r
\r
DialogEnableWindow(IDC_GETALL, TRUE);\r
- //DialogEnableWindow(IDC_INCLUDEMERGE, TRUE);\r
+ DialogEnableWindow(IDC_INCLUDEMERGE, TRUE);\r
DialogEnableWindow(IDC_STATBUTTON, TRUE);\r
DialogEnableWindow(IDC_REFRESH, TRUE);\r
+ DialogEnableWindow(IDC_HIDEPATHS,TRUE);\r
\r
- PostMessage(WM_TIMER, LOGFILTER_TIMER);\r
-\r
+// PostMessage(WM_TIMER, LOGFILTER_TIMER);\r
+ GetDlgItem(IDC_PROGRESS)->ShowWindow(FALSE);\r
//CTime time=m_LogList.GetOldestTime();\r
CTime begin,end;\r
m_LogList.GetTimeRange(begin,end);\r
m_DateFrom.SetTime(&begin);\r
m_DateTo.SetTime(&end);\r
- }\r
\r
- m_LogProgress.SetPos(cur);\r
+ \r
+ }else\r
+ {\r
+ if(this->m_LogList.HasText())\r
+ this->m_LogList.ClearText();\r
+ m_LogProgress.SetPos(cur);\r
+ }\r
+ return 0;\r
}\r
void CLogDlg::SetDlgTitle(bool bOffline)\r
{\r
m_ProjectProperties.FindBugID(pLogEntry->m_Body, pMsgView);\r
CAppUtils::FormatTextInRichEditControl(pMsgView);\r
\r
+ int HidePaths=m_cHidePaths.GetState() & 0x0003;\r
+ CString matchpath=this->m_path.GetGitPathString();\r
+\r
+ for(int i=0;i<pLogEntry->m_Files.GetCount() && (!matchpath.IsEmpty());i++)\r
+ {\r
+ ((CTGitPath&)pLogEntry->m_Files[i]).m_Action &= ~(CTGitPath::LOGACTIONS_HIDE|CTGitPath::LOGACTIONS_GRAY);\r
+ \r
+ if(pLogEntry->m_Files[i].GetGitPathString().Left(matchpath.GetLength()) != matchpath)\r
+ {\r
+ if(HidePaths==BST_CHECKED)\r
+ ((CTGitPath&)pLogEntry->m_Files[i]).m_Action |= CTGitPath::LOGACTIONS_HIDE;\r
+ if(HidePaths==BST_INDETERMINATE)\r
+ ((CTGitPath&)pLogEntry->m_Files[i]).m_Action |= CTGitPath::LOGACTIONS_GRAY;\r
+ }\r
+ }\r
m_ChangedFileListCtrl.UpdateWithGitPathList(pLogEntry->m_Files);\r
m_ChangedFileListCtrl.m_CurrentVersion=pLogEntry->m_CommitHash;\r
m_ChangedFileListCtrl.Show(SVNSLC_SHOWVERSIONED);\r
m_ChangedFileListCtrl.SetRedraw(TRUE);\r
return;\r
}\r
-#if 0\r
- // fill in the changed files list control\r
- if ((m_cHidePaths.GetState() & 0x0003)==BST_CHECKED)\r
- {\r
- m_CurrentFilteredChangedArray.RemoveAll();\r
- for (INT_PTR c = 0; c < m_currentChangedArray->GetCount(); ++c)\r
- {\r
- LogChangedPath * cpath = m_currentChangedArray->GetAt(c);\r
- if (cpath == NULL)\r
- continue;\r
- if (m_currentChangedArray->GetAt(c)->sPath.Left(m_sRelativeRoot.GetLength()).Compare(m_sRelativeRoot)==0)\r
- {\r
- m_CurrentFilteredChangedArray.Add(cpath);\r
- }\r
- }\r
- m_currentChangedArray = &m_CurrentFilteredChangedArray;\r
- }\r
-#endif\r
+\r
}\r
else\r
{\r
m_ChangedFileListCtrl.Invalidate();\r
}\r
#endif\r
- CAppUtils::ResizeAllListCtrlCols(&m_ChangedFileListCtrl);\r
// sort according to the settings\r
if (m_nSortColumnPathList > 0)\r
SetSortArrow(&m_ChangedFileListCtrl, m_nSortColumnPathList, m_bAscendingPathList);\r
GetAll();\r
}\r
\r
-void CLogDlg::GetAll(bool bForceAll /* = false */)\r
+void CLogDlg::GetAll(bool bIsShowProjectOrBranch)\r
{\r
\r
// fetch all requested log messages, either the specified range or\r
// really *all* available log messages.\r
///UpdateData();\r
- INT_PTR entry = m_btnShow.GetCurrentEntry();\r
- if (bForceAll)\r
- entry = 0;\r
+ if(bIsShowProjectOrBranch)\r
+ {\r
+ INT_PTR entry = this->m_btnShowWholeProject.GetCurrentEntry();\r
+ switch (entry)\r
+ {\r
+ case 0: // show whole Project\r
+ m_LogList.m_Path.Reset();\r
+ SetWindowText(m_sTitle + _T(" - ")+_T("whole project"));\r
+ break;\r
+ case 1: // show whole project\r
+ m_LogList.m_Path=this->m_path;\r
+ SetWindowText(m_sTitle + _T(" - ")+this->m_path.GetGitPathString());\r
+ break;\r
+ }\r
\r
- switch (entry)\r
+ }else\r
{\r
- case 0: // show all branch;\r
- m_LogList.m_bAllBranch=true;\r
- break;\r
- case 1: // show whole project\r
- m_LogList.m_Path.Reset();\r
- SetWindowText(m_sTitle + _T(" - "));\r
- break;\r
+ INT_PTR entry = m_btnShow.GetCurrentEntry();\r
+ switch (entry)\r
+ {\r
+ case 0: // show all branch\r
+ m_LogList.m_ShowMask=CGit::LOG_INFO_ALL_BRANCH;\r
+ break;\r
+ case 1: // show current branch\r
+ m_LogList.m_ShowMask=0;\r
+ break;\r
+ case 2: // first parent\r
+ m_LogList.m_ShowMask=CGit::LOG_INFO_FIRST_PARENT;\r
+ break;\r
+ case 3: // no merge\r
+ m_LogList.m_ShowMask=CGit::LOG_INFO_NO_MERGE;\r
+ break;\r
+ }\r
}\r
+\r
m_LogList.m_bExitThread=TRUE;\r
- ::WaitForSingleObject(m_LogList.m_LoadingThread->m_hThread,INFINITE);\r
+ DWORD ret =::WaitForSingleObject(m_LogList.m_LoadingThread->m_hThread,20000);\r
+ if(ret == WAIT_TIMEOUT)\r
+ m_LogList.TerminateThread();\r
\r
m_LogList.Clear();\r
- m_LogList.FetchLogAsync(LogCallBack,this);\r
-#if 0\r
- m_ChangedFileListCtrl.SetItemCountEx(0);\r
- m_ChangedFileListCtrl.Invalidate();\r
- // We need to create CStoreSelection on the heap or else\r
- // the variable will run out of the scope before the\r
- // thread ends. Therefore we let the thread delete\r
- // the instance.\r
- m_pStoreSelection = new CStoreSelection(this);\r
- m_LogList.SetItemCountEx(0);\r
- m_LogList.Invalidate();\r
- InterlockedExchange(&m_bNoDispUpdates, TRUE);\r
- CWnd * pMsgView = GetDlgItem(IDC_MSGVIEW);\r
- pMsgView->SetWindowText(_T(""));\r
-\r
- SetSortArrow(&m_LogList, -1, true);\r
-\r
- m_LogList.DeleteAllItems();\r
- m_arShownList.RemoveAll();\r
- m_logEntries.ClearAll();\r
-\r
- m_logcounter = 0;\r
- m_bCancelled = FALSE;\r
- m_tTo = 0;\r
- m_tFrom = (DWORD)-1;\r
- m_limit = 0;\r
+ m_LogList.FetchLogAsync(this);\r
\r
- InterlockedExchange(&m_bThreadRunning, TRUE);\r
- if (AfxBeginThread(LogThreadEntry, this)==NULL)\r
- {\r
- InterlockedExchange(&m_bThreadRunning, FALSE);\r
- CMessageBox::Show(NULL, IDS_ERR_THREADSTARTFAILED, IDS_APPNAME, MB_OK | MB_ICONERROR);\r
- }\r
- GetDlgItem(IDC_LOGLIST)->UpdateData(FALSE);\r
- InterlockedExchange(&m_bNoDispUpdates, FALSE);\r
-#endif\r
}\r
\r
void CLogDlg::OnBnClickedRefresh()\r
m_LogList.Refresh();\r
}\r
\r
-void CLogDlg::OnBnClickedNexthundred()\r
+void CLogDlg::OnBnClickShowWholeProject()\r
{\r
-#if 0\r
- UpdateData();\r
- // we have to fetch the next X log messages.\r
- if (m_logEntries.size() < 1)\r
- {\r
- // since there weren't any log messages fetched before, just\r
- // fetch all since we don't have an 'anchor' to fetch the 'next'\r
- // messages from.\r
- return GetAll(true);\r
- }\r
- git_revnum_t rev = m_logEntries[m_logEntries.size()-1]->Rev;\r
-\r
- if (rev < 1)\r
- return; // do nothing! No more revisions to get\r
-\r
- m_startrev = rev;\r
- m_endrev = 0;\r
- m_bCancelled = FALSE;\r
-\r
- // rev is is revision we already have and we will receive it again\r
- // -> fetch one extra revision to get NumberOfLogs *new* revisions\r
-\r
- m_limit = (int)(DWORD)CRegDWORD(_T("Software\\TortoiseGit\\NumberOfLogs"), 100) +1;\r
- InterlockedExchange(&m_bNoDispUpdates, TRUE);\r
- SetSortArrow(&m_LogList, -1, true);\r
- InterlockedExchange(&m_bThreadRunning, TRUE);\r
- // We need to create CStoreSelection on the heap or else\r
- // the variable will run out of the scope before the\r
- // thread ends. Therefore we let the thread delete\r
- // the instance.\r
- m_pStoreSelection = new CStoreSelection(this);\r
-\r
- // since we fetch the log from the last revision we already have,\r
- // we have to remove that revision entry to avoid getting it twice\r
- m_logEntries.pop_back();\r
- if (AfxBeginThread(LogThreadEntry, this)==NULL)\r
- {\r
- InterlockedExchange(&m_bThreadRunning, FALSE);\r
- CMessageBox::Show(NULL, IDS_ERR_THREADSTARTFAILED, IDS_APPNAME, MB_OK | MB_ICONERROR);\r
- }\r
- InterlockedExchange(&m_bNoDispUpdates, TRUE);\r
- GetDlgItem(IDC_LOGLIST)->UpdateData(FALSE);\r
-#endif\r
+ GetAll(true);\r
}\r
\r
BOOL CLogDlg::Cancel()\r
{\r
//m_bCancelled = true;\r
//return;\r
- m_LogList.TerminateThread();\r
+ if(m_LogList.m_bThreadRunning)\r
+ {\r
+ //m_LogList.m_bExitThread=true;\r
+ //WaitForSingleObject(m_LogList.m_LoadingThread->m_hThread,INFINITE);\r
+ m_LogList.TerminateThread();\r
+ }\r
+\r
+ //m_LogList.TerminateThread();\r
}\r
UpdateData();\r
- if (m_bSaveStrict)\r
- m_regLastStrict = m_bStrict;\r
+ \r
CRegDWORD reg = CRegDWORD(_T("Software\\TortoiseGit\\ShowAllEntry"));\r
reg = m_btnShow.GetCurrentEntry();\r
+\r
+ reg = CRegDWORD(_T("Software\\TortoiseGit\\ShowWholeProject"));\r
+ reg = m_btnShowWholeProject.GetCurrentEntry();\r
+\r
SaveSplitterPos();\r
__super::OnCancel();\r
}\r
}\r
}\r
UpdateData();\r
- if (m_bSaveStrict)\r
- m_regLastStrict = m_bStrict;\r
CRegDWORD reg = CRegDWORD(_T("Software\\TortoiseGit\\ShowAllEntry"));\r
reg = m_btnShow.GetCurrentEntry();\r
SaveSplitterPos();\r
m_nSearchIndex = pNMLV->iItem;\r
if (pNMLV->iSubItem != 0)\r
return;\r
- if ((pNMLV->iItem == m_LogList.m_arShownList.GetCount())&&(m_bStrict)&&(1/*m_bStrictStopped*/))\r
+ if ((pNMLV->iItem == m_LogList.m_arShownList.GetCount()))\r
{\r
// remove the selected state\r
if (pNMLV->uChanged & LVIF_STATE)\r
SortShownListArray();\r
m_LogList.Invalidate();\r
UpdateLogInfoLabel();\r
- // the "next 100" button only makes sense if the log messages\r
- // are sorted by revision in descending order\r
- if ((m_nSortColumn)||(m_bAscending))\r
- {\r
- DialogEnableWindow(IDC_NEXTHUNDRED, false);\r
- }\r
- else\r
- {\r
- DialogEnableWindow(IDC_NEXTHUNDRED, true);\r
- }\r
+ \r
*pResult = 0;\r
}\r
\r
return 0;\r
}\r
\r
-#if 0\r
-void CLogDlg::ResizeAllListCtrlCols()\r
-{\r
-\r
- const int nMinimumWidth = ICONITEMBORDER+16*4;\r
- int maxcol = ((CHeaderCtrl*)(m_LogList.GetDlgItem(0)))->GetItemCount()-1;\r
- int nItemCount = m_LogList.GetItemCount();\r
- TCHAR textbuf[MAX_PATH];\r
- CHeaderCtrl * pHdrCtrl = (CHeaderCtrl*)(m_LogList.GetDlgItem(0));\r
- if (pHdrCtrl)\r
- {\r
- for (int col = 0; col <= maxcol; col++)\r
- {\r
- HDITEM hdi = {0};\r
- hdi.mask = HDI_TEXT;\r
- hdi.pszText = textbuf;\r
- hdi.cchTextMax = sizeof(textbuf);\r
- pHdrCtrl->GetItem(col, &hdi);\r
- int cx = m_LogList.GetStringWidth(hdi.pszText)+20; // 20 pixels for col separator and margin\r
- for (int index = 0; index<nItemCount; ++index)\r
- {\r
- // get the width of the string and add 14 pixels for the column separator and margins\r
- int linewidth = m_LogList.GetStringWidth(m_LogList.GetItemText(index, col)) + 14;\r
- if (index < m_arShownList.GetCount())\r
- {\r
- GitRev * pCurLogEntry = reinterpret_cast<GitRev*>(m_arShownList.GetAt(index));\r
- if ((pCurLogEntry)&&(pCurLogEntry->m_CommitHash == m_wcRev.m_CommitHash))\r
- {\r
- // set the bold font and ask for the string width again\r
- m_LogList.SendMessage(WM_SETFONT, (WPARAM)m_boldFont, NULL);\r
- linewidth = m_LogList.GetStringWidth(m_LogList.GetItemText(index, col)) + 14;\r
- // restore the system font\r
- m_LogList.SendMessage(WM_SETFONT, NULL, NULL);\r
- }\r
- }\r
- if (index == 0)\r
- {\r
- // add the image size\r
- CImageList * pImgList = m_LogList.GetImageList(LVSIL_SMALL);\r
- if ((pImgList)&&(pImgList->GetImageCount()))\r
- {\r
- IMAGEINFO imginfo;\r
- pImgList->GetImageInfo(0, &imginfo);\r
- linewidth += (imginfo.rcImage.right - imginfo.rcImage.left);\r
- linewidth += 3; // 3 pixels between icon and text\r
- }\r
- }\r
- if (cx < linewidth)\r
- cx = linewidth;\r
- }\r
- // Adjust columns "Actions" containing icons\r
- if (col == this->LOGLIST_ACTION)\r
- {\r
- if (cx < nMinimumWidth)\r
- {\r
- cx = nMinimumWidth;\r
- }\r
- }\r
- \r
- if (col == this->LOGLIST_MESSAGE)\r
- {\r
- if (cx > LOGLIST_MESSAGE_MAX)\r
- {\r
- cx = LOGLIST_MESSAGE_MAX;\r
- }\r
-\r
- }\r
- // keep the bug id column small\r
- if ((col == 4)&&(m_bShowBugtraqColumn))\r
- {\r
- if (cx > (int)(DWORD)m_regMaxBugIDColWidth)\r
- {\r
- cx = (int)(DWORD)m_regMaxBugIDColWidth;\r
- }\r
- }\r
-\r
- m_LogList.SetColumnWidth(col, cx);\r
- }\r
- }\r
-\r
-}\r
-#endif\r
-\r
void CLogDlg::OnBnClickedHidepaths()\r
{\r
FillLogMessageCtrl();\r