// Microsoft Foundation Classes C++ library.
// Copyright (C) 1993 Microsoft Corporation,
// All rights reserved.

// This source code is only intended as a supplement to the
// Microsoft Foundation Classes Reference and Microsoft
// QuickHelp and/or WinHelp documentation provided with the library.
// See these sources for detailed information regarding the
// Microsoft Foundation Classes product.

#ifndef __AFXODLGS_H__
#define __AFXODLGS_H__

#ifdef _AFX_NO_OLE_SUPPORT
        #error OLE classes not supported in _MAC builds.
#endif

#ifdef _AFXCTL
        #error OLE UI dialogs not supported in _AFXCTL builds.
#endif

#ifndef __AFXOLE_H__
        #include <afxole.h>
#endif

#ifndef __AFXDLGS_H__
        #include <afxdlgs.h>
#endif

// include OLE 2.0 dialog/helper APIs
#include <ole2ui.h>

#ifdef _AFX_PACKING
#pragma pack(push, _AFX_PACKING)
#endif

/////////////////////////////////////////////////////////////////////////////
// AFXODLGS.H - MFC OLE dialogs

// Classes declared in this file

//CCommonDialog
        class COleDialog;                   // base class for OLE dialog wrappers
                class COleInsertDialog;         // insert object dialog
                class COleConvertDialog;        // convert dialog
                class COleChangeIconDialog;     // change icon dialog
                class COlePasteSpecialDialog;   // paste special dialog
                class COleLinksDialog;          // edit links dialog
                        class COleUpdateDialog;     // update links/embeddings dialog
                class COleBusyDialog;           // used for

/////////////////////////////////////////////////////////////////////////////

// AFXDLL support
#undef AFX_DATA
#define AFX_DATA AFX_OLE_DATA

/////////////////////////////////////////////////////////////////////////////
// Wrappers for OLE UI dialogs

class COleDialog : public CCommonDialog
{
        DECLARE_DYNAMIC(COleDialog)

// Attributes
public:
        UINT GetLastError() const;

// Implementation
public:
        int MapResult(UINT nResult);
        COleDialog(CWnd* pParentWnd);
#ifdef _DEBUG
        virtual void Dump(CDumpContext& dc) const;
#endif

protected:
        UINT m_nLastError;

protected:
        friend UINT CALLBACK AFX_EXPORT _AfxOleHookProc(HWND, UINT, WPARAM, LPARAM);
};

/////////////////////////////////////////////////////////////////////////////
// COleInsertDialog

class COleInsertDialog : public COleDialog
{
        DECLARE_DYNAMIC(COleInsertDialog)

// Attributes
public:
        OLEUIINSERTOBJECT m_io; // structure for OleUIInsertObject

// Constructors
        COleInsertDialog(DWORD dwFlags = IOF_SELECTCREATENEW,
                CWnd* pParentWnd = NULL);

// Operations
        virtual int DoModal();
        BOOL CreateItem(COleClientItem* pItem);
                // call after DoModal to create item based on dialog data

// Attributes (after DoModal returns IDOK)
        enum Selection { createNewItem, insertFromFile, linkToFile };
        UINT GetSelectionType() const;
                // return type of selection made

        CString GetPathName() const;  // return full path name
        REFCLSID GetClassID() const;    // get class ID of new item

        DVASPECT GetDrawAspect() const;
                // DVASPECT_CONTENT or DVASPECT_ICON
        HGLOBAL GetIconicMetafile() const;
                // returns HGLOBAL to METAFILEPICT struct with iconic data

// Implementation
public:
        virtual ~COleInsertDialog();
#ifdef _DEBUG
        virtual void Dump(CDumpContext& dc) const;
#endif

protected:
        TCHAR m_szFileName[_MAX_PATH];
                // contains full path name after return
};

/////////////////////////////////////////////////////////////////////////////
// COleConvertDialog

