//+------------------------------------------------------------------------- // // Microsoft Windows // // Copyright (C) Microsoft Corporation, 1999 - 1999 // // File: toolbar.cpp // //-------------------------------------------------------------------------- #include "stdafx.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ////////////////////////////////////////////////////////////////////////////// // IToolbar implementation DEBUG_DECLARE_INSTANCE_COUNTER(CToolbar); CToolbar::CToolbar() { m_pControlbar = NULL; m_pToolbarIntf = NULL; DEBUG_INCREMENT_INSTANCE_COUNTER(CToolbar); } CToolbar::~CToolbar() { DECLARE_SC(sc, _T("CToolbar::~CToolbar")); // Destroy the toolbar UI. if (m_pToolbarIntf) { sc = m_pToolbarIntf->ScDelete(this); if (sc) sc.TraceAndClear(); m_pToolbarIntf = NULL; } // Controlbar has a reference to this object, ask it // to stop referencing this object. if (m_pControlbar) { m_pControlbar->DeleteFromToolbarsList(this); m_pControlbar = NULL; } DEBUG_DECREMENT_INSTANCE_COUNTER(CToolbar); } //+------------------------------------------------------------------- // // Member: AddBitmap // // Synopsis: Add bitmaps for given toolbar. // // Arguments: // [nImages] - Number of bitmap images. // [hbmp] - Handle to the bitmap. // [cxSize] - Size of the bitmap. // [cySize] - Size of the bitmap. // [crMask] - color mask. // // Returns: HRESULT // // Note: We support only 16x16 bitmaps for toolbars. // //-------------------------------------------------------------------- STDMETHODIMP CToolbar::AddBitmap(int nImages, HBITMAP hbmp, int cxSize, int cySize, COLORREF crMask) { DECLARE_SC_FOR_PUBLIC_INTERFACE(sc, _T("IToolbar::AddBitmap")); if (hbmp == NULL || nImages < 1 || cxSize < 1 || cySize < 1) { sc = E_INVALIDARG; TraceSnapinError(_T("Invalid Arguments"), sc); return sc.ToHr(); } // Note: We support only 16x16 bitmaps for toolbars. if (cxSize != BUTTON_BITMAP_SIZE || cySize != BUTTON_BITMAP_SIZE) { sc = E_INVALIDARG; TraceSnapinError(_T("Invalid Bitmap size"), sc); return sc.ToHr(); } sc = ScCheckPointers(m_pToolbarIntf, E_UNEXPECTED); if (sc) return sc.ToHr(); sc = m_pToolbarIntf->ScAddBitmap(this, nImages, hbmp, crMask); if (sc) return sc.ToHr(); return sc.ToHr(); } //+------------------------------------------------------------------- // // Member: AddButtons // // Synopsis: Add buttons for given toolbar. // // Arguments: // [nButtons] - Number of buttons. // [lpButtons] - Array of MMCBUTTONS to be added. // // Returns: HRESULT // //-------------------------------------------------------------------- STDMETHODIMP CToolbar::AddButtons(int nButtons, LPMMCBUTTON lpButtons) { DECLARE_SC_FOR_PUBLIC_INTERFACE(sc, _T("IToolbar::AddButtons")); if ( (lpButtons == NULL) || (nButtons < 1) ) { sc = E_INVALIDARG; TraceSnapinError(_T("Invalid Args"), sc); return sc.ToHr(); } sc = ScCheckPointers(m_pToolbarIntf, E_UNEXPECTED); if (sc) return sc.ToHr(); sc = m_pToolbarIntf->ScAddButtons(this, nButtons, lpButtons); if (sc) return sc.ToHr(); return sc.ToHr(); } //+------------------------------------------------------------------- // // Member: InsertButton // // Synopsis: Add buttons for given toolbar at given index. // // Arguments: // [nButtons] - Index at which this button is to be added. // [lpButton] - Ptr to MMCBUTTON to be added. // // Returns: HRESULT // //-------------------------------------------------------------------- STDMETHODIMP CToolbar::InsertButton(int nIndex, LPMMCBUTTON lpButton) { DECLARE_SC_FOR_PUBLIC_INTERFACE(sc, _T("IToolbar::InsertButton")); if ( (lpButton == NULL) || (nIndex < 0) ) { sc = E_INVALIDARG; TraceSnapinError(_T("Invalid Args"), sc); return sc.ToHr(); } sc = ScCheckPointers(m_pToolbarIntf, E_UNEXPECTED); if (sc) return sc.ToHr(); sc = m_pToolbarIntf->ScInsertButton(this, nIndex, lpButton); if (sc) return sc.ToHr(); return sc.ToHr(); } //+------------------------------------------------------------------- // // Member: DeleteButton // // Synopsis: Delete the button at given index. // // Arguments: // [nIndex] - Index of the button to be deleted. // // Returns: HRESULT // //-------------------------------------------------------------------- STDMETHODIMP CToolbar::DeleteButton(int nIndex) { DECLARE_SC_FOR_PUBLIC_INTERFACE(sc, _T("IToolbar::DeleteButton")); if (nIndex < 0) { sc = E_INVALIDARG; TraceSnapinError(_T("Invalid index"), sc); return sc.ToHr(); } sc = ScCheckPointers(m_pToolbarIntf, E_UNEXPECTED); if (sc) return sc.ToHr(); sc = m_pToolbarIntf->ScDeleteButton(this, nIndex); if (sc) return sc.ToHr(); return sc.ToHr(); } //+------------------------------------------------------------------- // // Member: GetTBStateFromMMCButtonState // // Synopsis: We use MMC_BUTTON_STATE for Set/Get Button States & // use TBSTATE for Insert/Add Buttons. // This method helps Get/Set ButtonState methods to translate // the MMC_BUTTON_STATEs to TBSTATE so that conui deals only // with TBSTATE. // // Arguments: [nState] - MMC_BUTTON_STATE to be transformed. // // Returns: TBSTATE value. // //-------------------------------------------------------------------- BYTE CToolbar::GetTBStateFromMMCButtonState(MMC_BUTTON_STATE nState) { switch (nState) { case ENABLED: return TBSTATE_ENABLED; break; case CHECKED: return TBSTATE_CHECKED; break; case HIDDEN: return TBSTATE_HIDDEN; break; case INDETERMINATE: return TBSTATE_INDETERMINATE; break; case BUTTONPRESSED: return TBSTATE_PRESSED; break; default: ASSERT(FALSE); // Invalid option return 0; } } //+------------------------------------------------------------------- // // Member: GetButtonState // // Synopsis: Is the given state of a button set or not. // // Arguments: // [idCommand] - Command id of the button. // [nState] - State needed. // [pbState] - Is the above state set or reset. // // Returns: HRESULT // //-------------------------------------------------------------------- STDMETHODIMP CToolbar::GetButtonState(int idCommand, MMC_BUTTON_STATE nState, BOOL* pbState) { DECLARE_SC_FOR_PUBLIC_INTERFACE(sc, _T("IToolbar::GetButtonState")); if (pbState == NULL) { sc = E_INVALIDARG; TraceSnapinError(_T("NULL pointer"), sc); return sc.ToHr(); } sc = ScCheckPointers(m_pToolbarIntf, E_UNEXPECTED); if (sc) return sc.ToHr(); sc = m_pToolbarIntf->ScGetButtonState(this, idCommand, GetTBStateFromMMCButtonState(nState), pbState); if (sc) return sc.ToHr(); return sc.ToHr(); } //+------------------------------------------------------------------- // // Member: SetButtonState // // Synopsis: Modify the given state of a button. // // Arguments: // [idCommand] - Command id of the button. // [nState] - State to be modified. // [bState] - Set or Reset the state. // // Returns: HRESULT // //-------------------------------------------------------------------- STDMETHODIMP CToolbar::SetButtonState(int idCommand, MMC_BUTTON_STATE nState, BOOL bState) { DECLARE_SC_FOR_PUBLIC_INTERFACE(sc, _T("IToolbar::SetButtonState")); sc = ScCheckPointers(m_pToolbarIntf, E_UNEXPECTED); if (sc) return sc.ToHr(); sc = m_pToolbarIntf->ScSetButtonState(this, idCommand, GetTBStateFromMMCButtonState(nState), bState); if (sc) return sc.ToHr(); return (sc.ToHr()); } //+------------------------------------------------------------------- // // Member: ScAttach // // Synopsis: Attach this toolbar to UI. // // Arguments: None. // // Returns: SC // //-------------------------------------------------------------------- SC CToolbar::ScAttach() { DECLARE_SC(sc, _T("CToolbar::ScAttach")); sc = ScCheckPointers(m_pToolbarIntf, E_UNEXPECTED); if (sc) return sc.ToHr(); sc = m_pToolbarIntf->ScAttach(this); if (sc) return sc.ToHr(); return (sc); } //+------------------------------------------------------------------- // // Member: ScDetach // // Synopsis: Detach this toolbar from the UI. // // Arguments: None. // // Returns: SC // //-------------------------------------------------------------------- SC CToolbar::ScDetach() { DECLARE_SC(sc, _T("CToolbar::ScDetach")); sc = ScCheckPointers(m_pToolbarIntf, E_UNEXPECTED); if (sc) return sc.ToHr(); sc = m_pToolbarIntf->ScDetach(this); if (sc) return sc.ToHr(); return (sc); } //+------------------------------------------------------------------- // // Member: ScShow // // Synopsis: Show/Hide this toolbar. // // Arguments: // [bShow] - Show or Hide. // // Returns: SC // //-------------------------------------------------------------------- SC CToolbar::ScShow(BOOL bShow) { DECLARE_SC(sc, _T("CToolbar::ScShow")); sc = ScCheckPointers(m_pToolbarIntf, E_UNEXPECTED); if (sc) return sc.ToHr(); sc = (bShow ? m_pToolbarIntf->ScAttach(this) : m_pToolbarIntf->ScDetach(this)); if (sc) return sc.ToHr(); return (sc); } //+------------------------------------------------------------------- // // Member: ScNotifyToolBarClick // // Synopsis: Notify the snapin about a tool button is click. // // Arguments: [pNode] - CNode* that owns result pane. // [bScope] - Scope or Result. // [lResultItemCookie] - If Result pane is selected the item param. // [nID] - Command ID of the tool button clicked. // // Returns: SC // //-------------------------------------------------------------------- SC CToolbar::ScNotifyToolBarClick(HNODE hNode, bool bScope, LPARAM lResultItemCookie, UINT nID) { DECLARE_SC(sc, _T("CToolbar::ScNotifyToolbarClick")); if (NULL == m_pControlbar) return (sc = E_UNEXPECTED); sc = m_pControlbar->ScNotifySnapinOfToolBtnClick(hNode, bScope, lResultItemCookie, nID); if (sc) return sc; return(sc); } //+------------------------------------------------------------------- // // Member: CToolbar::ScAMCViewToolbarsBeingDestroyed // // Synopsis: The CAMCViewToolbars object is going away, do not // reference that object anymore. // // Arguments: // // Returns: SC // //-------------------------------------------------------------------- SC CToolbar::ScAMCViewToolbarsBeingDestroyed () { DECLARE_SC(sc, _T("CToolbar::ScAMCViewToolbarsBeingDestroyed")); m_pToolbarIntf = NULL; return (sc); }