You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
207 lines
6.0 KiB
207 lines
6.0 KiB
15 years ago
|
#include <qlayout.h>
|
||
|
#include <qcheckbox.h>
|
||
|
#include <qregexp.h>
|
||
|
#include <qwidgetstack.h>
|
||
|
|
||
|
#include <kprocess.h>
|
||
|
#include <klocale.h>
|
||
|
#include <kurlrequester.h>
|
||
|
#include <klineedit.h>
|
||
|
#include <kstandarddirs.h>
|
||
|
#include <kmessagebox.h>
|
||
|
|
||
|
#include "dialog_widget.h"
|
||
|
#include "valgrind_dialog.h"
|
||
|
|
||
|
#include "valgrind_dialog.moc"
|
||
|
|
||
|
|
||
|
ValgrindDialog::ValgrindDialog( Type type, QWidget* parent )
|
||
|
: KDialogBase( parent, "valgrind dialog", true, i18n("Valgrind Memory Check"), Ok|Cancel ),
|
||
|
m_type(type)
|
||
|
{
|
||
|
w = new DialogWidget( this );
|
||
|
w->valExecutableEdit->setURL( "valgrind" );
|
||
|
w->executableEdit->setFocus();
|
||
|
w->stack->raiseWidget(m_type);
|
||
|
setMainWidget( w );
|
||
|
connect( w->executableEdit->lineEdit(), SIGNAL( textChanged( const QString &)), this, SLOT( valgrindTextChanged()));
|
||
|
connect( w->valExecutableEdit->lineEdit(), SIGNAL( textChanged( const QString &)), this, SLOT( valgrindTextChanged()));
|
||
|
connect( w->ctExecutableEdit->lineEdit(), SIGNAL( textChanged( const QString &)), this, SLOT( valgrindTextChanged()));
|
||
|
connect( w->kcExecutableEdit->lineEdit(), SIGNAL( textChanged( const QString &)), this, SLOT( valgrindTextChanged()));
|
||
|
enableButtonOK( false );
|
||
|
}
|
||
|
|
||
|
|
||
|
ValgrindDialog::~ValgrindDialog()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void ValgrindDialog::valgrindTextChanged()
|
||
|
{
|
||
|
if (m_type == Memcheck)
|
||
|
enableButtonOK( !w->valExecutableEdit->lineEdit()->text().isEmpty() && !w->executableEdit->lineEdit()->text().isEmpty() );
|
||
|
else if (m_type == Calltree)
|
||
|
enableButtonOK( !w->executableEdit->lineEdit()->text().isEmpty() && !w->ctExecutableEdit->lineEdit()->text().isEmpty() && !w->kcExecutableEdit->lineEdit()->text().isEmpty() );
|
||
|
}
|
||
|
|
||
|
QString ValgrindDialog::executableName() const
|
||
|
{
|
||
|
return w->executableEdit->url();
|
||
|
}
|
||
|
|
||
|
void ValgrindDialog::setExecutable( const QString& url )
|
||
|
{
|
||
|
w->executableEdit->setURL( url );
|
||
|
}
|
||
|
|
||
|
QString ValgrindDialog::valExecutable() const
|
||
|
{
|
||
|
return w->valExecutableEdit->url();
|
||
|
}
|
||
|
|
||
|
QString ValgrindDialog::parameters() const
|
||
|
{
|
||
|
return w->paramEdit->text();
|
||
|
}
|
||
|
|
||
|
void ValgrindDialog::setParameters( const QString& params )
|
||
|
{
|
||
|
w->paramEdit->setText( params );
|
||
|
}
|
||
|
|
||
|
void ValgrindDialog::setValExecutable( const QString& ve )
|
||
|
{
|
||
|
QString vUrl = ve;
|
||
|
if ( vUrl.isEmpty() ) {
|
||
|
vUrl = KStandardDirs::findExe( "valgrind" );
|
||
|
}
|
||
|
if ( vUrl.isEmpty() ) {
|
||
|
KMessageBox::sorry( this, i18n( "Could not find valgrind in your $PATH. Please make "
|
||
|
"sure it is installed properly." ),
|
||
|
i18n( "Valgrind Not Found" ) );
|
||
|
w->valExecutableEdit->setURL( "valgrind" );
|
||
|
} else {
|
||
|
w->valExecutableEdit->setURL( vUrl );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static const QString memCheckParam( "--tool=memcheck" );
|
||
|
static const QString leakCheckParam( "--leak-check=yes" );
|
||
|
static const QString reachableParam( "--show-reachable=yes" );
|
||
|
static const QString childrenParam( "--trace-children=yes" );
|
||
|
|
||
|
QString ValgrindDialog::valParams() const
|
||
|
{
|
||
|
QString params = w->valParamEdit->text();
|
||
|
if (isNewValgrindVersion())
|
||
|
params += " " + memCheckParam;
|
||
|
if ( w->memleakBox->isChecked() )
|
||
|
params += " " + leakCheckParam;
|
||
|
if ( w->reachableBox->isChecked() )
|
||
|
params += " " + reachableParam;
|
||
|
if ( w->childrenBox->isChecked() )
|
||
|
params += " " + childrenParam;
|
||
|
|
||
|
return params;
|
||
|
}
|
||
|
|
||
|
void ValgrindDialog::setValParams( const QString& params )
|
||
|
{
|
||
|
QString myParams = params;
|
||
|
if ( myParams.contains( leakCheckParam ) )
|
||
|
w->memleakBox->setChecked( true );
|
||
|
if ( myParams.contains( reachableParam ) )
|
||
|
w->reachableBox->setChecked( true );
|
||
|
if ( myParams.contains( childrenParam ) )
|
||
|
w->childrenBox->setChecked( true );
|
||
|
w->init();
|
||
|
|
||
|
myParams = myParams.replace( QRegExp( memCheckParam ), "" );
|
||
|
myParams = myParams.replace( QRegExp( leakCheckParam ), "" );
|
||
|
myParams = myParams.replace( QRegExp( reachableParam ), "" );
|
||
|
myParams = myParams.replace( QRegExp( childrenParam ), "" );
|
||
|
myParams = myParams.stripWhiteSpace();
|
||
|
w->valParamEdit->setText( myParams );
|
||
|
}
|
||
|
|
||
|
QString ValgrindDialog::ctExecutable() const
|
||
|
{
|
||
|
return w->ctExecutableEdit->url();
|
||
|
}
|
||
|
|
||
|
void ValgrindDialog::setCtExecutable( const QString& ce )
|
||
|
{
|
||
|
QString vUrl = ce;
|
||
|
if ( vUrl.isEmpty() ) {
|
||
|
vUrl = KStandardDirs::findExe( "valgrind" );
|
||
|
}
|
||
|
if ( vUrl.isEmpty() ) {
|
||
|
KMessageBox::sorry( this, i18n( "Could not find valgrind in your $PATH. Please make "
|
||
|
"sure it is installed properly." ),
|
||
|
i18n( "Valgrind Not Found" ) );
|
||
|
w->ctExecutableEdit->setURL( "valgrind" );
|
||
|
} else {
|
||
|
w->ctExecutableEdit->setURL( vUrl );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
QString ValgrindDialog::ctParams() const
|
||
|
{
|
||
|
QString params = w->ctParamEdit->text();
|
||
|
if ( w->ctChildrenBox->isChecked() )
|
||
|
params += " " + childrenParam;
|
||
|
|
||
|
return params;
|
||
|
}
|
||
|
|
||
|
void ValgrindDialog::setCtParams( const QString& params )
|
||
|
{
|
||
|
QString myParams = params;
|
||
|
//force --tool=callgrind if no params are given
|
||
|
if (myParams.isEmpty())
|
||
|
myParams = "--tool=callgrind";
|
||
|
if ( myParams.contains( childrenParam ) )
|
||
|
w->ctChildrenBox->setChecked( true );
|
||
|
w->init();
|
||
|
|
||
|
myParams = myParams.replace( QRegExp( childrenParam ), "" );
|
||
|
myParams = myParams.stripWhiteSpace();
|
||
|
w->ctParamEdit->setText( myParams );
|
||
|
}
|
||
|
|
||
|
QString ValgrindDialog::kcExecutable( ) const
|
||
|
{
|
||
|
return w->kcExecutableEdit->url();
|
||
|
}
|
||
|
|
||
|
void ValgrindDialog::setKcExecutable( const QString& ke )
|
||
|
{
|
||
|
QString vUrl = ke;
|
||
|
if ( vUrl.isEmpty() ) {
|
||
|
vUrl = KStandardDirs::findExe( "kcachegrind" );
|
||
|
}
|
||
|
if ( vUrl.isEmpty() ) {
|
||
|
KMessageBox::sorry( this, i18n( "Could not find kcachegrind in your $PATH. Please make "
|
||
|
"sure it is installed properly." ),
|
||
|
i18n( "KCachegrind Not Found" ) );
|
||
|
w->kcExecutableEdit->setURL( "kcachegrind" );
|
||
|
} else {
|
||
|
w->kcExecutableEdit->setURL( vUrl );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
bool ValgrindDialog::isNewValgrindVersion( ) const
|
||
|
{
|
||
|
KProcess *proc = new KProcess;
|
||
|
proc->setUseShell(true);
|
||
|
*proc << "test \"valgrind-20\" == `valgrind --version | awk -F \\. '{print $1$2}'`";
|
||
|
proc->start(KProcess::Block);
|
||
|
if (proc->normalExit())
|
||
|
return proc->exitStatus();
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
// kate: space-indent on; indent-width 2; tab-width 2; show-tabs on;
|
||
|
|