OSDN Git Service

Add Setting Dialog
[tortoisegit/TortoiseGitJp.git] / src / TortoiseProc / LogDlg.cpp
index 758d7b6..f098c66 100644 (file)
@@ -1,12 +1,9 @@
 // TortoiseGit - a Windows shell extension for easy version control\r
-\r
 // Copyright (C) 2003-2008 - TortoiseGit\r
-\r
 // This program is free software; you can redistribute it and/or\r
 // modify it under the terms of the GNU General Public License\r
 // as published by the Free Software Foundation; either version 2\r
 // of the License, or (at your option) any later version.\r
-\r
 // This program is distributed in the hope that it will be useful,\r
 // but WITHOUT ANY WARRANTY; without even the implied warranty of\r
 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
@@ -53,8 +50,6 @@
 const UINT CLogDlg::m_FindDialogMessage = RegisterWindowMessage(FINDMSGSTRING);\r
 \r
 \r
-\r
-\r
 IMPLEMENT_DYNAMIC(CLogDlg, CResizableStandAloneDialog)\r
 CLogDlg::CLogDlg(CWnd* pParent /*=NULL*/)\r
        : CResizableStandAloneDialog(CLogDlg::IDD, pParent)\r
@@ -94,9 +89,6 @@ CLogDlg::~CLogDlg()
        \r
     m_CurrentFilteredChangedArray.RemoveAll();\r
        \r
-\r
-\r
-       \r
 }\r
 \r
 void CLogDlg::DoDataExchange(CDataExchange* pDX)\r
@@ -108,7 +100,7 @@ void CLogDlg::DoDataExchange(CDataExchange* pDX)
        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_sFilterText);\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
@@ -353,8 +345,8 @@ BOOL CLogDlg::OnInitDialog()
 \r
        // first start a thread to obtain the log messages without\r
        // blocking the dialog\r
-       m_tTo = 0;\r
-       m_tFrom = (DWORD)-1;\r
+       //m_tTo = 0;\r
+       //m_tFrom = (DWORD)-1;\r
 \r
        m_LogList.FetchLogAsync(LogCallBack,this);\r
 \r
@@ -405,6 +397,11 @@ void CLogDlg::LogRunStatus(int cur)
 \r
                PostMessage(WM_TIMER, LOGFILTER_TIMER);\r
 \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
@@ -515,19 +512,25 @@ void CLogDlg::FillLogMessageCtrl(bool bShow /* = true*/)
                }\r
                GitRev* pLogEntry = reinterpret_cast<GitRev *>(m_LogList.m_arShownList.GetAt(selIndex));\r
 \r
