• 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
  • qcachegrind
sourcesettings.cpp
Go to the documentation of this file.
1 /* This file is part of KCachegrind.
2  Copyright (C) 2009 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  * Source annotation directory settings config page
21  */
22 
23 #include <QTreeWidgetItem>
24 #include <QFileDialog>
25 
26 #include "tracedata.h"
27 #include "sourcesettings.h"
28 #include "globalconfig.h"
29 
30 //
31 // SourceSettings
32 //
33 
34 SourceSettings::SourceSettings(TraceData* data, QWidget* parent)
35  : ConfigPage(parent,
36  QObject::tr("Source Annotation"),
37  QObject::tr("Directory Settings for Source Annotation"))
38 {
39  ui.setupUi(this);
40 
41  ui.dirList->setRootIsDecorated(false);
42 
43  GlobalConfig* c = GlobalConfig::config();
44  _always = tr("(always)");
45 
46  QTreeWidgetItem* i;
47  QStringList::const_iterator sit = c->generalSourceDirs().constBegin();
48  for(; sit != c->generalSourceDirs().constEnd(); ++sit ) {
49  QString d = (*sit);
50  if (d.isEmpty()) d = "/";
51  i = new QTreeWidgetItem();
52  i->setText(0, _always);
53  i->setText(1, d);
54  ui.dirList->addTopLevelItem(i);
55  }
56 
57  QStringList objItems(_always);
58  if (data) {
59  TraceObjectMap::Iterator oit;
60  for ( oit = data->objectMap().begin();
61  oit != data->objectMap().end(); ++oit ) {
62  QString n = (*oit).name();
63  if (n.isEmpty()) continue;
64  objItems << n;
65 
66  const QStringList& dirs = c->objectSourceDirs(n);
67  sit = dirs.constBegin();
68  for(; sit != dirs.constEnd(); ++sit ) {
69  QString d = (*sit);
70  if (d.isEmpty()) d = "/";
71  i = new QTreeWidgetItem();
72  i->setText(0, n);
73  i->setText(1, d);
74  ui.dirList->addTopLevelItem(i);
75  }
76  }
77  }
78 
79  ui.objectBox->addItems(objItems);
80  ui.objectBox->setCurrentIndex(0);
81 
82  connect(ui.addDirButton, SIGNAL(clicked()),
83  this, SLOT(addClicked()));
84  connect(ui.deleteDirButton, SIGNAL(clicked()),
85  this, SLOT(deleteClicked()));
86  connect(ui.browseDirButton, SIGNAL(clicked()),
87  this, SLOT(browseClicked()));
88  connect(ui.dirList,
89  SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)),
90  this,
91  SLOT(dirListItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)));
92  connect(ui.objectBox,
93  SIGNAL(currentIndexChanged(QString)),
94  this, SLOT(objectChanged(QString)));
95  connect(ui.dirEdit, SIGNAL(textChanged(QString)),
96  this, SLOT(dirEditChanged(QString)));
97 
98  _current = 0;
99  update();
100 }
101 
102 void SourceSettings::activate(QString s)
103 {
104  int idx = s.toInt();
105  if ((idx==0) || (idx>ui.dirList->topLevelItemCount())) return;
106 
107  ui.dirList->setCurrentItem(ui.dirList->topLevelItem(idx-1));
108  ui.dirEdit->setFocus();
109 }
110 
111 void SourceSettings::update()
112 {
113  if (!_current) {
114  ui.deleteDirButton->setEnabled(false);
115  ui.objectBox->setEnabled(false);
116  ui.dirEdit->setEnabled(false);
117  ui.browseDirButton->setEnabled(false);
118  return;
119  }
120  ui.deleteDirButton->setEnabled(true);
121  ui.objectBox->setEnabled(true);
122  ui.objectBox->setCurrentIndex(ui.objectBox->findText(_current->text(0)));
123  ui.dirEdit->setEnabled(true);
124  ui.dirEdit->setText(_current->text(1));
125  ui.browseDirButton->setEnabled(true);
126 }
127 
128 void SourceSettings::addClicked()
129 {
130  QTreeWidgetItem* i = new QTreeWidgetItem();
131  i->setText(0, ui.objectBox->currentText());
132  i->setText(1, tr("<insert valid directory>"));
133  ui.dirList->addTopLevelItem(i);
134  ui.dirList->setCurrentItem(i);
135 }
136 
137 void SourceSettings::deleteClicked()
138 {
139  if (!_current) return;
140 
141  QTreeWidgetItem* i = _current;
142  // the deletion removes the item
143  delete _current;
144  // deletion can trigger a call to dirListItemChanged() !
145  if (_current == i) {
146  _current = 0;
147  update();
148  }
149 }
150 
151 void SourceSettings::browseClicked()
152 {
153  QString d;
154  d = QFileDialog::getExistingDirectory(this,
155  tr("Choose Source Directory"));
156  if (!d.isEmpty())
157  ui.dirEdit->setText(d);
158 }
159 
160 void SourceSettings::dirListItemChanged(QTreeWidgetItem* current,
161  QTreeWidgetItem*)
162 {
163  _current = current;
164  update();
165 }
166 
167 void SourceSettings::objectChanged(QString obj)
168 {
169  if (!_current) return;
170 
171  _current->setText(0, obj);
172 }
173 
174 void SourceSettings::dirEditChanged(QString dir)
175 {
176  if (!_current) return;
177 
178  _current->setText(1, dir);
179 }
180 
181 bool SourceSettings::check(QString& errorMsg, QString& errorItem)
182 {
183  for(int idx=0; idx< ui.dirList->topLevelItemCount(); idx++) {
184  QTreeWidgetItem* item = ui.dirList->topLevelItem(idx);
185  QString dir = item->text(1);
186  if (QDir(dir).exists()) continue;
187  errorMsg = tr("Directory does not exist");
188  errorItem = QString("%1").arg(idx+1);
189  return false;
190  }
191  return true;
192 }
193 
194 void SourceSettings::accept()
195 {
196  GlobalConfig* c = GlobalConfig::config();
197 
198  QHash<QString, QStringList> dirs;
199  for(int idx=0; idx< ui.dirList->topLevelItemCount(); idx++) {
200  QTreeWidgetItem* item = ui.dirList->topLevelItem(idx);
201  dirs[item->text(0)] << item->text(1);
202  }
203  QHash<QString, QStringList>::const_iterator oit = dirs.constBegin();
204  for(;oit != dirs.constEnd(); ++oit) {
205  if (oit.key() == _always)
206  c->setGeneralSourceDirs(oit.value());
207  else
208  c->setObjectSourceDirs(oit.key(), oit.value());
209  }
210 }
211 
212 #include "sourcesettings.moc"
SourceSettings::objectChanged
void objectChanged(QString)
Definition: sourcesettings.cpp:167
QWidget
QFileDialog::getExistingDirectory
QString getExistingDirectory(QWidget *parent, const QString &caption, const QString &dir, QFlags< QFileDialog::Option > options)
globalconfig.h
QHash::key
const Key key(const T &value) const
GlobalConfig::objectSourceDirs
QStringList objectSourceDirs(QString)
Definition: globalconfig.cpp:457
GlobalConfig::config
static GlobalConfig * config()
Definition: globalconfig.cpp:145
QObject::tr
QString tr(const char *sourceText, const char *disambiguation, int n)
QList::const_iterator
SourceSettings::SourceSettings
SourceSettings(TraceData *data, QWidget *parent)
Definition: sourcesettings.cpp:34
tracedata.h
GlobalConfig::setObjectSourceDirs
void setObjectSourceDirs(QString, QStringList)
Definition: globalconfig.cpp:470
QHash::constEnd
const_iterator constEnd() const
QHash< QString, QStringList >
QObject
GlobalConfig::setGeneralSourceDirs
void setGeneralSourceDirs(QStringList)
Definition: globalconfig.cpp:465
QString::toInt
int toInt(bool *ok, int base) const
QString::isEmpty
bool isEmpty() const
SourceSettings::accept
void accept()
Definition: sourcesettings.cpp:194
QString
QMap::end
iterator end()
QMap::begin
iterator begin()
QStringList
TraceData::objectMap
TraceObjectMap & objectMap()
Definition: tracedata.h:1438
QHash::value
const T value(const Key &key) const
SourceSettings::dirListItemChanged
void dirListItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)
Definition: sourcesettings.cpp:160
SourceSettings::activate
void activate(QString s)
Definition: sourcesettings.cpp:102
SourceSettings::browseClicked
void browseClicked()
Definition: sourcesettings.cpp:151
ConfigPage
Definition: configpage.h:30
QDir
QHash::constBegin
const_iterator constBegin() const
GlobalConfig
Global configuration (only non-GUI options).
Definition: globalconfig.h:37
QTreeWidgetItem
SourceSettings::deleteClicked
void deleteClicked()
Definition: sourcesettings.cpp:137
SourceSettings::dirEditChanged
void dirEditChanged(QString)
Definition: sourcesettings.cpp:174
SourceSettings::check
bool check(QString &, QString &)
Definition: sourcesettings.cpp:181
sourcesettings.h
QTreeWidgetItem::setText
void setText(int column, const QString &text)
SourceSettings::addClicked
void addClicked()
Definition: sourcesettings.cpp:128
QMap< QString, TraceObject >::Iterator
typedef Iterator
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)
GlobalConfig::generalSourceDirs
const QStringList & generalSourceDirs()
Definition: globalconfig.cpp:452
QString::arg
QString arg(qlonglong a, int fieldWidth, int base, const QChar &fillChar) const
QTreeWidgetItem::text
QString text(int column) const
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