OSDN Git Service

remove FileEntry Structure
[tortoisegit/TortoiseGitJp.git] / src / TortoiseProc / LogDlg.cpp
index 44a6218..376ebb7 100644 (file)
@@ -122,7 +122,7 @@ void CLogDlg::DoDataExchange(CDataExchange* pDX)
 BEGIN_MESSAGE_MAP(CLogDlg, CResizableStandAloneDialog)\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_LOGMSG, OnNMDblclkChangedFileList)\r
        ON_WM_CONTEXTMENU()\r
        ON_WM_SETCURSOR()\r
        ON_BN_CLICKED(IDHELP, OnBnClickedHelp)\r
@@ -138,10 +138,10 @@ BEGIN_MESSAGE_MAP(CLogDlg, CResizableStandAloneDialog)
        ON_NOTIFY(DTN_DATETIMECHANGE, IDC_DATETO, OnDtnDatetimechangeDateto)\r
        ON_NOTIFY(DTN_DATETIMECHANGE, IDC_DATEFROM, OnDtnDatetimechangeDatefrom)\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(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_NOTIFY(LVN_COLUMNCLICK, IDC_LOGMSG, OnLvnColumnclickChangedFileList)\r
        ON_BN_CLICKED(IDC_HIDEPATHS, OnBnClickedHidepaths)\r
        \r
        ON_BN_CLICKED(IDC_CHECK_STOPONCOPY, &CLogDlg::OnBnClickedCheckStoponcopy)\r
@@ -219,30 +219,13 @@ BOOL CLogDlg::OnInitDialog()
                m_bShowBugtraqColumn = true;\r
 \r
        //theme.SetWindowTheme(m_LogList.GetSafeHwnd(), L"Explorer", NULL);\r
-       theme.SetWindowTheme(m_ChangedFileListCtrl.GetSafeHwnd(), L"Explorer", NULL);\r
+       //theme.SetWindowTheme(m_ChangedFileListCtrl.GetSafeHwnd(), L"Explorer", NULL);\r
 \r
        // set up the columns\r
        m_LogList.DeleteAllItems();\r
        m_LogList.InsertGitColumn();\r
 \r
-       m_ChangedFileListCtrl.SetExtendedStyle ( LVS_EX_FULLROWSELECT | LVS_EX_DOUBLEBUFFER );\r
-       m_ChangedFileListCtrl.DeleteAllItems();\r
-       int c = ((CHeaderCtrl*)(m_ChangedFileListCtrl.GetDlgItem(0)))->GetItemCount()-1;\r
-       while (c>=0)\r
-               m_ChangedFileListCtrl.DeleteColumn(c--);\r
-       temp.LoadString(IDS_PROGRS_ACTION);\r
-       m_ChangedFileListCtrl.InsertColumn(this->FILELIST_ACTION, temp);\r
-       temp.LoadString(IDS_LOG_FILE_LINE_ADD);\r
-       m_ChangedFileListCtrl.InsertColumn(this->FILELIST_ADD, temp);\r
-       temp.LoadString(IDS_LOG_FILE_LINE_DEL);\r
-       m_ChangedFileListCtrl.InsertColumn(this->FILELIST_DEL, temp);\r
-       temp.LoadString(IDS_PROGRS_PATH);\r
-       m_ChangedFileListCtrl.InsertColumn(this->FILELIST_PATH, temp);\r
-       \r
-       m_ChangedFileListCtrl.SetRedraw(false);\r
-       CAppUtils::ResizeAllListCtrlCols(&m_ChangedFileListCtrl);\r
-       m_ChangedFileListCtrl.SetRedraw(true);\r
-\r
+       m_ChangedFileListCtrl.Init(SVNSLC_COLEXT | SVNSLC_COLSTATUS |IDS_STATUSLIST_COLADD|IDS_STATUSLIST_COLDEL , _T("LogDlg"));\r
 \r
        GetDlgItem(IDC_LOGLIST)->UpdateData(FALSE);\r
 \r
@@ -396,8 +379,8 @@ void CLogDlg::LogRunStatus(int cur)
                }\r
 \r
                // We use a progress bar while getting the logs \r
-               //m_LogProgress.SetRange32(0, 100);\r
-               //m_LogProgress.SetPos(0);\r
+               m_LogProgress.SetRange32(0, 100);\r
+               m_LogProgress.SetPos(0);\r
 \r
                GetDlgItem(IDC_PROGRESS)->ShowWindow(TRUE);\r
 \r
