File indexing completed on 2024-04-28 05:41:36

0001 /*
0002     This file is part of KCachegrind.
0003 
0004     SPDX-FileCopyrightText: 2011-2016 Josef Weidendorfer <Josef.Weidendorfer@gmx.de>
0005 
0006     SPDX-License-Identifier: GPL-2.0-only
0007 */
0008 
0009 /*
0010  * Items of source view.
0011  */
0012 
0013 #ifndef SOURCEITEM_H
0014 #define SOURCEITEM_H
0015 
0016 #include <QTreeWidget>
0017 #include <QItemDelegate>
0018 
0019 #include "tracedata.h"
0020 
0021 class SourceView;
0022 
0023 class SourceItem: public QTreeWidgetItem
0024 {
0025 public:
0026     // for source lines
0027     SourceItem(SourceView* sv, QTreeWidget* parent,
0028                int fileno, unsigned int lineno,
0029                bool inside, const QString& src,
0030                TraceLine* line = nullptr);
0031 
0032     // for call lines
0033     SourceItem(SourceView* sv, QTreeWidgetItem* parent,
0034                int fileno, unsigned int lineno,
0035                TraceLine* line, TraceLineCall* lineCall);
0036 
0037     // for jump lines
0038     SourceItem(SourceView* sv, QTreeWidgetItem* parent,
0039                int fileno, unsigned int lineno,
0040                TraceLine* line, TraceLineJump* lineJump);
0041 
0042     uint lineno() const { return _lineno; }
0043     int fileNumber() const { return _fileno; }
0044     bool inside() const { return _inside; }
0045     TraceLine* line() const { return _line; }
0046     TraceLineCall* lineCall() const { return _lineCall; }
0047     TraceLineJump* lineJump() const { return _lineJump; }
0048     TraceLineJump* jump(int i) const { return _jump[i]; }
0049     int jumpCount() const { return _jump.size(); }
0050     bool operator< ( const QTreeWidgetItem & other ) const override;
0051 
0052     void updateGroup();
0053     void updateCost();
0054 
0055     // arrow lines
0056     void setJumpArray(const QVector<TraceLineJump*>& a);
0057 
0058     QVector<TraceLineJump*> _jump;
0059 
0060 private:
0061     SourceView* _view;
0062     SubCost _pure, _pure2;
0063     uint _lineno;
0064     int _fileno; // for line sorting (even with multiple files)
0065     bool _inside;
0066     TraceLine* _line;
0067     TraceLineJump* _lineJump;
0068     TraceLineCall* _lineCall;
0069 };
0070 
0071 
0072 // Delegate for drawing the arrows column
0073 
0074 class SourceItemDelegate : public QItemDelegate
0075 {
0076     Q_OBJECT
0077 public:
0078     explicit SourceItemDelegate(SourceView *parent);
0079     void paint(QPainter *painter, const QStyleOptionViewItem &option,
0080                const QModelIndex & index ) const override;
0081     QSize sizeHint(const QStyleOptionViewItem &option,
0082                    const QModelIndex &index) const override;
0083     QWidget* createEditor(QWidget *parent,
0084                           const QStyleOptionViewItem &option,
0085                           const QModelIndex &index) const override;
0086 
0087 protected:
0088     void paintArrows(QPainter *p,
0089                      const QStyleOptionViewItem &option,
0090                      const QModelIndex &index) const;
0091 
0092     SourceView* _parent;
0093 };
0094 
0095 
0096 #endif // SOURCEITEM_H