OSDN Git Service

Fix untranslated strings
[winmerge-jp/winmerge-jp.git] / Src / DirFilterDlg.cpp
1 /** 
2  * @file  DirFilterDlg.cpp
3  *
4  * @brief Implementation file for DirCmpReport dialog
5  *
6  */
7
8 #include "stdafx.h"
9 #include "Coretools.h"
10 #include "DirFilterDlg.h"
11 #include "DirReportTypes.h"
12 #include "paths.h"
13 #include "FileOrFolderSelect.h"
14 #include "Merge.h"
15
16 IMPLEMENT_DYNAMIC(DirFilterDlg, CDialog)
17
18 /**
19  * @brief Constructor.
20  */
21 DirFilterDlg::DirFilterDlg(CWnd* pParent /*=NULL*/)
22         : CDialog(DirFilterDlg::IDD, pParent)
23         , m_bCopyToClipboard(FALSE)
24         , m_nReportType(REPORT_TYPE_COMMALIST)
25 {
26 }
27
28 /**
29  * @brief Map dialog controls to member variables.
30  * This function maps dialog controls with member variables so
31  * when UpdateData() is called controls and member variables
32  * get updated.
33  */
34 void DirFilterDlg::DoDataExchange(CDataExchange* pDX)
35 {
36         CDialog::DoDataExchange(pDX);
37         DDX_Control(pDX, IDC_REPORT_FILE, m_ctlReportFile);
38         DDX_Control(pDX, IDC_REPORT_STYLECOMBO, m_ctlStyle);
39         DDX_Text(pDX, IDC_REPORT_FILE, m_sReportFile);
40         DDX_Check(pDX, IDC_REPORT_COPYCLIPBOARD, m_bCopyToClipboard);
41 }
42
43 BEGIN_MESSAGE_MAP(DirFilterDlg, CDialog)
44         ON_BN_CLICKED(IDC_REPORT_BROWSEFILE, OnBtnClickReportBrowse)
45         ON_BN_DOUBLECLICKED(IDC_REPORT_COPYCLIPBOARD, OnBtnDblclickCopyClipboard)
46 END_MESSAGE_MAP()
47
48 /**
49  * @brief Definition for structure containing report types.
50  * This struct is used to form a report types list. This list
51  * can be then used to initialize the GUI for reports.
52  */
53 struct ReportTypeInfo
54 {
55         REPORT_TYPE reportType; /**< Report-type ID */
56         int idDisplay; /**< Resource-string ID (shown in file-selection dialog) */
57         int browseFilter; /**< File-extension filter (resource-string ID) */
58 };
59
60 /**
61  * @brief List of report types.
62  * This list is used to initialize the GUI.
63  */
64 static ReportTypeInfo f_types[] = {
65         { REPORT_TYPE_COMMALIST,
66                 IDS_REPORT_COMMALIST,
67                 IDS_TEXT_REPORT_FILES
68         },
69         { REPORT_TYPE_TABLIST,
70                 IDS_REPORT_TABLIST,
71                 IDS_TEXT_REPORT_FILES
72         },
73         { REPORT_TYPE_SIMPLEHTML,
74                 IDS_REPORT_SIMPLEHTML,
75                 IDS_HTML_REPORT_FILES
76         },
77         { REPORT_TYPE_SIMPLEXML,
78                 IDS_REPORT_SIMPLEXML,
79                 IDS_XML_REPORT_FILES
80         },
81 };
82
83 /**
84  * @brief Dialog initializer function.
85  */
86 BOOL DirFilterDlg::OnInitDialog()
87 {
88         theApp.TranslateDialog(m_hWnd);
89         CDialog::OnInitDialog();
90
91         m_ctlReportFile.LoadState(_T("ReportFiles"));
92
93         for (int i = 0; i < sizeof(f_types) / sizeof(f_types[0]); ++i)
94         {
95                 const ReportTypeInfo & info = f_types[i];
96                 int ind = m_ctlStyle.InsertString(i, theApp.LoadString(info.idDisplay).c_str());
97                 m_ctlStyle.SetItemData(ind, info.reportType);
98
99         }
100         m_ctlStyle.SetCurSel(0);
101         // Set selected path to variable so file selection dialog shows
102         // correct filename and path.
103         m_ctlReportFile.GetWindowText(m_sReportFile);
104
105         return TRUE;  // return TRUE unless you set the focus to a control
106                       // EXCEPTION: OCX Property Pages should return FALSE
107 }
108
109 /**
110  * @brief Browse for report file.
111  */
112 void DirFilterDlg::OnBtnClickReportBrowse()
113 {
114         UpdateData(TRUE);
115
116         CString folder = m_sReportFile;
117         int filterid = f_types[m_ctlStyle.GetCurSel()].browseFilter;
118
119         CString chosenFilepath;
120         if (SelectFile(GetSafeHwnd(), chosenFilepath, folder, IDS_SAVE_AS_TITLE,
121                         filterid, FALSE))
122         {
123                 m_sReportFile = chosenFilepath;
124                 m_ctlReportFile.SetWindowText(chosenFilepath);
125         }
126 }
127
128 /**
129  * @brief Erase report file name.
130  */
131 void DirFilterDlg::OnBtnDblclickCopyClipboard()
132 {
133         m_ctlReportFile.SetWindowText(_T(""));
134 }
135
136 /**
137  * @brief Close dialog.
138  */
139 void DirFilterDlg::OnOK()
140 {
141         UpdateData(TRUE);
142
143         int sel = m_ctlStyle.GetCurSel();
144         m_nReportType = (REPORT_TYPE)m_ctlStyle.GetItemData(sel);
145
146         if (m_sReportFile.IsEmpty() && !m_bCopyToClipboard)
147         {
148                 LangMessageBox(IDS_MUST_SPECIFY_OUTPUT, MB_ICONSTOP);
149                 m_ctlReportFile.SetFocus();
150                 return;
151         }
152
153         if (!m_sReportFile.IsEmpty())
154         {
155                 if (paths_DoesPathExist(m_sReportFile) == IS_EXISTING_FILE)
156                 {
157                         int overWrite = LangMessageBox(IDS_REPORT_FILEOVERWRITE,
158                                         MB_YESNO | MB_ICONWARNING | MB_DONT_ASK_AGAIN,
159                                         IDS_DIFF_FILEOVERWRITE);
160                         if (overWrite == IDNO)
161                                 return;
162                 }
163         }
164
165         m_ctlReportFile.SaveState(_T("ReportFiles"));
166
167         CDialog::OnOK();
168 }