@@ -423,6 +406,8 @@ void CLogDlg::LogRunStatus(int cur)
                PostMessage(WM_TIMER, LOGFILTER_TIMER);\r
 \r
        }\r
+\r
+       m_LogProgress.SetPos(cur);\r
 }\r
 void CLogDlg::SetDlgTitle(bool bOffline)\r
 {\r
@@ -490,10 +475,9 @@ void CLogDlg::FillLogMessageCtrl(bool bShow /* = true*/)
        m_ChangedFileListCtrl.SetRedraw(FALSE);\r
 //     InterlockedExchange(&m_bNoDispUpdates, TRUE);\r
        m_currentChangedArray = NULL;\r
-       m_ChangedFileListCtrl.SetExtendedStyle ( LVS_EX_FULLROWSELECT | LVS_EX_DOUBLEBUFFER );\r
+       //m_ChangedFileListCtrl.SetExtendedStyle ( LVS_EX_FULLROWSELECT | LVS_EX_DOUBLEBUFFER );\r
        m_ChangedFileListCtrl.DeleteAllItems();\r
-       m_ChangedFileListCtrl.SetItemCountEx(0);\r
-\r
+       \r
        // if we're not here to really show a selected revision, just\r
        // get out of here after clearing the views, which is what is intended\r
        // if that flag is not set.\r
@@ -532,18 +516,17 @@ void CLogDlg::FillLogMessageCtrl(bool bShow /* = true*/)
                GitRev* pLogEntry = reinterpret_cast<GitRev *>(m_LogList.m_arShownList.GetAt(selIndex));\r
 \r
                // set the log message text\r
-               pMsgView->SetWindowText(_T("*")+pLogEntry->m_Subject+_T("\n\n")+pLogEntry->m_Body);\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
-               m_currentChangedArray = &(pLogEntry->m_Files);\r
-               if (m_currentChangedArray == NULL)\r
-               {\r
-//                     InterlockedExchange(&m_bNoDispUpdates, FALSE);\r
-                       m_ChangedFileListCtrl.SetRedraw(TRUE);\r
-                       return;\r
-               }\r
+\r
+               m_ChangedFileListCtrl.UpdateWithGitPathList(pLogEntry->m_Files);\r
+               m_ChangedFileListCtrl.Show(0);\r
+\r
+               m_ChangedFileListCtrl.SetRedraw(TRUE);\r
+               return;\r
 #if 0\r
                // fill in the changed files list control\r
                if ((m_cHidePaths.GetState() & 0x0003)==BST_CHECKED)\r
@@ -697,58 +680,7 @@ void CLogDlg::OnBnClickedRefresh()
 \r
 void CLogDlg::Refresh (bool autoGoOnline)\r
 {\r
-#if 0\r
-       // refreshing means re-downloading the already shown log messages\r
-       UpdateData();\r
-       m_maxChild = 0;\r
-       m_childCounter = 0;\r
-\r
-       if ((m_limit == 0)||(m_bStrict)||(int(m_logEntries.size()-1) > m_limit))\r
-       {\r
-               if (m_logEntries.size() != 0)\r
-               {\r
-                       m_endrev = m_logEntries[m_logEntries.size()-1]->Rev;\r
-               }\r
-       }\r
-       m_startrev = -1;\r
-       m_bCancelled = FALSE;\r
-\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_ChangedFileListCtrl.SetItemCountEx(0);\r
-       m_ChangedFileListCtrl.Invalidate();\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
-    // reset the cached HEAD property & go on-line\r
-\r
-    if (autoGoOnline)\r
-    {\r
-           SetDlgTitle (false);\r
-        logCachePool.GetRepositoryInfo().ResetHeadRevision (m_sUUID, m_sRepositoryRoot);\r
-    }\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
+       m_LogList.Refresh();\r
 }\r
 \r
 void CLogDlg::OnBnClickedNexthundred()\r
@@ -1061,7 +993,7 @@ void CLogDlg::OnContextMenu(CWnd* pWnd, CPoint point)
        }\r
        else if (pWnd == &m_ChangedFileListCtrl)\r
        {\r
-               ShowContextMenuForChangedpaths(pWnd, point);\r
+               //ShowContextMenuForChangedpaths(pWnd, point);\r
        }\r
        else if ((selCount == 1)&&(pWnd == GetDlgItem(IDC_MSGVIEW)))\r
        {\r
@@ -1086,12 +1018,12 @@ void CLogDlg::OnContextMenu(CWnd* pWnd, CPoint point)
                        sMenuItemText.LoadString(IDS_SCIEDIT_SELECTALL);\r
                        popup.AppendMenu(MF_STRING | MF_ENABLED, EM_SETSEL, sMenuItemText);\r
 \r
-                       if (selIndex >= 0)\r
-                       {\r
-                               popup.AppendMenu(MF_SEPARATOR);\r
-                               sMenuItemText.LoadString(IDS_LOG_POPUP_EDITLOG);\r
-                               popup.AppendMenu(MF_STRING | MF_ENABLED, CGitLogList::ID_EDITAUTHOR, sMenuItemText);\r
-                       }\r
+                       //if (selIndex >= 0)\r
+                       //{\r
+                       //      popup.AppendMenu(MF_SEPARATOR);\r
+                       //      sMenuItemText.LoadString(IDS_LOG_POPUP_EDITLOG);\r
+                       //      popup.AppendMenu(MF_STRING | MF_ENABLED, CGitLogList::ID_EDITAUTHOR, sMenuItemText);\r
+                       //}\r
 \r
                        int cmd = popup.TrackPopupMenu(TPM_RETURNCMD | TPM_LEFTALIGN | TPM_NONOTIFY, point.x, point.y, this, 0);\r
                        switch (cmd)\r
@@ -1502,9 +1434,9 @@ void CLogDlg::DoDiffFromLog(INT_PTR selIndex, GitRev* rev1, GitRev* rev2, bool b
 \r
        CString cmd;\r
 \r
-       cmd.Format(_T("git.cmd cat-file -p %s:%s"),rev1->m_CommitHash,(*m_currentChangedArray)[selIndex].GetGitPathString());\r
+       cmd.Format(_T("git.exe cat-file -p %s:%s"),rev1->m_CommitHash,(*m_currentChangedArray)[selIndex].GetGitPathString());\r
        g_Git.RunLogFile(cmd,file1);\r
-       cmd.Format(_T("git.cmd cat-file -p %s:%s"),rev2->m_CommitHash,(*m_currentChangedArray)[selIndex].GetGitPathString());\r
+       cmd.Format(_T("git.exe cat-file -p %s:%s"),rev2->m_CommitHash,(*m_currentChangedArray)[selIndex].GetGitPathString());\r
        g_Git.RunLogFile(cmd,file2);\r
 \r
        CAppUtils::DiffFlags flags;\r
@@ -1851,7 +1783,8 @@ BOOL CLogDlg::PreTranslateMessage(MSG* pMsg)
 \r
 BOOL CLogDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)\r
 {\r
-       if (this->IsThreadRunning())\r
+       //if (this->IsThreadRunning())\r
+       if(m_LogList.m_bNoDispUpdates)\r
        {\r
                // only show the wait cursor over the list control\r
                if ((pWnd)&&\r
@@ -1881,7 +1814,8 @@ void CLogDlg::OnLvnItemchangedLoglist(NMHDR *pNMHDR, LRESULT *pResult)
 {\r
        LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);\r
        *pResult = 0;\r
-       if (this->IsThreadRunning())\r
+       //if (this->IsThreadRunning())\r
+       if(m_LogList.m_bNoDispUpdates)\r
                return;\r
        if (pNMLV->iItem >= 0)\r
        {\r
@@ -2842,22 +2776,22 @@ void CLogDlg::OnTimer(UINT_PTR nIDEvent)
 \r
                // now start filter the log list\r
 //             InterlockedExchange(&m_bNoDispUpdates, TRUE);\r
-               RecalculateShownList(&m_LogList.m_arShownList);\r
+//             RecalculateShownList(&m_LogList.m_arShownList);\r
 //             InterlockedExchange(&m_bNoDispUpdates, FALSE);\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
+//             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
                theApp.DoWaitCursor(-1);\r
                GetDlgItem(IDC_SEARCHEDIT)->ShowWindow(SW_HIDE);\r
                GetDlgItem(IDC_SEARCHEDIT)->ShowWindow(SW_SHOW);\r
@@ -3088,6 +3022,7 @@ void CLogDlg::SetSortArrow(CListCtrl * control, int nColumn, bool bAscending)
 }\r
 void CLogDlg::OnLvnColumnclickChangedFileList(NMHDR *pNMHDR, LRESULT *pResult)\r
 {\r
+#if 0\r
        if (this->IsThreadRunning())\r
                return;         //no sorting while the arrays are filled\r
        if (m_currentChangedArray == NULL)\r
@@ -3101,6 +3036,7 @@ void CLogDlg::OnLvnColumnclickChangedFileList(NMHDR *pNMHDR, LRESULT *pResult)
        SetSortArrow(&m_ChangedFileListCtrl, m_nSortColumnPathList, m_bAscendingPathList);\r
        m_ChangedFileListCtrl.Invalidate();\r
        *pResult = 0;\r
+#endif\r
 }\r
 \r
 int CLogDlg::m_nSortColumnPathList = 0;\r
@@ -3262,25 +3198,26 @@ void CLogDlg::OnBnClickedIncludemerge()
 \r
 void CLogDlg::UpdateLogInfoLabel()\r
 {\r
-#if 0\r
-       git_revnum_t rev1 = 0;\r
-       git_revnum_t rev2 = 0;\r
-       long selectedrevs = 0;\r
-       if (m_arShownList.GetCount())\r
-       {\r
-               PLOGENTRYDATA pLogEntry = reinterpret_cast<PLOGENTRYDATA>(m_arShownList.GetAt(0));\r
-               rev1 = pLogEntry->Rev;\r
-               pLogEntry = reinterpret_cast<PLOGENTRYDATA>(m_arShownList.GetAt(m_arShownList.GetCount()-1));\r
-               rev2 = pLogEntry->Rev;\r
+\r
+       git_revnum_t rev1 ;\r
+       git_revnum_t rev2 ;\r
+       long selectedrevs ;\r
+       int count =m_LogList.m_arShownList.GetCount();\r
+       if (count)\r
+       {\r
+               rev1 = (reinterpret_cast<GitRev*>(m_LogList.m_arShownList.GetAt(0)))->m_CommitHash;\r
+               //pLogEntry = reinterpret_cast<PLOGENTRYDATA>(m_arShownList.GetAt(m_arShownList.GetCount()-1));\r
+               rev2 =  (reinterpret_cast<GitRev*>(m_LogList.m_arShownList.GetAt(count-1)))->m_CommitHash;\r
                selectedrevs = m_LogList.GetSelectedCount();\r
        }\r
        CString sTemp;\r
-       sTemp.Format(IDS_LOG_LOGINFOSTRING, m_arShownList.GetCount(), rev2, rev1, selectedrevs);\r
+       sTemp.Format(_T("Showing %ld revision(s), from revision %s to revision %s - %ld revision(s) selected"), count, rev2.Left(6), rev1.Left(6), selectedrevs);\r
        m_sLogInfo = sTemp;\r
-#endif\r
+\r
        UpdateData(FALSE);\r
 }\r
 \r
+#if 0\r
 void CLogDlg::ShowContextMenuForChangedpaths(CWnd* /*pWnd*/, CPoint point)\r
 {\r
 \r
@@ -3816,6 +3753,7 @@ void CLogDlg::ShowContextMenuForChangedpaths(CWnd* /*pWnd*/, CPoint point)
 \r
        } // if (popup.CreatePopupMenu())\r
 }\r
+#endif\r
 \r
 void CLogDlg::OnDtnDropdownDatefrom(NMHDR * /*pNMHDR*/, LRESULT *pResult)\r
 {\r
@@ -3907,35 +3845,3 @@ CString CLogDlg::GetAbsoluteUrlFromRelativeUrl(const CString& url)
 }\r
 \r
 \r
-int CLogDataVector::ParserFromLog()\r
-{\r
-       CString log;\r
-       GitRev rev;\r
-       g_Git.GetLog(log);\r
-\r
-       CString begin;\r
-       begin.Format(_T("#<%c>"),LOG_REV_ITEM_BEGIN);\r
-       \r
-       if(log.GetLength()==0)\r
-               return 0;\r
-       \r
-       int start=4;\r
-       int length;\r
-       int next =1;\r
-       while( next>0 )\r
-       {\r
-               next=log.Find(begin,start);\r
-               if(next >0 )\r
-                       length = next - start+4;\r
-               else\r
-                       length = log.GetLength()-start+4;\r
-\r
-               CString onelog =log;\r
-               onelog=log.Mid(start -4,length);\r
-               rev.ParserFromLog(onelog);\r
-               this->push_back(rev);\r
-               start = next +4;\r
-       }\r
-\r
-       return 0;\r
-}\r