// cutil.h // // file to put misc utility classes implementation // #ifndef CUTIL_H #define CUTIL_H #include "private.h" #include "regimx.h" class CDocStatus { public: CDocStatus(ITfContext *pic) { cpic = pic; } BOOL IsReadOnly() { TF_STATUS ts; HRESULT hr = cpic->GetStatus(&ts); if (S_OK == hr) { if (TF_SD_READONLY & ts.dwDynamicFlags) return TRUE; } return FALSE; } private: CComPtr cpic; }; class __declspec(novtable) CLangProfileUtil : public ITfFnLangProfileUtil { public: CLangProfileUtil() { m_fProfileInit = FALSE; m_langidDefault = 0xFFFF; m_uiUseSAPIForLangDetection = 0; } virtual ~CLangProfileUtil(); // ITfFnLangProfileUtil method STDMETHODIMP RegisterActiveProfiles(void); STDMETHODIMP IsProfileAvailableForLang(LANGID langid, BOOL *pfAvailable); // ITfFunction method STDMETHODIMP GetDisplayName(BSTR *pbstrName); // private APIs HRESULT _EnsureProfiles(BOOL fRegister, BOOL *pfEnabled = NULL); HRESULT _RegisterAProfile(HINSTANCE hInst, REFCLSID rclsid, const REGTIPLANGPROFILE *plp); HRESULT _GetProfileLangID(LANGID *plangid); static const REGTIPLANGPROFILE *_GetSPTIPProfileForLang(LANGID langid); virtual BOOL _DictationEnabled(LANGID *plangidRequested = NULL); BOOL _IsDictationActiveForLang(LANGID langidReq); BOOL _IsDictationEnabledForLang(LANGID langidReq, BOOL fUseDefault = FALSE); BOOL _IsDictationEnabledForLangSAPI(LANGID langidReq, BOOL fUseDefault); LONG _IsDictationEnabledForLangInReg(LANGID langidReq, BOOL fUseDefault, BOOL *pfEnabled); BOOL _IsAnyProfileEnabled(); BOOL _fUseSAPIForLanguageDetection(void); BOOL _fUserRemovedProfile(void); BOOL _fUserInitializedProfile(void); BOOL _SetUserInitializedProfile(void); void _ResetDefaultLang() {m_langidDefault = 0xFFFF; } LANGID _GetLangIdFromRecognizerToken(HKEY hkeyToken); CComPtr m_cpProfileMgr; typedef struct { DWORD langid; DWORD dwStat; DWORD lidOverRidden; } LANGPROFILESTAT ; BOOL m_fProfileInit; LANGID m_langidDefault; UINT m_uiUseSAPIForLangDetection; // // this is an array of installed recognizers in their langid // CStructArray m_langidRecognizers; }; typedef enum { DA_COLOR_AWARE, DA_COLOR_UNAWARE } ColorType; class __declspec(novtable) CColorUtil { public: CColorUtil() {m_cBitsPixelScreen = 0; m_fHighContrast =0;} COLORREF col( int r1, COLORREF col1, int r2, COLORREF col2 ) { int sum = r1 + r2; Assert( sum == 10 || sum == 100 || sum == 1000 ); int r = (r1 * GetRValue(col1) + r2 * GetRValue(col2) + sum/2) / sum; int g = (r1 * GetGValue(col1) + r2 * GetGValue(col2) + sum/2) / sum; int b = (r1 * GetBValue(col1) + r2 * GetBValue(col2) + sum/2) / sum; return RGB( r, g, b ); } COLORREF GetNewLookColor(ColorType ct = DA_COLOR_AWARE) { InitColorInfo(); COLORREF cr; if (m_cBitsPixelScreen < 8 || m_fHighContrast == TRUE) { cr = GetSysColor( COLOR_HIGHLIGHT ); } else if (ct == DA_COLOR_AWARE) { cr = col( 50, GetSysColor( COLOR_HIGHLIGHT ), 50, GetSysColor( COLOR_WINDOW ) ); } else { cr = col( 80, GetSysColor( COLOR_INFOBK ), 20, GetSysColor(COLOR_3DSHADOW) ); } return cr; } void InitColorInfo(void) { // do nothing if it's initialized already if (m_cBitsPixelScreen) return; HIGHCONTRAST hicntr = {0}; HDC hDC = CreateDC("DISPLAY", NULL, NULL, NULL); // device caps m_cBitsPixelScreen = GetDeviceCaps( hDC, BITSPIXEL ); // system paramater info hicntr.cbSize = sizeof(HIGHCONTRAST); SystemParametersInfo( SPI_GETHIGHCONTRAST, sizeof(HIGHCONTRAST), &hicntr, 0 ); m_fHighContrast = ((hicntr.dwFlags & HCF_HIGHCONTRASTON) != 0); DeleteDC( hDC ); } COLORREF GetTextColor() { return m_fHighContrast ? GetSysColor(COLOR_HIGHLIGHTTEXT) : GetSysColor(COLOR_WINDOWTEXT); } private: int m_cBitsPixelScreen; BOOL m_fHighContrast; }; extern const GUID c_guidProfileBogus; extern const GUID c_guidProfile0 ; extern const GUID c_guidProfile1 ; extern const GUID c_guidProfile2 ; extern const REGTIPLANGPROFILE c_rgProfiles[]; #endif // CUTIL_H