4 #include "BrowseRefsDlg.h"
\r
5 #include "HistoryCombo.h"
\r
7 #include "HistoryCombo.h"
\r
8 #include "AppUtils.h"
\r
15 m_LocalBranchFilter = gPickRef_Head;
\r
16 m_RemoteBranchFilter = gPickRef_Remote;
\r
17 m_DialogName=_T("sync");
\r
22 CHistoryCombo m_ctrlLocalBranch;
\r
23 CHistoryCombo m_ctrlRemoteBranch;
\r
24 int m_LocalBranchFilter;
\r
25 int m_RemoteBranchFilter;
\r
27 CBalloon *m_pTooltip;
\r
29 CString m_DialogName;
\r
31 CString m_RegKeyRemoteBranch;
\r
33 void CbnSelchangeLocalBranch()
\r
35 //Select pull-remote from current branch
\r
37 CString currentBranch=this->m_ctrlLocalBranch.GetString();
\r
38 configName.Format(L"branch.%s.remote", currentBranch);
\r
39 CString pullRemote = g_Git.GetConfigValue(configName);
\r
41 this->SetRemote(pullRemote);
\r
43 //Select pull-branch from current branch
\r
44 configName.Format(L"branch.%s.merge", currentBranch);
\r
45 CString pullBranch = CGit::StripRefName(g_Git.GetConfigValue(configName));
\r
47 CString defaultUpstream;
\r
48 defaultUpstream.Format(L"remotes/%s/%s", pullRemote, pullBranch);
\r
49 int found = m_ctrlRemoteBranch.FindStringExact(0, defaultUpstream);
\r
52 m_ctrlRemoteBranch.SetCurSel(found);
\r
54 else if(!pullBranch.IsEmpty())
\r
56 m_ctrlRemoteBranch.AddString(pullBranch);
\r
58 //else if(!this->m_RegKeyRemoteBranch.IsEmpty())
\r
61 m_ctrlRemoteBranch.SetCurSel(-1);
\r
64 this->AddBranchToolTips(&this->m_ctrlLocalBranch,this->m_pTooltip);
\r
66 LocalBranchChange();
\r
68 void CbnSelchangeRemoteBranch()
\r
70 if(this->m_RegKeyRemoteBranch.IsEmpty())
\r
71 this->AddBranchToolTips(&this->m_ctrlRemoteBranch,this->m_pTooltip);
\r
73 RemoteBranchChange();
\r
75 void BnClickedButtonBrowseLocalBranch()
\r
77 if(CBrowseRefsDlg::PickRefForCombo(&m_ctrlLocalBranch, m_LocalBranchFilter))
\r
78 CbnSelchangeLocalBranch();
\r
80 void BnClickedButtonBrowseRemoteBranch()
\r
82 if(!this->m_RegKeyRemoteBranch.IsEmpty())
\r
84 CString remoteBranchName;
\r
86 this->m_ctrlRemoteBranch.GetWindowText(remoteBranchName);
\r
87 //remoteName = m_Remote.GetString();
\r
88 //remoteBranchName = remoteName + '/' + remoteBranchName;
\r
89 remoteBranchName = CBrowseRefsDlg::PickRef(false, remoteBranchName, gPickRef_Remote);
\r
90 if(remoteBranchName.IsEmpty())
\r
93 remoteBranchName = remoteBranchName.Mid(13);//Strip 'refs/remotes/'
\r
94 int slashPlace = remoteBranchName.Find('/');
\r
95 remoteName = remoteBranchName.Left(slashPlace);
\r
96 remoteBranchName = remoteBranchName.Mid(slashPlace + 1); //Strip remote name (for example 'origin/')
\r
99 //int remoteSel = m_Remote.FindStringExact(0,remoteName);
\r
100 //if(remoteSel >= 0)
\r
101 // m_Remote.SetCurSel(remoteSel);
\r
102 this->SetRemote(remoteName);
\r
105 m_ctrlRemoteBranch.AddString(remoteBranchName);
\r
106 CbnSelchangeRemoteBranch();
\r
110 if(CBrowseRefsDlg::PickRefForCombo(&m_ctrlRemoteBranch, m_RemoteBranchFilter))
\r
111 CbnSelchangeRemoteBranch();
\r
115 virtual void LocalBranchChange(){};
\r
116 virtual void RemoteBranchChange(){};
\r
117 virtual void SetRemote(CString remote){};
\r
119 void AddBranchToolTips(CHistoryCombo *pBranch,CBalloon *tip)
\r
123 CString text=pBranch->GetString();
\r
126 g_Git.GetLog(data,text,NULL,1,0);
\r
128 rev.ParserFromLog(data);
\r
129 tooltip.Format(_T("CommitHash:%s\nCommit by: %s %s\n <b>%s</b> \n %s"),
\r
132 CAppUtils::FormatDateAndTime(rev.m_AuthorDate,DATE_LONGDATE),
\r
136 pBranch->DisableTooltip();
\r
138 tip->AddTool(pBranch->GetComboBoxCtrl(),tooltip);
\r
142 void LoadBranchInfo()
\r
144 m_ctrlLocalBranch.SetMaxHistoryItems(0x0FFFFFFF);
\r
145 m_ctrlRemoteBranch.SetMaxHistoryItems(0x0FFFFFFF);
\r
147 STRING_VECTOR list;
\r
150 g_Git.GetBranchList(list,¤t,CGit::BRANCH_LOCAL);
\r
151 m_ctrlLocalBranch.AddString(list);
\r
153 CString currentBranch = g_Git.GetSymbolicRef();
\r
155 if(this->m_RegKeyRemoteBranch.IsEmpty())
\r
158 g_Git.GetBranchList(list,¤t,CGit::BRANCH_REMOTE);
\r
160 m_ctrlRemoteBranch.AddString(list);
\r
164 m_ctrlRemoteBranch.LoadHistory(m_RegKeyRemoteBranch,_T("sync"));
\r
167 if(!this->m_strLocalBranch.IsEmpty())
\r
169 m_ctrlLocalBranch.AddString(m_strLocalBranch);
\r
170 currentBranch = m_strLocalBranch;
\r
174 m_ctrlLocalBranch.SetCurSel(current);
\r
177 if(!m_strRemoteBranch.IsEmpty())
\r
179 m_ctrlRemoteBranch.AddString(m_strRemoteBranch);
\r
180 m_ctrlRemoteBranch.SetCurSel(m_ctrlRemoteBranch.GetCount()-1);
\r
184 CbnSelchangeLocalBranch();
\r
187 this->LocalBranchChange();
\r
188 this->RemoteBranchChange();
\r
192 CString m_strLocalBranch;
\r
193 CString m_strRemoteBranch;
\r
197 if(!this->m_RegKeyRemoteBranch.IsEmpty())
\r
199 m_ctrlRemoteBranch.AddString(m_strRemoteBranch);
\r
200 m_ctrlRemoteBranch.SaveHistory();
\r
205 #define BRANCH_COMBOX_DDX \
\r
206 DDX_Control(pDX, IDC_COMBOBOXEX_LOCAL_BRANCH, m_ctrlLocalBranch); \
\r
207 DDX_Control(pDX, IDC_COMBOBOXEX_REMOTE_BRANCH, m_ctrlRemoteBranch); \
\r
209 #define BRANCH_COMBOX_EVENT \
\r
210 ON_CBN_SELCHANGE(IDC_COMBOBOXEX_LOCAL_BRANCH, OnCbnSelchangeLocalBranch) \
\r
211 ON_CBN_SELCHANGE(IDC_COMBOBOXEX_REMOTE_BRANCH, OnCbnSelchangeRemoteBranch) \
\r
212 ON_BN_CLICKED(IDC_BUTTON_LOCAL_BRANCH, OnBnClickedButtonBrowseLocalBranch) \
\r
213 ON_BN_CLICKED(IDC_BUTTON_REMOTE_BRANCH, OnBnClickedButtonBrowseRemoteBranch) \
\r
215 #define BRANCH_COMBOX_ADD_ANCHOR() \
\r
216 AddAnchor(IDC_COMBOBOXEX_LOCAL_BRANCH,TOP_LEFT);\
\r
217 AddAnchor(IDC_COMBOBOXEX_REMOTE_BRANCH,TOP_RIGHT);\
\r
218 AddAnchor(IDC_BUTTON_LOCAL_BRANCH,TOP_LEFT);\
\r
219 AddAnchor(IDC_BUTTON_REMOTE_BRANCH,TOP_RIGHT);\
\r
220 AddAnchor(IDC_STATIC_REMOTE_BRANCH,TOP_RIGHT);
\r
222 #define BRANCH_COMBOX_EVENT_HANDLE() \
\r
223 afx_msg void OnCbnSelchangeLocalBranch(){CbnSelchangeLocalBranch();} \
\r
224 afx_msg void OnCbnSelchangeRemoteBranch(){CbnSelchangeRemoteBranch();}\
\r
225 afx_msg void OnBnClickedButtonBrowseLocalBranch(){BnClickedButtonBrowseLocalBranch();}\
\r
226 afx_msg void OnBnClickedButtonBrowseRemoteBranch(){BnClickedButtonBrowseRemoteBranch();}
\r