3 #include "TreeViewHeader.h"
7 #include <QAbstractItemModel>
8 #include <QFontMetrics>
10 #include <QLinearGradient>
16 #include <QVBoxLayout>
19 #include "TreeViewContent.h"
20 #include "AbstractTreeModel.h"
25 TreeViewHeader::TreeViewHeader(TreeViewContent *someContent,
31 m_headerText =
new QString(
"Header text");
33 m_filterProgressMin = 0;
34 m_filterProgressMax = 0;
35 m_rebuildProgress = 0;
36 m_rebuildProgressMin = 0;
37 m_rebuildProgressMax = 0;
44 TreeViewHeader::TreeViewHeader(
const TreeViewHeader &other) {
47 m_headerText =
new QString(*other.m_headerText);
51 TreeViewHeader::~TreeViewHeader() {
59 QSize TreeViewHeader::minimumSizeHint()
const {
60 return QSize(QFontMetrics(font()).width(*m_headerText) + 15,
61 QFontMetrics(font()).height() + 6);
64 QString TreeViewHeader::getText() {
70 void TreeViewHeader::setText(QString text) {
78 TreeViewHeader &TreeViewHeader::operator=(
79 const TreeViewHeader &other) {
85 m_headerText =
new QString;
86 *m_headerText = *other.m_headerText;
93 void TreeViewHeader::setActive(
bool newActiveState) {
94 m_active = newActiveState;
98 void TreeViewHeader::handleFilterCountsChanged(
99 int visibleTopLevelItemCount,
int topLevelItemCount) {
100 m_visibleCount = visibleTopLevelItemCount;
101 m_totalCount = topLevelItemCount;
107 void TreeViewHeader::mouseReleaseEvent(QMouseEvent *event) {
114 void TreeViewHeader::paintEvent(QPaintEvent *event) {
115 QPainter painter(
this);
116 painter.setRenderHints(QPainter::Antialiasing |
117 QPainter::TextAntialiasing);
118 paintHeader(&painter, height());
119 painter.drawRect(0, 0, width(), height());
124 void TreeViewHeader::nullify() {
129 void TreeViewHeader::paintHeader(QPainter *painter,
int rowHeight) {
130 QRect rect(0, 0, width(), rowHeight);
132 int x = rect.center().x();
133 QLinearGradient gradient(x, rect.top(), x, rect.bottom());
136 bool selected =
false;
137 QColor color = selected ? palette().highlight().color() :
138 palette().button().color();
141 int adjustment = 100;
142 m_active ? adjustment += 7 : adjustment -= 3;
143 gradient.setColorAt(0, color.darker(adjustment));
144 gradient.setColorAt(0.5, color.lighter(adjustment));
145 gradient.setColorAt(1, color.darker(adjustment));
146 painter->fillRect(rect, gradient);
150 QBrush brush = painter->brush();
151 QPainter::CompositionMode compMode = painter->compositionMode();
152 painter->setCompositionMode(QPainter::CompositionMode_SourceOver);
155 painter->setBrush(QBrush(QColor(0, 70, 100, 30)));
156 paintProgress(painter, rect, m_filterProgressMin, m_filterProgressMax,
160 painter->setBrush(QBrush(QColor(100, 70, 0, 30)));
161 paintProgress(painter, rect, m_rebuildProgressMin, m_rebuildProgressMax,
165 painter->setBrush(brush);
166 painter->setCompositionMode(compMode);
167 painter->setPen(selected ? palette().highlightedText().color() :
168 palette().buttonText().color());
170 QString title(*m_headerText);
172 if (m_visibleCount >= 0) {
175 title += QLocale().toString(m_visibleCount);
178 title += QLocale().toString(m_totalCount);
182 painter->drawText(rect, title, QTextOption(Qt::AlignCenter));
186 void TreeViewHeader::paintProgress(QPainter *painter,
const QRect &rect,
187 int min,
int max,
int value) {
189 double progressPercent = 1.0;
190 int progressRange = max - min;
191 if (progressRange > 0)
192 progressPercent = ((double)(value - min)) / progressRange;
194 if (progressPercent < 1.0) {
195 QRect progressRect(rect);
196 progressRect.setWidth((
int)(progressRect.width() * progressPercent));
197 painter->fillRect(progressRect, painter->brush());
202 void TreeViewHeader::updateFilterProgress(
int newProgress) {
203 m_filterProgress = newProgress;
208 void TreeViewHeader::updateFilterProgressRange(
int min,
int max) {
209 m_filterProgressMin = min;
210 m_filterProgressMax = max;
215 void TreeViewHeader::updateRebuildProgress(
int newProgress) {
216 m_rebuildProgress = newProgress;
221 void TreeViewHeader::updateRebuildProgressRange(
int min,
int max) {
222 m_rebuildProgressMin = min;
223 m_rebuildProgressMax = max;