OSDN Git Service

GitBlame Use command Line argument to open file
[tortoisegit/TortoiseGitJp.git] / src / TortoiseGitBlame / OutputWnd.cpp
index fa17a70..9ae92c1 100644 (file)
@@ -4,6 +4,8 @@
 #include "OutputWnd.h"\r
 #include "Resource.h"\r
 #include "MainFrm.h"\r
+#include "TortoiseGitBlameDoc.h"\r
+#include "TortoiseGitBlameView.h"\r
 \r
 #ifdef _DEBUG\r
 #define new DEBUG_NEW\r
@@ -22,9 +24,22 @@ COutputWnd::~COutputWnd()
 {\r
 }\r
 \r
+IMPLEMENT_DYNCREATE(CGitMFCTabCtrl, CMFCTabCtrl)\r
+\r
+BEGIN_MESSAGE_MAP(CGitMFCTabCtrl, CMFCTabCtrl)\r
+       ON_NOTIFY(LVN_ITEMCHANGED, 0, OnLvnItemchangedLoglist)\r
+END_MESSAGE_MAP()\r
+\r
+void CGitMFCTabCtrl::OnLvnItemchangedLoglist(NMHDR *pNMHDR, LRESULT *pResult)\r
+{\r
+       COutputWnd *pWnd=DYNAMIC_DOWNCAST(COutputWnd,this->GetParent());\r
+       pWnd->OnLvnItemchangedLoglist(pNMHDR,pResult);\r
+}\r
+\r
 BEGIN_MESSAGE_MAP(COutputWnd, CDockablePane)\r
        ON_WM_CREATE()\r
        ON_WM_SIZE()\r
+       ON_NOTIFY(LVN_ITEMCHANGED, 0, OnLvnItemchangedLoglist)\r
 END_MESSAGE_MAP()\r
 \r
 int COutputWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)\r
@@ -32,21 +47,29 @@ int COutputWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
        if (CDockablePane::OnCreate(lpCreateStruct) == -1)\r
                return -1;\r
 \r
+       TRACE(_T("%u\n"),LVN_ITEMCHANGED);\r
        m_Font.CreateStockObject(DEFAULT_GUI_FONT);\r
 \r
        CRect rectDummy;\r
        rectDummy.SetRectEmpty();\r
 \r
        // Create tabs window:\r
-       if (!m_wndTabs.Create(CMFCTabCtrl::STYLE_FLAT, rectDummy, this, 1))\r
+       if (!m_wndTabs.Create(CMFCTabCtrl::STYLE_FLAT, rectDummy, this, 0))\r
        {\r
                TRACE0("Failed to create output tab window\n");\r
                return -1;      // fail to create\r
        }\r
 \r
        // Create output panes:\r
-       const DWORD dwStyle = LBS_NOINTEGRALHEIGHT | WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL;\r
+       //const DWORD dwStyle = LBS_NOINTEGRALHEIGHT | WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL;\r
+       const DWORD dwStyle =LVS_REPORT | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_OWNERDATA | WS_BORDER | WS_TABSTOP |LVS_SINGLESEL |WS_CHILD | WS_VISIBLE;\r
 \r
+       if (! m_LogList.Create(dwStyle,rectDummy,&m_wndTabs,0) )\r
+       {\r
+               TRACE0("Failed to create output windows\n");\r
+               return -1;      // fail to create\r
+       }\r
+#if 0\r
        if (!m_wndOutputBuild.Create(dwStyle, rectDummy, &m_wndTabs, 2) ||\r
                !m_wndOutputDebug.Create(dwStyle, rectDummy, &m_wndTabs, 3) ||\r
                !m_wndOutputFind.Create(dwStyle, rectDummy, &m_wndTabs, 4))\r
@@ -54,30 +77,42 @@ int COutputWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
                TRACE0("Failed to create output windows\n");\r
                return -1;      // fail to create\r
        }\r
+#endif\r
 \r
-       m_wndOutputBuild.SetFont(&m_Font);\r
-       m_wndOutputDebug.SetFont(&m_Font);\r
-       m_wndOutputFind.SetFont(&m_Font);\r
+       m_LogList.SetFont(&m_Font);\r
+       //m_wndOutputBuild.SetFont(&m_Font);\r
+       //m_wndOutputDebug.SetFont(&m_Font);\r
+       //m_wndOutputFind.SetFont(&m_Font);\r
 \r
        CString strTabName;\r
        BOOL bNameValid;\r
 \r
        // Attach list windows to tab:\r
-       bNameValid = strTabName.LoadString(IDS_BUILD_TAB);\r
+       bNameValid = strTabName.LoadString(IDS_GIT_LOG_TAB);\r
        ASSERT(bNameValid);\r
