OSDN Git Service

Add select file at log dialog
[tortoisegit/TortoiseGitJp.git] / src / TortoiseProc / GitLogListBase.cpp
index 62250c0..ed13ed8 100644 (file)
@@ -70,6 +70,8 @@ CGitLogListBase::CGitLogListBase():CHintListCtrl()
        \r
        m_bShowBugtraqColumn=0;\r
 \r
+       m_IsIDReplaceAction=FALSE;\r
+\r
        m_wcRev.m_CommitHash=GIT_REV_ZERO;\r
        m_wcRev.m_Subject=_T("Working Copy");\r
 \r
@@ -84,6 +86,7 @@ CGitLogListBase::CGitLogListBase():CHintListCtrl()
 \r
        m_From=CTime(1970,1,2,0,0,0);\r
        m_To=CTime::GetCurrentTime();\r
+    m_bAllBranch = FALSE;\r
 }\r
 \r
 CGitLogListBase::~CGitLogListBase()\r
@@ -124,7 +127,7 @@ int CGitLogListBase:: OnCreate(LPCREATESTRUCT lpCreateStruct)
 \r
 void CGitLogListBase::PreSubclassWindow()\r
 {\r
-       SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_DOUBLEBUFFER | LVS_EX_SUBITEMIMAGES);\r
+       SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_SUBITEMIMAGES);\r
        // load the icons for the action columns\r
        m_Theme.SetWindowTheme(GetSafeHwnd(), L"Explorer", NULL);\r
        CHintListCtrl::PreSubclassWindow();\r
@@ -152,9 +155,16 @@ void CGitLogListBase::InsertGitColumn()
 //     CString log;\r
 //     g_Git.GetLog(log);\r
 \r
-       temp.LoadString(IDS_LOG_ACTIONS);\r
-       InsertColumn(this->LOGLIST_ACTION, temp);\r
-       \r
+       if(m_IsIDReplaceAction)\r
+       {\r
+               temp.LoadString(IDS_LOG_ID);\r
+               InsertColumn(this->LOGLIST_ACTION, temp);\r
+       }\r
+       else\r
+       {\r
+               temp.LoadString(IDS_LOG_ACTIONS);\r
+               InsertColumn(this->LOGLIST_ACTION, temp);\r
+       }\r
        temp.LoadString(IDS_LOG_MESSAGE);\r
        InsertColumn(this->LOGLIST_MESSAGE, temp);\r
        \r
@@ -762,6 +772,11 @@ void CGitLogListBase::OnNMCustomdrawLoglist(NMHDR *pNMHDR, LRESULT *pResult)
                        \r
                        if (pLVCD->iSubItem == 1)\r
                        {\r
+                               if(this->m_IsIDReplaceAction)\r
+                               {\r
+                                       *pResult = CDRF_DODEFAULT;\r
+                                       return;\r
+                               }\r
                                *pResult = CDRF_DODEFAULT;\r
 \r
                                if (m_arShownList.GetCount() <= (INT_PTR)pLVCD->nmcd.dwItemSpec)\r
@@ -834,6 +849,8 @@ void CGitLogListBase::OnLvnGetdispinfoLoglist(NMHDR *pNMHDR, LRESULT *pResult)
        if (itemid < m_arShownList.GetCount())\r
                pLogEntry = reinterpret_cast<GitRev*>(m_arShownList.GetAt(pItem->iItem));\r
 \r
+       CString temp;\r
+       temp.Format(_T("%d"),m_arShownList.GetCount()-pItem->iItem);\r
            \r
        // Which column?\r
        switch (pItem->iSubItem)\r
@@ -844,6 +861,8 @@ void CGitLogListBase::OnLvnGetdispinfoLoglist(NMHDR *pNMHDR, LRESULT *pResult)
                }\r
                break;\r
        case this->LOGLIST_ACTION: //action -- no text in the column\r
+               if(this->m_IsIDReplaceAction)\r
+                       lstrcpyn(pItem->pszText, temp, pItem->cchTextMax);\r
                break;\r
        case this->LOGLIST_MESSAGE: //Message\r
                if (pLogEntry)\r
@@ -1286,12 +1305,42 @@ void CGitLogListBase::OnLvnOdfinditemLoglist(NMHDR *pNMHDR, LRESULT *pResult)
        *pResult = -1;\r
 }\r
 \r
+int CGitLogListBase::FillGitLog(CTGitPath *path,int info)\r
+{\r
+       ClearText();\r
+\r
+       this->m_logEntries.ClearAll();\r
+       this->m_logEntries.ParserFromLog(path,-1,info);\r
+\r
+       //this->m_logEntries.ParserFromLog();\r
+       SetItemCountEx(this->m_logEntries.size());\r
+\r
+       this->m_arShownList.RemoveAll();\r
+\r
+       for(int i=0;i<m_logEntries.size();i++)\r
+       {\r
+               m_logEntries[i].m_IsFull=TRUE;\r
+               this->m_arShownList.Add(&m_logEntries[i]);\r
+       }\r
+\r
+    if(path)\r
+        m_Path=*path;\r
+       return 0;\r
+\r
+}\r
+\r
 int CGitLogListBase::FillGitShortLog()\r
 {\r
        ClearText();\r
 \r
        this->m_logEntries.ClearAll();\r
-       this->m_logEntries.ParserShortLog();\r
+    CTGitPath *path;\r
+    if(this->m_Path.IsEmpty())\r
+        path=NULL;\r
+    else\r
+        path=&this->m_Path;\r
+\r
+       this->m_logEntries.ParserShortLog(path,-1);\r
 \r
        //this->m_logEntries.ParserFromLog();\r
        SetItemCountEx(this->m_logEntries.size());\r
@@ -1749,4 +1798,17 @@ void CGitLogListBase::RemoveFilter()
        SetRedraw(true);\r
 \r
        InterlockedExchange(&m_bNoDispUpdates, FALSE);\r
+}\r
+\r
+void CGitLogListBase::Clear()\r
+{\r
+       m_arShownList.RemoveAll();\r
+       m_logEntries.clear();\r
+       m_logEntries.m_HashMap.clear();\r
+       DeleteAllItems();\r
+       m_logEntries.m_Lns.clear();\r
+\r
+       m_logEntries.m_FirstFreeLane=0;\r
+       m_logEntries.m_Lns.clear();\r
+\r
 }
\ No newline at end of file