OSDN Git Service

Log can refresh when Click Rev button.
[tortoisegit/TortoiseGitJp.git] / src / TortoiseProc / RefLogDlg.cpp
1 // RefLogDlg.cpp : implementation file\r
2 //\r
3 \r
4 #include "stdafx.h"\r
5 #include "resource.h"\r
6 #include "RefLogDlg.h"\r
7 #include "git.h"\r
8 \r
9 // CRefLogDlg dialog\r
10 \r
11 IMPLEMENT_DYNAMIC(CRefLogDlg, CResizableStandAloneDialog)\r
12 \r
13 CRefLogDlg::CRefLogDlg(CWnd* pParent /*=NULL*/)\r
14         : CResizableStandAloneDialog(CRefLogDlg::IDD, pParent)\r
15 {\r
16 \r
17 }\r
18 \r
19 CRefLogDlg::~CRefLogDlg()\r
20 {\r
21 }\r
22 \r
23 void CRefLogDlg::DoDataExchange(CDataExchange* pDX)\r
24 {\r
25         CDialog::DoDataExchange(pDX);\r
26         DDX_Control(pDX, IDC_COMBOBOXEX_REF, m_ChooseRef);\r
27         DDX_Control(pDX, IDC_REFLOG_LIST, m_RefList);\r
28 }\r
29 \r
30 \r
31 BEGIN_MESSAGE_MAP(CRefLogDlg, CResizableStandAloneDialog)\r
32         ON_BN_CLICKED(IDOK, &CRefLogDlg::OnBnClickedOk)\r
33         ON_CBN_SELCHANGE(IDC_COMBOBOXEX_REF,   &CRefLogDlg::OnCbnSelchangeRef)\r
34         ON_MESSAGE(MSG_REFLOG_CHANGED,OnRefLogChanged)\r
35 END_MESSAGE_MAP()\r
36 \r
37 LRESULT CRefLogDlg::OnRefLogChanged(WPARAM wParam, LPARAM lParam)\r
38 {\r
39         m_RefList.m_RefMap.clear();\r
40         OnCbnSelchangeRef();\r
41         return 0;\r
42 }\r
43 \r
44 BOOL CRefLogDlg::OnInitDialog()\r
45 {\r
46         CResizableStandAloneDialog::OnInitDialog();\r
47 \r
48         AddAnchor(IDOK,BOTTOM_RIGHT);\r
49         AddAnchor(IDCANCEL,BOTTOM_RIGHT);\r
50         \r
51         AddAnchor(IDC_REFLOG_LIST,TOP_LEFT,BOTTOM_RIGHT);\r
52         AddAnchor(IDHELP, BOTTOM_RIGHT);\r
53 \r
54         AddOthersToAnchor();\r
55         this->EnableSaveRestore(_T("RefLogDlg"));\r
56 \r
57         STRING_VECTOR list;\r
58         g_Git.GetRefList(list);\r
59 \r
60         if(this->m_CurrentBranch.IsEmpty())\r
61         {\r
62                 m_CurrentBranch.Format(_T("refs/heads/%s"),g_Git.GetCurrentBranch());\r
63         }\r
64 \r
65         m_ChooseRef.SetMaxHistoryItems(0x7FFFFFFF);\r
66         this->m_ChooseRef.AddString(list);\r
67         \r
68 \r
69         this->m_RefList.InsertRefLogColumn();\r
70         //m_RefList.m_logEntries.ParserFromRefLog(_T("master"));\r
71         \r
72         for(int i=0;i<list.size();i++)\r
73         {\r
74                 if(list[i] == m_CurrentBranch)\r
75                 {\r
76                         m_ChooseRef.SetCurSel(i);\r
77                         break;\r
78                 }\r
79         }\r
80 \r
81         OnCbnSelchangeRef();\r
82 \r
83         return TRUE;\r
84 }\r
85 // CRefLogDlg message handlers\r
86 \r
87 void CRefLogDlg::OnBnClickedOk()\r
88 {\r
89         // TODO: Add your control notification handler code here\r
90         if (m_RefList.GetSelectedCount() == 1)\r
91         {\r
92                 // get the selected row\r
93                 POSITION pos = m_RefList.GetFirstSelectedItemPosition();\r
94                 int selIndex = m_RefList.GetNextSelectedItem(pos);\r
95                 if (selIndex < m_RefList.m_arShownList.GetCount())\r
96                 {\r
97                         // all ok, pick up the revision\r
98                         GitRev* pLogEntry = reinterpret_cast<GitRev *>(m_RefList.m_arShownList.GetAt(selIndex));\r
99                         // extract the hash\r
100                         m_SelectedHash = pLogEntry->m_CommitHash;\r
101                 }\r
102         }\r
103 \r
104         OnOK();\r
105 }\r
106 \r
107 void CRefLogDlg::OnCbnSelchangeRef()\r
108 {\r
109         CString ref=m_ChooseRef.GetString();\r
110         if(m_RefList.m_RefMap.find(ref) == m_RefList.m_RefMap.end())\r
111         {\r
112                 m_RefList.m_RefMap[ref].m_pLogCache = &m_RefList.m_LogCache;\r
113                 m_RefList.m_RefMap[ref].ParserFromRefLog(ref);\r
114         }\r
115         m_RefList.ClearText();\r
116 \r
117         //this->m_logEntries.ParserFromLog();\r
118         m_RefList.SetRedraw(false);\r
119 \r
120         CLogDataVector *plog;\r
121         plog = &m_RefList.m_RefMap[ref];\r
122 \r
123         m_RefList.SetItemCountEx(plog->size());\r
124 \r
125         this->m_RefList.m_arShownList.RemoveAll();\r
126 \r
127         for(unsigned int i=0;i<m_RefList.m_RefMap[ref].size();i++)\r
128         {\r
129                 plog->GetGitRevAt(i).m_IsFull=TRUE;\r
130                 this->m_RefList.m_arShownList.Add(&(plog->GetGitRevAt(i)));\r
131                 \r
132         }\r
133 \r
134         m_RefList.SetRedraw(true);\r
135 \r
136         m_RefList.Invalidate();\r
137 \r
138 }