diff options
author | Peng Wu <alexepico@gmail.com> | 2018-06-19 16:13:47 +0800 |
---|---|---|
committer | Peng Wu <alexepico@gmail.com> | 2018-06-19 16:13:47 +0800 |
commit | d0d1622c759e73e0a8bb4763ca8f8fb6a98224a2 (patch) | |
tree | bcc0c777f1dc10c89d52f1e77686905ae7e24a95 | |
parent | be71008ef85648271c24a93f43f27423c17b5c21 (diff) | |
download | ibus-libpinyin-d0d1622c759e73e0a8bb4763ca8f8fb6a98224a2.tar.gz ibus-libpinyin-d0d1622c759e73e0a8bb4763ca8f8fb6a98224a2.tar.xz ibus-libpinyin-d0d1622c759e73e0a8bb4763ca8f8fb6a98224a2.zip |
write class SuggestionEditor
-rw-r--r-- | src/PYPSuggestionEditor.cc | 73 | ||||
-rw-r--r-- | src/PYPSuggestionEditor.h | 24 |
2 files changed, 82 insertions, 15 deletions
diff --git a/src/PYPSuggestionEditor.cc b/src/PYPSuggestionEditor.cc index 3a190a5..ba98fb6 100644 --- a/src/PYPSuggestionEditor.cc +++ b/src/PYPSuggestionEditor.cc @@ -23,12 +23,19 @@ #include <assert.h> #include "PYConfig.h" #include "PYLibPinyin.h" +#include "PYPinyinProperties.h" using namespace PY; SuggestionEditor::SuggestionEditor (PinyinProperties &props, Config & config) - : Editor (props, config) + : Editor (props, config), + m_suggestion_candidates (this), +#ifdef IBUS_BUILD_LUA_EXTENSION + m_lua_trigger_candidates (this), + m_lua_converter_candidates (this), +#endif + m_traditional_candidates (this) { /* use m_text to store the prefix string. */ m_text = ""; @@ -267,35 +274,71 @@ SuggestionEditor::updateLookupTable (void) } gboolean -SuggestionEditor::updateCandidates () +SuggestionEditor::updateCandidates (void) { - assert (FALSE); + m_candidates.clear (); + + m_suggestion_candidates.processCandidates (m_candidates); + + if (!m_props.modeSimp ()) + m_traditional_candidates.processCandidates (m_candidates); + +#ifdef IBUS_BUILD_LUA_EXTENSION + m_lua_trigger_candidates.processCandidates (m_candidates); + + std::string converter = m_config.luaConverter (); + + if (!converter.empty ()) { + m_lua_converter_candidates.setConverter (converter.c_str ()); + m_lua_converter_candidates.processCandidates (m_candidates); + } +#endif + + return TRUE; } gboolean SuggestionEditor::fillLookupTable () { - guint len = 0; - pinyin_get_n_candidate (m_instance, &len); + String word; + for (guint i = 0; i < m_candidates.size (); i++) { + EnhancedCandidate & candidate = m_candidates[i]; + word = candidate.m_display_string; - for (guint i = 0; i < len; i++) { - lookup_candidate_t * candidate = NULL; - pinyin_get_candidate (m_instance, i, &candidate); + Text text (word); - lookup_candidate_type_t type; - pinyin_get_candidate_type (m_instance, candidate, &type); - assert (PREDICTED_CANDIDATE == type); + /* no user candidate in suggestion editor. */ + assert (CANDIDATE_USER != candidate.m_candidate_type); - const gchar * phrase_string = NULL; - pinyin_get_candidate_string (m_instance, candidate, &phrase_string); - - Text text (phrase_string); m_lookup_table.appendCandidate (text); } return TRUE; } +SelectCandidateAction +SuggestionEditor::selectCandidateInternal (EnhancedCandidate & candidate) +{ + switch (candidate.m_candidate_type) { + case CANDIDATE_SUGGESTION: + return m_suggestion_candidates.selectCandidate (candidate); + + case CANDIDATE_TRADITIONAL_CHINESE: + return m_traditional_candidates.selectCandidate (candidate); + +#ifdef IBUS_BUILD_LUA_EXTENSION + case CANDIDATE_LUA_TRIGGER: + return m_lua_trigger_candidates.selectCandidate (candidate); + + case CANDIDATE_LUA_CONVERTER: + return m_lua_converter_candidates.selectCandidate (candidate); +#endif + + default: + assert (FALSE); + } +} + void SuggestionEditor::updatePreeditText (void) { diff --git a/src/PYPSuggestionEditor.h b/src/PYPSuggestionEditor.h index 637dfe0..8276a6a 100644 --- a/src/PYPSuggestionEditor.h +++ b/src/PYPSuggestionEditor.h @@ -25,10 +25,19 @@ #include <pinyin.h> #include "PYEditor.h" #include "PYLookupTable.h" +#include "PYPSuggestionCandidates.h" +#include "PYPTradCandidates.h" + +#ifdef IBUS_BUILD_LUA_EXTENSION +#include "PYPLuaTriggerCandidates.h" +#include "PYPLuaConverterCandidates.h" +#endif namespace PY { class SuggestionEditor : public Editor { + friend class SuggestionCandidates; + public: SuggestionEditor (PinyinProperties &props, Config & config); virtual ~SuggestionEditor (); @@ -42,6 +51,9 @@ public: virtual void reset (void); virtual void candidateClicked (guint index, guint button, guint state); +protected: + virtual SelectCandidateAction selectCandidateInternal (EnhancedCandidate & candidate); + private: void updateLookupTable (void); gboolean updateCandidates (); @@ -65,6 +77,18 @@ private: /* use LibPinyinBackEnd here. */ pinyin_instance_t *m_instance; + + /* use EnhancedCandidates here. */ + std::vector<EnhancedCandidate> m_candidates; + + /* several EnhancedCandidates providers. */ + SuggestionCandidates m_suggestion_candidates; + TraditionalCandidates m_traditional_candidates; + +#ifdef IBUS_BUILD_LUA_EXTENSION + LuaTriggerCandidates m_lua_trigger_candidates; + LuaConverterCandidates m_lua_converter_candidates; +#endif }; }; |