32
32
'The currently selected revision',
33
33
gobject.PARAM_READWRITE),
35
'revision-number': (gobject.TYPE_STRING,
37
'The number of the selected revision',
39
gobject.PARAM_READABLE),
41
'children': (gobject.TYPE_PYOBJECT,
43
'Children of the currently selected revision',
44
gobject.PARAM_READABLE),
46
'parents': (gobject.TYPE_PYOBJECT,
48
'Parents to the currently selected revision',
49
gobject.PARAM_READABLE),
35
51
'revno-column-visible': (gobject.TYPE_BOOLEAN,
37
53
'Show revision number column',
73
89
self.construct_treeview()
75
92
self.branch = branch
77
94
gobject.idle_add(self.populate, start, maxnum,
78
95
broken_line_length)
84
97
self.connect("destroy", lambda x: self.branch.unlock())
86
99
def do_get_property(self, property):
91
104
elif property.name == 'branch':
92
105
return self.branch
93
106
elif property.name == 'revision':
107
return self.model.get_value(self.iter, treemodel.REVISION)
108
elif property.name == 'revision-number':
109
return self.model.get_value(self.iter, treemodel.REVNO)
110
elif property.name == 'children':
111
return self.model.get_value(self.iter, treemodel.CHILDREN)
112
elif property.name == 'parents':
113
return self.model.get_value(self.iter, treemodel.PARENTS)
96
115
raise AttributeError, 'unknown property %s' % property.name
110
129
def get_revision(self):
111
130
"""Return revision id of currently selected revision, or None."""
131
return self.get_property('revision')
133
def set_revision(self, revision):
134
self.set_property('revision', revision)
114
136
def set_revision_id(self, revid):
115
137
"""Change the currently selected revision.
125
147
:return: list of revision ids.
149
return self.get_property('children')
129
151
def get_parents(self):
130
152
"""Return the parents of the currently selected revision.
132
154
:return: list of revision ids.
156
return self.get_property('parents')
137
159
"""Signal handler for the Back button."""
138
(path, col) = self.treeview.get_cursor()
139
revision = self.model[path][treemodel.REVISION]
140
parents = self.model[path][treemodel.PARENTS]
160
parents = self.get_parents()
141
161
if not len(parents):
144
164
for parent_id in parents:
145
165
parent_index = self.index[parent_id]
146
166
parent = self.model[parent_index][treemodel.REVISION]
147
if same_branch(revision, parent):
148
self.treeview.set_cursor(parent_index)
167
if same_branch(self.get_revision(), parent):
168
self.set_revision(parent)
151
self.treeview.set_cursor(self.index[parents[0]])
152
self.treeview.grab_focus()
171
self.set_revision_id(parents[0])
154
173
def forward(self):
155
174
"""Signal handler for the Forward button."""
156
(path, col) = self.treeview.get_cursor()
157
revision = self.model[path][treemodel.REVISION]
158
children = self.model[path][treemodel.CHILDREN]
175
children = self.get_children()
159
176
if not len(children):
162
179
for child_id in children:
163
180
child_index = self.index[child_id]
164
181
child = self.model[child_index][treemodel.REVISION]
165
if same_branch(child, revision):
166
self.treeview.set_cursor(child_index)
182
if same_branch(child, self.get_revision()):
183
self.set_revision(child)
169
self.treeview.set_cursor(self.index[children[0]])
170
self.treeview.grab_focus()
186
self.set_revision_id(children[0])
172
188
def populate(self, start, maxnum, broken_line_length=None):
173
189
"""Fill the treeview with contents.
201
217
from bzrlib.plugins.gtk.diff import DiffWindow
202
218
window = DiffWindow(parent=self)
220
parents = self.get_parents()
204
222
if revid is None:
205
revid = self.revision.revision_id
223
revid = self.get_revision().revision_id
207
if parentid is None and len(self.parents) > 0:
208
parentid = self.parents[0]
225
if parentid is None and len(parents) > 0:
226
parentid = parents[0]
210
228
if parentid is None:
211
229
parentid = NULL_REVISION
301
319
"""callback for when the treeview changes."""
302
320
(path, focus) = treeview.get_cursor()
303
321
if path is not None:
304
iter = self.model.get_iter(path)
305
self.revision = self.model.get_value(iter, treemodel.REVISION)
306
self.parents = self.model.get_value(iter, treemodel.PARENTS)
307
self.children = self.model.get_value(iter, treemodel.CHILDREN)
322
self.iter = self.model.get_iter(path)
309
323
self.emit('revision-selected')
311
325
def _on_revision_selected(self, widget, event):