-               // set the log message text\r
-               pMsgView->SetWindowText(_T("Commit:")+pLogEntry->m_CommitHash+_T("\r\n\r\n*")+pLogEntry->m_Subject+_T("\n\n")+pLogEntry->m_Body);\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
-               m_ProjectProperties.FindBugID(pLogEntry->m_Body, pMsgView);\r
-               CAppUtils::FormatTextInRichEditControl(pMsgView);\r
+               if(!pLogEntry->m_IsFull)\r
+               {\r
+                       pMsgView->SetWindowText(_T("load ..."));\r
+               }else\r
+               {\r
+                       // set the log message text\r
+                       pMsgView->SetWindowText(_T("Commit:")+pLogEntry->m_CommitHash+_T("\r\n\r\n*")+pLogEntry->m_Subject+_T("\n\n")+pLogEntry->m_Body);\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
+                       m_ProjectProperties.FindBugID(pLogEntry->m_Body, pMsgView);\r
+                       CAppUtils::FormatTextInRichEditControl(pMsgView);\r
 \r
-               m_ChangedFileListCtrl.UpdateWithGitPathList(pLogEntry->m_Files);\r
-               m_ChangedFileListCtrl.m_CurrentVersion=pLogEntry->m_CommitHash;\r
-               m_ChangedFileListCtrl.Show(0);\r
+                       m_ChangedFileListCtrl.UpdateWithGitPathList(pLogEntry->m_Files);\r
+                       m_ChangedFileListCtrl.m_CurrentVersion=pLogEntry->m_CommitHash;\r
+                       m_ChangedFileListCtrl.Show(SVNSLC_SHOWVERSIONED);\r
 \r
-               m_ChangedFileListCtrl.SetRedraw(TRUE);\r
-               return;\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
@@ -558,6 +561,7 @@ void CLogDlg::FillLogMessageCtrl(bool bShow /* = true*/)
        \r
        // redraw the views\r
 //     InterlockedExchange(&m_bNoDispUpdates, FALSE);\r
+#if 0\r
        if (m_currentChangedArray)\r
        {\r
                m_ChangedFileListCtrl.SetItemCountEx(m_currentChangedArray->GetCount());\r
@@ -573,6 +577,7 @@ void CLogDlg::FillLogMessageCtrl(bool bShow /* = true*/)
                m_ChangedFileListCtrl.SetItemCountEx(0);\r
                m_ChangedFileListCtrl.Invalidate();\r
        }\r
+#endif\r
        CAppUtils::ResizeAllListCtrlCols(&m_ChangedFileListCtrl);\r
        // sort according to the settings\r
        if (m_nSortColumnPathList > 0)\r
@@ -2318,42 +2323,28 @@ LRESULT CLogDlg::OnClickedInfoIcon(WPARAM /*wParam*/, LPARAM lParam)
 \r
 LRESULT CLogDlg::OnClickedCancelFilter(WPARAM /*wParam*/, LPARAM /*lParam*/)\r
 {\r
-#if 0\r
+\r
        KillTimer(LOGFILTER_TIMER);\r
 \r
-       m_sFilterText.Empty();\r
+       m_LogList.m_sFilterText.Empty();\r
        UpdateData(FALSE);\r
        theApp.DoWaitCursor(1);\r
        CStoreSelection storeselection(this);\r
        FillLogMessageCtrl(false);\r
-       InterlockedExchange(&m_bNoDispUpdates, TRUE);\r
-       m_arShownList.RemoveAll();\r
 \r
-       // reset the time filter too\r
-       m_timFrom = (__time64_t(m_tFrom));\r
-       m_timTo = (__time64_t(m_tTo));\r
-       m_DateFrom.SetTime(&m_timFrom);\r
-       m_DateTo.SetTime(&m_timTo);\r
-       m_DateFrom.SetRange(&m_timFrom, &m_timTo);\r
-       m_DateTo.SetRange(&m_timFrom, &m_timTo);\r
+       m_LogList.RemoveFilter();\r
+\r
+       CTime begin,end;\r
+       m_LogList.GetTimeRange(begin,end);\r
+       m_DateFrom.SetTime(&begin);\r
+       m_DateTo.SetTime(&end);\r
 \r
-       for (DWORD i=0; i<m_logEntries.size(); ++i)\r
-       {\r
-               m_arShownList.Add(m_logEntries[i]);\r
-       }\r
-       InterlockedExchange(&m_bNoDispUpdates, FALSE);\r
-       m_LogList.DeleteAllItems();\r
-       m_LogList.SetItemCountEx(ShownCountWithStopped());\r
-       m_LogList.RedrawItems(0, ShownCountWithStopped());\r
-       m_LogList.SetRedraw(false);\r
-       ResizeAllListCtrlCols();\r
-       m_LogList.SetRedraw(true);\r
        theApp.DoWaitCursor(-1);\r
        GetDlgItem(IDC_SEARCHEDIT)->ShowWindow(SW_HIDE);\r
        GetDlgItem(IDC_SEARCHEDIT)->ShowWindow(SW_SHOW);\r
        GetDlgItem(IDC_SEARCHEDIT)->SetFocus();\r
        UpdateLogInfoLabel();\r
-#endif\r
+\r
        return 0L;      \r
 }\r
 \r
@@ -2383,205 +2374,13 @@ void CLogDlg::SetFilterCueText()
        temp = _T("   ")+temp;\r
        m_cFilter.SetCueBanner(temp);\r
 }\r