class COleConvertDialog : public COleDialog
{
        DECLARE_DYNAMIC(COleConvertDialog)

// Attributes
public:
        OLEUICONVERT m_cv;  // structure for OleUIConvert

// Constructors
        COleConvertDialog(COleClientItem* pItem,
                DWORD dwFlags = CF_SELECTCONVERTTO, CLSID* pClassID = NULL,
                CWnd* pParentWnd = NULL);

// Operations
        virtual int DoModal();
                // just display the dialog and collect convert info
        BOOL DoConvert(COleClientItem* pItem);
                // do the conversion on pItem (after DoModal == IDOK)

// Attributes (after DoModal returns IDOK)
        enum Selection { noConversion, convertItem, activateAs };
        UINT GetSelectionType() const;

        HGLOBAL GetIconicMetafile() const;  // will return NULL if same as before
        REFCLSID GetClassID() const;    // get class ID to convert or activate as
        DVASPECT GetDrawAspect() const; // get new draw aspect

// Implementation
public:
        virtual ~COleConvertDialog();
#ifdef _DEBUG
        virtual void Dump(CDumpContext& dc) const;
#endif
};

/////////////////////////////////////////////////////////////////////////////
// COleChangeIconDialog

class COleChangeIconDialog : public COleDialog
{
        DECLARE_DYNAMIC(COleChangeIconDialog)

// Attributes
public:
        OLEUICHANGEICON m_ci;   // structure for OleUIChangeIcon

// Constructors
        COleChangeIconDialog(COleClientItem* pItem,
                DWORD dwFlags = CIF_SELECTCURRENT,
                CWnd* pParentWnd = NULL);

// Operations
        virtual int DoModal();
        BOOL DoChangeIcon(COleClientItem* pItem);

// Attributes
        HGLOBAL GetIconicMetafile() const;

// Implementation
public:
        virtual ~COleChangeIconDialog();
#ifdef _DEBUG
        virtual void Dump(CDumpContext& dc) const;
#endif
};

/////////////////////////////////////////////////////////////////////////////
// COlePasteSpecialDialog

class COlePasteSpecialDialog : public COleDialog
{
        DECLARE_DYNAMIC(COlePasteSpecialDialog)

// Attributes
public:
        OLEUIPASTESPECIAL m_ps; // structure for OleUIPasteSpecial

// Constructors
        COlePasteSpecialDialog(DWORD dwFlags = PSF_SELECTPASTE,
                COleDataObject* pDataObject = NULL, CWnd *pParentWnd = NULL);

// Operations
        OLEUIPASTEFLAG AddLinkEntry(UINT cf);
        void AddFormat(const FORMATETC& formatEtc, LPTSTR lpszFormat,
                LPTSTR lpszResult, DWORD flags);
        void AddFormat(UINT cf, DWORD tymed, UINT nFormatID, BOOL bEnableIcon,
                BOOL bLink);
        void AddStandardFormats(BOOL bEnableLink = TRUE);

        virtual int DoModal();
        BOOL CreateItem(COleClientItem *pNewItem);
                // creates a standard OLE item from selection data

// Attributes (after DoModal returns IDOK)
        int GetPasteIndex() const;      // resulting index to use for paste

        enum Selection { pasteLink = 1, pasteNormal = 2, pasteStatic = 3, pasteOther = 4};
        UINT GetSelectionType() const;
                // get selection type (pasteLink, pasteNormal, pasteStatic)

        DVASPECT GetDrawAspect() const;
                // DVASPECT_CONTENT or DVASPECT_ICON
        HGLOBAL GetIconicMetafile() const;
                // returns HGLOBAL to METAFILEPICT struct with iconic data

// Implementation
public:
        virtual ~COlePasteSpecialDialog();
#ifdef _DEBUG
        virtual void Dump(CDumpContext& dc) const;
        virtual void AssertValid() const;
#endif
        unsigned int m_arrLinkTypes[8];
                // size limit imposed by MFCUIx32.DLL library
};

/////////////////////////////////////////////////////////////////////////////
// COleLinksDialog

