109
109
self.setup_params()
111
# These could potentially be set based on the size of your monitor.
112
# But for now, they seem like a reasonable default
111
113
self.set_default_size(800, 600)
114
self._hpane.set_position(300)
112
115
self.fill_in_data()
114
117
def setup_params(self):
131
135
# TODO: We'd really prefer this to be a nested list
132
136
for rev, children in self._pending:
133
137
rev_info = self._rev_to_pending_info(rev)
134
self._pending_liststore.append([
138
self._pending_store.append([
135
139
rev_info['revision_id'],
136
140
rev_info['date'],
137
141
rev_info['committer'],
148
152
self._pending_box.show()
154
def _fill_in_files(self):
155
# We should really use _iter_changes, and then add a progress bar of
157
self._compute_delta()
159
# While we fill in the view, hide the store
160
store = self._files_store
161
self._treeview_files.set_model(None)
164
removed = _('removed')
165
renamed = _('renamed')
166
renamed_and_modified = _('renamed and modified')
167
modified = _('modified')
169
# [file_id, real path, checkbox, display path, changes type]
170
for path, file_id, kind in self._delta.added:
171
marker = osutils.kind_marker(kind)
172
store.append([file_id, path, True, path+marker, added])
174
for path, file_id, kind in self._delta.removed:
175
marker = osutils.kind_marker(kind)
176
store.append([file_id, path, True, path+marker, removed])
178
for oldpath, newpath, file_id, kind, text_mod, meta_mod in self._delta.renamed:
179
marker = osutils.kind_marker(kind)
180
if text_mod or meta_mod:
181
changes = renamed_and_modified
184
store.append([file_id, newpath, True,
185
oldpath+marker + ' => ' + newpath+marker,
189
for path, file_id, kind, text_mod, meta_mod in self._delta.modified:
190
marker = osutils.kind_marker(kind)
191
store.append([file_id, path, True, path+marker, modified])
193
self._treeview_files.set_model(store)
150
195
def _compute_delta(self):
151
196
self._delta = self._wt.changes_from(self._basis_tree)
168
213
self._construct_file_list()
169
214
self._construct_pending_list()
171
self._hpane.pack1(self._left_pane_box, resize=False, shrink=True)
216
self._hpane.pack1(self._left_pane_box, resize=False, shrink=False)
172
217
self._left_pane_box.show()
174
219
def _construct_right_pane(self):
225
270
self._files_box.show()
226
271
self._left_pane_box.pack_start(self._files_box)
273
liststore = gtk.ListStore(
274
gobject.TYPE_STRING, # [0] file_id
275
gobject.TYPE_STRING, # [1] real path
276
gobject.TYPE_BOOLEAN, # [2] checkbox
277
gobject.TYPE_STRING, # [3] display path
278
gobject.TYPE_STRING, # [4] changes type
280
self._files_store = liststore
281
self._treeview_files.set_model(liststore)
282
crt = gtk.CellRendererToggle()
283
crt.set_property("activatable", True) # not bool(self._pending))
284
crt.connect("toggled", self._toggle_commit, self._files_store)
285
self._treeview_files.append_column(gtk.TreeViewColumn(_('Commit'),
287
self._treeview_files.append_column(gtk.TreeViewColumn(_('Path'),
288
gtk.CellRendererText(), text=3))
289
self._treeview_files.append_column(gtk.TreeViewColumn(_('Type'),
290
gtk.CellRendererText(), text=4))
292
def _toggle_commit(self, cell, path, model):
293
model[path][2] = not model[path][2]
228
296
def _construct_pending_list(self):
229
297
# Pending information defaults to hidden, we put it all in 1 box, so
230
298
# that we can show/hide all of them at once
253
321
self._treeview_pending.show()
254
322
self._left_pane_box.pack_start(self._pending_box)
256
liststore = gtk.ListStore(gobject.TYPE_STRING,
324
liststore = gtk.ListStore(gobject.TYPE_STRING, # revision_id
325
gobject.TYPE_STRING, # date
326
gobject.TYPE_STRING, # committer
327
gobject.TYPE_STRING, # summary
261
self._pending_liststore = liststore
329
self._pending_store = liststore
262
330
self._treeview_pending.set_model(liststore)
263
331
self._treeview_pending.append_column(gtk.TreeViewColumn(_('Date'),
264
332
gtk.CellRendererText(), text=1))