//____________________________________________________________________________
//
//  Microsoft Windows
//  Copyright (C) Microsoft Corporation, 1997 - 1999
//
//  File:       taskhost.h
//
//  Contents:
//
//  Classes:
//
//  Functions:
//
//  History:    11/19/1997   RaviR   Created
//____________________________________________________________________________
//

#ifndef TASKHOST_H__
#define TASKHOST_H__

class CTaskPadHost : public ITaskPadHost,
                     public CComObjectRoot
{
// Constructor & destructor
public:
    CTaskPadHost() : m_pAMCView(NULL)
    {
    }
    void Init(CAMCView* pv)
    {
        ASSERT(pv);
        m_pAMCView = pv;
    }
    ~CTaskPadHost()
    {
        m_pAMCView = NULL;
    }

// ATL COM map
public:
BEGIN_COM_MAP(CTaskPadHost)
    COM_INTERFACE_ENTRY(ITaskPadHost)
END_COM_MAP()

// ITaskPadHost methods
public:

    STDMETHOD(TaskNotify        )(BSTR szClsid, VARIANT * pvArg, VARIANT * pvParam);
    STDMETHOD(GetTaskEnumerator )(BSTR szTaskGroup, IEnumTASK** ppEnumTASK);
    STDMETHOD(GetPrimaryTask    )(IExtendTaskPad** ppExtendTaskPad);
    STDMETHOD(GetTitle          )(BSTR szTaskGroup, BSTR * pbstrTitle);
    STDMETHOD(GetDescriptiveText)(BSTR szTaskGroup, BSTR * pbstrDescriptiveText);
    STDMETHOD(GetBackground     )(BSTR szTaskGroup, MMC_TASK_DISPLAY_OBJECT * pTDO);
//  STDMETHOD(GetBranding       )(BSTR szTaskGroup, MMC_TASK_DISPLAY_OBJECT * pTDO);
    STDMETHOD(GetListPadInfo    )(BSTR szTaskGroup, MMC_ILISTPAD_INFO * pIListPadInfo);

// Implementation
private:
    CAMCView*           m_pAMCView;
    IExtendTaskPadPtr   m_spExtendTaskPadPrimary;

    INodeCallback* _GetNodeCallback(void)
    {
        return m_pAMCView->GetNodeCallback();
    }

    IExtendTaskPad* _GetPrimaryExtendTaskPad()
    {
        if (m_spExtendTaskPadPrimary == NULL)
        {
            IExtendTaskPadPtr spExtendTaskPad;
            HRESULT hr = GetPrimaryTask(&spExtendTaskPad);
            if (SUCCEEDED(hr))
                m_spExtendTaskPadPrimary.Attach(spExtendTaskPad.Detach());
        }

        ASSERT(m_spExtendTaskPadPrimary != NULL);
        return m_spExtendTaskPadPrimary;
    }

// Ensure that default copy constructor & assignment are not used.
    CTaskPadHost(const CTaskPadHost& rhs);
    CTaskPadHost& operator=(const CTaskPadHost& rhs);

}; // class CTaskPadHost


#endif // TASKHOST_H__