sload.hxx
Upload User: caisha3
Upload Date: 2013-09-21
Package Size: 208739k
Code Size: 6k
Category:

Windows Develop

Development Platform:

Visual C++

  1. //+---------------------------------------------------------------------------
  2. //
  3. //  Copyright (C) Microsoft Corporation, 1998.
  4. //
  5. //  Class:      CSpringLoader
  6. //
  7. //  Contents:   CSpringLoader Class
  8. //
  9. //              A CSpringLoader - intercepts and applies character formatting
  10. //              commands.
  11. //
  12. //              It is tied to the caret object
  13. //
  14. //
  15. //  History:    07/13/98  OliverSe Created
  16. //----------------------------------------------------------------------------
  17. #ifndef _SLOAD_HXX_
  18. #define _SLOAD_HXX_ 1
  19. #ifndef X_RESOURCE_H_
  20. #define X_RESOURCE_H
  21. #include "resource.h"    
  22. #endif
  23. class CCommand;
  24. class CBaseCharCommand;
  25. class CCharCommand;
  26. class CFontCommand;
  27. class CMshtmlEd;
  28. MtExtern(CSpringLoader)
  29. enum SPRINGLOADER_MODE;
  30. class CSpringLoader
  31. {
  32. public:
  33.     DECLARE_MEMALLOC_NEW_DELETE(Mt(CSpringLoader))
  34.     CSpringLoader(CMshtmlEd * pCommandTarget);
  35.     CSpringLoader() { Assert(!"Can't use default constructor"); }
  36.     ~CSpringLoader();
  37.     //
  38.     // Springloading interface.
  39.     //
  40.     HRESULT SpringLoad(IMarkupPointer * pmpPosition, DWORD dwMode = 0);
  41.     HRESULT SpringLoadComposeSettings(IMarkupPointer * pmpNewPosition, BOOL fReset = FALSE, BOOL fOutsideSpan = FALSE);
  42.     HRESULT CanSpringLoadComposeSettings(IMarkupPointer * pmpNewPosition, BOOL * pfCanOverrideSpringLoad = NULL, BOOL fOutsideSpan = FALSE, BOOL fDontJump = FALSE);
  43.     HRESULT Fire(IMarkupPointer * pmpStart, IMarkupPointer * pmpEnd = NULL, BOOL fMoveCaretToStart = TRUE);
  44.     void    Reset(IMarkupPointer * pmpPosition = NULL);
  45.     BOOL    IsSpringLoadedAt(IMarkupPointer * pmpPosition);
  46.     BOOL    IsSpringLoaded()                                       { return _fSpringLoaded; }
  47.     void    Reposition(IMarkupPointer * pmpPosition)               { if (_fSpringLoaded) MarkSpringLoaded(pmpPosition); }
  48.     BOOL    OverrideComposeSettings()                              { return _fOverrideComposeSettings; }
  49.     void    OverrideComposeSettings(BOOL fOverrideComposeSettings) { _fOverrideComposeSettings = fOverrideComposeSettings; }
  50.     
  51.     //
  52.     // Exec and QueryStatus hooks.
  53.     //
  54.     HRESULT PrivateExec(DWORD nCmdID, VARIANTARG * pvarargIn, VARIANTARG * pvarargOut, ISegmentList * pSegmentList);
  55.     HRESULT PrivateQueryStatus(DWORD nCmdID, OLECMD rgCmds[]);
  56. private:
  57.     //
  58.     // General springloader helpers.
  59.     //
  60.     void    SetFormats(BOOL fBold, BOOL fItalic, BOOL fUnderline, BOOL fSuperscript, BOOL fSubscript, CVariant * pvarName, CVariant * pvarSize, CVariant * pvarColor, CVariant * pvarBackColor);
  61.     void    MarkSpringLoaded(IMarkupPointer * pmpPosition);
  62.     HRESULT EnsureCaretPointers(IMarkupPointer * pmpPosition, IHTMLCaret ** ppCaret, IMarkupPointer ** ppmpCaret );
  63.     HRESULT UpdatePointerPositions(IMarkupPointer * pmpStart, IMarkupPointer * pmpEnd, ELEMENT_TAG_ID tagIdScope, BOOL fApplyElement);
  64.     HRESULT CanHandleCommand(DWORD nCmdID, ISegmentList * pSegmentList, IMarkupPointer ** ppmpPosition=NULL, VARIANTARG * pvarargIn=NULL);
  65.     HRESULT AdjustPointerForInsert(IMarkupPointer * pWhereIThinkIAm, BOOL fNotAtBOL, INT inBlockcDir, INT inTextDir);
  66.     //
  67.     // Compose settings helpers.
  68.     //
  69.     BOOL    IsBlockEmptyForSpringLoading(IMarkupPointer * pmpNewPosition, IHTMLElement * pElemBlock, BOOL fDontJump);
  70.     BOOL    SpringLoadFormatsAcrossLayout(IMarkupPointer * pmpNewPosition, IHTMLElement * pElemBlock, BOOL fActuallySpringLoad = TRUE);
  71.     BOOL    IsCharFormatBlock(IHTMLElement * pElem);
  72.     BOOL    CanJumpOverElement(IHTMLElement * pElem);
  73.     BOOL    InSpanScope(IMarkupPointer * pmpPosition);
  74.     BOOL    IsSeparatedOnlyByPhraseScopes(IMarkupPointer * pmpLeft, IMarkupPointer * pmpRight);
  75.     BOOL    IsDocumentInHTMLEditMode();
  76.     //
  77.     // Accessors.
  78.     //
  79.     IMarkupServices   * GetMarkupServices();
  80.     IHTMLViewServices * GetViewServices();
  81.     CCommand          * GetCommand(DWORD cmdID);
  82.     CBaseCharCommand  * GetBaseCharCommand(DWORD cmdID);
  83.     CCharCommand      * GetCharCommand(DWORD cmdID);
  84.     CFontCommand      * GetFontCommand(DWORD cmdID);
  85.     
  86.     //
  87.     // Data members.
  88.     //
  89. #if !defined(MW_MSCOMPATIBLE_STRUCT)
  90.     union
  91.     {
  92.         DWORD             _grfFlagsVar;
  93.         struct
  94.         {
  95. #else
  96.             DWORD         _Padding;
  97. #endif
  98.             DWORD         _fSpringLoaded:1;
  99.             DWORD         _fBold:1;
  100.             DWORD         _fItalic:1;
  101.             DWORD         _fUnderline:1;
  102.             DWORD         _fSuperscript:1;
  103.             DWORD         _fSubscript:1;
  104.             DWORD         _fOverrideComposeSettings:1;
  105.             DWORD         _fUnused:24;
  106. #if !defined(MW_MSCOMPATIBLE_STRUCT)
  107.         };
  108.     };
  109.     DWORD& _grfFlags() { return _grfFlagsVar; }
  110. #else
  111.     DWORD& _grfFlags() { return *(((DWORD*)&_Padding) +1); }
  112. #endif
  113.     CVariant              _varName;
  114.     CVariant              _varSize;
  115.     CVariant              _varColor;
  116.     CVariant              _varBackColor;
  117.     CVariant              _varSpanClass;
  118.     CMshtmlEd           * _pCommandTarget;   // Pointer to command target owning this springloader
  119.     IMarkupPointer      * _pmpPosition;      // Position springloader at which springloader was loaded.
  120. };
  121. enum SPRINGLOADER_MODE
  122. {
  123.     SL_DEFAULT                 = 0,  // Simply springload at position specified
  124.     SL_ADJUST_FOR_INSERT_LEFT  = 1,  // Adjust pointer for insert left before springloading
  125.     SL_ADJUST_FOR_INSERT_RIGHT = 2,  // Adjust pointer for insert right
  126.     SL_TRY_COMPOSE_SETTINGS    = 4,  // Springload compose settings, if possible at position
  127.     SL_RESET                   = 8,  // Reset the springloader prior to loading
  128. };
  129. #endif //_SLOAD_HXX_