-#if 0\r
-void CLogDlg::OnLvnGetdispinfoLoglist(NMHDR *pNMHDR, LRESULT *pResult)\r
-{\r
-       NMLVDISPINFO *pDispInfo = reinterpret_cast<NMLVDISPINFO*>(pNMHDR);\r
-\r
-       // Create a pointer to the item\r
-       LV_ITEM* pItem = &(pDispInfo)->item;\r
-\r
-       // Do the list need text information?\r
-       if (!(pItem->mask & LVIF_TEXT))\r
-               return;\r
-\r
-       // By default, clear text buffer.\r
-       lstrcpyn(pItem->pszText, _T(""), pItem->cchTextMax);\r
-\r
-       bool bOutOfRange = pItem->iItem >= ShownCountWithStopped();\r
-       \r
-       *pResult = 0;\r
-       if (m_bNoDispUpdates || m_bThreadRunning || bOutOfRange)\r
-               return;\r
-\r
-       // Which item number?\r
-       int itemid = pItem->iItem;\r
-       GitRev * pLogEntry = NULL;\r
-       if (itemid < m_arShownList.GetCount())\r
-               pLogEntry = reinterpret_cast<GitRev*>(m_arShownList.GetAt(pItem->iItem));\r
-    \r
-       // Which column?\r
-       switch (pItem->iSubItem)\r
-       {\r
-       case this->LOGLIST_GRAPH:       //Graphic\r
-               if (pLogEntry)\r
-               {\r
-               }\r
-               break;\r
-       case this->LOGLIST_ACTION: //action -- no text in the column\r
-               break;\r
-       case this->LOGLIST_MESSAGE: //Message\r
-               if (pLogEntry)\r
-                       lstrcpyn(pItem->pszText, (LPCTSTR)pLogEntry->m_Subject, pItem->cchTextMax);\r
-               break;\r
-       case this->LOGLIST_AUTHOR: //Author\r
-               if (pLogEntry)\r
-                       lstrcpyn(pItem->pszText, (LPCTSTR)pLogEntry->m_AuthorName, pItem->cchTextMax);\r
-               break;\r
-       case this->LOGLIST_DATE: //Date\r
-               if (pLogEntry)\r
-                       lstrcpyn(pItem->pszText, (LPCTSTR)pLogEntry->m_AuthorDate.Format(_T("%Y-%m-%d %H:%M")), pItem->cchTextMax);\r
-               break;\r
-               \r
-       case 5:\r
-\r
-               break;\r
-       default:\r
-               ASSERT(false);\r
-       }\r
-}\r
-#endif\r
-void CLogDlg::OnLvnGetdispinfoChangedFileList(NMHDR *pNMHDR, LRESULT *pResult)\r
-{\r
-\r
-#if 0\r
-       NMLVDISPINFO *pDispInfo = reinterpret_cast<NMLVDISPINFO*>(pNMHDR);\r
-\r
-       //Create a pointer to the item\r
-       LV_ITEM* pItem= &(pDispInfo)->item;\r
-\r
-       *pResult = 0;\r
-       if ((m_bNoDispUpdates)||(m_bThreadRunning))\r
-       {\r
-               if (pItem->mask & LVIF_TEXT)\r
-                       lstrcpyn(pItem->pszText, _T(""), pItem->cchTextMax);\r
-               return;\r
-       }\r
-       if ((m_currentChangedArray!=NULL)&&(pItem->iItem >= m_currentChangedArray->GetCount()))\r
-       {\r
-               if (pItem->mask & LVIF_TEXT)\r
-                       lstrcpyn(pItem->pszText, _T(""), pItem->cchTextMax);\r
-               return;\r
-       }\r
-       if ((m_currentChangedArray==NULL)&&(pItem->iItem >= m_currentChangedPathList.GetCount()))\r
-       {\r
-               if (pItem->mask & LVIF_TEXT)\r
-                       lstrcpyn(pItem->pszText, _T(""), pItem->cchTextMax);\r
-               return;\r
-       }\r
-       CTGitPath lcpath = NULL;\r
-       if (m_currentChangedArray)\r
-               lcpath = (*m_currentChangedArray)[pItem->iItem];\r
-       //Does the list need text information?\r
-       if (pItem->mask & LVIF_TEXT)\r
-       {\r
-               //Which column?\r
-               switch (pItem->iSubItem)\r
-               {\r
-               case this->FILELIST_ACTION:     //Action\r
-#if 0\r
-                       if (lcpath)\r
-                               lstrcpyn(pItem->pszText, (LPCTSTR)lcpath->GetAction(), pItem->cchTextMax);\r
-                       else\r
-                               lstrcpyn(pItem->pszText, _T(""), pItem->cchTextMax);                            \r
-#endif\r
-                       lstrcpyn(pItem->pszText, (LPCTSTR)lcpath.GetActionName(), pItem->cchTextMax);\r
-\r
-                       break;\r
-\r
-               case this->FILELIST_ADD: //add\r
-#if 0\r
-                       if (lcpath)\r
-                               lstrcpyn(pItem->pszText, (LPCTSTR)lcpath->sPath, pItem->cchTextMax);\r
-                       else\r
-                               lstrcpyn(pItem->pszText, (LPCTSTR)m_currentChangedPathList[pItem->iItem].GetGitPathString(), pItem->cchTextMax);\r
-#endif\r
-                       lstrcpyn(pItem->pszText, (LPCTSTR)lcpath.m_StatAdd, pItem->cchTextMax);\r
-                       break;\r
-\r
-               case this->FILELIST_DEL: //del\r
-#if 0\r
-                       if (lcpath)\r
-                               lstrcpyn(pItem->pszText, (LPCTSTR)lcpath->sCopyFromPath, pItem->cchTextMax);\r
-                       else\r
-                               lstrcpyn(pItem->pszText, _T(""), pItem->cchTextMax);\r
-#endif\r
-                       lstrcpyn(pItem->pszText, (LPCTSTR)lcpath.m_StatDel, pItem->cchTextMax);\r
-                       break;\r
-               case this->FILELIST_PATH: //path\r
-#if 0\r
-                       if ((lcpath==NULL)||(lcpath->sCopyFromPath.IsEmpty()))\r
-                               lstrcpyn(pItem->pszText, _T(""), pItem->cchTextMax);\r
-                       else\r
-                               _stprintf_s(pItem->pszText, pItem->cchTextMax, _T("%ld"), lcpath->lCopyFromRev);\r
-#endif\r
-                       lstrcpyn(pItem->pszText, (LPCTSTR)lcpath.GetGitPathString(), pItem->cchTextMax);\r
-                       break;\r
-               }\r
-       }\r
-#endif\r
-       *pResult = 0;\r
-}\r
-\r
-void CLogDlg::OnEnChangeSearchedit()\r
-{\r
-#if 0\r
-       UpdateData();\r
-       if (m_sFilterText.IsEmpty())\r
-       {\r
-               CStoreSelection storeselection(this);\r
-               // clear the filter, i.e. make all entries appear\r
-               theApp.DoWaitCursor(1);\r
-               KillTimer(LOGFILTER_TIMER);\r
-               FillLogMessageCtrl(false);\r
-               InterlockedExchange(&m_bNoDispUpdates, TRUE);\r
-               m_arShownList.RemoveAll();\r
-               for (DWORD i=0; i<m_logEntries.size(); ++i)\r
-               {\r
-                       if (IsEntryInDateRange(i))\r
-                               m_arShownList.Add(m_logEntries[i]);\r
-               }\r
-               InterlockedExchange(&m_bNoDispUpdates, FALSE);\r
-               m_LogList.DeleteAllItems();\r
-               m_LogList.SetItemCountEx(ShownCountWithStopped());\r
-               m_LogList.RedrawItems(0, ShownCountWithStopped());\r
-               m_LogList.SetRedraw(false);\r
-               ResizeAllListCtrlCols();\r
-               m_LogList.SetRedraw(true);\r
-               theApp.DoWaitCursor(-1);\r
-               GetDlgItem(IDC_SEARCHEDIT)->ShowWindow(SW_HIDE);\r
-               GetDlgItem(IDC_SEARCHEDIT)->ShowWindow(SW_SHOW);\r
-               GetDlgItem(IDC_SEARCHEDIT)->SetFocus();\r
-               DialogEnableWindow(IDC_STATBUTTON, !(((m_bThreadRunning)||(m_arShownList.IsEmpty()))));\r
-               return;\r
-       }\r
-       if (Validate(m_sFilterText))\r
-               SetTimer(LOGFILTER_TIMER, 1000, NULL);\r
-       else\r
-               KillTimer(LOGFILTER_TIMER);\r
-#endif\r
-}\r
-\r
-bool CLogDlg::ValidateRegexp(LPCTSTR regexp_str, tr1::wregex& pat, bool bMatchCase /* = false */)\r
-{\r
-       try\r
-       {\r
-               tr1::regex_constants::syntax_option_type type = tr1::regex_constants::ECMAScript;\r
-               if (!bMatchCase)\r
-                       type |= tr1::regex_constants::icase;\r
-               pat = tr1::wregex(regexp_str, type);\r
-               return true;\r
-       }\r
-       catch (exception) {}\r
-       return false;\r
-}\r
 \r
 bool CLogDlg::Validate(LPCTSTR string)\r
 {\r
        if (!m_bFilterWithRegex)\r
                return true;\r
        tr1::wregex pat;\r
-       return ValidateRegexp(string, pat, false);\r
+       return m_LogList.ValidateRegexp(string, pat, false);\r
 }\r
 \r
 \r
