diff options
author | Hiroshi Sumita <hsumita@chromium.org> | 2011-10-24 16:05:14 +0900 |
---|---|---|
committer | Hiroshi Sumita <hsumita@chromium.org> | 2011-10-24 16:05:14 +0900 |
commit | 323f0787ccbd92cb5d1bcde674e711c867f0a64c (patch) | |
tree | f5767557c13764ca80b10c8ca1d00765f800ee34 | |
parent | 838c43138aa564c38d6dfb9602fccfdbf379e4ef (diff) | |
download | pyzy-323f0787ccbd92cb5d1bcde674e711c867f0a64c.tar.gz |
Modify Observer and implements some API.
BUG=None
TEST=Run a test.
Review URL: http://codereview.appspot.com/5309041
-rw-r--r-- | src/PyZyBopomofoContext.cc | 10 | ||||
-rw-r--r-- | src/PyZyInputContext.h | 13 | ||||
-rw-r--r-- | src/PyZyPhoneticContext.cc | 24 | ||||
-rw-r--r-- | src/PyZyPhoneticContext.h | 4 | ||||
-rw-r--r-- | src/PyZyPinyinContext.cc | 10 | ||||
-rw-r--r-- | src/PyZyTest.cc | 54 |
6 files changed, 93 insertions, 22 deletions
diff --git a/src/PyZyBopomofoContext.cc b/src/PyZyBopomofoContext.cc index 7bdcd00..5891abc 100644 --- a/src/PyZyBopomofoContext.cc +++ b/src/PyZyBopomofoContext.cc @@ -310,7 +310,7 @@ BopomofoContext::updateAuxiliaryText (void) if (G_UNLIKELY (m_text.empty () || m_phrase_editor.candidates ().size () == 0)) { m_auxiliary_text = ""; - m_observer->auxiliaryTextChanged (); + m_observer->auxiliaryTextChanged (this); return; } @@ -349,7 +349,7 @@ BopomofoContext::updateAuxiliaryText (void) } m_auxiliary_text = m_buffer; - m_observer->auxiliaryTextChanged (); + m_observer->auxiliaryTextChanged (this); } void @@ -384,7 +384,7 @@ BopomofoContext::commit () m_phrase_editor.commit (); reset (); update (); - m_observer->commitText (m_buffer); + m_observer->commitText (this, m_buffer); } void @@ -393,7 +393,7 @@ BopomofoContext::updatePreeditText (void) /* preedit text = selected phrases + highlight candidate + rest text */ if (G_UNLIKELY (m_phrase_editor.empty () && m_text.empty ())) { m_preedit_text.clear (); - m_observer->preeditTextChanged (); + m_observer->preeditTextChanged (this); return; } @@ -474,7 +474,7 @@ BopomofoContext::updatePreeditText (void) m_preedit_text.rest_text = m_buffer.substr (edit_end_byte); } - m_observer->preeditTextChanged (); + m_observer->preeditTextChanged (this); } static gint diff --git a/src/PyZyInputContext.h b/src/PyZyInputContext.h index 6950f05..292eac3 100644 --- a/src/PyZyInputContext.h +++ b/src/PyZyInputContext.h @@ -56,7 +56,9 @@ enum VKeyCode { VKEY_CANDIDATE_SELECT = (30 << 8), VKEY_CANDIDATE_FOCUS = (31 << 8), - VKEY_CANDIDATE_RESET = (32 << 8), + VKEY_CANDIDATE_FOCUS_PREVIOUS = (32 << 8), + VKEY_CANDIDATE_FOCUS_NEXT = (33 << 8), + VKEY_CANDIDATE_RESET = (34 << 8), VKEY_PAGE_PREVIOUS = (40 << 8), VKEY_PAGE_NEXT = (41 << 8), @@ -78,10 +80,11 @@ public: class Observer { public: virtual ~Observer () { } - virtual void commitText (const std::string &commit_text) = 0; - virtual void preeditTextChanged () = 0; - virtual void auxiliaryTextChanged () = 0; - virtual void lookupTableChanged () = 0; + virtual void commitText (const InputContext * context, + const std::string &commit_text) = 0; + virtual void preeditTextChanged (const InputContext * context) = 0; + virtual void auxiliaryTextChanged (const InputContext * context) = 0; + virtual void lookupTableChanged (const InputContext * context) = 0; }; enum InputType { diff --git a/src/PyZyPhoneticContext.cc b/src/PyZyPhoneticContext.cc index 38c9a46..71758d6 100644 --- a/src/PyZyPhoneticContext.cc +++ b/src/PyZyPhoneticContext.cc @@ -107,6 +107,10 @@ PhoneticContext::processKeyEvent (unsigned short key) return selectCandidateInPage (key_num); case VKEY_CANDIDATE_FOCUS: return focusCandidateInPage (key_num); + case VKEY_CANDIDATE_FOCUS_PREVIOUS: + return focusCandidatePrevious (); + case VKEY_CANDIDATE_FOCUS_NEXT: + return focusCandidateNext (); case VKEY_CANDIDATE_RESET: return resetCandidateInPage (key_num); @@ -196,7 +200,7 @@ PhoneticContext::updateLookupTable (void) m_candidates.push_back (candidate); } - m_observer->lookupTableChanged (); + m_observer->lookupTableChanged (this); } void @@ -221,6 +225,24 @@ PhoneticContext::focusCandidateInPage (guint i) } gboolean +PhoneticContext::focusCandidatePrevious () +{ + if (G_UNLIKELY (m_focused_candidate == 0)) { + return FALSE; + } + return focusCandidate (m_focused_candidate - 1); +} + +gboolean +PhoneticContext::focusCandidateNext () +{ + if (G_UNLIKELY (m_focused_candidate >= m_candidates.size ())) { + return FALSE; + } + return focusCandidate (m_focused_candidate + 1); +} + +gboolean PhoneticContext::focusCandidate (guint i) { if (G_UNLIKELY (i >= m_candidates.size ())) { diff --git a/src/PyZyPhoneticContext.h b/src/PyZyPhoneticContext.h index 7f572da..08c0291 100644 --- a/src/PyZyPhoneticContext.h +++ b/src/PyZyPhoneticContext.h @@ -77,6 +77,8 @@ protected: gboolean resetCandidateInPage (guint i); gboolean focusCandidate (guint i); gboolean focusCandidateInPage (guint i); + gboolean focusCandidatePrevious (); + gboolean focusCandidateNext (); virtual void selectPage (guint i); @@ -132,7 +134,7 @@ protected: std::string m_selected_special_phrase; String m_text; Preedit m_preedit_text; - PhoneticContext::Observer *m_observer; + PhoneticContext::Observer *m_observer; std::vector<Candidate> m_candidates; std::string m_auxiliary_text; }; diff --git a/src/PyZyPinyinContext.cc b/src/PyZyPinyinContext.cc index 4ae65f4..0003fa6 100644 --- a/src/PyZyPinyinContext.cc +++ b/src/PyZyPinyinContext.cc @@ -62,7 +62,7 @@ PinyinContext::commit () m_phrase_editor.commit (); reset (); update (); - m_observer->commitText (m_buffer); + m_observer->commitText (this, m_buffer); } void @@ -71,7 +71,7 @@ PinyinContext::updatePreeditText () /* preedit text = selected phrases + highlight candidate + rest text */ if (G_UNLIKELY (m_phrase_editor.empty () && m_text.empty ())) { m_preedit_text.clear (); - m_observer->preeditTextChanged (); + m_observer->preeditTextChanged (this); return; } @@ -148,7 +148,7 @@ PinyinContext::updatePreeditText () m_preedit_text.rest_text = m_buffer.substr (edit_end_byte); } - m_observer->preeditTextChanged (); + m_observer->preeditTextChanged (this); } void @@ -158,7 +158,7 @@ PinyinContext::updateAuxiliaryText (void) if (G_UNLIKELY (m_text.empty () || m_candidates.size () == 0)) { m_auxiliary_text = ""; - m_observer->auxiliaryTextChanged (); + m_observer->auxiliaryTextChanged (this); return; } @@ -201,7 +201,7 @@ PinyinContext::updateAuxiliaryText (void) } m_auxiliary_text = m_buffer; - m_observer->auxiliaryTextChanged (); + m_observer->auxiliaryTextChanged (this); } }; // namespace PyZy diff --git a/src/PyZyTest.cc b/src/PyZyTest.cc index d8b33d5..14557df 100644 --- a/src/PyZyTest.cc +++ b/src/PyZyTest.cc @@ -37,7 +37,6 @@ using namespace std; using namespace PyZy; - int main(int argc, char **argv) { testing::InitGoogleTest (&argc, argv); return RUN_ALL_TESTS (); @@ -65,13 +64,13 @@ protected: class CounterObserver : public PyZy::PhoneticContext::Observer { public: - void commitText (const std::string &commit_text) { + void commitText (const InputContext *context, const std::string &commit_text) { m_commited_text = commit_text; ++m_commit_text; } - void preeditTextChanged () { ++m_preedit_text; } - void auxiliaryTextChanged () { ++m_auxiliary_text; } - void lookupTableChanged () { ++m_lookup_table; } + void preeditTextChanged (const InputContext *context) { ++m_preedit_text; } + void auxiliaryTextChanged (const InputContext *context) { ++m_auxiliary_text; } + void lookupTableChanged (const InputContext *context) { ++m_lookup_table; } string commitedText () { return m_commited_text; } guint commitTextCount () { return m_commit_text; } @@ -1338,5 +1337,50 @@ TEST_F(PyZyTest, PagingTest) { EXPECT_EQ (1, observer.lookupTableCount ()); EXPECT_EQ (0, observer.commitTextCount ()); EXPECT_EQ (0, context.focusedCandidate ()); + + observer.clear (); + context.processKeyEvent (VKEY_CANDIDATE_FOCUS_PREVIOUS); + EXPECT_EQ (5, context.cursor ()); + EXPECT_EQ ("nihao", context.inputText ()); + EXPECT_EQ ("", context.selectedText ()); + EXPECT_EQ ("你好", context.conversionText ()); + EXPECT_EQ ("", context.restText ()); + EXPECT_EQ ("ni hao|", context.auxiliaryText ()); + EXPECT_LT (0, context.candidates ().size ()); + EXPECT_EQ ("", observer.commitedText ()); + EXPECT_EQ (0, observer.preeditTextCount ()); + EXPECT_EQ (0, observer.lookupTableCount ()); + EXPECT_EQ (0, observer.commitTextCount ()); + EXPECT_EQ (0, context.focusedCandidate ()); + + observer.clear (); + context.processKeyEvent (VKEY_CANDIDATE_FOCUS_NEXT); + EXPECT_EQ (5, context.cursor ()); + EXPECT_EQ ("nihao", context.inputText ()); + EXPECT_EQ ("", context.selectedText ()); + EXPECT_EQ ("你", context.conversionText ()); + EXPECT_EQ ("hao", context.restText ()); + EXPECT_EQ ("ni hao|", context.auxiliaryText ()); + EXPECT_LT (0, context.candidates ().size ()); + EXPECT_EQ ("", observer.commitedText ()); + EXPECT_EQ (1, observer.preeditTextCount ()); + EXPECT_EQ (1, observer.lookupTableCount ()); + EXPECT_EQ (0, observer.commitTextCount ()); + EXPECT_EQ (1, context.focusedCandidate ()); + + observer.clear (); + context.processKeyEvent (VKEY_CANDIDATE_FOCUS_PREVIOUS); + EXPECT_EQ (5, context.cursor ()); + EXPECT_EQ ("nihao", context.inputText ()); + EXPECT_EQ ("", context.selectedText ()); + EXPECT_EQ ("你好", context.conversionText ()); + EXPECT_EQ ("", context.restText ()); + EXPECT_EQ ("ni hao|", context.auxiliaryText ()); + EXPECT_LT (0, context.candidates ().size ()); + EXPECT_EQ ("", observer.commitedText ()); + EXPECT_EQ (1, observer.preeditTextCount ()); + EXPECT_EQ (1, observer.lookupTableCount ()); + EXPECT_EQ (0, observer.commitTextCount ()); + EXPECT_EQ (0, context.focusedCandidate ()); } } |