#include <KChartGlobal>
#include <KChartLineAttributes>
+#include <KLocalizedString>
#include <QPen>
#include <QBrush>
{
return QColor::fromHsv((1. - double(column + 1) / columnCount) * 255, 255, 255);
}
+
+QVector<ChartRow> columnValue(const ChartRows& data, int column)
+{
+ if (column == ChartModel::LeakedColumn) {
+ return data.leaked;
+ } else if (column == ChartModel::AllocationsColumn) {
+ return data.allocations;
+ } else {
+ return data.allocated;
+ }
+}
+
+ChartRow indexValue(const ChartRows& data, int idx, int column)
+{
+ const auto& values = columnValue(data, column);
+ return idx < values.size() ? values[idx] : ChartRow();
+}
}
ChartModel::ChartModel(QObject* parent)
return {};
}
- if ( role == Qt::ToolTipRole ) {
- // TODO
- return {};
- }
-
const auto& data = m_data.at(index.row());
+
if (column == TimeStampColumn) {
return data.timeStamp;
}
- if (column == LeakedColumn) {
- return idx < data.leaked.size() ? data.leaked[idx].cost : 0;
- } else if (column == AllocationsColumn) {
- return idx < data.allocations.size() ? data.allocations[idx].cost : 0;
- } else {
- return idx < data.allocated.size() ? data.allocated[idx].cost : 0;
+ const auto& chartRow = indexValue(data, idx, column);
+
+ if ( role == Qt::ToolTipRole ) {
+ // TODO: use correct label for column, format cost and time properly in a human readable way
+ return i18n("%1: %2 at %3", chartRow.function, chartRow.cost, data.timeStamp);
}
+
+ return chartRow.cost;
}
int ChartModel::columnCount(const QModelIndex& /*parent*/) const
#include "chartproxy.h"
#include "chartmodel.h"
+#include <QDebug>
+
ChartProxy::ChartProxy(const QString& label, int column, QObject* parent)
: QSortFilterProxyModel(parent)
, m_label(label)
return QSortFilterProxyModel::headerData(section, orientation, role);
}
+QVariant ChartProxy::data(const QModelIndex& proxyIndex, int role) const
+{
+ static_assert(ChartModel::TimeStampColumn == 0, "The code below assumes the time stamp column comes with value 0.");
+ if (role == Qt::ToolTipRole && proxyIndex.column() == 0) {
+ // KChart queries the tooltip for the timestamp column, which is not useful for us
+ // instead, we want to use the m_column, or in proxy column value that is 1
+ return QSortFilterProxyModel::data(index(proxyIndex.row(), 1, proxyIndex.parent()), role);
+ } else {
+ return QSortFilterProxyModel::data(proxyIndex, role);
+ }
+}
+
bool ChartProxy::filterAcceptsColumn(int sourceColumn, const QModelIndex& /*sourceParent*/) const
{
const auto column = sourceColumn % 4;
explicit ChartProxy(const QString& label, int column, QObject* parent = nullptr);
virtual ~ChartProxy();
-protected:
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
+ QVariant data(const QModelIndex & proxyIndex, int role = Qt::DisplayRole) const override;
+
+protected:
bool filterAcceptsColumn(int sourceColumn, const QModelIndex& sourceParent) const override;
private:
int m_column;
};
-#endif //CHARTPROXY_H
\ No newline at end of file
+#endif //CHARTPROXY_H