def age(date): '''turn a (timestamp, tzoff) tuple into an age string.''' # This is i18n-ed version of mercurial.templatefilters.age(). now = time.time() then = date[0] if then > now: return _('in the future') delta = int(now - then) if delta == 0: return _('now') if delta > agescales[0][1] * 2: return util.shortdate(date) for t, s in agescales: n = delta // s if n >= 2 or s == 1: return t(n) % n
def getdate(fctx): return util.shortdate(fctx.date())
class _ChangesetsModel(QAbstractTableModel ): # TODO: use component of log viewer? _COLUMNS = [('rev', lambda ctx: '%d:%s' % (ctx.rev(), ctx)), ('author', lambda ctx: hglib.username(ctx.user())), ('date', lambda ctx: util.shortdate(ctx.date())), ('description', lambda ctx: ctx.longsummary())] def __init__(self, repo, revs, selectedrevs, parent=None): super(_ChangesetsModel, self).__init__(parent) self._repo = repo self._revs = list(reversed(sorted(revs))) self._selectedrevs = set(selectedrevs) self._readonly = False @property def revs(self): return self._revs @property def selectedrevs(self): """Return the list of selected revisions""" return list(sorted(self._selectedrevs)) def isselectedall(self): return len(self._revs) == len(self._selectedrevs) def data(self, index, role): if not index.isValid(): return QVariant() rev = self._revs[index.row()] 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.changectx(rev)))) return QVariant() def setData(self, index, value, role=Qt.EditRole): if not index.isValid() or self._readonly: 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 setReadOnly(self, readonly): self._readonly = readonly def flags(self, index): v = super(_ChangesetsModel, self).flags(index) if index.column() == 0 and not self._readonly: return Qt.ItemIsUserCheckable | v else: return v def rowCount(self, parent=QModelIndex()): if parent.isValid(): return 0 # no child return len(self._revs) def columnCount(self, parent=QModelIndex()): if parent.isValid(): return 0 # no child return len(self._COLUMNS) def headerData(self, section, orientation, role): if role != Qt.DisplayRole or orientation != Qt.Horizontal: return QVariant() return QVariant(self._COLUMNS[section][0].capitalize()) def selectAll(self): self._selectedrevs = set(self._revs) self.updateAll() def selectNone(self): self._selectedrevs = set() self.updateAll() def updateAll(self): first = self.createIndex(0, 0) last = self.createIndex(len(self._revs) - 1, 0) self.dataChanged.emit(first, last)