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

0001 /*
0002     This file is part of KCachegrind.
0003 
0004     SPDX-FileCopyrightText: 2003-2016 Josef Weidendorfer <Josef.Weidendorfer@gmx.de>
0005 
0006     SPDX-License-Identifier: GPL-2.0-only
0007 */
0008 
0009 /*
0010  * TracePart Graph
0011  */
0012 
0013 #ifndef PARTGRAPH_H
0014 #define PARTGRAPH_H
0015 
0016 #include <QPixmap>
0017 
0018 #include "treemap.h"
0019 #include "tracedata.h"
0020 
0021 class PartAreaWidget: public TreeMapWidget
0022 {
0023     Q_OBJECT
0024 
0025 public:
0026     // Visualization inside of trace parts
0027     enum VisualizationMode { NoVisualization, Partitioning, Inclusive };
0028 
0029     explicit PartAreaWidget(QWidget* parent=nullptr);
0030 
0031     void setData(TraceData* d);
0032     void setEventType(EventType* ct);
0033     void setGroupType(ProfileContext::Type gt);
0034     void setVisualization(VisualizationMode);
0035     void setZoomFunction(bool zoomFunction);
0036     void setCallLevels(int callLevels);
0037     void setFunction(TraceFunction* f);
0038 
0039     EventType* eventType() const { return _eventType; }
0040     ProfileContext::Type groupType() const { return _groupType; }
0041     TraceFunction* function() const { return _function; }
0042     VisualizationMode visualization() const { return _visualization; }
0043     bool zoomFunction() const { return _zoomFunction; }
0044     int callLevels() const { return _callLevels; }
0045 
0046     QColor groupColor(TraceFunction*) const;
0047     QString tipString(TreeMapItem*) const override;
0048 
0049     void changeHidden(const TracePartList& list);
0050     bool isHidden(TracePart*) const;
0051 
0052 private:
0053     void refreshParts();
0054 
0055     TraceData* _data;
0056     EventType* _eventType;
0057     ProfileContext::Type _groupType;
0058     TraceFunction* _function;
0059     VisualizationMode _visualization;
0060     bool _zoomFunction;
0061     int _callLevels;
0062 
0063     TracePartList _hiddenParts;
0064 };
0065 
0066 class BasePartItem: public TreeMapItem
0067 {
0068 public:
0069     BasePartItem();
0070 
0071     void setData(TraceData* d);
0072 
0073     int rtti() const override { return 1; }
0074     double value() const override;
0075     QString text(int) const override;
0076     int borderWidth() const override { return 0; }
0077     TreeMapItemList* children() override;
0078     QColor backColor() const override;
0079 
0080 private:
0081     TraceData* _data;
0082 };
0083 
0084 class PartItem: public TreeMapItem
0085 {
0086 public:
0087     explicit PartItem(TracePart* p);
0088     int rtti() const override { return 2; }
0089     TracePart* part() { return _p; }
0090     double value() const override;
0091     double sum() const override;
0092     int borderWidth() const override { return 0; }
0093     QString text(int) const override;
0094     QPixmap pixmap(int) const override;
0095     TreeMapItemList* children() override;
0096     QColor backColor() const override;
0097 
0098 private:
0099     TracePart* _p;
0100     unsigned int _factor;
0101 };
0102 
0103 class SubPartItem: public TreeMapItem
0104 {
0105 public:
0106     explicit SubPartItem(ProfileCostArray*);
0107     int rtti() const override { return 3; }
0108     ProfileCostArray* partCostItem() { return _partCostItem; }
0109     double value() const override;
0110     double sum() const override;
0111     SplitMode splitMode() const override { return Vertical; }
0112     QString text(int) const override;
0113     QPixmap pixmap(int) const override;
0114     TreeMapItemList* children() override;
0115     QColor backColor() const override;
0116 
0117 private:
0118     ProfileCostArray* _partCostItem;
0119     unsigned int _factor;
0120 };
0121 
0122 
0123 #endif