annotate changeset.h @ 363:f89e50d748ed feature_93

Enable Push button whenever the repo is non-empty, even when there is no remote location -- ask for remote location when it is pressed. Also change "Change Remote..." to "Set Remote..." to be consistent with this new usage
author Chris Cannam
date Thu, 17 Mar 2011 17:48:18 +0000
parents 8fd71f570884
children
rev   line source
Chris@57 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@57 2
Chris@57 3 /*
Chris@57 4 EasyMercurial
Chris@57 5
Chris@57 6 Based on HgExplorer by Jari Korhonen
Chris@57 7 Copyright (c) 2010 Jari Korhonen
Chris@244 8 Copyright (c) 2011 Chris Cannam
Chris@244 9 Copyright (c) 2011 Queen Mary, University of London
Chris@57 10
Chris@57 11 This program is free software; you can redistribute it and/or
Chris@57 12 modify it under the terms of the GNU General Public License as
Chris@57 13 published by the Free Software Foundation; either version 2 of the
Chris@57 14 License, or (at your option) any later version. See the file
Chris@57 15 COPYING included with this distribution for more information.
Chris@57 16 */
Chris@57 17
Chris@43 18 #ifndef CHANGESET_H
Chris@43 19 #define CHANGESET_H
Chris@43 20
Chris@43 21 #include <QObject>
Chris@43 22 #include <QString>
Chris@43 23 #include <QStringList>
Chris@43 24 #include <QList>
Chris@106 25 #include <QSharedPointer>
Chris@106 26
Chris@106 27 #include "logparser.h"
Chris@43 28
Chris@108 29 class Changeset;
Chris@108 30
Chris@150 31 typedef QList<Changeset *> Changesets;
Chris@108 32
Chris@43 33 class Changeset : public QObject
Chris@43 34 {
Chris@43 35 Q_OBJECT
Chris@43 36
Chris@43 37 Q_PROPERTY(QString id READ id WRITE setId NOTIFY idChanged STORED true);
Chris@128 38 Q_PROPERTY(QString author READ author WRITE setAuthor NOTIFY authorChanged STORED true);
Chris@43 39 Q_PROPERTY(QString branch READ branch WRITE setBranch NOTIFY branchChanged STORED true);
Chris@128 40 Q_PROPERTY(QStringList tags READ tags WRITE setTags NOTIFY tagsChanged STORED true);
Chris@52 41 Q_PROPERTY(QString datetime READ datetime WRITE setDatetime NOTIFY datetimeChanged STORED true);
Chris@52 42 Q_PROPERTY(qulonglong timestamp READ timestamp WRITE setTimestamp NOTIFY timestampChanged STORED true);
Chris@43 43 Q_PROPERTY(QString age READ age WRITE setAge NOTIFY ageChanged STORED true);
Chris@43 44 Q_PROPERTY(QStringList parents READ parents WRITE setParents NOTIFY parentsChanged STORED true);
Chris@47 45 Q_PROPERTY(QStringList children READ children WRITE setChildren NOTIFY childrenChanged STORED true);
Chris@43 46 Q_PROPERTY(QString comment READ comment WRITE setComment NOTIFY commentChanged STORED true);
Chris@43 47
Chris@43 48 public:
Chris@43 49 Changeset() : QObject() { }
Chris@106 50 explicit Changeset(const LogEntry &e);
Chris@43 51
Chris@43 52 QString id() const { return m_id; }
Chris@128 53 QString author() const { return m_author; }
Chris@43 54 QString branch() const { return m_branch; }
Chris@128 55 QStringList tags() const { return m_tags; }
Chris@51 56 QString datetime() const { return m_datetime; }
Chris@52 57 qulonglong timestamp() const { return m_timestamp; }
Chris@43 58 QString age() const { return m_age; }
Chris@43 59 QStringList parents() const { return m_parents; }
Chris@123 60 QString comment() const { return m_comment; }
Chris@123 61
Chris@123 62 /**
Chris@123 63 * The children property is not obtained from Hg, but set in
Chris@123 64 * Grapher::layout() based on reported parents
Chris@123 65 */
Chris@47 66 QStringList children() const { return m_children; }
Chris@43 67
Chris@43 68 int number() const {
Chris@43 69 return id().split(':')[0].toInt();
Chris@43 70 }
Chris@43 71
Chris@128 72 QString authorName() const {
Chris@128 73 QString a = author();
Chris@44 74 return a.replace(QRegExp("\\s*<[^>]*>"), "");
Chris@44 75 }
Chris@44 76
Chris@51 77 QString date() const {
Chris@51 78 return datetime().split(' ')[0];
Chris@51 79 }
Chris@51 80
Chris@108 81 bool isOnBranch(QString branch) {
Chris@108 82 QString b = m_branch;
Chris@108 83 if (branch == "") branch = "default";
Chris@108 84 if (b == "") b = "default";
Chris@108 85 if (branch == b) return true;
Chris@108 86 return false;
Chris@108 87 }
Chris@108 88
Chris@153 89 static QString hashOf(QString id) {
Chris@153 90 return id.split(':')[1];
Chris@153 91 }
Chris@153 92
Chris@150 93 static QStringList getIds(Changesets csets) {
Chris@150 94 QStringList ids;
Chris@150 95 foreach (Changeset *cs, csets) ids.push_back(cs->id());
Chris@150 96 return ids;
Chris@150 97 }
Chris@150 98
Chris@108 99 static Changesets parseChangesets(QString logText) {
Chris@108 100 Changesets csets;
Chris@108 101 LogList log = LogParser(logText).parse();
Chris@108 102 foreach (LogEntry e, log) {
Chris@108 103 csets.push_back(new Changeset(e));
Chris@108 104 }
Chris@108 105 return csets;
Chris@108 106 }
Chris@108 107
Chris@125 108 static QString getLogTemplate();
Chris@125 109
Chris@125 110 QString formatHtml();
Chris@125 111
Chris@43 112 signals:
Chris@43 113 void idChanged(QString id);
Chris@128 114 void authorChanged(QString author);
Chris@43 115 void branchChanged(QString branch);
Chris@128 116 void tagsChanged(QStringList tags);
Chris@51 117 void datetimeChanged(QString datetime);
Chris@52 118 void timestampChanged(qulonglong timestamp);
Chris@43 119 void ageChanged(QString age);
Chris@43 120 void parentsChanged(QStringList parents);
Chris@47 121 void childrenChanged(QStringList children);
Chris@43 122 void commentChanged(QString comment);
Chris@43 123
Chris@43 124 public slots:
Chris@43 125 void setId(QString id) { m_id = id; emit idChanged(id); }
Chris@128 126 void setAuthor(QString author) { m_author = author; emit authorChanged(author); }
Chris@43 127 void setBranch(QString branch) { m_branch = branch; emit branchChanged(branch); }
Chris@128 128 void setTags(QStringList tags) { m_tags = tags; emit tagsChanged(tags); }
Chris@128 129 void addTag(QString tag) { m_tags.push_back(tag); emit tagsChanged(m_tags); }
Chris@52 130 void setDatetime(QString datetime) { m_datetime = datetime; emit datetimeChanged(datetime); }
Chris@52 131 void setTimestamp(qulonglong timestamp) { m_timestamp = timestamp; emit timestampChanged(timestamp); }
Chris@43 132 void setAge(QString age) { m_age = age; emit ageChanged(age); }
Chris@43 133 void setParents(QStringList parents) { m_parents = parents; emit parentsChanged(parents); }
Chris@47 134 void setChildren(QStringList children) { m_children = children; emit childrenChanged(m_children); }
Chris@47 135 void addChild(QString child) { m_children.push_back(child); emit childrenChanged(m_children); }
Chris@43 136 void setComment(QString comment) { m_comment = comment; emit commentChanged(comment); }
Chris@43 137
Chris@43 138 private:
Chris@43 139 QString m_id;
Chris@128 140 QString m_author;
Chris@43 141 QString m_branch;
Chris@128 142 QStringList m_tags;
Chris@51 143 QString m_datetime;
Chris@52 144 qulonglong m_timestamp;
Chris@43 145 QString m_age;
Chris@43 146 QStringList m_parents;
Chris@47 147 QStringList m_children;
Chris@43 148 QString m_comment;
Chris@43 149 };
Chris@43 150
Chris@43 151
Chris@43 152 #endif // CHANGESET_H