#include "stdafx.h"
#include "PluginsListDlg.h"
+#include "WildcardDropList.h"
#include "UnicodeString.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, CTrDialog)
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()
/**
{
CTrDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_PLUGINSLIST_LIST, m_list);
+ DDX_Control(pDX, IDC_PLUGIN_FILEFILTERS, m_comboPatterns);
}
/**
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);
}
}
+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.
*/
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(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);
plugin::InvokeShowSettingsDialog(plugin->m_lpDispatch);
}
}
+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);
+}
+