@@ -2598,7 +2397,7 @@ void CLogDlg::OnTimer(UINT_PTR nIDEvent)
                CWnd * focusWnd = GetFocus();\r
                bool bSetFocusToFilterControl = ((focusWnd != GetDlgItem(IDC_DATEFROM))&&(focusWnd != GetDlgItem(IDC_DATETO))\r
                        && (focusWnd != GetDlgItem(IDC_LOGLIST)));\r
-               if (m_sFilterText.IsEmpty())\r
+               if (m_LogList.m_sFilterText.IsEmpty())\r
                {\r
                        DialogEnableWindow(IDC_STATBUTTON, !(((this->IsThreadRunning())||(m_LogList.m_arShownList.IsEmpty()))));\r
                        // do not return here!\r
@@ -2612,23 +2411,13 @@ void CLogDlg::OnTimer(UINT_PTR nIDEvent)
                FillLogMessageCtrl(false);\r
 \r
                // now start filter the log list\r
-//             InterlockedExchange(&m_bNoDispUpdates, TRUE);\r
-//             RecalculateShownList(&m_LogList.m_arShownList);\r
-//             InterlockedExchange(&m_bNoDispUpdates, FALSE);\r
+               m_LogList.StartFilter();\r
 \r
-\r
-//             m_LogList.DeleteAllItems();\r
-//             m_LogList.SetItemCountEx(m_LogList.ShownCountWithStopped());\r
-//             m_LogList.RedrawItems(0, m_LogList.ShownCountWithStopped());\r
-//             m_LogList.SetRedraw(false);\r
-//             m_LogList.ResizeAllListCtrlCols();\r
-//             m_LogList.SetRedraw(true);\r
-//             m_LogList.Invalidate();\r
-//             if ( m_LogList.GetItemCount()==1 )\r
-//             {\r
-//                     m_LogList.SetSelectionMark(0);\r
-//                     m_LogList.SetItemState(0, LVIS_SELECTED, LVIS_SELECTED);\r
-//             }\r
+               if ( m_LogList.GetItemCount()==1 )\r
+               {\r
+                       m_LogList.SetSelectionMark(0);\r
+                       m_LogList.SetItemState(0, LVIS_SELECTED, LVIS_SELECTED);\r
+               }\r
                theApp.DoWaitCursor(-1);\r
                GetDlgItem(IDC_SEARCHEDIT)->ShowWindow(SW_HIDE);\r
                GetDlgItem(IDC_SEARCHEDIT)->ShowWindow(SW_SHOW);\r
@@ -2647,9 +2436,9 @@ void CLogDlg::OnDtnDatetimechangeDateto(NMHDR * /*pNMHDR*/, LRESULT *pResult)
        try\r
        {\r
                CTime time(_time.GetYear(), _time.GetMonth(), _time.GetDay(), 23, 59, 59);\r
-               if (time.GetTime() != m_tTo)\r
+               if (time.GetTime() != m_LogList.m_To.GetTime())\r
                {\r
-                       m_tTo = (DWORD)time.GetTime();\r
+                       m_LogList.m_To = (DWORD)time.GetTime();\r
                        SetTimer(LOGFILTER_TIMER, 10, NULL);\r
                }\r
        }\r
@@ -2667,9 +2456,9 @@ void CLogDlg::OnDtnDatetimechangeDatefrom(NMHDR * /*pNMHDR*/, LRESULT *pResult)
        try\r
        {\r
                CTime time(_time.GetYear(), _time.GetMonth(), _time.GetDay(), 0, 0, 0);\r
-               if (time.GetTime() != m_tFrom)\r
+               if (time.GetTime() != m_LogList.m_From.GetTime())\r
                {\r
-                       m_tFrom = (DWORD)time.GetTime();\r
+                       m_LogList.m_From = (DWORD)time.GetTime();\r
                        SetTimer(LOGFILTER_TIMER, 10, NULL);\r
                }\r
        }\r
@@ -3673,3 +3462,43 @@ CString CLogDlg::GetAbsoluteUrlFromRelativeUrl(const CString& url)
 }\r
 \r
 \r
