annotate grapher.h @ 54:0e5fba6750c2

* Small rendering refinements
author Chris Cannam
date Fri, 12 Nov 2010 17:04:36 +0000
parents 3c46b2ac45d3
children f583e44d9d31
rev   line source
Chris@44 1 #ifndef GRAPHER_H
Chris@44 2 #define GRAPHER_H
Chris@44 3
Chris@44 4 #include "changeset.h"
Chris@44 5 #include "changesetitem.h"
Chris@44 6
cannam@45 7 #include <QSet>
cannam@45 8 #include <QMap>
Chris@46 9 #include <QPair>
cannam@45 10
cannam@45 11 #include <exception>
Chris@44 12
Chris@44 13 class Grapher
Chris@44 14 {
Chris@44 15 public:
cannam@45 16 Grapher(QGraphicsScene *scene) { m_scene = scene; }
cannam@45 17
cannam@45 18 void layout(Changesets csets);
cannam@45 19
Chris@53 20 ChangesetItem *getItemFor(Changeset *cs);
Chris@53 21
cannam@45 22 class LayoutException : public std::exception {
cannam@45 23 public:
cannam@45 24 LayoutException(QString message) throw() : m_message(message) { }
cannam@45 25 virtual ~LayoutException() throw() { }
cannam@45 26 virtual const char *what() const throw() {
cannam@45 27 return m_message.toLocal8Bit().data();
cannam@45 28 }
cannam@45 29 protected:
cannam@45 30 QString m_message;
cannam@45 31 };
cannam@45 32
cannam@45 33 private:
cannam@45 34 QGraphicsScene *m_scene;
cannam@45 35
cannam@45 36 typedef QMap<QString, Changeset *> IdChangesetMap;
Chris@46 37 IdChangesetMap m_changesets;
cannam@45 38
cannam@45 39 typedef QMap<QString, ChangesetItem *> IdItemMap;
cannam@45 40 IdItemMap m_items;
cannam@45 41
cannam@45 42 typedef QSet<int> ColumnSet;
cannam@45 43 typedef QMap<int, ColumnSet> GridAlloc;
cannam@45 44 GridAlloc m_alloc;
cannam@45 45
Chris@46 46 typedef QPair<int, int> Range;
Chris@46 47 typedef QMap<QString, Range> BranchRangeMap;
Chris@46 48 BranchRangeMap m_branchRanges;
Chris@46 49
Chris@46 50 typedef QMap<QString, int> BranchColumnMap;
Chris@46 51 BranchColumnMap m_branchHomes;
Chris@46 52
cannam@45 53 typedef QSet<QString> IdSet;
cannam@45 54 IdSet m_handled;
Chris@46 55
Chris@51 56 typedef QMap<int, QString> RowDateMap;
Chris@51 57 RowDateMap m_rowDates;
Chris@51 58
Chris@46 59 void layoutRow(QString id);
Chris@46 60 void layoutCol(QString id);
Chris@46 61 void allocateBranchHomes(Changesets csets);
Chris@46 62 bool rangesConflict(const Range &r1, const Range &r2);
Chris@46 63 int findAvailableColumn(int row, int parent, bool preferParentCol);
Chris@44 64 };
Chris@44 65
Chris@44 66 #endif