OSDN Git Service

Branch/Tag dlg: Update 'track' option after browse-refs
[tortoisegit/TortoiseGitJp.git] / src / TortoiseProc / ChooseVersion.h
1 #pragma once\r
2 #include "afxwin.h"\r
3 #include "LogDlg.h"\r
4 #include "BrowseRefsDlg.h"\r
5 \r
6 class CChooseVersion\r
7 {\r
8 public:\r
9         \r
10 private:\r
11         CWnd *  m_pWin;\r
12 protected:\r
13         CHistoryCombo m_ChooseVersioinBranch;  \r
14         CHistoryCombo m_ChooseVersioinTags;    \r
15         CHistoryCombo m_ChooseVersioinVersion; \r
16 \r
17         //Notification when version changed. Can be implemented in derived classes.\r
18         virtual void OnVersionChanged(){}\r
19 \r
20         afx_msg void OnBnClickedChooseRadio() \r
21         {\r
22                 this->m_ChooseVersioinTags.EnableWindow(FALSE);                                                                                                 \r
23                 this->m_ChooseVersioinBranch.EnableWindow(FALSE);                                       \r
24                 this->m_ChooseVersioinVersion.EnableWindow(FALSE);                              \r
25                 int radio=m_pWin->GetCheckedRadioButton(IDC_RADIO_HEAD,IDC_RADIO_VERSION);\r
26                 switch (radio)                                                                                  \r
27                 {                                                                                                                       \r
28                 case IDC_RADIO_HEAD:                                                                            \r
29                         break;                                                                                                  \r
30                 case IDC_RADIO_BRANCH:                                                                          \r
31                         this->m_ChooseVersioinBranch.EnableWindow(TRUE);                                                \r
32                         break;                                                                                                  \r
33                 case IDC_RADIO_TAGS:                                                                            \r
34                         this->m_ChooseVersioinTags.EnableWindow(TRUE);                                          \r
35                         break;                                                                                                  \r
36                 case IDC_RADIO_VERSION:                                                                         \r
37                         this->m_ChooseVersioinVersion.EnableWindow(TRUE);                                               \r
38                 break;          \r
39                 }\r
40                 // enable version browse button if Version is selected\r
41                 m_pWin->GetDlgItem(IDC_BUTTON_SHOW)->EnableWindow(radio == IDC_RADIO_VERSION);\r
42                 OnVersionChanged();\r
43         }\r
44 \r
45         void OnBnClickedChooseVersion()\r
46         {\r
47                 // use the git log to allow selection of a version\r
48                 CLogDlg dlg;\r
49                 // tell the dialog to use mode for selecting revisions\r
50                 dlg.SetSelect(true);\r
51                 // only one revision must be selected however\r
52                 dlg.SingleSelection(true);\r
53                 if ( dlg.DoModal() == IDOK )\r
54                 {\r
55                         // get selected hash if any\r
56                         CString selectedHash = dlg.GetSelectedHash();\r
57                         // load into window, do this even if empty so that it is clear that nothing has been selected\r
58                         m_ChooseVersioinVersion.SetWindowText( selectedHash );\r
59                         OnVersionChanged();\r
60                 }\r
61         }\r
62 \r
63         void UpdateRevsionName()\r
64         {                                                                                                                                                       \r
65                 int radio=m_pWin->GetCheckedRadioButton(IDC_RADIO_HEAD,IDC_RADIO_VERSION);              \r
66                 switch (radio)                                                                                                                  \r
67                 {                                                                                                                                               \r
68                 case IDC_RADIO_HEAD:                                                                                                    \r
69                         this->m_VersionName=_T("HEAD");                                                                                 \r
70                         break;                                                                                                                          \r
71                 case IDC_RADIO_BRANCH:                                                                                                  \r
72                         this->m_VersionName=m_ChooseVersioinBranch.GetString();                                                                 \r
73                         break;                                                                                                                          \r
74                 case IDC_RADIO_TAGS:                                                                                                    \r
75                         this->m_VersionName=m_ChooseVersioinTags.GetString();                                                                   \r
76                         break;                                                                                                                          \r
77                 case IDC_RADIO_VERSION:                                                                                                 \r
78                         this->m_VersionName=m_ChooseVersioinVersion.GetString();                                                                        \r
79                         break;  \r
80                 }\r
81         }                       \r
82         void SetDefaultChoose(int id)\r
83         {\r
84                 m_pWin->CheckRadioButton(IDC_RADIO_HEAD,IDC_RADIO_VERSION,id);\r
85                 OnBnClickedChooseRadio();\r
86         }\r
87 \r
88         void OnBnClickedButtonBrowseRef()\r
89         {\r
90                 CString origRef;\r
91                 UpdateRevsionName();\r
92                 CString resultRef = CBrowseRefsDlg::PickRef(false, m_VersionName, gPickRef_All);\r
93                 if(resultRef.IsEmpty())\r
94                         return;\r
95                 if(wcsncmp(resultRef,L"refs/",5)==0)\r
96                         resultRef = resultRef.Mid(5);\r
97                 if(wcsncmp(resultRef,L"heads/",6)==0)\r
98                 {\r
99                         resultRef = resultRef.Mid(6);\r
100                         SetDefaultChoose(IDC_RADIO_BRANCH);\r
101                         m_ChooseVersioinBranch.SetCurSel(\r
102                                 m_ChooseVersioinBranch.FindStringExact(-1, resultRef));\r
103                 }\r
104                 else if(wcsncmp(resultRef,L"remotes/",8)==0)\r
105                 {\r
106                         SetDefaultChoose(IDC_RADIO_BRANCH);\r
107                         m_ChooseVersioinBranch.SetCurSel(\r
108                                 m_ChooseVersioinBranch.FindStringExact(-1, resultRef));\r
109                 }\r
110                 else if(wcsncmp(resultRef,L"tags/",5)==0)\r
111                 {\r
112                         resultRef = resultRef.Mid(5);\r
113                         SetDefaultChoose(IDC_RADIO_TAGS);\r
114                         m_ChooseVersioinTags.SetCurSel(\r
115                                 m_ChooseVersioinTags.FindStringExact(-1, resultRef));\r
116                 }\r
117                 OnVersionChanged();\r
118         }\r
119 \r
120 \r
121         void Init()\r
122         {       \r
123                 m_ChooseVersioinBranch.SetMaxHistoryItems(0x7FFFFFFF);\r
124                 m_ChooseVersioinTags.SetMaxHistoryItems(0x7FFFFFFF);\r
125 \r
126                 STRING_VECTOR list;\r
127                 g_Git.GetTagList(list);\r
128                 m_ChooseVersioinTags.AddString(list);\r
129 \r
130                 list.clear();\r
131                 int current;\r
132                 g_Git.GetBranchList(list,&current,CGit::BRANCH_ALL);\r
133                 m_ChooseVersioinBranch.AddString(list);\r
134                 m_ChooseVersioinBranch.SetCurSel(current);\r
135 \r
136 \r
137                 OnVersionChanged();\r
138         }\r
139 public:                                 \r
140         CString m_VersionName;\r
141         CChooseVersion(CWnd *win)\r
142         {\r
143                 m_pWin=win;\r
144         };\r
145 \r
146 };\r
147 \r
148 \r
149 #define CHOOSE_VERSION_DDX \\r
150         DDX_Control(pDX, IDC_COMBOBOXEX_BRANCH,         m_ChooseVersioinBranch); \\r
151         DDX_Control(pDX, IDC_COMBOBOXEX_TAGS,           m_ChooseVersioinTags);     \\r
152         DDX_Control(pDX, IDC_COMBOBOXEX_VERSION,        m_ChooseVersioinVersion);\r
153 \r
154 #define CHOOSE_VERSION_EVENT\\r
155         ON_BN_CLICKED(IDC_RADIO_HEAD,           OnBnClickedChooseRadioHost)\\r
156         ON_BN_CLICKED(IDC_RADIO_BRANCH,         OnBnClickedChooseRadioHost)\\r
157         ON_BN_CLICKED(IDC_RADIO_TAGS,           OnBnClickedChooseRadioHost)\\r
158         ON_BN_CLICKED(IDC_BUTTON_SHOW,          OnBnClickedShow)\\r
159         ON_BN_CLICKED(IDC_RADIO_VERSION,        OnBnClickedChooseRadioHost)\\r
160         ON_BN_CLICKED(IDC_BUTTON_BROWSE_REF,    OnBnClickedButtonBrowseRefHost)\r
161 \r
162 #define CHOOSE_VERSION_ADDANCHOR                                                                \\r
163         {                                                                                                                       \\r
164                 AddAnchor(IDC_COMBOBOXEX_BRANCH, TOP_LEFT, TOP_RIGHT);  \\r
165                 AddAnchor(IDC_COMBOBOXEX_TAGS, TOP_LEFT, TOP_RIGHT);    \\r
166                 AddAnchor(IDC_COMBOBOXEX_VERSION, TOP_LEFT, TOP_RIGHT); \\r
167                 AddAnchor(IDC_GROUP_BASEON, TOP_LEFT, TOP_RIGHT);               \\r
168                 AddAnchor(IDC_BUTTON_SHOW,TOP_RIGHT);           \\r
169                 AddAnchor(IDC_BUTTON_BROWSE_REF,TOP_RIGHT);             \\r
170         }       \r
171 \r
172 #define CHOOSE_EVENT_RADIO() \\r
173         afx_msg void OnBnClickedChooseRadioHost(){OnBnClickedChooseRadio();}\\r
174         afx_msg void OnBnClickedShow(){OnBnClickedChooseVersion();}\\r
175         afx_msg void OnBnClickedButtonBrowseRefHost(){OnBnClickedButtonBrowseRef();}\r