+void CLogDlg::OnEnChangeSearchedit()\r
+{\r
+       UpdateData();\r
+       if (m_LogList.m_sFilterText.IsEmpty())\r
+       {\r
+               CStoreSelection storeselection(this);\r
+               // clear the filter, i.e. make all entries appear\r
+               theApp.DoWaitCursor(1);\r
+               KillTimer(LOGFILTER_TIMER);\r
+               FillLogMessageCtrl(false);\r
+               m_LogList.StartFilter();\r
+#if 0\r
+               InterlockedExchange(&m_bNoDispUpdates, TRUE);\r
+               m_arShownList.RemoveAll();\r
+               for (DWORD i=0; i<m_logEntries.size(); ++i)\r
+               {\r
+                       if (IsEntryInDateRange(i))\r
+                               m_arShownList.Add(m_logEntries[i]);\r
+               }\r
+               InterlockedExchange(&m_bNoDispUpdates, FALSE);\r
+               m_LogList.DeleteAllItems();\r
+               m_LogList.SetItemCountEx(ShownCountWithStopped());\r
+               m_LogList.RedrawItems(0, ShownCountWithStopped());\r
+               m_LogList.SetRedraw(false);\r
+               ResizeAllListCtrlCols();\r
+               m_LogList.SetRedraw(true);\r
+#endif\r
+               theApp.DoWaitCursor(-1);\r
+               GetDlgItem(IDC_SEARCHEDIT)->ShowWindow(SW_HIDE);\r
+               GetDlgItem(IDC_SEARCHEDIT)->ShowWindow(SW_SHOW);\r
+               GetDlgItem(IDC_SEARCHEDIT)->SetFocus();\r
+               DialogEnableWindow(IDC_STATBUTTON, !(((this->IsThreadRunning())||(m_LogList.m_arShownList.IsEmpty()))));\r
+               return;\r
+       }\r
+       if (Validate(m_LogList.m_sFilterText))\r
+               SetTimer(LOGFILTER_TIMER, 1000, NULL);\r
+       else\r
+               KillTimer(LOGFILTER_TIMER);\r
+\r
+}
\ No newline at end of file