-       m_wndTabs.AddTab(&m_wndOutputBuild, strTabName, (UINT)0);\r
+\r
+       m_wndTabs.AddTab(&m_LogList, strTabName, (UINT)0);\r
+\r
+       m_LogList.m_IsIDReplaceAction=TRUE;\r
+       m_LogList.DeleteAllItems();\r
+       m_LogList.InsertGitColumn();\r
+\r
+\r
+#if 0\r
        bNameValid = strTabName.LoadString(IDS_DEBUG_TAB);\r
        ASSERT(bNameValid);\r
        m_wndTabs.AddTab(&m_wndOutputDebug, strTabName, (UINT)1);\r
        bNameValid = strTabName.LoadString(IDS_FIND_TAB);\r
        ASSERT(bNameValid);\r
        m_wndTabs.AddTab(&m_wndOutputFind, strTabName, (UINT)2);\r
+#endif;\r
 \r
        // Fill output tabs with some dummy text (nothing magic here)\r
        FillBuildWindow();\r
-       FillDebugWindow();\r
-       FillFindWindow();\r
+//     FillDebugWindow();\r
+//     FillFindWindow();\r
 \r
+       this->SetWindowTextW(_T("Git Log"));\r
        return 0;\r
 }\r
 \r
@@ -110,25 +145,57 @@ void COutputWnd::AdjustHorzScroll(CListBox& wndListBox)
 \r
 void COutputWnd::FillBuildWindow()\r
 {\r
-       m_wndOutputBuild.AddString(_T("Build output is being displayed here."));\r
-       m_wndOutputBuild.AddString(_T("The output is being displayed in rows of a list view"));\r
-       m_wndOutputBuild.AddString(_T("but you can change the way it is displayed as you wish..."));\r
+//     m_wndOutputBuild.AddString(_T("Build output is being displayed here."));\r
+//     m_wndOutputBuild.AddString(_T("The output is being displayed in rows of a list view"));\r
+//     m_wndOutputBuild.AddString(_T("but you can change the way it is displayed as you wish..."));\r
 }\r
 \r
 void COutputWnd::FillDebugWindow()\r
 {\r
-       m_wndOutputDebug.AddString(_T("Debug output is being displayed here."));\r
-       m_wndOutputDebug.AddString(_T("The output is being displayed in rows of a list view"));\r
-       m_wndOutputDebug.AddString(_T("but you can change the way it is displayed as you wish..."));\r
+//     m_wndOutputDebug.AddString(_T("Debug output is being displayed here."));\r
+//     m_wndOutputDebug.AddString(_T("The output is being displayed in rows of a list view"));\r
+//     m_wndOutputDebug.AddString(_T("but you can change the way it is displayed as you wish..."));\r
 }\r
 \r
 void COutputWnd::FillFindWindow()\r
 {\r
-       m_wndOutputFind.AddString(_T("Find output is being displayed here."));\r
-       m_wndOutputFind.AddString(_T("The output is being displayed in rows of a list view"));\r
-       m_wndOutputFind.AddString(_T("but you can change the way it is displayed as you wish..."));\r
+//     m_wndOutputFind.AddString(_T("Find output is being displayed here."));\r
+//     m_wndOutputFind.AddString(_T("The output is being displayed in rows of a list view"));\r
+//     m_wndOutputFind.AddString(_T("but you can change the way it is displayed as you wish..."));\r
 }\r
 \r
+int COutputWnd::LoadHistory(CString filename)\r
+{\r
+       m_LogList.ReloadHashMap();\r
+       CTGitPath path;\r
+       path.SetFromWin(filename);\r
+       \r
+       m_LogList.Clear();\r
+       m_LogList.FillGitLog(&path,0/*CGit::LOG_INFO_FULLHISTORY*/);\r
+\r
+       return 0;\r
+\r
+}\r
+void COutputWnd::OnLvnItemchangedLoglist(NMHDR *pNMHDR, LRESULT *pResult)\r
+{\r
+       LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);\r
+       *pResult = 0;\r
+\r
+       //if (this->IsThreadRunning())\r
+       if (pNMLV->iItem >= 0)\r
+       {\r
+               if (pNMLV->iSubItem != 0)\r
+                       return;\r
+               \r
+               if (pNMLV->uNewState & LVIS_SELECTED)\r
+               {\r
+                       CMainFrame *pMain=DYNAMIC_DOWNCAST(CMainFrame,AfxGetApp()->GetMainWnd());\r
+                       POSITION pos=pMain->GetActiveDocument()->GetFirstViewPosition();\r
+                       CTortoiseGitBlameView *pView=DYNAMIC_DOWNCAST(CTortoiseGitBlameView,pMain->GetActiveDocument()->GetNextView(pos));\r
+                       pView->FocusOn(&this->m_LogList.m_logEntries[pNMLV->iItem]);\r
+               }\r
+       }\r
+}\r
 /////////////////////////////////////////////////////////////////////////////\r
 // COutputList1\r
 \r
@@ -195,4 +262,3 @@ void COutputList::OnViewOutput()
        }\r
 }\r
 \r
-\r