OSDN Git Service

Plugin: Make plugins configurable (Add ShowSettingsDialog() method) close #14
authorsdottaka <sdottaka@sourceforge.net>
Mon, 3 Nov 2014 12:08:33 +0000 (21:08 +0900)
committersdottaka <sdottaka@sourceforge.net>
Mon, 3 Nov 2014 12:08:33 +0000 (21:08 +0900)
--HG--
branch : stable

Src/Merge.rc
Src/Plugins.cpp
Src/Plugins.h
Src/PluginsListDlg.cpp
Src/PluginsListDlg.h
Src/resource.h

index 8270cdd..ef9a6f7 100644 (file)
@@ -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
index e332764..218ff6d 100644 (file)
@@ -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);
+}
index 9e0c61d..bff0bc5 100644 (file)
@@ -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__
index 5da0046..1a7ee25 100644 (file)
@@ -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<const TCHAR *>(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;
+                       }
+               }
+       }
+}\r
+\r
+void PluginsListDlg::OnNMDblclkList(NMHDR *pNMHDR, LRESULT *pResult)\r
+{\r
+       OnBnClickedPluginSettings();\r
+}\r
index 7ba17fc..2fdaf61 100644 (file)
@@ -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:
index e338ceb..d7dbb78 100644 (file)
 #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
 //
 #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