• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdesdk API Reference
  • KDE Home
  • Contact Us
 

kcachegrind

  • sources
  • kde-4.12
  • kdesdk
  • kcachegrind
  • libviews
partview.cpp
Go to the documentation of this file.
1 /* This file is part of KCachegrind.
2  Copyright (C) 2003 Josef Weidendorfer <Josef.Weidendorfer@gmx.de>
3 
4  KCachegrind is free software; you can redistribute it and/or
5  modify it under the terms of the GNU General Public
6  License as published by the Free Software Foundation, version 2.
7 
8  This program is distributed in the hope that it will be useful,
9  but WITHOUT ANY WARRANTY; without even the implied warranty of
10  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11  General Public License for more details.
12 
13  You should have received a copy of the GNU General Public License
14  along with this program; see the file COPYING. If not, write to
15  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
16  Boston, MA 02110-1301, USA.
17 */
18 
19 /*
20  * Part View
21  */
22 
23 
24 #include "partview.h"
25 
26 #include <QAction>
27 #include <QMenu>
28 #include <QTreeWidget>
29 #include <QHeaderView>
30 #include <QKeyEvent>
31 
32 #include "partlistitem.h"
33 #include "toplevelbase.h"
34 
35 
36 //
37 // PartView
38 //
39 
40 
41 PartView::PartView(TraceItemView* parentView, QWidget* parent)
42  : QTreeWidget(parent), TraceItemView(parentView)
43 {
44  _inSelectionUpdate = false;
45 
46  QStringList headerLabels;
47  headerLabels << tr( "Profile Part" )
48  << tr( "Incl." )
49  << tr( "Self" )
50  << tr( "Called" )
51  << tr( "Comment" );
52  setHeaderLabels(headerLabels);
53 
54  setAllColumnsShowFocus(true);
55  setRootIsDecorated(false);
56  setUniformRowHeights(true);
57  // sorting will be enabled after refresh()
58  sortByColumn(0, Qt::DescendingOrder);
59  setMinimumHeight(50);
60  setSelectionMode(QAbstractItemView::ExtendedSelection);
61 
62  connect( this, SIGNAL(itemSelectionChanged()),
63  SLOT( selectionChangedSlot() ) );
64 
65  setContextMenuPolicy(Qt::CustomContextMenu);
66  connect( this,
67  SIGNAL(customContextMenuRequested(const QPoint &) ),
68  SLOT(context(const QPoint &)));
69 
70  connect(header(), SIGNAL(sectionClicked(int)),
71  this, SLOT(headerClicked(int)));
72 
73  setWhatsThis( whatsThis() );
74 }
75 
76 QString PartView::whatsThis() const
77 {
78  return tr( "<b>Trace Part List</b>"
79  "<p>This list shows all trace parts of the loaded "
80  "trace. For each part, the "
81  "self/inclusive cost of the current selected "
82  "function, spent in the part, is shown; "
83  "percentage costs are always relative to the "
84  "total cost <em>of the part</em> (not to the whole "
85  "trace as in the Trace Part Overview). "
86  "Also shown are the calls happening to/from the "
87  "current function inside of the trace part.</p>"
88  "<p>By choosing one or more trace parts from the "
89  "list, the costs shown all over KCachegrind will "
90  "only be the ones spent in the selected part(s). "
91  "If no list selection is shown, in fact all trace "
92  "parts are selected implicitly.</p>"
93  "<p>This is a multi-selection list. You can select "
94  "ranges by dragging the mouse or use SHIFT/CTRL "
95  "modifiers. "
96  "Selection/Deselection of trace parts can also be "
97  "done by using the Trace Part Overview Dockable. "
98  "This one also supports multiple selection.</p>"
99  "<p>Note that the list is hidden if only one trace "
100  "part is loaded.</p>");
101 }
102 
103 
104 void PartView::context(const QPoint & p)
105 {
106  QMenu popup;
107  addGoMenu(&popup);
108 
109  // p is in local coordinates
110  popup.exec(mapToGlobal(p + QPoint(0,header()->height())));
111 }
112 
113 
114 void PartView::selectionChangedSlot()
115 {
116  if (_inSelectionUpdate) return;
117 
118  TracePartList l;
119  QList<QTreeWidgetItem*> sItems = selectedItems();
120  foreach(QTreeWidgetItem* item, sItems)
121  l.append( ((PartListItem*)item)->part() );
122 
123  // nothing selected means all
124  if (l.isEmpty()) l = _data->parts();
125 
126  partsSelected(l);
127 }
128 
129 void PartView::headerClicked(int col)
130 {
131  // name columns should be sortable in both ways
132  if ((col == 0) || (col == 4)) return;
133 
134  // all others only descending
135  sortByColumn(col, Qt::DescendingOrder);
136 }
137 
138 CostItem* PartView::canShow(CostItem* i)
139 {
140  if (!TraceItemView::data()) return 0;
141  if (TraceItemView::data()->parts().count()>1) return i;
142  return 0;
143 }
144 
145 void PartView::doUpdate(int changeType, bool)
146 {
147  // Special case ?
148  if (changeType == eventType2Changed) return;
149  if (changeType == selectedItemChanged) return;
150 
151  if (changeType == groupTypeChanged) {
152  QTreeWidgetItem *item;
153  for (int i=0; i<topLevelItemCount(); i++){
154  item = topLevelItem(i);
155  ((PartListItem*)item)->setGroupType(_groupType);
156  }
157  return;
158  }
159 
160  if (changeType == eventTypeChanged) {
161 #if QT_VERSION >= 0x050000
162  header()->setSectionResizeMode(1, QHeaderView::ResizeToContents);
163  header()->setSectionResizeMode(2, QHeaderView::ResizeToContents);
164 #else
165  header()->setResizeMode(1, QHeaderView::ResizeToContents);
166  header()->setResizeMode(2, QHeaderView::ResizeToContents);
167 #endif
168  // need to disable sorting! Otherwise each change of shown cost
169  // can reorders list and change order returned by topLevelItem()
170  setSortingEnabled(false);
171  for (int i=0; i< topLevelItemCount(); i++) {
172  PartListItem* item = (PartListItem*) topLevelItem(i);
173  item->setEventType(_eventType);
174  }
175 #if QT_VERSION >= 0x050000
176  header()->setSectionResizeMode(1, QHeaderView::Interactive);
177  header()->setSectionResizeMode(2, QHeaderView::Interactive);
178 #else
179  header()->setResizeMode(1, QHeaderView::Interactive);
180  header()->setResizeMode(2, QHeaderView::Interactive);
181 #endif
182  setSortingEnabled(true);
183  header()->setSortIndicatorShown(false);
184 
185  return;
186  }
187 
188  if (changeType == partsChanged) {
189 
190  TracePart* part;
191 
192  _inSelectionUpdate = true;
193  for (int i=0; i< topLevelItemCount(); i++) {
194  PartListItem* item = (PartListItem*) topLevelItem(i);
195  part = ((PartListItem*)item)->part();
196 
197  if (_partList.contains(part)) {
198  item->setSelected(true);
199  scrollToItem(item);
200  }
201  else
202  item->setSelected(false);
203  }
204  _inSelectionUpdate = false;
205 
206  return;
207  }
208 
209  refresh();
210 }
211 
212 void PartView::refresh()
213 {
214  setColumnWidth(1, 50);
215  setColumnWidth(2, 50);
216 
217  if (!_data || !_activeItem) {
218  clear();
219  return;
220  }
221 
222  ProfileContext::Type t = _activeItem->type();
223  TraceFunction* f = 0;
224  if (t == ProfileContext::Function) f = (TraceFunction*) _activeItem;
225  if (!f) return;
226 
227  TracePartList hidden;
228  if (_topLevel)
229  hidden = _topLevel->hiddenParts();
230 
231  _inSelectionUpdate = true;
232  clear();
233 
234  QList<QTreeWidgetItem*> items;
235  QTreeWidgetItem* item;
236  foreach(TracePart* part, _data->parts()) {
237  if (hidden.contains(part)) continue;
238  item = new PartListItem(0, f, _eventType, _groupType, part);
239  items.append(item);
240  }
241  setSortingEnabled(false);
242  addTopLevelItems(items);
243  setSortingEnabled(true);
244  header()->setSortIndicatorShown(false);
245  header()->resizeSections(QHeaderView::ResizeToContents);
246 
247  foreach(item, items) {
248  TracePart* part = ((PartListItem*)item)->part();
249  if (hidden.contains(part)) continue;
250  if (part->isActive()) {
251  item->setSelected(true);
252  scrollToItem(item);
253  }
254  }
255 
256  _inSelectionUpdate = false;
257 }
258 
259 #include "partview.moc"
TraceItemView::selectedItemChanged
Definition: traceitemview.h:86
TraceItemView::_topLevel
TopLevelBase * _topLevel
Definition: traceitemview.h:207
partlistitem.h
TraceItemView::partsSelected
virtual void partsSelected(TraceItemView *sender, const TracePartList &)
Definition: traceitemview.cpp:326
QTreeWidget
PartView::whatsThis
QString whatsThis() const
Definition: partview.cpp:76
CostItem::type
ProfileContext::Type type() const
Definition: costitem.h:45
QWidget
TraceFunction
A traced function.
Definition: tracedata.h:1122
TraceItemView::_data
TraceData * _data
Definition: traceitemview.h:209
PartListItem
For info tab, trace part list.
Definition: partlistitem.h:33
TraceItemView::addGoMenu
void addGoMenu(QMenu *)
Definition: traceitemview.cpp:461
CostItem
Base class for cost items.
Definition: costitem.h:37
TracePart::part
virtual TracePart * part()
Definition: tracedata.h:661
TraceItemView::_groupType
ProfileContext::Type _groupType
Definition: traceitemview.h:213
PartListItem::setEventType
void setEventType(EventType *ct)
Definition: partlistitem.cpp:56
PartView::refresh
void refresh()
Definition: partview.cpp:212
TraceItemView
Abstract Base Class for KCachegrind Views.
Definition: traceitemview.h:70
TraceData::parts
TracePartList parts() const
Definition: tracedata.h:1397
TraceItemView::_eventType
EventType * _eventType
Definition: traceitemview.h:212
TraceItemView::partsChanged
Definition: traceitemview.h:84
toplevelbase.h
TopLevelBase::hiddenParts
virtual TracePartList hiddenParts()=0
TraceItemView::_activeItem
CostItem * _activeItem
Definition: traceitemview.h:211
TraceItemView::eventTypeChanged
Definition: traceitemview.h:81
TraceItemView::data
TraceData * data() const
Definition: traceitemview.h:148
QTreeWidgetItem
TracePart::isActive
bool isActive() const
Definition: tracedata.h:690
TracePart
A Trace Part: All data read from a trace file, containing all costs that happened in a specified time...
Definition: tracedata.h:655
ProfileContext::Type
Type
Definition: context.h:36
TraceItemView::groupTypeChanged
Definition: traceitemview.h:83
TracePartList
QList< TracePart * > TracePartList
Definition: tracedata.h:176
TraceItemView::eventType2Changed
Definition: traceitemview.h:82
partview.h
TraceItemView::_partList
TracePartList _partList
Definition: traceitemview.h:210
PartView::PartView
PartView(TraceItemView *parentView, QWidget *parent=0)
Definition: partview.cpp:41
ProfileContext::Function
Definition: context.h:46
QList
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 23:03:27 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

kcachegrind

Skip menu "kcachegrind"
  • Main Page
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members

kdesdk API Reference

Skip menu "kdesdk API Reference"
  • kapptemplate
  • kcachegrind
  • kompare
  • lokalize
  • okteta
  • umbrello
  •   umbrello

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal