• 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
  • kcachegrind
configdlg.cpp
Go to the documentation of this file.
1 /* This file is part of KCachegrind.
2  Copyright (C) 2002, 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  * Configuration Dialog for KCachegrind
21  */
22 
23 #include "configdlg.h"
24 
25 #include <QCheckBox>
26 #include <QMessageBox>
27 
28 #include <kcolorbutton.h>
29 #include <kfiledialog.h>
30 #include <klocale.h>
31 #include <knumvalidator.h>
32 
33 #include "tracedata.h"
34 #include "globalguiconfig.h"
35 
36 
37 ConfigDlg::ConfigDlg(GlobalGUIConfig* c, TraceData* data,
38  QWidget* parent)
39  :ConfigDlgBase(parent)
40 {
41  _config = c;
42  _data = data;
43  _objectCS = 0;
44  _classCS = 0;
45  _fileCS = 0;
46 
47  connect(objectCombo, SIGNAL(activated(const QString &)),
48  this, SLOT(objectActivated(const QString &)));
49  connect(objectCombo, SIGNAL(textChanged(const QString &)),
50  this, SLOT(objectActivated(const QString &)));
51  connect(objectCheck, SIGNAL(toggled(bool)),
52  this, SLOT(objectCheckChanged(bool)));
53  connect(objectColor, SIGNAL(changed(const QColor &)),
54  this, SLOT(objectColorChanged(const QColor &)));
55 
56  connect(classCombo, SIGNAL(activated(const QString &)),
57  this, SLOT(classActivated(const QString &)));
58  connect(classCombo, SIGNAL(textChanged(const QString &)),
59  this, SLOT(classActivated(const QString &)));
60  connect(classCheck, SIGNAL(toggled(bool)),
61  this, SLOT(classCheckChanged(bool)));
62  connect(classColor, SIGNAL(changed(const QColor &)),
63  this, SLOT(classColorChanged(const QColor &)));
64 
65  connect(fileCombo, SIGNAL(activated(const QString &)),
66  this, SLOT(fileActivated(const QString &)));
67  connect(fileCombo, SIGNAL(textChanged(const QString &)),
68  this, SLOT(fileActivated(const QString &)));
69  connect(fileCheck, SIGNAL(toggled(bool)),
70  this, SLOT(fileCheckChanged(bool)));
71  connect(fileColor, SIGNAL(changed(const QColor &)),
72  this, SLOT(fileColorChanged(const QColor &)));
73 
74  connect(buttonBox, SIGNAL(accepted()),SLOT(accept()));
75  connect(buttonBox, SIGNAL(rejected()),SLOT(reject()));
76  QString objectPrefix = ProfileContext::typeName(ProfileContext::Object);
77  QString classPrefix = ProfileContext::typeName(ProfileContext::Class);
78  QString filePrefix = ProfileContext::typeName(ProfileContext::File);
79 
80  objectCombo->setDuplicatesEnabled(false);
81  classCombo->setDuplicatesEnabled(false);
82  fileCombo->setDuplicatesEnabled(false);
83  objectCombo->setAutoCompletion(true);
84  classCombo->setAutoCompletion(true);
85  fileCombo->setAutoCompletion(true);
86 
87  // first unspecified cost items from data
88  TraceObjectMap::Iterator oit;
89  QStringList oList;
90  if (data) {
91  for ( oit = data->objectMap().begin();
92  oit != data->objectMap().end(); ++oit )
93  oList.append((*oit).prettyName());
94  }
95 
96  TraceClassMap::Iterator cit;
97  QStringList cList;
98  if (data) {
99  for ( cit = data->classMap().begin();
100  cit != data->classMap().end(); ++cit )
101  cList.append((*cit).prettyName());
102  }
103 
104  TraceFileMap::Iterator fit;
105  QStringList fList;
106  if (data) {
107  for ( fit = data->fileMap().begin();
108  fit != data->fileMap().end(); ++fit )
109  fList.append((*fit).prettyName());
110  }
111 
112  // then already defined colors (have to check for duplicates!)
113  foreach(ConfigColorSetting* cs, c->_colors) {
114  if (cs->_automatic) continue;
115 
116  QString n = cs->_name;
117  if (n.startsWith(objectPrefix)) {
118  n = n.remove(0, objectPrefix.length()+1);
119  if (oList.indexOf(n) == -1) oList.append(n);
120  }
121  else if (n.startsWith(classPrefix)) {
122  n = n.remove(0, classPrefix.length()+1);
123  if (cList.indexOf(n) == -1) cList.append(n);
124  }
125  else if (n.startsWith(filePrefix)) {
126  n = n.remove(0, filePrefix.length()+1);
127  if (fList.indexOf(n) == -1) fList.append(n);
128  }
129  }
130 
131  oList.sort();
132  cList.sort();
133  fList.sort();
134  objectCombo->addItems(oList);
135  classCombo->addItems(cList);
136  fileCombo->addItems(fList);
137 
138  objectActivated(objectCombo->currentText());
139  classActivated(classCombo->currentText());
140  fileActivated(fileCombo->currentText());
141 
142  maxListEdit->setValue(c->_maxListCount);
143 
144  QTreeWidgetItem* i = new QTreeWidgetItem(dirList);
145  i->setText(0, i18n("(always)"));
146  i->setExpanded(true);
147  QTreeWidgetItem* root = i;
148  QStringList::const_iterator sit = c->_generalSourceDirs.constBegin();
149  for(; sit != c->_generalSourceDirs.constEnd(); ++sit ) {
150  QTreeWidgetItem *item = new QTreeWidgetItem(i);
151  item->setText(0, sit->isEmpty() ? QDir::rootPath() : *sit);
152  }
153  if (data) {
154  for ( oit = data->objectMap().begin();
155  oit != data->objectMap().end(); ++oit ) {
156  const QString n = (*oit).name();
157  if (n.isEmpty()) continue;
158  i = new QTreeWidgetItem(dirList);
159  i->setText(0, n);
160  i->setExpanded(true);
161  const QStringList dirs = c->_objectSourceDirs[n];
162 
163  sit = dirs.constBegin();
164  for(; sit != dirs.constEnd(); ++sit ) {
165  QTreeWidgetItem *item = new QTreeWidgetItem(i);
166  item->setText(0, sit->isEmpty() ? QDir::rootPath() : *sit);
167  }
168  }
169  }
170 
171  connect(dirList, SIGNAL(itemSelectionChanged()),
172  this, SLOT(dirsItemChanged()));
173  connect(addDirButton, SIGNAL(clicked()),
174  this, SLOT(dirsAddPressed()));
175  connect(deleteDirButton, SIGNAL(clicked()),
176  this, SLOT(dirsDeletePressed()));
177  dirList->setCurrentItem(root);
178 
179  symbolCount->setValue(c->_maxSymbolCount);
180  symbolLength->setValue(c->_maxSymbolLength);
181  precisionEdit->setValue(c->_percentPrecision);
182  contextEdit->setValue(c->_context);
183 }
184 
185 ConfigDlg::~ConfigDlg()
186 {
187 }
188 
189 bool ConfigDlg::configure(GlobalGUIConfig* c, TraceData* d, QWidget* p)
190 {
191  ConfigDlg dlg(c, d, p);
192 
193  if (dlg.exec()) {
194 
195  // max 499 per definition
196  c->_maxListCount = dlg.maxListEdit->value();
197  c->_maxSymbolCount = dlg.symbolCount->value();
198  c->_maxSymbolLength = dlg.symbolLength->value();
199  c->_percentPrecision = dlg.precisionEdit->value();
200  c->_context = dlg.contextEdit->value();
201  return true;
202  }
203  return false;
204 }
205 
206 void ConfigDlg::objectActivated(const QString & s)
207 {
208 // qDebug("objectActivated: %s", s.ascii());
209 
210  if (s.isEmpty()) { _objectCS=0; return; }
211 
212  QString n = ProfileContext::typeName(ProfileContext::Object) + '-' + s;
213 
214  ConfigColorSetting* cs = _config->_colors[n];
215  if (!cs)
216  cs = GlobalGUIConfig::colorSetting(n);
217 // else
218 // qDebug("found color %s", n.ascii());
219 
220  _objectCS = cs;
221 
222  objectCheck->setChecked(cs->_automatic);
223  objectColor->setColor(cs->_color);
224 
225  /*
226  qDebug("Found Color %s, automatic to %s",
227  _objectCS->name.ascii(),
228  _objectCS->automatic ? "true":"false");
229  */
230 }
231 
232 
233 void ConfigDlg::objectCheckChanged(bool b)
234 {
235  if (_objectCS) {
236  _objectCS->_automatic = b;
237  /*
238  qDebug("Set Color %s automatic to %s",
239  _objectCS->name.ascii(),
240  _objectCS->automatic ? "true":"false");
241  */
242  }
243 }
244 
245 void ConfigDlg::objectColorChanged(const QColor & c)
246 {
247  if (_objectCS) _objectCS->_color = c;
248 }
249 
250 void ConfigDlg::classActivated(const QString & s)
251 {
252 // qDebug("classActivated: %s", s.ascii());
253 
254  if (s.isEmpty()) { _classCS=0; return; }
255 
256  QString n = ProfileContext::typeName(ProfileContext::Class) + '-' + s;
257 
258  ConfigColorSetting* cs = _config->_colors[n];
259  if (!cs)
260  cs = GlobalGUIConfig::colorSetting(n);
261 
262  _classCS = cs;
263 
264  classCheck->setChecked(cs->_automatic);
265  classColor->setColor(cs->_color);
266 
267 }
268 
269 
270 void ConfigDlg::classCheckChanged(bool b)
271 {
272  if (_classCS) _classCS->_automatic = b;
273 }
274 
275 void ConfigDlg::classColorChanged(const QColor & c)
276 {
277  if (_classCS) _classCS->_color = c;
278 }
279 
280 
281 void ConfigDlg::fileActivated(const QString & s)
282 {
283 // qDebug("fileActivated: %s", s.ascii());
284 
285  if (s.isEmpty()) { _fileCS=0; return; }
286 
287  QString n = ProfileContext::typeName(ProfileContext::File) + '-' + s;
288 
289  ConfigColorSetting* cs = _config->_colors[n];
290  if (!cs)
291  cs = GlobalGUIConfig::colorSetting(n);
292 
293  _fileCS = cs;
294 
295  fileCheck->setChecked(cs->_automatic);
296  fileColor->setColor(cs->_color);
297 }
298 
299 
300 void ConfigDlg::fileCheckChanged(bool b)
301 {
302  if (_fileCS) _fileCS->_automatic = b;
303 }
304 
305 void ConfigDlg::fileColorChanged(const QColor & c)
306 {
307  if (_fileCS) _fileCS->_color = c;
308 }
309 
310 QTreeWidgetItem *ConfigDlg::getSelectedDirItem()
311 {
312  const QList<QTreeWidgetItem*> selectedItems = dirList->selectedItems();
313  return selectedItems.count() ? selectedItems[0] : NULL;
314 }
315 
316 void ConfigDlg::dirsItemChanged()
317 {
318  QTreeWidgetItem *dirItem = getSelectedDirItem();
319  deleteDirButton->setEnabled(dirItem && dirItem->parent() != NULL);
320  addDirButton->setEnabled(dirItem && dirItem->parent() == NULL);
321 }
322 
323 void ConfigDlg::dirsDeletePressed()
324 {
325  QTreeWidgetItem *dirItem = getSelectedDirItem();
326  if (!dirItem || (dirItem->parent() == 0)) return;
327  QTreeWidgetItem* p = dirItem->parent();
328  if (!p) return;
329 
330  QString objName = p->text(0);
331 
332  QStringList* dirs;
333  if (objName == i18n("(always)"))
334  dirs = &(_config->_generalSourceDirs);
335  else
336  dirs = &(_config->_objectSourceDirs[objName]);
337 
338  dirs->removeAll(dirItem->text(0));
339  delete dirItem;
340 
341  deleteDirButton->setEnabled(false);
342 }
343 
344 void ConfigDlg::dirsAddPressed()
345 {
346  QTreeWidgetItem *dirItem = getSelectedDirItem();
347  if (!dirItem || (dirItem->parent() != 0)) return;
348 
349  QString objName = dirItem->text(0);
350 
351  QStringList* dirs;
352  if (objName == i18n("(always)"))
353  dirs = &(_config->_generalSourceDirs);
354  else
355  dirs = &(_config->_objectSourceDirs[objName]);
356 
357  QString newDir;
358  newDir = KFileDialog::getExistingDirectory(KUrl(),
359  this,
360  i18n("Choose Source Folder"));
361  if (newDir.isEmpty()) return;
362 
363  // even for '/', we strip the tailing slash
364  if (newDir.endsWith(QLatin1Char('/')))
365  newDir = newDir.left(newDir.length()-1);
366 
367  if (dirs->indexOf(newDir)>=0) return;
368 
369  dirs->append(newDir);
370  if (newDir.isEmpty()) newDir = QDir::rootPath();
371  QTreeWidgetItem *item = new QTreeWidgetItem(dirItem);
372  item->setText(0, newDir);
373 }
374 
375 #include "configdlg.moc"
GlobalGUIConfig::colorSetting
static ConfigColorSetting * colorSetting(const QString &, bool createNew=true)
Definition: globalguiconfig.cpp:231
QWidget
QDialog::reject
virtual void reject()
ConfigDlg::dirsDeletePressed
void dirsDeletePressed()
Definition: configdlg.cpp:323
ConfigDlg::objectColorChanged
void objectColorChanged(const QColor &)
Definition: configdlg.cpp:245
ConfigDlg::classActivated
void classActivated(const QString &)
Definition: configdlg.cpp:250
GlobalConfig::_maxListCount
int _maxListCount
Definition: globalconfig.h:105
GlobalConfig::_maxSymbolLength
int _maxSymbolLength
Definition: globalconfig.h:105
ProfileContext::File
Definition: context.h:48
ProfileContext::typeName
static QString typeName(Type)
Definition: context.cpp:62
QDialog::rejected
void rejected()
ConfigDlg::fileCheckChanged
void fileCheckChanged(bool)
Definition: configdlg.cpp:300
QDialog::accepted
void accepted()
QDialog::exec
int exec()
ConfigDlg::dirsItemChanged
void dirsItemChanged()
Definition: configdlg.cpp:316
QString::remove
QString & remove(int position, int n)
GlobalConfig::_context
int _context
Definition: globalconfig.h:106
QList::const_iterator
ConfigDlg::objectActivated
void objectActivated(const QString &)
Definition: configdlg.cpp:206
ProfileContext::Class
Definition: context.h:47
GlobalConfig::_percentPrecision
int _percentPrecision
Definition: globalconfig.h:104
tracedata.h
QList::count
int count(const T &value) const
GlobalConfig::_objectSourceDirs
QHash< QString, QStringList > _objectSourceDirs
Definition: globalconfig.h:100
QList::append
void append(const T &value)
TraceData::classMap
TraceClassMap & classMap()
Definition: tracedata.h:1440
ConfigDlg::ConfigDlg
ConfigDlg(GlobalGUIConfig *, TraceData *, QWidget *parent=0)
Definition: configdlg.cpp:37
GlobalGUIConfig
Extension of global configuration for GUI options.
Definition: globalguiconfig.h:71
QString::isEmpty
bool isEmpty() const
QList::removeAll
int removeAll(const T &value)
ConfigDlg::~ConfigDlg
~ConfigDlg()
Definition: configdlg.cpp:185
QString::startsWith
bool startsWith(const QString &s, Qt::CaseSensitivity cs) const
QString::endsWith
bool endsWith(const QString &s, Qt::CaseSensitivity cs) const
ConfigDlg::fileColorChanged
void fileColorChanged(const QColor &)
Definition: configdlg.cpp:305
ConfigDlg::classCheckChanged
void classCheckChanged(bool)
Definition: configdlg.cpp:270
QString
QList
QMap::end
iterator end()
QColor
globalguiconfig.h
QDialog::accept
virtual void accept()
QMap::begin
iterator begin()
QStringList
TraceData::objectMap
TraceObjectMap & objectMap()
Definition: tracedata.h:1438
ConfigColorSetting::setColor
void setColor(const QColor &)
Definition: globalguiconfig.cpp:44
QLatin1Char
QTreeWidgetItem::parent
QTreeWidgetItem * parent() const
ConfigDlg
Definition: configdlg.h:40
QTreeWidgetItem::setExpanded
void setExpanded(bool expand)
QTreeWidgetItem
QDir::rootPath
QString rootPath()
GlobalConfig::_generalSourceDirs
QStringList _generalSourceDirs
Definition: globalconfig.h:99
ConfigColorSetting
Color setting for a cost item Helper class for color settings in configuration.
Definition: globalguiconfig.h:39
QTreeWidgetItem::setText
void setText(int column, const QString &text)
ConfigDlg::fileActivated
void fileActivated(const QString &)
Definition: configdlg.cpp:281
QString::length
int length() const
ConfigDlg::objectCheckChanged
void objectCheckChanged(bool)
Definition: configdlg.cpp:233
ConfigDlg::classColorChanged
void classColorChanged(const QColor &)
Definition: configdlg.cpp:275
QString::left
QString left(int n) const
QStringList::sort
void sort()
QStringList::indexOf
int indexOf(const QRegExp &rx, int from) const
ConfigDlgBase
Definition: configdlg.h:32
ConfigDlg::dirsAddPressed
void dirsAddPressed()
Definition: configdlg.cpp:344
ConfigDlg::configure
static bool configure(GlobalGUIConfig *, TraceData *, QWidget *)
Definition: configdlg.cpp:189
QMap< QString, TraceObject >::Iterator
typedef Iterator
configdlg.h
GlobalGUIConfig::_colors
QHash< QString, ConfigColorSetting * > _colors
Definition: globalguiconfig.h:94
ProfileContext::Object
Definition: context.h:49
TraceData
This class holds profiling data of multiple tracefiles generated with cachegrind on one command...
Definition: tracedata.h:1363
QList::constEnd
const_iterator constEnd() const
QList::constBegin
const_iterator constBegin() const
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
QTreeWidgetItem::text
QString text(int column) const
GlobalConfig::_maxSymbolCount
int _maxSymbolCount
Definition: globalconfig.h:105
TraceData::fileMap
TraceFileMap & fileMap()
Definition: tracedata.h:1439
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