#include "stdafx.h"
#include "PluginsListDlg.h"
+#include "WildcardDropList.h"
#include "UnicodeString.h"
-#include "Merge.h"
#include "Plugins.h"
#include "OptionsDef.h"
#include "OptionsMgr.h"
+#include "Merge.h"
+
+/** @brief Location for plugins specific help to open. */
+static TCHAR PluginsHelpLocation[] = _T("::/htmlhelp/Plugins.html");
-IMPLEMENT_DYNAMIC(PluginsListDlg, CDialog)
+IMPLEMENT_DYNAMIC(PluginsListDlg, CTrDialog)
-BEGIN_MESSAGE_MAP(PluginsListDlg, CDialog)
+BEGIN_MESSAGE_MAP(PluginsListDlg, CTrDialog)
ON_BN_CLICKED(IDOK, OnBnClickedOk)
ON_BN_CLICKED(IDC_PLUGIN_SETTINGS, OnBnClickedPluginSettings)
+ ON_BN_CLICKED(IDC_PLUGIN_FILEFILTERS_DEFAULTS, OnBnClickedFileFiltesDefaults)
+ ON_CBN_DROPDOWN(IDC_PLUGIN_FILEFILTERS, OnDropDownPatterns)
+ ON_CBN_CLOSEUP(IDC_PLUGIN_FILEFILTERS, OnCloseUpPatterns)
ON_NOTIFY(NM_DBLCLK, IDC_PLUGINSLIST_LIST, OnNMDblclkList)
+ ON_NOTIFY(LVN_ITEMCHANGING, IDC_PLUGINSLIST_LIST, OnLVNItemChanging)
+ ON_NOTIFY(LVN_ITEMCHANGED, IDC_PLUGINSLIST_LIST, OnLVNItemChanged)
+ ON_COMMAND(ID_HELP, OnHelp)
END_MESSAGE_MAP()
/**
* @brief Constructor.
*/
-PluginsListDlg::PluginsListDlg(CWnd* pParent /*=NULL*/)
- : CDialog(PluginsListDlg::IDD, pParent)
+PluginsListDlg::PluginsListDlg(CWnd* pParent /*= nullptr*/)
+ : CTrDialog(PluginsListDlg::IDD, pParent)
{
}
void PluginsListDlg::DoDataExchange(CDataExchange* pDX)
{
- CDialog::DoDataExchange(pDX);
+ CTrDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_PLUGINSLIST_LIST, m_list);
+ DDX_Control(pDX, IDC_PLUGIN_FILEFILTERS, m_comboPatterns);
}
/**
*/
BOOL PluginsListDlg::OnInitDialog()
{
- theApp.TranslateDialog(m_hWnd);
- CDialog::OnInitDialog();
+ CTrDialog::OnInitDialog();
InitList();
AddPlugins();
m_list.SetItemState(0, LVIS_SELECTED, LVIS_SELECTED);
- bool pluginsEnabled = GetOptionsMgr()->GetBool(OPT_PLUGINS_ENABLED);
- if (pluginsEnabled)
- {
- CButton *btn = (CButton *)GetDlgItem(IDC_PLUGINS_ENABLE);
- btn->SetCheck(BST_CHECKED);
- }
+ CheckDlgButton(IDC_PLUGINS_ENABLE,
+ GetOptionsMgr()->GetBool(OPT_PLUGINS_ENABLED) ? BST_CHECKED : BST_UNCHECKED);
return FALSE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
// Also enable infotips.
m_list.SetExtendedStyle(LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT | LVS_EX_INFOTIP);
+ const int lpx = CClientDC(this).GetDeviceCaps(LOGPIXELSX);
+ auto pointToPixel = [lpx](int point) { return MulDiv(point, lpx, 72); };
+
String title = _("Name");
- m_list.InsertColumn(0, title.c_str(), LVCFMT_LEFT, 200);
+ m_list.InsertColumn(0, title.c_str(), LVCFMT_LEFT, pointToPixel(150));
title = _("Type");
- m_list.InsertColumn(1, title.c_str(), LVCFMT_LEFT, 100);
+ m_list.InsertColumn(1, title.c_str(), LVCFMT_LEFT, pointToPixel(75));
title = _("Description");
- m_list.InsertColumn(2, title.c_str(), LVCFMT_LEFT, 300);
+ m_list.InsertColumn(2, title.c_str(), LVCFMT_LEFT, pointToPixel(225));
}
/**
void PluginsListDlg::AddPlugins()
{
String type = _("Unpacker");
+ AddPluginsToList(L"FILE_FOLDER_PACK_UNPACK", type);
AddPluginsToList(L"FILE_PACK_UNPACK", type);
AddPluginsToList(L"BUFFER_PACK_UNPACK", type);
- AddPluginsToList(L"FILE_FOLDER_PACK_UNPACK", type);
type = _("Prediffer");
AddPluginsToList(L"FILE_PREDIFF", type);
AddPluginsToList(L"BUFFER_PREDIFF", type);
PluginArray * piPluginArray =
CAllThreadsScripts::GetActiveSet()->GetAvailableScripts(pluginEvent);
- for (int iPlugin = 0 ; iPlugin < piPluginArray->size() ; iPlugin++)
+ for (size_t iPlugin = 0 ; iPlugin < piPluginArray->size() ; iPlugin++)
{
const PluginInfoPtr& plugin = piPluginArray->at(iPlugin);
int ind = m_list.InsertItem(m_list.GetItemCount(), plugin->m_name.c_str());
}
}
+PluginInfo *PluginsListDlg::GetSelectedPluginInfo() const
+{
+ String name = m_list.GetItemText(m_list.GetNextItem(-1, LVNI_SELECTED), 0);
+ return CAllThreadsScripts::GetActiveSet()->GetPluginByName(nullptr, name);
+}
+
/**
* @brief Save plugins enabled setting when closing the dialog.
*/
void PluginsListDlg::OnBnClickedOk()
{
- CButton *btn = (CButton *)GetDlgItem(IDC_PLUGINS_ENABLE);
- GetOptionsMgr()->SaveOption(OPT_PLUGINS_ENABLED, (btn->GetCheck() == BST_CHECKED));
+ GetOptionsMgr()->SaveOption(OPT_PLUGINS_ENABLED,
+ (IsDlgButtonChecked(IDC_PLUGINS_ENABLE) == 1));
+
+ OnLVNItemChanging(nullptr, nullptr);
for (int i = 0; i < m_list.GetItemCount(); ++i)
{
- PluginInfo * plugin = CAllThreadsScripts::GetActiveSet()->GetPluginByName(NULL, String(m_list.GetItemText(i, 0)));
+ PluginInfo * plugin = CAllThreadsScripts::GetActiveSet()->GetPluginByName(nullptr, String(m_list.GetItemText(i, 0)));
plugin->m_disabled = !m_list.GetCheck(i);
}
+
CAllThreadsScripts::GetActiveSet()->SaveSettings();
OnOK();
}
void PluginsListDlg::OnBnClickedPluginSettings()
{
POSITION pos = m_list.GetFirstSelectedItemPosition();
- if (pos)
+ if (pos != nullptr)
{
String pluginName = static_cast<const TCHAR *>(m_list.GetItemText(m_list.GetNextSelectedItem(pos), 0));
- for (int i = 0; TransformationCategories[i]; ++i)
+ for (int i = 0; TransformationCategories[i] != nullptr; ++i)
{
PluginInfo * plugin = CAllThreadsScripts::GetActiveSet()->GetPluginByName(TransformationCategories[i], pluginName);
- if (plugin)
+ if (plugin != nullptr)
{
EnableWindow(false);
- InvokeShowSettingsDialog(plugin->m_lpDispatch);
+ plugin::InvokeShowSettingsDialog(plugin->m_lpDispatch);
EnableWindow(true);
SetForegroundWindow();
break;
}
}
+void PluginsListDlg::OnBnClickedFileFiltesDefaults()
+{
+ PluginInfo *plugin = GetSelectedPluginInfo();
+ if (plugin)
+ SetDlgItemText(IDC_PLUGIN_FILEFILTERS, plugin->m_filtersTextDefault);
+}
+
void PluginsListDlg::OnNMDblclkList(NMHDR *pNMHDR, LRESULT *pResult)
{
OnBnClickedPluginSettings();
}
+
+void PluginsListDlg::OnLVNItemChanging(NMHDR *pNMHDR, LRESULT *pResult)
+{
+ PluginInfo *plugin = GetSelectedPluginInfo();
+ if (plugin)
+ {
+ GetDlgItemText(IDC_PLUGIN_FILEFILTERS, plugin->m_filtersText);
+ WildcardRemoveDuplicatePatterns(plugin->m_filtersText);
+ plugin->LoadFilterString();
+ }
+}
+
+void PluginsListDlg::OnLVNItemChanged(NMHDR *pNMHDR, LRESULT *pResult)
+{
+ PluginInfo *plugin = GetSelectedPluginInfo();
+ if (plugin)
+ SetDlgItemText(IDC_PLUGIN_FILEFILTERS, plugin->m_filtersText);
+}
+
+/**
+ * @brief Prepares multi-selection drop list
+ */
+void PluginsListDlg::OnDropDownPatterns()
+{
+ PluginInfo *plugin = GetSelectedPluginInfo();
+ if (plugin)
+ {
+ String patterns = plugin->m_filtersTextDefault;
+ WildcardDropList::OnDropDown(m_comboPatterns, 3, patterns.c_str());
+ }
+}
+
+/**
+ * @brief Finishes drop list multi-selection
+ */
+void PluginsListDlg::OnCloseUpPatterns()
+{
+ WildcardDropList::OnCloseUp(m_comboPatterns);
+}
+
+/**
+ * @brief Open help from mainframe when user presses F1.
+ */
+void PluginsListDlg::OnHelp()
+{
+ theApp.ShowHelp(PluginsHelpLocation);
+}
+