~ubuntu-branches/ubuntu/utopic/pida/utopic

« back to all changes in this revision

Viewing changes to pida/utils/culebra/replacebar.py

  • Committer: Bazaar Package Importer
  • Author(s): Jan Luebbe
  • Date: 2007-04-17 16:08:06 UTC
  • mfrom: (1.1.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20070417160806-3ttlb6igf94x9i03
Tags: 0.4.4-1
* New upstream release (closes: #419129)
* Add dependency on python-glade2 (closes: #418716)
* Update copyright

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# -*- coding: utf-8 -*-
 
1
# -*- coding: utf-8 -*-
2
2
__license__ = "MIT License <http://www.opensource.org/licenses/mit-license.php>"
3
3
__copyright__ = "2005, Tiago Cogumbreiro"
4
4
__author__ = "Tiago Cogumbreiro <cogumbreiro@users.sf.net>"
5
5
 
6
6
import gtk
7
 
import weakref
8
7
 
9
8
from common import ACTION_FIND_TOGGLE, ACTION_REPLACE_FORWARD, ACTION_REPLACE_ALL
10
9
from common import escape_text, unescape_text
11
10
from common import get_action, ACTION_REPLACE_TOGGLE
12
 
 
 
11
from gtkutil import subscribe_proxy, signal_holder
13
12
from bar import Bar
 
13
import interfaces
 
14
import core
14
15
 
15
16
class ReplaceBar(Bar):
16
17
    """
17
18
    This component implements an event that validates when the selection is
18
19
    synchronized with the selected text.
19
20
    """
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)
 
21
    
 
22
    search_bar = core.Depends(interfaces.ISearchBar)
 
23
    replace = core.Depends(interfaces.IReplace)
 
24
    search = core.Depends(interfaces.ISearch)
 
25
    carret = core.Depends(interfaces.ICarretController)
 
26
    
 
27
    def __init__(self):
 
28
        btn = gtk.Button(stock=gtk.STOCK_FIND_AND_REPLACE)
 
29
        self.btn_replace_forward = btn
 
30
        btn = gtk.Button(stock=gtk.STOCK_FIND_AND_REPLACE)
 
31
        btn.set_label("Replace All")
 
32
        self.btn_replace_all = btn
 
33
    
 
34
    def _bind(self, service_provider):
 
35
        cb = self.on_replace_changed
 
36
        self.evt = self.replace.register_event("text-changed", cb)
23
37
    
24
38
    def _create_toggle_action(self, action_group):
25
39
        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
40
        return action(ACTION_REPLACE_TOGGLE)
30
41
    
31
 
    ##############
32
 
    # Properties
33
 
    
34
 
    #############
35
 
    # search_bar
36
 
    def get_search_bar(self):
37
 
        return self._search_bar()
38
 
    
39
 
    search_bar = property(get_search_bar)
40
 
    
41
42
    ###################
42
43
    # replace_entry
43
44
    _replace_entry = None
83
84
        self.replace_entry.show()
84
85
        hig_add(hbox, self.replace_entry)
85
86
        
86
 
        btn = gtk.Button(stock=gtk.STOCK_FIND_AND_REPLACE)
87
 
        self.replace_forward.connect_proxy(btn)
 
87
        btn = self.btn_replace_forward
88
88
        btn.show()
89
89
        hig_add(hbox, btn)
90
90
        
91
 
        btn = gtk.Button(stock=gtk.STOCK_FIND_AND_REPLACE)
92
 
        btn.set_label("Replace All")
93
 
        self.replace_all.connect_proxy(btn)
 
91
        btn = self.btn_replace_all
94
92
        btn.show()
95
93
        hig_add(hbox, btn)
96
94
 
97
 
        self.replace_forward.connect("activate", self.on_replace_curr)
98
 
        self.replace_all.connect("activate", self.on_replace_all)
99
 
 
100
95
        self.search_bar.widget.connect("key-release-event", self._on_key_pressed)
101
 
        
102
96
        return hbox
103
97
    
 
98
    
 
99
    def set_action_group(self, action_group):
 
100
        super(ReplaceBar, self).set_action_group(action_group)
 
101
        # This is a little gimmnick to make it not throw an exception
 
102
        # Since the holders return None when the first argument is
 
103
        # None.
 
104
        if action_group is None:
 
105
            get_action = lambda name: None
 
106
        else:
 
107
            get_action = lambda name: action_group.get_action(name)
 
108
        
 
109
        replace_forward = get_action(ACTION_REPLACE_FORWARD)
 
110
        replace_all = get_action(ACTION_REPLACE_ALL)
 
111
        self.toggle_find = get_action(ACTION_FIND_TOGGLE)
 
112
        self.signal_1 = signal_holder(replace_forward, "activate", self.on_replace_curr)
 
113
        self.signal_2 = signal_holder(replace_all, "activate", self.on_replace_all)
 
114
        
 
115
        sbs = subscribe_proxy(replace_forward, self.btn_replace_forward)
 
116
        self.replace_forward_src = sbs
 
117
        
 
118
        sbs = subscribe_proxy(replace_all, self.btn_replace_all)
 
119
        self.replace_all_src = sbs
 
120
        
 
121
 
 
122
    
104
123
    ##################
105
124
    # Template methods
106
125
 
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()
110
 
    
111
 
    def _unbind_buffer(self, buff):
112
 
        buff.replace_component.events.unregister("changed", self.on_replace_changed)
113
 
 
114
126
    def on_show(self, dialog):
 
127
        if self.toggle_find is None:
 
128
            return
115
129
        self.toggle_find.set_active(True)
116
130
        self.toggle_find.set_sensitive(False)
117
131
    
118
132
    def on_hide(self, dialog):
 
133
        if self.toggle_find is None:
 
134
            return
119
135
        self.toggle_find.set_active(False)
120
136
        self.toggle_find.set_sensitive(True)
121
137
    
126
142
        self.replace_model.append((self.replace_entry.get_text(),))
127
143
    
128
144
    def on_replace_curr(self, btn):
129
 
        if self.buffer.replace() and self.can_update_history():
 
145
        if self.replace.replace() and self.can_update_history():
130
146
            self.update_history()
131
147
 
132
 
        self.buffer.search()
133
 
        
 
148
        self.search.search()
 
149
        self.carret.focus_carret()
134
150
    
135
151
    def on_replace_all(self, btn):
136
 
        if self.buffer.replace_all() and self.can_update_history():
 
152
        if self.replace.replace_all() and self.can_update_history():
137
153
            self.update_history()
 
154
            self.get_parent().focus_carret()
138
155
        
139
156
    def on_entry_changed(self, entry):
140
 
        self.buffer.replace_text = unescape_text(entry.get_text())
 
157
        self.replace.set_text(unescape_text(entry.get_text()))
141
158
    
142
 
    def on_replace_changed(self, text):
 
159
    def on_replace_changed(self, replace):
 
160
        text = replace.get_text()
143
161
        self.replace_entry.set_text(escape_text(text))
 
162
 
 
163
def register_services(service_provider):
 
164
    service_provider.register_factory(ReplaceBar, interfaces.IReplaceBar)