Drop unused printing code templates
[TortoiseGit.git] / src / TortoiseProc / BranchCombox.h
blob2a00003987631d042c18db2b7a88b331b5658bb2
1 // TortoiseGit - a Windows shell extension for easy version control
3 // Copyright (C) 2009-2018 - TortoiseGit
5 // This program is free software; you can redistribute it and/or
6 // modify it under the terms of the GNU General Public License
7 // as published by the Free Software Foundation; either version 2
8 // of the License, or (at your option) any later version.
10 // This program is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
15 // You should have received a copy of the GNU General Public License
16 // along with this program; if not, write to the Free Software Foundation,
17 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19 #pragma once
20 #include "LogDlg.h"
21 #include "BrowseRefsDlg.h"
22 #include "HistoryCombo.h"
23 #include "LoglistUtils.h"
24 #include "UnicodeUtils.h"
25 #include "Tooltip.h"
27 class CBranchCombox
29 public:
30 CBranchCombox()
31 : m_LocalBranchFilter(gPickRef_Head)
32 , m_RemoteBranchFilter(gPickRef_Remote)
33 , m_DialogName(L"sync")
34 , m_pTooltip(nullptr)
37 protected:
38 CHistoryCombo m_ctrlLocalBranch;
39 CHistoryCombo m_ctrlRemoteBranch;
40 int m_LocalBranchFilter;
41 int m_RemoteBranchFilter;
43 CToolTips *m_pTooltip;
45 CString m_DialogName;
47 CString m_RegKeyRemoteBranch;
49 void CbnSelchangeLocalBranch()
51 //Select pull-remote from current branch
52 CString pullRemote, pullBranch;
53 g_Git.GetRemoteTrackedBranch(m_ctrlLocalBranch.GetString(), pullRemote, pullBranch);
55 this->SetRemote(pullRemote);
57 CString defaultUpstream;
58 defaultUpstream.Format(L"remotes/%s/%s", (LPCTSTR)pullRemote, (LPCTSTR)pullBranch);
59 int found = m_ctrlRemoteBranch.FindStringExact(0, defaultUpstream);
60 if(found >= 0)
61 m_ctrlRemoteBranch.SetCurSel(found);
62 else if(!pullBranch.IsEmpty())
64 int index=m_ctrlRemoteBranch.FindStringExact(0,pullBranch);
65 if( index<0 )
66 m_ctrlRemoteBranch.AddString(pullBranch);
67 else
68 m_ctrlRemoteBranch.SetCurSel(index);
70 else
71 m_ctrlRemoteBranch.SetCurSel(-1);
73 this->AddBranchToolTips(&this->m_ctrlLocalBranch,this->m_pTooltip);
75 LocalBranchChange();
77 void CbnSelchangeRemoteBranch()
79 if(this->m_RegKeyRemoteBranch.IsEmpty())
80 this->AddBranchToolTips(&this->m_ctrlRemoteBranch,this->m_pTooltip);
82 RemoteBranchChange();
84 void BnClickedButtonBrowseLocalBranch()
86 if (CBrowseRefsDlg::PickRefForCombo(m_ctrlLocalBranch, m_LocalBranchFilter))
87 CbnSelchangeLocalBranch();
89 void BnClickedButtonBrowseRemoteBranch()
91 if(!this->m_RegKeyRemoteBranch.IsEmpty())
93 CString remoteBranchName;
94 CString remoteName;
95 this->m_ctrlRemoteBranch.GetWindowText(remoteBranchName);
96 //remoteName = m_Remote.GetString();
97 //remoteBranchName = remoteName + '/' + remoteBranchName;
98 remoteBranchName = CBrowseRefsDlg::PickRef(false, remoteBranchName, gPickRef_Remote);
99 if(remoteBranchName.IsEmpty())
100 return; //Canceled
102 remoteBranchName = remoteBranchName.Mid((int)wcslen(L"refs/remotes/")); //Strip 'refs/remotes/'
103 int slashPlace = remoteBranchName.Find('/');
104 remoteName = remoteBranchName.Left(slashPlace);
105 remoteBranchName = remoteBranchName.Mid(slashPlace + 1); //Strip remote name (for example 'origin/')
107 //Select remote
108 //int remoteSel = m_Remote.FindStringExact(0,remoteName);
109 //if(remoteSel >= 0)
110 // m_Remote.SetCurSel(remoteSel);
111 this->SetRemote(remoteName);
113 //Select branch
114 m_ctrlRemoteBranch.AddString(remoteBranchName);
115 CbnSelchangeRemoteBranch();
118 else
120 if (CBrowseRefsDlg::PickRefForCombo(m_ctrlRemoteBranch, m_RemoteBranchFilter))
121 CbnSelchangeRemoteBranch();
125 virtual void LocalBranchChange(){};
126 virtual void RemoteBranchChange(){};
127 virtual void SetRemote(CString remote){};
129 void AddBranchToolTips(CHistoryCombo *pBranch, CToolTips *tip)
131 if(pBranch&&tip)
133 CString text=pBranch->GetString();
134 CString tooltip;
136 if (text.IsEmpty())
138 pBranch->DisableTooltip();
139 return;
142 GitRev rev;
143 if (rev.GetCommit(text))
145 pBranch->DisableTooltip();
146 MessageBox(nullptr, rev.GetLastErr(), L"TortoiseGit", MB_ICONERROR);
147 return;
150 tooltip.Format(L"%s: %s\n%s: %s <%s>\n%s: %s\n%s:\n%s\n%s",
151 (LPCTSTR)CString(MAKEINTRESOURCE(IDS_LOG_REVISION)), // TODOTODO
152 (LPCTSTR)rev.m_CommitHash.ToString(),
153 (LPCTSTR)CString(MAKEINTRESOURCE(IDS_LOG_AUTHOR)),
154 (LPCTSTR)rev.GetAuthorName(),
155 (LPCTSTR)rev.GetAuthorEmail(),
156 (LPCTSTR)CString(MAKEINTRESOURCE(IDS_LOG_DATE)),
157 (LPCTSTR)CLoglistUtils::FormatDateAndTime(rev.GetAuthorDate(), DATE_LONGDATE),
158 (LPCTSTR)CString(MAKEINTRESOURCE(IDS_LOG_MESSAGE)),
159 (LPCTSTR)rev.GetSubject(),
160 (LPCTSTR)rev.GetBody());
162 pBranch->DisableTooltip();
164 tip->AddTool(pBranch->GetComboBoxCtrl(),tooltip);
168 void LoadBranchInfo()
170 m_ctrlLocalBranch.SetMaxHistoryItems(0x0FFFFFFF);
171 m_ctrlRemoteBranch.SetMaxHistoryItems(0x0FFFFFFF);
173 STRING_VECTOR list;
174 list.clear();
175 int current=0;
177 g_Git.GetBranchList(list,&current,CGit::BRANCH_LOCAL_F);
179 m_ctrlLocalBranch.SetList(list);
181 if(this->m_RegKeyRemoteBranch.IsEmpty())
183 list.clear();
184 g_Git.GetBranchList(list, nullptr, CGit::BRANCH_REMOTE);
186 m_ctrlRemoteBranch.SetList(list);
188 else
190 m_ctrlRemoteBranch.Reset();
191 m_ctrlRemoteBranch.LoadHistory(m_RegKeyRemoteBranch, L"sync");
194 if(!this->m_strLocalBranch.IsEmpty())
195 m_ctrlLocalBranch.AddString(m_strLocalBranch);
196 else
197 m_ctrlLocalBranch.SetCurSel(current);
199 if(!m_strRemoteBranch.IsEmpty())
201 m_ctrlRemoteBranch.AddString(m_strRemoteBranch);
202 m_ctrlRemoteBranch.SetCurSel(m_ctrlRemoteBranch.GetCount()-1);
204 else
205 CbnSelchangeLocalBranch();
207 this->LocalBranchChange();
208 this->RemoteBranchChange();
211 public:
212 CString m_strLocalBranch;
213 CString m_strRemoteBranch;
215 void SaveHistory()
217 if(!this->m_RegKeyRemoteBranch.IsEmpty())
219 m_ctrlRemoteBranch.AddString(m_strRemoteBranch);
220 m_ctrlRemoteBranch.SaveHistory();
225 #define BRANCH_COMBOX_DDX \
226 DDX_Control(pDX, IDC_COMBOBOXEX_LOCAL_BRANCH, m_ctrlLocalBranch); \
227 DDX_Control(pDX, IDC_COMBOBOXEX_REMOTE_BRANCH, m_ctrlRemoteBranch); \
229 #define BRANCH_COMBOX_EVENT \
230 ON_CBN_SELCHANGE(IDC_COMBOBOXEX_LOCAL_BRANCH, OnCbnSelchangeLocalBranch) \
231 ON_CBN_SELCHANGE(IDC_COMBOBOXEX_REMOTE_BRANCH, OnCbnSelchangeRemoteBranch) \
232 ON_BN_CLICKED(IDC_BUTTON_LOCAL_BRANCH, OnBnClickedButtonBrowseLocalBranch) \
233 ON_BN_CLICKED(IDC_BUTTON_REMOTE_BRANCH, OnBnClickedButtonBrowseRemoteBranch) \
235 #define BRANCH_COMBOX_ADD_ANCHOR() \
236 AddAnchor(IDC_COMBOBOXEX_LOCAL_BRANCH,TOP_LEFT);\
237 AddAnchor(IDC_COMBOBOXEX_REMOTE_BRANCH,TOP_RIGHT);\
238 AddAnchor(IDC_BUTTON_LOCAL_BRANCH,TOP_LEFT);\
239 AddAnchor(IDC_BUTTON_REMOTE_BRANCH,TOP_RIGHT);\
240 AddAnchor(IDC_STATIC_REMOTE_BRANCH,TOP_RIGHT);
242 #define BRANCH_COMBOX_EVENT_HANDLE() \
243 afx_msg void OnCbnSelchangeLocalBranch(){CbnSelchangeLocalBranch();} \
244 afx_msg void OnCbnSelchangeRemoteBranch(){CbnSelchangeRemoteBranch();}\
245 afx_msg void OnBnClickedButtonBrowseLocalBranch(){BnClickedButtonBrowseLocalBranch();}\
246 afx_msg void OnBnClickedButtonBrowseRemoteBranch(){BnClickedButtonBrowseRemoteBranch();}