1
# -*- coding: utf-8 -*-
2
__license__ = "MIT License <http://www.opensource.org/licenses/mit-license.php>"
3
__copyright__ = "2005, Tiago Cogumbreiro"
4
__author__ = "Tiago Cogumbreiro <cogumbreiro@users.sf.net>"
9
from common import ACTION_FIND_TOGGLE, ACTION_REPLACE_FORWARD, ACTION_REPLACE_ALL
10
from common import escape_text, unescape_text
11
from common import get_action, ACTION_REPLACE_TOGGLE
15
class ReplaceBar(Bar):
17
This component implements an event that validates when the selection is
18
synchronized with the selected text.
20
def __init__(self, parent, search_bar, action_group):
21
self._search_bar = weakref.ref(search_bar)
22
super(ReplaceBar, self).__init__(parent, action_group)
24
def _create_toggle_action(self, action_group):
25
action = lambda name: get_action(action_group.get_action, name)
26
self.toggle_find = action(ACTION_FIND_TOGGLE)
27
self.replace_forward = action(ACTION_REPLACE_FORWARD)
28
self.replace_all = action(ACTION_REPLACE_ALL)
29
return action(ACTION_REPLACE_TOGGLE)
36
def get_search_bar(self):
37
return self._search_bar()
39
search_bar = property(get_search_bar)
45
def create_replace_entry(self):
47
self.replace_completion = gtk.EntryCompletion()
48
entry.set_completion(self.replace_completion)
49
self.replace_model = gtk.ListStore(str)
50
self.replace_completion.set_model(self.replace_model)
51
self.replace_completion.set_text_column(0)
53
entry.connect("changed", self.on_entry_changed)
56
def get_replace_entry(self):
57
if self._replace_entry is None:
58
self._replace_entry = self.create_replace_entry()
59
return self._replace_entry
61
replace_entry = property(get_replace_entry)
64
def get_replace_text(self):
65
return self.replace_entry.get_text()
67
replace_text = property(get_replace_text)
71
def create_widget(self):
72
hig_add = lambda container, widget: \
73
container.pack_start(widget, expand = False, fill = False)
75
hbox = gtk.HBox(spacing=6)
76
hbox.connect("show", self.on_show)
77
hbox.connect("hide", self.on_hide)
79
lbl = gtk.Label("Replace")
83
self.replace_entry.show()
84
hig_add(hbox, self.replace_entry)
86
btn = gtk.Button(stock=gtk.STOCK_FIND_AND_REPLACE)
87
self.replace_forward.connect_proxy(btn)
91
btn = gtk.Button(stock=gtk.STOCK_FIND_AND_REPLACE)
92
btn.set_label("Replace All")
93
self.replace_all.connect_proxy(btn)
97
self.replace_forward.connect("activate", self.on_replace_curr)
98
self.replace_all.connect("activate", self.on_replace_all)
100
self.search_bar.widget.connect("key-release-event", self._on_key_pressed)
107
def _bind_buffer(self, buff):
108
buff.replace_component.events.register("changed", self.on_replace_changed)
109
buff.replace_text = self.replace_entry.get_text()
111
def _unbind_buffer(self, buff):
112
buff.replace_component.events.unregister("changed", self.on_replace_changed)
114
def on_show(self, dialog):
115
self.toggle_find.set_active(True)
116
self.toggle_find.set_sensitive(False)
118
def on_hide(self, dialog):
119
self.toggle_find.set_active(False)
120
self.toggle_find.set_sensitive(True)
122
def can_update_history(self):
123
return self.replace_entry.get_text() in [x[0] for x in self.replace_model]
125
def update_history(self):
126
self.replace_model.append((self.replace_entry.get_text(),))
128
def on_replace_curr(self, btn):
129
if self.buffer.replace() and self.can_update_history():
130
self.update_history()
135
def on_replace_all(self, btn):
136
if self.buffer.replace_all() and self.can_update_history():
137
self.update_history()
139
def on_entry_changed(self, entry):
140
self.buffer.replace_text = unescape_text(entry.get_text())
142
def on_replace_changed(self, text):
143
self.replace_entry.set_text(escape_text(text))