Leaked source code of windows server 2003
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.

119 lines
4.8 KiB

  1. //
  2. // tsi.h
  3. //
  4. // CTextStoreImpl
  5. //
  6. #ifndef TSI_H
  7. #define TSI_H
  8. #include "private.h"
  9. #include "strary.h"
  10. extern const IID IID_PRIV_CTSI;
  11. // the cookie for each CTextStoreImpl's single view
  12. #define TSI_ACTIVE_VIEW_COOKIE 0
  13. class CInputContext;
  14. class CTextStoreImpl : public ITextStoreACP,
  15. public ITfMouseTrackerACP,
  16. public IServiceProvider,
  17. public CComObjectRootImmx
  18. {
  19. public:
  20. CTextStoreImpl(CInputContext *pic);
  21. ~CTextStoreImpl();
  22. BEGIN_COM_MAP_IMMX(CTextStoreImpl)
  23. COM_INTERFACE_ENTRY(ITextStoreACP)
  24. COM_INTERFACE_ENTRY(ITfMouseTrackerACP)
  25. COM_INTERFACE_ENTRY(IServiceProvider)
  26. END_COM_MAP_IMMX()
  27. IMMX_OBJECT_IUNKNOWN_FOR_ATL()
  28. //
  29. // ITextStoreACP
  30. //
  31. STDMETHODIMP AdviseSink(REFIID riid, IUnknown *punk, DWORD dwMask);
  32. STDMETHODIMP UnadviseSink(IUnknown *punk);
  33. STDMETHODIMP RequestLock(DWORD dwLockFlags, HRESULT *phrSession);
  34. STDMETHODIMP GetStatus(TS_STATUS *pdcs);
  35. STDMETHODIMP QueryInsert(LONG acpTestStart, LONG acpTestEnd, ULONG cch, LONG *pacpResultStart, LONG *pacpResultEnd);
  36. STDMETHODIMP GetSelection(ULONG ulIndex, ULONG ulCount, TS_SELECTION_ACP *pSelection, ULONG *pcFetched);
  37. STDMETHODIMP SetSelection(ULONG ulCount, const TS_SELECTION_ACP *pSelection);
  38. STDMETHODIMP GetText(LONG acpStart, LONG acpEnd, WCHAR *pchPlain, ULONG cchPlainReq, ULONG *pcchPlainOut, TS_RUNINFO *prgRunInfo, ULONG ulRunInfoReq, ULONG *pulRunInfoOut, LONG *pacpNext);
  39. STDMETHODIMP SetText(DWORD dwFlags, LONG acpStart, LONG acpEnd, const WCHAR *pchText, ULONG cch, TS_TEXTCHANGE *pChange);
  40. STDMETHODIMP GetFormattedText(LONG acpStart, LONG acpEnd, IDataObject **ppDataObject);
  41. STDMETHODIMP GetEmbedded(LONG acpPos, REFGUID rguidService, REFIID riid, IUnknown **ppunk);
  42. STDMETHODIMP QueryInsertEmbedded(const GUID *pguidService, const FORMATETC *pFormatEtc, BOOL *pfInsertable);
  43. STDMETHODIMP InsertEmbedded(DWORD dwFlags, LONG acpStart, LONG acpEnd, IDataObject *pDataObject, TS_TEXTCHANGE *pChange);
  44. STDMETHODIMP RequestSupportedAttrs(DWORD dwFlags, ULONG cFilterAttrs, const TS_ATTRID *paFilterAttrs);
  45. STDMETHODIMP RequestAttrsAtPosition(LONG acpPos, ULONG cFilterAttrs, const TS_ATTRID *paFilterAttrs, DWORD dwFlags);
  46. STDMETHODIMP RequestAttrsTransitioningAtPosition(LONG acpPos, ULONG cFilterAttrs, const TS_ATTRID *paFilterAttrs, DWORD dwFlags);
  47. STDMETHODIMP FindNextAttrTransition(LONG acpStart, LONG acpHalt, ULONG cFilterAttrs, const TS_ATTRID *paFilterAttrs, DWORD dwFlags, LONG *pacpNext, BOOL *pfFound, LONG *plFoundOffset);
  48. STDMETHODIMP RetrieveRequestedAttrs(ULONG ulCount, TS_ATTRVAL *paAttrVals, ULONG *pcFetched);
  49. STDMETHODIMP GetEndACP(LONG *pacp);
  50. STDMETHODIMP GetActiveView(TsViewCookie *pvcView);
  51. STDMETHODIMP GetACPFromPoint(TsViewCookie vcView, const POINT *pt, DWORD dwFlags, LONG *pacp);
  52. STDMETHODIMP GetTextExt(TsViewCookie vcView, LONG acpStart, LONG acpEnd, RECT *prc, BOOL *pfClipped);
  53. STDMETHODIMP GetScreenExt(TsViewCookie vcView, RECT *prc);
  54. STDMETHODIMP GetWnd(TsViewCookie vcView, HWND *phwnd);
  55. STDMETHODIMP InsertTextAtSelection(DWORD dwFlags, const WCHAR *pchText, ULONG cch, LONG *pacpStart, LONG *pacpEnd, TS_TEXTCHANGE *pChange);
  56. STDMETHODIMP InsertEmbeddedAtSelection(DWORD dwFlags, IDataObject *pDataObject, LONG *pacpStart, LONG *pacpEnd, TS_TEXTCHANGE *pChange);
  57. // ITfMouseTrackerACP
  58. STDMETHODIMP AdviseMouseSink(ITfRangeACP *range, ITfMouseSink *pSink, DWORD *pdwCookie);
  59. STDMETHODIMP UnadviseMouseSink(DWORD dwCookie);
  60. // IServiceProvider
  61. STDMETHODIMP QueryService(REFGUID guidService, REFIID riid, void **ppv);
  62. void _AdviseOwner(ITfContextOwner *owner) { Assert(_owner == NULL); _owner = owner; _owner->AddRef(); }
  63. void _UnadviseOwner() { SafeReleaseClear(_owner); }
  64. BOOL _HasOwner() { return (_owner != NULL); }
  65. private:
  66. HRESULT _LoadAttr(DWORD dwFlags, ULONG cFilterAttrs, const TS_ATTRID *paFilterAttrs);
  67. WCHAR *_pch; // text buffer
  68. int _cch; // size of buffer
  69. TS_SELECTION_ACP _Sel;
  70. ITextStoreACPSink *_ptss;
  71. ITfContextOwner *_owner; // this can be NULL...be careful
  72. BOOL _fAttrToReturn : 1;
  73. TfGuidAtom _gaModeBias;
  74. typedef struct {
  75. TS_ATTRID attrid;
  76. VARIANT var;
  77. } TSI_ATTRSTORE;
  78. CStructArray<TSI_ATTRSTORE> _rgAttrStore;
  79. void ClearAttrStore()
  80. {
  81. int i;
  82. for (i = 0; i < _rgAttrStore.Count(); i++)
  83. {
  84. TSI_ATTRSTORE *pas = _rgAttrStore.GetPtr(i);
  85. VariantClear(&pas->var);
  86. }
  87. _rgAttrStore.Clear();
  88. }
  89. BOOL _fPendingWriteReq : 1;
  90. DWORD _dwlt;
  91. CInputContext *_pic;
  92. DBG_ID_DECLARE;
  93. };
  94. #endif // TSI_H