annotate src/changesetview.cpp @ 737:4f3a8aa8d384 tip

Markdown
author Chris Cannam
date Wed, 28 Aug 2019 17:40:54 +0100
parents 744933aba33a
children
rev   line source
Chris@397 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@397 2
Chris@397 3 /*
Chris@397 4 EasyMercurial
Chris@397 5
Chris@397 6 Based on HgExplorer by Jari Korhonen
Chris@397 7 Copyright (c) 2010 Jari Korhonen
Chris@644 8 Copyright (c) 2013 Chris Cannam
Chris@644 9 Copyright (c) 2013 Queen Mary, University of London
Chris@397 10
Chris@397 11 This program is free software; you can redistribute it and/or
Chris@397 12 modify it under the terms of the GNU General Public License as
Chris@397 13 published by the Free Software Foundation; either version 2 of the
Chris@397 14 License, or (at your option) any later version. See the file
Chris@397 15 COPYING included with this distribution for more information.
Chris@397 16 */
Chris@397 17
Chris@397 18 #include "changesetview.h"
Chris@397 19 #include "changesetscene.h"
Chris@397 20 #include "colourset.h"
Chris@397 21 #include "debug.h"
Chris@397 22
Chris@397 23 #include <QScrollBar>
Chris@397 24
Chris@397 25 ChangesetView::ChangesetView() :
Chris@397 26 Panned()
Chris@397 27 {
Chris@397 28 connect(horizontalScrollBar(), SIGNAL(valueChanged(int)),
Chris@397 29 this, SLOT(horizontalScrollHappened()));
Chris@397 30 }
Chris@397 31
Chris@397 32 void
Chris@397 33 ChangesetView::horizontalScrollHappened()
Chris@397 34 {
Chris@397 35 DEBUG << "ChangesetView::horizontalScrollHappened" << endl;
Chris@397 36 invalidateScene(rect(), QGraphicsScene::BackgroundLayer);
Chris@397 37 viewport()->update();
Chris@397 38 }
Chris@397 39
Chris@397 40 void
Chris@397 41 ChangesetView::drawBackground(QPainter *paint, const QRectF &rect)
Chris@397 42 {
Chris@397 43 DEBUG << "ChangesetView::drawBackground" << endl;
Chris@397 44
Chris@397 45 ChangesetScene *cs = qobject_cast<ChangesetScene *>(scene());
Chris@397 46
Chris@397 47 if (!cs) {
Chris@397 48 QGraphicsView::drawBackground(paint, rect);
Chris@397 49 return;
Chris@397 50 }
Chris@397 51
Chris@397 52 DEBUG << "ChangesetView::drawBackground: have scene" << endl;
Chris@397 53
Chris@397 54 ChangesetScene::DateRanges ranges = cs->getDateRanges();
Chris@397 55
Chris@397 56 paint->setClipRect(rect);
Chris@397 57
Chris@397 58 DEBUG << "clip rect is " << rect << endl;
Chris@397 59
Chris@397 60 paint->save();
Chris@721 61 paint->setPen(Qt::black);
Chris@397 62 QFont f(paint->font());
Chris@679 63 f.setPixelSize(11);
Chris@397 64 f.setBold(true);
Chris@683 65 QTransform t = paint->worldTransform();
Chris@683 66 float scale = std::min(t.m11(), t.m22());
Chris@683 67 if (scale > 1.0) {
Chris@683 68 #ifdef Q_OS_WIN32
Chris@683 69 f.setHintingPreference(QFont::PreferVerticalHinting);
Chris@683 70 #endif
Chris@683 71 }
Chris@397 72 paint->setFont(f);
Chris@397 73
Chris@397 74 float x = mapToScene(0, 0).x();
Chris@397 75 float w = mapToScene(width(), 0).x() - x;
Chris@397 76 float px = mapToScene(5, 0).x();
Chris@397 77
Chris@397 78 QBrush oddBrush(QColor::fromRgb(250, 250, 250));
Chris@397 79 QBrush evenBrush(QColor::fromRgb(240, 240, 240));
Chris@397 80
Chris@397 81 //!!! todo: select only the ranges actually within range!
Chris@397 82
Chris@397 83 for (ChangesetScene::DateRanges::const_iterator i = ranges.begin();
Chris@397 84 i != ranges.end(); ++i) {
Chris@397 85
Chris@397 86 ChangesetScene::DateRange range = i.value();
Chris@397 87
Chris@397 88 QRectF r = QRectF(x, range.minrow * 90 - 25,
Chris@397 89 w, range.nrows * 90).normalized();
Chris@397 90
Chris@397 91 paint->fillRect(r, range.even ? evenBrush : oddBrush);
Chris@397 92 paint->drawText(px, range.minrow * 90 - 10, range.label);
Chris@397 93 }
Chris@397 94
Chris@397 95 paint->restore();
Chris@397 96 }
Chris@397 97
Chris@397 98