Kiln » TortoiseHg » TortoiseHg
Clone URL:  
Pushed to one repository · View In Graph Contained in 1.1, 1.1.1, and 1.1.2

chunks: introduce context menu to deselect chunks

Changeset 576a8f6af30f

Parent f46c3ea2f429

by Adrian Buehlmann

Changes to one file · Browse files at 576a8f6af30f Showing diff from parent f46c3ea2f429 Diff from another changeset...

 
14
15
16
 
17
18
19
 
103
104
105
106
107
 
 
108
109
110
 
269
270
271
272
273
274
275
 
 
276
277
278
279
280
 
282
283
284
285
 
286
287
 
288
289
290
291
 
292
293
294
 
373
374
375
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
15
16
17
18
19
20
 
104
105
106
 
107
108
109
110
111
112
 
271
272
273
 
 
 
 
274
275
276
 
277
278
279
 
281
282
283
 
284
285
 
286
287
288
289
 
290
291
292
293
 
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
@@ -14,6 +14,7 @@
   from mercurial import cmdutil, util, patch, mdiff, error   +from tortoisehg.util.i18n import _  from tortoisehg.util import hglib, hgshelve    from tortoisehg.hgtk import gtklib @@ -103,8 +104,9 @@
  if getattr(dt, 'enable-grid-lines', None) is not None:   dt.set_property('enable-grid-lines', True)   - dt.connect('row-activated', self.diff_tree_row_act)   dt.connect('copy-clipboard', self.copy_to_clipboard) + dt.connect('popup-menu', self.tree_popup_menu) + dt.connect('button-release-event', self.tree_button_release)     cell = gtk.CellRendererText()   diffcol = gtk.TreeViewColumn('diff', cell) @@ -269,12 +271,9 @@
    return len(rows)   - def diff_tree_row_act(self, dtree, path, column): - 'Row in diff tree (hunk) activated/toggled' - dmodel = dtree.get_model() - row = dmodel[path] + def activate_chunk(self, row, active): + dmodel = self.diffmodel   wfile = row[DM_PATH] - checked = self.stat.get_checked(wfile)   try:   chunks = self.filechunks[wfile]   except IndexError: @@ -282,13 +281,13 @@
  chunkrows = xrange(1, len(chunks))   if row[DM_IS_HEADER]:   for n, chunk in enumerate(chunks[1:]): - chunk.active = not checked + chunk.active = active   self.update_diff_hunk(dmodel[n+1]) - newvalue = not checked + newvalue = active   partial = False   else:   chunk = chunks[row[DM_CHUNK_ID]] - chunk.active = not chunk.active + chunk.active = active   self.update_diff_hunk(row)   rej = [ n for n in chunkrows if dmodel[n][DM_REJECTED] ]   nonrej = [ n for n in chunkrows if not dmodel[n][DM_REJECTED] ] @@ -373,3 +372,31 @@
  self.stat.stbar.set_text(str(e))   difftext.seek(0)   return hgshelve.parsepatch(difftext) + + def tree_button_release(self, treeview, event): + if event.button != 3: + return False + self.tree_popup_menu(treeview) + return True + + def tree_popup_menu(self, treeview): + model, tpaths = treeview.get_selection().get_selected_rows() + srows = [model[p] for p in tpaths] + + def select(menuitem): + for row in srows: + self.activate_chunk(row, True) + + def deselect(menuitem): + for row in srows: + self.activate_chunk(row, False) + + menu = gtklib.MenuBuilder() + menu.append(_('_Select'), select) + menu.append(_('_Deselect'), deselect) + + menu = menu.build() + if len(menu.get_children()) > 0: + menu.show_all() + menu.popup(None, None, None, 0, 0) + return True