OSDN Git Service

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