Mercurial > hg > easyhg
comparison src/changesetview.cpp @ 397:61bde1f0ff0a item_appearance_adjustments
Replace DateItems (background items for date shading) with a date range list in the scene and dedicated rendering for it in the graphics view: this way we can ensure the shading spans the full width and the dates are always visible
author | Chris Cannam |
---|---|
date | Wed, 25 May 2011 14:32:32 +0100 |
parents | |
children | 533519ebc0cb |
comparison
equal
deleted
inserted
replaced
396:1e73b5911631 | 397:61bde1f0ff0a |
---|---|
1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ | |
2 | |
3 /* | |
4 EasyMercurial | |
5 | |
6 Based on HgExplorer by Jari Korhonen | |
7 Copyright (c) 2010 Jari Korhonen | |
8 Copyright (c) 2011 Chris Cannam | |
9 Copyright (c) 2011 Queen Mary, University of London | |
10 | |
11 This program is free software; you can redistribute it and/or | |
12 modify it under the terms of the GNU General Public License as | |
13 published by the Free Software Foundation; either version 2 of the | |
14 License, or (at your option) any later version. See the file | |
15 COPYING included with this distribution for more information. | |
16 */ | |
17 | |
18 #include "changesetview.h" | |
19 #include "changesetscene.h" | |
20 #include "colourset.h" | |
21 #include "debug.h" | |
22 | |
23 #include <QScrollBar> | |
24 | |
25 ChangesetView::ChangesetView() : | |
26 Panned() | |
27 { | |
28 connect(horizontalScrollBar(), SIGNAL(valueChanged(int)), | |
29 this, SLOT(horizontalScrollHappened())); | |
30 } | |
31 | |
32 void | |
33 ChangesetView::horizontalScrollHappened() | |
34 { | |
35 DEBUG << "ChangesetView::horizontalScrollHappened" << endl; | |
36 invalidateScene(rect(), QGraphicsScene::BackgroundLayer); | |
37 viewport()->update(); | |
38 } | |
39 | |
40 void | |
41 ChangesetView::drawBackground(QPainter *paint, const QRectF &rect) | |
42 { | |
43 DEBUG << "ChangesetView::drawBackground" << endl; | |
44 | |
45 ChangesetScene *cs = qobject_cast<ChangesetScene *>(scene()); | |
46 | |
47 if (!cs) { | |
48 QGraphicsView::drawBackground(paint, rect); | |
49 return; | |
50 } | |
51 | |
52 DEBUG << "ChangesetView::drawBackground: have scene" << endl; | |
53 | |
54 ChangesetScene::DateRanges ranges = cs->getDateRanges(); | |
55 | |
56 paint->setClipRect(rect); | |
57 | |
58 DEBUG << "clip rect is " << rect << endl; | |
59 | |
60 paint->save(); | |
61 QFont f(paint->font()); | |
62 f.setBold(true); | |
63 paint->setFont(f); | |
64 | |
65 float x = mapToScene(0, 0).x(); | |
66 float w = mapToScene(width(), 0).x() - x; | |
67 float px = mapToScene(5, 0).x(); | |
68 | |
69 QBrush oddBrush(QColor::fromRgb(250, 250, 250)); | |
70 QBrush evenBrush(QColor::fromRgb(240, 240, 240)); | |
71 | |
72 //!!! todo: select only the ranges actually within range! | |
73 | |
74 for (ChangesetScene::DateRanges::const_iterator i = ranges.begin(); | |
75 i != ranges.end(); ++i) { | |
76 | |
77 ChangesetScene::DateRange range = i.value(); | |
78 | |
79 QRectF r = QRectF(x, range.minrow * 90 - 25, | |
80 w, range.nrows * 90).normalized(); | |
81 | |
82 paint->fillRect(r, range.even ? evenBrush : oddBrush); | |
83 paint->drawText(px, range.minrow * 90 - 10, range.label); | |
84 } | |
85 | |
86 paint->restore(); | |
87 } | |
88 | |
89 |