2 * @file PropCompareFolder.cpp
4 * @brief Implementation of PropCompareFolder propertysheet
8 #include "PropCompareFolder.h"
9 #include "OptionsDef.h"
10 #include "OptionsMgr.h"
11 #include "OptionsPanel.h"
17 static const int Mega = 1024 * 1024;
21 * @param [in] optionsMgr Pointer to COptionsMgr.
23 PropCompareFolder::PropCompareFolder(COptionsMgr *optionsMgr)
24 : OptionsPanel(optionsMgr, PropCompareFolder::IDD)
26 , m_bStopAfterFirst(false)
27 , m_bIgnoreSmallTimeDiff(false)
28 , m_bIncludeUniqFolders(false)
29 , m_bIncludeSubdirs(false)
30 , m_bExpandSubdirs(false)
31 , m_bIgnoreReparsePoints(false)
32 , m_nQuickCompareLimit(4 * Mega)
33 , m_nBinaryCompareLimit(64 * Mega)
34 , m_nCompareThreads(-1)
38 void PropCompareFolder::DoDataExchange(CDataExchange* pDX)
40 CPropertyPage::DoDataExchange(pDX);
41 //{{AFX_DATA_MAP(PropCompareFolder)
42 DDX_CBIndex(pDX, IDC_COMPAREMETHODCOMBO, m_compareMethod);
43 DDX_Check(pDX, IDC_COMPARE_STOPFIRST, m_bStopAfterFirst);
44 DDX_Check(pDX, IDC_IGNORE_SMALLTIMEDIFF, m_bIgnoreSmallTimeDiff);
45 DDX_Check(pDX, IDC_COMPARE_WALKSUBDIRS, m_bIncludeUniqFolders);
46 DDX_Check(pDX, IDC_RECURS_CHECK, m_bIncludeSubdirs);
47 DDX_Check(pDX, IDC_EXPAND_SUBDIRS, m_bExpandSubdirs);
48 DDX_Check(pDX, IDC_IGNORE_REPARSEPOINTS, m_bIgnoreReparsePoints);
49 DDX_Text(pDX, IDC_COMPARE_QUICKC_LIMIT, m_nQuickCompareLimit);
50 DDX_Text(pDX, IDC_COMPARE_BINARYC_LIMIT, m_nBinaryCompareLimit);
51 DDX_Text(pDX, IDC_COMPARE_THREAD_COUNT, m_nCompareThreads);
57 BEGIN_MESSAGE_MAP(PropCompareFolder, OptionsPanel)
58 //{{AFX_MSG_MAP(PropCompareFolder)
59 ON_BN_CLICKED(IDC_COMPARE_DEFAULTS, OnDefaults)
61 ON_CBN_SELCHANGE(IDC_COMPAREMETHODCOMBO, OnCbnSelchangeComparemethodcombo)
62 ON_BN_CLICKED(IDC_RECURS_CHECK, OnBnClickedRecursCheck)
66 * @brief Reads options values from storage to UI.
67 * Property sheet calls this before displaying GUI to load values
70 void PropCompareFolder::ReadOptions()
72 m_compareMethod = GetOptionsMgr()->GetInt(OPT_CMP_METHOD);
73 m_bStopAfterFirst = GetOptionsMgr()->GetBool(OPT_CMP_STOP_AFTER_FIRST);
74 m_bIgnoreSmallTimeDiff = GetOptionsMgr()->GetBool(OPT_IGNORE_SMALL_FILETIME);
75 m_bIncludeUniqFolders = GetOptionsMgr()->GetBool(OPT_CMP_WALK_UNIQUE_DIRS);
76 m_bIncludeSubdirs = GetOptionsMgr()->GetBool(OPT_CMP_INCLUDE_SUBDIRS);
77 m_bExpandSubdirs = GetOptionsMgr()->GetBool(OPT_DIRVIEW_EXPAND_SUBDIRS);
78 m_bIgnoreReparsePoints = GetOptionsMgr()->GetBool(OPT_CMP_IGNORE_REPARSE_POINTS);
79 m_nQuickCompareLimit = GetOptionsMgr()->GetInt(OPT_CMP_QUICK_LIMIT) / Mega ;
80 m_nBinaryCompareLimit = GetOptionsMgr()->GetInt(OPT_CMP_BINARY_LIMIT) / Mega ;
81 m_nCompareThreads = GetOptionsMgr()->GetInt(OPT_CMP_COMPARE_THREADS);
85 * @brief Writes options values from UI to storage.
86 * Property sheet calls this after dialog is closed with OK button to
87 * store values in member variables.
89 void PropCompareFolder::WriteOptions()
91 GetOptionsMgr()->SaveOption(OPT_CMP_METHOD, (int)m_compareMethod);
92 GetOptionsMgr()->SaveOption(OPT_CMP_STOP_AFTER_FIRST, m_bStopAfterFirst);
93 GetOptionsMgr()->SaveOption(OPT_IGNORE_SMALL_FILETIME, m_bIgnoreSmallTimeDiff);
94 GetOptionsMgr()->SaveOption(OPT_CMP_WALK_UNIQUE_DIRS, m_bIncludeUniqFolders);
95 GetOptionsMgr()->SaveOption(OPT_CMP_INCLUDE_SUBDIRS, m_bIncludeSubdirs);
96 GetOptionsMgr()->SaveOption(OPT_DIRVIEW_EXPAND_SUBDIRS, m_bExpandSubdirs);
97 GetOptionsMgr()->SaveOption(OPT_CMP_IGNORE_REPARSE_POINTS, m_bIgnoreReparsePoints);
99 if (m_nQuickCompareLimit > 2000)
100 m_nQuickCompareLimit = 2000;
101 GetOptionsMgr()->SaveOption(OPT_CMP_QUICK_LIMIT, m_nQuickCompareLimit * Mega);
102 if (m_nBinaryCompareLimit > 2000)
103 m_nBinaryCompareLimit = 2000;
104 GetOptionsMgr()->SaveOption(OPT_CMP_BINARY_LIMIT, m_nBinaryCompareLimit * Mega);
105 GetOptionsMgr()->SaveOption(OPT_CMP_COMPARE_THREADS, m_nCompareThreads);
109 * @brief Called before propertysheet is drawn.
111 BOOL PropCompareFolder::OnInitDialog()
113 OptionsPanel::OnInitDialog();
114 CComboBox * combo = (CComboBox*) GetDlgItem(IDC_COMPAREMETHODCOMBO);
116 String item = _("Full Contents");
117 combo->AddString(item.c_str());
118 item = _("Quick Contents");
119 combo->AddString(item.c_str());
120 item = _("Binary Contents");
121 combo->AddString(item.c_str());
122 item = _("Modified Date");
123 combo->AddString(item.c_str());
124 item = _("Modified Date and Size");
125 combo->AddString(item.c_str());
127 combo->AddString(item.c_str());
128 combo->SetCurSel(m_compareMethod);
130 return TRUE; // return TRUE unless you set the focus to a control
131 // EXCEPTION: OCX Property Pages should return FALSE
135 * @brief Sets options to defaults
137 void PropCompareFolder::OnDefaults()
139 m_compareMethod = GetOptionsMgr()->GetDefault<unsigned>(OPT_CMP_METHOD);
140 m_bStopAfterFirst = GetOptionsMgr()->GetDefault<bool>(OPT_CMP_STOP_AFTER_FIRST);
141 m_bIncludeUniqFolders = GetOptionsMgr()->GetDefault<bool>(OPT_CMP_WALK_UNIQUE_DIRS);
142 m_bIncludeSubdirs = GetOptionsMgr()->GetDefault<bool>(OPT_CMP_INCLUDE_SUBDIRS);
143 m_bExpandSubdirs = GetOptionsMgr()->GetDefault<bool>(OPT_DIRVIEW_EXPAND_SUBDIRS);
144 m_bIgnoreReparsePoints = GetOptionsMgr()->GetDefault<bool>(OPT_CMP_IGNORE_REPARSE_POINTS);
145 m_nQuickCompareLimit = GetOptionsMgr()->GetDefault<unsigned>(OPT_CMP_QUICK_LIMIT) / Mega;
146 m_nBinaryCompareLimit = GetOptionsMgr()->GetDefault<unsigned>(OPT_CMP_BINARY_LIMIT) / Mega;
147 m_nCompareThreads = GetOptionsMgr()->GetDefault<unsigned>(OPT_CMP_COMPARE_THREADS);
152 * @brief Called when compare method dropdown selection is changed.
153 * Enables / disables "Stop compare after first difference" checkbox.
154 * That checkbox is valid only for quick contents compare method.
156 void PropCompareFolder::OnCbnSelchangeComparemethodcombo()
161 void PropCompareFolder::OnBnClickedRecursCheck()
166 void PropCompareFolder::UpdateControls()
168 CComboBox * pCombo = (CComboBox*)GetDlgItem(IDC_COMPAREMETHODCOMBO);
169 EnableDlgItem(IDC_COMPARE_STOPFIRST, pCombo->GetCurSel() == 1);
170 EnableDlgItem(IDC_EXPAND_SUBDIRS, IsDlgButtonChecked(IDC_RECURS_CHECK) == 1);
171 EnableDlgItem(IDC_COMPARE_THREAD_COUNT, pCombo->GetCurSel() <= 1 ? true : false); // true: fullcontent, quickcontent