bzr branch
http://gegoxaren.bato24.eu/bzr/b-gtk/fix-viz
| 
524
by Jelmer Vernooij
 Add search dialog.  | 
1  | 
# Copyright (C) 2008 by Jelmer Vernooij <jelmer@samba.org>
 | 
2  | 
#
 | 
|
3  | 
# This program is free software; you can redistribute it and/or modify
 | 
|
4  | 
# it under the terms of the GNU General Public License as published by
 | 
|
5  | 
# the Free Software Foundation; either version 2 of the License, or
 | 
|
6  | 
# (at your option) any later version.
 | 
|
7  | 
#
 | 
|
8  | 
# This program is distributed in the hope that it will be useful,
 | 
|
9  | 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
|
10  | 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
|
11  | 
# GNU General Public License for more details.
 | 
|
12  | 
#
 | 
|
13  | 
# You should have received a copy of the GNU General Public License
 | 
|
14  | 
# along with this program; if not, write to the Free Software
 | 
|
15  | 
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 | 
|
16  | 
||
17  | 
try:  | 
|
18  | 
import pygtk  | 
|
19  | 
pygtk.require("2.0")  | 
|
20  | 
except:  | 
|
21  | 
    pass
 | 
|
22  | 
||
| 
555.1.1
by Jasper Groenewegen
 Add i18n support  | 
23  | 
import gobject  | 
24  | 
import gtk  | 
|
25  | 
||
| 
524
by Jelmer Vernooij
 Add search dialog.  | 
26  | 
from bzrlib.plugins.search import index as _mod_index  | 
| 
555.1.1
by Jasper Groenewegen
 Add i18n support  | 
27  | 
from bzrlib.plugins.gtk import _i18n  | 
| 
525
by Jelmer Vernooij
 Show results in search window.  | 
28  | 
|
| 
524
by Jelmer Vernooij
 Add search dialog.  | 
29  | 
class SearchDialog(gtk.Dialog):  | 
30  | 
"""Search dialog."""  | 
|
| 
533.11.1
by Jelmer Vernooij
 Ask user whether to index if there is no index present yet.  | 
31  | 
def __init__(self, index, parent=None):  | 
| 
524
by Jelmer Vernooij
 Add search dialog.  | 
32  | 
gtk.Dialog.__init__(self, title="Search Revisions",  | 
33  | 
parent=parent,  | 
|
34  | 
flags=gtk.DIALOG_MODAL,  | 
|
| 
526
by Jelmer Vernooij
 Switch to found revision when clicking ok in search window.  | 
35  | 
buttons=(gtk.STOCK_OK, gtk.RESPONSE_OK,  | 
36  | 
gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))  | 
|
| 
555.1.1
by Jasper Groenewegen
 Add i18n support  | 
37  | 
pixbuf = self.render_icon(gtk.STOCK_FIND, gtk.ICON_SIZE_MENU)  | 
38  | 
self.set_icon(pixbuf)  | 
|
39  | 
||
| 
524
by Jelmer Vernooij
 Add search dialog.  | 
40  | 
        # Get arguments
 | 
| 
533.11.1
by Jelmer Vernooij
 Ask user whether to index if there is no index present yet.  | 
41  | 
self.index = index  | 
| 
525
by Jelmer Vernooij
 Show results in search window.  | 
42  | 
|
43  | 
self.searchbar = gtk.HBox()  | 
|
| 
555.1.1
by Jasper Groenewegen
 Add i18n support  | 
44  | 
searchbar_label = gtk.Label(_i18n("Search for:"))  | 
45  | 
self.searchbar.pack_start(searchbar_label, False, False, 0)  | 
|
| 
525
by Jelmer Vernooij
 Show results in search window.  | 
46  | 
self.searchentry = gtk.Entry()  | 
47  | 
self.searchentry.connect('activate', self._searchentry_activate)  | 
|
| 
527
by Jelmer Vernooij
 Remove partial completion support, since I can't find the required functionality in pygtk.  | 
48  | 
        # TODO: Completion using the bzr-search suggests functionality
 | 
| 
525
by Jelmer Vernooij
 Show results in search window.  | 
