From aecd5902996c0667cea529873768a12a86110aa8 Mon Sep 17 00:00:00 2001 From: sdottaka Date: Mon, 3 Nov 2014 21:08:33 +0900 Subject: [PATCH] Plugin: Make plugins configurable (Add ShowSettingsDialog() method) close #14 --HG-- branch : stable --- Src/Merge.rc | 9 +++++---- Src/Plugins.cpp | 17 +++++++++++++++++ Src/Plugins.h | 4 ++++ Src/PluginsListDlg.cpp | 30 ++++++++++++++++++++++++++++++ Src/PluginsListDlg.h | 2 ++ Src/resource.h | 3 ++- 6 files changed, 60 insertions(+), 5 deletions(-) diff --git a/Src/Merge.rc b/Src/Merge.rc index 8270cddde..ef9a6f755 100644 --- a/Src/Merge.rc +++ b/Src/Merge.rc @@ -192,7 +192,7 @@ BEGIN END POPUP "&Plugins" BEGIN - MENUITEM "&List...", ID_PLUGINS_LIST + MENUITEM "&Plugin Settings...", ID_PLUGINS_LIST MENUITEM SEPARATOR MENUITEM "Ma&nual Prediffer", ID_PREDIFFER_MANUAL MENUITEM "A&utomatic Prediffer", ID_PREDIFFER_AUTO @@ -321,7 +321,7 @@ BEGIN END POPUP "&Plugins" BEGIN - MENUITEM "&List...", ID_PLUGINS_LIST + MENUITEM "&Plugin Settings...", ID_PLUGINS_LIST MENUITEM SEPARATOR MENUITEM "Ma&nual Prediffer", ID_PREDIFFER_MANUAL MENUITEM "A&utomatic Prediffer", ID_PREDIFFER_AUTO @@ -559,7 +559,7 @@ BEGIN END POPUP "&Plugins" BEGIN - MENUITEM "&List...", ID_PLUGINS_LIST + MENUITEM "&Plugin Settings...", ID_PLUGINS_LIST MENUITEM SEPARATOR MENUITEM "Ma&nual Prediffer", ID_PREDIFFER_MANUAL MENUITEM "A&utomatic Prediffer", ID_PREDIFFER_AUTO @@ -1905,8 +1905,9 @@ BEGIN CONTROL "&Enable plugins",IDC_PLUGINS_ENABLE,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,7,7,266,10 CONTROL "",IDC_PLUGINSLIST_LIST,"SysListView32",LVS_REPORT | - LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, + LVS_ALIGNLEFT | LVS_NOSORTHEADER | LVS_SHOWSELALWAYS | LVS_SINGLESEL | WS_BORDER | WS_TABSTOP, 7,22,356,155 + DEFPUSHBUTTON "&Plugin Settings...",IDC_PLUGIN_SETTINGS,170,190,75,14 DEFPUSHBUTTON "OK",IDOK,254,190,50,14 PUSHBUTTON "Cancel",IDCANCEL,313,190,50,14 END diff --git a/Src/Plugins.cpp b/Src/Plugins.cpp index e332764f8..218ff6df3 100644 --- a/Src/Plugins.cpp +++ b/Src/Plugins.cpp @@ -1338,3 +1338,20 @@ bool InvokeTransformText(String & text, int & changed, IDispatch *piScript, int return (! FAILED(h)); } + +bool InvokeShowSettingsDialog(IDispatch *piScript) +{ + VARIANT vboolHandled; + vboolHandled.vt = VT_BOOL; + vboolHandled.boolVal = false; + + // invoke method by name, reverse order for arguments + // VARIANT_BOOL ShowSettingsDialog() + HRESULT h = ::safeInvokeW(piScript, &vboolHandled, L"ShowSettingsDialog", opFxn[0]); + bool bSuccess = ! FAILED(h) && vboolHandled.boolVal; + + // clear the returned variant + VariantClear(&vboolHandled); + + return (bSuccess); +} diff --git a/Src/Plugins.h b/Src/Plugins.h index 9e0c61db5..bff0bc580 100644 --- a/Src/Plugins.h +++ b/Src/Plugins.h @@ -236,6 +236,10 @@ bool InvokePackFile(const String& fileSource, const String& fileDest, int & nCha * @brief Call the plugin "PrediffFile" method, event FILE_PREDIFF */ bool InvokePrediffFile(const String& fileSource, const String& fileDest, int & nChanged, LPDISPATCH piScript); +/** + * @brief Call the plugin "ShowSettingsDialog" method + */ +bool InvokeShowSettingsDialog(LPDISPATCH piScript); #endif //__PLUGINS_H__ diff --git a/Src/PluginsListDlg.cpp b/Src/PluginsListDlg.cpp index 5da0046cb..1a7ee2573 100644 --- a/Src/PluginsListDlg.cpp +++ b/Src/PluginsListDlg.cpp @@ -18,6 +18,8 @@ IMPLEMENT_DYNAMIC(PluginsListDlg, CDialog) BEGIN_MESSAGE_MAP(PluginsListDlg, CDialog) ON_BN_CLICKED(IDOK, OnBnClickedOk) + ON_BN_CLICKED(IDC_PLUGIN_SETTINGS, OnBnClickedPluginSettings) + ON_NOTIFY(NM_DBLCLK, IDC_PLUGINSLIST_LIST, OnNMDblclkList) END_MESSAGE_MAP() /** @@ -51,6 +53,7 @@ BOOL PluginsListDlg::OnInitDialog() InitList(); AddPlugins(); + m_list.SetItemState(0, LVIS_SELECTED, LVIS_SELECTED); BOOL pluginsEnabled = GetOptionsMgr()->GetBool(OPT_PLUGINS_ENABLED); if (pluginsEnabled) @@ -131,3 +134,30 @@ void PluginsListDlg::OnBnClickedOk() } OnOK(); } + +void PluginsListDlg::OnBnClickedPluginSettings() +{ + POSITION pos = m_list.GetFirstSelectedItemPosition(); + if (pos) + { + String pluginName = static_cast(m_list.GetItemText(m_list.GetNextSelectedItem(pos), 0)); + wchar_t *types[] = {L"FILE_PACK_UNPACK", L"BUFFER_PACK_UNPACK", L"FILE_PREDIFF", L"BUFFER_PREDIFF", L"EDITOR_SCRIPT"}; + for (int i = 0; i < sizeof(types)/sizeof(types[0]); ++i) + { + PluginInfo * plugin = CAllThreadsScripts::GetActiveSet()->GetPluginByName(types[i], pluginName); + if (plugin) + { + EnableWindow(false); + InvokeShowSettingsDialog(plugin->m_lpDispatch); + EnableWindow(true); + SetForegroundWindow(); + break; + } + } + } +} + +void PluginsListDlg::OnNMDblclkList(NMHDR *pNMHDR, LRESULT *pResult) +{ + OnBnClickedPluginSettings(); +} diff --git a/Src/PluginsListDlg.h b/Src/PluginsListDlg.h index 7ba17fcbf..2fdaf61e1 100644 --- a/Src/PluginsListDlg.h +++ b/Src/PluginsListDlg.h @@ -36,6 +36,8 @@ protected: afx_msg BOOL OnInitDialog(); afx_msg void OnBnClickedOk(); + afx_msg void OnBnClickedPluginSettings(); + afx_msg void OnNMDblclkList(NMHDR *pNMHDR, LRESULT *pResult); DECLARE_MESSAGE_MAP() public: diff --git a/Src/resource.h b/Src/resource.h index e338ceba6..d7dbb7859 100644 --- a/Src/resource.h +++ b/Src/resource.h @@ -1208,6 +1208,7 @@ #define ID_IMG_THRESHOLD_64 33248 #define IDC_COMPAREIMAGE_PATTERNS 33249 #define IDC_COMPAREIMAGE_DEFAULTS 33250 +#define IDC_PLUGIN_SETTINGS 33251 // Next default values for new objects // @@ -1215,7 +1216,7 @@ #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_3D_CONTROLS 1 #define _APS_NEXT_RESOURCE_VALUE 242 -#define _APS_NEXT_COMMAND_VALUE 33251 +#define _APS_NEXT_COMMAND_VALUE 33252 #define _APS_NEXT_CONTROL_VALUE 1358 #define _APS_NEXT_SYMED_VALUE 115 #endif -- 2.11.0