You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
371 lines
15 KiB
371 lines
15 KiB
#ifndef _BODY_H
|
|
#define _BODY_H
|
|
|
|
/*
|
|
* includes
|
|
*/
|
|
|
|
#include "dochost.h"
|
|
|
|
/*
|
|
* forward references
|
|
*/
|
|
interface IHTMLTxtRange;
|
|
interface IHTMLElement;
|
|
interface IHTMLDocument2;
|
|
interface IMoniker;
|
|
interface IHTMLBodyElement;
|
|
interface IDocHostUIHandler;
|
|
interface ITargetFrame2;
|
|
interface ITargetFramePriv;
|
|
|
|
class CBody;
|
|
class CFmtBar;
|
|
class CAttMenu;
|
|
class CSecManager;
|
|
class CMsgSource;
|
|
class CSpell;
|
|
|
|
/*
|
|
* constants
|
|
*/
|
|
|
|
enum
|
|
{
|
|
BI_MESSAGE,
|
|
BI_MONIKER
|
|
};
|
|
|
|
/*
|
|
* typedefs
|
|
*/
|
|
typedef struct BODYINITDATA_tag
|
|
{
|
|
DWORD dwType;
|
|
union
|
|
{
|
|
IMimeMessage *pMsg;
|
|
IMoniker *pmk;
|
|
};
|
|
} BODYINITDATA, * LPBODYINITDATA;
|
|
|
|
typedef CBody *LPBODYOBJ;
|
|
|
|
typedef struct BODYHOSTINFO_tag
|
|
{
|
|
IOleInPlaceSite *pInPlaceSite;
|
|
IOleInPlaceFrame *pInPlaceFrame;
|
|
IOleInPlaceActiveObject *pDoc;
|
|
} BODYHOSTINFO, *PBODYHOSTINFO;
|
|
|
|
/*
|
|
* objects
|
|
*/
|
|
|
|
class CBody :
|
|
public CDocHost,
|
|
public IPropertyNotifySink,
|
|
public IDocHostUIHandler,
|
|
public IPersistMime,
|
|
public ITargetFramePriv,
|
|
public IPersistMoniker,
|
|
public IFontCacheNotify
|
|
#if 0
|
|
public IDispatch
|
|
|
|
#endif
|
|
{
|
|
public:
|
|
CBody();
|
|
virtual ~CBody();
|
|
|
|
|
|
// override QI to add IBodyObj
|
|
virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID, LPVOID FAR *);
|
|
virtual ULONG STDMETHODCALLTYPE AddRef();
|
|
virtual ULONG STDMETHODCALLTYPE Release();
|
|
|
|
// IPersist
|
|
virtual HRESULT STDMETHODCALLTYPE GetClassID(CLSID *pCLSID);
|
|
|
|
// IPersistMime
|
|
virtual HRESULT STDMETHODCALLTYPE Load(IMimeMessage *pMsg);
|
|
virtual HRESULT STDMETHODCALLTYPE Save(IMimeMessage *pMsg, DWORD dwFlags);
|
|
|
|
// IPersistMoniker Members
|
|
virtual HRESULT STDMETHODCALLTYPE Load(BOOL fFullyAvailable, IMoniker *pMoniker, IBindCtx *pBindCtx, DWORD grfMode);
|
|
virtual HRESULT STDMETHODCALLTYPE GetCurMoniker(IMoniker **ppMoniker) {return E_NOTIMPL;}
|
|
virtual HRESULT STDMETHODCALLTYPE Save(IMoniker *pMoniker, IBindCtx *pBindCtx, BOOL fRemember) {return E_NOTIMPL;}
|
|
virtual HRESULT STDMETHODCALLTYPE SaveCompleted(IMoniker *pMoniker, IBindCtx *pBindCtx) {return E_NOTIMPL;}
|
|
virtual HRESULT STDMETHODCALLTYPE IsDirty();
|
|
|
|
// IPropertyNotifySink
|
|
virtual HRESULT STDMETHODCALLTYPE OnChanged(DISPID dispid);
|
|
virtual HRESULT STDMETHODCALLTYPE OnRequestEdit (DISPID dispid);
|
|
|
|
// DocHostUIHandler
|
|
virtual HRESULT STDMETHODCALLTYPE GetHostInfo(DOCHOSTUIINFO * pInfo);
|
|
virtual HRESULT STDMETHODCALLTYPE ShowUI(DWORD dwID, IOleInPlaceActiveObject * pActiveObject, IOleCommandTarget * pCommandTarget, IOleInPlaceFrame * pFrame, IOleInPlaceUIWindow * pDoc);
|
|
virtual HRESULT STDMETHODCALLTYPE HideUI(void);
|
|
virtual HRESULT STDMETHODCALLTYPE UpdateUI(void);
|
|
virtual HRESULT STDMETHODCALLTYPE EnableModeless(BOOL fEnable);
|
|
virtual HRESULT STDMETHODCALLTYPE OnDocWindowActivate(BOOL fActivate);
|
|
virtual HRESULT STDMETHODCALLTYPE OnFrameWindowActivate(BOOL fActivate);
|
|
virtual HRESULT STDMETHODCALLTYPE ResizeBorder(LPCRECT prcBorder, IOleInPlaceUIWindow * pUIWindow,BOOL fRameWindow);
|
|
virtual HRESULT STDMETHODCALLTYPE GetOptionKeyPath(BSTR * pbstrKey, DWORD dw);
|
|
virtual HRESULT STDMETHODCALLTYPE ShowContextMenu(DWORD dwID, POINT* ppt, IUnknown* pcmdtReserved, IDispatch* pdispReserved);
|
|
virtual HRESULT STDMETHODCALLTYPE TranslateAccelerator(LPMSG lpMsg, const GUID * pguidCmdGroup, DWORD nCmdID);
|
|
virtual HRESULT STDMETHODCALLTYPE GetDropTarget(IDropTarget * pDropTarget, IDropTarget ** ppDropTarget);
|
|
virtual HRESULT STDMETHODCALLTYPE GetExternal(IDispatch **ppDispatch);
|
|
virtual HRESULT STDMETHODCALLTYPE TranslateUrl(DWORD dwTranslate, OLECHAR *pchURLIn, OLECHAR **ppchURLOut);
|
|
virtual HRESULT STDMETHODCALLTYPE FilterDataObject(IDataObject *pDO, IDataObject **ppDORet);
|
|
|
|
// ITargetFramePriv
|
|
virtual HRESULT STDMETHODCALLTYPE FindFrameDownwards(LPCWSTR pszTargetName, DWORD dwFlags, IUnknown **ppunkTargetFrame);
|
|
virtual HRESULT STDMETHODCALLTYPE FindFrameInContext(LPCWSTR pszTargetName, IUnknown *punkContextFrame, DWORD dwFlags, IUnknown **ppunkTargetFrame) ;
|
|
virtual HRESULT STDMETHODCALLTYPE OnChildFrameActivate(IUnknown *pUnkChildFrame);
|
|
virtual HRESULT STDMETHODCALLTYPE OnChildFrameDeactivate(IUnknown *pUnkChildFrame);
|
|
virtual HRESULT STDMETHODCALLTYPE NavigateHack(DWORD grfHLNF,LPBC pbc, IBindStatusCallback *pibsc, LPCWSTR pszTargetName, LPCWSTR pszUrl, LPCWSTR pszLocation);
|
|
virtual HRESULT STDMETHODCALLTYPE FindBrowserByIndex(DWORD dwID,IUnknown **ppunkBrowser);
|
|
|
|
// *** IFontCacheNotify ***
|
|
virtual HRESULT STDMETHODCALLTYPE OnPreFontChange();
|
|
virtual HRESULT STDMETHODCALLTYPE OnPostFontChange();
|
|
|
|
#if 0
|
|
// *** IDispatch ***
|
|
virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount(UINT *pctinfo);
|
|
virtual HRESULT STDMETHODCALLTYPE GetTypeInfo(UINT itinfo, LCID lcid, ITypeInfo **pptinfo);
|
|
virtual HRESULT STDMETHODCALLTYPE GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgdispid);
|
|
virtual HRESULT STDMETHODCALLTYPE Invoke(DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pdispparams, VARIANT *pvarResult, EXCEPINFO *pexcepinfo, UINT *puArgErr);
|
|
#endif
|
|
|
|
// override CDocHost members
|
|
virtual HRESULT STDMETHODCALLTYPE QueryService(REFGUID guidService, REFIID riid, LPVOID *ppvObject);
|
|
virtual HRESULT STDMETHODCALLTYPE Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut);
|
|
virtual HRESULT STDMETHODCALLTYPE OnUIActivate();
|
|
virtual HRESULT STDMETHODCALLTYPE OnUIDeactivate(BOOL);
|
|
virtual HRESULT STDMETHODCALLTYPE SetStatusText(LPCOLESTR);
|
|
virtual HRESULT GetDocObjSize(LPRECT prc);
|
|
virtual HRESULT STDMETHODCALLTYPE OnFocus(BOOL fGotFocus);
|
|
|
|
virtual LRESULT WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
|
|
|
HRESULT Init(HWND hwnd, DWORD dwFlags, LPRECT prc, PBODYHOSTINFO pHostInfo);
|
|
HRESULT Close();
|
|
HRESULT UnloadAll();
|
|
|
|
HRESULT SetRect(LPRECT prc);
|
|
HRESULT GetRect(LPRECT prc);
|
|
HRESULT UIActivate(BOOL fUIActivate);
|
|
HRESULT LoadStream(LPSTREAM pstm);
|
|
|
|
HRESULT OnFrameActivate(BOOL fActivate);
|
|
|
|
HRESULT PrivateQueryService(REFGUID guidService, REFIID riid, LPVOID *ppvObject);
|
|
HRESULT PrivateQueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText);
|
|
HRESULT PrivateExec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut);
|
|
HRESULT PrivateTranslateAccelerator(LPMSG lpmsg);
|
|
HRESULT PrivateEnableModeless(BOOL fEnable);
|
|
HRESULT SetParentSites(IOleInPlaceSite *pInPlaceSite, IOleInPlaceFrame *pInPlaceFrame, IOleInPlaceActiveObject *pDoc);
|
|
|
|
IHTMLDocument2 *GetDoc(){return m_pDoc;};
|
|
|
|
HRESULT SetCharset(HCHARSET hCharset);
|
|
HRESULT GetSelection(IHTMLTxtRange **ppRange);
|
|
|
|
private:
|
|
DWORD m_dwStyle,
|
|
m_dwNotify,
|
|
m_dwReadyState,
|
|
m_cchTotal,
|
|
m_dwAutoTicks,
|
|
m_dwFontCacheNotify;
|
|
HCHARSET m_hCharset;
|
|
BOOL m_fEmpty : 1,
|
|
m_fDirty : 1,
|
|
m_fDesignMode : 1,
|
|
m_fAutoDetect : 1,
|
|
m_fPlainMode : 1,
|
|
m_fMessageParsed : 1,
|
|
m_fOnImage : 1,
|
|
m_fLoading : 1,
|
|
m_fTabLinks : 1,
|
|
m_fSrcTabs : 1,
|
|
m_fBkgrndSpelling : 1,
|
|
m_fReloadingSrc : 1, // reloading source-view
|
|
m_fWasDirty : 1, // used by source-tabs to remember state of edit-mode
|
|
m_fForceCharsetLoad : 1, // used when replying and don't keep message body
|
|
m_fIgnoreAccel : 1;
|
|
IMimeMessage *m_pMsg;
|
|
IMimeMessageW *m_pMsgW;
|
|
IHTMLDocument2 *m_pDoc;
|
|
LPWSTR m_pszUrlW;
|
|
LPTEMPFILEINFO m_pTempFileUrl;
|
|
ULONG m_cchStart,
|
|
m_uHdrStyle,
|
|
m_cyPreview,
|
|
m_cVisibleBtns;
|
|
IDocHostUIHandler *m_pParentDocHostUI;
|
|
IOleCommandTarget *m_pParentCmdTarget;
|
|
LPOLEINPLACESITE m_pParentInPlaceSite;
|
|
LPOLEINPLACEFRAME m_pParentInPlaceFrame;
|
|
CMsgSource *m_pSrcView;
|
|
HWND m_hwndBtnBar,
|
|
m_hwndTab,
|
|
m_hwndSrc;
|
|
LPSTR m_pszLayout;
|
|
LPWSTR m_pszFrom,
|
|
m_pszTo,
|
|
m_pszCc,
|
|
m_pszSubject;
|
|
CFmtBar *m_pFmtBar;
|
|
CSpell *m_pSpell;
|
|
IHTMLTxtRange *m_pRangeIgnoreSpell;
|
|
IFontCache *m_pFontCache;
|
|
IOleInPlaceActiveObject *m_pDocActiveObj;
|
|
CAttMenu *m_pAttMenu;
|
|
HIMAGELIST m_hIml,
|
|
m_hImlHot;
|
|
CSecManager *m_pSecMgr;
|
|
ULONG m_uSrcView;
|
|
IDispatch *m_pDispContext;
|
|
DWORD m_dwContextItem;
|
|
LPSTREAM m_pstmHtmlSrc;
|
|
IHashTable *m_pHashExternal;
|
|
IMarkupPointer *m_pAutoStartPtr;
|
|
|
|
#ifdef PLUSPACK
|
|
// Background speller
|
|
IHTMLSpell *m_pBkgSpeller;
|
|
#endif //PLUSPACK
|
|
|
|
// notifications
|
|
void OnReadyStateChanged();
|
|
void OnDocumentReady();
|
|
HRESULT OnWMCommand(HWND hwnd, int id, WORD wCmd);
|
|
HRESULT OnPaint();
|
|
HRESULT OnEraseBkgnd(HDC hdc);
|
|
void WMSize(int x, int y);
|
|
LRESULT WMNotify(WPARAM wParam, NMHDR* pnmhdr);
|
|
HRESULT OnWMCreate();
|
|
|
|
// load functions
|
|
HRESULT RegisterLoadNotify(BOOL fRegister);
|
|
HRESULT EnsureLoaded();
|
|
HRESULT LoadFromData(LPBODYINITDATA pbiData);
|
|
HRESULT LoadFromMoniker(IMoniker *pmk, HCHARSET hCharset);
|
|
|
|
// Auto-Detect
|
|
HRESULT AutoDetectTimer();
|
|
HRESULT StopAutoDetect();
|
|
HRESULT StartAutoDetect();
|
|
HRESULT UrlHighlight(IHTMLTxtRange *pRange);
|
|
|
|
// Trident OM helper functions
|
|
HRESULT DeleteElement(IHTMLElement *pElem);
|
|
HRESULT ReplaceElement(LPCTSTR pszName, BSTR bstrPaste, BOOL fHtml);
|
|
HRESULT SelectElement(IHTMLElement *pElem, BOOL fScrollIntoView);
|
|
HRESULT CreateRangeFromElement(IHTMLElement *pElem, IHTMLTxtRange **ppRange);
|
|
HRESULT CreateRange(IHTMLTxtRange **ppRange);
|
|
HRESULT GetElement(LPCTSTR pszName, IHTMLElement **ppElem);
|
|
HRESULT GetBodyElement(IHTMLBodyElement **ppBody);
|
|
HRESULT GetSelectedAnchor(BSTR* pbstr);
|
|
HRESULT InsertTextAtCaret(BSTR bstr, BOOL fHtml, BOOL fMoveCaretToEnd);
|
|
HRESULT InsertStreamAtCaret(LPSTREAM pstm, BOOL fHtml);
|
|
HRESULT InsertBodyText(BSTR bstrPaste, DWORD dwFlags);
|
|
HRESULT _CreateRangePointer(IMarkupPointer **pPtr);
|
|
HRESULT _UrlHighlightBetweenPtrs(IMarkupPointer *pStartPtr, IMarkupPointer *pEndPtr);
|
|
HRESULT _MovePtrByCch(IMarkupPointer *pPtr, LONG *pcp);
|
|
|
|
// Printing
|
|
HRESULT Print(BOOL fPrompt, VARIANTARG *pvaIn);
|
|
|
|
// menu helpers
|
|
HRESULT UpdateContextMenu(HMENU hmenuEdit, BOOL fEnableProperties, IDispatch *pDisp);
|
|
HRESULT AppendAnchorItems(HMENU hMenu, IDispatch *pDisp);
|
|
|
|
// verb supports
|
|
HRESULT AddToWab();
|
|
HRESULT AddToFavorites();
|
|
HRESULT ViewSource(BOOL fMessage);
|
|
HRESULT DoRot13();
|
|
HRESULT SetStyle(ULONG uStyle);
|
|
DWORD DwChooseProperties();
|
|
HRESULT UpdateCommands();
|
|
HRESULT ShowFormatBar(BOOL fOn);
|
|
HRESULT SetDesignMode(BOOL fOn);
|
|
HRESULT SetPlainTextMode(BOOL fOn);
|
|
HRESULT InsertFile(BSTR bstrFileName);
|
|
HRESULT FormatFont();
|
|
HRESULT FormatPara();
|
|
HRESULT DowngradeToPlainText(BOOL fForceFixedFont);
|
|
HRESULT SetDocumentText(BSTR bstr);
|
|
HRESULT ApplyDocumentVerb(VARIANTARG *pvaIn);
|
|
HRESULT ApplyDocument(IHTMLDocument2 *pDoc);
|
|
HRESULT SaveAttachments();
|
|
HRESULT _OnSaveImage();
|
|
BOOL IsEmpty();
|
|
HRESULT SafeToEncodeText(ULONG ulCodePage);
|
|
|
|
// edit mode support
|
|
HRESULT SetComposeFont(BSTR bstr);
|
|
HRESULT SetHostComposeFont();
|
|
HRESULT PasteReplyHeader();
|
|
HRESULT FormatBlockQuote(COLORREF crTextColor);
|
|
HRESULT GetAutoText(BSTR *pbstr, BOOL *pfTop);
|
|
HRESULT PasteAutoText();
|
|
HRESULT GetHostFlags(LPDWORD pdwFlags);
|
|
HRESULT SetWindowBgColor(BOOL fForce);
|
|
HRESULT InsertBackgroundSound();
|
|
|
|
// other
|
|
HRESULT GetWebPageOptions(WEBPAGEOPTIONS *pOptions, BOOL *pfIncludeMsg);
|
|
HRESULT CreateFontCache(LPCSTR pszTridentKey);
|
|
HRESULT HrFormatParagraph();
|
|
|
|
// preview pane mode helpers
|
|
HRESULT RecalcPreivewHeight(HDC hdc);
|
|
HRESULT UpdatePreviewLabels();
|
|
LONG lGetClientHeight();
|
|
HRESULT Resize();
|
|
void OutputHeaderText(HDC hdc, LPWSTR psz, int *pcxPos, int cyPos, int cxMax, ULONG uFlags);
|
|
LONG lGetLineHeight(HDC hdc);
|
|
|
|
// MHTML saving helpers
|
|
HRESULT ClearDirtyFlag();
|
|
HRESULT ClearUndoStack();
|
|
HRESULT DoHostProperties();
|
|
HRESULT SaveAsStationery(VARIANTARG *pvaIn, VARIANTARG *pvaOut);
|
|
HRESULT TagUnreferencedImages();
|
|
HRESULT GetBackgroundColor(DWORD *pdwColor);
|
|
HRESULT SetBackgroundColor(DWORD dwColor);
|
|
HRESULT SearchForCIDUrls();
|
|
|
|
HRESULT UpdateBtnBar();
|
|
|
|
HRESULT InitToolbar();
|
|
HRESULT UpdateButtons();
|
|
HRESULT ShowAttachMenu(BOOL fRightClick);
|
|
HRESULT ShowPreview(BOOL fOn);
|
|
HRESULT PointFromButton(int idm, POINT *ppt);
|
|
HRESULT EnsureAttMenu();
|
|
HRESULT EnableSounds(BOOL fOn);
|
|
|
|
// source editing mode helpers
|
|
HRESULT ShowSourceView(ULONG uSrcView);
|
|
HRESULT ShowSourceTabs(BOOL fOn);
|
|
HRESULT SetSourceTabs(ULONG ulTab);
|
|
HRESULT IsColorSourceEditing();
|
|
|
|
// spellchecker
|
|
HRESULT HrCreateSpeller(BOOL fBkgrnd);
|
|
HRESULT _ReloadWithHtmlSrc(IStream *pstm);
|
|
HRESULT _EnsureSrcView();
|
|
};
|
|
|
|
|
|
HRESULT CreateBodyObject(HWND hwnd, DWORD dwFlags, LPRECT prc, PBODYHOSTINFO pHostInfo, LPBODYOBJ *ppBodyObj);
|
|
|
|
|
|
#endif //_BODY_H
|