summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfujiwarat <takao.fujiwara1@gmail.com>2014-08-27 17:55:02 +0900
committerfujiwarat <takao.fujiwara1@gmail.com>2014-08-27 17:55:02 +0900
commitcca25661491098a986449c3a0fd0e3e065f16c20 (patch)
treefeefb5a9ffea671ace4c648c5fd227510d8dd51a
parentbc0538c828ec491af465edeae9d5340a7bd8aeae (diff)
downloadibus-anthy-cca25661491098a986449c3a0fd0e3e065f16c20.tar.gz
Added search entry in view dictionary dialog.
-rw-r--r--setup/python2/main.py83
-rw-r--r--setup/python3/main.py83
2 files changed, 166 insertions, 0 deletions
diff --git a/setup/python2/main.py b/setup/python2/main.py
index a6a31b3..cc3af4c 100644
--- a/setup/python2/main.py
+++ b/setup/python2/main.py
@@ -1127,6 +1127,72 @@ class AnthySetup(object):
if self.__keymap != None:
self.__save_keymap()
+ def __search_and_mark(self, buffer, text, start, end, onetime, forward):
+ if forward:
+ match = start.forward_search(text, 0, end)
+ else:
+ match = start.backward_search(text, 0, end)
+ if match == None:
+ return False
+ match_start, match_end = match
+ if onetime:
+ buffer.place_cursor(match_start)
+ buffer.select_range(match_start, match_end)
+ return True
+ buffer.apply_tag(buffer.tag_found, match_start, match_end)
+ self.__search_and_mark(buffer, text, match_end, end, onetime, forward)
+ return True
+
+ def __filter_search(self, entry, onetime, forward):
+ text = entry.get_text()
+ self.__filter_timeout_id = 0
+
+ text_view = entry.text_view
+ buffer = text_view.get_buffer()
+ start = buffer.get_start_iter()
+ if onetime:
+ bounds = buffer.get_selection_bounds()
+ if len(bounds) != 0:
+ start, end = bounds
+ if forward:
+ start = end
+ end = buffer.get_end_iter()
+ if not forward:
+ end = buffer.get_start_iter()
+ if not onetime:
+ buffer.remove_all_tags(start, end)
+ if text == '':
+ return
+ found = self.__search_and_mark(buffer, text, start, end, onetime, forward)
+ if not found and onetime and forward:
+ end = start
+ start = buffer.get_start_iter()
+ self.__search_and_mark(buffer, text, start, end, onetime, forward)
+
+ def __do_filter(self, entry):
+ self.__filter_search(entry, False, True)
+ return False
+
+ def __filter_changed(self, entry):
+ if self.__filter_timeout_id != 0:
+ return
+ self.__filter_timeout_id = GLib.timeout_add(150,
+ self.__do_filter,
+ entry)
+
+ def __filter_key_release_event(self, entry, event):
+ pressed, keyval = event.get_keyval()
+ if keyval == IBus.KEY_Return:
+ forward = True
+ if event.get_state() & Gdk.ModifierType.SHIFT_MASK:
+ forward = False
+ self.__filter_search(entry, True, forward)
+ text_view = entry.text_view
+ buffer = text_view.get_buffer()
+ text_view.scroll_to_mark(buffer.get_insert(),
+ 0.25, False, 0.0, 0.0)
+ return False
+
def on_selection_changed(self, widget, id):
set_sensitive = lambda a, b: self.__builder.get_object(a).set_sensitive(b)
flg = True if widget.get_selected()[1] else False
@@ -1545,6 +1611,7 @@ class AnthySetup(object):
dlg.add_buttons(*buttons)
buffer = Gtk.TextBuffer()
buffer.set_text (lines)
+ buffer.tag_found = buffer.create_tag('found', background = 'yellow')
text_view = Gtk.TextView.new_with_buffer(buffer)
text_view.set_editable(False)
sw = Gtk.ScrolledWindow()
@@ -1554,6 +1621,22 @@ class AnthySetup(object):
parent_vbox.add(sw)
sw.show_all()
dlg.set_default_size(500, 500)
+ self.__filter_timeout_id = 0
+
+ if hasattr(Gtk, 'SearchEntry'):
+ filter_entry = Gtk.SearchEntry(hexpand = True,
+ margin_left = 6,
+ margin_right = 6,
+ margin_top = 6,
+ margin_bottom = 6)
+ filter_entry.text_view = text_view
+ filter_entry.connect('search-changed', self.__filter_changed)
+ filter_entry.connect('key-release-event',
+ self.__filter_key_release_event)
+ parent_vbox.add(filter_entry)
+ filter_entry.show_all()
+
+ sw.show_all()
dlg.run()
dlg.destroy()
diff --git a/setup/python3/main.py b/setup/python3/main.py
index 107affa..d33b90b 100644
--- a/setup/python3/main.py
+++ b/setup/python3/main.py
@@ -1121,6 +1121,72 @@ class AnthySetup(object):
if self.__keymap != None:
self.__save_keymap()
+ def __search_and_mark(self, buffer, text, start, end, onetime, forward):
+ if forward:
+ match = start.forward_search(text, 0, end)
+ else:
+ match = start.backward_search(text, 0, end)
+ if match == None:
+ return False
+ match_start, match_end = match
+ if onetime:
+ buffer.place_cursor(match_start)
+ buffer.select_range(match_start, match_end)
+ return True
+ buffer.apply_tag(buffer.tag_found, match_start, match_end)
+ self.__search_and_mark(buffer, text, match_end, end, onetime, forward)
+ return True
+
+ def __filter_search(self, entry, onetime, forward):
+ text = entry.get_text()
+ self.__filter_timeout_id = 0
+
+ text_view = entry.text_view
+ buffer = text_view.get_buffer()
+ start = buffer.get_start_iter()
+ if onetime:
+ bounds = buffer.get_selection_bounds()
+ if len(bounds) != 0:
+ start, end = bounds
+ if forward:
+ start = end
+ end = buffer.get_end_iter()
+ if not forward:
+ end = buffer.get_start_iter()
+ if not onetime:
+ buffer.remove_all_tags(start, end)
+ if text == '':
+ return
+ found = self.__search_and_mark(buffer, text, start, end, onetime, forward)
+ if not found and onetime and forward:
+ end = start
+ start = buffer.get_start_iter()
+ self.__search_and_mark(buffer, text, start, end, onetime, forward)
+
+ def __do_filter(self, entry):
+ self.__filter_search(entry, False, True)
+ return False
+
+ def __filter_changed(self, entry):
+ if self.__filter_timeout_id != 0:
+ return
+ self.__filter_timeout_id = GLib.timeout_add(150,
+ self.__do_filter,
+ entry)
+
+ def __filter_key_release_event(self, entry, event):
+ pressed, keyval = event.get_keyval()
+ if keyval == IBus.KEY_Return:
+ forward = True
+ if event.get_state() & Gdk.ModifierType.SHIFT_MASK:
+ forward = False
+ self.__filter_search(entry, True, forward)
+ text_view = entry.text_view
+ buffer = text_view.get_buffer()
+ text_view.scroll_to_mark(buffer.get_insert(),
+ 0.25, False, 0.0, 0.0)
+ return False
+
def on_selection_changed(self, widget, id):
set_sensitive = lambda a, b: self.__builder.get_object(a).set_sensitive(b)
flg = True if widget.get_selected()[1] else False
@@ -1539,6 +1605,7 @@ class AnthySetup(object):
dlg.add_buttons(*buttons)
buffer = Gtk.TextBuffer()
buffer.set_text (lines)
+ buffer.tag_found = buffer.create_tag('found', background = 'yellow')
text_view = Gtk.TextView.new_with_buffer(buffer)
text_view.set_editable(False)
sw = Gtk.ScrolledWindow()
@@ -1548,6 +1615,22 @@ class AnthySetup(object):
parent_vbox.add(sw)
sw.show_all()
dlg.set_default_size(500, 500)
+ self.__filter_timeout_id = 0
+
+ if hasattr(Gtk, 'SearchEntry'):
+ filter_entry = Gtk.SearchEntry(hexpand = True,
+ margin_left = 6,
+ margin_right = 6,
+ margin_top = 6,
+ margin_bottom = 6)
+ filter_entry.text_view = text_view
+ filter_entry.connect('search-changed', self.__filter_changed)
+ filter_entry.connect('key-release-event',
+ self.__filter_key_release_event)
+ parent_vbox.add(filter_entry)
+ filter_entry.show_all()
+
+ sw.show_all()
dlg.run()
dlg.destroy()