// OptionsDlg.cpp : implementation file
#include "stdafx.h"
#include "VSFileFinderCtrl.h"
#include "OptionsDlg.h"
#include "ExcludeFilterDlg.h"
#include "HighlightFilterDlg.h"
#include "Resource.h"
IMPLEMENT_DYNAMIC(OptionsDlg, CDialog)
OptionsDlg::OptionsDlg(const Options& options, CWnd* pParent /*=NULL*/)
: CDialog(IDD_OPTIONS, pParent)
, m_Options(options)
{
}
OptionsDlg::~OptionsDlg()
{
}
BEGIN_MESSAGE_MAP(OptionsDlg, CDialog)
// Excluded file list messages
ON_BN_CLICKED(IDC_ADD_EXCLUDED_BUTTON, OnExcludeAddClicked)
ON_BN_CLICKED(IDC_EDIT_EXCLUDED_BUTTON, OnExcludeEditClicked)
ON_BN_CLICKED(IDC_REMOVE_EXCLUDED_BUTTON, OnExcludeRemoveClicked)
ON_NOTIFY(LVN_ITEMCHANGED, IDC_EXCLUDED_FILES, OnExcludeSelChange)
// Highlighted file list messages
ON_BN_CLICKED(IDC_ADD_HIGHLIGHTED_BUTTON, OnHighlightedAddClicked)
ON_BN_CLICKED(IDC_EDIT_HIGHLIGHTED_BUTTON, OnHighlightedEditClicked)
ON_BN_CLICKED(IDC_REMOVE_HIGHLIGHTED_BUTTON, OnHighlightedRemoveClicked)
ON_NOTIFY(LVN_ITEMCHANGED, IDC_HIGHLIGHTED_FILES, OnHighlightedSelChange)
// About button
ON_BN_CLICKED(IDC_ABOUT_BUTTON, OnAboutBtnClicked)
END_MESSAGE_MAP()
BOOL OptionsDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_ExcludedFileList.InsertColumn(0, _T("Description"), LVCFMT_LEFT, 167);
m_ExcludedFileList.InsertColumn(1, _T("Filter"), LVCFMT_LEFT, 167);
m_ExcludedFileList.SetExtendedStyle(LVS_EX_FULLROWSELECT);
RefreshExcludedFilesList();
UpdateExcludedFilesButtons();
m_HighlightedFileList.InsertColumn(0, _T("Description"), LVCFMT_LEFT, 167);
m_HighlightedFileList.InsertColumn(1, _T("Filter"), LVCFMT_LEFT, 167);
m_HighlightedFileList.SetExtendedStyle(LVS_EX_FULLROWSELECT);
RefreshHighlightedFilesList();
UpdateHighlightedFilesButtons();
return FALSE;
}
void OptionsDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
// Excluded file list DDX
DDX_Control(pDX, IDC_EXCLUDED_FILES, m_ExcludedFileList);
DDX_Control(pDX, IDC_EDIT_EXCLUDED_BUTTON, m_EditExcludedFileButton);
DDX_Control(pDX, IDC_REMOVE_EXCLUDED_BUTTON, m_RemoveExcludedFileButton);
// Highlighted file list DDX
DDX_Control(pDX, IDC_HIGHLIGHTED_FILES, m_HighlightedFileList);
DDX_Control(pDX, IDC_EDIT_HIGHLIGHTED_BUTTON, m_EditHighlightedFileButton);
DDX_Control(pDX, IDC_REMOVE_HIGHLIGHTED_BUTTON, m_RemoveHighlightedFileButton);
}
const Options& OptionsDlg::GetOptions() const
{
return m_Options;
}
void OptionsDlg::RefreshExcludedFilesList()
{
m_ExcludedFileList.DeleteAllItems();
for (int i = 0; i < m_Options.GetExcludedFileCount(); ++i)
{
const Options::ExcludedFile& file = m_Options.GetExcludedFile(i);
int nItem = m_ExcludedFileList.InsertItem(i, file.Description);
ASSERT(nItem == i);
m_ExcludedFileList.SetItemText(i, 1, file.Filter);
}
}
void OptionsDlg::UpdateExcludedFilesButtons()
{
int nSelection = m_ExcludedFileList.GetNextItem(-1, LVNI_SELECTED);
bool bEnable = (nSelection >= 0 && nSelection < m_Options.GetExcludedFileCount());
m_EditExcludedFileButton.EnableWindow(bEnable);
m_RemoveExcludedFileButton.EnableWindow(bEnable);
}
void OptionsDlg::RefreshHighlightedFilesList()
{
m_HighlightedFileList.DeleteAllItems();
for (int i = 0; i < m_Options.GetHighlightedFileCount(); ++i)
{
const Options::HighlightedFile& file = m_Options.GetHighlightedFile(i);
int nItem = m_HighlightedFileList.InsertItem(i, file.Description);
ASSERT(nItem == i);
m_HighlightedFileList.SetItemText(i, 1, file.Filter);
m_HighlightedFileList.SetItemData(i, file.Colour);
}
}
void OptionsDlg::UpdateHighlightedFilesButtons()
{
int nSelection = m_HighlightedFileList.GetNextItem(-1, LVNI_SELECTED);
bool bEnable = (nSelection >= 0 && nSelection < m_Options.GetHighlightedFileCount());
m_EditHighlightedFileButton.EnableWindow(bEnable);
m_RemoveHighlightedFileButton.EnableWindow(bEnable);
}
void OptionsDlg::OnExcludeAddClicked()
{
ExcludeFilterDlg dlg(this, _T("Add Exclude Filter"));
if (dlg.DoModal() == IDOK)
{
Options::ExcludedFile file;
file.Description = dlg.GetDescription();
file.Filter = dlg.GetFilter();
m_Options.AddExcludedFile(file);
RefreshExcludedFilesList();
UpdateExcludedFilesButtons();
}
}
void OptionsDlg::OnExcludeEditClicked()
{
int nSelection = m_ExcludedFileList.GetNextItem(-1, LVNI_SELECTED);
if (nSelection < 0 || nSelection >= m_Options.GetExcludedFileCount())
return;
Options::ExcludedFile file(m_Options.GetExcludedFile(nSelection));
ExcludeFilterDlg dlg(this, _T("Edit Exclude Filter"), file.Description, file.Filter);
if (dlg.DoModal() == IDOK)
{
file.Description = dlg.GetDescription();
file.Filter = dlg.GetFilter();
m_Options.RemoveExcludedFile(nSelection);
m_Options.AddExcludedFile(file);
RefreshExcludedFilesList();
UpdateExcludedFilesButtons();
}
}
void OptionsDlg::OnExcludeRemoveClicked()
{
int nSelection = m_ExcludedFileList.GetNextItem(-1, LVNI_SELECTED);
if (nSelection < 0 || nSelection >= m_Options.GetExcludedFileCount())
return;
m_Options.RemoveExcludedFile(nSelection);
RefreshExcludedFilesList();
UpdateExcludedFilesButtons();
}
void OptionsDlg::OnExcludeSelChange(NMHDR*, LRESULT* pResult)
{
UpdateExcludedFilesButtons();
*pResult = 0;
}
void OptionsDlg::OnHighlightedAddClicked()
{
HighlightFilterDlg dlg(this, _T("Add Highlight Filter"));
if (dlg.DoModal() == IDOK)
{
Options::HighlightedFile file;
file.Description = dlg.GetDescription();
file.Filter = dlg.GetFilter();
file.Colour = dlg.GetColour();
m_Options.AddHighlightedFile(file);
RefreshHighlightedFilesList();
UpdateHighlightedFilesButtons();
}
}
void OptionsDlg::OnHighlightedEditClicked()
{
int nSelection = m_HighlightedFileList.GetNextItem(-1, LVNI_SELECTED);
if (nSelection < 0 || nSelection >= m_Options.GetHighlightedFileCount())
return;
Options::HighlightedFile file(m_Options.GetHighlightedFile(nSelection));
HighlightFilterDlg dlg(this, _T("Edit Highlight Filter"), file.Description, file.Filter, file.Colour);
if (dlg.DoModal() == IDOK)
{
file.Description = dlg.GetDescription();
file.Filter = dlg.GetFilter();
file.Colour = dlg.GetColour();
m_Options.RemoveHighlightedFile(nSelection);
m_Options.AddHighlightedFile(file);
RefreshHighlightedFilesList();
UpdateHighlightedFilesButtons();
}
}
void OptionsDlg::OnHighlightedRemoveClicked()
{
int nSelection = m_HighlightedFileList.GetNextItem(-1, LVNI_SELECTED);
if (nSelection < 0 || nSelection >= m_Options.GetHighlightedFileCount())
return;
m_Options.RemoveHighlightedFile(nSelection);
RefreshHighlightedFilesList();
UpdateHighlightedFilesButtons();
}
void OptionsDlg::OnHighlightedSelChange(NMHDR*, LRESULT* pResult)
{
UpdateHighlightedFilesButtons();
*pResult = 0;
}
void OptionsDlg::OnAboutBtnClicked()
{
CDialog dlg(IDD_ABOUT, this);
dlg.DoModal();
}