OSDN Git Service

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