Visually group related port stats

A horizontal line is drawn between groups
This commit is contained in:
Srivats P 2023-03-04 09:57:56 +05:30
parent 4f6749f16d
commit 9849973562
2 changed files with 64 additions and 3 deletions

View File

@ -24,6 +24,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
#include "portstatsfilterdialog.h"
#include "portstatsmodel.h"
#include "portstatsproxymodel.h"
#include "rowborderdelegate.h"
#include "streamstatsmodel.h"
#include "streamstatswindow.h"
#include "settings.h"
@ -55,6 +56,18 @@ PortStatsWindow::PortStatsWindow(PortGroupList *pgl, QWidget *parent)
tvPortStats->verticalHeader()->setDefaultSectionSize(
tvPortStats->verticalHeader()->minimumSectionSize());
// XXX: Set Delegates for port stats view
// RowBorderDelegate: Group related stats by drawing a horizontal line
// IconOnlyDelegate : For status, show only icons not icons+text
int offset = proxyStatsModel ? -1 : 0; // adjust for hidden 'user' row
tvPortStats->setItemDelegate(
new RowBorderDelegate(
QSet<int>({
e_STAT_FRAMES_SENT + offset,
e_STAT_FRAME_SEND_RATE + offset,
e_STAT_RX_DROPS + offset}),
this));
statusDelegate = new IconOnlyDelegate(this);
#if 0
// XXX: Ideally we should use this, but it doesn't work because in
@ -68,9 +81,7 @@ PortStatsWindow::PortStatsWindow(PortGroupList *pgl, QWidget *parent)
statusDelegate);
#else
// ... so we use this hard-coded hack
tvPortStats->setItemDelegateForRow(
proxyStatsModel ? e_COMBO_STATE-1 : e_COMBO_STATE,
statusDelegate);
tvPortStats->setItemDelegateForRow(e_COMBO_STATE + offset, statusDelegate);
#endif
connect(tvPortStats->selectionModel(),

View File

@ -0,0 +1,50 @@
/*
Copyright (C) 2023 Srivats P.
This file is part of "Ostinato"
This 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 3 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, see <http://www.gnu.org/licenses/>
*/
#ifndef _ROW_BORDER_DELEGATE
#define _ROW_BORDER_DELEGATE
#include <QStyledItemDelegate>
#include <QSet>
class RowBorderDelegate : public QStyledItemDelegate
{
public:
RowBorderDelegate(QSet<int> rows, QObject *parent = nullptr)
: QStyledItemDelegate(parent), rows_(rows)
{
}
private:
void paint(QPainter *painter, const QStyleOptionViewItem &option,
const QModelIndex &index) const
{
QStyledItemDelegate::paint(painter, option, index);
if (rows_.contains(index.row())) {
const QRect rect(option.rect);
painter->drawLine(rect.topLeft(), rect.topRight());
}
}
QSet<int> rows_;
};
#endif