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