/b-gtk/fix-viz

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/b-gtk/fix-viz

« back to all changes in this revision

Viewing changes to diff.py

  • Committer: Jelmer Vernooij
  • Date: 2007-07-15 18:12:57 UTC
  • Revision ID: jelmer@samba.org-20070715181257-g264qus2zyi3v39z
Add RevisionSelectionBox widget, use in TagDialog.

Show diffs side-by-side

added added

removed removed

Lines of Context:
14
14
 
15
15
import gtk
16
16
import pango
 
17
import sys
17
18
 
18
19
try:
19
20
    import gtksourceview
21
22
except ImportError:
22
23
    have_gtksourceview = False
23
24
 
24
 
from bzrlib.delta import compare_trees
 
25
import bzrlib
 
26
 
25
27
from bzrlib.diff import show_diff_trees
 
28
from bzrlib.errors import NoSuchFile
26
29
 
27
30
 
28
31
class DiffWindow(gtk.Window):
48
51
 
49
52
    def construct(self):
50
53
        """Construct the window contents."""
51
 
        hbox = gtk.HBox(spacing=6)
52
 
        hbox.set_border_width(12)
53
 
        self.add(hbox)
54
 
        hbox.show()
 
54
        # The   window  consists  of   a  pane   containing:  the
 
55
        # hierarchical list  of files on  the left, and  the diff
 
56
        # for the currently selected file on the right.
 
57
        pane = gtk.HPaned()
 
58
        self.add(pane)
 
59
        pane.show()
55
60
 
 
61
        # The file hierarchy: a scrollable treeview
56
62
        scrollwin = gtk.ScrolledWindow()
57
63
        scrollwin.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
58
64
        scrollwin.set_shadow_type(gtk.SHADOW_IN)
59
 
        hbox.pack_start(scrollwin, expand=False, fill=True)
 
65
        pane.pack1(scrollwin)
60
66
        scrollwin.show()
61
67
 
62
68
        self.model = gtk.TreeStore(str, str)
74
80
        column.add_attribute(cell, "text", 0)
75
81
        self.treeview.append_column(column)
76
82
 
77
 
 
 
83
        # The diffs of the  selected file: a scrollable source or
 
84
        # text view
78
85
        scrollwin = gtk.ScrolledWindow()
79
86
        scrollwin.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
80
87
        scrollwin.set_shadow_type(gtk.SHADOW_IN)
81
 
        hbox.pack_start(scrollwin, expand=True, fill=True)
 
88
        pane.pack2(scrollwin)
82
89
        scrollwin.show()
83
90
 
84
91
        if have_gtksourceview:
108
115
        self.parent_tree = parent_tree
109
116
 
110
117
        self.model.clear()
111
 
        delta = compare_trees(self.parent_tree, self.rev_tree)
 
118
        delta = self.rev_tree.changes_from(self.parent_tree)
112
119
 
113
120
        self.model.append(None, [ "Complete Diff", "" ])
114
121
 
126
133
            titer = self.model.append(None, [ "Renamed", None ])
127
134
            for oldpath, newpath, id, kind, text_modified, meta_modified \
128
135
                    in delta.renamed:
129
 
                self.model.append(titer, [ oldpath, oldpath ])
 
136
                self.model.append(titer, [ oldpath, newpath ])
130
137
 
131
138
        if len(delta.modified):
132
139
            titer = self.model.append(None, [ "Modified", None ])
136
143
        self.treeview.expand_all()
137
144
        self.set_title(description + " - bzrk diff")
138
145
 
 
146
    def set_file(self, file_path):
 
147
        tv_path = None
 
148
        for data in self.model:
 
149
            for child in data.iterchildren():
 
150
                if child[0] == file_path or child[1] == file_path:
 
151
                    tv_path = child.path
 
152
                    break
 
153
        if tv_path is None:
 
154
            raise NoSuchFile(file_path)
 
155
        self.treeview.set_cursor(tv_path)
 
156
        self.treeview.scroll_to_cell(tv_path)
 
157
 
139
158
    def _treeview_cursor_cb(self, *args):
140
159
        """Callback for when the treeview cursor changes."""
141
160
        (path, col) = self.treeview.get_cursor()
147
166
 
148
167
        s = StringIO()
149
168
        show_diff_trees(self.parent_tree, self.rev_tree, s, specific_files)
150
 
        self.buffer.set_text(s.getvalue())
 
169
        self.buffer.set_text(s.getvalue().decode(sys.getdefaultencoding(), 'replace'))