class COleLinksDialog : public COleDialog
{
        DECLARE_DYNAMIC(COleLinksDialog)

// Attributes
public:
        OLEUIEDITLINKS m_el;    // structure for OleUIEditLinks

// Constructors
        COleLinksDialog(COleDocument* pDoc, CView* pView, DWORD dwFlags = 0,
                CWnd* pParentWnd = NULL);

// Operations
        virtual int DoModal();  // display the dialog and edit links

// Implementation
public:
        virtual ~COleLinksDialog();
#ifdef _DEBUG
        virtual void Dump(CDumpContext& dc) const;
        virtual void AssertValid() const;
#endif

public:
        COleDocument* m_pDocument;          // document being manipulated
        COleClientItem* m_pSelectedItem;    // primary selected item in m_pDocument
        POSITION m_pos;                     // used during link enumeration
        BOOL m_bUpdateLinks;                // update links?
        BOOL m_bUpdateEmbeddings;           // update embeddings?

// Interface Maps
        BEGIN_INTERFACE_PART(OleUILinkContainer, IOleUILinkContainer)
                INIT_INTERFACE_PART(COleLinksDialog, OleUILinkContainer)
                STDMETHOD_(DWORD,GetNextLink)(DWORD);
                STDMETHOD(SetLinkUpdateOptions)(DWORD, DWORD);
                STDMETHOD(GetLinkUpdateOptions)(DWORD, LPDWORD);
                STDMETHOD(SetLinkSource)(DWORD, LPTSTR, ULONG, ULONG*, BOOL);
                STDMETHOD(GetLinkSource)(DWORD, LPTSTR*, ULONG*,
                        LPTSTR*, LPTSTR*, BOOL*, BOOL*);
                STDMETHOD(OpenLinkSource)(DWORD);
                STDMETHOD(UpdateLink)(DWORD, BOOL, BOOL);
                STDMETHOD(CancelLink)(DWORD);
        END_INTERFACE_PART(OleUILinkContainer)

        DECLARE_INTERFACE_MAP()
};

/////////////////////////////////////////////////////////////////////////////
// COleUpdateDialog

class COleUpdateDialog : public COleLinksDialog
{
        DECLARE_DYNAMIC(COleUpdateDialog)

// Constructors
public:
        COleUpdateDialog(COleDocument* pDoc,
                BOOL bUpdateLinks = TRUE, BOOL bUpdateEmbeddings = FALSE,
                CWnd* pParentWnd = NULL);

// Operations
        virtual int DoModal();

// Implementation
public:
        virtual ~COleUpdateDialog();
#ifdef _DEBUG
        virtual void Dump(CDumpContext& dc) const;
#endif

protected:
        CString m_strCaption;   // caption for the dialog
};

/////////////////////////////////////////////////////////////////////////////
// COleBusyDialog - useful in managing concurrency

class COleBusyDialog : public COleDialog
{
        DECLARE_DYNAMIC(COleBusyDialog)

// Attributes
public:
        OLEUIBUSY m_bz;

// Constructors
        COleBusyDialog(HTASK htaskBusy, BOOL bNotResponding = FALSE,
                DWORD dwFlags = 0, CWnd* pParentWnd = NULL);

// Operations
        virtual int DoModal();

        enum Selection { switchTo = 1, retry = 2, callUnblocked = 3 };
        UINT GetSelectionType() const;

// Implementation
public:
        ~COleBusyDialog();
#ifdef _DEBUG
        virtual void Dump(CDumpContext& dc) const;
#endif

protected:
        Selection m_selection;  // selection after DoModal returns IDOK
};

/////////////////////////////////////////////////////////////////////////////
// Inline function declarations

#ifdef _AFX_PACKING
#pragma pack(pop)
#endif

#ifdef _AFX_ENABLE_INLINES
#define _AFXODLGS_INLINE inline
#include <afxole.inl>
#undef _AFXODLGS_INLINE
#endif

#undef AFX_DATA
#define AFX_DATA

#endif //__AFXODLGS_H__

/////////////////////////////////////////////////////////////////////////////
