diff options
author | Roland Knall <roland.knall@br-automation.com> | 2017-07-25 16:47:16 +0200 |
---|---|---|
committer | Roland Knall <rknall@gmail.com> | 2017-07-26 12:22:04 +0000 |
commit | 02e80019f2dc8f01e51d8bdc62a1cabff69fd51e (patch) | |
tree | 7cc68dab8e8ac9713b8c50176dd52fc36c0c0b11 /ui/qt/models/sparkline_delegate.cpp | |
parent | ea998190cfe5a051224490172cfaedc69b777ff6 (diff) |
Qt: Create models directory
Following the move for widgets and utils directory, moving models
and delegates to the utils directory. Guidelines for this directory are:
- Implementation of a model
- Implementation of a delegate
- Utility class for data storage used by a model
Note: additionally all includes affected by this move have been changed
to absolute path includes, instead of relative ones.
Change-Id: I3bb868af7d3570437682b722a0cd46c906628570
Reviewed-on: https://code.wireshark.org/review/22790
Reviewed-by: Roland Knall <rknall@gmail.com>
Diffstat (limited to 'ui/qt/models/sparkline_delegate.cpp')
-rw-r--r-- | ui/qt/models/sparkline_delegate.cpp | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/ui/qt/models/sparkline_delegate.cpp b/ui/qt/models/sparkline_delegate.cpp new file mode 100644 index 0000000000..2c3fc9c232 --- /dev/null +++ b/ui/qt/models/sparkline_delegate.cpp @@ -0,0 +1,120 @@ +/* sparkline_delegate.cpp + * + * Wireshark - Network traffic analyzer + * By Gerald Combs <gerald@wireshark.org> + * Copyright 1998 Gerald Combs + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include <ui/qt/models/sparkline_delegate.h> + +#include <QPainter> +#include <QApplication> + +#define SPARKLINE_MIN_EM_WIDTH 10 + +void SparkLineDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, + const QModelIndex &index) const +{ + QList<int> points = qvariant_cast<QList<int> >(index.data(Qt::UserRole)); + int max = 1; + int em_w = option.fontMetrics.height(); + int content_w = option.rect.width() - (em_w / 4); + int content_h = option.fontMetrics.ascent() - 1; + int val; + qreal idx = 0.0; + qreal step_w = em_w / 10.0; + qreal steps = content_w / step_w; + QVector<QPointF> fpoints; + + QStyledItemDelegate::paint(painter, option, index); + + if (points.isEmpty() || steps < 1.0 || content_h <= 0) { + return; + } + + while((qreal) points.length() > steps) { + points.removeFirst(); + } + + foreach (val, points) { + if (val > max) max = val; + } + + foreach (val, points) { + fpoints.append(QPointF(idx, (qreal) content_h - (val * content_h / max))); + idx = idx + step_w; + } + + QStyleOptionViewItem option_vi = option; + QStyledItemDelegate::initStyleOption(&option_vi, index); + + painter->save(); + + if (QApplication::style()->objectName().contains("vista")) { + // QWindowsVistaStyle::drawControl does this internally. Unfortunately there + // doesn't appear to be a more general way to do this. + option_vi.palette.setColor(QPalette::All, QPalette::HighlightedText, option_vi.palette.color(QPalette::Active, QPalette::Text)); + } + + QPalette::ColorGroup cg = option_vi.state & QStyle::State_Enabled + ? QPalette::Normal : QPalette::Disabled; + if (cg == QPalette::Normal && !(option_vi.state & QStyle::State_Active)) + cg = QPalette::Inactive; + if (option_vi.state & QStyle::State_Selected) { + painter->setPen(option_vi.palette.color(cg, QPalette::HighlightedText)); + } else { + painter->setPen(option_vi.palette.color(cg, QPalette::Text)); + } + + painter->setRenderHint(QPainter::Antialiasing, true); + painter->translate( + option.rect.x() + (em_w / 8) + 0.5, + option.rect.y() + ((option.rect.height() - option.fontMetrics.height()) / 2) + 1 + 0.5); + painter->drawPolyline(QPolygonF(fpoints)); + +// painter->setPen(Qt::NoPen); +// painter->setBrush(option.palette.foreground()); +// painter->drawEllipse(fpoints.first(), 2, 2); + +// painter->setBrush(Qt::red); +// painter->drawEllipse(fpoints.last(), 2, 2); + + painter->restore(); +} + +QSize SparkLineDelegate::sizeHint(const QStyleOptionViewItem &option, + const QModelIndex &index) const { + return QSize(option.fontMetrics.height() * SPARKLINE_MIN_EM_WIDTH, QStyledItemDelegate::sizeHint(option, index).height()); +} + +QWidget *SparkLineDelegate::createEditor(QWidget *, const QStyleOptionViewItem &, const QModelIndex &) const +{ + return NULL; +} + +/* + * Editor modelines + * + * Local Variables: + * c-basic-offset: 4 + * tab-width: 8 + * indent-tabs-mode: nil + * End: + * + * ex: set shiftwidth=4 tabstop=8 expandtab: + * :indentSize=4:tabSize=8:noTabs=true: + */ |