//____________________________________________________________________________ // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1997 - 1999 // // File: menubtn.cpp // // Contents: // // Classes: // // Functions: // // History: 5/17/1997 WayneSc Created //____________________________________________________________________________ // #include "stdafx.h" #include "menubtn.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ////////////////////////////////////////////////////////////////////////////// // IMenuButton implementation DEBUG_DECLARE_INSTANCE_COUNTER(CMenuButton); CMenuButton::CMenuButton() { m_pControlbar = NULL; m_pMenuButtonsMgr = NULL; DEBUG_INCREMENT_INSTANCE_COUNTER(CMenuButton); } CMenuButton::~CMenuButton() { m_pControlbar = NULL; m_pMenuButtonsMgr = NULL; DEBUG_DECREMENT_INSTANCE_COUNTER(CMenuButton); } void CMenuButton::SetControlbar(CControlbar* pControlbar) { m_pControlbar = pControlbar; } CControlbar* CMenuButton::GetControlbar() { return m_pControlbar; } CMenuButtonsMgr* CMenuButton::GetMenuButtonsMgr(void) { if ((NULL == m_pMenuButtonsMgr) && (NULL != m_pControlbar) ) { m_pMenuButtonsMgr = m_pControlbar->GetMenuButtonsMgr(); } return m_pMenuButtonsMgr; } //+------------------------------------------------------------------- // // Member: AddButton // // Synopsis: Add a menu button, called by snapin. // // Arguments: [idCommand] - Command ID for the menu button. // [lpButtonText] - The text for menu button. // [lpTooltipText] - Status / Tool tip text. // // Returns: HRESULT // //-------------------------------------------------------------------- STDMETHODIMP CMenuButton::AddButton(int idCommand, LPOLESTR lpButtonText, LPOLESTR lpTooltipText) { DECLARE_SC_FOR_PUBLIC_INTERFACE(sc, _T("IMenuButton::AddButton")); if (lpButtonText == NULL || lpTooltipText == NULL) { sc = E_INVALIDARG; TraceSnapinError(_T("Invalid Args"), sc); return sc.ToHr(); } CMenuButtonsMgr* pMenuButtonsMgr = GetMenuButtonsMgr(); if (NULL == pMenuButtonsMgr) { sc = E_UNEXPECTED; return sc.ToHr(); } sc = pMenuButtonsMgr->ScAddMenuButton(this, idCommand, lpButtonText, lpTooltipText); if (sc) return sc.ToHr(); return sc.ToHr(); } //+------------------------------------------------------------------- // // Member: SetButton // // Synopsis: Modify a menu button name or status text, called by snapin. // // Arguments: [idCommand] - Command ID for the menu button. // [lpButtonText] - The text for menu button. // [lpTooltipText] - Status / Tool tip text. // // Returns: HRESULT // //-------------------------------------------------------------------- STDMETHODIMP CMenuButton::SetButton(int idCommand, LPOLESTR lpButtonText, LPOLESTR lpTooltipText) { DECLARE_SC_FOR_PUBLIC_INTERFACE(sc, _T("IMenuButton::SetButton")); if (lpButtonText == NULL || lpTooltipText == NULL) { sc = E_INVALIDARG; TraceSnapinError(_T("Invalid Args"), sc); return sc.ToHr(); } CMenuButtonsMgr* pMenuButtonsMgr = GetMenuButtonsMgr(); if (NULL == pMenuButtonsMgr) { sc = E_UNEXPECTED; return sc.ToHr(); } sc = pMenuButtonsMgr->ScModifyMenuButton(this, idCommand, lpButtonText, lpTooltipText); if (sc) return sc.ToHr(); return sc.ToHr(); } //+------------------------------------------------------------------- // // Member: SetButtonState // // Synopsis: Modify a menu button state, called by snapin. // // Arguments: [idCommand] - Command ID for the menu button. // [nState] - The state to be modified. // [bState] - Set or Reset the state. // // Returns: HRESULT // //-------------------------------------------------------------------- STDMETHODIMP CMenuButton::SetButtonState(int idCommand, MMC_BUTTON_STATE nState, BOOL bState) { DECLARE_SC_FOR_PUBLIC_INTERFACE(sc, _T("IMenuButton::SetButtonState")); if (nState == CHECKED || nState == INDETERMINATE) { sc = E_INVALIDARG; TraceSnapinError(_T("Invalid Button States"), sc); return sc.ToHr(); } if (m_pControlbar == NULL) { sc = E_UNEXPECTED; return sc.ToHr(); } // ENABLED, HIDDEN, BUTTONPRESSED CMenuButtonsMgr* pMenuButtonsMgr = GetMenuButtonsMgr(); if (NULL == pMenuButtonsMgr) { sc = E_UNEXPECTED; return sc.ToHr(); } sc = pMenuButtonsMgr->ScModifyMenuButtonState(this, idCommand, nState, bState); if (sc) return sc.ToHr(); return sc.ToHr(); } //+------------------------------------------------------------------- // // Member: ScAttach // // Synopsis: Attach this MenuButton object to the UI. // // Arguments: None // // Returns: SC // //-------------------------------------------------------------------- SC CMenuButton::ScAttach(void) { DECLARE_SC(sc, _T("CMenuButton::ScAttach")); CMenuButtonsMgr* pMenuButtonsMgr = GetMenuButtonsMgr(); if (NULL == pMenuButtonsMgr) return (sc = E_UNEXPECTED); sc = pMenuButtonsMgr->ScAttachMenuButton(this); if (sc) return sc.ToHr(); return sc; } //+------------------------------------------------------------------- // // Member: ScDetach // // Synopsis: Detach this MenuButton object from the UI. // // Arguments: None // // Returns: SC // //-------------------------------------------------------------------- SC CMenuButton::ScDetach(void) { DECLARE_SC(sc, _T("CMenuButton::ScDetach")); CMenuButtonsMgr* pMenuButtonsMgr = GetMenuButtonsMgr(); if (NULL == pMenuButtonsMgr) return (sc = E_UNEXPECTED); sc = pMenuButtonsMgr->ScDetachMenuButton(this); if (sc) return sc; SetControlbar(NULL); return sc; } //+------------------------------------------------------------------- // // Member: ScNotifyMenuBtnClick // // Synopsis: Notify the Controbar (snapin) that menu button is clicked. // // Arguments: [hNode] - The node that owns the result pane. // [bScope] - Scope or Result. // [lParam] - If result (pane) lParam of result item. // [menuButtonData] - MENUBUTTONDATA // // Returns: SC // //-------------------------------------------------------------------- SC CMenuButton:: ScNotifyMenuBtnClick(HNODE hNode, bool bScope, LPARAM lParam, MENUBUTTONDATA& menuButtonData) { DECLARE_SC(sc, _T("CMenuButton::ScNotifyMenuBtnClick")); if (NULL == m_pControlbar) return (sc = E_UNEXPECTED); sc = m_pControlbar->ScNotifySnapinOfMenuBtnClick(hNode, bScope, lParam, &menuButtonData); if (sc) return sc.ToHr(); return sc; }