| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217 |
- /*
- ** Command & Conquer Renegade(tm)
- ** Copyright 2025 Electronic Arts Inc.
- **
- ** This program is free software: you can redistribute it and/or modify
- ** it under the terms of the GNU General Public License as published by
- ** the Free Software Foundation, either version 3 of the License, or
- ** (at your option) any later version.
- **
- ** This program is distributed in the hope that it will be useful,
- ** but WITHOUT ANY WARRANTY; without even the implied warranty of
- ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- ** GNU General Public License for more details.
- **
- ** You should have received a copy of the GNU General Public License
- ** along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
- /******************************************************************************
- *
- * FILE
- * $Archive: /Commando/Code/wwui/IMEManager.h $
- *
- * DESCRIPTION
- * Input Method Editor Manager for input of far east characters.
- *
- * PROGRAMMER
- * $Author: Denzil_l $
- *
- * VERSION INFO
- * $Revision: 3 $
- * $Modtime: 1/08/02 8:38p $
- *
- ******************************************************************************/
- #ifndef __IMEMANAGER_H__
- #define __IMEMANAGER_H__
- #include "RefCount.h"
- #include "IMECandidate.h"
- #include "Notify.h"
- #include "WideString.h"
- #include "win.h"
- #include <imm.h>
- namespace IME {
- #define IME_MAX_STRING_LEN 255
- #define IME_MAX_TYPING_LEN 80
- class IMEManager;
- typedef enum
- {
- IME_ACTIVATED = 1,
- IME_DEACTIVATED,
- IME_LANGUAGECHANGED,
- IME_GUIDELINE,
- IME_ENABLED,
- IME_DISABLED,
- } IMEAction;
- typedef TypedActionPtr<IMEAction, IMEManager> IMEEvent;
- typedef enum
- {
- COMPOSITION_INVALID = 0,
- COMPOSITION_TYPING,
- COMPOSITION_START,
- COMPOSITION_CHANGE,
- COMPOSITION_FULL,
- COMPOSITION_END,
- COMPOSITION_CANCEL,
- COMPOSITION_RESULT
- } CompositionAction;
- typedef TypedActionPtr<CompositionAction, IMEManager> CompositionEvent;
- class UnicodeType;
- typedef TypedEvent<UnicodeType, wchar_t> UnicodeChar;
- class IMEManager :
- public RefCountClass,
- public Notifier<IMEEvent>,
- public Notifier<UnicodeChar>,
- public Notifier<CompositionEvent>,
- public Notifier<CandidateEvent>
- {
- public:
- static IMEManager* Create(HWND hwnd);
- void Activate(void);
- void Deactivate(void);
- bool IsActive(void) const;
- void Disable(void);
- void Enable(void);
- bool IsDisabled(void) const;
- const wchar_t* GetDescription(void) const
- {return mIMEDescription;}
- WORD GetLanguageID(void) const
- {return mLangID;}
- UINT GetCodePage(void) const
- {return mCodePage;}
- const wchar_t* GetResultString(void) const
- {return mResultString;}
- const wchar_t* GetCompositionString(void) const
- {return mCompositionString;}
- long GetCompositionCursorPos(void) const
- {return mCompositionCursorPos;}
- const wchar_t* GetReadingString(void) const
- {return mReadingString;}
- #ifdef SHOW_IME_TYPING
- const wchar_t* GetTypingString(void) const
- {return mTypingString;}
- #endif
- void GetTargetClause(unsigned long& start, unsigned long& end);
- bool GetCompositionFont(LPLOGFONT lpFont);
- const IMECandidateCollection GetCandidateColl(void) const
- {return mCandidateColl;}
- unsigned long GetGuideline(wchar_t* outString, int length);
- bool ProcessMessage(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, LRESULT& result);
- protected:
- IMEManager();
- virtual ~IMEManager();
- bool FinalizeCreate(HWND hwnd);
- LRESULT IMENotify(WPARAM wParam, LPARAM lParam);
-
- HKL InputLanguageChangeRequest(HKL hkl);
- void InputLanguageChanged(HKL hkl);
- void ResetComposition(void);
- void StartComposition(void);
- void DoComposition(unsigned int dbcsChar, long changeFlag);
- void EndComposition(void);
- bool ReadCompositionString(HIMC imc, unsigned long flag, wchar_t* buffer, int length);
- long ReadReadingAttr(HIMC imc, unsigned char* attr, int length);
- long ReadReadingClause(HIMC imc, unsigned long* clause, int length);
- long ReadCompositionAttr(HIMC imc, unsigned char* attr, int length);
- long ReadCompositionClause(HIMC imc, unsigned long* clause, int length);
- long ReadCursorPos(HIMC imc);
- void OpenCandidate(unsigned long candList);
- void ChangeCandidate(unsigned long candList);
- void CloseCandidate(unsigned long candList);
- bool IMECharHandler(unsigned short dbcs);
- bool CharHandler(unsigned short ch);
- long ConvertAttrForUnicode(unsigned char* mbcs, unsigned char* attr);
- long ConvertClauseForUnicode(unsigned char* mbcs, long length, unsigned long* clause);
- DECLARE_NOTIFIER(IMEEvent)
- DECLARE_NOTIFIER(UnicodeChar)
- DECLARE_NOTIFIER(CompositionEvent)
- DECLARE_NOTIFIER(CandidateEvent)
- // Prevent copy and assignment
- IMEManager(const IMEManager&);
- const IMEManager& operator=(const IMEManager&);
- private:
- HWND mHWND;
- HIMC mDefaultHIMC;
- HIMC mHIMC;
- HIMC mDisabledHIMC;
- unsigned long mDisableCount;
- WORD mLangID;
- UINT mCodePage;
- WideStringClass mIMEDescription;
- DWORD mIMEProperties;
- bool mHilite;
- bool mStartCandListFrom1;
- bool mOSCanUnicode;
- bool mUseUnicode;
- bool mInComposition;
- #ifdef SHOW_IME_TYPING
- wchar_t mTypingString[IME_MAX_TYPING_LEN];
- long mTypingCursorPos;
- #endif
-
- wchar_t mCompositionString[IME_MAX_STRING_LEN];
- unsigned char mCompositionAttr[IME_MAX_STRING_LEN];
- unsigned long mCompositionClause[IME_MAX_STRING_LEN / 2];
- long mCompositionCursorPos;
- wchar_t mReadingString[IME_MAX_STRING_LEN * 2];
- wchar_t mResultString[IME_MAX_STRING_LEN];
- IMECandidateCollection mCandidateColl;
- };
- } // namespace IME
- #endif __IMEMANAGER_H__
|