summaryrefslogtreecommitdiffstats
path: root/kcachegrind/kcachegrind/callgraphview.h
diff options
context:
space:
mode:
authorTimothy Pearson <kb9vqf@pearsoncomputing.net>2012-01-30 20:20:24 -0600
committerTimothy Pearson <kb9vqf@pearsoncomputing.net>2012-01-30 20:20:24 -0600
commitcfccedd9c8db3af36d7c5635ca212fa170bb6ff5 (patch)
treec80df038c9b6e40b4e28c26203de0dd9b1cd1593 /kcachegrind/kcachegrind/callgraphview.h
parent2020f146a7175288d0aaf15cd91b95e545bbb915 (diff)
downloadtdesdk-cfccedd9c8db3af36d7c5635ca212fa170bb6ff5.tar.gz
tdesdk-cfccedd9c8db3af36d7c5635ca212fa170bb6ff5.zip
Part 2 of prior commit
Diffstat (limited to 'kcachegrind/kcachegrind/callgraphview.h')
-rw-r--r--kcachegrind/kcachegrind/callgraphview.h501
1 files changed, 0 insertions, 501 deletions
diff --git a/kcachegrind/kcachegrind/callgraphview.h b/kcachegrind/kcachegrind/callgraphview.h
deleted file mode 100644
index 4db619db..00000000
--- a/kcachegrind/kcachegrind/callgraphview.h
+++ /dev/null
@@ -1,501 +0,0 @@
-/* This file is part of KCachegrind.
- Copyright (C) 2003 Josef Weidendorfer <Josef.Weidendorfer@gmx.de>
-
- KCachegrind is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public
- License as published by the Free Software Foundation, version 2.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; see the file COPYING. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-/*
- * Callgraph View
- */
-
-#ifndef CALLGRAPHVIEW_H
-#define CALLGRAPHVIEW_H
-
-#include <tqcanvas.h>
-#include <tqwidget.h>
-#include <tqmap.h>
-#include <tqtimer.h>
-
-#include "treemap.h" // for DrawParams
-#include "tracedata.h"
-#include "traceitemview.h"
-
-class TQProcess;
-
-class KTempFile;
-class CanvasNode;
-class CanvasEdge;
-class GraphEdge;
-class CallGraphView;
-
-// sorts according start/end position of a call arc
-// this depends on attached CanvasEdge's !
-class GraphEdgeList: public TQPtrList<GraphEdge>
-{
- public:
- GraphEdgeList();
- void setSortCallerPos(bool b) { _sortCallerPos = b; }
-
- protected:
- int compareItems ( Item item1, Item item2 );
-
- private:
- bool _sortCallerPos;
-};
-
-
-typedef TQMap<GraphEdge*, int> GraphEdgeSet;
-
-// temporary parts of call graph to be shown
-class GraphNode
-{
-public:
- GraphNode();
-
- TraceFunction* function() { return _f; }
- void setFunction(TraceFunction* f) { _f = f; }
-
- CanvasNode* canvasNode() { return _cn; }
- void setCanvasNode(CanvasNode* cn) { _cn = cn; }
-
- bool isVisible() { return _visible; }
- void setVisible(bool v) { _visible = v; }
-
- // keyboard navigation
- TraceCall* visibleCaller();
- TraceCall* visibleCalling();
- void setCalling(GraphEdge*);
- void setCaller(GraphEdge*);
- TraceFunction* nextVisible();
- TraceFunction* priorVisible();
- TraceCall* nextVisibleCaller(GraphEdge*);
- TraceCall* nextVisibleCalling(GraphEdge*);
- TraceCall* priorVisibleCaller(GraphEdge*);
- TraceCall* priorVisibleCalling(GraphEdge*);
-
- double self, incl;
- GraphEdgeList callers, callings;
- // for fast unique insertion of GraphEdges in above lists
- GraphEdgeSet callerSet, callingSet;
-
- private:
- TraceFunction* _f;
- CanvasNode* _cn;
- bool _visible;
-
- // for keyboard navigation
- int _lastCallerIndex, _lastCallingIndex;
- bool _lastFromCaller;
-};
-
-class GraphEdge
-{
-public:
- GraphEdge();
-
- CanvasEdge* canvasEdge() { return _ce; }
- void setCanvasEdge(CanvasEdge* ce) { _ce = ce; }
-
- TraceCall* call() { return _c; }
- void setCall(TraceCall* c) { _c = c; }
-
- bool isVisible() { return _visible; }
- void setVisible(bool v) { _visible = v; }
-
- GraphNode* fromNode() { return _fromNode; }
- GraphNode* toNode() { return _toNode; }
- TraceFunction* from() { return _from; }
- TraceFunction* to() { return _to; }
-
- // has special cases for collapsed edges
- TQString prettyName();
-
- void setCaller(TraceFunction* f) { _from = f; }
- void setCalling(TraceFunction* f) { _to = f; }
- void setCallerNode(GraphNode* n) { _fromNode = n; }
- void setCallingNode(GraphNode* n) { _toNode = n; }
-
- // keyboard navigation
- TraceFunction* visibleCaller();
- TraceFunction* visibleCalling();
- TraceCall* nextVisible();
- TraceCall* priorVisible();
-
- double cost, count;
-
- private:
- // we have a _c *and* _from/_to because for collapsed edges,
- // only _to or _from will be unequal NULL
- TraceCall* _c;
- TraceFunction * _from, * _to;
- GraphNode *_fromNode, *_toNode;
- CanvasEdge* _ce;
- bool _visible;
- // for keyboard navigation: have we last reached this edge via a caller?
- bool _lastFromCaller;
-
-};
-
-
-typedef TQMap<TraceFunction*, GraphNode> GraphNodeMap;
-typedef TQMap<TQPair<TraceFunction*, TraceFunction*>, GraphEdge> GraphEdgeMap;
-
-
-/* Abstract Interface for graph options */
-class GraphOptions
-{
- public:
- enum Layout { TopDown, LeftRight, Circular};
-
- virtual double funcLimit() = 0;
- virtual double callLimit() = 0;
- virtual int maxCallerDepth() = 0;
- virtual int maxCallingDepth() = 0;
- virtual bool showSkipped() = 0;
- virtual bool expandCycles() = 0;
- virtual bool clusterGroups() = 0;
- virtual int detailLevel() = 0;
- virtual Layout layout() = 0;
-
- static TQString layoutString(Layout);
- static Layout layout(TQString);
-};
-
-/* Graph Options Storage */
-class StorableGraphOptions: public GraphOptions
-{
- public:
- StorableGraphOptions();
-
- // implementation of getters
- virtual double funcLimit() { return _funcLimit; }
- virtual double callLimit() { return _callLimit; }
- virtual int maxCallerDepth() { return _maxCallerDepth; }
- virtual int maxCallingDepth() { return _maxCallingDepth; }
- virtual bool showSkipped() { return _showSkipped; }
- virtual bool expandCycles() { return _expandCycles; }
- virtual bool clusterGroups() { return _clusterGroups; }
- virtual int detailLevel() { return _detailLevel; }
- virtual Layout layout() { return _layout; }
-
- // setters
- void setMaxCallerDepth(int d) { _maxCallerDepth = d; }
- void setMaxCallingDepth(int d) { _maxCallingDepth = d; }
- void setFuncLimit(double l) { _funcLimit = l; }
- void setCallLimit(double l) { _callLimit = l; }
- void setShowSkipped(bool b) { _showSkipped = b; }
- void setExpandCycles(bool b) { _expandCycles = b; }
- void setClusterGroups(bool b) { _clusterGroups = b; }
- void setDetailLevel(int l) { _detailLevel = l; }
- void setLayout(Layout l) { _layout = l; }
-
- protected:
- double _funcLimit, _callLimit;
- int _maxCallerDepth, _maxCallingDepth;
- bool _showSkipped, _expandCycles, _clusterGroups;
- int _detailLevel;
- Layout _layout;
-};
-
-/**
- * GraphExporter
- *
- * Generates a graph file for "dot"
- * Create an instance and
- */
-class GraphExporter: public StorableGraphOptions
-{
-public:
- GraphExporter();
- GraphExporter(TraceData*, TraceFunction*, TraceCostType*,
- TraceItem::CostType, TQString filename = TQString());
- virtual ~GraphExporter();
-
- void reset(TraceData*, TraceItem*, TraceCostType*,
- TraceItem::CostType, TQString filename = TQString());
-
- TQString filename() { return _dotName; }
- int edgeCount() { return _edgeMap.count(); }
- int nodeCount() { return _nodeMap.count(); }
-
- // Set the object from which to get graph options for creation.
- // Default is this object itself (supply 0 for default)
- void setGraphOptions(GraphOptions* go = 0);
-
- // Create a subgraph with given limits/maxDepths
- void createGraph();
-
- // calls createGraph before dumping of not already created
- void writeDot();
-
- // to map back to structures when parsing a layouted graph
-
- /* <toFunc> is a helper for node() and edge().
- * Don't use the returned pointer directly, but only with
- * node() or edge(), because it could be a dangling pointer.
- */
- TraceFunction* toFunc(TQString);
- GraphNode* node(TraceFunction*);
- GraphEdge* edge(TraceFunction*, TraceFunction*);
-
- /* After CanvasEdges are attached to GraphEdges, we can
- * sort the incoming and outgoing edges of all nodes
- * regarding start/end points for keyboard navigation
- */
- void sortEdges();
-
-private:
- void buildGraph(TraceFunction*, int, bool, double);
-
- TQString _dotName;
- TraceItem* _item;
- TraceCostType* _costType;
- TraceItem::CostType _groupType;
- KTempFile* _tmpFile;
- double _realFuncLimit, _realCallLimit;
- int _maxDepth;
- bool _graphCreated;
-
- GraphOptions* _go;
-
- // optional graph attributes
- bool _useBox;
-
- // graph parts written to file
- GraphNodeMap _nodeMap;
- GraphEdgeMap _edgeMap;
-};
-
-/**
- * A panner layed over a TQCanvas
- */
-class PannerView: public TQCanvasView
-{
- Q_OBJECT
- TQ_OBJECT
-
-public:
- PannerView(TQWidget * parent = 0, const char * name = 0);
-
- void setZoomRect(TQRect r);
-
-signals:
- void zoomRectMoved(int dx, int dy);
- void zoomRectMoveFinished();
-
-protected:
- void contentsMousePressEvent(TQMouseEvent*);
- void contentsMouseMoveEvent(TQMouseEvent*);
- void contentsMouseReleaseEvent(TQMouseEvent*);
- void drawContents(TQPainter * p, int clipx, int clipy, int clipw, int cliph);
-
- TQRect _zoomRect;
- bool _movingZoomRect;
- TQPoint _lastPos;
-};
-
-
-/*
- * Canvas Items:
- * - CanvasNode (Rectangular Area)
- * - CanvasEdge (Spline curve)
- * - CanvasEdgeLabel (Label for edges)
- * - CanvasEdgeArrow (Arrows at the end of the edge spline)
- * - CanvasFrame (Grey background blending to show active node)
- */
-
-enum {
- CANVAS_NODE = 1122,
- CANVAS_EDGE, CANVAS_EDGELABEL, CANVAS_EDGEARROW,
- CANVAS_FRAME
-};
-
-class CanvasNode: public TQCanvasRectangle, public StoredDrawParams
-{
-public:
- CanvasNode(CallGraphView*,GraphNode*, int, int, int, int, TQCanvas*);
-
- void updateGroup();
- void setSelected(bool);
- void drawShape(TQPainter&);
-
- GraphNode* node() { return _node; }
- int rtti() const { return CANVAS_NODE; }
-
-private:
- GraphNode* _node;
- CallGraphView* _view;
-};
-
-class CanvasEdgeLabel: public TQCanvasRectangle, public StoredDrawParams
-{
-public:
- CanvasEdgeLabel(CallGraphView*, CanvasEdge*, int, int, int, int, TQCanvas*);
-
- void drawShape(TQPainter&);
-
- CanvasEdge* canvasEdge() { return _ce; }
- int rtti() const { return CANVAS_EDGELABEL; }
-
-private:
- CanvasEdge* _ce;
- CallGraphView* _view;
-};
-
-class CanvasEdgeArrow: public TQCanvasPolygon
-{
-public:
- CanvasEdgeArrow(CanvasEdge*, TQCanvas*);
-
- void drawShape(TQPainter&);
-
- CanvasEdge* canvasEdge() { return _ce; }
- int rtti() const { return CANVAS_EDGEARROW; }
-
-private:
- CanvasEdge* _ce;
-};
-
-
-class CanvasEdge: public TQCanvasSpline
-{
-public:
- CanvasEdge(GraphEdge*, TQCanvas*);
-
- void setSelected(bool);
- void drawShape(TQPainter&);
- TQPointArray areaPoints() const;
-
- CanvasEdgeLabel* label() { return _label; }
- void setLabel(CanvasEdgeLabel* l) { _label = l; }
- CanvasEdgeArrow* arrow() { return _arrow; }
- void setArrow(CanvasEdgeArrow* a) { _arrow = a; }
-
- GraphEdge* edge() { return _edge; }
- int rtti() const { return CANVAS_EDGE; }
-
-private:
- GraphEdge* _edge;
- CanvasEdgeLabel* _label;
- CanvasEdgeArrow* _arrow;
-};
-
-
-class CanvasFrame: public TQCanvasRectangle
-{
-public:
- CanvasFrame( CanvasNode*, TQCanvas *canvas );
- int rtti () const { return CANVAS_FRAME; }
- bool hit( const TQPoint&) const { return false; }
-protected:
- void drawShape( TQPainter & );
-private:
- static TQPixmap* _p;
-};
-
-
-class CallGraphTip;
-
-/**
- * A CanvasView showing a part of the call graph
- * and another zoomed out CanvasView in a border acting as
- * a panner to select to visible part (only if needed)
- */
-class CallGraphView: public TQCanvasView, public TraceItemView,
- public StorableGraphOptions
-{
- Q_OBJECT
- TQ_OBJECT
-
-public:
- enum ZoomPosition { TopLeft, TopRight, BottomLeft, BottomRight, Auto };
-
- CallGraphView(TraceItemView* parentView,
- TQWidget* parent=0, const char* name=0);
- ~CallGraphView();
-
- void readViewConfig(KConfig*, TQString prefix, TQString postfix, bool);
- void saveViewConfig(KConfig*, TQString prefix, TQString postfix, bool);
-
- TQWidget* widget() { return this; }
- TQString whatsThis() const;
-
- ZoomPosition zoomPos() const { return _zoomPosition; }
- static ZoomPosition zoomPos(TQString);
- static TQString zoomPosString(ZoomPosition);
-
-public slots:
- void contentsMovingSlot(int,int);
- void zoomRectMoved(int,int);
- void zoomRectMoveFinished();
-
- void showRenderWarning();
- void stopRendering();
- void readDotOutput();
- void dotExited();
-
-protected:
- void resizeEvent(TQResizeEvent*);
- void contentsMousePressEvent(TQMouseEvent*);
- void contentsMouseMoveEvent(TQMouseEvent*);
- void contentsMouseReleaseEvent(TQMouseEvent*);
- void contentsMouseDoubleClickEvent(TQMouseEvent*);
- void contentsContextMenuEvent(TQContextMenuEvent*);
- void keyPressEvent(TQKeyEvent*);
- void focusInEvent(TQFocusEvent*);
- void focusOutEvent(TQFocusEvent*);
-
-private:
- void updateSizes(TQSize s = TQSize(0,0));
- TraceItem* canShow(TraceItem*);
- void doUpdate(int);
- void refresh();
- void makeFrame(CanvasNode*, bool active);
- void clear();
- void showText(TQString);
-
- TQCanvas *_canvas;
- int _xMargin, _yMargin;
- PannerView *_completeView;
- double _cvZoom;
-
- CallGraphTip* _tip;
-
- bool _isMoving;
- TQPoint _lastPos;
-
- GraphExporter _exporter;
-
- GraphNode* _selectedNode;
- GraphEdge* _selectedEdge;
-
- // widget options
- ZoomPosition _zoomPosition, _lastAutoPosition;
-
- // background rendering
- TQProcess* _renderProcess;
- TQTimer _renderTimer;
- GraphNode* _prevSelectedNode;
- TQPoint _prevSelectedPos;
- TQString _unparsedOutput;
-};
-
-
-
-
-#endif
-
-
-