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 int index=m_ctrlRemoteBranch.FindStringExact(0,pullBranch);
\r
58 m_ctrlRemoteBranch.AddString(pullBranch);
\r
60 m_ctrlRemoteBranch.SetCurSel(index);
\r
62 //else if(!this->m_RegKeyRemoteBranch.IsEmpty())
\r
65 m_ctrlRemoteBranch.SetCurSel(-1);
\r
68 this->AddBranchToolTips(&this->m_ctrlLocalBranch,this->m_pTooltip);
\r
70 LocalBranchChange();
\r
72 void CbnSelchangeRemoteBranch()
\r
74 if(this->m_RegKeyRemoteBranch.IsEmpty())
\r
75 this->AddBranchToolTips(&this->m_ctrlRemoteBranch,this->m_pTooltip);
\r
77 RemoteBranchChange();
\r
79 void BnClickedButtonBrowseLocalBranch()
\r
81 if(CBrowseRefsDlg::PickRefForCombo(&m_ctrlLocalBranch, m_LocalBranchFilter))
\r
82 CbnSelchangeLocalBranch();
\r
84 void BnClickedButtonBrowseRemoteBranch()
\r
86 if(!this->m_RegKeyRemoteBranch.IsEmpty())
\r
88 CString remoteBranchName;
\r
90 this->m_ctrlRemoteBranch.GetWindowText(remoteBranchName);
\r
91 //remoteName = m_Remote.GetString();
\r
92 //remoteBranchName = remoteName + '/' + remoteBranchName;
\r
93 remoteBranchName = CBrowseRefsDlg::PickRef(false, remoteBranchName, gPickRef_Remote);
\r
94 if(remoteBranchName.IsEmpty())
\r
97 remoteBranchName = remoteBranchName.Mid(13);//Strip 'refs/remotes/'
\r
98 int slashPlace = remoteBranchName.Find('/');
\r
99 remoteName = remoteBranchName.Left(slashPlace);
\r
100 remoteBranchName = remoteBranchName.Mid(slashPlace + 1); //Strip remote name (for example 'origin/')
\r
103 //int remoteSel = m_Remote.FindStringExact(0,remoteName);
\r
104 //if(remoteSel >= 0)
\r
105 // m_Remote.SetCurSel(remoteSel);
\r
106 this->SetRemote(remoteName);
\r
109 m_ctrlRemoteBranch.AddString(remoteBranchName);
\r
110 CbnSelchangeRemoteBranch();
\r
114 if(CBrowseRefsDlg::PickRefForCombo(&m_ctrlRemoteBranch, m_RemoteBranchFilter))
\r
115 CbnSelchangeRemoteBranch();
\r
119 virtual void LocalBranchChange(){};
\r
120 virtual void RemoteBranchChange(){};
\r
121 virtual void SetRemote(CString remote){};
\r
123 void AddBranchToolTips(CHistoryCombo *pBranch,CBalloon *tip)
\r
127 CString text=pBranch->GetString();
\r
130 g_Git.GetLog(data,text,NULL,1,0);
\r
132 rev.ParserFromLog(data);
\r
133 tooltip.Format(_T("CommitHash:%s\nCommit by: %s %s\n <b>%s</b> \n %s"),
\r
136 CAppUtils::FormatDateAndTime(rev.m_AuthorDate,DATE_LONGDATE),
\r
140 pBranch->DisableTooltip();
\r
142 tip->AddTool(pBranch->GetComboBoxCtrl(),tooltip);
\r
146 void LoadBranchInfo()
\r
148 m_ctrlLocalBranch.SetMaxHistoryItems(0x0FFFFFFF);
\r
149 m_ctrlRemoteBranch.SetMaxHistoryItems(0x0FFFFFFF);
\r
151 STRING_VECTOR list;
\r
154 g_Git.GetBranchList(list,¤t,CGit::BRANCH_LOCAL);
\r
155 m_ctrlLocalBranch.AddString(list);
\r
157 CString currentBranch = g_Git.GetSymbolicRef();
\r
159 if(this->m_RegKeyRemoteBranch.IsEmpty())
\r
162 g_Git.GetBranchList(list,¤t,CGit::BRANCH_REMOTE);
\r
164 m_ctrlRemoteBranch.AddString(list);
\r
168 m_ctrlRemoteBranch.LoadHistory(m_RegKeyRemoteBranch,_T("sync"));
\r
171 if(!this->m_strLocalBranch.IsEmpty())
\r
173 m_ctrlLocalBranch.AddString(m_strLocalBranch);
\r
174 currentBranch = m_strLocalBranch;
\r
178 m_ctrlLocalBranch.SetCurSel(current);
\r
181 if(!m_strRemoteBranch.IsEmpty())
\r
183 m_ctrlRemoteBranch.AddString(m_strRemoteBranch);
\r
184 m_ctrlRemoteBranch.SetCurSel(m_ctrlRemoteBranch.GetCount()-1);
\r
188 CbnSelchangeLocalBranch();
\r
191 this->LocalBranchChange();
\r
192 this->RemoteBranchChange();
\r
196 CString m_strLocalBranch;
\r
197 CString m_strRemoteBranch;
\r
201 if(!this->m_RegKeyRemoteBranch.IsEmpty())
\r
203 m_ctrlRemoteBranch.AddString(m_strRemoteBranch);
\r
204 m_ctrlRemoteBranch.SaveHistory();
\r
209 #define BRANCH_COMBOX_DDX \
\r
210 DDX_Control(pDX, IDC_COMBOBOXEX_LOCAL_BRANCH, m_ctrlLocalBranch); \
\r
211 DDX_Control(pDX, IDC_COMBOBOXEX_REMOTE_BRANCH, m_ctrlRemoteBranch); \
\r
213 #define BRANCH_COMBOX_EVENT \
\r
214 ON_CBN_SELCHANGE(IDC_COMBOBOXEX_LOCAL_BRANCH, OnCbnSelchangeLocalBranch) \
\r
215 ON_CBN_SELCHANGE(IDC_COMBOBOXEX_REMOTE_BRANCH, OnCbnSelchangeRemoteBranch) \
\r
216 ON_BN_CLICKED(IDC_BUTTON_LOCAL_BRANCH, OnBnClickedButtonBrowseLocalBranch) \
\r
217 ON_BN_CLICKED(IDC_BUTTON_REMOTE_BRANCH, OnBnClickedButtonBrowseRemoteBranch) \
\r
219 #define BRANCH_COMBOX_ADD_ANCHOR() \
\r
220 AddAnchor(IDC_COMBOBOXEX_LOCAL_BRANCH,TOP_LEFT);\
\r
221 AddAnchor(IDC_COMBOBOXEX_REMOTE_BRANCH,TOP_RIGHT);\
\r
222 AddAnchor(IDC_BUTTON_LOCAL_BRANCH,TOP_LEFT);\
\r
223 AddAnchor(IDC_BUTTON_REMOTE_BRANCH,TOP_RIGHT);\
\r
224 AddAnchor(IDC_STATIC_REMOTE_BRANCH,TOP_RIGHT);
\r
226 #define BRANCH_COMBOX_EVENT_HANDLE() \
\r
227 afx_msg void OnCbnSelchangeLocalBranch(){CbnSelchangeLocalBranch();} \
\r
228 afx_msg void OnCbnSelchangeRemoteBranch(){CbnSelchangeRemoteBranch();}\
\r
229 afx_msg void OnBnClickedButtonBrowseLocalBranch(){BnClickedButtonBrowseLocalBranch();}\
\r
230 afx_msg void OnBnClickedButtonBrowseRemoteBranch(){BnClickedButtonBrowseRemoteBranch();}
\r