Chris@57: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ Chris@57: Chris@57: /* Chris@57: EasyMercurial Chris@57: Chris@57: Based on HgExplorer by Jari Korhonen Chris@57: Copyright (c) 2010 Jari Korhonen Chris@57: Copyright (c) 2010 Chris Cannam Chris@57: Copyright (c) 2010 Queen Mary, University of London Chris@57: Chris@57: This program is free software; you can redistribute it and/or Chris@57: modify it under the terms of the GNU General Public License as Chris@57: published by the Free Software Foundation; either version 2 of the Chris@57: License, or (at your option) any later version. See the file Chris@57: COPYING included with this distribution for more information. Chris@57: */ Chris@57: Chris@43: #ifndef CHANGESET_H Chris@43: #define CHANGESET_H Chris@43: Chris@43: #include Chris@43: #include Chris@43: #include Chris@43: #include Chris@106: #include Chris@106: Chris@106: #include "logparser.h" Chris@43: Chris@108: class Changeset; Chris@108: Chris@150: typedef QList Changesets; Chris@108: Chris@43: class Changeset : public QObject Chris@43: { Chris@43: Q_OBJECT Chris@43: Chris@43: Q_PROPERTY(QString id READ id WRITE setId NOTIFY idChanged STORED true); Chris@128: Q_PROPERTY(QString author READ author WRITE setAuthor NOTIFY authorChanged STORED true); Chris@43: Q_PROPERTY(QString branch READ branch WRITE setBranch NOTIFY branchChanged STORED true); Chris@128: Q_PROPERTY(QStringList tags READ tags WRITE setTags NOTIFY tagsChanged STORED true); Chris@52: Q_PROPERTY(QString datetime READ datetime WRITE setDatetime NOTIFY datetimeChanged STORED true); Chris@52: Q_PROPERTY(qulonglong timestamp READ timestamp WRITE setTimestamp NOTIFY timestampChanged STORED true); Chris@43: Q_PROPERTY(QString age READ age WRITE setAge NOTIFY ageChanged STORED true); Chris@43: Q_PROPERTY(QStringList parents READ parents WRITE setParents NOTIFY parentsChanged STORED true); Chris@47: Q_PROPERTY(QStringList children READ children WRITE setChildren NOTIFY childrenChanged STORED true); Chris@43: Q_PROPERTY(QString comment READ comment WRITE setComment NOTIFY commentChanged STORED true); Chris@43: Chris@43: public: Chris@43: Changeset() : QObject() { } Chris@106: explicit Changeset(const LogEntry &e); Chris@43: Chris@43: QString id() const { return m_id; } Chris@128: QString author() const { return m_author; } Chris@43: QString branch() const { return m_branch; } Chris@128: QStringList tags() const { return m_tags; } Chris@51: QString datetime() const { return m_datetime; } Chris@52: qulonglong timestamp() const { return m_timestamp; } Chris@43: QString age() const { return m_age; } Chris@43: QStringList parents() const { return m_parents; } Chris@123: QString comment() const { return m_comment; } Chris@123: Chris@123: /** Chris@123: * The children property is not obtained from Hg, but set in Chris@123: * Grapher::layout() based on reported parents Chris@123: */ Chris@47: QStringList children() const { return m_children; } Chris@43: Chris@43: int number() const { Chris@43: return id().split(':')[0].toInt(); Chris@43: } Chris@43: Chris@128: QString authorName() const { Chris@128: QString a = author(); Chris@44: return a.replace(QRegExp("\\s*<[^>]*>"), ""); Chris@44: } Chris@44: Chris@51: QString date() const { Chris@51: return datetime().split(' ')[0]; Chris@51: } Chris@51: Chris@108: bool isOnBranch(QString branch) { Chris@108: QString b = m_branch; Chris@108: if (branch == "") branch = "default"; Chris@108: if (b == "") b = "default"; Chris@108: if (branch == b) return true; Chris@108: return false; Chris@108: } Chris@108: Chris@150: static QStringList getIds(Changesets csets) { Chris@150: QStringList ids; Chris@150: foreach (Changeset *cs, csets) ids.push_back(cs->id()); Chris@150: return ids; Chris@150: } Chris@150: Chris@108: static Changesets parseChangesets(QString logText) { Chris@108: Changesets csets; Chris@108: LogList log = LogParser(logText).parse(); Chris@108: foreach (LogEntry e, log) { Chris@108: csets.push_back(new Changeset(e)); Chris@108: } Chris@108: return csets; Chris@108: } Chris@108: Chris@125: static QString getLogTemplate(); Chris@125: Chris@125: QString formatHtml(); Chris@125: Chris@43: signals: Chris@43: void idChanged(QString id); Chris@128: void authorChanged(QString author); Chris@43: void branchChanged(QString branch); Chris@128: void tagsChanged(QStringList tags); Chris@51: void datetimeChanged(QString datetime); Chris@52: void timestampChanged(qulonglong timestamp); Chris@43: void ageChanged(QString age); Chris@43: void parentsChanged(QStringList parents); Chris@47: void childrenChanged(QStringList children); Chris@43: void commentChanged(QString comment); Chris@43: Chris@43: public slots: Chris@43: void setId(QString id) { m_id = id; emit idChanged(id); } Chris@128: void setAuthor(QString author) { m_author = author; emit authorChanged(author); } Chris@43: void setBranch(QString branch) { m_branch = branch; emit branchChanged(branch); } Chris@128: void setTags(QStringList tags) { m_tags = tags; emit tagsChanged(tags); } Chris@128: void addTag(QString tag) { m_tags.push_back(tag); emit tagsChanged(m_tags); } Chris@52: void setDatetime(QString datetime) { m_datetime = datetime; emit datetimeChanged(datetime); } Chris@52: void setTimestamp(qulonglong timestamp) { m_timestamp = timestamp; emit timestampChanged(timestamp); } Chris@43: void setAge(QString age) { m_age = age; emit ageChanged(age); } Chris@43: void setParents(QStringList parents) { m_parents = parents; emit parentsChanged(parents); } Chris@47: void setChildren(QStringList children) { m_children = children; emit childrenChanged(m_children); } Chris@47: void addChild(QString child) { m_children.push_back(child); emit childrenChanged(m_children); } Chris@43: void setComment(QString comment) { m_comment = comment; emit commentChanged(comment); } Chris@43: Chris@43: private: Chris@43: QString m_id; Chris@128: QString m_author; Chris@43: QString m_branch; Chris@128: QStringList m_tags; Chris@51: QString m_datetime; Chris@52: qulonglong m_timestamp; Chris@43: QString m_age; Chris@43: QStringList m_parents; Chris@47: QStringList m_children; Chris@43: QString m_comment; Chris@43: }; Chris@43: Chris@43: Chris@43: #endif // CHANGESET_H