File indexing completed on 2024-04-28 17:02:22

0001 /*
0002    This file is part of Massif Visualizer
0003 
0004    Copyright 2010 Milian Wolff <mail@milianw.de>
0005 
0006    This library is free software; you can redistribute it and/or
0007    modify it under the terms of the GNU Lesser General Public
0008    License as published by the Free Software Foundation; either
0009    version 2.1 of the License, or (at your option) version 3, or any
0010    later version accepted by the membership of KDE e.V. (or its
0011    successor approved by the membership of KDE e.V.), which shall
0012    act as a proxy defined in Section 6 of version 3 of the license.
0013 
0014    This library is distributed in the hope that it will be useful,
0015    but WITHOUT ANY WARRANTY; without even the implied warranty of
0016    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
0017    Lesser General Public License for more details.
0018 
0019    You should have received a copy of the GNU Lesser General Public
0020    License along with this library.  If not, see <http://www.gnu.org/licenses/>.
0021 */
0022 
0023 #ifndef MASSIF_TOTALCOSTMODEL_H
0024 #define MASSIF_TOTALCOSTMODEL_H
0025 
0026 #include <QtCore/QAbstractTableModel>
0027 
0028 #include "modelitem.h"
0029 
0030 namespace Massif {
0031 
0032 class FileData;
0033 class TreeLeafItem;
0034 class SnapshotItem;
0035 
0036 /**
0037  * A model that gives a tabular access on the costs in a massif output file.
0038  */
0039 class TotalCostModel : public QAbstractTableModel
0040 {
0041 public:
0042     TotalCostModel(QObject* parent = 0);
0043     virtual ~TotalCostModel();
0044 
0045     /**
0046      * That the source data for this model.
0047      */
0048     void setSource(const FileData* data);
0049 
0050     /**
0051      * @return Index of the peak dataset.
0052      */
0053     QModelIndex peak() const;
0054 
0055     virtual int columnCount(const QModelIndex& parent = QModelIndex()) const;
0056     virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const;
0057     virtual int rowCount(const QModelIndex& parent = QModelIndex()) const;
0058     virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
0059 
0060     /**
0061      * @return Item for given index. At maximum one of the pointers in the pair will be valid.
0062      */
0063     ModelItem itemForIndex(const QModelIndex& idx) const;
0064 
0065     /**
0066      * @return Index for given item. Only one of the pointers in the pair should be valid.
0067      */
0068     QModelIndex indexForItem(const ModelItem& item) const;
0069 
0070     /**
0071      * @return Index for given snapshot, or invalid if it's not a detailed snapshot.
0072      */
0073     QModelIndex indexForSnapshot(const SnapshotItem* snapshot) const;
0074 
0075     /**
0076      * @return Index for given TreeLeafItem, or invalid if it's not covered by this model.
0077      */
0078     QModelIndex indexForTreeLeaf(const TreeLeafItem* node) const;
0079 
0080     /**
0081      * Select @p index, which changes the graphical representation of its data.
0082      */
0083     void setSelection(const QModelIndex& index);
0084 
0085 private:
0086     const FileData* m_data;
0087     // selected item
0088     QModelIndex m_selection;
0089 };
0090 
0091 }
0092 
0093 #endif // MASSIF_TOTALCOSTMODEL_H