comparison changesetitem.cpp @ 55:261bfb9481fe

* Make changeset item boxes wider if they have no neighbours. Changeset item code is horrible -- items generally need refactoring to take out hardcoded dimensions.
author Chris Cannam
date Fri, 12 Nov 2010 17:30:53 +0000
parents 0e5fba6750c2
children 1394c8cbf991
comparison
equal deleted inserted replaced
54:0e5fba6750c2 55:261bfb9481fe
4 #include "colourset.h" 4 #include "colourset.h"
5 5
6 #include <QPainter> 6 #include <QPainter>
7 7
8 ChangesetItem::ChangesetItem(Changeset *cs) : 8 ChangesetItem::ChangesetItem(Changeset *cs) :
9 m_changeset(cs), m_column(0), m_row(0) 9 m_changeset(cs), m_column(0), m_row(0), m_wide(false)
10 { 10 {
11 m_font = QFont(); 11 m_font = QFont();
12 m_font.setPixelSize(11); 12 m_font.setPixelSize(11);
13 m_font.setBold(false); 13 m_font.setBold(false);
14 m_font.setItalic(false); 14 m_font.setItalic(false);
15 } 15 }
16 16
17 QRectF 17 QRectF
18 ChangesetItem::boundingRect() const 18 ChangesetItem::boundingRect() const
19 { 19 {
20 return QRectF(-24, -30, 97, 79); 20 int w = 100;
21 if (m_wide) w = 180;
22 return QRectF(-((w-50)/2 - 1), -30, w - 3, 79);
21 } 23 }
22 24
23 void 25 void
24 ChangesetItem::paint(QPainter *paint, const QStyleOptionGraphicsItem *option, 26 ChangesetItem::paint(QPainter *paint, const QStyleOptionGraphicsItem *option,
25 QWidget *w) 27 QWidget *w)
47 } 49 }
48 50
49 paint->setFont(f); 51 paint->setFont(f);
50 QFontMetrics fm(f); 52 QFontMetrics fm(f);
51 int fh = fm.height(); 53 int fh = fm.height();
52 54
53 QRectF r(-24, 0, 97, 49); 55 int width = 100;
56 if (m_wide) width = 180;
57 int x0 = -((width - 50) / 2 - 1);
58
59 QRectF r(x0, 0, width - 3, 49);
54 paint->drawRect(r); 60 paint->drawRect(r);
55 61
56 if (scale < 0.1) { 62 if (scale < 0.1) {
57 paint->restore(); 63 paint->restore();
58 return; 64 return;
60 66
61 if (m_changeset->children().empty()) { 67 if (m_changeset->children().empty()) {
62 f.setBold(true); 68 f.setBold(true);
63 paint->setFont(f); 69 paint->setFont(f);
64 QString branch = m_changeset->branch(); 70 QString branch = m_changeset->branch();
65 int wid = 97; 71 int wid = width - 3;
66 branch = TextAbbrev::abbreviate(branch, QFontMetrics(f), wid); 72 branch = TextAbbrev::abbreviate(branch, QFontMetrics(f), wid);
67 paint->drawText(-24, -fh + fm.ascent() - 4, branch); 73 paint->drawText(x0, -fh + fm.ascent() - 4, branch);
68 f.setBold(false); 74 f.setBold(false);
69 } 75 }
70 76
71 paint->fillRect(QRectF(-23.5, 0.5, 96, fh - 0.5), QBrush(userColour)); 77 paint->fillRect(QRectF(x0 + 0.5, 0.5, width - 4, fh - 0.5),
78 QBrush(userColour));
72 79
73 paint->setPen(QPen(Qt::white)); 80 paint->setPen(QPen(Qt::white));
74 81
75 int wid = 95; 82 int wid = width - 5;
76 QString person = TextAbbrev::abbreviate(m_changeset->authorName(), fm, wid); 83 QString person = TextAbbrev::abbreviate(m_changeset->authorName(), fm, wid);
77 paint->drawText(-21, fm.ascent(), person); 84 paint->drawText(x0 + 3, fm.ascent(), person);
78 85
79 paint->setPen(QPen(Qt::black)); 86 paint->setPen(QPen(Qt::black));
80 87
81 f.setItalic(true); 88 f.setItalic(true);
82 fm = QFontMetrics(f); 89 fm = QFontMetrics(f);
88 comment = comment.replace(QRegExp("^\"\\s*\\**\\s*"), ""); 95 comment = comment.replace(QRegExp("^\"\\s*\\**\\s*"), "");
89 comment = comment.replace(QRegExp("\"$"), ""); 96 comment = comment.replace(QRegExp("\"$"), "");
90 comment = comment.replace("\\\"", "\""); 97 comment = comment.replace("\\\"", "\"");
91 comment = comment.split('\n')[0]; 98 comment = comment.split('\n')[0];
92 99
93 wid = 95; 100 wid = width - 5;
94 comment = TextAbbrev::abbreviate(comment, fm, wid, TextAbbrev::ElideEnd, 101 comment = TextAbbrev::abbreviate(comment, fm, wid, TextAbbrev::ElideEnd,
95 "...", 2); 102 "...", 2);
96 103
97 QStringList lines = comment.split('\n'); 104 QStringList lines = comment.split('\n');
98 for (int i = 0; i < lines.size(); ++i) { 105 for (int i = 0; i < lines.size(); ++i) {
99 paint->drawText(-21, i * fh + fh + fm.ascent(), lines[i].trimmed()); 106 paint->drawText(x0 + 3, i * fh + fh + fm.ascent(), lines[i].trimmed());
100 } 107 }
101 108
102 paint->restore(); 109 paint->restore();
103 } 110 }