1 // string_export_dlg.cpp : implementation file
2 //
3 
4 #include "stdafx.h"
5 
6 #include "studiox_includes.h"
7 #include "string_export_dlg.h"
8 #include "config_languages_dlg.h"
9 #include "afxdialogex.h"
10 
11 enum xliff_export_dlg_test_commands{
12     TEST_SET_STRING_EXPORT_SRC_LANGUAGE = 1,
13     TEST_SET_STRING_EXPORT_TARGET_LANGUAGE,
14     TEST_SET_XLIFF_VERSION,
15     TEST_SET_STRING_EXPORT_FILENAME,
16     TEST_SET_STRING_EXPORT_PATH,
17     TEST_SELECT_STRING_EXPORT_FORMAT,
18     TEST_SAVE_STRING_EXPORT,
19     TEST_CANCEL_STRING_EXPORT
20 };
21 
22 STRING_VAL_PAIR string_export_type_list[]={
23     { _T("STRING_EXPORT_TYPE_XLIFF"), STRING_EXPORT_TYPE_XLIFF },
24     { _T("STRING_EXPORT_TYPE_CSV"), STRING_EXPORT_TYPE_CSV },
25     { _T(""), 0 }
26 };
27 
BEGIN_MESSAGE_MAP(string_export_dlg,express_dialog)28 BEGIN_MESSAGE_MAP(string_export_dlg, express_dialog)
29     ON_BN_CLICKED(IDC_BROWSE, &string_export_dlg::OnBnClickedBrowse)
30     ON_BN_CLICKED(IDOK, &string_export_dlg::OnBnClickedOk)
31     ON_MESSAGE(STUDIO_TEST, &string_export_dlg::OnTestMessage)
32     ON_BN_CLICKED(IDC_XLIFF_FORMAT, &string_export_dlg::OnSelectXLIFF)
33     ON_BN_CLICKED(IDC_CSV_FORMAT, &string_export_dlg::OnSelectCSV)
34 END_MESSAGE_MAP()
35 
36 ///////////////////////////////////////////////////////////////////////////////
37 string_export_dlg::string_export_dlg(CWnd* pParent /*=NULL*/)
38     : express_dialog(string_export_dlg::IDD, pParent)
39 {
40     IconId = IDB_EXPORT;
41     SetTitleText("XLIFF/CSV Export Control");
42 }
43 
44 ///////////////////////////////////////////////////////////////////////////////
~string_export_dlg()45 string_export_dlg::~string_export_dlg()
46 {
47 }
48 
49 ///////////////////////////////////////////////////////////////////////////////
DoDataExchange(CDataExchange * pDX)50 void string_export_dlg::DoDataExchange(CDataExchange* pDX)
51 {
52     CDialog::DoDataExchange(pDX);
53     DDX_Control(pDX, IDC_SRC_LANGUAGE, mSrcLanguageCombo);
54     DDX_Control(pDX, IDC_TARGET_LANGUAGE, mTargetLanguageCombo);
55     DDX_Control(pDX, IDC_XLIFF_VERSION, xliff_version_combo);
56 
57     int index = 0;
58 
59     while(1)
60     {
61         CString lang_name;
62         lang_name = config_languages_dlg::BuildCombinedLanguageName(index);
63         if (lang_name.IsEmpty())
64         {
65             break;
66         }
67         mSrcLanguageCombo.AddString(lang_name);
68         mTargetLanguageCombo.AddString(lang_name);
69         index++;
70     }
71     xliff_version_combo.AddString(_T("version 1.2"));
72     xliff_version_combo.AddString(_T("version 2.0"));
73 
74     CRect size;
75 
76     studiox_project *project = GetOpenProject();
77 
78     if (!project)
79     {
80         return;
81     }
82 
83     // Set the drop-down list size for each of the combo-boxes.
84     // There doesn't seem to be any way to do it in resource editor.
85     mTargetLanguageCombo.GetWindowRect(&size);
86     size.bottom = size.top + 200;
87     ScreenToClient(&size);
88     mTargetLanguageCombo.MoveWindow(&size);
89     mTargetLanguageCombo.SetCurSel(project->mHeader.string_export_target);
90 
91     mSrcLanguageCombo.GetWindowRect(&size);
92     size.bottom = size.top + 200;
93     ScreenToClient(&size);
94     mSrcLanguageCombo.MoveWindow(&size);
95     mSrcLanguageCombo.SetCurSel(project->mHeader.string_export_src);
96 
97     xliff_version_combo.GetWindowRect(&size);
98     size.bottom = size.top + 60;
99     ScreenToClient(&size);
100     xliff_version_combo.MoveWindow(&size);
101 
102     if (project->mHeader.string_export_version == 2)
103     {
104         xliff_version_combo.SetCurSel(1);
105     }
106     else
107     {
108         xliff_version_combo.SetCurSel(0);
109     }
110 
111     if (!pDX->m_bSaveAndValidate)
112     {
113         SetDlgItemText(IDC_FILENAME, project->mHeader.string_export_filename);
114         SetDlgItemText(IDC_PATH, project->mHeader.string_export_path);
115 
116         if (project->mHeader.string_export_filetype == STRING_EXPORT_TYPE_XLIFF)
117         {
118             ((CButton *)GetDlgItem(IDC_XLIFF_FORMAT))->SetCheck(TRUE);
119         }
120         else
121         {
122             ((CButton *)GetDlgItem(IDC_CSV_FORMAT))->SetCheck(TRUE);
123         }
124 
125         ShowHideXliffVersion();
126     }
127     else
128     {
129         int check = ((CButton *)GetDlgItem(IDC_XLIFF_FORMAT))->GetCheck();
130         if (check)
131         {
132             project->mHeader.string_export_filetype = STRING_EXPORT_TYPE_XLIFF;
133         }
134         else
135         {
136             project->mHeader.string_export_filetype = STRING_EXPORT_TYPE_CSV;
137         }
138     }
139 }
140 
141 ///////////////////////////////////////////////////////////////////////////////
OnBnClickedBrowse()142 void string_export_dlg::OnBnClickedBrowse()
143 {
144     TCHAR path[MAX_PATH];
145     CString current_path;
146     GetDlgItemText(IDC_PATH, current_path);
147 
148     // TODO: Add your control notification handler code here
149     if (BrowseForFolder(m_hWnd, _T("Select output folder..."), current_path, path) == TRUE)
150     {
151         current_path = path;
152         ConvertToProjectRelativePath(current_path);
153         SetDlgItemText(IDC_PATH, current_path);
154     }
155 }
156 
157 ///////////////////////////////////////////////////////////////////////////////
OnBnClickedOk()158 void string_export_dlg::OnBnClickedOk()
159 {
160     int src_index = mSrcLanguageCombo.GetCurSel();
161     int target_index = mTargetLanguageCombo.GetCurSel();
162     CString test_name;
163     studiox_project *pProject = GetOpenProject();
164 
165     if (!pProject)
166     {
167         CDialog::OnOK();
168         return;
169     }
170 
171     if (src_index == target_index)
172     {
173         ErrorMsg("Source and Target languages cannot be the same", this);
174         return;
175     }
176 
177     int project_index = config_languages_dlg::GetStringTableIndexFromLanguageIndex(GetOpenProject(), src_index);
178 
179     if (project_index == -1)
180     {
181         ErrorMsg("The specified source language is not included in this project.", this);
182         return;
183     }
184 
185     GetDlgItemText(IDC_FILENAME, test_name);
186 
187     if (test_name.IsEmpty())
188     {
189         ErrorMsg("Please enter a valid filename", this);
190         return;
191     }
192 
193     GetDlgItemText(IDC_PATH, test_name);
194 
195     if (test_name.IsEmpty())
196     {
197         SetDlgItemText(IDC_PATH, _T(".\\"));
198     }
199 
200     // save the information to the project header:
201 
202     pProject->mHeader.string_export_src = src_index;
203     pProject->mHeader.string_export_target = target_index;
204     if (xliff_version_combo.GetCurSel() == 1)
205     {
206         pProject->mHeader.string_export_version = 2;
207     }
208     else
209     {
210         pProject->mHeader.string_export_version = 1;
211     }
212     GetDlgItemText(IDC_FILENAME, pProject->mHeader.string_export_filename);
213     GetDlgItemText(IDC_PATH, pProject->mHeader.string_export_path);
214     pProject->SetModified();
215 
216     // TODO: Add your control notification handler code here
217     CDialog::OnOK();
218 }
219 
220 ///////////////////////////////////////////////////////////////////////////////
GetSrcLanguage()221 int string_export_dlg::GetSrcLanguage()
222 {
223     return mSrcLanguageCombo.GetCurSel();
224 }
225 
226 ///////////////////////////////////////////////////////////////////////////////
GetTargetLanguage()227 int string_export_dlg::GetTargetLanguage()
228 {
229     return mTargetLanguageCombo.GetCurSel();
230 }
231 
232 ///////////////////////////////////////////////////////////////////////////////
GetXliffVersion()233 int string_export_dlg::GetXliffVersion()
234 {
235     if (xliff_version_combo.GetCurSel())
236     {
237         return 2;
238     }
239     return 1;
240 }
241 
242 ///////////////////////////////////////////////////////////////////////////////
GetPathname()243 CString string_export_dlg::GetPathname()
244 {
245     CString pathname;
246     CString filename;
247     GetDlgItemText(IDC_PATH, pathname);
248     GetDlgItemText(IDC_FILENAME, filename);
249     pathname += "\\";
250     pathname += filename;
251     return pathname;
252 }
253 
254 ///////////////////////////////////////////////////////////////////////////////
GetStringExportType(CString type_name)255 int string_export_dlg::GetStringExportType(CString type_name)
256 {
257 	return FindPairVal(string_export_type_list, type_name);
258 }
259 
260 ///////////////////////////////////////////////////////////////////////////////
GetStringExportTypeName(int type)261 CString string_export_dlg::GetStringExportTypeName(int type)
262 {
263 	return FindPairString(string_export_type_list, type);
264 }
265 
266 ///////////////////////////////////////////////////////////////////////////////
OnInitDialog()267 BOOL string_export_dlg::OnInitDialog()
268 {
269     express_dialog::OnInitDialog();
270 
271     // TODO:  Add extra initialization here
272     AddCancelButton();
273     AddSaveButton();
274 
275     return TRUE;  // return TRUE unless you set the focus to a control
276                   // EXCEPTION: OCX Property Pages should return FALSE
277 }
278 
279 ///////////////////////////////////////////////////////////////////////////////
OnSelectXLIFF()280 void string_export_dlg::OnSelectXLIFF()
281 {
282     ShowHideXliffVersion();
283 }
284 
285 ///////////////////////////////////////////////////////////////////////////////
OnSelectCSV()286 void string_export_dlg::OnSelectCSV()
287 {
288     ShowHideXliffVersion();
289 }
290 
291 ///////////////////////////////////////////////////////////////////////////////
ShowHideXliffVersion()292 void string_export_dlg::ShowHideXliffVersion()
293 {
294     int check = ((CButton *)GetDlgItem(IDC_XLIFF_FORMAT))->GetCheck();
295 
296     GetDlgItem(IDC_XLIFF_VERSION_LABEL)->ShowWindow(check);
297     GetDlgItem(IDC_XLIFF_VERSION)->ShowWindow(check);
298 }
299 
300 ///////////////////////////////////////////////////////////////////////////////
OnTestMessage(WPARAM wParam,LPARAM lParam)301 afx_msg LRESULT string_export_dlg::OnTestMessage(WPARAM wParam, LPARAM lParam)
302 {
303     int language_index;
304     int ctrl_id;
305 
306     switch (wParam)
307     {
308     case TEST_SET_STRING_EXPORT_SRC_LANGUAGE:
309         language_index = config_languages_dlg::GetLanguageNameIndex(GetTestingParam(0));
310         mSrcLanguageCombo.SetCurSel(language_index);
311         break;
312 
313     case TEST_SET_STRING_EXPORT_TARGET_LANGUAGE:
314         language_index = config_languages_dlg::GetLanguageNameIndex(GetTestingParam(0));
315         mTargetLanguageCombo.SetCurSel(language_index);
316         break;
317 
318     case TEST_SET_XLIFF_VERSION:
319         xliff_version_combo.SetCurSel(lParam);
320         break;
321 
322     case TEST_SET_STRING_EXPORT_FILENAME:
323         SetDlgItemText(IDC_FILENAME, GetTestingParam(0));
324         break;
325 
326     case TEST_SET_STRING_EXPORT_PATH:
327         SetDlgItemText(IDC_PATH, GetTestingParam(0));
328         break;
329 
330     case TEST_SELECT_STRING_EXPORT_FORMAT:
331         if (lParam == STRING_EXPORT_TYPE_CSV)
332         {
333             ctrl_id = IDC_CSV_FORMAT;
334 
335         }
336         else
337         {
338             ctrl_id = IDC_XLIFF_FORMAT;
339         }
340 
341         CheckRadioButton(IDC_XLIFF_FORMAT, IDC_CSV_FORMAT, ctrl_id);
342         SendMessage(WM_COMMAND, MAKEWPARAM(ctrl_id, BN_CLICKED), 0);
343         break;
344 
345     case TEST_SAVE_STRING_EXPORT:
346         OnBnClickedOk();
347         break;
348 
349     case TEST_CANCEL_STRING_EXPORT:
350         OnCancel();
351         break;
352     }
353 
354     return 0;
355 }
356