Chris@44: #ifndef GRAPHER_H Chris@44: #define GRAPHER_H Chris@44: Chris@44: #include "changeset.h" Chris@44: #include "changesetitem.h" Chris@44: cannam@45: #include cannam@45: #include Chris@46: #include cannam@45: cannam@45: #include Chris@44: Chris@44: class Grapher Chris@44: { Chris@44: public: cannam@45: Grapher(QGraphicsScene *scene) { m_scene = scene; } cannam@45: cannam@45: void layout(Changesets csets); cannam@45: Chris@53: ChangesetItem *getItemFor(Changeset *cs); Chris@53: cannam@45: class LayoutException : public std::exception { cannam@45: public: cannam@45: LayoutException(QString message) throw() : m_message(message) { } cannam@45: virtual ~LayoutException() throw() { } cannam@45: virtual const char *what() const throw() { cannam@45: return m_message.toLocal8Bit().data(); cannam@45: } cannam@45: protected: cannam@45: QString m_message; cannam@45: }; cannam@45: cannam@45: private: cannam@45: QGraphicsScene *m_scene; cannam@45: cannam@45: typedef QMap IdChangesetMap; Chris@46: IdChangesetMap m_changesets; cannam@45: cannam@45: typedef QMap IdItemMap; cannam@45: IdItemMap m_items; cannam@45: cannam@45: typedef QSet ColumnSet; cannam@45: typedef QMap GridAlloc; cannam@45: GridAlloc m_alloc; cannam@45: Chris@46: typedef QPair Range; Chris@46: typedef QMap BranchRangeMap; Chris@46: BranchRangeMap m_branchRanges; Chris@46: Chris@46: typedef QMap BranchColumnMap; Chris@46: BranchColumnMap m_branchHomes; Chris@46: cannam@45: typedef QSet IdSet; cannam@45: IdSet m_handled; Chris@46: Chris@51: typedef QMap RowDateMap; Chris@51: RowDateMap m_rowDates; Chris@51: Chris@46: void layoutRow(QString id); Chris@46: void layoutCol(QString id); Chris@46: void allocateBranchHomes(Changesets csets); Chris@46: bool rangesConflict(const Range &r1, const Range &r2); Chris@46: int findAvailableColumn(int row, int parent, bool preferParentCol); Chris@44: }; Chris@44: Chris@44: #endif