long CMUSHclientDoc::EnablePlugin(LPCTSTR PluginID, BOOL Enabled) { CPlugin * pPlugin = GetPlugin (PluginID); if (!pPlugin) return eNoSuchPlugin; if (pPlugin->m_bEnabled == (Enabled != 0)) return eOK; // already same state pPlugin->m_bEnabled = Enabled != 0; CPlugin * pSavedPlugin = m_CurrentPlugin; // otherwise plugin won't know who itself is m_CurrentPlugin = pPlugin; if (pPlugin->m_bEnabled) { CScriptCallInfo callinfo (ON_PLUGIN_ENABLE, pPlugin->m_PluginCallbacks [ON_PLUGIN_ENABLE]); pPlugin->ExecutePluginScript (callinfo); } else { CScriptCallInfo callinfo (ON_PLUGIN_DISABLE, pPlugin->m_PluginCallbacks [ON_PLUGIN_DISABLE]); pPlugin->ExecutePluginScript (callinfo); } m_CurrentPlugin = pSavedPlugin; return eOK; } // end of CMUSHclientDoc::EnablePlugin
long CMUSHclientDoc::BroadcastPlugin(long Message, LPCTSTR Text) { CPlugin * pSavedPlugin = m_CurrentPlugin; long iCount = 0; CString strCurrentID; CString strCurrentName; if (pSavedPlugin) { strCurrentID = pSavedPlugin->m_strID; strCurrentName = pSavedPlugin->m_strName; } // tell a plugin the message for (PluginListIterator pit = m_PluginList.begin (); pit != m_PluginList.end (); ++pit) { CPlugin * pPlugin = *pit; if (!(pPlugin->m_bEnabled)) // ignore disabled plugins continue; // don't broadcast to ourselves - could cause indefinite loop if (pPlugin == pSavedPlugin) continue; CScriptCallInfo callinfo (ON_PLUGIN_BROADCAST, pPlugin->m_PluginCallbacks [ON_PLUGIN_BROADCAST]); m_CurrentPlugin = pPlugin; // see what the plugin makes of this, pPlugin->ExecutePluginScript (callinfo, Message, (LPCTSTR) strCurrentID, (LPCTSTR) strCurrentName, Text); if (callinfo._dispid_info.isvalid ()) iCount++; } // end of doing each plugin m_CurrentPlugin = pSavedPlugin; return iCount; } // end of CMUSHclientDoc::BroadcastPlugin