4 #include "BrowseRefsDlg.h"
5 #include "HistoryCombo.h"
7 #include "HistoryCombo.h"
9 #include "UnicodeUtils.h"
16 m_LocalBranchFilter
= gPickRef_Head
;
17 m_RemoteBranchFilter
= gPickRef_Remote
;
18 m_DialogName
=_T("sync");
23 CHistoryCombo m_ctrlLocalBranch
;
24 CHistoryCombo m_ctrlRemoteBranch
;
25 int m_LocalBranchFilter
;
26 int m_RemoteBranchFilter
;
32 CString m_RegKeyRemoteBranch
;
34 void CbnSelchangeLocalBranch()
36 //Select pull-remote from current branch
38 CString currentBranch
=this->m_ctrlLocalBranch
.GetString();
39 configName
.Format(L
"branch.%s.remote", currentBranch
);
40 CString pullRemote
= g_Git
.GetConfigValue(configName
);
42 this->SetRemote(pullRemote
);
44 //Select pull-branch from current branch
45 configName
.Format(L
"branch.%s.merge", currentBranch
);
46 CString pullBranch
= CGit::StripRefName(g_Git
.GetConfigValue(configName
));
48 CString defaultUpstream
;
49 defaultUpstream
.Format(L
"remotes/%s/%s", pullRemote
, pullBranch
);
50 int found
= m_ctrlRemoteBranch
.FindStringExact(0, defaultUpstream
);
53 m_ctrlRemoteBranch
.SetCurSel(found
);
55 else if(!pullBranch
.IsEmpty())
57 int index
=m_ctrlRemoteBranch
.FindStringExact(0,pullBranch
);
59 m_ctrlRemoteBranch
.AddString(pullBranch
);
61 m_ctrlRemoteBranch
.SetCurSel(index
);
63 //else if(!this->m_RegKeyRemoteBranch.IsEmpty())
66 m_ctrlRemoteBranch
.SetCurSel(-1);
69 this->AddBranchToolTips(&this->m_ctrlLocalBranch
,this->m_pTooltip
);
73 void CbnSelchangeRemoteBranch()
75 if(this->m_RegKeyRemoteBranch
.IsEmpty())
76 this->AddBranchToolTips(&this->m_ctrlRemoteBranch
,this->m_pTooltip
);
80 void BnClickedButtonBrowseLocalBranch()
82 if(CBrowseRefsDlg::PickRefForCombo(&m_ctrlLocalBranch
, m_LocalBranchFilter
))
83 CbnSelchangeLocalBranch();
85 void BnClickedButtonBrowseRemoteBranch()
87 if(!this->m_RegKeyRemoteBranch
.IsEmpty())
89 CString remoteBranchName
;
91 this->m_ctrlRemoteBranch
.GetWindowText(remoteBranchName
);
92 //remoteName = m_Remote.GetString();
93 //remoteBranchName = remoteName + '/' + remoteBranchName;
94 remoteBranchName
= CBrowseRefsDlg::PickRef(false, remoteBranchName
, gPickRef_Remote
);
95 if(remoteBranchName
.IsEmpty())
98 remoteBranchName
= remoteBranchName
.Mid(13);//Strip 'refs/remotes/'
99 int slashPlace
= remoteBranchName
.Find('/');
100 remoteName
= remoteBranchName
.Left(slashPlace
);
101 remoteBranchName
= remoteBranchName
.Mid(slashPlace
+ 1); //Strip remote name (for example 'origin/')
104 //int remoteSel = m_Remote.FindStringExact(0,remoteName);
106 // m_Remote.SetCurSel(remoteSel);
107 this->SetRemote(remoteName
);
110 m_ctrlRemoteBranch
.AddString(remoteBranchName
);
111 CbnSelchangeRemoteBranch();
115 if(CBrowseRefsDlg::PickRefForCombo(&m_ctrlRemoteBranch
, m_RemoteBranchFilter
))
116 CbnSelchangeRemoteBranch();
120 virtual void LocalBranchChange(){};
121 virtual void RemoteBranchChange(){};
122 virtual void SetRemote(CString remote
){};
124 void AddBranchToolTips(CHistoryCombo
*pBranch
,CBalloon
*tip
)
128 CString text
=pBranch
->GetString();
132 if(rev
.GetCommit(text
))
138 tooltip
.Format(_T("CommitHash:%s\nCommit by: %s %s\n <b>%s</b> \n %s"),
139 rev
.m_CommitHash
.ToString(),
141 CAppUtils::FormatDateAndTime(rev
.GetAuthorDate(),DATE_LONGDATE
),
145 pBranch
->DisableTooltip();
147 tip
->AddTool(pBranch
->GetComboBoxCtrl(),tooltip
);
151 void LoadBranchInfo()
153 m_ctrlLocalBranch
.SetMaxHistoryItems(0x0FFFFFFF);
154 m_ctrlRemoteBranch
.SetMaxHistoryItems(0x0FFFFFFF);
159 m_ctrlLocalBranch
.Reset();
160 m_ctrlRemoteBranch
.Reset();
162 g_Git
.GetBranchList(list
,¤t
,CGit::BRANCH_LOCAL_F
);
164 m_ctrlLocalBranch
.AddString(list
);
166 CString currentBranch
= g_Git
.GetSymbolicRef();
168 if(this->m_RegKeyRemoteBranch
.IsEmpty())
171 g_Git
.GetBranchList(list
,¤t
,CGit::BRANCH_REMOTE
);
173 m_ctrlRemoteBranch
.AddString(list
);
177 m_ctrlRemoteBranch
.LoadHistory(m_RegKeyRemoteBranch
,_T("sync"));
180 if(!this->m_strLocalBranch
.IsEmpty())
182 m_ctrlLocalBranch
.AddString(m_strLocalBranch
);
183 currentBranch
= m_strLocalBranch
;
187 m_ctrlLocalBranch
.SetCurSel(current
);
190 if(!m_strRemoteBranch
.IsEmpty())
192 m_ctrlRemoteBranch
.AddString(m_strRemoteBranch
);
193 m_ctrlRemoteBranch
.SetCurSel(m_ctrlRemoteBranch
.GetCount()-1);
197 CbnSelchangeLocalBranch();
200 this->LocalBranchChange();
201 this->RemoteBranchChange();
205 CString m_strLocalBranch
;
206 CString m_strRemoteBranch
;
210 if(!this->m_RegKeyRemoteBranch
.IsEmpty())
212 m_ctrlRemoteBranch
.AddString(m_strRemoteBranch
);
213 m_ctrlRemoteBranch
.SaveHistory();
218 #define BRANCH_COMBOX_DDX \
219 DDX_Control(pDX, IDC_COMBOBOXEX_LOCAL_BRANCH, m_ctrlLocalBranch); \
220 DDX_Control(pDX, IDC_COMBOBOXEX_REMOTE_BRANCH, m_ctrlRemoteBranch); \
222 #define BRANCH_COMBOX_EVENT \
223 ON_CBN_SELCHANGE(IDC_COMBOBOXEX_LOCAL_BRANCH, OnCbnSelchangeLocalBranch) \
224 ON_CBN_SELCHANGE(IDC_COMBOBOXEX_REMOTE_BRANCH, OnCbnSelchangeRemoteBranch) \
225 ON_BN_CLICKED(IDC_BUTTON_LOCAL_BRANCH, OnBnClickedButtonBrowseLocalBranch) \
226 ON_BN_CLICKED(IDC_BUTTON_REMOTE_BRANCH, OnBnClickedButtonBrowseRemoteBranch) \
228 #define BRANCH_COMBOX_ADD_ANCHOR() \
229 AddAnchor(IDC_COMBOBOXEX_LOCAL_BRANCH,TOP_LEFT);\
230 AddAnchor(IDC_COMBOBOXEX_REMOTE_BRANCH,TOP_RIGHT);\
231 AddAnchor(IDC_BUTTON_LOCAL_BRANCH,TOP_LEFT);\
232 AddAnchor(IDC_BUTTON_REMOTE_BRANCH,TOP_RIGHT);\
233 AddAnchor(IDC_STATIC_REMOTE_BRANCH,TOP_RIGHT);
235 #define BRANCH_COMBOX_EVENT_HANDLE() \
236 afx_msg void OnCbnSelchangeLocalBranch(){CbnSelchangeLocalBranch();} \
237 afx_msg void OnCbnSelchangeRemoteBranch(){CbnSelchangeRemoteBranch();}\
238 afx_msg void OnBnClickedButtonBrowseLocalBranch(){BnClickedButtonBrowseLocalBranch();}\
239 afx_msg void OnBnClickedButtonBrowseRemoteBranch(){BnClickedButtonBrowseRemoteBranch();}