//+------------------------------------------------------------------------- // // Microsoft Windows // // Copyright (C) Microsoft Corporation, 1999 - 1999 // // File: bennodes.h // //-------------------------------------------------------------------------- // BenefitsNodes.h // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_BENEFITSNODES_H__E0573E77_D325_11D1_846C_00104B211BE5__INCLUDED_) #define AFX_BENEFITSNODES_H__E0573E77_D325_11D1_846C_00104B211BE5__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include "Benefits.h" // // Added to support the generated COM dispatch interface. // #import "SampCtrl\SampCtrl.ocx" using namespace SampCtrl; class CRetirementNode : public CBenefitsData< CRetirementNode > { public: SNAPINMENUID( IDR_UPDATE_MENU ) BEGIN_SNAPINCOMMAND_MAP( CRetirementNode, FALSE ) SNAPINCOMMAND_ENTRY(ID_TASK_ENROLL, OnEnroll) SNAPINCOMMAND_ENTRY(ID_TOP_UPDATE, OnUpdate) END_SNAPINCOMMAND_MAP() BEGIN_SNAPINTOOLBARID_MAP( CRetirementNode ) END_SNAPINTOOLBARID_MAP() CRetirementNode( CEmployee* pCurEmployee ); virtual ~CRetirementNode(); // // Overridden to display web page as results. // STDMETHOD( GetResultViewType )( LPOLESTR *ppViewType, long *pViewOptions ); // // Overridden to provide strings for various columns. // LPOLESTR GetResultPaneColInfo(int nCol); // // Command handler for "Enroll" functionality. // STDMETHOD( OnEnroll )(bool& bHandled, CSnapInObjectRootBase* pObj); // // Command handler for "Update" functionality. // STDMETHOD( OnUpdate )(bool& bHandled, CSnapInObjectRootBase* pObj); // // Overridden to cache the OCX pointer. // STDMETHOD(Notify)( MMC_NOTIFY_TYPE event, long arg, long param, IComponentData* pComponentData, IComponent* pComponent, DATA_OBJECT_TYPES type) { HRESULT hr = E_NOTIMPL; switch (event) { case MMCN_SHOW: // // Always respond to the show call so that the // console knows this has been processed and can // properly seat toolbars, etc. // hr = S_OK; break; case MMCN_INITOCX: // // The IUnknown of the OCX is passed in. Do // any other initialization of the OCX here. // m_spControl = (IUnknown*) param; hr = S_OK; break; default: // // Always default to calling the base class implementation. // hr = CBenefitsData::Notify( event, arg, param, pComponentData, pComponent, type ); } return hr; } protected: // // Definition generated by compiler. IDispatch implementation. // _SampleControlPtr m_spControl; }; #define TASKPAD_LOCALQUERY 100 class CHealthNode : public CBenefitsData< CHealthNode >, public CTaskpadItem { public: SNAPINMENUID( IDR_ENROLL_MENU ) BEGIN_SNAPINCOMMAND_MAP( CHealthNode, FALSE ) SNAPINCOMMAND_ENTRY(ID_TASK_ENROLL, OnEnroll) SNAPINCOMMAND_ENTRY(ID_TOP_IMPORT, OnImport) SNAPINCOMMAND_ENTRY(ID_TOP_EXPORT, OnExport) SNAPINCOMMAND_ENTRY(ID_VIEW_TASKPAD, OnTaskpad) END_SNAPINCOMMAND_MAP() BEGIN_SNAPINTOOLBARID_MAP( CHealthNode ) SNAPINTOOLBARID_ENTRY( IDR_ENROLLTOOLBAR ) END_SNAPINTOOLBARID_MAP() CHealthNode( CEmployee* pCurEmployee ); virtual ~CHealthNode(); // // Overridden to display web page as results. // STDMETHOD( GetResultViewType )( LPOLESTR *ppViewType, long *pViewOptions ); // // Overridden to provide strings for various columns. // LPOLESTR GetResultPaneColInfo(int nCol); // // Command handler for "Enroll" functionality. // STDMETHOD( OnEnroll )(bool& bHandled, CSnapInObjectRootBase* pObj); // // Restores any state, especially in the case of using a // taskpad, when the back and forward buttons are used by // the user for navigation. // STDMETHOD( OnRestoreView )( MMC_RESTORE_VIEW* pRestoreView, BOOL* pfHandled ); // // Command handler for "OnTaskpad" functionality. // STDMETHOD( OnTaskpad )(bool& bHandled, CSnapInObjectRootBase* pObj) { UNUSED_ALWAYS( bHandled ); CComPtr spConsole; // // Switch the current view mode to a taskpad view. // m_fTaskpad = !m_fTaskpad; // // Reselect the node to cause GetResultViewType() to get // called once again. // if ( pObj->m_nType == 1 ) spConsole = ((CBenefits*)pObj)->m_spConsole; else spConsole = ((CBenefitsComponent*)pObj)->m_spConsole; spConsole->SelectScopeItem( m_scopeDataItem.ID ); return( S_OK ); } // // Overridden to set the checkmark state of the taskpad menuitem. // void UpdateMenuState(UINT id, LPTSTR pBuf, UINT *flags) { UNUSED_ALWAYS( pBuf ); // // Check the menuitem if we are currently in "taskpad" // mode. // if ( id == ID_VIEW_TASKPAD ) *flags |= m_fTaskpad ? MFS_CHECKED : MFS_UNCHECKED; } // // Overridden to enable the delete verb. // STDMETHOD(Notify)( MMC_NOTIFY_TYPE event, long arg, long param, IComponentData* pComponentData, IComponent* pComponent, DATA_OBJECT_TYPES type) { HRESULT hr = E_NOTIMPL; switch (event) { case MMCN_SELECT: hr = S_OK; break; case MMCN_RESTORE_VIEW: // // Called when the history list is used to navigate by // the user. Since we have a taskpad display, it's up // to us to restore that view, as appropriate. // hr = OnRestoreView( (MMC_RESTORE_VIEW*) arg, (BOOL*) param ); break; case MMCN_SHOW: // // Always respond to the show call so that the // console knows this has been processed and can // properly seat toolbars, etc. // hr = S_OK; break; default: // // Always default to calling the base class implementation. // hr = CBenefitsData< CHealthNode >::Notify( event, arg, param, pComponentData, pComponent, type ); } return hr; } // // Called when one of the tasks is clicked. // STDMETHOD( TaskNotify )( IConsole* pConsole, VARIANT* arg, VARIANT* param ); // // Returns an enumerator for all of these tasks. // STDMETHOD( EnumTasks )( LPOLESTR szTaskGroup, IEnumTASK** ppEnumTASK ); protected: // // Indicates whether we should be displayed in a taskpad view. // bool m_fTaskpad; }; class CBuildingNode; class CKeyNode : public CChildrenBenefitsData< CKeyNode > { public: SNAPINMENUID( IDR_ACCESS_MENU ) BEGIN_SNAPINCOMMAND_MAP( CKeyNode, FALSE ) SNAPINCOMMAND_ENTRY(ID_NEW_BUILDINGACCESS, OnGrantAccess) END_SNAPINCOMMAND_MAP() BEGIN_SNAPINTOOLBARID_MAP( CKeyNode ) SNAPINTOOLBARID_ENTRY( IDR_ACCESSTOOLBAR ) END_SNAPINTOOLBARID_MAP() CKeyNode( CEmployee* pCurEmployee ); virtual ~CKeyNode(); // // Overridden to call the base class implementation. // STDMETHOD(Notify)( MMC_NOTIFY_TYPE event, long arg, long param, IComponentData* pComponentData, IComponent* pComponent, DATA_OBJECT_TYPES type) { ATLTRACE2( atlTraceSnapin, 0, _T( "CNotifyImpl::Notify\n" ) ); // Add code to handle the different notifications. // Handle MMCN_SHOW and MMCN_EXPAND to enumerate children items. // In response to MMCN_SHOW you have to enumerate both the scope // and result pane items. // For MMCN_EXPAND you only need to enumerate the scope items // Use IConsoleNameSpace::InsertItem to insert scope pane items // Use IResultData::InsertItem to insert result pane item. HRESULT hr = E_NOTIMPL; _ASSERTE( pComponentData != NULL || pComponent != NULL ); CComPtr spConsole; CComQIPtr spHeader; if (pComponentData != NULL) spConsole = ((CBenefits*)pComponentData)->m_spConsole; else { spConsole = ((CBenefitsComponent*)pComponent)->m_spConsole; spHeader = spConsole; } switch (event) { case MMCN_SELECT: // // Call our select handler. // hr = OnSelect( spConsole ); break; case MMCN_SHOW: // // Only setup colums if we're displaying the result pane. // if ( arg == TRUE ) hr = OnShowColumn( spHeader ); hr = OnShow( event, arg, param, spConsole, type ); break; case MMCN_EXPAND: // // We do not expand as normal, since the building nodes are // only displayed in the result pane. // break; case MMCN_ADD_IMAGES: hr = OnAddImages( event, arg, param, spConsole, type ); break; case MMCN_QUERY_PASTE: // // Called to determine if the current object can be pasted // or not into this context. // hr = OnQueryPaste( (LPDATAOBJECT) arg ); break; case MMCN_PASTE: // // Called by MMC when the item should be pasted. // hr = OnPaste( spConsole, (LPDATAOBJECT) arg, (LPDATAOBJECT*) param ); break; } return hr; } // // Ensures that the appropriate verbs are displayed. // STDMETHOD( OnSelect )( IConsole* pConsole ) { HRESULT hr; CComPtr spConsoleVerb; // // Enable the delete verb. // hr = pConsole->QueryConsoleVerb( &spConsoleVerb ); _ASSERTE( SUCCEEDED( hr ) ); // // Enable the copy and paste verbs. // hr = spConsoleVerb->SetVerbState( MMC_VERB_PASTE, ENABLED, TRUE ); _ASSERTE( SUCCEEDED( hr ) ); return( hr ); } // // Called by the console to determine if we can paste the // specified node. // STDMETHOD( OnQueryPaste )( LPDATAOBJECT pItem ); // // Called by MMC when the item should be pasted. // STDMETHOD( OnPaste )( IConsole* pConsole, LPDATAOBJECT pItem, LPDATAOBJECT* pItemCut ); // // Overridden to provide strings for various columns. // LPOLESTR GetResultPaneColInfo(int nCol); // // Overridden to add new columns to the results // display. // STDMETHOD( OnShowColumn )( IHeaderCtrl* pHeader ); // // Command handler for "Grant Acess" functionality. // STDMETHOD( OnGrantAccess )( bool& bHandled, CSnapInObjectRootBase* pObj ); // // Called by one of our children nodes to inform us that // they should be deleted. This occurs when the user selects // a delete action on the building. This function should not // only delete the building, but also handle the refresh of // the result display. // STDMETHOD( OnDeleteBuilding )( IConsole* pConsole, CBuildingNode* pChildNode ); }; class CBuildingNode : public CBenefitsData< CBuildingNode > { public: BEGIN_SNAPINCOMMAND_MAP(CBuildingNode, FALSE) END_SNAPINCOMMAND_MAP() BEGIN_SNAPINTOOLBARID_MAP(CBuildingNode) END_SNAPINTOOLBARID_MAP() CBuildingNode( CKeyNode* pParentNode, BSTR bstrName, BSTR bstrLocation ); CBuildingNode( const CBuildingNode& inNode ); // // Overridden to provide strings for various columns. // LPOLESTR GetResultPaneColInfo(int nCol); // // Hold the location of this building. // BSTR m_bstrLocation; // // Pointer to our parent node to handle deletion // issues. // CKeyNode* m_pParentNode; // // Overridden to enable the delete verb. // STDMETHOD(Notify)( MMC_NOTIFY_TYPE event, long arg, long param, IComponentData* pComponentData, IComponent* pComponent, DATA_OBJECT_TYPES type) { HRESULT hr = E_NOTIMPL; CComPtr spConsole; CComQIPtr spHeader; if (pComponentData != NULL) spConsole = ((CBenefits*)pComponentData)->m_spConsole; else { spConsole = ((CBenefitsComponent*)pComponent)->m_spConsole; spHeader = spConsole; } switch (event) { case MMCN_DELETE: // // Call our delete handler. // hr = OnDelete( spConsole ); break; case MMCN_SELECT: // // Call our select handler. // hr = OnSelect( spConsole ); break; case MMCN_SHOW: // // Always respond to the show call so that the // console knows this has been processed and can // properly seat toolbars, etc. // hr = S_OK; break; default: // // Always default to calling the base class implementation. // hr = CBenefitsData< CBuildingNode >::Notify( event, arg, param, pComponentData, pComponent, type ); } return hr; } // // Delete handler. // STDMETHOD( OnDelete )( IConsole* pConsole ) { _ASSERT( m_pParentNode != NULL ); HRESULT hr; // // Calls the parent node to tell it to delete // ourselves. // hr = m_pParentNode->OnDeleteBuilding( pConsole, this ); return( hr ); } // // Ensures that the appropriate verbs are displayed. // STDMETHOD( OnSelect )( IConsole* pConsole ) { HRESULT hr; CComPtr spConsoleVerb; // // Enable the delete verb. // hr = pConsole->QueryConsoleVerb( &spConsoleVerb ); _ASSERTE( SUCCEEDED( hr ) ); hr = spConsoleVerb->SetVerbState( MMC_VERB_DELETE, ENABLED, TRUE ); _ASSERTE( SUCCEEDED( hr ) ); // // Enable the copy and paste verbs. // hr = spConsoleVerb->SetVerbState( MMC_VERB_COPY, ENABLED, TRUE ); _ASSERTE( SUCCEEDED( hr ) ); return( hr ); } }; #endif // !defined(AFX_BENEFTISNODES_H__E0573E77_D325_11D1_846C_00104B211BE5__INCLUDED_)