49  | 
self.searchbar.add(self.searchentry)  | 
50  | 
self.vbox.pack_start(self.searchbar, expand=False, fill=False)  | 
|
51  | 
||
| 
526
by Jelmer Vernooij
 Switch to found revision when clicking ok in search window.  | 
52  | 
self.results_model = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_PYOBJECT)  | 
| 
525
by Jelmer Vernooij
 Show results in search window.  | 
53  | 
self.results_treeview = gtk.TreeView(self.results_model)  | 
| 
555.1.1
by Jasper Groenewegen
 Add i18n support  | 
54  | 
self.results_treeview.connect("row-activated", self._searchresult_row_activated)  | 
| 
525
by Jelmer Vernooij
 Show results in search window.  | 
55  | 
|
| 
555.1.1
by Jasper Groenewegen
 Add i18n support  | 
56  | 
documentname_column = gtk.TreeViewColumn(_i18n("Document"), gtk.CellRendererText(), text=0)  | 
| 
525
by Jelmer Vernooij
 Show results in search window.  | 
57  | 
self.results_treeview.append_column(documentname_column)  | 
58  | 
||
| 
555.1.1
by Jasper Groenewegen
 Add i18n support  | 
59  | 
summary_column = gtk.TreeViewColumn(_i18n("Summary"), gtk.CellRendererText(), text=1)  | 
| 
525
by Jelmer Vernooij
 Show results in search window.  | 
60  | 
self.results_treeview.append_column(summary_column)  | 
61  | 
||
62  | 
results_scrolledwindow = gtk.ScrolledWindow()  | 
|
63  | 
results_scrolledwindow.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)  | 
|
64  | 
results_scrolledwindow.add(self.results_treeview)  | 
|
65  | 
||
66  | 
self.vbox.pack_start(results_scrolledwindow, expand=True, fill=True)  | 
|
67  | 
||
68  | 
self.set_default_size(600, 400)  | 
|
| 
524
by Jelmer Vernooij
 Add search dialog.  | 
69  | 
        # Show the dialog
 | 
70  | 
self.show_all()  | 
|
| 
525
by Jelmer Vernooij
 Show results in search window.  | 
71  | 
|
| 
526
by Jelmer Vernooij
 Switch to found revision when clicking ok in search window.  | 
72  | 
def get_revision(self):  | 
73  | 
(path, focus) = self.results_treeview.get_cursor()  | 
|
74  | 
if path is None:  | 
|
75  | 
return None  | 
|
76  | 
iter = self.results_model.get_iter(path)  | 
|
77  | 
return self.results_model.get_value(iter, 2)  | 
|
78  | 
||
| 
525
by Jelmer Vernooij
 Show results in search window.  | 
79  | 
def _searchentry_activate(self, entry):  | 
80  | 
self.results_model.clear()  | 
|
81  | 
self.index._branch.lock_read()  | 
|
82  | 
try:  | 
|
83  | 
query = [(query_item,) for query_item in self.searchentry.get_text().split(" ")]  | 
|
84  | 
for result in self.index.search(query):  | 
|
| 
526
by Jelmer Vernooij
 Switch to found revision when clicking ok in search window.  | 
85  | 
if isinstance(result, _mod_index.FileTextHit):  | 
86  | 
revid = result.text_key[-1]  | 
|
87  | 
elif isinstance(result, _mod_index.RevisionHit):  | 
|
88  | 
revid = result.revision_key[0]  | 
|
89  | 
else:  | 
|
90  | 
raise AssertionError()  | 
|
91  | 
self.results_model.append([result.document_name(), result.summary(), revid])  | 
|
| 
525
by Jelmer Vernooij
 Show results in search window.  | 
92  | 
finally:  | 
93  | 
self.index._branch.unlock()  | 
|
| 
555.1.1
by Jasper Groenewegen
 Add i18n support  | 
94  | 
|
95  | 
def _searchresult_row_activated(self, treeview, path, view_column):  | 
|
| 
555.1.2
by Jasper Groenewegen
 Better way to return response  | 
96  | 
self.response(gtk.RESPONSE_OK)  |