def __init__ (self, dbusconn, object_path):
interface.IEngine.__init__ (self, dbusconn, object_path)
self._dbusconn = dbusconn
-
+
# create anthy context
self._context = anthy.anthy_context ()
self._context._set_encoding (2)
self._lookup_table = ibus.LookupTable ()
self._prop_list = ibus.PropList ()
-
+
# use reset to init values
self._reset ()
-
+
# reset values of engine
def _reset (self):
self._input_chars = u""
self._context.set_string (self._input_chars.encode ("utf-8"))
conv_stat = anthy.anthy_conv_stat ()
self._context.get_stat (conv_stat)
-
+
for i in xrange (0, conv_stat.nr_segment):
buf = " " * 100
l = self._context.get_segment (i, 0, buf, 100)
text = unicode (buf[:l], "utf-8")
self._segments.append ((0, text))
-
+
self._cursor_pos = 0
self._fill_lookup_table ()
self._lookup_table_visible = False
# get segment stat
seg_stat = anthy.anthy_segment_stat ()
self._context.get_segment_stat (self._cursor_pos, seg_stat)
-
+
# fill lookup_table
self._lookup_table.clean ()
for i in xrange (0, seg_stat.nr_candidate):
# only process cursor down in convert mode
if not self._convert_begined:
return False
-
+
if not self._lookup_table.page_up ():
return False
self._segments[self._cursor_pos] = index, candidate
self._invalidate ()
return True
-
+
def _page_down (self):
# only process cursor down in convert mode
if not self._convert_begined:
return False
-
+
if not self._lookup_table.page_down ():
return False
# only process cursor down in convert mode
if not self._convert_begined:
return False
-
+
if not self._lookup_table.cursor_up ():
return False
# only process cursor down in convert mode
if not self._convert_begined:
return False
-
+
if not self._lookup_table.cursor_down ():
return False
def _update_input_chars (self):
begin, end = max (self._cursor_pos - 4, 0), self._cursor_pos
-
+
for i in range (begin, end):
text = self._input_chars[i:end]
romja = romaji_typing_rule.get (text, None)
attrs = ibus.AttrList ()
attrs.append (ibus.AttributeUnderline (pango.UNDERLINE_SINGLE, 0, len (self._input_chars.encode ("utf-8"))))
-
+
self.UpdatePreedit (dbus.String (self._input_chars),
attrs.to_dbus_value (),
dbus.Int32 (self._cursor_pos),
if i <= self._cursor_pos:
pos += len (text)
i += 1
-
+
attrs = ibus.AttrList ()
attrs.append (ibus.AttributeUnderline (pango.UNDERLINE_SINGLE, 0, len (self._convert_chars.encode ("utf-8"))))
-
+
self.UpdatePreedit (dbus.String (self._convert_chars),
attrs.to_dbus_value (),
dbus.Int32 (pos),
if not self._input_chars:
return False
self._reset ()
+ self._invalidate ()
return True
def _on_key_back_space (self):
if not self._input_chars:
return False
- self._input_chars = self._input_chars[:self._cursor_pos - 1] + self._input_chars [self._cursor_pos:]
+
+ if self._convert_begined:
+ self._convert_begined = False
+ self._cursor_pos = len (self._input_chars)
+ self._lookup_table.clean ()
+ self._lookup_table_visible = False
+ elif self._cursor_pos > 0:
+ self._input_chars = self._input_chars[:self._cursor_pos - 1] + self._input_chars [self._cursor_pos:]
+ self._cursor_pos -= 1
+
self._invalidate ()
return True
self._lookup_table_visible = True
self._cursor_up ()
return True
-
+
def _on_key_down (self):
if not self._input_chars:
return False
if self._lookup_table_visible == True:
self._page_up ()
return True
-
+
def _on_key_page_down (self):
if not self._input_chars:
return False
self._fill_lookup_table ()
self._invalidate ()
return True
-
+
def _on_key_right (self):
if not self._input_chars:
return False
self._lookup_table_visible = False
self._fill_lookup_table ()
self._invalidate ()
-
+
return True
def _on_key_number (self, index):
self._cursor_pos += 1
self._invalidate ()
return True
-
+
def _process_key_event (self, keyval, is_press, state):
# ignore key release events
if not is_press: