2 * @file PluginsListDlg.cpp
4 * @brief Implementation file for PluginsList dialog
8 #include "PluginsListDlg.h"
9 #include "UnicodeString.h"
12 #include "OptionsDef.h"
13 #include "OptionsMgr.h"
15 IMPLEMENT_DYNAMIC(PluginsListDlg, CDialog)
17 BEGIN_MESSAGE_MAP(PluginsListDlg, CDialog)
18 ON_BN_CLICKED(IDOK, OnBnClickedOk)
19 ON_BN_CLICKED(IDC_PLUGIN_SETTINGS, OnBnClickedPluginSettings)
20 ON_NOTIFY(NM_DBLCLK, IDC_PLUGINSLIST_LIST, OnNMDblclkList)
26 PluginsListDlg::PluginsListDlg(CWnd* pParent /*=NULL*/)
27 : CDialog(PluginsListDlg::IDD, pParent)
34 PluginsListDlg::~PluginsListDlg()
38 void PluginsListDlg::DoDataExchange(CDataExchange* pDX)
40 CDialog::DoDataExchange(pDX);
41 DDX_Control(pDX, IDC_PLUGINSLIST_LIST, m_list);
45 * @brief Initialize the dialog.
47 BOOL PluginsListDlg::OnInitDialog()
49 theApp.TranslateDialog(m_hWnd);
50 CDialog::OnInitDialog();
54 m_list.SetItemState(0, LVIS_SELECTED, LVIS_SELECTED);
56 bool pluginsEnabled = GetOptionsMgr()->GetBool(OPT_PLUGINS_ENABLED);
59 CButton *btn = (CButton *)GetDlgItem(IDC_PLUGINS_ENABLE);
60 btn->SetCheck(BST_CHECKED);
63 return FALSE; // return TRUE unless you set the focus to a control
64 // EXCEPTION: OCX Property Pages should return FALSE
68 * @brief Set-up the list control.
70 void PluginsListDlg::InitList()
72 // Show selection across entire row.
73 // Also enable infotips.
74 m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_INFOTIP);
76 String title = _("Name");
77 m_list.InsertColumn(0, title.c_str(), LVCFMT_LEFT, 150);
79 m_list.InsertColumn(1, title.c_str(), LVCFMT_LEFT, 100);
80 title = _("Description");
81 m_list.InsertColumn(2, title.c_str(), LVCFMT_LEFT, 300);
85 * @brief Add found plugins to the list.
87 void PluginsListDlg::AddPlugins()
89 String type = _("Unpacker");
90 AddPluginsToList(L"FILE_PACK_UNPACK", type);
91 AddPluginsToList(L"BUFFER_PACK_UNPACK", type);
92 AddPluginsToList(L"FILE_FOLDER_PACK_UNPACK", type);
93 type = _("Prediffer");
94 AddPluginsToList(L"FILE_PREDIFF", type);
95 AddPluginsToList(L"BUFFER_PREDIFF", type);
96 type = _("Editor script");
97 AddPluginsToList(L"EDITOR_SCRIPT", type);
101 * @brief Add plugins of given event type to the list.
102 * @param [in] pluginEvent Event type for plugins to add.
103 * @param [in] pluginType String to use as type in the list.
105 void PluginsListDlg::AddPluginsToList(const wchar_t *pluginEvent, const String& pluginType)
107 PluginArray * piPluginArray =
108 CAllThreadsScripts::GetActiveSet()->GetAvailableScripts(pluginEvent);
110 for (int iPlugin = 0 ; iPlugin < piPluginArray->size() ; iPlugin++)
112 const PluginInfoPtr& plugin = piPluginArray->at(iPlugin);
113 int ind = m_list.InsertItem(m_list.GetItemCount(), plugin->m_name.c_str());
114 m_list.SetItemText(ind, 1, pluginType.c_str());
115 m_list.SetItemText(ind, 2, plugin->m_description.c_str());
120 * @brief Save plugins enabled setting when closing the dialog.
122 void PluginsListDlg::OnBnClickedOk()
124 CButton *btn = (CButton *)GetDlgItem(IDC_PLUGINS_ENABLE);
125 int check = btn->GetCheck();
126 if (check == BST_CHECKED)
128 GetOptionsMgr()->SaveOption(OPT_PLUGINS_ENABLED, true);
132 GetOptionsMgr()->SaveOption(OPT_PLUGINS_ENABLED, false);
137 void PluginsListDlg::OnBnClickedPluginSettings()
139 POSITION pos = m_list.GetFirstSelectedItemPosition();
142 String pluginName = static_cast<const TCHAR *>(m_list.GetItemText(m_list.GetNextSelectedItem(pos), 0));
143 for (int i = 0; TransformationCategories[i]; ++i)
145 PluginInfo * plugin = CAllThreadsScripts::GetActiveSet()->GetPluginByName(TransformationCategories[i], pluginName);
149 InvokeShowSettingsDialog(plugin->m_lpDispatch);
151 SetForegroundWindow();
158 void PluginsListDlg::OnNMDblclkList(NMHDR *pNMHDR, LRESULT *pResult)
160 OnBnClickedPluginSettings();