annotate grapher.h @ 96:87ef2fa9ee8b

* Rename HgExpWidget to HgTabWidget
author Chris Cannam
date Wed, 24 Nov 2010 16:40:57 +0000
parents f583e44d9d31
children 005a54380502
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@57 8 Copyright (c) 2010 Chris Cannam
Chris@57 9 Copyright (c) 2010 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@44 18 #ifndef GRAPHER_H
Chris@44 19 #define GRAPHER_H
Chris@44 20
Chris@44 21 #include "changeset.h"
Chris@44 22 #include "changesetitem.h"
Chris@44 23
cannam@45 24 #include <QSet>
cannam@45 25 #include <QMap>
Chris@46 26 #include <QPair>
cannam@45 27
cannam@45 28 #include <exception>
Chris@44 29
Chris@44 30 class Grapher
Chris@44 31 {
Chris@44 32 public:
cannam@45 33 Grapher(QGraphicsScene *scene) { m_scene = scene; }
cannam@45 34
cannam@45 35 void layout(Changesets csets);
cannam@45 36
Chris@53 37 ChangesetItem *getItemFor(Changeset *cs);
Chris@53 38
cannam@45 39 class LayoutException : public std::exception {
cannam@45 40 public:
cannam@45 41 LayoutException(QString message) throw() : m_message(message) { }
cannam@45 42 virtual ~LayoutException() throw() { }
cannam@45 43 virtual const char *what() const throw() {
cannam@45 44 return m_message.toLocal8Bit().data();
cannam@45 45 }
cannam@45 46 protected:
cannam@45 47 QString m_message;
cannam@45 48 };
cannam@45 49
cannam@45 50 private:
cannam@45 51 QGraphicsScene *m_scene;
cannam@45 52
cannam@45 53 typedef QMap<QString, Changeset *> IdChangesetMap;
Chris@46 54 IdChangesetMap m_changesets;
cannam@45 55
cannam@45 56 typedef QMap<QString, ChangesetItem *> IdItemMap;
cannam@45 57 IdItemMap m_items;
cannam@45 58
cannam@45 59 typedef QSet<int> ColumnSet;
cannam@45 60 typedef QMap<int, ColumnSet> GridAlloc;
cannam@45 61 GridAlloc m_alloc;
cannam@45 62
Chris@46 63 typedef QPair<int, int> Range;
Chris@46 64 typedef QMap<QString, Range> BranchRangeMap;
Chris@46 65 BranchRangeMap m_branchRanges;
Chris@46 66
Chris@46 67 typedef QMap<QString, int> BranchColumnMap;
Chris@46 68 BranchColumnMap m_branchHomes;
Chris@46 69
cannam@45 70 typedef QSet<QString> IdSet;
cannam@45 71 IdSet m_handled;
Chris@46 72
Chris@51 73 typedef QMap<int, QString> RowDateMap;
Chris@51 74 RowDateMap m_rowDates;
Chris@51 75
Chris@46 76 void layoutRow(QString id);
Chris@46 77 void layoutCol(QString id);
Chris@46 78 void allocateBranchHomes(Changesets csets);
Chris@46 79 bool rangesConflict(const Range &r1, const Range &r2);
Chris@46 80 int findAvailableColumn(int row, int parent, bool preferParentCol);
Chris@44 81 };
Chris@44 82
Chris@44 83 #endif