2 * @file PluginsListDlg.cpp
4 * @brief Implementation file for PluginsList dialog
8 #include "PluginsListDlg.h"
9 #include "UnicodeString.h"
11 #include "OptionsDef.h"
12 #include "OptionsMgr.h"
14 IMPLEMENT_DYNAMIC(PluginsListDlg, CTrDialog)
16 BEGIN_MESSAGE_MAP(PluginsListDlg, CTrDialog)
17 ON_BN_CLICKED(IDOK, OnBnClickedOk)
18 ON_BN_CLICKED(IDC_PLUGIN_SETTINGS, OnBnClickedPluginSettings)
19 ON_NOTIFY(NM_DBLCLK, IDC_PLUGINSLIST_LIST, OnNMDblclkList)
25 PluginsListDlg::PluginsListDlg(CWnd* pParent /*=NULL*/)
26 : CTrDialog(PluginsListDlg::IDD, pParent)
33 PluginsListDlg::~PluginsListDlg()
37 void PluginsListDlg::DoDataExchange(CDataExchange* pDX)
39 CTrDialog::DoDataExchange(pDX);
40 DDX_Control(pDX, IDC_PLUGINSLIST_LIST, m_list);
44 * @brief Initialize the dialog.
46 BOOL PluginsListDlg::OnInitDialog()
48 CTrDialog::OnInitDialog();
52 m_list.SetItemState(0, LVIS_SELECTED, LVIS_SELECTED);
54 CheckDlgButton(IDC_PLUGINS_ENABLE,
55 GetOptionsMgr()->GetBool(OPT_PLUGINS_ENABLED) ? BST_CHECKED : BST_UNCHECKED);
57 return FALSE; // return TRUE unless you set the focus to a control
58 // EXCEPTION: OCX Property Pages should return FALSE
62 * @brief Set-up the list control.
64 void PluginsListDlg::InitList()
66 // Show selection across entire row.
67 // Also enable infotips.
68 m_list.SetExtendedStyle(LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT | LVS_EX_INFOTIP);
70 const int lpx = CClientDC(this).GetDeviceCaps(LOGPIXELSX);
71 auto pointToPixel = [lpx](int point) { return MulDiv(point, lpx, 72); };
73 String title = _("Name");
74 m_list.InsertColumn(0, title.c_str(), LVCFMT_LEFT, pointToPixel(150));
76 m_list.InsertColumn(1, title.c_str(), LVCFMT_LEFT, pointToPixel(75));
77 title = _("Description");
78 m_list.InsertColumn(2, title.c_str(), LVCFMT_LEFT, pointToPixel(225));
82 * @brief Add found plugins to the list.
84 void PluginsListDlg::AddPlugins()
86 String type = _("Unpacker");
87 AddPluginsToList(L"FILE_PACK_UNPACK", type);
88 AddPluginsToList(L"BUFFER_PACK_UNPACK", type);
89 AddPluginsToList(L"FILE_FOLDER_PACK_UNPACK", type);
90 type = _("Prediffer");
91 AddPluginsToList(L"FILE_PREDIFF", type);
92 AddPluginsToList(L"BUFFER_PREDIFF", type);
93 type = _("Editor script");
94 AddPluginsToList(L"EDITOR_SCRIPT", type);
98 * @brief Add plugins of given event type to the list.
99 * @param [in] pluginEvent Event type for plugins to add.
100 * @param [in] pluginType String to use as type in the list.
102 void PluginsListDlg::AddPluginsToList(const wchar_t *pluginEvent, const String& pluginType)
104 PluginArray * piPluginArray =
105 CAllThreadsScripts::GetActiveSet()->GetAvailableScripts(pluginEvent);
107 for (int iPlugin = 0 ; iPlugin < piPluginArray->size() ; iPlugin++)
109 const PluginInfoPtr& plugin = piPluginArray->at(iPlugin);
110 int ind = m_list.InsertItem(m_list.GetItemCount(), plugin->m_name.c_str());
111 m_list.SetItemText(ind, 1, pluginType.c_str());
112 m_list.SetItemText(ind, 2, plugin->m_description.c_str());
113 m_list.SetCheck(ind, !plugin->m_disabled);
118 * @brief Save plugins enabled setting when closing the dialog.
120 void PluginsListDlg::OnBnClickedOk()
122 GetOptionsMgr()->SaveOption(OPT_PLUGINS_ENABLED,
123 (IsDlgButtonChecked(IDC_PLUGINS_ENABLE) == 1));
125 for (int i = 0; i < m_list.GetItemCount(); ++i)
127 PluginInfo * plugin = CAllThreadsScripts::GetActiveSet()->GetPluginByName(NULL, String(m_list.GetItemText(i, 0)));
128 plugin->m_disabled = !m_list.GetCheck(i);
130 CAllThreadsScripts::GetActiveSet()->SaveSettings();
134 void PluginsListDlg::OnBnClickedPluginSettings()
136 POSITION pos = m_list.GetFirstSelectedItemPosition();
139 String pluginName = static_cast<const TCHAR *>(m_list.GetItemText(m_list.GetNextSelectedItem(pos), 0));
140 for (int i = 0; TransformationCategories[i]; ++i)
142 PluginInfo * plugin = CAllThreadsScripts::GetActiveSet()->GetPluginByName(TransformationCategories[i], pluginName);
146 InvokeShowSettingsDialog(plugin->m_lpDispatch);
148 SetForegroundWindow();
155 void PluginsListDlg::OnNMDblclkList(NMHDR *pNMHDR, LRESULT *pResult)
157 OnBnClickedPluginSettings();