Kiln » TortoiseHg » TortoiseHg
Clone URL:  
Pushed to one repository · View In Graph Contained in 1.9, 1.9.1, and 1.9.2

hgemail: ability to select changesets to send

Changeset ff7e43743a77

Parent 894d811d1169

by Yuya Nishihara

Changes to one file · Browse files at ff7e43743a77 Showing diff from parent 894d811d1169 Diff from another changeset...

 
96
97
98
 
 
99
100
101
102
103
104
 
105
106
107
 
194
195
196
197
198
199
200
 
246
247
248
249
250
251
 
 
 
 
 
252
253
254
 
328
329
330
 
331
332
333
334
335
 
 
 
 
 
336
337
 
338
339
340
341
342
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
343
344
345
 
96
97
98
99
100
101
102
103
104
105
 
106
107
108
109
 
196
197
198
 
199
200
201
 
247
248
249
 
 
 
250
251
252
253
254
255
256
257
 
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
 
346
347
348
 
349
 
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
@@ -96,12 +96,14 @@
    self._changesets = _ChangesetsModel(self._repo, purerevs(revs),   parent=self) + self._changesets.dataChanged.connect(self._validateform) + self._changesets.dataChanged.connect(self._updateintrobox)   self._qui.changesets_view.setModel(self._changesets)     @property   def _revs(self):   """Returns list of revisions to be sent""" - return self._changesets.revs + return self._changesets.selectedrevs     def _filldefaults(self):   """Fill form by default values""" @@ -194,7 +196,6 @@
  if self._qui.writeintro_check.isChecked() and not self._qui.subject_edit.text():   return False   - # TODO: is it nice if we can choose revisions to send?   if not self._revs:   return False   @@ -246,9 +247,11 @@
    def _initintrobox(self):   self._qui.intro_box.hide() # hidden by default - if self._introrequired(): - self._qui.writeintro_check.setChecked(True) - self._qui.writeintro_check.setEnabled(False) + self._qui.writeintro_check.setChecked(self._introrequired()) + self._updateintrobox() + + def _updateintrobox(self): # TODO: merge into _validateform + self._qui.writeintro_check.setEnabled(not self._introrequired())     def _introrequired(self):   """Is intro message required?""" @@ -328,18 +331,55 @@
  super(_ChangesetsModel, self).__init__(parent)   self._repo = repo   self._revs = revs + self._selectedrevs = set(revs)     @property   def revs(self):   return self._revs   + @property + def selectedrevs(self): + """Return the list of selected revisions""" + return list(sorted(self._selectedrevs)) +   def data(self, index, role): - if (not index.isValid()) or role != Qt.DisplayRole: + if not index.isValid():   return QVariant()   - coldata = self._COLUMNS[index.column()][1]   rev = self._revs[index.row()] - return QVariant(hglib.tounicode(coldata(self._repo[rev]))) + if index.column() == 0 and role == Qt.CheckStateRole: + return rev in self._selectedrevs and Qt.Checked or Qt.Unchecked + if role == Qt.DisplayRole: + coldata = self._COLUMNS[index.column()][1] + return QVariant(hglib.tounicode(coldata(self._repo[rev]))) + + return QVariant() + + def setData(self, index, value, role=Qt.EditRole): + if not index.isValid(): + return False + + rev = self._revs[index.row()] + if index.column() == 0 and role == Qt.CheckStateRole: + origvalue = rev in self._selectedrevs + if value == Qt.Checked: + self._selectedrevs.add(rev) + else: + self._selectedrevs.remove(rev) + + if origvalue != (rev in self._selectedrevs): + self.dataChanged.emit(index, index) + + return True + + return False + + def flags(self, index): + v = super(_ChangesetsModel, self).flags(index) + if index.column() == 0: + return Qt.ItemIsUserCheckable | v + else: + return v     def rowCount(self, parent=QModelIndex()):   if parent.isValid():