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.
178 lines
4.2 KiB
178 lines
4.2 KiB
//
|
|
// fnrecon.h
|
|
//
|
|
|
|
#ifndef FNRECON_H
|
|
#define FNRECON_H
|
|
|
|
#include "private.h"
|
|
#include "immlist.h"
|
|
#include "ctffunc.h"
|
|
|
|
class CFunctionProvider;
|
|
class CEditSession;
|
|
class CRange;
|
|
class CInputContext;
|
|
|
|
HRESULT GrowEmptyRangeByOneCallback(TfEditCookie ec, ITfRange *range);
|
|
|
|
class CFunction;
|
|
|
|
typedef struct tag_BUILDOWNERRANGELISTQUEUEINFO
|
|
{
|
|
CFunction *pFunc;
|
|
ITfRange *pRange;
|
|
} BUILDOWNERRANGELISTQUEUEINFO;
|
|
|
|
//
|
|
// for PSEUDO_ESCB_SHIFTENDTORANGE
|
|
//
|
|
typedef struct tag_SHIFTENDTORANGEQUEUEITEM
|
|
{
|
|
ITfRange *pRange;
|
|
ITfRange *pRangeTo;
|
|
TfAnchor aPos;
|
|
} SHIFTENDTORANGEQUEUEITEM;
|
|
|
|
//
|
|
// for PSEUDO_ESCB_GETSELECTION
|
|
//
|
|
typedef struct tag_GETSELECTIONQUEUEITEM
|
|
{
|
|
ITfRange **ppRange;
|
|
} GETSELECTIONQUEUEITEM;
|
|
|
|
//
|
|
// for PSEUDO_ESCB_GETWHOLEDOCRANGE
|
|
//
|
|
typedef struct tag_GETWHOLEDOCRANGE
|
|
{
|
|
ITfRange **ppRange;
|
|
} GETWHOLEDOCRANGE;
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// CRangeOwnerList
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
class CRangeOwnerList : public CPtrCicListItem<CRangeOwnerList>
|
|
{
|
|
public:
|
|
CRangeOwnerList(TfGuidAtom guidOwner, ITfRange *pRange, BOOL bDupOwner)
|
|
{
|
|
_pRange = pRange;
|
|
_pRange->AddRef();
|
|
_guidOwner = guidOwner;
|
|
_bDupOwner = bDupOwner;
|
|
}
|
|
|
|
~CRangeOwnerList()
|
|
{
|
|
_pRange->Release();
|
|
SafeRelease(_pConvRange);
|
|
}
|
|
|
|
ITfRange *_pRange;
|
|
TfGuidAtom _guidOwner;
|
|
BOOL _bDupOwner;
|
|
ITfRange *_pConvRange;
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// CFunction
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
class __declspec(novtable) CFunction : public CComObjectRootImmx
|
|
{
|
|
public:
|
|
CFunction(CFunctionProvider *pFuncPrv);
|
|
~CFunction();
|
|
|
|
HRESULT BuildOwnerRangeListCallback(TfEditCookie ec, CInputContext *pic, ITfRange *pRange);
|
|
protected:
|
|
void CleanUpOwnerRange();
|
|
BOOL BuildOwnerRangeList(CInputContext *pic, ITfRange *pRange);
|
|
|
|
|
|
CFunctionProvider *_pFuncPrv;
|
|
CPtrCicList<CRangeOwnerList> _listRangeOwner;
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// CFnReconversion
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
class CFnReconversion : public ITfFnReconversion,
|
|
public CFunction
|
|
{
|
|
public:
|
|
CFnReconversion(CFunctionProvider *pFuncPrv);
|
|
~CFnReconversion();
|
|
|
|
BEGIN_COM_MAP_IMMX(CFnReconversion)
|
|
COM_INTERFACE_ENTRY(ITfFnReconversion)
|
|
COM_INTERFACE_ENTRY(ITfFunction)
|
|
END_COM_MAP_IMMX()
|
|
|
|
IMMX_OBJECT_IUNKNOWN_FOR_ATL()
|
|
|
|
//
|
|
// ITfFunction
|
|
//
|
|
STDMETHODIMP GetDisplayName(BSTR *pbstrCand);
|
|
|
|
//
|
|
// ITfFnReconversion
|
|
//
|
|
STDMETHODIMP GetReconversion(ITfRange *pRange, ITfCandidateList **ppCandList);
|
|
STDMETHODIMP QueryRange(ITfRange *pRange, ITfRange **ppNewRange, BOOL *pfConvertable);
|
|
STDMETHODIMP Reconvert(ITfRange *pRange);
|
|
|
|
|
|
private:
|
|
typedef enum { RF_GETRECONVERSION,
|
|
RF_RECONVERT,
|
|
RF_QUERYRECONVERT } RECONVFUNC;
|
|
HRESULT Internal_GetReconversion(ITfRange *pRange, ITfCandidateList **ppCandList, ITfRange **ppNewRange, RECONVFUNC rf, BOOL *pfConvertable);
|
|
HRESULT QueryAndGetFunction(CInputContext *pic, ITfRange *pRange, ITfFnReconversion **ppFunc, ITfRange **ppRange);
|
|
|
|
ITfFnReconversion *_pReconvCache;
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// CFnAbort
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
class CFnAbort : public ITfFnAbort,
|
|
public CFunction
|
|
{
|
|
public:
|
|
CFnAbort(CFunctionProvider *pFuncPrv);
|
|
~CFnAbort();
|
|
|
|
BEGIN_COM_MAP_IMMX(CFnAbort)
|
|
COM_INTERFACE_ENTRY(ITfFnAbort)
|
|
COM_INTERFACE_ENTRY(ITfFunction)
|
|
END_COM_MAP_IMMX()
|
|
|
|
IMMX_OBJECT_IUNKNOWN_FOR_ATL()
|
|
|
|
//
|
|
// ITfFunction
|
|
//
|
|
STDMETHODIMP GetDisplayName(BSTR *pbstrCand);
|
|
|
|
//
|
|
// ITfFnAbort
|
|
//
|
|
STDMETHODIMP Abort(ITfContext *pic);
|
|
};
|
|
|
|
#endif // FNRECON_H
|