summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHiroshi Sumita <hsumita@chromium.org>2011-10-24 16:05:14 +0900
committerHiroshi Sumita <hsumita@chromium.org>2011-10-24 16:05:14 +0900
commit323f0787ccbd92cb5d1bcde674e711c867f0a64c (patch)
treef5767557c13764ca80b10c8ca1d00765f800ee34
parent838c43138aa564c38d6dfb9602fccfdbf379e4ef (diff)
downloadpyzy-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.cc10
-rw-r--r--src/PyZyInputContext.h13
-rw-r--r--src/PyZyPhoneticContext.cc24
-rw-r--r--src/PyZyPhoneticContext.h4
-rw-r--r--src/PyZyPinyinContext.cc10
-rw-r--r--src/PyZyTest.cc54
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 ());
}
}