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

kcachegrind

  • sources
  • kde-4.14
  • kdesdk
  • kcachegrind
  • libviews
eventtypeview.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  * Event Type View
21  */
22 
23 
24 #include "eventtypeview.h"
25 
26 #include <QAction>
27 #include <QMenu>
28 #include <QHeaderView>
29 
30 #include "eventtypeitem.h"
31 #include "toplevelbase.h"
32 
33 
34 //
35 // EventTypeView
36 //
37 
38 EventTypeView::EventTypeView(TraceItemView* parentView,
39  QWidget* parent, const char* name)
40  : QTreeWidget(parent), TraceItemView(parentView)
41 {
42  setObjectName(name);
43  // forbid scaling icon pixmaps to smaller size
44  setIconSize(QSize(99,99));
45  setColumnCount(6);
46  QStringList labels;
47  labels << tr( "Event Type" )
48  << tr( "Incl." )
49  << tr( "Self" )
50  << tr( "Short" )
51  << QString()
52  << tr( "Formula" );
53  setHeaderLabels(labels);
54  // reduce minimum width for '=' column
55  header()->setMinimumSectionSize(10);
56 
57  setRootIsDecorated(false);
58  setSortingEnabled(false);
59  setAllColumnsShowFocus(true);
60  setMinimumHeight(50);
61 
62 
63  setContextMenuPolicy(Qt::CustomContextMenu);
64  connect( this,
65  SIGNAL(customContextMenuRequested(const QPoint &)),
66  SLOT(context(const QPoint &)));
67 
68  // FIXME: Endless jumping among 2 types possible!
69  connect( this,
70  SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)),
71  SLOT(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)) );
72 
73  connect(this,
74  SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)),
75  SLOT(itemDoubleClicked(QTreeWidgetItem*,int)));
76 
77  connect(this,
78  SIGNAL(itemChanged(QTreeWidgetItem*,int)),
79  SLOT(itemChanged(QTreeWidgetItem*,int)));
80 
81  setWhatsThis( whatsThis() );
82 }
83 
84 QString EventTypeView::whatsThis() const
85 {
86  return tr( "<b>Cost Types List</b>"
87  "<p>This list shows all cost types available "
88  "and what the self/inclusive cost of the "
89  "current selected function is for that cost type.</p>"
90  "<p>By choosing a cost type from the list, "
91  "you change the cost type of costs shown "
92  "all over KCachegrind to be the selected one.</p>");
93 }
94 
95 
96 void EventTypeView::context(const QPoint & p)
97 {
98  QMenu popup;
99 
100  QTreeWidgetItem* i = itemAt(p);
101  EventType* ct = i ? ((EventTypeItem*) i)->eventType() : 0;
102 
103  QAction* selectType2Action = 0;
104  QAction* hideType2Action = 0;
105  if (ct)
106  selectType2Action = popup.addAction(tr("Set as Secondary Event Type"));
107  if (_eventType2)
108  hideType2Action = popup.addAction(tr("Hide Secondary Event Type"));
109  if (!popup.isEmpty())
110  popup.addSeparator();
111 
112  QAction* editLongNameAction = 0;
113  QAction* editShortNameAction = 0;
114  QAction* editFormulaAction = 0;
115  QAction* removeTypeAction = 0;
116  if (ct && !ct->isReal()) {
117  editLongNameAction = popup.addAction(tr("Edit Long Name"));
118  editShortNameAction = popup.addAction(tr("Edit Short Name"));
119  editFormulaAction = popup.addAction(tr("Edit Formula"));
120  removeTypeAction = popup.addAction(tr("Remove"));
121  popup.addSeparator();
122  }
123 
124  addGoMenu(&popup);
125 
126  QAction* newTypeAction = 0;
127  if( _data) {
128  popup.addSeparator();
129  newTypeAction = popup.addAction(tr("New Event Type..."));
130  }
131 
132  QAction* a = popup.exec(viewport()->mapToGlobal(p));
133  if (a == hideType2Action) selectedEventType2(0);
134  else if (a == selectType2Action) selectedEventType2(ct);
135  else if (a == editLongNameAction) editItem(i, 0);
136  else if (a == editShortNameAction) editItem(i, 3);
137  else if (a == editFormulaAction) editItem(i, 5);
138  else if (a == removeTypeAction) {
139 
140  // search for a previous type
141  EventType* prev = 0, *ct = 0;
142  EventTypeSet* m = _data->eventTypes();
143  for (int i=0;i<m->realCount();i++) {
144  ct = m->realType(i);
145  if (ct) prev = ct;
146  }
147  for (int i=0;i<m->derivedCount();i++) {
148  ct = m->derivedType(i);
149  if (ct == _eventType) break;
150  if (ct) prev = ct;
151  }
152 
153  if (_data->eventTypes()->remove(ct)) {
154  // select previous cost type
155  selectedEventType(prev);
156  if (_eventType2 == ct)
157  selectedEventType2(prev);
158  refresh();
159  }
160  }
161  else if (a == newTypeAction) {
162  int i = 1;
163  while(1) {
164  if (!EventType::knownDerivedType(tr("New%1").arg(i)))
165  break;
166  i++;
167  }
168  // add same new cost type to this set and to known types
169  QString shortName = tr("New%1").arg(i);
170  QString longName = tr("New Event Type %1").arg(i);
171  EventType* et;
172  et = new EventType(shortName, longName);
173  et->setFormula(QString()); // event is derived
174  EventType::add(et);
175  // EventType::add() took ownership, need new object
176  et = new EventType(shortName, longName);
177  et->setFormula(QString()); // event is derived
178  _data->eventTypes()->add(et);
179  refresh();
180  }
181 }
182 
183 
184 void EventTypeView::currentItemChanged(QTreeWidgetItem* i, QTreeWidgetItem*)
185 {
186  EventType* ct = i ? ((EventTypeItem*) i)->eventType() : 0;
187  if (ct)
188  selectedEventType(ct);
189 }
190 
191 void EventTypeView::itemDoubleClicked(QTreeWidgetItem* i, int)
192 {
193  EventType* ct = i ? ((EventTypeItem*) i)->eventType() : 0;
194  if (ct)
195  selectedEventType2(ct);
196 }
197 
198 CostItem* EventTypeView::canShow(CostItem* i)
199 {
200  if (!i) return 0;
201 
202  switch(i->type()) {
203  case ProfileContext::Object:
204  case ProfileContext::Class:
205  case ProfileContext::File:
206  case ProfileContext::Call:
207  case ProfileContext::FunctionCycle:
208  case ProfileContext::Function:
209  break;
210  default:
211  return 0;
212  }
213  return i;
214 }
215 
216 void EventTypeView::doUpdate(int changeType, bool)
217 {
218  // Special case ?
219  if (changeType == selectedItemChanged) return;
220 
221  if (changeType == eventType2Changed) return;
222 
223  if (changeType == groupTypeChanged) {
224  for(int i = 0; i < topLevelItemCount(); i++)
225  ((EventTypeItem*)topLevelItem(i))->setGroupType(_groupType);
226 
227  return;
228  }
229 
230  if (changeType == eventTypeChanged) {
231  for(int i = 0; i < topLevelItemCount(); i++) {
232  EventTypeItem* item = (EventTypeItem*)topLevelItem(i);
233  if ( item->eventType() == _eventType) {
234  setCurrentItem(item);
235  scrollToItem(item);
236  break;
237  }
238  }
239 
240  return;
241  }
242 
243  if (changeType == partsChanged) {
244  for(int i = 0; i < topLevelItemCount(); i++)
245  ((EventTypeItem*)topLevelItem(i))->update();
246 
247  resizeColumnToContents(1);
248  resizeColumnToContents(2);
249  return;
250  }
251 
252 
253  refresh();
254 }
255 
256 void EventTypeView::refresh()
257 {
258  clear();
259  setColumnWidth(1, 50);
260  setColumnWidth(2, 50);
261 
262  if (!_data || !_activeItem) return;
263  switch(_activeItem->type()) {
264  case ProfileContext::Object:
265  case ProfileContext::Class:
266  case ProfileContext::File:
267  case ProfileContext::FunctionCycle:
268  case ProfileContext::Function:
269  break;
270  default:
271  return;
272  }
273  TraceCostItem* c = (TraceCostItem*) _activeItem;
274 
275  EventType* ct =0;
276  QTreeWidgetItem* item = 0;
277  QTreeWidgetItem* selected = 0;
278  QList<QTreeWidgetItem*> items;
279  QString sumStr, pureStr;
280 
281  EventTypeSet* m = _data->eventTypes();
282  for (int i=0; i<m->realCount();i++) {
283  ct = m->realType(i);
284  item = new EventTypeItem(c, ct, _groupType);
285  if (ct == _eventType) selected = item;
286  items.append(item);
287  }
288  for (int i=0; i<m->derivedCount();i++) {
289  ct = m->derivedType(i);
290  if (!ct) continue;
291  item = new EventTypeItem(c, ct, _groupType);
292  if (ct == _eventType) selected = item;
293  items.append(item);
294  }
295  insertTopLevelItems(0,items);
296 
297  if (selected) {
298  setCurrentItem(selected);
299  scrollToItem(selected);
300  }
301 
302  for(int c = 0; c<6; c++)
303  resizeColumnToContents(c);
304 }
305 
306 void EventTypeView::itemChanged(QTreeWidgetItem* item, int c)
307 {
308  EventType* ct = item ? ((EventTypeItem*) item)->eventType() : 0;
309  if (!ct || ct->isReal()) return;
310 
311  // search for matching known Type
312  int knownCount = EventType::knownTypeCount();
313  EventType* known = 0;
314  for (int i=0; i<knownCount; i++) {
315  known = EventType::knownType(i);
316  if (known->name() == ct->name()) break;
317  }
318 
319  QString t = item->text(c);
320  if (c == 0) {
321  ct->setLongName(t);
322  if (known) known->setLongName(t);
323  }
324  else if (c == 3) {
325  ct->setName(t);
326  if (known) known->setName(t);
327  }
328  else if (c == 5) {
329  ct->setFormula(t);
330  if (known) known->setFormula(t);
331  }
332  else return;
333 
334  if (_topLevel) _topLevel->configChanged();
335  refresh();
336 }
337 
338 #include "eventtypeview.moc"
QWidget::customContextMenuRequested
void customContextMenuRequested(const QPoint &pos)
TraceItemView::selectedItemChanged
Definition: traceitemview.h:86
TraceItemView::_topLevel
TopLevelBase * _topLevel
Definition: traceitemview.h:207
EventTypeSet::realCount
int realCount()
Definition: eventtype.h:133
QWidget
TraceItemView::selectedEventType2
virtual void selectedEventType2(TraceItemView *sender, EventType *)
Definition: traceitemview.cpp:370
ProfileContext::FunctionCycle
Definition: context.h:46
ProfileContext::File
Definition: context.h:48
QTreeWidget::scrollToItem
void scrollToItem(const QTreeWidgetItem *item, QAbstractItemView::ScrollHint hint)
CostItem::type
ProfileContext::Type type() const
Definition: costitem.h:45
TraceItemView::_data
TraceData * _data
Definition: traceitemview.h:209
TraceCostItem
Definition: tracedata.h:980
TraceItemView::addGoMenu
void addGoMenu(QMenu *)
Definition: traceitemview.cpp:471
QWidget::mapToGlobal
QPoint mapToGlobal(const QPoint &pos) const
EventType::setFormula
void setFormula(const QString &)
Definition: eventtype.cpp:47
QTreeWidget::items
QList< QTreeWidgetItem * > items(const QMimeData *data) const
QAbstractScrollArea::viewport
QWidget * viewport() const
ProfileContext::Call
Definition: context.h:44
CostItem
Base class for cost items.
Definition: costitem.h:37
QPoint
TraceData::eventTypes
EventTypeSet * eventTypes()
Definition: tracedata.h:1407
QObject::tr
QString tr(const char *sourceText, const char *disambiguation, int n)
TraceItemView::_groupType
ProfileContext::Type _groupType
Definition: traceitemview.h:213
EventTypeItem::eventType
EventType * eventType()
Definition: eventtypeitem.h:39
QWidget::update
void update()
EventType
A cost type, e.g.
Definition: eventtype.h:43
ProfileContext::Class
Definition: context.h:47
EventType::knownDerivedType
static EventType * knownDerivedType(const QString &)
Definition: eventtype.cpp:249
TraceItemView::_eventType2
EventType * _eventType2
Definition: traceitemview.h:212
QTreeWidget::clear
void clear()
TraceItemView
Abstract Base Class for KCachegrind Views.
Definition: traceitemview.h:70
EventTypeItem
Definition: eventtypeitem.h:30
QTreeWidget
TraceItemView::_eventType
EventType * _eventType
Definition: traceitemview.h:212
TraceItemView::partsChanged
Definition: traceitemview.h:84
QTreeWidget::insertTopLevelItems
void insertTopLevelItems(int index, const QList< QTreeWidgetItem * > &items)
QTreeView::setColumnWidth
void setColumnWidth(int column, int width)
toplevelbase.h
QList::append
void append(const T &value)
eventtypeitem.h
QHeaderView::setMinimumSectionSize
void setMinimumSectionSize(int size)
EventTypeView::whatsThis
QString whatsThis() const
Definition: eventtypeview.cpp:84
QTreeView::resizeColumnToContents
void resizeColumnToContents(int column)
QAbstractItemView::setIconSize
void setIconSize(const QSize &size)
QObject::setObjectName
void setObjectName(const QString &name)
EventType::knownTypeCount
static int knownTypeCount()
Definition: eventtype.cpp:291
QTreeWidget::itemAt
QTreeWidgetItem * itemAt(const QPoint &p) const
TraceItemView::_activeItem
CostItem * _activeItem
Definition: traceitemview.h:211
EventTypeSet::remove
bool remove(EventType *)
Definition: eventtype.cpp:433
QTreeView::setAllColumnsShowFocus
void setAllColumnsShowFocus(bool enable)
EventTypeSet::derivedCount
int derivedCount()
Definition: eventtype.h:134
QString
QList
QTreeWidget::setColumnCount
void setColumnCount(int columns)
EventType::isReal
bool isReal()
Definition: eventtype.h:70
QStringList
TraceItemView::eventTypeChanged
Definition: traceitemview.h:81
EventTypeSet::add
int add(EventType *)
Definition: eventtype.cpp:403
TraceItemView::selected
virtual void selected(TraceItemView *sender, CostItem *)
Notification from child views.
Definition: traceitemview.cpp:319
QMenu
QSize
QWidget::setContextMenuPolicy
void setContextMenuPolicy(Qt::ContextMenuPolicy policy)
QTreeWidget::setCurrentItem
void setCurrentItem(QTreeWidgetItem *item)
QTreeWidget::setHeaderLabels
void setHeaderLabels(const QStringList &labels)
EventTypeSet::realType
EventType * realType(int)
Definition: eventtype.cpp:462
QTreeView::setSortingEnabled
void setSortingEnabled(bool enable)
QWidget::setWhatsThis
void setWhatsThis(const QString &)
EventType::knownType
static EventType * knownType(int)
Definition: eventtype.cpp:312
QTreeWidgetItem
EventType::add
static void add(EventType *, bool overwriteExisting=true)
Definition: eventtype.cpp:263
EventType::setName
void setName(const QString &n)
Definition: eventtype.h:57
QAction
eventtypeview.h
TraceItemView::groupTypeChanged
Definition: traceitemview.h:83
QWidget::setMinimumHeight
void setMinimumHeight(int minh)
EventTypeSet
A class for managing a set of event types.
Definition: eventtype.h:117
QTreeView::header
QHeaderView * header() const
TraceItemView::eventType2Changed
Definition: traceitemview.h:82
QTreeWidget::topLevelItem
QTreeWidgetItem * topLevelItem(int index) const
EventType::setLongName
void setLongName(const QString &n)
Definition: eventtype.h:58
ProfileContext::Object
Definition: context.h:49
TopLevelBase::configChanged
virtual void configChanged()=0
QTreeView::setRootIsDecorated
void setRootIsDecorated(bool show)
EventTypeSet::derivedType
EventType * derivedType(int)
Definition: eventtype.cpp:468
QTreeWidget::topLevelItemCount
int topLevelItemCount() const
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
EventTypeView::EventTypeView
EventTypeView(TraceItemView *parentView, QWidget *parent=0, const char *name=0)
Definition: eventtypeview.cpp:38
QString::arg
QString arg(qlonglong a, int fieldWidth, int base, const QChar &fillChar) const
QTreeWidgetItem::text
QString text(int column) const
TraceItemView::selectedEventType
virtual void selectedEventType(TraceItemView *sender, EventType *)
Definition: traceitemview.cpp:362
QTreeWidget::editItem
void editItem(QTreeWidgetItem *item, int column)
EventType::name
const QString & name()
Definition: eventtype.h:65
ProfileContext::Function
Definition: context.h:46
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:39:50 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
  • 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