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.
tdevelop/parts/valgrind/valgrind_dialog.cpp

204 lines
6.0 KiB

#include <tqlayout.h>
#include <tqcheckbox.h>
#include <tqregexp.h>
#include <tqwidgetstack.h>
#include <kprocess.h>
#include <tdelocale.h>
#include <kurlrequester.h>
#include <klineedit.h>
#include <kstandarddirs.h>
#include <tdemessagebox.h>
#include "dialog_widget.h"
#include "valgrind_dialog.h"
#include "valgrind_dialog.moc"
ValgrindDialog::ValgrindDialog( Type type, TQWidget* 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(), TQ_SIGNAL( textChanged( const TQString &)), this, TQ_SLOT( valgrindTextChanged()));
connect( w->valExecutableEdit->lineEdit(), TQ_SIGNAL( textChanged( const TQString &)), this, TQ_SLOT( valgrindTextChanged()));
connect( w->ctExecutableEdit->lineEdit(), TQ_SIGNAL( textChanged( const TQString &)), this, TQ_SLOT( valgrindTextChanged()));
connect( w->kcExecutableEdit->lineEdit(), TQ_SIGNAL( textChanged( const TQString &)), this, TQ_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() );
}
TQString ValgrindDialog::executableName() const
{
return w->executableEdit->url();
}
void ValgrindDialog::setExecutable( const TQString& url )
{
w->executableEdit->setURL( url );
}
TQString ValgrindDialog::valExecutable() const
{
return w->valExecutableEdit->url();
}
TQString ValgrindDialog::parameters() const
{
return w->paramEdit->text();
}
void ValgrindDialog::setParameters( const TQString& params )
{
w->paramEdit->setText( params );
}
void ValgrindDialog::setValExecutable( const TQString& ve )
{
TQString vUrl = ve;
if ( vUrl.isEmpty() ) {
vUrl = TDEStandardDirs::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 TQString memCheckParam( "--tool=memcheck" );
static const TQString leakCheckParam( "--leak-check=yes" );
static const TQString reachableParam( "--show-reachable=yes" );
static const TQString childrenParam( "--trace-children=yes" );
TQString ValgrindDialog::valParams() const
{
TQString 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 TQString& params )
{
TQString 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( TQRegExp( memCheckParam ), "" );
myParams = myParams.replace( TQRegExp( leakCheckParam ), "" );
myParams = myParams.replace( TQRegExp( reachableParam ), "" );
myParams = myParams.replace( TQRegExp( childrenParam ), "" );
myParams = myParams.stripWhiteSpace();
w->valParamEdit->setText( myParams );
}
TQString ValgrindDialog::ctExecutable() const
{
return w->ctExecutableEdit->url();
}
void ValgrindDialog::setCtExecutable( const TQString& ce )
{
TQString vUrl = ce;
if ( vUrl.isEmpty() ) {
vUrl = TDEStandardDirs::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 );
}
}
TQString ValgrindDialog::ctParams() const
{
TQString params = w->ctParamEdit->text();
if ( w->ctChildrenBox->isChecked() )
params += " " + childrenParam;
return params;
}
void ValgrindDialog::setCtParams( const TQString& params )
{
TQString 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( TQRegExp( childrenParam ), "" );
myParams = myParams.stripWhiteSpace();
w->ctParamEdit->setText( myParams );
}
TQString ValgrindDialog::kcExecutable( ) const
{
return w->kcExecutableEdit->url();
}
void ValgrindDialog::setKcExecutable( const TQString& ke )
{
TQString vUrl = ke;
if ( vUrl.isEmpty() ) {
vUrl = TDEStandardDirs::findExe( "tdecachegrind" );
}
if ( vUrl.isEmpty() ) {
KMessageBox::sorry( this, i18n( "Could not find tdecachegrind in your $PATH. Please make "
"sure it is installed properly." ),
i18n( "KCachegrind Not Found" ) );
w->kcExecutableEdit->setURL( "tdecachegrind" );
} else {
w->kcExecutableEdit->setURL( vUrl );
}
}
bool ValgrindDialog::isNewValgrindVersion( ) const
{
TDEProcess *proc = new TDEProcess;
proc->setUseShell(true);
*proc << "test \"valgrind-20\" == `valgrind --version | awk -F \\. '{print $1$2}'`";
proc->start(TDEProcess::Block);
if (proc->normalExit())
return proc->exitStatus();
return true;
}