OSDN Git Service

Continued work on BrowserRefsDlg
[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 \r
53         AddOthersToAnchor();\r
54         this->EnableSaveRestore(_T("RefLogDlg"));\r
55 \r
56         STRING_VECTOR list;\r
57         g_Git.GetRefList(list);\r
58 \r
59         if(this->m_CurrentBranch.IsEmpty())\r
60         {\r
61                 m_CurrentBranch.Format(_T("refs/heads/%s"),g_Git.GetCurrentBranch());\r
62         }\r
63 \r
64         m_ChooseRef.SetMaxHistoryItems(0x7FFFFFFF);\r
65         this->m_ChooseRef.AddString(list);\r
66         \r
67 \r
68         this->m_RefList.InsertRefLogColumn();\r
69         //m_RefList.m_logEntries.ParserFromRefLog(_T("master"));\r
70         \r
71         for(int i=0;i<list.size();i++)\r
72         {\r
73                 if(list[i] == m_CurrentBranch)\r
74                 {\r
75                         m_ChooseRef.SetCurSel(i);\r
76                         break;\r
77                 }\r
78         }\r
79 \r
80         OnCbnSelchangeRef();\r
81 \r
82         return TRUE;\r
83 }\r
84 // CRefLogDlg message handlers\r
85 \r
86 void CRefLogDlg::OnBnClickedOk()\r
87 {\r
88         // TODO: Add your control notification handler code here\r
89         OnOK();\r
90 }\r
91 \r
92 void CRefLogDlg::OnCbnSelchangeRef()\r
93 {\r
94         CString ref=m_ChooseRef.GetString();\r
95         if(m_RefList.m_RefMap.find(ref) == m_RefList.m_RefMap.end())\r
96         {\r
97                 m_RefList.m_RefMap[ref].ParserFromRefLog(ref);\r
98         }\r
99         m_RefList.ClearText();\r
100 \r
101         //this->m_logEntries.ParserFromLog();\r
102         m_RefList.SetRedraw(false);\r
103 \r
104         CLogDataVector *plog;\r
105         plog = &m_RefList.m_RefMap[ref];\r
106 \r
107         m_RefList.SetItemCountEx(plog->size());\r
108 \r
109         this->m_RefList.m_arShownList.RemoveAll();\r
110 \r
111         for(unsigned int i=0;i<m_RefList.m_RefMap[ref].size();i++)\r
112         {\r
113                 plog->at(i).m_IsFull=TRUE;\r
114                 this->m_RefList.m_arShownList.Add(&(plog->at(i)));\r
115                 \r
116         }\r
117 \r
118         m_RefList.SetRedraw(true);\r
119 \r
120         m_RefList.Invalidate();\r
121 \r
122 }