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.

803 lines
29 KiB

  1. /*++
  2. Copyright (c) 1985 - 1999, Microsoft Corporation
  3. Module Name:
  4. editses.h
  5. Abstract:
  6. This file defines the EditSession Class.
  7. Author:
  8. Revision History:
  9. Notes:
  10. --*/
  11. #ifndef _EDITSES_H_
  12. #define _EDITSES_H_
  13. #include "immif.h"
  14. #include "editcomp.h"
  15. typedef enum {
  16. ESCB_HANDLETHISKEY = 1,
  17. ESCB_COMPCOMPLETE,
  18. ESCB_COMPCANCEL,
  19. ESCB_UPDATECOMPOSITIONSTRING,
  20. ESCB_REPLACEWHOLETEXT,
  21. ESCB_RECONVERTSTRING,
  22. ESCB_CLEARDOCFEEDBUFFER,
  23. ESCB_GETTEXTANDATTRIBUTE,
  24. ESCB_QUERYRECONVERTSTRING,
  25. ESCB_CALCRANGEPOS,
  26. ESCB_GETSELECTION,
  27. ESCB_GET_READONLY_PROP_MARGIN,
  28. ESCB_GET_CURSOR_POSITION,
  29. ESCB_GET_ALL_TEXT_RANGE
  30. } ESCB;
  31. /////////////////////////////////////////////////////////////////////////////
  32. // ImmIfEditSessionCallBack
  33. class ImmIfEditSession;
  34. class ImmIfEditSessionCallBack
  35. {
  36. public:
  37. ImmIfEditSessionCallBack() { };
  38. virtual ~ImmIfEditSessionCallBack() { };
  39. virtual HRESULT CallBackRoutine(TfEditCookie ec,
  40. ImmIfEditSession* pes,
  41. Interface_Attach<ImmIfIME> ImmIfIme) = 0;
  42. protected:
  43. HRESULT GetAllTextRange(TfEditCookie ec,
  44. Interface_Attach<ITfContext>& ic,
  45. Interface<ITfRange>* range,
  46. LONG* lpTextLength,
  47. TF_HALTCOND* lpHaltCond=NULL);
  48. HRESULT SetTextInRange(TfEditCookie ec,
  49. ITfRange* range,
  50. LPWSTR psz,
  51. DWORD len,
  52. CAImeContext* pAImeContext);
  53. HRESULT ClearTextInRange(TfEditCookie ec,
  54. ITfRange* range,
  55. CAImeContext* pAImeContext);
  56. HRESULT GetReadingString(TfEditCookie ec,
  57. Interface_Attach<ITfContext>& ic,
  58. CWCompString& reading_string,
  59. CWCompClause& reading_clause);
  60. HRESULT GetReadingString(TfEditCookie ec,
  61. Interface_Attach<ITfContext>& ic,
  62. ITfRange* range,
  63. CWCompString& reading_string,
  64. CWCompClause& reading_clause);
  65. HRESULT CompClauseToResultClause(IMCLock& imc,
  66. CWCompClause& result_clause, UINT cch);
  67. HRESULT _GetTextAndAttribute(LIBTHREAD *pLibTLS,
  68. TfEditCookie ec,
  69. IMCLock& imc,
  70. Interface_Attach<ITfContext>& ic,
  71. Interface<ITfRange>& range,
  72. CWCompString& CompStr,
  73. CWCompAttribute& CompAttr,
  74. BOOL bInWriteSession)
  75. {
  76. CWCompClause CompClause;
  77. CWCompTfGuidAtom CompGuid;
  78. CWCompString CompReadStr;
  79. CWCompClause CompReadClause;
  80. CWCompString ResultStr;
  81. CWCompClause ResultClause;
  82. CWCompString ResultReadStr;
  83. CWCompClause ResultReadClause;
  84. return _GetTextAndAttribute(pLibTLS, ec, imc, ic, range,
  85. CompStr, CompAttr, CompClause,
  86. CompGuid,
  87. CompReadStr, CompReadClause,
  88. ResultStr, ResultClause,
  89. ResultReadStr, ResultReadClause,
  90. bInWriteSession);
  91. }
  92. HRESULT _GetTextAndAttribute(LIBTHREAD *pLibTLS,
  93. TfEditCookie ec,
  94. IMCLock& imc,
  95. Interface_Attach<ITfContext>& ic,
  96. Interface<ITfRange>& range,
  97. CWCompString& CompStr,
  98. CWCompAttribute& CompAttr,
  99. CWCompClause& CompClause,
  100. CWCompTfGuidAtom& CompGuid,
  101. CWCompString& CompReadStr,
  102. CWCompClause& CompReadCls,
  103. CWCompString& ResultStr,
  104. CWCompClause& ResultClause,
  105. CWCompString& ResultReadStr,
  106. CWCompClause& ResultReadClause,
  107. BOOL bInWriteSession);
  108. HRESULT _GetTextAndAttributeGapRange(LIBTHREAD *pLibTLS,
  109. TfEditCookie ec,
  110. IMCLock& imc,
  111. Interface<ITfRange>& gap_range,
  112. LONG result_comp,
  113. CWCompString& CompStr,
  114. CWCompAttribute& CompAttr,
  115. CWCompClause& CompClause,
  116. CWCompTfGuidAtom& CompGuid,
  117. CWCompString& ResultStr,
  118. CWCompClause& ResultClause);
  119. HRESULT _GetTextAndAttributePropertyRange(LIBTHREAD *pLibTLS,
  120. TfEditCookie ec,
  121. IMCLock& imc,
  122. ITfRange* pPropRange,
  123. BOOL fDispAttribute,
  124. LONG result_comp,
  125. BOOL bInWriteSession,
  126. TF_DISPLAYATTRIBUTE da,
  127. TfGuidAtom guidatom,
  128. CWCompString& CompStr,
  129. CWCompAttribute& CompAttr,
  130. CWCompClause& CompClause,
  131. CWCompTfGuidAtom& CompGuid,
  132. CWCompString& ResultStr,
  133. CWCompClause& ResultClause);
  134. HRESULT _GetNoDisplayAttributeRange(LIBTHREAD *pLibTLS,
  135. TfEditCookie ec,
  136. Interface_Attach<ITfContext>& ic,
  137. Interface<ITfRange>& range,
  138. Interface<ITfRange>& no_display_attribute_range);
  139. HRESULT _GetCursorPosition(TfEditCookie ec,
  140. IMCLock& imc,
  141. Interface_Attach<ITfContext>& ic,
  142. CWCompCursorPos& CompCursorPos,
  143. CWCompAttribute& CompAttr);
  144. private:
  145. typedef struct _EnumReadingPropertyArgs
  146. {
  147. Interface<ITfProperty> Property;
  148. TfEditCookie ec;
  149. CWCompString* reading_string;
  150. CWCompClause* reading_clause;
  151. LONG ulClausePos;
  152. } EnumReadingPropertyArgs;
  153. //
  154. // Enumrate callbacks
  155. //
  156. static ENUM_RET EnumReadingPropertyCallback(ITfRange* pRange, EnumReadingPropertyArgs *pargs);
  157. BYTE _ConvertAttributeToImm32(TF_DA_ATTR_INFO attribute)
  158. {
  159. if (attribute == TF_ATTR_OTHER || attribute > TF_ATTR_FIXEDCONVERTED) {
  160. return ATTR_TARGET_CONVERTED;
  161. }
  162. else {
  163. return (BYTE)attribute;
  164. }
  165. }
  166. };
  167. /////////////////////////////////////////////////////////////////////////////
  168. // ImmIfEditSession
  169. class ImmIfEditSession : public ITfEditSession
  170. {
  171. public:
  172. ImmIfEditSession(ESCB escb,
  173. TfClientId tid,
  174. Interface_Attach<ImmIfIME> ImmIfIme,
  175. IMCLock& imc);
  176. ImmIfEditSession(ESCB escb,
  177. TfClientId tid,
  178. Interface_Attach<ImmIfIME> ImmIfIme,
  179. IMCLock& imc,
  180. Interface_Attach<ITfContext> pic);
  181. private:
  182. void _Init(ESCB escb);
  183. public:
  184. virtual ~ImmIfEditSession();
  185. bool Valid();
  186. bool Invalid() { return ! Valid(); }
  187. //
  188. // IUnknown methods
  189. //
  190. STDMETHODIMP QueryInterface(REFIID riid, void **ppvObj);
  191. STDMETHODIMP_(ULONG) AddRef(void);
  192. STDMETHODIMP_(ULONG) Release(void);
  193. //
  194. // ITfEditCallback method
  195. //
  196. STDMETHODIMP DoEditSession(TfEditCookie ec);
  197. //
  198. // ImmIfEditSession methods
  199. //
  200. static HRESULT EditSessionCallBack(TfEditCookie ec, ImmIfEditSession* pes)
  201. {
  202. if (pes->m_ImmIfCallBack)
  203. return pes->m_ImmIfCallBack->CallBackRoutine(ec, pes, pes->m_ImmIfIme);
  204. else
  205. return E_FAIL;
  206. }
  207. //
  208. // EditSession methods.
  209. //
  210. HRESULT RequestEditSession(DWORD dwFlags,
  211. UINT uVKey=0)
  212. {
  213. HRESULT hr;
  214. m_state.uVKey = uVKey;
  215. m_ic->RequestEditSession(m_tid, this, dwFlags, &hr);
  216. return hr;
  217. }
  218. HRESULT RequestEditSession(DWORD dwFlags, CWCompString* pwCompStr,
  219. CWCompString* pwReadCompStr=NULL, Interface<ITfRange>* pRange=NULL)
  220. {
  221. m_state.lpwCompStr = pwCompStr;
  222. m_state.lpwReadCompStr = pwReadCompStr;
  223. m_pRange = pRange;
  224. return RequestEditSession(dwFlags);
  225. }
  226. HRESULT RequestEditSession(DWORD dwFlags, Interface<ITfRange>* pSelection)
  227. {
  228. m_pRange = pSelection;
  229. return RequestEditSession(dwFlags);
  230. }
  231. HRESULT RequestEditSession(DWORD dwFlags,
  232. CWReconvertString* pwReconvStr, Interface<ITfRange>* pSelection, BOOL fDocFeedOnly)
  233. {
  234. m_state.lpwReconvStr = pwReconvStr;
  235. m_pRange = pSelection;
  236. m_fDocFeedOnly = fDocFeedOnly;
  237. return RequestEditSession(dwFlags);
  238. }
  239. HRESULT RequestEditSession(DWORD dwFlags,
  240. Interface<ITfRangeACP>* pMouseRangeACP, LPMOUSE_RANGE_RECT pv)
  241. {
  242. m_pRangeACP = pMouseRangeACP;
  243. m_state.pv = (INT_PTR)pv;
  244. return RequestEditSession(dwFlags);
  245. }
  246. HRESULT RequestEditSession(DWORD dwFlags,
  247. CWCompString* pwCompStr, CWCompAttribute* pwCompAttr)
  248. {
  249. m_state.lpwCompStr = pwCompStr;
  250. m_state.lpwCompAttr = pwCompAttr;
  251. return RequestEditSession(dwFlags);
  252. }
  253. HRESULT RequestEditSession(DWORD dwFlags, BOOL fTerminateComp)
  254. {
  255. m_state.fTerminateComp = fTerminateComp;
  256. return RequestEditSession(dwFlags);
  257. }
  258. HRESULT RequestEditSession(DWORD dwFlags,
  259. Interface<ITfRangeACP>* pRange, LONG* cch)
  260. {
  261. m_pRangeACP = pRange;
  262. m_state.pv = (INT_PTR)cch;
  263. return RequestEditSession(dwFlags);
  264. }
  265. HRESULT RequestEditSession(DWORD dwFlags,
  266. CWCompCursorPos* pwCursorPosition)
  267. {
  268. m_state.lpwCursorPosition = pwCursorPosition;
  269. return RequestEditSession(dwFlags);
  270. }
  271. public:
  272. ImmIfEditSessionCallBack* m_ImmIfCallBack;
  273. Interface_Attach<ImmIfIME> m_ImmIfIme;
  274. Interface_Attach<ITfContext> m_ic;
  275. Interface<ITfRange>* m_pRange;
  276. Interface<ITfRangeACP>* m_pRangeACP;
  277. BOOL m_fDocFeedOnly;
  278. struct state {
  279. state(HIMC hd) : hIMC(hd) { };
  280. UINT uVKey;
  281. HIMC hIMC;
  282. CWCompString* lpwCompStr;
  283. CWCompString* lpwReadCompStr;
  284. CWCompAttribute* lpwCompAttr;
  285. CWReconvertString* lpwReconvStr;
  286. CWCompCursorPos* lpwCursorPosition;
  287. INT_PTR pv;
  288. BOOL fTerminateComp;
  289. } m_state;
  290. TfClientId m_tid;
  291. HRESULT (*m_pfnCallback)(TfEditCookie ec, ImmIfEditSession*);
  292. int m_cRef;
  293. };
  294. /////////////////////////////////////////////////////////////////////////////
  295. // ImmIfHandleThisKey
  296. class ImmIfHandleThisKey : public ImmIfEditSessionCallBack
  297. {
  298. public:
  299. HRESULT CallBackRoutine(TfEditCookie ec,
  300. ImmIfEditSession *pes,
  301. Interface_Attach<ImmIfIME> ImmIfIme)
  302. {
  303. return HandleThisKey(ec,
  304. pes->m_state.uVKey,
  305. pes->m_state.hIMC,
  306. pes->m_ic,
  307. ImmIfIme);
  308. }
  309. HRESULT HandleThisKey(TfEditCookie ec,
  310. UINT uVKey,
  311. HIMC hIMC,
  312. Interface_Attach<ITfContext> ic,
  313. Interface_Attach<ImmIfIME> ImmIfIme);
  314. private:
  315. HRESULT ShiftSelectionToLeft(TfEditCookie rc, ITfRange *range, bool fShiftEnd = true);
  316. HRESULT ShiftSelectionToRight(TfEditCookie rc, ITfRange *range, bool fShiftStart = true);
  317. };
  318. /////////////////////////////////////////////////////////////////////////////
  319. // ImmIfCompositionComplete
  320. class ImmIfCompositionComplete : public ImmIfEditSessionCallBack,
  321. private EditCompositionString
  322. {
  323. public:
  324. HRESULT CallBackRoutine(TfEditCookie ec,
  325. ImmIfEditSession *pes,
  326. Interface_Attach<ImmIfIME> ImmIfIme)
  327. {
  328. return CompComplete(ec,
  329. pes->m_state.hIMC,
  330. pes->m_state.fTerminateComp,
  331. pes->m_ic,
  332. ImmIfIme);
  333. }
  334. HRESULT CompComplete(TfEditCookie ec,
  335. HIMC hIMC,
  336. BOOL fTerminateComp,
  337. Interface_Attach<ITfContext> ic,
  338. Interface_Attach<ImmIfIME> ImmIfIme);
  339. private:
  340. HRESULT _SetCompositionString(IMCLock& imc,
  341. CWCompString* ResultStr,
  342. CWCompClause* ResultClause,
  343. CWCompString* ResultReadStr,
  344. CWCompClause* ResultReadClause)
  345. {
  346. return SetString(imc,
  347. NULL, NULL, NULL, // CompStr, CompAttr, CompCls
  348. NULL, NULL, // CompCursor, CompDeltaStart
  349. NULL, // CompGuid
  350. NULL, // lpbBufferOverflow
  351. NULL, NULL, NULL, // CompReadStr, CompReadAttr, CompReadCls
  352. ResultStr, ResultClause, // ResultStr, ResultCls
  353. ResultReadStr, ResultReadClause); // ResultReadStr, ResultReadCls
  354. }
  355. };
  356. /////////////////////////////////////////////////////////////////////////////
  357. // ImmIfCompositionCancel
  358. class ImmIfCompositionCancel : public ImmIfEditSessionCallBack,
  359. private EditCompositionString
  360. {
  361. public:
  362. HRESULT CallBackRoutine(TfEditCookie ec,
  363. ImmIfEditSession *pes,
  364. Interface_Attach<ImmIfIME> ImmIfIme)
  365. {
  366. return CompCancel(ec,
  367. pes->m_state.hIMC,
  368. pes->m_ic);
  369. }
  370. HRESULT CompCancel(TfEditCookie ec,
  371. HIMC hIMC,
  372. Interface_Attach<ITfContext> ic);
  373. };
  374. /////////////////////////////////////////////////////////////////////////////
  375. // ImmIfUpdateCompositionString
  376. class ImmIfUpdateCompositionString : public ImmIfEditSessionCallBack,
  377. private EditCompositionString
  378. {
  379. public:
  380. HRESULT CallBackRoutine(TfEditCookie ec,
  381. ImmIfEditSession *pes,
  382. Interface_Attach<ImmIfIME> ImmIfIme)
  383. {
  384. return UpdateCompositionString(ec,
  385. pes->m_state.hIMC,
  386. pes->m_ic,
  387. pes->m_state.uVKey,
  388. ImmIfIme);
  389. }
  390. HRESULT UpdateCompositionString(TfEditCookie ec,
  391. HIMC hIMC,
  392. Interface_Attach<ITfContext> ic,
  393. DWORD dwDeltaStart,
  394. Interface_Attach<ImmIfIME> ImmIfIme);
  395. private:
  396. HRESULT _IsInterimSelection(TfEditCookie ec,
  397. Interface_Attach<ITfContext>& ic,
  398. Interface<ITfRange>* pInterimRange,
  399. BOOL *pfInterim);
  400. HRESULT _MakeCompositionString(LIBTHREAD *pLibTLS,
  401. TfEditCookie ec,
  402. IMCLock& imc,
  403. Interface_Attach<ITfContext>& ic,
  404. Interface<ITfRange>& FullTextRange,
  405. DWORD dwDeltaStart,
  406. BOOL bInWriteSession);
  407. HRESULT _MakeInterimString(LIBTHREAD *pLibTLS,
  408. TfEditCookie ec,
  409. IMCLock& imc,
  410. Interface_Attach<ITfContext>& ic,
  411. Interface<ITfRange>& FullTextRange,
  412. Interface<ITfRange>& InterimRange,
  413. LONG lTextLength,
  414. UINT cp,
  415. BOOL bInWriteSession);
  416. HRESULT _GetDeltaStart(CWCompDeltaStart& CompDeltaStart,
  417. CWCompString& CompStr,
  418. DWORD dwDeltaStart);
  419. HRESULT _SetCompositionString(IMCLock& imc,
  420. CWCompString* CompStr,
  421. CWCompAttribute* CompAttr,
  422. CWCompClause* CompClause,
  423. CWCompCursorPos* CompCursorPos,
  424. CWCompDeltaStart* CompDeltaStart,
  425. CWCompTfGuidAtom* CompGuid,
  426. OUT BOOL* lpbBufferOverflow,
  427. CWCompString* CompReadStr)
  428. {
  429. return SetString(imc,
  430. CompStr, CompAttr, CompClause,
  431. CompCursorPos, CompDeltaStart,
  432. CompGuid,
  433. lpbBufferOverflow,
  434. CompReadStr);
  435. }
  436. HRESULT _SetCompositionString(IMCLock& imc,
  437. CWCompString* CompStr,
  438. CWCompAttribute* CompAttr,
  439. CWCompClause* CompClause,
  440. CWCompCursorPos* CompCursorPos,
  441. CWCompDeltaStart* CompDeltaStart,
  442. CWCompTfGuidAtom* CompGuid,
  443. OUT BOOL* lpbBufferOverflow,
  444. CWCompString* CompReadStr,
  445. CWCompString* ResultStr,
  446. CWCompClause* ResultClause,
  447. CWCompString* ResultReadStr,
  448. CWCompClause* ResultReadClause)
  449. {
  450. return SetString(imc,
  451. CompStr, CompAttr, CompClause,
  452. CompCursorPos, CompDeltaStart,
  453. CompGuid,
  454. lpbBufferOverflow,
  455. CompReadStr, NULL, NULL, // CompReadStr, CompReadAttr, CompReadCls
  456. ResultStr, ResultClause,
  457. ResultReadStr, ResultReadClause);
  458. }
  459. HRESULT _SetCompositionString(IMCLock& imc,
  460. CWInterimString* InterimStr)
  461. {
  462. return SetString(imc,
  463. NULL, NULL, NULL, // CompStr, CompAttr, CompCls
  464. NULL, NULL, // CompCursor, CompDeltaStart
  465. NULL, // CompGuid
  466. NULL, // lpbBufferOverflow
  467. NULL, NULL, NULL, // CompReadStr, CompReadAttr, CompReadCls
  468. NULL, NULL, // ResultStr, ResultCls
  469. NULL, NULL, // ResultReadStr, ResultReadCls
  470. InterimStr);
  471. }
  472. };
  473. /////////////////////////////////////////////////////////////////////////////
  474. // ImmIfReplaceWholeText
  475. class ImmIfReplaceWholeText : public ImmIfEditSessionCallBack
  476. {
  477. public:
  478. HRESULT CallBackRoutine(TfEditCookie ec,
  479. ImmIfEditSession *pes,
  480. Interface_Attach<ImmIfIME> ImmIfIme)
  481. {
  482. return ReplaceWholeText(ec,
  483. pes->m_state.hIMC,
  484. pes->m_ic,
  485. pes->m_state.lpwCompStr);
  486. }
  487. HRESULT ReplaceWholeText(TfEditCookie ec,
  488. HIMC hIMC,
  489. Interface_Attach<ITfContext> ic,
  490. CWCompString* lpwCompStr);
  491. };
  492. /////////////////////////////////////////////////////////////////////////////
  493. // ImmIfReconvertString
  494. class ImmIfReconvertString : public ImmIfEditSessionCallBack
  495. {
  496. public:
  497. HRESULT CallBackRoutine(TfEditCookie ec,
  498. ImmIfEditSession *pes,
  499. Interface_Attach<ImmIfIME> ImmIfIme)
  500. {
  501. return ReconvertString(ec,
  502. pes->m_state.hIMC,
  503. pes->m_ic,
  504. pes->m_pRange,
  505. pes->m_fDocFeedOnly,
  506. pes->m_state.lpwReconvStr,
  507. ImmIfIme);
  508. }
  509. HRESULT ReconvertString(TfEditCookie ec,
  510. HIMC hIMC,
  511. Interface_Attach<ITfContext> ic,
  512. Interface<ITfRange>* rangeSrc,
  513. BOOL fDocFeedOnly,
  514. CWReconvertString* lpwReconvStr,
  515. Interface_Attach<ImmIfIME> ImmIfIme);
  516. };
  517. /////////////////////////////////////////////////////////////////////////////
  518. // ImmIfClearDocFeedBuffer
  519. class ImmIfClearDocFeedBuffer : public ImmIfEditSessionCallBack
  520. {
  521. public:
  522. HRESULT CallBackRoutine(TfEditCookie ec,
  523. ImmIfEditSession *pes,
  524. Interface_Attach<ImmIfIME> ImmIfIme)
  525. {
  526. return ClearDocFeedBuffer(ec,
  527. pes->m_state.hIMC,
  528. pes->m_ic,
  529. ImmIfIme);
  530. }
  531. HRESULT ClearDocFeedBuffer(TfEditCookie ec,
  532. HIMC hIMC,
  533. Interface_Attach<ITfContext> ic,
  534. Interface_Attach<ImmIfIME> ImmIfIme);
  535. };
  536. /////////////////////////////////////////////////////////////////////////////
  537. // ImmIfGetTextAndAttribute
  538. class ImmIfGetTextAndAttribute : public ImmIfEditSessionCallBack
  539. {
  540. public:
  541. HRESULT CallBackRoutine(TfEditCookie ec,
  542. ImmIfEditSession *pes,
  543. Interface_Attach<ImmIfIME> ImmIfIme)
  544. {
  545. return GetTextAndAttribute(ec,
  546. pes->m_state.hIMC,
  547. pes->m_ic,
  548. pes->m_state.lpwCompStr,
  549. pes->m_state.lpwCompAttr,
  550. ImmIfIme);
  551. }
  552. HRESULT GetTextAndAttribute(TfEditCookie ec,
  553. HIMC hIMC,
  554. Interface_Attach<ITfContext> ic,
  555. CWCompString* lpwCompString,
  556. CWCompAttribute* lpwCompAttribute,
  557. Interface_Attach<ImmIfIME> ImmIfIme);
  558. };
  559. /////////////////////////////////////////////////////////////////////////////
  560. // ImmIfQueryReconvertString
  561. class ImmIfQueryReconvertString : public ImmIfEditSessionCallBack
  562. {
  563. public:
  564. HRESULT CallBackRoutine(TfEditCookie ec,
  565. ImmIfEditSession *pes,
  566. Interface_Attach<ImmIfIME> ImmIfIme)
  567. {
  568. return QueryReconvertString(ec,
  569. pes->m_state.hIMC,
  570. pes->m_ic,
  571. pes->m_pRange,
  572. pes->m_state.lpwReconvStr,
  573. ImmIfIme);
  574. }
  575. HRESULT QueryReconvertString(TfEditCookie ec,
  576. HIMC hIMC,
  577. Interface_Attach<ITfContext> ic,
  578. Interface<ITfRange>* rangeQuery,
  579. CWReconvertString* lpwReconvStr,
  580. Interface_Attach<ImmIfIME> ImmIfIme);
  581. };
  582. /////////////////////////////////////////////////////////////////////////////
  583. // ImmIfCalcRangePos
  584. class ImmIfCalcRangePos : public ImmIfEditSessionCallBack
  585. {
  586. public:
  587. HRESULT CallBackRoutine(TfEditCookie ec,
  588. ImmIfEditSession *pes,
  589. Interface_Attach<ImmIfIME> ImmIfIme)
  590. {
  591. return CalcRangePos(ec,
  592. pes->m_ic,
  593. pes->m_pRange,
  594. pes->m_state.lpwReconvStr,
  595. ImmIfIme);
  596. }
  597. HRESULT CalcRangePos(TfEditCookie ec,
  598. Interface_Attach<ITfContext> ic,
  599. Interface<ITfRange>* rangeSrc,
  600. CWReconvertString* lpwReconvStr,
  601. Interface_Attach<ImmIfIME> ImmIfIme);
  602. };
  603. /////////////////////////////////////////////////////////////////////////////
  604. // ImmIfGetSelection
  605. class ImmIfGetSelection : public ImmIfEditSessionCallBack
  606. {
  607. public:
  608. HRESULT CallBackRoutine(TfEditCookie ec,
  609. ImmIfEditSession *pes,
  610. Interface_Attach<ImmIfIME> ImmIfIme)
  611. {
  612. return GetSelection(ec,
  613. pes->m_ic,
  614. pes->m_pRange,
  615. ImmIfIme);
  616. }
  617. HRESULT GetSelection(TfEditCookie ec,
  618. Interface_Attach<ITfContext> ic,
  619. Interface<ITfRange>* rangeSrc,
  620. Interface_Attach<ImmIfIME> ImmIfIme);
  621. };
  622. /////////////////////////////////////////////////////////////////////////////
  623. // ImmIfGetReadOnlyPropMargin
  624. class ImmIfGetReadOnlyPropMargin : public ImmIfEditSessionCallBack
  625. {
  626. public:
  627. HRESULT CallBackRoutine(TfEditCookie ec,
  628. ImmIfEditSession *pes,
  629. Interface_Attach<ImmIfIME> ImmIfIme)
  630. {
  631. return GetReadOnlyPropMargin(ec,
  632. pes->m_ic,
  633. pes->m_pRangeACP,
  634. (INT_PTR*)pes->m_state.pv,
  635. ImmIfIme);
  636. }
  637. HRESULT GetReadOnlyPropMargin(TfEditCookie ec,
  638. Interface_Attach<ITfContext> ic,
  639. Interface<ITfRangeACP>* rangeSrc,
  640. INT_PTR* cch,
  641. Interface_Attach<ImmIfIME> ImmIfIme);
  642. };
  643. /////////////////////////////////////////////////////////////////////////////
  644. // ImmIfGetCursorPosition
  645. class ImmIfGetCursorPosition : public ImmIfEditSessionCallBack
  646. {
  647. public:
  648. HRESULT CallBackRoutine(TfEditCookie ec,
  649. ImmIfEditSession *pes,
  650. Interface_Attach<ImmIfIME> ImmIfIme)
  651. {
  652. return GetCursorPosition(ec,
  653. pes->m_state.hIMC,
  654. pes->m_ic,
  655. pes->m_state.lpwCursorPosition,
  656. ImmIfIme);
  657. }
  658. HRESULT GetCursorPosition(TfEditCookie ec,
  659. HIMC hIMC,
  660. Interface_Attach<ITfContext> ic,
  661. CWCompCursorPos* lpwCursorPosition,
  662. Interface_Attach<ImmIfIME> ImmIfIme);
  663. };
  664. /////////////////////////////////////////////////////////////////////////////
  665. // ImmIfGetCursorPosition
  666. class ImmIfGetAllTextRange : public ImmIfEditSessionCallBack
  667. {
  668. public:
  669. HRESULT CallBackRoutine(TfEditCookie ec,
  670. ImmIfEditSession *pes,
  671. Interface_Attach<ImmIfIME> ImmIfIme)
  672. {
  673. LONG cch;
  674. return GetAllTextRange(ec,
  675. pes->m_ic,
  676. pes->m_pRange,
  677. &cch);
  678. }
  679. };
  680. #endif // _EDITSES_H_