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.
360 lines
13 KiB
360 lines
13 KiB
// Copyright (c)1997-1999 Microsoft Corporation, All Rights Reserved
|
|
|
|
#ifndef _proxyframe_h_
|
|
#define _proxyframe_h_
|
|
|
|
#include <docobj.h>
|
|
#include <ocidl.h>
|
|
#include <WinINet.h>
|
|
#include "plgprot.h"
|
|
#include "dhtmledit.h"
|
|
|
|
// This was given in email from Josh Kaplan to Steve Isaac in response
|
|
// to what command is necessary so that Trident won't clear the undo
|
|
// stack on setAttribute calls. The command takes a BOOL -- True == good behavior
|
|
#define IDM_GOOD_UNDO_BEHAVIOR 6049
|
|
|
|
typedef struct _CommandMap
|
|
{
|
|
DHTMLEDITCMDID typeLibCmdID;
|
|
ULONG cmdID;
|
|
BOOL bOutParam;
|
|
|
|
} CommandMap;
|
|
|
|
#ifdef LATE_BIND_URLMON_WININET
|
|
typedef HRESULT (WINAPI *PFNCoInternetCombineUrl)(LPCWSTR,LPCWSTR,DWORD,LPWSTR,DWORD,DWORD*,DWORD);
|
|
typedef HRESULT (WINAPI *PFNCoInternetParseUrl)(LPCWSTR,PARSEACTION,DWORD,LPWSTR,DWORD,DWORD*,DWORD);
|
|
typedef HRESULT (WINAPI *PFNCreateURLMoniker)(LPMONIKER,LPCWSTR,LPMONIKER FAR*);
|
|
typedef HRESULT (WINAPI *PFNCoInternetGetSession)(DWORD,IInternetSession**,DWORD);
|
|
typedef HRESULT (WINAPI *PFNURLOpenBlockingStream)(LPUNKNOWN,LPCSTR,LPSTREAM*,DWORD,LPBINDSTATUSCALLBACK);
|
|
|
|
typedef BOOL (WINAPI *PFNDeleteUrlCacheEntry)(LPCSTR);
|
|
typedef BOOL (WINAPI *PFNInternetCreateUrl)(LPURL_COMPONENTSA,DWORD,LPSTR,LPDWORD);
|
|
typedef BOOL (WINAPI *PFNInternetCrackURL)(LPCSTR,DWORD,DWORD,LPURL_COMPONENTSA);
|
|
#endif // LATE_BIND_URLMON_WININET
|
|
|
|
|
|
|
|
class CDHTMLEdProtocolInfo;
|
|
typedef CComObject<CDHTMLEdProtocolInfo> *PProtocolInfo;
|
|
|
|
class CDHTMLSafe;
|
|
|
|
|
|
typedef enum DENudgeDirection {
|
|
deNudgeUp = 8000,
|
|
deNudgeDown,
|
|
deNudgeLeft,
|
|
deNudgeRight,
|
|
};
|
|
|
|
|
|
class CProxyFrame : public IOleInPlaceFrame, public IOleCommandTarget,
|
|
public IBindStatusCallback, public IAuthenticate
|
|
{
|
|
public:
|
|
CProxyFrame(CDHTMLSafe* pCtl);
|
|
~CProxyFrame();
|
|
|
|
HRESULT Init(IUnknown* pUnk, IUnknown** ppUnkTriEdit);
|
|
HRESULT PreActivate();
|
|
HRESULT Activate();
|
|
void UIDeactivate();
|
|
HRESULT Close();
|
|
HRESULT LoadInitialDoc();
|
|
HRESULT LoadDocument(BSTR path, BOOL bfIsURL = FALSE);
|
|
HRESULT FilterSourceCode ( BSTR bsSourceIn, BSTR* pbsSourceOut );
|
|
HRESULT Print( BOOL bfWithUI );
|
|
HRESULT SaveDocument(BSTR path);
|
|
HRESULT SetContextMenu(LPVARIANT pVarMenuStrings, LPVARIANT pVarMenuStates);
|
|
HRESULT SetContextMenuSA(LPVARIANT pVarMenuStrings, LPVARIANT pVarMenuStates);
|
|
HRESULT SetContextMenuDispEx(LPVARIANT pVarMenuStrings, LPVARIANT pVarMenuStates);
|
|
HRESULT GetBrowseMode ( VARIANT_BOOL *pVal );
|
|
HRESULT SetBrowseMode ( VARIANT_BOOL newVal );
|
|
HRESULT GetDocumentTitle ( CComBSTR& bstrTitle );
|
|
HRESULT GetDivOnCr ( VARIANT_BOOL *pVal );
|
|
HRESULT SetDivOnCr ( VARIANT_BOOL newVal );
|
|
HRESULT GetBusy ( VARIANT_BOOL *pVal );
|
|
HRESULT RefreshDoc ( void );
|
|
|
|
HRESULT HrTridentSetPropBool(ULONG cmd, BOOL bVal);
|
|
HRESULT HrTridentGetPropBool(ULONG cmd, BOOL& bVal);
|
|
|
|
HRESULT HrMapCommand(DHTMLEDITCMDID typeLibCmdID, ULONG* cmdID, const GUID** ppguidCmdGroup, BOOL* bpInParam);
|
|
HRESULT HrExecCommand(const GUID* pguidCmdGroup, ULONG ucmdID, OLECMDEXECOPT cmdexecopt, VARIANT* pVarIn, VARIANT* pVarOut);
|
|
HRESULT HrMapExecCommand(DHTMLEDITCMDID deCommand, OLECMDEXECOPT cmdexecopt, VARIANT* pVarIn, VARIANT* pVarOut);
|
|
HRESULT HrExecGenericCommands(const GUID* pguidCmdGroup, ULONG cmdID, OLECMDEXECOPT cmdexecopt, LPVARIANT pVarInput, BOOL bOutParam);
|
|
HRESULT HrExecGetBlockFmtNames(LPVARIANT pVarInput);
|
|
HRESULT HrExecInsertTable(LPVARIANT pVarInput);
|
|
HRESULT HrExecGetColor(DHTMLEDITCMDID deCommand, ULONG ulMappedCommand, LPVARIANT pVarOutput);
|
|
HRESULT HrExecSetFontSize(LPVARIANT pVarInput);
|
|
|
|
HRESULT HrQueryStatus(const GUID* pguidCmdGroup, ULONG ucmdID, OLECMDF* cmdf);
|
|
HRESULT HrMapQueryStatus( DHTMLEDITCMDID ucmdID, DHTMLEDITCMDF* cmdf);
|
|
|
|
HRESULT HrGetDoc(IHTMLDocument2 **ppDoc);
|
|
HRESULT HrGetTableSafeArray(IDEInsertTableParam* pTable, LPVARIANT pVarIn);
|
|
|
|
HRESULT HrTranslateAccelerator(LPMSG lpmsg);
|
|
HRESULT HrHandleAccelerator(LPMSG lpmsg);
|
|
HRESULT HrNudge(DENudgeDirection dir);
|
|
HRESULT HrToggleAbsolutePositioned();
|
|
HRESULT HrHyperLink();
|
|
HRESULT HrIncreaseIndent();
|
|
HRESULT HrDecreaseIndent();
|
|
|
|
void UpdateObjectRects(void);
|
|
void SetParent ( HWND hwndControl );
|
|
void Show ( WPARAM nCmdShow );
|
|
LRESULT OnSetFocus(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
|
|
|
void OnReadyStateChanged(READYSTATE readyState);
|
|
|
|
inline CDHTMLSafe* GetControl() {
|
|
return m_pCtl;
|
|
};
|
|
|
|
inline BOOL IsCreated() {
|
|
return m_fCreated;
|
|
};
|
|
|
|
inline BOOL IsActivated() {
|
|
return m_fActivated;
|
|
};
|
|
|
|
inline SAFEARRAY* GetMenuStrings() {
|
|
return m_pMenuStrings;
|
|
};
|
|
|
|
inline SAFEARRAY* GetMenuStates() {
|
|
return m_pMenuStates;
|
|
};
|
|
|
|
HRESULT GetContainer ( LPOLECONTAINER* ppContainer );
|
|
|
|
HRESULT GetCurDocNameWOPath ( CComBSTR& bstrDocName );
|
|
HRESULT GetBaseURL ( CComBSTR& bstrBaseURL );
|
|
HRESULT SetBaseURL ( CComBSTR& bstrBaseURL );
|
|
HRESULT GetFilteredStream ( IStream** ppStream );
|
|
HRESULT GetSecurityURL (CComBSTR& bstrSecurityURL );
|
|
|
|
protected:
|
|
|
|
HRESULT HrSetRuntimeProperties();
|
|
HRESULT HrSetDocLoadedProperties();
|
|
HRESULT SetBaseURLFromBaseHref ( void );
|
|
HRESULT SetBaseURLFromCurDocPath ( BOOL bfIsURL );
|
|
HRESULT SetBaseURLFromURL ( const CComBSTR& bstrURL );
|
|
HRESULT SetBaseURLFromFileName ( const CComBSTR& bstrFName );
|
|
HRESULT SetBaseUrlFromFileUrlComponents ( URL_COMPONENTS & urlc );
|
|
HRESULT SetBaseUrlFromUrlComponents ( URL_COMPONENTS & urlc );
|
|
|
|
typedef enum TriEditState {
|
|
ESTATE_NOTCREATED = 0,
|
|
ESTATE_CREATED,
|
|
ESTATE_PREACTIVATING,
|
|
ESTATE_ACTIVATING,
|
|
ESTATE_ACTIVATED,
|
|
} TriEditState;
|
|
|
|
void ChangeState(TriEditState state) { m_state = state; }
|
|
inline TriEditState GetState() { return m_state; }
|
|
|
|
HRESULT GetSelectionPos ( LPPOINT lpWhere );
|
|
|
|
public: // properties
|
|
|
|
HRESULT HrSetPropActivateControls(BOOL activateControls);
|
|
HRESULT HrGetPropActivateControls(BOOL& activateControls);
|
|
|
|
HRESULT HrSetPropActivateApplets(BOOL activateApplets);
|
|
HRESULT HrGetPropActivateApplets(BOOL& activateApplets);
|
|
|
|
HRESULT HrSetPropActivateDTCs(BOOL activateDTCs);
|
|
HRESULT HrGetPropActivateDTCs(BOOL& activateDTCs);
|
|
|
|
HRESULT HrSetPropShowAllTags(BOOL showAllTags);
|
|
HRESULT HrGetPropShowAllTags(BOOL& showAllTags);
|
|
|
|
HRESULT HrSetPropShowBorders(BOOL showBorders);
|
|
HRESULT HrGetPropShowBorders(BOOL& showBorders);
|
|
|
|
HRESULT HrSetDisplay3D(BOOL bVal);
|
|
HRESULT HrGetDisplay3D(BOOL& bVal);
|
|
|
|
HRESULT HrSetScrollbars(BOOL bVal);
|
|
HRESULT HrGetScrollbars(BOOL& bVal);
|
|
|
|
HRESULT HrSetDisplayFlatScrollbars(BOOL bVal);
|
|
HRESULT HrGetDisplayFlatScrollbars(BOOL& bVal);
|
|
|
|
HRESULT HrSetDocumentHTML(BSTR bVal);
|
|
HRESULT HrGetDocumentHTML(BSTR* bVal);
|
|
|
|
HRESULT HrSetPreserveSource(BOOL bVal);
|
|
HRESULT HrGetPreserveSource(BOOL& bVal);
|
|
|
|
HRESULT HrSetAbsoluteDropMode(BOOL dropMode);
|
|
HRESULT HrGetAbsoluteDropMode(BOOL& dropMode);
|
|
|
|
HRESULT HrSetSnapToGrid(BOOL snapToGrid);
|
|
HRESULT HrGetSnapToGrid(BOOL& snapToGrid);
|
|
|
|
HRESULT HrSetSnapToGridX(LONG snapToGridX);
|
|
HRESULT HrGetSnapToGridX(LONG& snapToGridX);
|
|
|
|
HRESULT HrSetSnapToGridY(LONG snapToGridY);
|
|
HRESULT HrGetSnapToGridY(LONG& snapToGridY);
|
|
|
|
HRESULT HrGetIsDirty(BOOL& bVal);
|
|
|
|
HRESULT HrGetCurrentDocumentPath(BSTR* bVal);
|
|
|
|
// IBindStatusCallback trivial implementation, for synchronous transfer ONLY:
|
|
STDMETHOD(GetBindInfo)(DWORD*,BINDINFO*) { return E_NOTIMPL; }
|
|
STDMETHOD(OnStartBinding)(DWORD, IBinding*) { return S_OK; }
|
|
STDMETHOD(GetPriority)(LONG *pnPriority) { *pnPriority = THREAD_PRIORITY_NORMAL; return S_OK; }
|
|
STDMETHOD(OnProgress)(ULONG, ULONG, ULONG, LPCWSTR);
|
|
STDMETHOD(OnDataAvailable)(DWORD, DWORD, FORMATETC*, STGMEDIUM*) { return E_NOTIMPL; }
|
|
STDMETHOD(OnObjectAvailable)(REFIID, IUnknown*) { return E_NOTIMPL; }
|
|
STDMETHOD(OnLowResource)(DWORD) { return E_NOTIMPL; }
|
|
STDMETHOD(OnStopBinding)(HRESULT, LPCWSTR) { return S_OK; }
|
|
|
|
// IAuthenticate
|
|
STDMETHOD(Authenticate)(HWND *phwnd, LPWSTR *pszUserName, LPWSTR *pszPassword)
|
|
{ *phwnd = m_hWndObj; *pszUserName = NULL; *pszPassword = NULL; return S_OK; }
|
|
|
|
public:
|
|
//Shared IUnknown implementation
|
|
STDMETHODIMP QueryInterface(REFIID, void **);
|
|
STDMETHODIMP_(ULONG) AddRef(void);
|
|
STDMETHODIMP_(ULONG) Release(void);
|
|
|
|
//IOleInPlaceFrame implementation
|
|
STDMETHODIMP GetWindow(HWND *);
|
|
STDMETHODIMP ContextSensitiveHelp(BOOL);
|
|
STDMETHODIMP GetBorder(LPRECT);
|
|
STDMETHODIMP RequestBorderSpace(LPCBORDERWIDTHS);
|
|
STDMETHODIMP SetBorderSpace(LPCBORDERWIDTHS);
|
|
STDMETHODIMP SetActiveObject(LPOLEINPLACEACTIVEOBJECT
|
|
, LPCOLESTR);
|
|
STDMETHODIMP InsertMenus(HMENU, LPOLEMENUGROUPWIDTHS);
|
|
STDMETHODIMP SetMenu(HMENU, HOLEMENU, HWND);
|
|
STDMETHODIMP RemoveMenus(HMENU);
|
|
STDMETHODIMP SetStatusText(LPCOLESTR);
|
|
STDMETHODIMP EnableModeless(BOOL);
|
|
STDMETHODIMP TranslateAccelerator(LPMSG, WORD);
|
|
|
|
//IOleCommandTarget
|
|
STDMETHODIMP QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds
|
|
, OLECMD prgCmds[], OLECMDTEXT *pCmdText);
|
|
|
|
STDMETHODIMP Exec(const GUID *pguidCmdGroup, DWORD nCmdID
|
|
, DWORD nCmdexecopt, VARIANTARG *pvaIn, VARIANTARG *pvaOut);
|
|
|
|
HRESULT OnTriEditEvent ( const GUID& iidEventInterface, DISPID dispid );
|
|
|
|
HWND GetDocWindow () { return m_hWndObj; }
|
|
HRESULT GetScrollPos ( LPPOINT lpPos );
|
|
HRESULT CheckCrossZoneSecurity ( BSTR url );
|
|
HRESULT CheckCrossZoneSecurityOfSelection ( void );
|
|
void ClearSFSRedirect ( void ) { m_bfSFSRedirect = FALSE; }
|
|
BOOL GetSFSRedirect ( void ) { return m_bfSFSRedirect; }
|
|
|
|
void ClearLoadingFlag ( void ) { m_bfIsLoading = FALSE; }
|
|
|
|
private:
|
|
HRESULT RegisterPluggableProtocol ( void );
|
|
HRESULT UnRegisterPluggableProtocol ( void );
|
|
HRESULT LoadBSTRDeferred ( BSTR bVal );
|
|
void AssureActivated ( void );
|
|
WCHAR* GetInitialHTML ( void );
|
|
void InitializeDocString ( void ) { m_bstrInitialDoc = GetInitialHTML (); }
|
|
BOOL IsMissingBackSlash ( BSTR path, BOOL bfIsURL );
|
|
HRESULT SetDirtyFlag ( BOOL bfMakeDirty );
|
|
#ifdef LATE_BIND_URLMON_WININET
|
|
BOOL DynLoadLibraries ( void );
|
|
void DynUnloadLibraries ( void );
|
|
#endif // LATE_BIND_URLMON_WININET
|
|
|
|
private:
|
|
|
|
ULONG m_cRef;
|
|
TriEditState m_state;
|
|
|
|
class CDHTMLSafe*m_pCtl; // back pointer to control
|
|
class CSite* m_pSite; // Site holding object
|
|
|
|
BOOL m_fCreated;
|
|
BOOL m_fActivated;
|
|
LPUNKNOWN m_pUnkTriEdit;
|
|
IOleInPlaceActiveObject *m_pIOleIPActiveObject;
|
|
HWND m_hWndObj; // Trident's window
|
|
|
|
READYSTATE m_readyState;
|
|
|
|
DWORD m_dwFilterFlags; // Flags to use for the next filter in
|
|
DWORD m_dwFilterOutFlags; // Flags used on the last filter out
|
|
|
|
SAFEARRAY* m_pMenuStrings;
|
|
SAFEARRAY* m_pMenuStates;
|
|
|
|
BOOL m_fActivateApplets; // takes affect at init only
|
|
BOOL m_fActivateControls; // takes affect at init only
|
|
BOOL m_fActivateDTCs; // takes affect at init only
|
|
|
|
BOOL m_fShowAllTags; // can be set anytime
|
|
BOOL m_fShowBorders; // can be set anytime
|
|
|
|
BOOL m_fDialogEditing; // takes affect at init only
|
|
BOOL m_fDisplay3D; // takes affect at init only
|
|
BOOL m_fScrollbars; // takes affect at init only
|
|
BOOL m_fDisplayFlatScrollbars; // takes affect at init only
|
|
BOOL m_fContextMenu; // takes affect at init only
|
|
|
|
BOOL m_fPreserveSource; // takes affect at init only
|
|
|
|
BOOL m_fAbsoluteDropMode;
|
|
BOOL m_fSnapToGrid;
|
|
LONG m_ulSnapToGridX;
|
|
LONG m_ulSnapToGridY;
|
|
|
|
CComBSTR m_bstrInitialDoc;
|
|
CComBSTR m_bstrCurDocPath;
|
|
CComBSTR m_bstrBaseURL;
|
|
VARIANT_BOOL m_vbBrowseMode;
|
|
PProtocolInfo m_pProtInfo;
|
|
WCHAR m_wszProtocol[16];
|
|
WCHAR m_wszProtocolPrefix[16];
|
|
BOOL m_bfIsURL;
|
|
CComBSTR m_bstrLoadText;
|
|
HWND m_hwndRestoreFocus;
|
|
VARIANT_BOOL m_vbUseDivOnCr;
|
|
BOOL m_bfIsLoading;
|
|
BOOL m_bfBaseURLFromBASETag;
|
|
BOOL m_bfPreserveDirtyFlagAcrossBrowseMode;
|
|
HRESULT m_hrDeferredLoadError;
|
|
|
|
BOOL m_bfModeSwitched;
|
|
BOOL m_bfReloadAttempted;
|
|
BOOL m_bfSFSRedirect;
|
|
|
|
#ifdef LATE_BIND_URLMON_WININET
|
|
HMODULE m_hUlrMon;
|
|
HMODULE m_hWinINet;
|
|
|
|
public:
|
|
PFNCoInternetCombineUrl m_pfnCoInternetCombineUrl;
|
|
PFNCoInternetParseUrl m_pfnCoInternetParseUrl;
|
|
PFNCreateURLMoniker m_pfnCreateURLMoniker;
|
|
PFNCoInternetGetSession m_pfnCoInternetGetSession;
|
|
PFNURLOpenBlockingStream m_pfnURLOpenBlockingStream;
|
|
|
|
PFNDeleteUrlCacheEntry m_pfnDeleteUrlCacheEntry;
|
|
PFNInternetCreateUrl m_pfnInternetCreateUrl;
|
|
PFNInternetCrackURL m_pfnInternetCrackUrl;
|
|
#endif // LATE_BIND_URLMON_WININET
|
|
};
|
|
|
|
#endif
|