OSDN Git Service

refactor
[winmerge-jp/winmerge-jp.git] / Src / TestFilterDlg.cpp
1 /** 
2  * @file  TestFilterDlg.cpp
3  *
4  * @brief Dialog for testing file filters
5  */
6
7 #include "stdafx.h"
8 #include "TestFilterDlg.h"
9 #include "resource.h"
10 #include "UnicodeString.h"
11 #include "FileFilterMgr.h"
12
13 #ifdef _DEBUG
14 #define new DEBUG_NEW
15 #endif
16
17 /**
18  * @brief Constructor.
19  * @param [in] pParent Parent window.
20  * @param [in] pFileFilter File filter to test.
21  * @param [in] pFilterMgr File filter manager.
22  */
23 CTestFilterDlg::CTestFilterDlg(CWnd* pParent, FileFilter * pFileFilter, FileFilterMgr *pFilterMgr)
24 : CTrDialog(CTestFilterDlg::IDD, pParent)
25 , m_pFileFilter(pFileFilter)
26 , m_pFileFilterMgr(pFilterMgr)
27 {
28 }
29
30 void CTestFilterDlg::DoDataExchange(CDataExchange* pDX)
31 {
32         CTrDialog::DoDataExchange(pDX);
33         //{{AFX_DATA_MAP(CTestFilterDlg)
34                 // NOTE: the ClassWizard will add DDX and DDV calls here
35         //}}AFX_DATA_MAP
36 }
37
38
39 BEGIN_MESSAGE_MAP(CTestFilterDlg, CTrDialog)
40         //{{AFX_MSG_MAP(CTestFilterDlg)
41         ON_BN_CLICKED(IDC_TEST_BTN, OnTestBtn)
42         //}}AFX_MSG_MAP
43 END_MESSAGE_MAP()
44
45 /////////////////////////////////////////////////////////////////////////////
46 // CTestFilterDlg message handlers
47
48 /**
49  * @brief Initialize the dialog.
50  * @return FALSE always.
51  */
52 BOOL CTestFilterDlg::OnInitDialog()
53 {
54         CTrDialog::OnInitDialog();
55
56         SetDlgItemFocus(IDC_TEST_TEXT);
57
58         String name = m_pFileFilterMgr->GetFilterName(m_pFileFilter);
59         SetDlgItemText(IDC_HEADER_FILTER_NAME, name);
60         
61         return FALSE;  // return TRUE unless you set the focus to a control
62                       // EXCEPTION: OCX Property Pages should return FALSE
63 }
64
65 /** @brief User pressed Text button. */
66 void CTestFilterDlg::OnTestBtn() 
67 {
68         String text;
69         GetDlgItemText(IDC_TEST_TEXT, text);
70
71         bool passed = CheckText(text);
72
73         String result = (passed ? _T("passed") : _T("failed"));
74         text += _T(": ") + result;
75
76         AppendResult(text);
77 }
78
79 /**
80  * @brief Test text against filter.
81  * @param [in] text Text to test.
82  * @return true if text passes the filter, `false` otherwise.
83  */
84 bool CTestFilterDlg::CheckText(String text) const
85 {
86         bool isDir = (IsDlgButtonChecked(IDC_IS_DIRECTORY) == 1);
87         if (isDir)
88         {
89                 // Convert any forward slashes to canonical Windows-style backslashes
90                 strutils::replace(text, _T("/"), _T("\\"));
91                 return m_pFileFilterMgr->TestDirNameAgainstFilter(m_pFileFilter, text);
92         }
93         else
94         {
95                 return m_pFileFilterMgr->TestFileNameAgainstFilter(m_pFileFilter, text);
96         }
97 }
98
99 /**
100  * @brief Add new result to end of result edit box.
101  * @param [in] result Result text to add.
102  */
103 void CTestFilterDlg::AppendResult(const String& result)
104 {
105         String text;
106         GetDlgItemText(IDC_RESULTS, text);
107         if (text.length() > 0)
108                 text += _T("\r\n") + result;
109         else
110                 text = result;
111         SetDlgItemText(IDC_RESULTS, text);
112         SendDlgItemMessage(IDC_RESULTS, WM_VSCROLL, SB_BOTTOM, 0L);
113 }