4 #include "BrowseRefsDlg.h"
5 #include "HistoryCombo.h"
7 #include "HistoryCombo.h"
15 m_LocalBranchFilter
= gPickRef_Head
;
16 m_RemoteBranchFilter
= gPickRef_Remote
;
17 m_DialogName
=_T("sync");
22 CHistoryCombo m_ctrlLocalBranch
;
23 CHistoryCombo m_ctrlRemoteBranch
;
24 int m_LocalBranchFilter
;
25 int m_RemoteBranchFilter
;
31 CString m_RegKeyRemoteBranch
;
33 void CbnSelchangeLocalBranch()
35 //Select pull-remote from current branch
37 CString currentBranch
=this->m_ctrlLocalBranch
.GetString();
38 configName
.Format(L
"branch.%s.remote", currentBranch
);
39 CString pullRemote
= g_Git
.GetConfigValue(configName
);
41 this->SetRemote(pullRemote
);
43 //Select pull-branch from current branch
44 configName
.Format(L
"branch.%s.merge", currentBranch
);
45 CString pullBranch
= CGit::StripRefName(g_Git
.GetConfigValue(configName
));
47 CString defaultUpstream
;
48 defaultUpstream
.Format(L
"remotes/%s/%s", pullRemote
, pullBranch
);
49 int found
= m_ctrlRemoteBranch
.FindStringExact(0, defaultUpstream
);
52 m_ctrlRemoteBranch
.SetCurSel(found
);
54 else if(!pullBranch
.IsEmpty())
56 m_ctrlRemoteBranch
.AddString(pullBranch
);
58 else if(!this->m_RegKeyRemoteBranch
.IsEmpty())
60 m_ctrlRemoteBranch
.AddString(currentBranch
);
63 this->AddBranchToolTips(&this->m_ctrlLocalBranch
,this->m_pTooltip
);
67 void CbnSelchangeRemoteBranch()
69 if(this->m_RegKeyRemoteBranch
.IsEmpty())
70 this->AddBranchToolTips(&this->m_ctrlRemoteBranch
,this->m_pTooltip
);
74 void BnClickedButtonBrowseLocalBranch()
76 if(CBrowseRefsDlg::PickRefForCombo(&m_ctrlLocalBranch
, m_LocalBranchFilter
))
77 CbnSelchangeLocalBranch();
79 void BnClickedButtonBrowseRemoteBranch()
81 if(!this->m_RegKeyRemoteBranch
.IsEmpty())
83 CString remoteBranchName
;
85 this->m_ctrlRemoteBranch
.GetWindowText(remoteBranchName
);
86 //remoteName = m_Remote.GetString();
87 //remoteBranchName = remoteName + '/' + remoteBranchName;
88 remoteBranchName
= CBrowseRefsDlg::PickRef(false, remoteBranchName
, gPickRef_Remote
);
89 if(remoteBranchName
.IsEmpty())
92 remoteBranchName
= remoteBranchName
.Mid(13);//Strip 'refs/remotes/'
93 int slashPlace
= remoteBranchName
.Find('/');
94 remoteName
= remoteBranchName
.Left(slashPlace
);
95 remoteBranchName
= remoteBranchName
.Mid(slashPlace
+ 1); //Strip remote name (for example 'origin/')
98 //int remoteSel = m_Remote.FindStringExact(0,remoteName);
100 // m_Remote.SetCurSel(remoteSel);
101 this->SetRemote(remoteName
);
104 m_ctrlRemoteBranch
.AddString(remoteBranchName
);
105 CbnSelchangeRemoteBranch();
109 if(CBrowseRefsDlg::PickRefForCombo(&m_ctrlRemoteBranch
, m_RemoteBranchFilter
))
110 CbnSelchangeRemoteBranch();
114 virtual void LocalBranchChange(){};
115 virtual void RemoteBranchChange(){};
116 virtual void SetRemote(CString remote
){};
118 void AddBranchToolTips(CHistoryCombo
*pBranch
,CBalloon
*tip
)
122 CString text
=pBranch
->GetString();
125 g_Git
.GetLog(data
,text
,NULL
,1,0);
127 rev
.ParserFromLog(data
);
128 tooltip
.Format(_T("CommitHash:%s\nCommit by: %s %s\n <b>%s</b> \n %s"),
131 CAppUtils::FormatDateAndTime(rev
.m_AuthorDate
,DATE_LONGDATE
),
135 pBranch
->DisableTooltip();
137 tip
->AddTool(pBranch
->GetComboBoxCtrl(),tooltip
);
141 void LoadBranchInfo()
143 m_ctrlLocalBranch
.SetMaxHistoryItems(0x0FFFFFFF);
144 m_ctrlRemoteBranch
.SetMaxHistoryItems(0x0FFFFFFF);
149 g_Git
.GetBranchList(list
,¤t
,CGit::BRANCH_LOCAL
);
150 m_ctrlLocalBranch
.AddString(list
);
152 CString currentBranch
= g_Git
.GetSymbolicRef();
154 if(this->m_RegKeyRemoteBranch
.IsEmpty())
157 g_Git
.GetBranchList(list
,¤t
,CGit::BRANCH_REMOTE
);
159 m_ctrlRemoteBranch
.AddString(list
);
163 m_ctrlRemoteBranch
.LoadHistory(m_RegKeyRemoteBranch
,_T("sync"));
166 if(!this->m_strLocalBranch
.IsEmpty())
168 m_ctrlLocalBranch
.AddString(m_strLocalBranch
);
169 currentBranch
= m_strLocalBranch
;
173 m_ctrlLocalBranch
.SetCurSel(current
);
176 if(!m_strRemoteBranch
.IsEmpty())
178 m_ctrlRemoteBranch
.AddString(m_strRemoteBranch
);
179 m_ctrlRemoteBranch
.SetCurSel(m_ctrlRemoteBranch
.GetCount()-1);
183 CbnSelchangeLocalBranch();
186 this->LocalBranchChange();
187 this->RemoteBranchChange();
191 CString m_strLocalBranch
;
192 CString m_strRemoteBranch
;
196 if(!this->m_RegKeyRemoteBranch
.IsEmpty())
198 m_ctrlRemoteBranch
.AddString(m_strRemoteBranch
);
199 m_ctrlRemoteBranch
.SaveHistory();
204 #define BRANCH_COMBOX_DDX \
205 DDX_Control(pDX, IDC_COMBOBOXEX_LOCAL_BRANCH, m_ctrlLocalBranch); \
206 DDX_Control(pDX, IDC_COMBOBOXEX_REMOTE_BRANCH, m_ctrlRemoteBranch); \
208 #define BRANCH_COMBOX_EVENT \
209 ON_CBN_SELCHANGE(IDC_COMBOBOXEX_LOCAL_BRANCH, OnCbnSelchangeLocalBranch) \
210 ON_CBN_SELCHANGE(IDC_COMBOBOXEX_REMOTE_BRANCH, OnCbnSelchangeRemoteBranch) \
211 ON_BN_CLICKED(IDC_BUTTON_LOCAL_BRANCH, OnBnClickedButtonBrowseLocalBranch) \
212 ON_BN_CLICKED(IDC_BUTTON_REMOTE_BRANCH, OnBnClickedButtonBrowseRemoteBranch) \
214 #define BRANCH_COMBOX_ADD_ANCHOR() \
215 AddAnchor(IDC_COMBOBOXEX_LOCAL_BRANCH,TOP_LEFT);\
216 AddAnchor(IDC_COMBOBOXEX_REMOTE_BRANCH,TOP_RIGHT);\
217 AddAnchor(IDC_BUTTON_LOCAL_BRANCH,TOP_LEFT);\
218 AddAnchor(IDC_BUTTON_REMOTE_BRANCH,TOP_RIGHT);\
219 AddAnchor(IDC_STATIC_REMOTE_BRANCH,TOP_RIGHT);
221 #define BRANCH_COMBOX_EVENT_HANDLE() \
222 afx_msg void OnCbnSelchangeLocalBranch(){CbnSelchangeLocalBranch();} \
223 afx_msg void OnCbnSelchangeRemoteBranch(){CbnSelchangeRemoteBranch();}\
224 afx_msg void OnBnClickedButtonBrowseLocalBranch(){BnClickedButtonBrowseLocalBranch();}\
225 afx_msg void OnBnClickedButtonBrowseRemoteBranch(){BnClickedButtonBrowseRemoteBranch();}