You can subscribe to this list here.
2008 |
Jan
|
Feb
|
Mar
(2) |
Apr
(3) |
May
|
Jun
(45) |
Jul
(4) |
Aug
|
Sep
(7) |
Oct
(1) |
Nov
|
Dec
|
---|---|---|---|---|---|---|---|---|---|---|---|---|
2009 |
Jan
(4) |
Feb
(4) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
(1) |
Nov
|
Dec
(7) |
2010 |
Jan
(9) |
Feb
(5) |
Mar
(22) |
Apr
(1) |
May
(5) |
Jun
|
Jul
(2) |
Aug
|
Sep
(22) |
Oct
(6) |
Nov
|
Dec
|
2011 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(17) |
Jul
(5) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <sv...@va...> - 2011-07-03 05:27:44
|
Author: cerion Date: 2011-07-03 06:22:53 +0100 (Sun, 03 Jul 2011) New Revision: 546 Log: Introduced a simple filtering mechanism. This is entirely separate from suppressions, and serves only as a temporary 'screen cleanup' mechanism. Actually, I'm not sure I agree that this is 'a good thing', since Valgrind issues 'should' be fixed in order. However, it seems to be much wanted, so here you go. Added: trunk/icons/filter.png trunk/icons/filter_off.png trunk/icons/refresh.png trunk/src/toolview/logviewfilter_mc.cpp trunk/src/toolview/logviewfilter_mc.h Modified: trunk/icons.qrc trunk/src/src.pro trunk/src/toolview/memcheck_logview.cpp trunk/src/toolview/memcheck_logview.h trunk/src/toolview/memcheckview.cpp trunk/src/toolview/memcheckview.h trunk/src/toolview/vglogview.h Added: trunk/icons/filter.png =================================================================== (Binary files differ) Property changes on: trunk/icons/filter.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/icons/filter_off.png =================================================================== (Binary files differ) Property changes on: trunk/icons/filter_off.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/icons/refresh.png =================================================================== (Binary files differ) Property changes on: trunk/icons/refresh.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Modified: trunk/icons.qrc =================================================================== --- trunk/icons.qrc 2011-07-03 04:10:09 UTC (rev 545) +++ trunk/icons.qrc 2011-07-03 05:22:53 UTC (rev 546) @@ -32,5 +32,8 @@ <file>icons/text_more.png</file> <file>icons/arrow_down.png</file> <file>icons/arrow_up.png</file> + <file>icons/filter.png</file> + <file>icons/refresh.png</file> + <file>icons/filter_off.png</file> </qresource> </RCC> Modified: trunk/src/src.pro =================================================================== --- trunk/src/src.pro 2011-07-03 04:10:09 UTC (rev 545) +++ trunk/src/src.pro 2011-07-03 05:22:53 UTC (rev 546) @@ -69,6 +69,7 @@ options/widgets/opt_lb_widget.cpp \ toolview/helgrindview.cpp \ toolview/helgrind_logview.cpp \ + toolview/logviewfilter_mc.cpp \ toolview/memcheckview.cpp \ toolview/memcheck_logview.cpp \ toolview/toolview.cpp \ @@ -111,6 +112,7 @@ options/widgets/opt_lb_widget.h \ toolview/helgrindview.h \ toolview/helgrind_logview.h \ + toolview/logviewfilter_mc.h \ toolview/memcheckview.h \ toolview/memcheck_logview.h \ toolview/toolview.h \ Added: trunk/src/toolview/logviewfilter_mc.cpp =================================================================== --- trunk/src/toolview/logviewfilter_mc.cpp (rev 0) +++ trunk/src/toolview/logviewfilter_mc.cpp 2011-07-03 05:22:53 UTC (rev 546) @@ -0,0 +1,444 @@ +/**************************************************************************** +** LogViewFilterMC implementation +** -------------------------------------------------------------------------- +** +** Copyright (C) 2011-2011, OpenWorks LLP. All rights reserved. +** <in...@op...> +** +** This file is part of Valkyrie, a front-end for Valgrind. +** +** This file may be used under the terms of the GNU General Public +** License version 2.0 as published by the Free Software Foundation +** and appearing in the file COPYING included in the packaging of +** this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +****************************************************************************/ + +#include "toolview/logviewfilter_mc.h" +#include "utils/vk_utils.h" + +#include <QAction> +#include <QHBoxLayout> +#include <QLineEdit> +#include <QMap> +#include <QTimer> + + + +LogViewFilterMC::LogViewFilterMC( QWidget *parent, QTreeWidget* view ) + : QWidget(parent), m_view( view ) +{ + setObjectName( QString::fromUtf8( "LogViewFilterMC" ) ); + + // ------------------------------------------------------------ + // widgets + QIcon ico_filter( QString::fromUtf8( ":/vk_icons/icons/refresh.png" ) ); + butt_refresh = new QPushButton( ico_filter, "" ); + butt_refresh->setFixedWidth( 30 ); + connect( butt_refresh, SIGNAL(clicked()), this, SLOT(refresh()) ); + + // XML tag types + combo_xmltag = new QComboBox(); + connect( combo_xmltag, SIGNAL(currentIndexChanged(int)), this, SLOT(edited()) ); + + // Compare functions + cmpWidgStack = new QStackedWidget(); + cmpWidgStack->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Maximum ); + QComboBox* combo_cmp[3]; // for each of [CMP_KND, CMP_STR, CMP_INT] + for ( int i=0; i<3; ++i ) { + combo_cmp[i] = new QComboBox(); + combo_cmp[i]->setSizeAdjustPolicy( QComboBox::AdjustToContents ); + connect( combo_cmp[i], SIGNAL(currentIndexChanged(int)), this, SLOT(edited()) ); + cmpWidgStack->addWidget( combo_cmp[i] ); + } + vk_assert( cmpWidgStack->indexOf( combo_cmp[CMP_KND] ) == CMP_KND ); + vk_assert( cmpWidgStack->indexOf( combo_cmp[CMP_STR] ) == CMP_STR ); + vk_assert( cmpWidgStack->indexOf( combo_cmp[CMP_INT] ) == CMP_INT ); + + // Filter values (combo/lineedits) + QComboBox* combo_filter = new QComboBox(); + connect( combo_filter, SIGNAL(currentIndexChanged(int)), this, SLOT(edited()) ); + QLineEdit* ledit_strfilter = new QLineEdit(); + connect( ledit_strfilter, SIGNAL(textChanged(QString)), this, SLOT(edited()) ); + connect( ledit_strfilter, SIGNAL(editingFinished()), this, SLOT(refresh()) ); + QLineEdit* ledit_intfilter = new QLineEdit(); + ledit_intfilter->setValidator( new QIntValidator(this) ); // only accept integers. + connect( ledit_intfilter, SIGNAL(textChanged(QString)), this, SLOT(edited()) ); + connect( ledit_intfilter, SIGNAL(editingFinished()), this, SLOT(refresh()) ); + + filterWidgStack = new QStackedWidget(); + filterWidgStack->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Maximum ); + filterWidgStack->addWidget( combo_filter ); + filterWidgStack->addWidget( ledit_strfilter ); + filterWidgStack->addWidget( ledit_intfilter ); + vk_assert( filterWidgStack->indexOf( combo_filter ) == CMP_KND ); + vk_assert( filterWidgStack->indexOf( ledit_strfilter ) == CMP_STR ); + vk_assert( filterWidgStack->indexOf( ledit_intfilter ) == CMP_INT ); + + // ------------------------------------------------------------ + // layout + QGridLayout* gridLayout = new QGridLayout( this ); + gridLayout->setColumnStretch( 0, 0 ); + gridLayout->setColumnStretch( 1, 0 ); + gridLayout->setColumnStretch( 2, 0 ); + gridLayout->setColumnStretch( 3, 1 ); + gridLayout->setMargin(0); + gridLayout->addWidget( butt_refresh, 0, 0 ); + gridLayout->addWidget( combo_xmltag, 0, 1 ); + gridLayout->addWidget( cmpWidgStack, 0, 2 ); + gridLayout->addWidget( filterWidgStack, 0, 3 ); + + + // ------------------------------------------------------------ + // initialise xml tag combobox along with all compare types + combo_xmltag->addItem( "Function", XML_FUN ); + combo_xmltag->addItem( "Object", XML_OBJ ); + combo_xmltag->addItem( "Directory", XML_DIR ); + combo_xmltag->addItem( "File", XML_FIL ); + combo_xmltag->addItem( "Line", XML_LIN ); + combo_xmltag->addItem( "Leaked Bytes", XML_LBY ); + combo_xmltag->addItem( "Leaked Blocks", XML_LBL ); + combo_xmltag->addItem( "Kind", XML_KND ); + connect( combo_xmltag, SIGNAL(currentIndexChanged(int)), this, SLOT( setupFilter(int) ) ); + + // map xmltags to compare types + map_xmltag_cmptype.insert( XML_KND, CMP_KND ); + map_xmltag_cmptype.insert( XML_LBY, CMP_INT ); + map_xmltag_cmptype.insert( XML_LBL, CMP_INT ); + map_xmltag_cmptype.insert( XML_OBJ, CMP_STR ); + map_xmltag_cmptype.insert( XML_FUN, CMP_STR ); + map_xmltag_cmptype.insert( XML_DIR, CMP_STR ); + map_xmltag_cmptype.insert( XML_FIL, CMP_STR ); + map_xmltag_cmptype.insert( XML_LIN, CMP_INT ); + + // setup compare function comboboxes, along with their enums + combo_cmp[CMP_KND]->addItem( "==", FUN_EQL ); + combo_cmp[CMP_KND]->addItem( "!=", FUN_NEQL ); + combo_cmp[CMP_STR]->addItem( "==", FUN_EQL ); + combo_cmp[CMP_STR]->addItem( "!=", FUN_NEQL ); + combo_cmp[CMP_STR]->addItem( "contains", FUN_CONT ); + combo_cmp[CMP_STR]->addItem( "! contain", FUN_NCONT ); + combo_cmp[CMP_STR]->addItem( "starts with", FUN_STRT ); + combo_cmp[CMP_STR]->addItem( "! starts with", FUN_NSTRT ); + combo_cmp[CMP_STR]->addItem( "ends with", FUN_END ); + combo_cmp[CMP_STR]->addItem( "! ends with", FUN_NEND ); + combo_cmp[CMP_INT]->addItem( "==", FUN_EQL ); + combo_cmp[CMP_INT]->addItem( "!=", FUN_NEQL ); + combo_cmp[CMP_INT]->addItem( "<", FUN_LSTHN ); + combo_cmp[CMP_INT]->addItem( ">", FUN_GRTHN ); + + // initialise filter combobox with all 'kind' types (display & matching text) + combo_filter->addItem( "", "" ); + combo_filter->addItem( "IVF - InvalidFree", "InvalidFree" ); + combo_filter->addItem( "MMF - MismatchedFree", "MismatchedFree" ); + combo_filter->addItem( "IVR - InvalidRead", "InvalidRead" ); + combo_filter->addItem( "IVW - InvalidWrite", "InvalidWrite" ); + combo_filter->addItem( "IVJ - InvalidJump", "InvalidJump" ); + combo_filter->addItem( "OVL - Overlap", "Overlap" ); + combo_filter->addItem( "IMP - InvalidMemPool", "InvalidMemPool" ); + combo_filter->addItem( "UNC - UninitCondition", "UninitCondition" ); + combo_filter->addItem( "UNV - UninitValue", "UninitValue" ); + combo_filter->addItem( "SCP - SyscallParam", "SyscallParam" ); + combo_filter->addItem( "CCK - ClientCheck", "ClientCheck" ); + combo_filter->addItem( "LDL - Leak_DefinitelyLost", "Leak_DefinitelyLost" ); + combo_filter->addItem( "LIL - Leak_IndirectlyLost", "Leak_IndirectlyLost" ); + combo_filter->addItem( "LPL - Leak_PossiblyLost", "Leak_PossiblyLost" ); + combo_filter->addItem( "LSR - Leak_StillReachable", "Leak_StillReachable" ); + + // initialise filters + setupFilter( 0 ); + ((QComboBox*)cmpWidgStack->currentWidget())->setCurrentIndex( 2 ); + + //TODO: ContextHelp::addHelp( this, urlValkyrie::XYZ); +} + +void LogViewFilterMC::setupFilter( int idx ) +{ +// vkDebug( "LogViewFilterMC::setupFilter( %d )", idx ); + + XmlTagType xmltag = (XmlTagType)combo_xmltag->itemData( idx ).toInt(); + CmpType cmp_type = map_xmltag_cmptype[ xmltag ]; + + // compares: combobox + cmpWidgStack->setCurrentIndex( cmp_type ); + + // filter values: combobox/lineedit + filterWidgStack->setCurrentIndex( cmp_type ); +} + + +void LogViewFilterMC::edited() +{ +// vkDebug( "LogViewFilterMC::edited()" ); + + butt_refresh->setEnabled( true ); +} + +void LogViewFilterMC::refresh() +{ +// vkDebug( "LogViewFilterMC::refresh()" ); + + butt_refresh->setEnabled( false ); + + updateView(); +} + + + + +void LogViewFilterMC::updateView() +{ +// vkDebug( "LogViewFilterMC::updateView()" ); + + if ( m_view == NULL ) { + vkPrintErr( "No treeview - This shouldn't happen!" ); + return; + } + + VgOutputItem* vgItemTop = (VgOutputItem*)m_view->topLevelItem( 0 ); + if ( vgItemTop == NULL ) { +// vkDebug( "No items in treeview." ); + return; + } + + // iterate over all the first-child items + for ( int i=0; i<vgItemTop->childCount(); ++i ) { + VgOutputItem* child = (VgOutputItem*)vgItemTop->child( i ); + + if ( child->elemType() == VG_ELEM::ERROR ) { + + if ( this->isHidden() ) { // show all items if filter is inactive + child->setHidden( false ); + } + else { // filter active: go filter! + showHideItem( child ); + } + } + } +} + + +void LogViewFilterMC::showHideItem( VgOutputItem* item ) +{ +// vkDebug( "LogViewFilterMC::showHideItem: %s", qPrintable( item->text(0) ) ); + + // sanity checks + if ( !item ) { + vkPrintErr( "NULL item. This shouldn't happen!"); + return; + } + + if ( item->elemType() != VG_ELEM::ERROR ) { + vkPrintErr( "Not an ERROR item. This shouldn't happen!"); + return; + } + + // get filter from widgets + // - first get and test the filter value: if empty -> no filter. + QString str_flt; + if ( filterWidgStack->currentIndex() == CMP_KND ) { // => combobox + QComboBox* combo = (QComboBox*)filterWidgStack->currentWidget(); + str_flt = combo->itemData( combo->currentIndex() ).toString(); + } + else { // => lineedit + QLineEdit* le = (QLineEdit*)filterWidgStack->currentWidget(); + str_flt = le->text(); + } + + if ( str_flt.isEmpty() ) { +// vkDebug( "Filter value empty -> empty filter" ); + item->setHidden( false ); + } + else { + QStringList xml_list; + + // get the compare function + QComboBox* comboCmpFun = (QComboBox*)cmpWidgStack->currentWidget(); + int idx = comboCmpFun->currentIndex(); + CmpFunType cmpFun = (CmpFunType)comboCmpFun->itemData( idx ).toInt(); + + // get the type to compare + idx = combo_xmltag->currentIndex(); + XmlTagType xmltag = (XmlTagType)combo_xmltag->itemData( idx ).toInt(); + CmpType cmp_type = map_xmltag_cmptype[ xmltag ]; + + // get the appropriate xml tag, and compare it with our filter + // - a positive match means the error item remains. + // - a negative match means the error item is hidden. + bool res_cmp = false; + switch ( xmltag ) { + case XML_KND: // Kind + vk_assert( cmp_type == CMP_KND ); + res_cmp = xmlCompare( item, "kind", str_flt, cmpFun, cmp_type ); + break; + case XML_LBY: // Leaked Bytes + vk_assert( cmp_type == CMP_INT ); + res_cmp = xmlCompare( item, "leakedbytes", str_flt, cmpFun, cmp_type ); + break; + case XML_LBL: // Leaked Blocks + vk_assert( cmp_type == CMP_INT ); + res_cmp = xmlCompare( item, "leakedblocks", str_flt, cmpFun, cmp_type ); + break; + case XML_OBJ: // Object + vk_assert( cmp_type == CMP_STR ); + res_cmp = xmlCompare( item, "obj", str_flt, cmpFun, cmp_type ); + break; + case XML_FUN: // Function + vk_assert( cmp_type == CMP_STR ); + res_cmp = xmlCompare( item, "fn", str_flt, cmpFun, cmp_type ); + break; + case XML_DIR: // Directory + vk_assert( cmp_type == CMP_STR ); + res_cmp = xmlCompare( item, "dir", str_flt, cmpFun, cmp_type ); + break; + case XML_FIL: // File + vk_assert( cmp_type == CMP_STR ); + res_cmp = xmlCompare( item, "file", str_flt, cmpFun, cmp_type ); + break; + case XML_LIN: // Line + vk_assert( cmp_type == CMP_INT ); + res_cmp = xmlCompare( item, "line", str_flt, cmpFun, cmp_type ); + break; + default: + vk_assert_never_reached(); + } + + item->setHidden( !res_cmp ); + } +} + + +void LogViewFilterMC::enableFilter( bool enable ) +{ + if ( enable ) + this->show(); + else + this->hide(); + + updateView(); +} + + + + + +bool LogViewFilterMC::xmlCompare( VgOutputItem* errItem, const QString& tag, + const QString& str_flt, CmpFunType cmpFun, CmpType cmp_type ) +{ + // extract the relevant XML data + // no idea if this is good enough... sometimes maybe better to get first tag only? + QStringList list_xml; + QDomNodeList nodelist = errItem->getElement().elementsByTagName( tag ); + for (int i=0; i<nodelist.count(); ++i ) { + list_xml << nodelist.at(i).toElement().text(); + } + + // compare strings or integers? + bool res_cmp = false; + switch (cmp_type) { + case CMP_KND: + case CMP_STR: + res_cmp = compare_strings( list_xml, str_flt, cmpFun ); + break; + case CMP_INT: + res_cmp = compare_integers( list_xml, str_flt, cmpFun ); + break; + default: + vk_assert_never_reached(); + } + +// vkDebug( "LogViewFilterMC::xmlCompare: res_cmp: '%d'", res_cmp ); + + return res_cmp; +} + + + +/*! + Compare strings. + If _any_ of the strings in lst_xml match str_flt, return true (don't hide) + If no match, return false (hide) + Any problems, just return true (i.e. don't hide) +*/ +bool LogViewFilterMC::compare_strings( const QStringList& lst_xml, + const QString& str_flt, + CmpFunType cmpfuntype ) +{ + + bool res_cmp = false; + foreach ( QString str_xml, lst_xml ) { +// vkDebug( "LogViewFilterMC::compare_strings(%d): '%s'' - '%s'", cmpfuntype, qPrintable( str_xml ), qPrintable( str_flt ) ); + + switch ( cmpfuntype ) { + case FUN_EQL: res_cmp = ( str_xml == str_flt ); break; + case FUN_NEQL: res_cmp = ( str_xml != str_flt ); break; + case FUN_CONT: res_cmp = ( str_xml.contains( str_flt )); break; + case FUN_NCONT: res_cmp = (!str_xml.contains( str_flt )); break; + case FUN_STRT: res_cmp = ( str_xml.startsWith( str_flt )); break; + case FUN_NSTRT: res_cmp = (!str_xml.startsWith( str_flt )); break; + case FUN_END: res_cmp = ( str_xml.endsWith( str_flt )); break; + case FUN_NEND: res_cmp = (!str_xml.endsWith( str_flt )); break; + break; + default: + vk_assert_never_reached(); + } + + // match found - don't filter out this item! + if ( res_cmp ) + return true; + } + + // no match: filter out (hide) this item + return false; +} + + +/*! + Compare integers. + First convert from strings to integers. + If _any_ of the strings in lst_xml match str_flt, return true (don't hide) + If no match, return false (hide) + Any problems, just return true (i.e. don't hide) +*/ +bool LogViewFilterMC::compare_integers( const QStringList& lst_xml, + const QString& str_flt, + CmpFunType cmpfuntype ) +{ + bool res_cmp = false; + foreach ( QString str_xml, lst_xml ) { + + bool ok = true; + int int_flt = str_flt.toInt( &ok ); + if ( !ok ) { +// vkDebug( "Failed conversion (str_flt) to integer: '%s'", qPrintable(str_flt) ); + continue; + } + + int int_xml = str_xml.toInt( &ok ); + if ( !ok ) { +// vkDebug( "Failed conversion (str_xml) to integer: '%s'", qPrintable(str_xml) ); + continue; + } + +// vkDebug( "LogViewFilterMC::compare_integers: '%d'' - '%d'", int_xml, int_flt ); + + switch ( cmpfuntype ) { + case FUN_EQL: res_cmp = (int_xml == int_flt); break; + case FUN_NEQL: res_cmp = (int_xml != int_flt); break; + case FUN_LSTHN: res_cmp = (int_xml < int_flt); break; + case FUN_GRTHN: res_cmp = (int_xml > int_flt); break; + default: + vk_assert_never_reached(); + } + + // match found - don't filter out this item! + if ( res_cmp ) + return true; + } + + // no match: filter out (hide) this item + return false; +} Added: trunk/src/toolview/logviewfilter_mc.h =================================================================== --- trunk/src/toolview/logviewfilter_mc.h (rev 0) +++ trunk/src/toolview/logviewfilter_mc.h 2011-07-03 05:22:53 UTC (rev 546) @@ -0,0 +1,68 @@ +/**************************************************************************** +** LogViewFilterMC definition +** -------------------------------------------------------------------------- +** +** Copyright (C) 2011-2011, OpenWorks LLP. All rights reserved. +** <in...@op...> +** +** This file is part of Valkyrie, a front-end for Valgrind. +** +** This file may be used under the terms of the GNU General Public +** License version 2.0 as published by the Free Software Foundation +** and appearing in the file COPYING included in the packaging of +** this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +****************************************************************************/ + +#ifndef LOGVIEWFILTER_MC_H +#define LOGVIEWFILTER_MC_H + +#include "toolview/vglogview.h" + +#include <QComboBox> +#include <QPushButton> +#include <QStackedWidget> +#include <QTreeWidget> +#include <QWidget> + + +class LogViewFilterMC : public QWidget +{ + Q_OBJECT +public: + LogViewFilterMC(QWidget *parent, QTreeWidget* view ); + +public slots: + void showHideItem( VgOutputItem* item ); + void enableFilter( bool enable ); + +private slots: + void setupFilter( int idx ); + void updateView(); + void edited(); + void refresh(); + +private: + QTreeWidget* m_view; // hold on to this to rescan entire tree. + + QPushButton* butt_refresh; // refresh the filter after editing + QComboBox* combo_xmltag; // combobox of xmltags to filter on + QStackedWidget* cmpWidgStack; // hold the different compare comboboxes + QStackedWidget* filterWidgStack; // hold the different filter value widgets + + enum XmlTagType { XML_KND, XML_LBY, XML_LBL, XML_OBJ, XML_FUN, XML_DIR, XML_FIL, XML_LIN }; + enum CmpType { CMP_KND, CMP_STR, CMP_INT }; + enum CmpFunType { FUN_EQL, FUN_NEQL, FUN_LSTHN, FUN_GRTHN, FUN_CONT, + FUN_NCONT, FUN_STRT, FUN_NSTRT, FUN_END, FUN_NEND }; + QMap<XmlTagType, CmpType> map_xmltag_cmptype; + + bool xmlCompare( VgOutputItem* errItem, const QString& tag, + const QString& str_flt, CmpFunType cmpFun, CmpType cmp_type ); + bool compare_strings( const QStringList& list_xml, const QString& str_flt, CmpFunType cmpfuntype ); + bool compare_integers( const QStringList& list_xml, const QString& str_flt, CmpFunType cmpfuntype ); +}; + +#endif // LOGVIEWFILTER_MC_H Modified: trunk/src/toolview/memcheck_logview.cpp =================================================================== --- trunk/src/toolview/memcheck_logview.cpp 2011-07-03 04:10:09 UTC (rev 545) +++ trunk/src/toolview/memcheck_logview.cpp 2011-07-03 05:22:53 UTC (rev 546) @@ -104,7 +104,7 @@ /* HACK ALERT! VALGRIND_DO_LEAK_CHECK gives repeated leaks... taking apart error::what to get record number - - if '1' then reset counters + - if this is 'record 1' then reset counters */ QDomElement text = xwhat.firstChildElement( "text" ); if ( ! text.isNull() ) { @@ -184,6 +184,10 @@ QDomElement err = elem; lastItem = new ErrorItemMC( topStatus, lastItem, err ); +// TODO: +// flicker a problem? + emit this->errorItemAdded( lastItem ); + // update topStatus topStatus->updateToolStatus( err ); break; Modified: trunk/src/toolview/memcheck_logview.h =================================================================== --- trunk/src/toolview/memcheck_logview.h 2011-07-03 04:10:09 UTC (rev 545) +++ trunk/src/toolview/memcheck_logview.h 2011-07-03 05:22:53 UTC (rev 546) @@ -27,10 +27,14 @@ // ============================================================ class MemcheckLogView : public VgLogView { + Q_OBJECT public: MemcheckLogView( QTreeWidget* ); ~MemcheckLogView(); - + +signals: + void errorItemAdded( VgOutputItem* item ); + private: // Template method functions: TopStatusItem* createTopStatus( QTreeWidget* view, QDomElement exe, Modified: trunk/src/toolview/memcheckview.cpp =================================================================== --- trunk/src/toolview/memcheckview.cpp 2011-07-03 04:10:09 UTC (rev 545) +++ trunk/src/toolview/memcheckview.cpp 2011-07-03 05:22:53 UTC (rev 546) @@ -23,6 +23,7 @@ #include "options/vk_options_dialog.h" #include "options/valgrind_options_page.h" #include "options/vk_suppressions_dialog.h" +#include "toolview/logviewfilter_mc.h" // filters #include "toolview/memcheckview.h" #include "toolview/memcheck_logview.h" #include "utils/vk_config.h" @@ -120,6 +121,11 @@ } logview = new MemcheckLogView( treeView ); + + // let filter show/hide an item + connect( logview, SIGNAL(errorItemAdded(VgOutputItem*)), + logviewFilter, SLOT(showHideItem(VgOutputItem*)) ); + return logview; } @@ -142,6 +148,11 @@ treeView->header()->setResizeMode(0, QHeaderView::ResizeToContents); treeView->header()->setStretchLastSection(false); + // filter + logviewFilter = new LogViewFilterMC( this, treeView ); + + // layout + vLayout->addWidget( logviewFilter ); vLayout->addWidget( treeView ); } @@ -195,6 +206,20 @@ act_SaveLog->setIconVisibleInMenu( true ); connect( act_SaveLog, SIGNAL( triggered() ), this, SIGNAL( saveLogFile() ) ); + act_enableFilter = new QAction( this ); + act_enableFilter->setObjectName( QString::fromUtf8( "act_enableFilter" ) ); + QIcon icon_filter; + icon_filter.addPixmap( QPixmap( QString::fromUtf8( ":/vk_icons/icons/filter_off.png" ) ), + QIcon::Normal, QIcon::On ); + icon_filter.addPixmap( QPixmap( QString::fromUtf8( ":/vk_icons/icons/filter.png" ) ), + QIcon::Normal, QIcon::Off ); + act_enableFilter->setIcon( icon_filter ); + act_enableFilter->setIconVisibleInMenu( true ); + act_enableFilter->setCheckable( true ); + act_enableFilter->setChecked( true ); + connect( act_enableFilter, SIGNAL(toggled(bool)), + logviewFilter, SLOT(enableFilter(bool)) ); + // ------------------------------------------------------------ // initialise actions (enable / disable) setState( false ); @@ -212,6 +237,10 @@ act_OpenLog->setToolTip( tr( "Open Memcheck XML log" ) ); act_SaveLog->setText( tr( "Save Log" ) ); act_SaveLog->setToolTip( tr( "Save Valgrind output to an XML log" ) ); + + act_enableFilter->setText( tr( "Filters on/off" ) ); + act_enableFilter->setToolTip( tr( "Enable or disable the temporary log filters." ) ); + } @@ -230,6 +259,7 @@ toolToolBar->addAction( act_ShowSrcPaths ); toolToolBar->addAction( act_OpenLog ); toolToolBar->addAction( act_SaveLog ); + toolToolBar->addAction( act_enableFilter ); // ------------------------------------------------------------ // Memcheck menu (created in base class) @@ -241,6 +271,7 @@ toolMenu->addAction( act_ShowSrcPaths ); toolMenu->addAction( act_OpenLog ); toolMenu->addAction( act_SaveLog ); + toolMenu->addAction( act_enableFilter ); } Modified: trunk/src/toolview/memcheckview.h =================================================================== --- trunk/src/toolview/memcheckview.h 2011-07-03 04:10:09 UTC (rev 545) +++ trunk/src/toolview/memcheckview.h 2011-07-03 05:22:53 UTC (rev 546) @@ -23,6 +23,7 @@ #include "toolview/toolview.h" #include "toolview/vglogview.h" +#include "toolview/logviewfilter_mc.h" #include <QMenu> #include <QTreeWidget> @@ -63,9 +64,12 @@ QAction* act_ShowSrcPaths; QAction* act_OpenLog; QAction* act_SaveLog; + QAction* act_enableFilter; QTreeWidget* treeView; VgLogView* logview; + + LogViewFilterMC* logviewFilter; }; #endif // __MEMCHECKVIEW_H Modified: trunk/src/toolview/vglogview.h =================================================================== --- trunk/src/toolview/vglogview.h 2011-07-03 04:10:09 UTC (rev 545) +++ trunk/src/toolview/vglogview.h 2011-07-03 05:22:53 UTC (rev 546) @@ -23,6 +23,7 @@ #include <QColorGroup> #include <QDateTime> +#include <QObject> #include <QPainter> #include <QPixmap> #include <QTreeWidget> @@ -67,8 +68,9 @@ the branch. the QDomElement refs held by item are then queried to fill the item data. */ -class VgLogView +class VgLogView : public QObject { + Q_OBJECT public: VgLogView( QTreeWidget* ); ~VgLogView(); |
From: <sv...@va...> - 2011-07-03 04:14:59
|
Author: cerion Date: 2011-07-03 05:10:09 +0100 (Sun, 03 Jul 2011) New Revision: 545 Log: minor tidying Modified: trunk/src/objects/tool_object.cpp trunk/src/options/vk_suppressions_dialog.cpp Modified: trunk/src/objects/tool_object.cpp =================================================================== --- trunk/src/objects/tool_object.cpp 2011-07-03 04:09:15 UTC (rev 544) +++ trunk/src/objects/tool_object.cpp 2011-07-03 04:10:09 UTC (rev 545) @@ -618,7 +618,7 @@ */ void ToolObject::processDone( int exitCode, QProcess::ExitStatus exitStatus ) { - cerr << "ToolObject::processDone( " << exitCode << ", " << exitStatus << " )" << endl; + //vkDebug( "ToolObject::processDone( %d, %d )", exitCode, exitStatus ); vk_assert( toolView != 0 ); if ( vgproc == 0 ) { Modified: trunk/src/options/vk_suppressions_dialog.cpp =================================================================== --- trunk/src/options/vk_suppressions_dialog.cpp 2011-07-03 04:09:15 UTC (rev 544) +++ trunk/src/options/vk_suppressions_dialog.cpp 2011-07-03 04:10:09 UTC (rev 545) @@ -110,7 +110,6 @@ layoutWidget->setObjectName( QString::fromUtf8( "layoutWidget" ) ); topVLayout->addWidget( layoutWidget, 0 ); - // Note: not using opt_widget->hlayout()'s as button width won't match qlabel width. QGridLayout* gridLayout = new QGridLayout( layoutWidget ); gridLayout->setColumnStretch( 0, 0 ); gridLayout->setColumnStretch( 1, 1 ); |
From: <sv...@va...> - 2011-07-03 04:14:06
|
Author: cerion Date: 2011-07-03 05:09:15 +0100 (Sun, 03 Jul 2011) New Revision: 544 Log: tidy up some spaces/loops Modified: trunk/src/mainwindow.cpp Modified: trunk/src/mainwindow.cpp =================================================================== --- trunk/src/mainwindow.cpp 2011-07-01 14:02:54 UTC (rev 543) +++ trunk/src/mainwindow.cpp 2011-07-03 04:09:15 UTC (rev 544) @@ -402,8 +402,9 @@ menuProcess->addAction( actProcess_Run ); menuProcess->addAction( actProcess_Stop ); - foreach( QAction * actTool, toolActionGroup->actions() ) - menuTools->addAction( actTool ); + foreach( QAction * actTool, toolActionGroup->actions() ) { + menuTools->addAction( actTool ); + } menuHelp->addAction( ctxtHlpAction ); menuHelp->addSeparator(); @@ -577,9 +578,9 @@ // disable all actions in the tool actiongroup // TODO: nicer way to do this? - maybe connect sig/slot toolview to action? - foreach( QAction * actTool, toolActionGroup->actions() ) - actTool->setChecked( false ); - + foreach( QAction * actTool, toolActionGroup->actions() ) { + actTool->setChecked( false ); + } actFile_Close->setEnabled( false ); actProcess_Run->setEnabled( false ); actProcess_Stop->setEnabled( false ); |
From: <sv...@va...> - 2011-07-01 14:07:47
|
Author: cerion Date: 2011-07-01 15:02:54 +0100 (Fri, 01 Jul 2011) New Revision: 543 Log: 1) abstracted get-file/dir dialogs - simplifies a lot of code - persistent caching of last-used filter (via global QSettings) - option to update project config for chosen path (don't always want this, e.g. option pages) 2) integrated the cached filters & chosen dir/files for the get-file/dir dialogs for: - new/open/recent/save projects - save/open logs 3) new dialog to create new projects - leverages abstract get-dir dialog - simplifies user interface: no worries about suffix, interactive validation on project name & dir 4) set mainwindow title with project name 5) hide project suffix in recent-projects list Added: trunk/src/utils/vknewprojectdialog.cpp trunk/src/utils/vknewprojectdialog.h Modified: trunk/src/help/help_handbook.cpp trunk/src/mainwindow.cpp trunk/src/objects/tool_object.cpp trunk/src/options/valkyrie_options_page.cpp trunk/src/options/vk_suppressions_dialog.cpp trunk/src/options/vk_suppressions_dialog.h trunk/src/src.pro trunk/src/toolview/helgrindview.cpp trunk/src/toolview/helgrindview.h trunk/src/toolview/memcheckview.cpp trunk/src/toolview/memcheckview.h trunk/src/toolview/toolview.cpp trunk/src/toolview/toolview.h trunk/src/utils/vk_config.cpp trunk/src/utils/vk_config.h trunk/src/utils/vk_utils.cpp trunk/src/utils/vk_utils.h Modified: trunk/src/help/help_handbook.cpp =================================================================== --- trunk/src/help/help_handbook.cpp 2011-07-01 07:29:48 UTC (rev 542) +++ trunk/src/help/help_handbook.cpp 2011-07-01 14:02:54 UTC (rev 543) @@ -213,10 +213,8 @@ */ void HandBook::openFile() { - QString fn = QFileDialog::getOpenFileName( - this, "Open File", VkCfg::docDir(), - "Html Files (*.html *.htm);;All Files (*)" ); - + QString fn = vkDlgCfgGetFile( this, "handbook_docdir" ); + if ( !fn.isEmpty() ) { browser->setSource( fn ); } Modified: trunk/src/mainwindow.cpp =================================================================== --- trunk/src/mainwindow.cpp 2011-07-01 07:29:48 UTC (rev 542) +++ trunk/src/mainwindow.cpp 2011-07-01 14:02:54 UTC (rev 543) @@ -23,6 +23,7 @@ #include <QColorGroup> #include <QEvent> #include <QFileDialog> +#include <QGroupBox> #include <QInputDialog> #include <QMenu> #include <QMenuBar> @@ -40,6 +41,7 @@ #include "utils/vk_config.h" #include "utils/vk_messages.h" #include "utils/vk_utils.h" +#include "utils/vknewprojectdialog.h" /***************************************************************************/ @@ -69,9 +71,7 @@ handBook( 0 ), optionsDialog( 0 ) { setObjectName( QString::fromUtf8( "MainWindowClass" ) ); - QString title = VkCfg::appName(); - title.replace( 0, 1, title[0].toUpper() ); - setWindowTitle( title ); + setWindowTitle( VkCfg::appTitle() + " - <no project>" ); lastAppFont = qApp->font(); lastPalette = qApp->palette(); @@ -756,43 +756,17 @@ */ void MainWindow::createNewProject() { - // TODO: put dir & name choice in one dialog. - - // Choose project directory - QString dir = QFileDialog::getExistingDirectory( this, "Choose Project Directory", "./", - QFileDialog::ShowDirsOnly | - QFileDialog::DontResolveSymlinks ); - - if ( dir.isEmpty() || dir.isNull() ) { + VkNewProjectDialog dlg( this ); + + if ( dlg.exec() == QDialog::Rejected ) { return; } + + QString proj_path = dlg.getProjectPath(); - // Choose project name - QString proj_name; - - while ( true ) { - bool ok = true; - proj_name = QInputDialog::getText( this, "Choose New Project Name", - "Project Name:", QLineEdit::Normal, - "", &ok ); - - if ( !ok ) { // User chaged their minds. - return; - } - - if ( !proj_name.isEmpty() ) { // loop if empty name. - break; - } - } - - // TODO: check if exists, may overwrite, etc... + vkCfgProj->createNewProject( proj_path ); - QString proj_fname = dir + "/" + proj_name + "." + VkCfg::filetype(); - vkCfgProj->createNewProject( proj_fname ); - - // TODO: ok/cancel? - - setCurrentProject( proj_fname ); + setCurrentProject( proj_path ); } @@ -801,19 +775,14 @@ */ void MainWindow::openProject() { - QString filter = QString("*.") + VkCfg::filetype(); - QString proj_fname = QFileDialog::getOpenFileName( this, "Open Valkyrie Project", - "./", "Valkyrie Projects (" + filter + ")" ); - - if ( proj_fname.isEmpty() || proj_fname.isNull() ) { - // Cancelled - return; + QString proj_fname = vkDlgCfgGetFile( this, "project_path" ); + + if ( proj_fname.isEmpty() ) { + return; // cancelled } vkCfgProj->openProject( proj_fname ); - // TODO: ok/cancel? - setCurrentProject( proj_fname ); } @@ -826,11 +795,20 @@ QAction *action = qobject_cast<QAction *>(sender()); if (action) { QString proj_fname = action->data().toString(); - vkCfgProj->openProject( proj_fname ); + + QFileInfo fi( proj_fname ); + if ( fi.exists() && fi.isFile() ) { + // cache project path + vkCfgGlbl->setValue( "project_path", proj_fname ); - // TODO: ok/cancel? - - setCurrentProject( proj_fname ); + // open project + vkCfgProj->openProject( proj_fname ); + setCurrentProject( proj_fname ); + } + else { + vkError( this, "Open Recent Project", + "<p>Project not found:<br>%s</p>", qPrintable( proj_fname ) ); + } } } @@ -840,42 +818,14 @@ */ void MainWindow::saveAsProject() { - // TODO: put dir & name choice in one dialog. - - // Choose project directory - QString dir = QFileDialog::getExistingDirectory( this, "Choose Project Directory", "./", - QFileDialog::ShowDirsOnly | - QFileDialog::DontResolveSymlinks ); - - if ( dir.isEmpty() || dir.isNull() ) { - return; + QString proj_fname = vkDlgCfgGetFile( this, "project_path", + QFileDialog::AcceptSave ); + if ( proj_fname.isEmpty() ) { + return; // cancelled } - - // Choose project name - QString proj_name; - - while ( true ) { - bool ok = true; - proj_name = QInputDialog::getText( this, "Enter Project Name", - "Project Name:", QLineEdit::Normal, - "", &ok ); - - if ( !ok ) { // User chaged their minds. - return; - } - - if ( !proj_name.isEmpty() ) { // loop if empty name. - break; - } - } - - - // TODO: check if exists may overwrite, etc... - QString proj_fname = dir + "/" + proj_name + "." + VkCfg::filetype(); + vkCfgProj->saveProjectAs( proj_fname ); - // TODO: ok/cancel? - setCurrentProject( proj_fname ); } @@ -885,21 +835,16 @@ - update the config with the new project name - update the actions to keep in sync. */ -void MainWindow::setCurrentProject(const QString &projName) +void MainWindow::setCurrentProject(const QString &projPath ) { -#if 0 // TODO: maybe future, but then do consistently everywhere... - curFile = fileName; - if (curFile.isEmpty()) - setWindowTitle(tr("Recent Files")); - else - setWindowTitle(tr("%1 - %2").arg(strippedName(curFile)) - .arg(tr("Recent Files"))); -#endif - + QString projName = QFileInfo( projPath ).baseName(); + projName.replace( 0, 1, projName[0].toUpper() ); + setWindowTitle( VkCfg::appTitle() + " - " + projName ); + QStringList files = vkCfgGlbl->value( "recent_projects" ) .toString().split( VkCfg::sepChar(), QString::SkipEmptyParts ); - files.removeAll( projName ); - files.prepend( projName ); + files.removeAll( projPath ); + files.prepend( projPath ); while (files.size() > MaxRecentProjs) { files.removeLast(); } @@ -921,7 +866,7 @@ int numRecentProjs = qMin(files.size(), (int)MaxRecentProjs); for (int i = 0; i < numRecentProjs; ++i) { - QString text = QFileInfo( files[i] ).fileName(); + QString text = QFileInfo( files[i] ).baseName(); actFile_RecentProjs[i]->setText(text); actFile_RecentProjs[i]->setData(files[i]); actFile_RecentProjs[i]->setVisible(true); Modified: trunk/src/objects/tool_object.cpp =================================================================== --- trunk/src/objects/tool_object.cpp 2011-07-01 07:29:48 UTC (rev 542) +++ trunk/src/objects/tool_object.cpp 2011-07-01 14:02:54 UTC (rev 543) @@ -836,15 +836,9 @@ cerr << "ToolObject::fileSaveDialog()" << endl; vk_assert( toolView != 0 ); - // --- Get filename to save to - QString flt = "XML Files (*.xml);;Log Files (*.log.*);;All Files (*)"; - QString cptn = "Save Log File As"; - // use dir used by view-log as most-likely starting point - QFileInfo fi( vkCfgProj->value( "valkyrie/view-log" ).toString() ); - QString start_path = fi.exists() ? fi.absolutePath() : "./"; + QString fname = vkDlgCfgGetFile( toolView, "valkyrie/view-log", + QFileDialog::AcceptSave ); - // get filename to save to: asks for overwrite confirmation - QString fname = QFileDialog::getSaveFileName( toolView, cptn, start_path, flt); if ( fname.isEmpty() ) { // Cancelled return false; } Modified: trunk/src/options/valkyrie_options_page.cpp =================================================================== --- trunk/src/options/valkyrie_options_page.cpp 2011-07-01 07:29:48 UTC (rev 542) +++ trunk/src/options/valkyrie_options_page.cpp 2011-07-01 14:02:54 UTC (rev 543) @@ -224,27 +224,15 @@ */ void ValkyrieOptionsPage::getEditor() { - // try and start up somewhere sensible - QString start_dir = "/"; - - // get current dir of current editor - LeWidget* editLedit = (( LeWidget* )m_itemList[VALKYRIE::SRC_EDITOR] ); - QString ed = editLedit->currValue(); - if ( !ed.isEmpty() ) { - QString ed_file = ed.split( " ", QString::SkipEmptyParts ).first(); - int err_val; - ed_file = fileCheck( &err_val, ed_file, false, false, true ); - - QFileInfo fi( ed_file ); - start_dir = fi.absolutePath(); - } + // get path of current editor + QString ed_curr = m_itemList[VALKYRIE::SRC_EDITOR]->currValue(); + if ( !ed_curr.isEmpty() ) + ed_curr = ed_curr.split( " ", QString::SkipEmptyParts ).first(); - QString editor = - QFileDialog::getOpenFileName( this, tr("Select Source Editor"), - start_dir, tr("All Files (*)")); - - if ( !editor.isEmpty() ) { // user might have clicked Cancel - editLedit->setValue( editor ); + QString ed_new = vkDlgGetFile( this, ed_curr ); + + if ( !ed_new.isEmpty() ) { // user might have clicked Cancel + (( LeWidget* )m_itemList[VALKYRIE::SRC_EDITOR] )->setValue( ed_new ); // update triggers checkOption() } } @@ -255,19 +243,12 @@ */ void ValkyrieOptionsPage::getBinary() { - QString currbin = m_itemList[VALKYRIE::BINARY]->currValue(); - QString currdir = "./"; - if ( !currbin.isEmpty() ) { - QFileInfo fi( currbin ); - currdir = fi.absolutePath(); - } + QString bin_curr = m_itemList[VALKYRIE::BINARY]->currValue(); - QString binfile = - QFileDialog::getOpenFileName( this, tr("Select Executable To Debug"), - currdir, tr("All Files (*)")); - - if ( !binfile.isEmpty() ) { // user might have clicked Cancel - (( LeWidget* )m_itemList[VALKYRIE::BINARY] )->setValue( binfile ); + QString bin_new = vkDlgGetFile( this, bin_curr ); + + if ( !bin_new.isEmpty() ) { // user might have clicked Cancel + (( LeWidget* )m_itemList[VALKYRIE::BINARY] )->setValue( bin_new ); // update triggers checkOption() } } @@ -278,12 +259,12 @@ */ void ValkyrieOptionsPage::getBrowser() { - QString brwsr = - QFileDialog::getOpenFileName( this, tr("Select Browser"), - "./", tr("All Files (*)")); + QString browser_curr = m_itemList[VALKYRIE::BINARY]->currValue(); - if ( !brwsr.isEmpty() ) { // user might have clicked Cancel - (( LeWidget* )m_itemList[VALKYRIE::BROWSER] )->setValue( brwsr ); + QString browser_new = vkDlgGetFile( this, browser_curr ); + + if ( !browser_new.isEmpty() ) { // user might have clicked Cancel + (( LeWidget* )m_itemList[VALKYRIE::BROWSER] )->setValue( browser_new ); // update triggers checkOption() } } @@ -294,12 +275,12 @@ */ void ValkyrieOptionsPage::getVgExec() { - QString vg_exec = - QFileDialog::getOpenFileName( this, tr("Select Valgrind"), - "./", tr("All Files (*)")); + QString vg_curr = m_itemList[VALKYRIE::VG_EXEC]->currValue(); + + QString vg_new = vkDlgGetFile( this, vg_curr ); - if ( !vg_exec.isEmpty() ) { // user might have clicked Cancel - (( LeWidget* )m_itemList[VALKYRIE::VG_EXEC] )->setValue( vg_exec ); + if ( !vg_new.isEmpty() ) { // user might have clicked Cancel + (( LeWidget* )m_itemList[VALKYRIE::VG_EXEC] )->setValue( vg_new ); // update triggers checkOption() } } @@ -310,16 +291,12 @@ */ void ValkyrieOptionsPage::getDfltLogDir() { - QString currdir = m_itemList[VALKYRIE::DFLT_LOGDIR]->currValue(); + QString dir_curr = m_itemList[VALKYRIE::DFLT_LOGDIR]->currValue(); - QString dir_logsave = - QFileDialog::getExistingDirectory( this, - tr("Choose Directory"), - currdir, - QFileDialog::ShowDirsOnly ); - - if ( !dir_logsave.isEmpty() ) { // user might have clicked Cancel - (( LeWidget* )m_itemList[VALKYRIE::DFLT_LOGDIR] )->setValue( dir_logsave ); + QString dir_new = vkDlgGetDir( this, dir_curr ); + + if ( !dir_new.isEmpty() ) { // user might have clicked Cancel + (( LeWidget* )m_itemList[VALKYRIE::DFLT_LOGDIR] )->setValue( dir_new ); // update triggers checkOption() } } @@ -329,16 +306,12 @@ */ void ValkyrieOptionsPage::getWorkingDir() { - QString currdir = m_itemList[VALKYRIE::WORKING_DIR]->currValue(); + QString dir_curr = m_itemList[VALKYRIE::WORKING_DIR]->currValue(); - QString dir_working = - QFileDialog::getExistingDirectory( this, - tr("Choose Directory"), - currdir, - QFileDialog::ShowDirsOnly ); - - if ( !dir_working.isEmpty() ) { // user might have clicked Cancel - (( LeWidget* )m_itemList[VALKYRIE::WORKING_DIR] )->setValue( dir_working ); + QString dir_new = vkDlgGetDir( this, dir_curr ); + + if ( !dir_new.isEmpty() ) { // user might have clicked Cancel + (( LeWidget* )m_itemList[VALKYRIE::WORKING_DIR] )->setValue( dir_new ); // update triggers checkOption() } } Modified: trunk/src/options/vk_suppressions_dialog.cpp =================================================================== --- trunk/src/options/vk_suppressions_dialog.cpp 2011-07-01 07:29:48 UTC (rev 542) +++ trunk/src/options/vk_suppressions_dialog.cpp 2011-07-01 14:02:54 UTC (rev 543) @@ -2,7 +2,7 @@ ** VkSuppressionsDialog implementation ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. +** Copyright (C) 2011-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/options/vk_suppressions_dialog.h =================================================================== --- trunk/src/options/vk_suppressions_dialog.h 2011-07-01 07:29:48 UTC (rev 542) +++ trunk/src/options/vk_suppressions_dialog.h 2011-07-01 14:02:54 UTC (rev 543) @@ -2,7 +2,7 @@ ** VkSuppressionsDialog definition ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. +** Copyright (C) 2011-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/src.pro =================================================================== --- trunk/src/src.pro 2011-07-01 07:29:48 UTC (rev 542) +++ trunk/src/src.pro 2011-07-01 14:02:54 UTC (rev 543) @@ -77,7 +77,8 @@ utils/vk_config.cpp \ utils/vk_logpoller.cpp \ utils/vk_messages.cpp \ - utils/vk_utils.cpp + utils/vk_utils.cpp \ + utils/vknewprojectdialog.cpp HEADERS += \ mainwindow.h \ @@ -119,7 +120,8 @@ utils/vk_defines.h \ utils/vk_logpoller.h \ utils/vk_messages.h \ - utils/vk_utils.h + utils/vk_utils.h \ + utils/vknewprojectdialog.h RESOURCES += $${VK_ROOT}/icons.qrc Modified: trunk/src/toolview/helgrindview.cpp =================================================================== --- trunk/src/toolview/helgrindview.cpp 2011-07-01 07:29:48 UTC (rev 542) +++ trunk/src/toolview/helgrindview.cpp 2011-07-01 14:02:54 UTC (rev 543) @@ -26,7 +26,6 @@ #include <QAction> #include <QApplication> -#include <QFileDialog> #include <QLabel> #include <QMenuBar> #include <QProcess> @@ -119,36 +118,7 @@ } -/*! - Parse and load an xml logfile. - TODO: fix. This starts a new 'run', so we should - trigger vk's "check last run over" before anything else... -*/ -void HelgrindView::openLogFile() -{ - //vkDebug( "HelgrindView::openLogFile()\n" ); - - QString last_file = vkCfgProj->value( "valkyrie/view-log" ).toString(); - if ( last_file.isEmpty() ) last_file = "./"; - - QString captn = "Select Log File"; - QString filt = "XML Files (*.xml);;Log Files (*.log.*);;All Files (*)"; - QString log_file = QFileDialog::getOpenFileName( this, captn, last_file, filt ); - - // user might have clicked Cancel - if ( log_file.isEmpty() ) { - return; - } - - // updates config (as does cmd line --view-cfg...) - emit logFileChosen( log_file ); - - // informs tool_object to load the log_file given in config - emit run( VGTOOL::PROC_PARSE_LOG ); -} - - /*! Setup the interface layout */ Modified: trunk/src/toolview/helgrindview.h =================================================================== --- trunk/src/toolview/helgrindview.h 2011-07-01 07:29:48 UTC (rev 542) +++ trunk/src/toolview/helgrindview.h 2011-07-01 14:02:54 UTC (rev 543) @@ -48,7 +48,6 @@ void setupToolBar(); private slots: - void openLogFile(); void opencloseAllItems(); void opencloseOneItem(); void showSrcPath(); Modified: trunk/src/toolview/memcheckview.cpp =================================================================== --- trunk/src/toolview/memcheckview.cpp 2011-07-01 07:29:48 UTC (rev 542) +++ trunk/src/toolview/memcheckview.cpp 2011-07-01 14:02:54 UTC (rev 543) @@ -32,7 +32,6 @@ #include <QAction> #include <QApplication> #include <QClipboard> -#include <QFileDialog> #include <QHeaderView> #include <QLabel> #include <QMenuBar> @@ -125,36 +124,7 @@ } -/*! - Parse and load a memcheck xml logfile. - TODO: fix. This starts a new 'run', so we should - trigger vk's "check last run over" before anything else... -*/ -void MemcheckView::openLogFile() -{ - //vkDebug( "MemcheckView::openLogFile()" ); - - QString last_file = vkCfgProj->value( "valkyrie/view-log" ).toString(); - if ( last_file.isEmpty() ) last_file = "./"; - - QString captn = "Select Log File"; - QString filt = "XML Files (*.xml);;Log Files (*.log.*);;All Files (*)"; - QString log_file = QFileDialog::getOpenFileName( this, captn, last_file, filt ); - - // user might have clicked Cancel - if ( log_file.isEmpty() ) { - return; - } - - // updates config (as does cmd line --view-cfg...) - emit logFileChosen( log_file ); - - // informs tool_object to load the log_file given in config - emit run( VGTOOL::PROC_PARSE_LOG ); -} - - /*! Setup the interface layout */ Modified: trunk/src/toolview/memcheckview.h =================================================================== --- trunk/src/toolview/memcheckview.h 2011-07-01 07:29:48 UTC (rev 542) +++ trunk/src/toolview/memcheckview.h 2011-07-01 14:02:54 UTC (rev 543) @@ -48,7 +48,6 @@ void setupToolBar(); private slots: - void openLogFile(); void opencloseAllItems(); void opencloseOneItem(); void showSrcPath(); Modified: trunk/src/toolview/toolview.cpp =================================================================== --- trunk/src/toolview/toolview.cpp 2011-07-01 07:29:48 UTC (rev 542) +++ trunk/src/toolview/toolview.cpp 2011-07-01 14:02:54 UTC (rev 543) @@ -18,11 +18,13 @@ ** ****************************************************************************/ +#include <QFileDialog> #include <QMenuBar> #include <QToolBar> #include "toolview/toolview.h" #include "mainwindow.h" +#include "utils/vk_config.h" #include "utils/vk_utils.h" @@ -133,8 +135,32 @@ } +/*! + Parse and load a valgrind xml logfile. + TODO: fix. This starts a new 'run', so we should + trigger vk's "check last run over" before anything else... +*/ +void ToolView::openLogFile() +{ + //vkDebug( "ToolView::openLogFile()" ); + + QString log_file = vkDlgCfgGetFile( this, "valkyrie/view-log" ); + + // user might have clicked Cancel + if ( log_file.isEmpty() ) { + return; + } + + // updates config (as does cmd line --view-cfg...) + emit logFileChosen( log_file ); + // informs tool_object to load the log_file given in config + emit run( VGTOOL::PROC_PARSE_LOG ); +} + + + /***************************************************************************/ /*! \class ToolViewStack Modified: trunk/src/toolview/toolview.h =================================================================== --- trunk/src/toolview/toolview.h 2011-07-01 07:29:48 UTC (rev 542) +++ trunk/src/toolview/toolview.h 2011-07-01 14:02:54 UTC (rev 543) @@ -90,6 +90,9 @@ return toolId; } +protected slots: + void openLogFile(); + public slots: // called by the view's object virtual void setState( bool run ) = 0; Modified: trunk/src/utils/vk_config.cpp =================================================================== --- trunk/src/utils/vk_config.cpp 2011-07-01 07:29:48 UTC (rev 542) +++ trunk/src/utils/vk_config.cpp 2011-07-01 14:02:54 UTC (rev 543) @@ -29,6 +29,7 @@ #include <QColor> #include <QDir> #include <QFile> +#include <QFileDialog> #include <QFileInfo> #include <QFileInfoList> #include <QPoint> @@ -42,10 +43,10 @@ Initialise static data: Basic configuration setup */ const unsigned int VkCfg::_projCfgVersion = 1; // @@@ increment if project config keys change @@@ -const unsigned int VkCfg::_glblCfgVersion = 1; // @@@ increment if global config keys change @@@ +const unsigned int VkCfg::_glblCfgVersion = 2; // @@@ increment if global config keys change @@@ const QString VkCfg::_email = "in...@op..."; // bug-reports -const QString VkCfg::_copyright = "Valkyrie is Copyright (C) 2003-2010 by OpenWorks GbR"; +const QString VkCfg::_copyright = "Valkyrie is Copyright (C) 2003-2011 by OpenWorks GbR"; const QString VkCfg::_vgCopyright = "Valgrind is Copyright (C) 2000-2010, and GNU GPL'd, by Julian Seward et al."; const QString VkCfg::_vgVersion = "3.6.0"; // supports this major Vg release const QString VkCfg::_name = VK_NAME; // application name @@ -101,6 +102,15 @@ const QString& VkCfg::appName() { return _name; } /*! + Valkyrie application title +*/ +const QString VkCfg::appTitle() +{ + QString title = _name; + return title.replace( 0, 1, title[0].toUpper() ); +} + +/*! Valkyrie application release version */ const QString& VkCfg::appVersion() { return _version; } @@ -381,13 +391,18 @@ clear(); vk_assert( allKeys().count() == 0 ); +//TODO: switch to using sections, and figure out backwards-compatibility issues... + setValue( "config_glbl_version", VkCfg::glblCfgVersion() ); setValue( "mainwindow_size", QSize( 600, 600 ) ); setValue( "mainwindow_pos", QPoint( 400, 0 ) ); + setValue( "handbook_history", QString() ); setValue( "handbook_bookmarks", QString() ); setValue( "handbook_max_history", 20 ); setValue( "handbook_max_bookmarks", 20 ); + setValue( "handbook_docdir", VkCfg::docDir() ); + setValue( "colour_background", QColor( 214, 205, 187 ) ); setValue( "colour_base", QColor( 255, 255, 255 ) ); setValue( "colour_dkgray", QColor( 128, 128, 128 ) ); @@ -395,8 +410,21 @@ setValue( "colour_highlight", QColor( 147, 40, 40 ) ); setValue( "colour_null", QColor( 239, 227, 211 ) ); setValue( "colour_text", QColor( 0, 0, 0 ) ); + setValue( "recent_projects", QString() ); + setValue( "project_path", "./" ); + // filefilters + // These are settings/caches for file/dir-dialogs: filterlist + default filter to use + // - list key = filefilters/<proj or glbl key, with all '/' replaced by '_'> + // - dflt key = <list key>-default + setValue( "filefilters/valkyrie_view-log", "XML Files (*.xml);;Log Files (*.log.*);;All Files (*)" ); + setValue( "filefilters/valkyrie_view-log-default", "" ); + setValue( "filefilters/handbook_docdir", "Html Files (*.html *.htm);;All Files (*)" ); + setValue( "filefilters/handbook_docdir-default", "" ); + setValue( "filefilters/project_path", "Valkyrie Projects (*." + VkCfg::filetype() + ")" ); + setValue( "filefilters/project_path-default", "" ); + sync(); } Modified: trunk/src/utils/vk_config.h =================================================================== --- trunk/src/utils/vk_config.h 2011-07-01 07:29:48 UTC (rev 542) +++ trunk/src/utils/vk_config.h 2011-07-01 14:02:54 UTC (rev 543) @@ -48,6 +48,7 @@ static const QString& vgCopyright(); static const QString& vgVersion(); static const QString& appName(); + static const QString appTitle(); static const QString& appVersion(); static const QString& appPackage(); static const QString& tmpDir(); Modified: trunk/src/utils/vk_utils.cpp =================================================================== --- trunk/src/utils/vk_utils.cpp 2011-07-01 07:29:48 UTC (rev 542) +++ trunk/src/utils/vk_utils.cpp 2011-07-01 14:02:54 UTC (rev 543) @@ -17,7 +17,7 @@ ** ****************************************************************************/ -#include "vk_utils.h" +#include "utils/vk_utils.h" #include "options/vk_option.h" #include "utils/vk_config.h" // vkname() @@ -25,6 +25,7 @@ #include <QDateTime> #include <QFile> +#include <QFileDialog> #include <QFileInfo> #include <QRegExp> #include <QString> @@ -351,6 +352,7 @@ QString absPath = QString::null; if ( QFile::exists( file_name ) ) { + // true for (good) directories, too. // file_name exists: get its absolute path. absPath = QFileInfo( file_name ).absoluteFilePath(); } @@ -474,3 +476,210 @@ bye: return absPath; } + + + +/*! + Dialog to choose a file + - start_path gives the path to first show (default: current dir) + - cfg_key_path is the (proj/glbl) cfg key for the item's path. + This is used to find the 'filefilter/<cfg_key_path>' setting. + If no key is given, default (and only) filter is "All files (*)". + - mode indicates save / open (changes QFileDialog) + Returns: chosen file path +*/ +QString vkDlgGetFile( QWidget* parent, + const QString& start_path/*="./"*/, + const QString& cfg_key_path/*=QString()*/, + QFileDialog::AcceptMode mode/*=QFileDialog::AcceptOpen*/ ) +{ + // defaults + QString filterlist = "All Files (*)"; // default filter list + QString filter = ""; // default filter + QString cfg_key_filterlist = ""; // glbl key, built from key_path + QString cfg_key_filter = ""; // glbl key, built from key_path + QString start_dir = start_path; + + if ( start_dir.isEmpty() ) { + start_dir = "./"; + } + else { + // start_dir may be a path-less file, a bad dir, or who knows what. + // try to resolve: first through given path, then via $PATH env var. + start_dir = getFileAbsPath( start_dir ); + } + + // setup filters + if ( !cfg_key_path.isEmpty() ){ + // check the global cfg (derive key from key_path) + cfg_key_filterlist = cfg_key_path; + cfg_key_filterlist = "filefilters/" + cfg_key_filterlist.replace("/", "_"); + cfg_key_filter = cfg_key_filterlist + "-default"; + + QString cfg_filterlist = vkCfgGlbl->value( cfg_key_filterlist ).toString(); + QString cfg_filter = vkCfgGlbl->value( cfg_key_filter ).toString(); + + if ( !cfg_filterlist.isEmpty() ) { + filterlist = cfg_filterlist; + if ( cfg_filterlist.contains( cfg_filter ) ) { + filter = cfg_filter; + } + } + } + + // Setup dialog + QString caption = "Choose File"; + if ( mode == QFileDialog::AcceptSave ) + caption = "Save As"; + + QFileDialog dlg( parent, caption, start_dir, filterlist ); + dlg.setFileMode(QFileDialog::AnyFile); + dlg.setViewMode(QFileDialog::Detail); + dlg.setAcceptMode( mode ); + dlg.selectFilter( filter ); + + // Run dialog - get filename to save to: asks for overwrite confirmation + QString fname; + if ( dlg.exec() ) { + QStringList fileNames = dlg.selectedFiles(); + if ( !fileNames.isEmpty() ) + fname = fileNames.first(); + } + + // save chosen filter (if changed) for next time + if ( !cfg_key_path.isEmpty() ) { + QString filter_new = dlg.selectedNameFilter(); + + if ( filter_new != filter ) { + vkCfgGlbl->setValue( cfg_key_filter, filter_new ); + } + } + + return fname; +} + + +/*! + Dialog to choose a file, using cached start_paths and filters + - start_path gives the directory to first show (default: current dir) + - cfg_key_path is the (proj/glbl) cfg key for the item's path. + This is used to get: + 1) the directory to open the dialog in (default: currentdir) + 2) the filter settings (default: "All files (*)") + - mode indicates save / open (changes QFileDialog) + Returns: chosen file path + + Note: don't use from options pages: they save to cache already. +*/ +QString vkDlgCfgGetFile( QWidget* parent, + const QString& cfg_key_path/*=QString()*/, + QFileDialog::AcceptMode mode/*=QFileDialog::AcceptOpen*/ ) +{ + // defaults + QString start_path = "./"; // default dir + bool pathIsDir = true; + bool isProjKey = true; // is key_path a project key + + // setup start directory + if ( !cfg_key_path.isEmpty() ){ + QFileInfo fi; + // check first project cfg then glbl cfg for the path key + if ( vkCfgProj->contains( cfg_key_path ) ) { + fi = vkCfgProj->value( cfg_key_path ).toString(); + } + else if ( vkCfgGlbl->contains( cfg_key_path ) ) { + fi = vkCfgGlbl->value( cfg_key_path ).toString(); + isProjKey = false; + } + else { + vkPrintErr( "Cfg key not found: '%s'. This shouldn't happen!", + qPrintable( cfg_key_path ) ); + } + + if ( fi.exists() ) { + pathIsDir = fi.isDir(); + // looks like a bug in Qt: if dir, absolutePath still takes off the last dir! + start_path = pathIsDir ? fi.absoluteFilePath() : fi.absolutePath(); + } + else { + vkDebug( "Bad path: '%s'", qPrintable( fi.absoluteFilePath() ) ); + // ignore a bad path. + } + } + + QString fname = vkDlgGetFile( parent, start_path, cfg_key_path, mode ); + + // save chosen path to cfg for next time + if ( !cfg_key_path.isEmpty() && !fname.isEmpty() ) { + QString path = fname; + QFileInfo fi( path ); + path = pathIsDir ? fi.absolutePath() : fi.absoluteFilePath(); + if ( isProjKey ) + vkCfgProj->setValue( cfg_key_path, path ); + else + vkCfgGlbl->setValue( cfg_key_path, path ); + } + + return fname; +} + + + + +/*! + Dialog to choose a directory + - default start_dir is current directory + Returns: chosen directory path +*/ +QString vkDlgGetDir( QWidget* parent, const QString& start_dir/*="./"*/ ) +{ + // Setup dialog + QFileDialog dlg( parent, "Choose Directory", start_dir ); + dlg.setFileMode( QFileDialog::Directory ); + dlg.setViewMode( QFileDialog::Detail ); + dlg.setAcceptMode( QFileDialog::AcceptOpen ); + dlg.setOption( QFileDialog::ShowDirsOnly ); + + // Run dialog - get filename to save to: asks for overwrite confirmation + QString dir_selected; + if ( dlg.exec() ) { + QStringList fileNames = dlg.selectedFiles(); + if ( !fileNames.isEmpty() ) + dir_selected = fileNames.first(); + } + + return dir_selected; +} + + +#if 0 // As-yet unused, untested... +/*! + Dialog to choose a directory + - cfg_key_path is the (proj/glbl) cfg key for the start directory + The cfg is updated if a directory is chosen. + Returns: chosen directory path + + Note: don't use from options pages: they save to cache already.// - careful: don't use in options pages: don't want to save cfg before our turn! +*/ +QString vkDirCfgDialog( QWidget* parent, + const QString& cfg_key_dir/*=QString()*/ ) +{ + // setup start directory + QString start_dir = "./"; + if ( !cfg_key_dir.isEmpty() ) { + QFileInfo fi( vkCfgProj->value( cfg_key_dir ).toString() ); + start_dir = fi.exists() ? fi.absolutePath() : "./"; + } + + QString dirname = vkDlgGetDir( parent, start_dir ); + + // save chosen directory for next time + if ( !cfg_key_dir.isEmpty() && !dirname.isEmpty() ) { + vkCfgProj->setValue( cfg_key_dir, dirname ); + } + + return dirname; +} +#endif + + Modified: trunk/src/utils/vk_utils.h =================================================================== --- trunk/src/utils/vk_utils.h 2011-07-01 07:29:48 UTC (rev 542) +++ trunk/src/utils/vk_utils.h 2011-07-01 14:02:54 UTC (rev 543) @@ -24,6 +24,7 @@ #include <iostream> #include <QString> +#include <QFileDialog> using namespace std; @@ -145,4 +146,21 @@ bool check_exe=false ); +// ============================================================ +// file/dir dialogs, +QString vkDlgGetFile( QWidget* parent, + const QString& start_dir = "./", + const QString& cfg_key_path = QString(), + QFileDialog::AcceptMode mode = QFileDialog::AcceptOpen ); + +QString vkDlgCfgGetFile( QWidget* parent, + const QString& cfg_key_path = QString(), + QFileDialog::AcceptMode mode = QFileDialog::AcceptOpen ); + +QString vkDlgGetDir( QWidget* parent, + const QString& start_dir = "./" ); + + + + #endif Added: trunk/src/utils/vknewprojectdialog.cpp =================================================================== --- trunk/src/utils/vknewprojectdialog.cpp (rev 0) +++ trunk/src/utils/vknewprojectdialog.cpp 2011-07-01 14:02:54 UTC (rev 543) @@ -0,0 +1,184 @@ +/**************************************************************************** +** VkNewProjectDialog implementation +** -------------------------------------------------------------------------- +** +** Copyright (C) 2011-2011, OpenWorks LLP. All rights reserved. +** <in...@op...> +** +** This file is part of Valkyrie, a front-end for Valgrind. +** +** This file may be used under the terms of the GNU General Public +** License version 2.0 as published by the Free Software Foundation +** and appearing in the file COPYING included in the packaging of +** this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +****************************************************************************/ + +#include "utils/vknewprojectdialog.h" +#include "utils/vk_messages.h" +#include "utils/vk_utils.h" +#include "utils/vk_config.h" + +#include <QDir> +#include <QGroupBox> +#include <QLabel> +#include <QPushButton> +#include <QVBoxLayout> + +#define LBL_STYLE_WARN "QLabel { background-color : red; color : black; }" +#define EDIT_STYLE_WARN "QLineEdit { color: red }" + + +VkNewProjectDialog::VkNewProjectDialog( QWidget* parent ) + : QDialog( parent ) +{ + // ------------------------------------------------------------ + setObjectName( QString::fromUtf8( "VkNewProjectDialog" ) ); + setWindowTitle( "Create New Valkyrie Project" ); + + QVBoxLayout* topVLayout = new QVBoxLayout( this ); + + // top text + QLabel* topText = new QLabel( this ); + topText->setText( "Enter a new project name and the directory under which it should be created." ); + topVLayout->addWidget( topText ); + + // ------------------------------------------------------------ + // group box + QGroupBox* groupbox = new QGroupBox( this ); + groupbox->setObjectName( QString::fromUtf8( "groupbox" ) ); + topVLayout->addWidget( groupbox ); + + // ------------------------------------------------------------ + // grid + QGridLayout* grid = new QGridLayout( groupbox ); + grid->setObjectName( QString::fromUtf8( "grid" )); + + // ------------------------------------------------------------ + // content + QLabel* lbl_name = new QLabel( "Name: ", groupbox ); + edit_name = new QLineEdit( groupbox ); + connect( edit_name, SIGNAL(textEdited(QString)), this, SLOT( checkInput() ) ); + + QLabel* lbl_dir = new QLabel( "Create in: ", groupbox ); + edit_dir = new QLineEdit( groupbox ); + connect( edit_dir, SIGNAL(textEdited(QString)), this, SLOT( checkInput() ) ); + + QPushButton* butt_dir = new QPushButton( "Browse...", groupbox ); + connect( butt_dir, SIGNAL( clicked() ), this, SLOT( browseDir() ) ); + + lbl_warn = new QLabel( groupbox ); + + grid->addWidget( lbl_name, 0, 0, 1, 1 ); + grid->addWidget( edit_name, 0, 1, 1, 2 ); + grid->addWidget( lbl_dir, 1, 0, 1, 1 ); + grid->addWidget( edit_dir, 1, 1, 1, 1 ); + grid->addWidget( butt_dir, 1, 2, 1, 1 ); + grid->addWidget( lbl_warn, 2, 0, 1, 3 ); + + // ------------------------------------------------------------ + // buttons + buttonBox = new QDialogButtonBox( this ); + buttonBox->setObjectName( QString::fromUtf8( "buttonBox" ) ); + buttonBox->setOrientation( Qt::Horizontal ); + buttonBox->setStandardButtons( QDialogButtonBox::Cancel | QDialogButtonBox::Ok ); + connect( buttonBox, SIGNAL( rejected() ), this, SLOT( reject() ) ); // Cancel + connect( buttonBox, SIGNAL( accepted() ), this, SLOT( accept() ) ); // Ok + topVLayout->addWidget( buttonBox ); + + + // ------------------------------------------------------------ + // defaults + QFileInfo fi( vkCfgGlbl->value( "project_path" ).toString() ); + QString start_dir = QDir::currentPath(); + if ( fi.exists() ) { + // looks like a bug in Qt: if dir, absolutePath still takes off the last dir! + start_dir = fi.isDir() ? fi.absoluteFilePath() : fi.absolutePath(); + } + edit_dir->setText( start_dir ); + + edit_name->setText( "untitled" ); + + edit_style_normal = edit_dir->styleSheet(); + lbl_style_normal = lbl_warn->styleSheet(); +} + +void VkNewProjectDialog::accept() +{ + QFileInfo fi( getProjectPath() ); + if ( fi.exists() ) { + int ok = vkQuery( this, "Project already exists", "&Yes;&No", + "<p>A project with the same name was found in the given directory.</p>" + "<p>Do you want to overwrite it?</p>" ); + + if ( ok == MsgBox::vkNo ) { + return; // try again + } + + } + + // save chosen path to cfg + vkCfgGlbl->setValue( "project_path", getProjectPath() ); + + QDialog::accept(); +} + +void VkNewProjectDialog::checkInput() +{ + QString warning = ""; + bool name_ok = true; + bool dir_ok = true; + + // check name + QString name = edit_name->text(); + if ( name.isEmpty() ) { + warning = QString( "Name is empty."); + name_ok = false; + } + else { + int idx = name.lastIndexOf( QRegExp("[^a-zA-Z0-9_-]") ); + if ( idx != -1 ) { + warning = QString( "invalid character: '%1'").arg( name.at( idx ) ); + name_ok = false; + } + } + + // check path - overrides projectname warning. + QString path = edit_dir->text(); + QFileInfo fi( path ); + if ( !fi.exists() ) { + warning = QString( "The path '%1' does not exist." ).arg( path ); + dir_ok = false; + } + + // based on warning string, set the warnings on/off + edit_dir->setStyleSheet( dir_ok ? edit_style_normal : EDIT_STYLE_WARN ); + edit_name->setStyleSheet( name_ok ? edit_style_normal : EDIT_STYLE_WARN ); + if ( dir_ok && name_ok ) { + lbl_warn->setStyleSheet( lbl_style_normal ); + lbl_warn->setText( "" ); + buttonBox->button( QDialogButtonBox::Ok )->setEnabled( true ); + } + else { + lbl_warn->setStyleSheet( LBL_STYLE_WARN ); + lbl_warn->setText( warning ); + buttonBox->button( QDialogButtonBox::Ok )->setEnabled( false ); + } +} + +void VkNewProjectDialog::browseDir() +{ + QString dir_new = vkDlgGetDir( this, edit_dir->text() ); + + if ( !dir_new.isEmpty() ) { // user might have clicked Cancel + edit_dir->setText( dir_new ); + } +} + +QString VkNewProjectDialog::getProjectPath() +{ + return edit_dir->text() + "/" + edit_name->text() + "." + VkCfg::filetype(); +} Added: trunk/src/utils/vknewprojectdialog.h =================================================================== --- trunk/src/utils/vknewprojectdialog.h (rev 0) +++ trunk/src/utils/vknewprojectdialog.h 2011-07-01 14:02:54 UTC (rev 543) @@ -0,0 +1,53 @@ +/**************************************************************************** +** VkNewProjectDialog definition +** -------------------------------------------------------------------------- +** +** Copyright (C) 2011-2011, OpenWorks LLP. All rights reserved. +** <in...@op...> +** +** This file is part of Valkyrie, a front-end for Valgrind. +** +** This file may be used under the terms of the GNU General Public +** License version 2.0 as published by the Free Software Foundation +** and appearing in the file COPYING included in the packaging of +** this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +****************************************************************************/ + +#ifndef VKNEWPROJECTDIALOG_H +#define VKNEWPROJECTDIALOG_H + +#include <QDialog> +#include <QDialogButtonBox> +#include <QString> +#include <QLabel> +#include <QLineEdit> + + +class VkNewProjectDialog : public QDialog +{ + Q_OBJECT +public: + VkNewProjectDialog( QWidget *parent = 0 ); + + + QString getProjectPath(); + + private slots: + void accept(); + void browseDir(); + void checkInput(); + + private: + QLineEdit* edit_name; + QLineEdit* edit_dir; + QLabel* lbl_warn; + QString lbl_style_normal; + QString edit_style_normal; + QDialogButtonBox* buttonBox; +}; + +#endif // VKNEWPROJECTDIALOG_H |
From: <sv...@va...> - 2011-07-01 07:34:41
|
Author: cerion Date: 2011-07-01 08:29:48 +0100 (Fri, 01 Jul 2011) New Revision: 542 Log: fix bug on test cfg writeable Modified: trunk/src/utils/vk_config.cpp Modified: trunk/src/utils/vk_config.cpp =================================================================== --- trunk/src/utils/vk_config.cpp 2011-06-28 18:39:11 UTC (rev 541) +++ trunk/src/utils/vk_config.cpp 2011-07-01 07:29:48 UTC (rev 542) @@ -661,7 +661,7 @@ QFileInfo fi( proj_filename ); if ( fi.exists() ) { VK_DEBUG( "Creating new project: File exists: overwriting: '%s'", qPrintable( proj_filename ) ); - if ( fi.isWritable() ) { + if ( !fi.isWritable() ) { VK_DEBUG( "Can't overwrite file: '%s'", qPrintable( proj_filename ) ); return; } |
From: <sv...@va...> - 2011-06-28 18:44:01
|
Author: cerion Date: 2011-06-28 19:39:11 +0100 (Tue, 28 Jun 2011) New Revision: 541 Log: better label to describe saving current config as a project Modified: trunk/src/mainwindow.cpp Modified: trunk/src/mainwindow.cpp =================================================================== --- trunk/src/mainwindow.cpp 2011-06-28 18:35:46 UTC (rev 540) +++ trunk/src/mainwindow.cpp 2011-06-28 18:39:11 UTC (rev 541) @@ -216,7 +216,7 @@ actFile_SaveAs = new QAction( this ); actFile_SaveAs->setObjectName( QString::fromUtf8( "actFile_SaveAs" ) ); - actFile_SaveAs->setText( tr( "Save &As..." ) ); + actFile_SaveAs->setText( tr( "Save Project &As..." ) ); actFile_SaveAs->setToolTip( tr( "Save current configuration to a new project" ) ); QIcon icon_saveas; icon_saveas.addPixmap( QPixmap( QString::fromUtf8( ":/vk_icons/icons/filesaveas.png" ) ) ); |
From: <sv...@va...> - 2011-06-28 18:40:36
|
Author: cerion Date: 2011-06-28 19:35:46 +0100 (Tue, 28 Jun 2011) New Revision: 540 Log: keep Cancel button always enabled in options dialog. (Apply still enabled depending on 'modified' state) Modified: trunk/src/options/vk_options_dialog.cpp Modified: trunk/src/options/vk_options_dialog.cpp =================================================================== --- trunk/src/options/vk_options_dialog.cpp 2011-06-28 15:51:48 UTC (rev 539) +++ trunk/src/options/vk_options_dialog.cpp 2011-06-28 18:35:46 UTC (rev 540) @@ -217,7 +217,7 @@ // ------------------------------------------------------------ // setup default state applyButton->setEnabled( false ); - cancelButton->setEnabled( false ); + cancelButton->setEnabled( true ); okButton->setDefault( true ); } @@ -377,9 +377,7 @@ bool modified = page->isModified(); QPushButton* applyButton = optionsButtonBox->button( QDialogButtonBox::Apply ); - QPushButton* cancelButton = optionsButtonBox->button( QDialogButtonBox::Cancel ); applyButton->setEnabled( modified ); - cancelButton->setEnabled( modified ); // enable update-defaults only when no edits updateDefaultsButton->setEnabled( !modified ); |
From: <sv...@va...> - 2011-06-28 15:56:40
|
Author: cerion Date: 2011-06-28 16:51:48 +0100 (Tue, 28 Jun 2011) New Revision: 539 Log: updated copyrights Modified: trunk/src/help/help_about.cpp trunk/src/help/help_about.h trunk/src/help/help_context.cpp trunk/src/help/help_context.h trunk/src/help/help_handbook.cpp trunk/src/help/help_handbook.h trunk/src/help/help_urls.cpp trunk/src/help/help_urls.h trunk/src/main.cpp trunk/src/mainwindow.cpp trunk/src/mainwindow.h trunk/src/objects/helgrind_object.cpp trunk/src/objects/helgrind_object.h trunk/src/objects/memcheck_object.cpp trunk/src/objects/memcheck_object.h trunk/src/objects/tool_object.cpp trunk/src/objects/tool_object.h trunk/src/objects/valgrind_object.cpp trunk/src/objects/valgrind_object.h trunk/src/objects/valkyrie_object.cpp trunk/src/objects/valkyrie_object.h trunk/src/objects/vk_objects.cpp trunk/src/objects/vk_objects.h trunk/src/options/helgrind_options_page.cpp trunk/src/options/helgrind_options_page.h trunk/src/options/memcheck_options_page.cpp trunk/src/options/memcheck_options_page.h trunk/src/options/valgrind_options_page.cpp trunk/src/options/valgrind_options_page.h trunk/src/options/valkyrie_options_page.cpp trunk/src/options/valkyrie_options_page.h trunk/src/options/vk_option.cpp trunk/src/options/vk_option.h trunk/src/options/vk_options_dialog.cpp trunk/src/options/vk_options_dialog.h trunk/src/options/vk_options_page.cpp trunk/src/options/vk_options_page.h trunk/src/options/vk_parse_cmdline.cpp trunk/src/options/vk_parse_cmdline.h trunk/src/options/widgets/opt_base_widget.cpp trunk/src/options/widgets/opt_base_widget.h trunk/src/options/widgets/opt_cb_widget.cpp trunk/src/options/widgets/opt_cb_widget.h trunk/src/options/widgets/opt_ck_widget.cpp trunk/src/options/widgets/opt_ck_widget.h trunk/src/options/widgets/opt_lb_widget.cpp trunk/src/options/widgets/opt_lb_widget.h trunk/src/options/widgets/opt_le_widget.cpp trunk/src/options/widgets/opt_le_widget.h trunk/src/options/widgets/opt_sp_widget.cpp trunk/src/options/widgets/opt_sp_widget.h trunk/src/toolview/helgrind_logview.cpp trunk/src/toolview/helgrind_logview.h trunk/src/toolview/helgrindview.cpp trunk/src/toolview/helgrindview.h trunk/src/toolview/memcheck_logview.cpp trunk/src/toolview/memcheck_logview.h trunk/src/toolview/memcheckview.h trunk/src/toolview/toolview.cpp trunk/src/toolview/toolview.h trunk/src/toolview/vglogview.cpp trunk/src/toolview/vglogview.h trunk/src/utils/vglogreader.cpp trunk/src/utils/vglogreader.h trunk/src/utils/vk_config.cpp trunk/src/utils/vk_config.h trunk/src/utils/vk_logpoller.cpp trunk/src/utils/vk_logpoller.h trunk/src/utils/vk_messages.cpp trunk/src/utils/vk_messages.h trunk/src/utils/vk_utils.cpp trunk/src/utils/vk_utils.h Modified: trunk/src/help/help_about.cpp =================================================================== --- trunk/src/help/help_about.cpp 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/help/help_about.cpp 2011-06-28 15:51:48 UTC (rev 539) @@ -3,7 +3,7 @@ ** - small tab dialog showing various information re license etc. ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2010, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/help/help_about.h =================================================================== --- trunk/src/help/help_about.h 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/help/help_about.h 2011-06-28 15:51:48 UTC (rev 539) @@ -3,7 +3,7 @@ ** - small tabbed dialog showing misc. info re license etc. ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2010, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/help/help_context.cpp =================================================================== --- trunk/src/help/help_context.cpp 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/help/help_context.cpp 2011-06-28 15:51:48 UTC (rev 539) @@ -3,7 +3,7 @@ ** - context-sensitive help ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2010, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/help/help_context.h =================================================================== --- trunk/src/help/help_context.h 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/help/help_context.h 2011-06-28 15:51:48 UTC (rev 539) @@ -3,7 +3,7 @@ ** - context-sensitive help button ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2010, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/help/help_handbook.cpp =================================================================== --- trunk/src/help/help_handbook.cpp 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/help/help_handbook.cpp 2011-06-28 15:51:48 UTC (rev 539) @@ -3,7 +3,7 @@ ** - context-sensitive help browser ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2010, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/help/help_handbook.h =================================================================== --- trunk/src/help/help_handbook.h 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/help/help_handbook.h 2011-06-28 15:51:48 UTC (rev 539) @@ -3,7 +3,7 @@ ** - Context-sensitive help browser ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2010, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/help/help_urls.cpp =================================================================== --- trunk/src/help/help_urls.cpp 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/help/help_urls.cpp 2011-06-28 15:51:48 UTC (rev 539) @@ -4,7 +4,7 @@ ** what is probably going to be a maintenance nightmare. ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2010, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/help/help_urls.h =================================================================== --- trunk/src/help/help_urls.h 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/help/help_urls.h 2011-06-28 15:51:48 UTC (rev 539) @@ -4,7 +4,7 @@ ** what is probably going to be a maintenance nightmare. ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2010, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/main.cpp =================================================================== --- trunk/src/main.cpp 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/main.cpp 2011-06-28 15:51:48 UTC (rev 539) @@ -3,7 +3,7 @@ ** - the program entry point ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2010, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/mainwindow.cpp =================================================================== --- trunk/src/mainwindow.cpp 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/mainwindow.cpp 2011-06-28 15:51:48 UTC (rev 539) @@ -3,7 +3,7 @@ ** - the top-level application window ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2010, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/mainwindow.h =================================================================== --- trunk/src/mainwindow.h 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/mainwindow.h 2011-06-28 15:51:48 UTC (rev 539) @@ -3,7 +3,7 @@ ** - the top-level application window ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2009, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/objects/helgrind_object.cpp =================================================================== --- trunk/src/objects/helgrind_object.cpp 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/objects/helgrind_object.cpp 2011-06-28 15:51:48 UTC (rev 539) @@ -3,7 +3,7 @@ ** - Helgrind-specific options / flags / fns ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2010, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/objects/helgrind_object.h =================================================================== --- trunk/src/objects/helgrind_object.h 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/objects/helgrind_object.h 2011-06-28 15:51:48 UTC (rev 539) @@ -3,7 +3,7 @@ ** - Helgrind-specific options / flags / fns ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2010, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/objects/memcheck_object.cpp =================================================================== --- trunk/src/objects/memcheck_object.cpp 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/objects/memcheck_object.cpp 2011-06-28 15:51:48 UTC (rev 539) @@ -3,7 +3,7 @@ ** - Memcheck-specific options / flags / fns ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2010, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/objects/memcheck_object.h =================================================================== --- trunk/src/objects/memcheck_object.h 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/objects/memcheck_object.h 2011-06-28 15:51:48 UTC (rev 539) @@ -3,7 +3,7 @@ ** - Memcheck-specific options / flags / fns ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2010, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/objects/tool_object.cpp =================================================================== --- trunk/src/objects/tool_object.cpp 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/objects/tool_object.cpp 2011-06-28 15:51:48 UTC (rev 539) @@ -5,7 +5,7 @@ ** Each ToolObject has an associated ToolView for displaying output. ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2010, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/objects/tool_object.h =================================================================== --- trunk/src/objects/tool_object.h 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/objects/tool_object.h 2011-06-28 15:51:48 UTC (rev 539) @@ -5,7 +5,7 @@ ** Each ToolObject has an associated ToolView for displaying output. ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2010, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/objects/valgrind_object.cpp =================================================================== --- trunk/src/objects/valgrind_object.cpp 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/objects/valgrind_object.cpp 2011-06-28 15:51:48 UTC (rev 539) @@ -3,7 +3,7 @@ ** - Valgrind-specific: options / flags / functionality ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2010, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/objects/valgrind_object.h =================================================================== --- trunk/src/objects/valgrind_object.h 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/objects/valgrind_object.h 2011-06-28 15:51:48 UTC (rev 539) @@ -3,7 +3,7 @@ ** - Valgrind-specific: options / flags / functionality ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2010, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/objects/valkyrie_object.cpp =================================================================== --- trunk/src/objects/valkyrie_object.cpp 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/objects/valkyrie_object.cpp 2011-06-28 15:51:48 UTC (rev 539) @@ -3,7 +3,7 @@ ** - Valkyrie-specific: options / flags / functionality ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2010, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/objects/valkyrie_object.h =================================================================== --- trunk/src/objects/valkyrie_object.h 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/objects/valkyrie_object.h 2011-06-28 15:51:48 UTC (rev 539) @@ -3,7 +3,7 @@ ** - Valkyrie-specific: options / flags / functionality ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2010, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/objects/vk_objects.cpp =================================================================== --- trunk/src/objects/vk_objects.cpp 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/objects/vk_objects.cpp 2011-06-28 15:51:48 UTC (rev 539) @@ -3,7 +3,7 @@ ** - abstract base class for all application 'objects' ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2009, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/objects/vk_objects.h =================================================================== --- trunk/src/objects/vk_objects.h 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/objects/vk_objects.h 2011-06-28 15:51:48 UTC (rev 539) @@ -3,7 +3,7 @@ ** - abstract base class for all application 'objects' ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2009, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/options/helgrind_options_page.cpp =================================================================== --- trunk/src/options/helgrind_options_page.cpp 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/options/helgrind_options_page.cpp 2011-06-28 15:51:48 UTC (rev 539) @@ -3,7 +3,7 @@ ** - subclass of VkOptionsPage to hold helgrind-specific options ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2010, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/options/helgrind_options_page.h =================================================================== --- trunk/src/options/helgrind_options_page.h 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/options/helgrind_options_page.h 2011-06-28 15:51:48 UTC (rev 539) @@ -3,7 +3,7 @@ ** - subclass of VkOptionsPage to hold helgrind-specific options ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2010, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/options/memcheck_options_page.cpp =================================================================== --- trunk/src/options/memcheck_options_page.cpp 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/options/memcheck_options_page.cpp 2011-06-28 15:51:48 UTC (rev 539) @@ -3,7 +3,7 @@ ** - subclass of VkOptionsPage to hold memcheck-specific options ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2010, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/options/memcheck_options_page.h =================================================================== --- trunk/src/options/memcheck_options_page.h 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/options/memcheck_options_page.h 2011-06-28 15:51:48 UTC (rev 539) @@ -3,7 +3,7 @@ ** - subclass of VkOptionsPage to hold memcheck-specific options ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2009, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/options/valgrind_options_page.cpp =================================================================== --- trunk/src/options/valgrind_options_page.cpp 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/options/valgrind_options_page.cpp 2011-06-28 15:51:48 UTC (rev 539) @@ -3,7 +3,7 @@ ** - subclass of VkOptionsPage to hold valgrind-specific options ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2009, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/options/valgrind_options_page.h =================================================================== --- trunk/src/options/valgrind_options_page.h 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/options/valgrind_options_page.h 2011-06-28 15:51:48 UTC (rev 539) @@ -3,7 +3,7 @@ ** - subclass of VkOptionsPage to hold valgrind-specific options ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2009, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/options/valkyrie_options_page.cpp =================================================================== --- trunk/src/options/valkyrie_options_page.cpp 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/options/valkyrie_options_page.cpp 2011-06-28 15:51:48 UTC (rev 539) @@ -3,7 +3,7 @@ ** - subclass of VkOptionsPage to hold valkyrie-specific options ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2009, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/options/valkyrie_options_page.h =================================================================== --- trunk/src/options/valkyrie_options_page.h 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/options/valkyrie_options_page.h 2011-06-28 15:51:48 UTC (rev 539) @@ -3,7 +3,7 @@ ** - subclass of VkOptionsPage to hold valkyrie-specific options ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2009, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/options/vk_option.cpp =================================================================== --- trunk/src/options/vk_option.cpp 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/options/vk_option.cpp 2011-06-28 15:51:48 UTC (rev 539) @@ -2,7 +2,7 @@ ** Option implementation ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2010, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/options/vk_option.h =================================================================== --- trunk/src/options/vk_option.h 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/options/vk_option.h 2011-06-28 15:51:48 UTC (rev 539) @@ -2,7 +2,7 @@ ** VkOption definition ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2009, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/options/vk_options_dialog.cpp =================================================================== --- trunk/src/options/vk_options_dialog.cpp 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/options/vk_options_dialog.cpp 2011-06-28 15:51:48 UTC (rev 539) @@ -4,7 +4,7 @@ ** - Not modal, so user can keep it open and change flags as they work. ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2009, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/options/vk_options_dialog.h =================================================================== --- trunk/src/options/vk_options_dialog.h 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/options/vk_options_dialog.h 2011-06-28 15:51:48 UTC (rev 539) @@ -4,7 +4,7 @@ ** - Not modal, so user can keep it open and change flags as they work. ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2009, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/options/vk_options_page.cpp =================================================================== --- trunk/src/options/vk_options_page.cpp 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/options/vk_options_page.cpp 2011-06-28 15:51:48 UTC (rev 539) @@ -5,7 +5,7 @@ ** - The 'page' is contained within the top-level Options Window. ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2009, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/options/vk_options_page.h =================================================================== --- trunk/src/options/vk_options_page.h 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/options/vk_options_page.h 2011-06-28 15:51:48 UTC (rev 539) @@ -5,7 +5,7 @@ ** - The 'page' is contained within the top-level Options Window. ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2009, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/options/vk_parse_cmdline.cpp =================================================================== --- trunk/src/options/vk_parse_cmdline.cpp 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/options/vk_parse_cmdline.cpp 2011-06-28 15:51:48 UTC (rev 539) @@ -3,7 +3,7 @@ ** - Called from main() to parse both valkyrie and valgrind args ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2010, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/options/vk_parse_cmdline.h =================================================================== --- trunk/src/options/vk_parse_cmdline.h 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/options/vk_parse_cmdline.h 2011-06-28 15:51:48 UTC (rev 539) @@ -3,7 +3,7 @@ ** - Called from main() to parse both valkyrie and valgrind args ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2010, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/options/widgets/opt_base_widget.cpp =================================================================== --- trunk/src/options/widgets/opt_base_widget.cpp 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/options/widgets/opt_base_widget.cpp 2011-06-28 15:51:48 UTC (rev 539) @@ -2,7 +2,7 @@ ** OptionWidget implementation ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2009, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/options/widgets/opt_base_widget.h =================================================================== --- trunk/src/options/widgets/opt_base_widget.h 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/options/widgets/opt_base_widget.h 2011-06-28 15:51:48 UTC (rev 539) @@ -2,7 +2,7 @@ ** OptionWidget definition ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2009, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/options/widgets/opt_cb_widget.cpp =================================================================== --- trunk/src/options/widgets/opt_cb_widget.cpp 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/options/widgets/opt_cb_widget.cpp 2011-06-28 15:51:48 UTC (rev 539) @@ -2,7 +2,7 @@ ** CbWidget implementation ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2009, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/options/widgets/opt_cb_widget.h =================================================================== --- trunk/src/options/widgets/opt_cb_widget.h 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/options/widgets/opt_cb_widget.h 2011-06-28 15:51:48 UTC (rev 539) @@ -2,7 +2,7 @@ ** CbWidget definition ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2009, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/options/widgets/opt_ck_widget.cpp =================================================================== --- trunk/src/options/widgets/opt_ck_widget.cpp 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/options/widgets/opt_ck_widget.cpp 2011-06-28 15:51:48 UTC (rev 539) @@ -2,7 +2,7 @@ ** CkWidget implementation ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2009, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/options/widgets/opt_ck_widget.h =================================================================== --- trunk/src/options/widgets/opt_ck_widget.h 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/options/widgets/opt_ck_widget.h 2011-06-28 15:51:48 UTC (rev 539) @@ -2,7 +2,7 @@ ** CkWidget definition ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2009, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/options/widgets/opt_lb_widget.cpp =================================================================== --- trunk/src/options/widgets/opt_lb_widget.cpp 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/options/widgets/opt_lb_widget.cpp 2011-06-28 15:51:48 UTC (rev 539) @@ -2,7 +2,7 @@ ** LbWidget implementation ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2009, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/options/widgets/opt_lb_widget.h =================================================================== --- trunk/src/options/widgets/opt_lb_widget.h 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/options/widgets/opt_lb_widget.h 2011-06-28 15:51:48 UTC (rev 539) @@ -2,7 +2,7 @@ ** LbWidget definition ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2009, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/options/widgets/opt_le_widget.cpp =================================================================== --- trunk/src/options/widgets/opt_le_widget.cpp 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/options/widgets/opt_le_widget.cpp 2011-06-28 15:51:48 UTC (rev 539) @@ -2,7 +2,7 @@ ** LeWidget implementation ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2009, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/options/widgets/opt_le_widget.h =================================================================== --- trunk/src/options/widgets/opt_le_widget.h 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/options/widgets/opt_le_widget.h 2011-06-28 15:51:48 UTC (rev 539) @@ -2,7 +2,7 @@ ** LeWidget definition ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2009, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/options/widgets/opt_sp_widget.cpp =================================================================== --- trunk/src/options/widgets/opt_sp_widget.cpp 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/options/widgets/opt_sp_widget.cpp 2011-06-28 15:51:48 UTC (rev 539) @@ -2,7 +2,7 @@ ** SpWidget implementation ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2009, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/options/widgets/opt_sp_widget.h =================================================================== --- trunk/src/options/widgets/opt_sp_widget.h 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/options/widgets/opt_sp_widget.h 2011-06-28 15:51:48 UTC (rev 539) @@ -2,7 +2,7 @@ ** SpWidget definition ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2009, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/toolview/helgrind_logview.cpp =================================================================== --- trunk/src/toolview/helgrind_logview.cpp 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/toolview/helgrind_logview.cpp 2011-06-28 15:51:48 UTC (rev 539) @@ -3,7 +3,7 @@ ** - links QDomElements with QTreeWidgetItems ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2010, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/toolview/helgrind_logview.h =================================================================== --- trunk/src/toolview/helgrind_logview.h 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/toolview/helgrind_logview.h 2011-06-28 15:51:48 UTC (rev 539) @@ -3,7 +3,7 @@ ** - links QDomElements with QTreeWidgetItems ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2010, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/toolview/helgrindview.cpp =================================================================== --- trunk/src/toolview/helgrindview.cpp 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/toolview/helgrindview.cpp 2011-06-28 15:51:48 UTC (rev 539) @@ -3,7 +3,7 @@ ** - helgrind's personal window ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2009, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/toolview/helgrindview.h =================================================================== --- trunk/src/toolview/helgrindview.h 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/toolview/helgrindview.h 2011-06-28 15:51:48 UTC (rev 539) @@ -3,7 +3,7 @@ ** - helgrind's personal window ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2009, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/toolview/memcheck_logview.cpp =================================================================== --- trunk/src/toolview/memcheck_logview.cpp 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/toolview/memcheck_logview.cpp 2011-06-28 15:51:48 UTC (rev 539) @@ -3,7 +3,7 @@ ** - links QDomElements with QTreeWidgetItems ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2010, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/toolview/memcheck_logview.h =================================================================== --- trunk/src/toolview/memcheck_logview.h 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/toolview/memcheck_logview.h 2011-06-28 15:51:48 UTC (rev 539) @@ -3,7 +3,7 @@ ** - links QDomElements with QTreeWidgetItems ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2010, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/toolview/memcheckview.h =================================================================== --- trunk/src/toolview/memcheckview.h 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/toolview/memcheckview.h 2011-06-28 15:51:48 UTC (rev 539) @@ -3,7 +3,7 @@ ** - memcheck's personal window ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2009, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/toolview/toolview.cpp =================================================================== --- trunk/src/toolview/toolview.cpp 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/toolview/toolview.cpp 2011-06-28 15:51:48 UTC (rev 539) @@ -3,7 +3,7 @@ ** - the abstract base class for all tool views ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2009, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/toolview/toolview.h =================================================================== --- trunk/src/toolview/toolview.h 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/toolview/toolview.h 2011-06-28 15:51:48 UTC (rev 539) @@ -3,7 +3,7 @@ ** - the abstract base class for all tool views ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2009, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/toolview/vglogview.cpp =================================================================== --- trunk/src/toolview/vglogview.cpp 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/toolview/vglogview.cpp 2011-06-28 15:51:48 UTC (rev 539) @@ -3,7 +3,7 @@ ** - links QDomElements with QTreeWidgetItems ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2010, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/toolview/vglogview.h =================================================================== --- trunk/src/toolview/vglogview.h 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/toolview/vglogview.h 2011-06-28 15:51:48 UTC (rev 539) @@ -3,7 +3,7 @@ ** - links QDomElements with QTreeWidgetItems ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2010, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/utils/vglogreader.cpp =================================================================== --- trunk/src/utils/vglogreader.cpp 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/utils/vglogreader.cpp 2011-06-28 15:51:48 UTC (rev 539) @@ -3,7 +3,7 @@ ** - reads valgrind xml log into a VgLog ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2010, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/utils/vglogreader.h =================================================================== --- trunk/src/utils/vglogreader.h 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/utils/vglogreader.h 2011-06-28 15:51:48 UTC (rev 539) @@ -3,7 +3,7 @@ ** - reads valgrind xml log into a VgLog ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2010, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/utils/vk_config.cpp =================================================================== --- trunk/src/utils/vk_config.cpp 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/utils/vk_config.cpp 2011-06-28 15:51:48 UTC (rev 539) @@ -3,7 +3,7 @@ ** - based on persistent (file-based) application settings ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2010, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/utils/vk_config.h =================================================================== --- trunk/src/utils/vk_config.h 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/utils/vk_config.h 2011-06-28 15:51:48 UTC (rev 539) @@ -3,7 +3,7 @@ ** - based on persistent (file-based) application settings ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2010, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/utils/vk_logpoller.cpp =================================================================== --- trunk/src/utils/vk_logpoller.cpp 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/utils/vk_logpoller.cpp 2011-06-28 15:51:48 UTC (rev 539) @@ -3,7 +3,7 @@ ** - polls a log for updates ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2010, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/utils/vk_logpoller.h =================================================================== --- trunk/src/utils/vk_logpoller.h 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/utils/vk_logpoller.h 2011-06-28 15:51:48 UTC (rev 539) @@ -3,7 +3,7 @@ ** - polls a log for updates ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2010, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/utils/vk_messages.cpp =================================================================== --- trunk/src/utils/vk_messages.cpp 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/utils/vk_messages.cpp 2011-06-28 15:51:48 UTC (rev 539) @@ -3,7 +3,7 @@ ** - various types of messages: Query, Info ... ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2010, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/utils/vk_messages.h =================================================================== --- trunk/src/utils/vk_messages.h 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/utils/vk_messages.h 2011-06-28 15:51:48 UTC (rev 539) @@ -3,7 +3,7 @@ ** - various types of messages: Query, Info ... ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2010, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/utils/vk_utils.cpp =================================================================== --- trunk/src/utils/vk_utils.cpp 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/utils/vk_utils.cpp 2011-06-28 15:51:48 UTC (rev 539) @@ -2,7 +2,7 @@ ** Various utility functions ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2010, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. Modified: trunk/src/utils/vk_utils.h =================================================================== --- trunk/src/utils/vk_utils.h 2011-06-28 15:51:18 UTC (rev 538) +++ trunk/src/utils/vk_utils.h 2011-06-28 15:51:48 UTC (rev 539) @@ -2,7 +2,7 @@ ** Various utility functions ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2010, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. |
From: <sv...@va...> - 2011-06-28 15:56:12
|
Author: cerion Date: 2011-06-28 16:51:18 +0100 (Tue, 28 Jun 2011) New Revision: 538 Log: script to update copyrights Added: trunk/dev/update_copyright.sh Added: trunk/dev/update_copyright.sh =================================================================== --- trunk/dev/update_copyright.sh (rev 0) +++ trunk/dev/update_copyright.sh 2011-06-28 15:51:18 UTC (rev 538) @@ -0,0 +1,40 @@ +#! /bin/sh +# +# Script updates the copyright year in every file in Valkyrie that contains +# a copyright notice. Assumes they're all in the same format: +# +# "Copyright (C) xxxx-yyyy" +# +# To use: +# - Just in case, run it on a _clean_ checkout only. +# - Run it from the base directory of a Valkyrie workspace. +# - And check the results look ok by diff'ing against the repository. +# +# Note that it will output the names of any code files that don't seem to +# have a copyright notice at all. + +dt=`date +%Y` +COPYRIGHT_TPLT="^\*\* Copyright (C) \([0-9][0-9][0-9][0-9]\)-.*, OpenWorks LLP. All rights reserved.$" +COPYRIGHT_NEW="\*\* Copyright (C) \1-$dt, OpenWorks LLP. All rights reserved." + +echo "Updating copyrights..." +find . -regex ".*\.\(cpp\|h\)" -not -regex ".*\/moc_.*" \ + -exec sed -i "s/$COPYRIGHT_TPLT/$COPYRIGHT_NEW/" {} + +if [ "$?" -ne "0" ]; then + echo "Something went wrong!"; +else + echo "done." +fi + +bad_files=`find . -regex ".*\.\(cpp\|h\)$" -not -regex ".*\/moc_.*" \ + | xargs grep -L "$COPYRIGHT_TPLT"` +if [ "X$bad_files" != "X" ]; then + echo + echo "Failed to update the following files (bad match or couldn't find):" + echo "$bad_files" + echo "Please update with the standard copyright notice" +fi + +echo +echo "check the changes with:" +echo "svn diff | grep \"^\(\+\|-\)[^\+-]\" | less" Property changes on: trunk/dev/update_copyright.sh ___________________________________________________________________ Name: svn:executable + * |
From: <sv...@va...> - 2011-06-28 15:35:56
|
Author: cerion Date: 2011-06-28 16:31:04 +0100 (Tue, 28 Jun 2011) New Revision: 537 Log: improved layout a little got icons working again some vkPrintErr instead of cerr Modified: trunk/src/mainwindow.cpp trunk/src/mainwindow.h trunk/src/objects/valkyrie_object.cpp trunk/src/options/helgrind_options_page.h trunk/src/options/memcheck_options_page.h trunk/src/options/vk_options_page.h trunk/src/toolview/helgrindview.cpp trunk/src/toolview/memcheckview.cpp Modified: trunk/src/mainwindow.cpp =================================================================== --- trunk/src/mainwindow.cpp 2011-06-28 11:45:42 UTC (rev 536) +++ trunk/src/mainwindow.cpp 2011-06-28 15:31:04 UTC (rev 537) @@ -77,7 +77,7 @@ lastPalette = qApp->palette(); QIcon icon_vk; - icon_vk.addPixmap( QPixmap( QString::fromUtf8( ":/vk_icons/icons/valkyrie.xpm" ) ), QIcon::Normal, QIcon::Off ); + icon_vk.addPixmap( QPixmap( QString::fromUtf8( ":/vk_icons/icons/valkyrie.xpm" ) ) ); setWindowIcon( icon_vk ); // handbook: init before menubar / toolbar @@ -89,7 +89,6 @@ setupMenus(); setupToolBars(); setupStatusBar(); - setStatus( "Status message goes here..." ); // functions for dealing with config updates VkOption* opt = valkyrie->getOption( VALKYRIE::ICONTXT ); @@ -128,8 +127,6 @@ */ MainWindow::~MainWindow() { - // cerr << "MainWindow::~MainWindow()" << endl; - // cleanup toolviews delete toolViewStack; @@ -196,9 +193,9 @@ actFile_NewProj->setText( tr( "&New Project..." ) ); actFile_NewProj->setToolTip( tr( "Create a project to save your configuration" ) ); QIcon icon_newproj; - icon_newproj.addPixmap( QPixmap( QString::fromUtf8( ":/vk_icons/icons/filenew.png" ) ), - QIcon::Normal, QIcon::Off ); + icon_newproj.addPixmap( QPixmap( QString::fromUtf8( ":/vk_icons/icons/filenew.png" ) ) ); actFile_NewProj->setIcon( icon_newproj ); + actFile_NewProj->setIconVisibleInMenu( true ); connect( actFile_NewProj, SIGNAL( triggered() ), this, SLOT( createNewProject() ) ); actFile_OpenProj = new QAction( this ); @@ -206,9 +203,9 @@ actFile_OpenProj->setText( tr( "&Open Project..." ) ); actFile_OpenProj->setToolTip( tr( "Open an existing project to load a saved configuration" ) ); QIcon icon_openproj; - icon_openproj.addPixmap( QPixmap( QString::fromUtf8( ":/vk_icons/icons/folder_blue.png" ) ), - QIcon::Normal, QIcon::Off ); + icon_openproj.addPixmap( QPixmap( QString::fromUtf8( ":/vk_icons/icons/folder_blue.png" ) ) ); actFile_OpenProj->setIcon( icon_openproj ); + actFile_OpenProj->setIconVisibleInMenu( true ); connect( actFile_OpenProj, SIGNAL( triggered() ), this, SLOT( openProject() ) ); for (int i = 0; i < MaxRecentProjs; ++i) { @@ -222,9 +219,9 @@ actFile_SaveAs->setText( tr( "Save &As..." ) ); actFile_SaveAs->setToolTip( tr( "Save current configuration to a new project" ) ); QIcon icon_saveas; - icon_saveas.addPixmap( QPixmap( QString::fromUtf8( ":/vk_icons/icons/filesaveas.png" ) ), - QIcon::Normal, QIcon::Off ); + icon_saveas.addPixmap( QPixmap( QString::fromUtf8( ":/vk_icons/icons/filesaveas.png" ) ) ); actFile_SaveAs->setIcon( icon_saveas ); + actFile_SaveAs->setIconVisibleInMenu( true ); connect( actFile_SaveAs, SIGNAL( triggered() ), this, SLOT( saveAsProject() ) ); actFile_Close = new QAction( this ); @@ -238,9 +235,9 @@ actFile_Exit->setText( tr( "E&xit" ) ); actFile_Exit->setToolTip( tr( "Exit Valkyrie" ) ); QIcon icon_exit; - icon_exit.addPixmap( QPixmap( QString::fromUtf8( ":/vk_icons/icons/exit.png" ) ), - QIcon::Normal, QIcon::Off ); + icon_exit.addPixmap( QPixmap( QString::fromUtf8( ":/vk_icons/icons/exit.png" ) ) ); actFile_Exit->setIcon( icon_exit ); + actFile_Exit->setIconVisibleInMenu( true ); connect( actFile_Exit, SIGNAL( triggered() ), qApp, SLOT( closeAllWindows() ) ); actEdit_Options = new QAction( this ); @@ -248,9 +245,9 @@ actEdit_Options->setText( tr( "O&ptions" ) ); actEdit_Options->setToolTip( tr( "Open the options-editing window" ) ); QIcon icon_options; - icon_options.addPixmap( QPixmap( QString::fromUtf8( ":/vk_icons/icons/gear.png" ) ), - QIcon::Normal, QIcon::Off ); + icon_options.addPixmap( QPixmap( QString::fromUtf8( ":/vk_icons/icons/gear.png" ) ) ); actEdit_Options->setIcon( icon_options ); + actEdit_Options->setIconVisibleInMenu( true ); connect( actEdit_Options, SIGNAL( triggered() ), this, SLOT( openOptions() ) ); actProcess_Run = new QAction( this ); @@ -259,8 +256,7 @@ actProcess_Run->setToolTip( tr( "Run Valgrind with the currently active tool" ) ); actProcess_Run->setShortcut( QString::fromUtf8( "Ctrl+R" ) ); QIcon icon_run; - icon_run.addPixmap( QPixmap( QString::fromUtf8( ":/vk_icons/icons/valgrind_run.png" ) ), - QIcon::Normal, QIcon::Off ); + icon_run.addPixmap( QPixmap( QString::fromUtf8( ":/vk_icons/icons/valgrind_run.png" ) ) ); actProcess_Run->setIcon( icon_run ); actProcess_Run->setIconVisibleInMenu( true ); connect( actProcess_Run, SIGNAL( triggered() ), this, SLOT( runValgrind() ) ); @@ -270,9 +266,9 @@ actProcess_Stop->setText( tr( "S&top" ) ); actProcess_Stop->setToolTip( tr( "Stop Valgrind" ) ); QIcon icon_stop; - icon_stop.addPixmap( QPixmap( QString::fromUtf8( ":/vk_icons/icons/valgrind_stop.png" ) ), - QIcon::Normal, QIcon::Off ); + icon_stop.addPixmap( QPixmap( QString::fromUtf8( ":/vk_icons/icons/valgrind_stop.png" ) ) ); actProcess_Stop->setIcon( icon_stop ); + actProcess_Stop->setIconVisibleInMenu( true ); connect( actProcess_Stop, SIGNAL( triggered() ), this, SLOT( stopTool() ) ); actHelp_Handbook = new QAction( this ); @@ -281,8 +277,9 @@ actHelp_Handbook->setToolTip( tr( "Open the Valkyrie Handbook" ) ); actHelp_Handbook->setShortcut( QString::fromUtf8( "F1" ) ); QIcon icon_handbook; - icon_handbook.addPixmap( QPixmap( QString::fromUtf8( ":/vk_icons/icons/tb_handbook_help.xpm" ) ), QIcon::Normal, QIcon::Off ); + icon_handbook.addPixmap( QPixmap( QString::fromUtf8( ":/vk_icons/icons/tb_handbook_help.xpm" ) ) ); actHelp_Handbook->setIcon( icon_handbook ); + actHelp_Handbook->setIconVisibleInMenu( true ); connect( actHelp_Handbook, SIGNAL( triggered() ), this, SLOT( openHandBook() ) ); actHelp_About_Valkyrie = new QAction( this ); @@ -317,8 +314,7 @@ this, SLOT( toolGroupTriggered( QAction* ) ) ); QIcon icon_bullet; - icon_bullet.addPixmap( QPixmap( QString::fromUtf8( ":/vk_icons/icons/tb_mainwin_blackbullet.xpm" ) ), - QIcon::Normal, QIcon::Off ); + icon_bullet.addPixmap( QPixmap( QString::fromUtf8( ":/vk_icons/icons/tb_mainwin_blackbullet.xpm" ) ) ); ToolObjList tools = valkyrie->valgrind()->getToolObjList(); vk_assert( tools.size() > 0 ); @@ -463,7 +459,6 @@ statusLabel = new QLabel( mainStatusBar ); statusLabel->setObjectName( QString::fromUtf8( "statusLabel " ) ); - mainStatusBar->addWidget( new QLabel(" "), 0); // spacing mainStatusBar->addWidget( statusLabel, 1 ); // mainStatusBar->addPermanentWidget( permanentLabel, 0 ); } @@ -531,7 +526,7 @@ connect( nextTool, SIGNAL( running( bool ) ), this, SLOT( updateVgButtons( bool ) ) ); connect( nextTool, SIGNAL( message( QString ) ), - this, SLOT( setStatus( QString ) ) ); + statusLabel, SLOT( setText( QString ) ) ); // Set a vg logfile. Loading done by tool_object connect( nextView, SIGNAL( logFileChosen( QString ) ), @@ -926,8 +921,7 @@ int numRecentProjs = qMin(files.size(), (int)MaxRecentProjs); for (int i = 0; i < numRecentProjs; ++i) { - QString text = tr("&%1 %2").arg( i+1 ) - .arg( QFileInfo( files[i] ).fileName() ); + QString text = QFileInfo( files[i] ).fileName(); actFile_RecentProjs[i]->setText(text); actFile_RecentProjs[i]->setData(files[i]); actFile_RecentProjs[i]->setVisible(true); @@ -950,16 +944,16 @@ // if there ain't no toolview, we cain't do much if ( tv == 0 ) { - cerr << "MainWindow::closeToolView(): No toolview!" << endl; + vkPrintErr( "MainWindow::closeToolView(): No toolview. " + "This shouldn't happen!" ); return; } - cerr << "MainWindow::closeToolView(): " << - tv->objectName().toLatin1().data() << endl; + vkDebug( "MainWindow::closeToolView(): %s", qPrintable( tv->objectName() ) ); // last process might not be done ... if ( !valkyrie->queryToolDone( toolViewStack->currentToolId() ) ) { - cerr << "Warning: Last process not finished" << endl; + vkPrintErr( "Warning: Last process not finished" ); return; } @@ -970,17 +964,7 @@ } -/*! - Set the status message for the main status bar -*/ -void MainWindow::setStatus( QString msg ) -{ - statusLabel->setText( "Vk: " + msg ); -} - - - /*! Calls showToolView() for a chosen valgrind tool. @@ -993,9 +977,6 @@ void MainWindow::toolGroupTriggered( QAction* action ) { VGTOOL::ToolID toolId = ( VGTOOL::ToolID )action->property( "toolId" ).toInt(); - - // cerr << "MainWindow::toolGroupTriggered() for toolview " << toolId << endl; - showToolView( toolId ); } @@ -1031,15 +1012,14 @@ void MainWindow::runTool( VGTOOL::ToolProcessId procId ) { VGTOOL::ToolID tId = toolViewStack->currentToolId(); - cerr << "MainWindow::runTool( tool: " << tId - << ", proc: " << procId << " )" << endl; - + vk_assert( procId > VGTOOL::PROC_NONE ); - + // don't come in here if there's no current view if ( !toolViewStack->isVisible() ) { //This should never happen... assert? - cerr << "Error: No toolview visible!" << endl; + vkPrintErr( "Error: No toolview visible (procId=%d)." + "This shouldn't happen!", procId ); return; } @@ -1060,7 +1040,7 @@ // last process might not be done ... if ( !valkyrie->queryToolDone( tId ) ) { - cerr << "Warning: Last process not finished" << endl; + vkPrintErr( "Warning: Last process not finished" ); return; } Modified: trunk/src/mainwindow.h =================================================================== --- trunk/src/mainwindow.h 2011-06-28 11:45:42 UTC (rev 536) +++ trunk/src/mainwindow.h 2011-06-28 15:31:04 UTC (rev 537) @@ -54,7 +54,6 @@ } public slots: - void setStatus( QString msg ); void showToolView( VGTOOL::ToolID toolId ); void runTool( VGTOOL::ToolProcessId procId ); void openOptions(); Modified: trunk/src/objects/valkyrie_object.cpp =================================================================== --- trunk/src/objects/valkyrie_object.cpp 2011-06-28 11:45:42 UTC (rev 536) +++ trunk/src/objects/valkyrie_object.cpp 2011-06-28 15:31:04 UTC (rev 537) @@ -699,8 +699,6 @@ */ bool Valkyrie::runTool( VGTOOL::ToolID tId, VGTOOL::ToolProcessId procId ) { - cerr << "Valkyrie::runTool( " << tId << ", " << procId << ")" << endl; - vk_assert( tId != VGTOOL::ID_NULL ); ToolObject* activeTool = valgrind()->getToolObj( tId ); vk_assert( activeTool != 0 ); Modified: trunk/src/options/helgrind_options_page.h =================================================================== --- trunk/src/options/helgrind_options_page.h 2011-06-28 11:45:42 UTC (rev 536) +++ trunk/src/options/helgrind_options_page.h 2011-06-28 15:31:04 UTC (rev 537) @@ -18,7 +18,6 @@ ** ****************************************************************************/ - #ifndef __HELGRIND_OPTIONS_PAGE_H #define __HELGRIND_OPTIONS_PAGE_H Modified: trunk/src/options/memcheck_options_page.h =================================================================== --- trunk/src/options/memcheck_options_page.h 2011-06-28 11:45:42 UTC (rev 536) +++ trunk/src/options/memcheck_options_page.h 2011-06-28 15:31:04 UTC (rev 537) @@ -18,7 +18,6 @@ ** ****************************************************************************/ - #ifndef __MEMCHECK_OPTIONS_PAGE_H #define __MEMCHECK_OPTIONS_PAGE_H Modified: trunk/src/options/vk_options_page.h =================================================================== --- trunk/src/options/vk_options_page.h 2011-06-28 11:45:42 UTC (rev 536) +++ trunk/src/options/vk_options_page.h 2011-06-28 15:31:04 UTC (rev 537) @@ -1,7 +1,7 @@ /**************************************************************************** ** VkOptionsPage definition ** - Each vkObject has different options | flags | prefs, and -** creates its own 'page', which is inherited from this base class. * +** creates its own 'page', which is inherited from this base class. ** - The 'page' is contained within the top-level Options Window. ** -------------------------------------------------------------------------- ** @@ -20,19 +20,6 @@ ** ****************************************************************************/ -/* ---------------------------------------------------------------------- - * Definition of class VkOptionsPage options_page.h - * - * Each vkObject has different options | flags | prefs, and - * creates its own 'page', which is inherited from this base class. - * The 'page' is contained within the top-level Options Window. - * ---------------------------------------------------------------------- - * This file is part of Valkyrie, a front-end for Valgrind - * Copyright (C) 2000-2008, OpenWorks LLP <in...@op...> - * This program is released under the terms of the GNU GPL v.2 - * See the file COPYING for the full license details. - */ - #ifndef __VK_OPTIONS_PAGE_H #define __VK_OPTIONS_PAGE_H Modified: trunk/src/toolview/helgrindview.cpp =================================================================== --- trunk/src/toolview/helgrindview.cpp 2011-06-28 11:45:42 UTC (rev 536) +++ trunk/src/toolview/helgrindview.cpp 2011-06-28 15:31:04 UTC (rev 537) @@ -127,7 +127,7 @@ */ void HelgrindView::openLogFile() { -// cerr << "HelgrindView::openLogFile()" << endl; + //vkDebug( "HelgrindView::openLogFile()\n" ); QString last_file = vkCfgProj->value( "valkyrie/view-log" ).toString(); if ( last_file.isEmpty() ) last_file = "./"; @@ -155,7 +155,8 @@ void HelgrindView::setupLayout() { QVBoxLayout* vLayout = new QVBoxLayout( this ); - + vLayout->setMargin(0); + treeView = new QTreeWidget( this ); treeView->setObjectName( QString::fromUtf8( "treeview_Helgrind" ) ); treeView->setHeaderHidden( true ); @@ -174,43 +175,43 @@ act_OpenClose_item = new QAction( this ); act_OpenClose_item->setObjectName( QString::fromUtf8( "act_OpenClose_item" ) ); QIcon icon_opencloseitem; - icon_opencloseitem.addPixmap( QPixmap( QString::fromUtf8( ":/vk_icons/icons/item_open.png" ) ), - QIcon::Normal, QIcon::Off ); + icon_opencloseitem.addPixmap( QPixmap( QString::fromUtf8( ":/vk_icons/icons/item_open.png" ) ) ); act_OpenClose_item->setIcon( icon_opencloseitem ); + act_OpenClose_item->setIconVisibleInMenu( true ); connect( act_OpenClose_item, SIGNAL( triggered() ), this, SLOT( opencloseOneItem() ) ); act_OpenClose_all = new QAction( this ); act_OpenClose_all->setObjectName( QString::fromUtf8( "act_OpenClose_all" ) ); QIcon icon_opencloseall; - icon_opencloseall.addPixmap( QPixmap( QString::fromUtf8( ":/vk_icons/icons/tree_open.png" ) ), - QIcon::Normal, QIcon::Off ); + icon_opencloseall.addPixmap( QPixmap( QString::fromUtf8( ":/vk_icons/icons/tree_open.png" ) ) ); act_OpenClose_all->setIcon( icon_opencloseall ); + act_OpenClose_all->setIconVisibleInMenu( true ); connect( act_OpenClose_all, SIGNAL( triggered() ), this, SLOT( opencloseAllItems() ) ); act_ShowSrcPaths = new QAction( this ); act_ShowSrcPaths->setObjectName( QString::fromUtf8( "act_ShowSrcPaths" ) ); QIcon icon_showsrcpaths; - icon_showsrcpaths.addPixmap( QPixmap( QString::fromUtf8( ":/vk_icons/icons/text_more.png" ) ), - QIcon::Normal, QIcon::Off ); + icon_showsrcpaths.addPixmap( QPixmap( QString::fromUtf8( ":/vk_icons/icons/text_more.png" ) ) ); act_ShowSrcPaths->setIcon( icon_showsrcpaths ); + act_ShowSrcPaths->setIconVisibleInMenu( true ); connect( act_ShowSrcPaths, SIGNAL( triggered() ), this, SLOT( showSrcPath() ) ); act_OpenLog = new QAction( this ); act_OpenLog->setObjectName( QString::fromUtf8( "act_OpenLog" ) ); QIcon icon_openlog; - icon_openlog.addPixmap( QPixmap( QString::fromUtf8( ":/vk_icons/icons/folder_green.png" ) ), - QIcon::Normal, QIcon::Off ); + icon_openlog.addPixmap( QPixmap( QString::fromUtf8( ":/vk_icons/icons/folder_green.png" ) ) ); act_OpenLog->setIcon( icon_openlog ); + act_OpenLog->setIconVisibleInMenu( true ); connect( act_OpenLog, SIGNAL( triggered() ), this, SLOT( openLogFile() ) ); act_SaveLog = new QAction( this ); act_SaveLog->setObjectName( QString::fromUtf8( "act_SaveLog" ) ); QIcon icon_savelog; - icon_savelog.addPixmap( QPixmap( QString::fromUtf8( ":/vk_icons/icons/filesaveas.png" ) ), - QIcon::Normal, QIcon::Off ); + icon_savelog.addPixmap( QPixmap( QString::fromUtf8( ":/vk_icons/icons/filesaveas.png" ) ) ); act_SaveLog->setIcon( icon_savelog ); + act_SaveLog->setIconVisibleInMenu( true ); connect( act_SaveLog, SIGNAL( triggered() ), this, SIGNAL( saveLogFile() ) ); // ------------------------------------------------------------ @@ -305,7 +306,7 @@ */ void HelgrindView::launchEditor( QTreeWidgetItem* item ) { -// cerr << "HelgrindView::launchEditor(): " << qPrintable( item->text( 0 ) ) << endl; + //vkDebug( "HelgrindView::launchEditor( %s )", qPrintable( item->text( 0 ) ) ); VgOutputItem* vgItemCurr = (VgOutputItem*)item; if ( !vgItemCurr || @@ -389,7 +390,7 @@ */ void HelgrindView::showSrcPath() { -// cerr << "HelgrindView::showSrcPath()" << endl; + //vkDebug( "HelgrindView::showSrcPath()" ); if ( treeView->topLevelItemCount() == 0 ) { return; @@ -440,7 +441,7 @@ */ void HelgrindView::opencloseAllItems() { -// cerr << "HelgrindView::opencloseAllItems()" << endl; + //vkDebug( "HelgrindView::opencloseAllItems()" ); if ( treeView->topLevelItemCount() == 0 ) { // empty tree. @@ -449,7 +450,7 @@ VgOutputItem* vgItemTop = (VgOutputItem*)treeView->topLevelItem( 0 ); if ( !vgItemTop || vgItemTop->childCount() == 0 ) { - cerr << "Error: listview not populated as expected" << endl; + vkPrintErr( "Error: listview not populated. This shouldn't happen!" ); return; } @@ -479,9 +480,8 @@ } } if ( idxItemERR == -1 ) { - // first ERROR element not found :-( - cerr << "Error: listview not populated as expected " - << "(no VG_ELEM::ERROR found)" << endl; + // first ERROR element not found - perhaps there were no errors! + vkDebug( "No VG_ELEM::ERROR found." ); return; } @@ -516,6 +516,8 @@ */ void HelgrindView::opencloseOneItem() { + //vkDebug( "HelgrindView::opencloseOneItem():" ); + QTreeWidgetItem* item = treeView->currentItem(); if ( item == 0 ) return; @@ -536,7 +538,7 @@ */ void HelgrindView::itemExpanded( QTreeWidgetItem* item ) { -// cerr << "HelgrindView::itemExpanded(): " << endl; + //vkDebug( "HelgrindView::itemExpanded():" ); ((VgOutputItem*)item)->openChildren(); } @@ -546,7 +548,7 @@ */ void HelgrindView::itemCollapsed( QTreeWidgetItem* item ) { -// cerr << "HelgrindView::itemCollapsed(): " << endl; + //vkDebug( "HelgrindView::itemCollapsed():" ); if ( item != treeView->currentItem() ) { // this should be a slot. grr! @@ -560,7 +562,7 @@ */ void HelgrindView::updateItemActions() { -// cerr << "HelgrindView::updateItemActions(): " << endl; + //vkDebug( "HelgrindView::updateItemActions():" ); QTreeWidgetItem* item = treeView->currentItem(); if ( !item ) { Modified: trunk/src/toolview/memcheckview.cpp =================================================================== --- trunk/src/toolview/memcheckview.cpp 2011-06-28 11:45:42 UTC (rev 536) +++ trunk/src/toolview/memcheckview.cpp 2011-06-28 15:31:04 UTC (rev 537) @@ -3,7 +3,7 @@ ** - memcheck's personal window ** -------------------------------------------------------------------------- ** -** Copyright (C) 2000-2009, OpenWorks LLP. All rights reserved. +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. ** <in...@op...> ** ** This file is part of Valkyrie, a front-end for Valgrind. @@ -133,7 +133,7 @@ */ void MemcheckView::openLogFile() { -// cerr << "MemcheckView::openLogFile()" << endl; + //vkDebug( "MemcheckView::openLogFile()" ); QString last_file = vkCfgProj->value( "valkyrie/view-log" ).toString(); if ( last_file.isEmpty() ) last_file = "./"; @@ -161,6 +161,7 @@ void MemcheckView::setupLayout() { QVBoxLayout* vLayout = new QVBoxLayout( this ); + vLayout->setMargin(0); treeView = new QTreeWidget( this ); treeView->setObjectName( QString::fromUtf8( "treeview_Memcheck" ) ); @@ -185,43 +186,43 @@ act_OpenClose_item = new QAction( this ); act_OpenClose_item->setObjectName( QString::fromUtf8( "act_OpenClose_item" ) ); QIcon icon_opencloseitem; - icon_opencloseitem.addPixmap( QPixmap( QString::fromUtf8( ":/vk_icons/icons/item_open.png" ) ), - QIcon::Normal, QIcon::Off ); + icon_opencloseitem.addPixmap( QPixmap( QString::fromUtf8( ":/vk_icons/icons/item_open.png" ) ) ); act_OpenClose_item->setIcon( icon_opencloseitem ); + act_OpenClose_item->setIconVisibleInMenu( true ); connect( act_OpenClose_item, SIGNAL( triggered() ), this, SLOT( opencloseOneItem() ) ); act_OpenClose_all = new QAction( this ); act_OpenClose_all->setObjectName( QString::fromUtf8( "act_OpenClose_all" ) ); QIcon icon_opencloseall; - icon_opencloseall.addPixmap( QPixmap( QString::fromUtf8( ":/vk_icons/icons/tree_open.png" ) ), - QIcon::Normal, QIcon::Off ); + icon_opencloseall.addPixmap( QPixmap( QString::fromUtf8( ":/vk_icons/icons/tree_open.png" ) ) ); act_OpenClose_all->setIcon( icon_opencloseall ); + act_OpenClose_all->setIconVisibleInMenu( true ); connect( act_OpenClose_all, SIGNAL( triggered() ), this, SLOT( opencloseAllItems() ) ); act_ShowSrcPaths = new QAction( this ); act_ShowSrcPaths->setObjectName( QString::fromUtf8( "act_ShowSrcPaths" ) ); QIcon icon_showsrcpaths; - icon_showsrcpaths.addPixmap( QPixmap( QString::fromUtf8( ":/vk_icons/icons/text_more.png" ) ), - QIcon::Normal, QIcon::Off ); + icon_showsrcpaths.addPixmap( QPixmap( QString::fromUtf8( ":/vk_icons/icons/text_more.png" ) ) ); act_ShowSrcPaths->setIcon( icon_showsrcpaths ); + act_ShowSrcPaths->setIconVisibleInMenu( true ); connect( act_ShowSrcPaths, SIGNAL( triggered() ), this, SLOT( showSrcPath() ) ); act_OpenLog = new QAction( this ); act_OpenLog->setObjectName( QString::fromUtf8( "act_OpenLog" ) ); QIcon icon_openlog; - icon_openlog.addPixmap( QPixmap( QString::fromUtf8( ":/vk_icons/icons/folder_green.png" ) ), - QIcon::Normal, QIcon::Off ); + icon_openlog.addPixmap( QPixmap( QString::fromUtf8( ":/vk_icons/icons/folder_green.png" ) ) ); act_OpenLog->setIcon( icon_openlog ); + act_OpenLog->setIconVisibleInMenu( true ); connect( act_OpenLog, SIGNAL( triggered() ), this, SLOT( openLogFile() ) ); act_SaveLog = new QAction( this ); act_SaveLog->setObjectName( QString::fromUtf8( "act_SaveLog" ) ); QIcon icon_savelog; - icon_savelog.addPixmap( QPixmap( QString::fromUtf8( ":/vk_icons/icons/filesaveas.png" ) ), - QIcon::Normal, QIcon::Off ); + icon_savelog.addPixmap( QPixmap( QString::fromUtf8( ":/vk_icons/icons/filesaveas.png" ) ) ); act_SaveLog->setIcon( icon_savelog ); + act_SaveLog->setIconVisibleInMenu( true ); connect( act_SaveLog, SIGNAL( triggered() ), this, SIGNAL( saveLogFile() ) ); // ------------------------------------------------------------ @@ -279,6 +280,8 @@ */ void MemcheckView::setState( bool run ) { + //vkDebug( "MemcheckView::setState( %d )", run ); + act_OpenLog->setEnabled( !run ); // just turn off while running if ( run ) { @@ -316,7 +319,7 @@ */ void MemcheckView::launchEditor( QTreeWidgetItem* item ) { -// cerr << "MemcheckView::launchEditor(): " << qPrintable( item->text( 0 ) ) << endl; + vkDebug( "MemcheckView::launchEditor( %s )", qPrintable( item->text( 0 ) ) ); VgOutputItem* vgItemCurr = (VgOutputItem*)item; if ( !vgItemCurr || @@ -397,6 +400,7 @@ void MemcheckView::popupMenu( const QPoint& pos ) { + //vkDebug( "MemcheckView::popupMenu()" ); VgOutputItem* item = (VgOutputItem*)treeView->itemAt( pos ); if ( !item ) return; @@ -469,7 +473,7 @@ */ void MemcheckView::showSrcPath() { -// cerr << "MemcheckView::showSrcPath()" << endl; + //vkDebug( "MemcheckView::showSrcPath()" ); if ( treeView->topLevelItemCount() == 0 ) { return; @@ -520,7 +524,7 @@ */ void MemcheckView::opencloseAllItems() { -// cerr << "MemcheckView::opencloseAllItems()" << endl; + //vkDebug( "MemcheckView::opencloseAllItems()" ); if ( treeView->topLevelItemCount() == 0 ) { // empty tree. @@ -529,7 +533,7 @@ VgOutputItem* vgItemTop = (VgOutputItem*)treeView->topLevelItem( 0 ); if ( !vgItemTop || vgItemTop->childCount() == 0 ) { - cerr << "Error: listview not populated as expected" << endl; + vkPrintErr( "Error: listview not populated. This shouldn't happen!" ); return; } @@ -560,8 +564,7 @@ } if ( idxItemERR == -1 ) { // first ERROR element not found :-( - cerr << "Error: listview not populated as expected " - << "(no VG_ELEM::ERROR found)" << endl; + vkDebug( "No VG_ELEM::ERROR found." ); return; } @@ -596,6 +599,7 @@ */ void MemcheckView::opencloseOneItem() { + //vkDebug( "MemcheckView::opencloseOneItem():" ); QTreeWidgetItem* item = treeView->currentItem(); if ( item == 0 ) return; @@ -616,7 +620,7 @@ */ void MemcheckView::itemExpanded( QTreeWidgetItem* item ) { -// cerr << "MemcheckView::itemExpanded(): " << endl; + //vkDebug( "MemcheckView::itemExpanded():" ); ((VgOutputItem*)item)->openChildren(); } @@ -626,7 +630,7 @@ */ void MemcheckView::itemCollapsed( QTreeWidgetItem* item ) { -// cerr << "MemcheckView::itemCollapsed(): " << endl; + //vkDebug( "MemcheckView::itemCollapsed():" ); if ( item != treeView->currentItem() ) { // this should be a slot. grr! @@ -640,7 +644,7 @@ */ void MemcheckView::updateItemActions() { -// cerr << "MemcheckView::updateItemActions(): " << endl; + //vkDebug( "MemcheckView::updateItemActions():" ); QTreeWidgetItem* item = treeView->currentItem(); if ( !item ) { |
From: <sv...@va...> - 2011-06-28 11:50:34
|
Author: cerion Date: 2011-06-28 12:45:42 +0100 (Tue, 28 Jun 2011) New Revision: 536 Log: couple more nigglies. Modified: trunk/src/options/valgrind_options_page.cpp trunk/src/options/vk_options_dialog.cpp Modified: trunk/src/options/valgrind_options_page.cpp =================================================================== --- trunk/src/options/valgrind_options_page.cpp 2011-06-28 11:20:25 UTC (rev 535) +++ trunk/src/options/valgrind_options_page.cpp 2011-06-28 11:45:42 UTC (rev 536) @@ -329,6 +329,16 @@ dbLedit->button()->setEnabled( false ); vk_assert( m_itemList.count() <= VALGRIND::NUM_OPTS ); + + + // ------------------------------------------------------------ + // tooltips + // TODO: put these in the options. + QString tip_supp = tr( "Tip: To enable generation of suppressions " + "from Valgrind output, set this to 'all'.<br/>" + "Then right-click an error item to generate a suppression."); + m_itemList[VALGRIND::GEN_SUPP]->label()->setToolTip( tip_supp ); + m_itemList[VALGRIND::GEN_SUPP]->widget()->setToolTip( tip_supp ); } Modified: trunk/src/options/vk_options_dialog.cpp =================================================================== --- trunk/src/options/vk_options_dialog.cpp 2011-06-28 11:20:25 UTC (rev 535) +++ trunk/src/options/vk_options_dialog.cpp 2011-06-28 11:45:42 UTC (rev 536) @@ -186,6 +186,7 @@ // options button box QHBoxLayout* hLayoutButtons = new QHBoxLayout( hButtonWidget ); hLayoutButtons->setObjectName( QString::fromUtf8( "hLayoutButtons" ) ); + hLayoutButtons->setMargin(0); updateDefaultsButton = new QPushButton( QPixmap( ":/vk_icons/icons/filesave.png" ), "Save As Project Default" ); |
From: <sv...@va...> - 2011-06-28 11:25:16
|
Author: cerion Date: 2011-06-28 12:20:25 +0100 (Tue, 28 Jun 2011) New Revision: 535 Log: couple of niggle things - less margin, better tootip, etc. Modified: trunk/src/mainwindow.cpp trunk/src/toolview/memcheckview.cpp trunk/src/toolview/toolview.cpp Modified: trunk/src/mainwindow.cpp =================================================================== --- trunk/src/mainwindow.cpp 2011-06-28 11:19:19 UTC (rev 534) +++ trunk/src/mainwindow.cpp 2011-06-28 11:20:25 UTC (rev 535) @@ -454,11 +454,18 @@ // Basic statusbar setup mainStatusBar = this->statusBar(); mainStatusBar->setObjectName( QString::fromUtf8( "mainStatusBar " ) ); + +#if 0 //TODO: make use of this... + QLabel* permanentLabel = new QLabel( mainStatusBar ); + permanentLabel->setObjectName( QString::fromUtf8( "permanentLabel " ) ); +#endif statusLabel = new QLabel( mainStatusBar ); statusLabel->setObjectName( QString::fromUtf8( "statusLabel " ) ); - // statusLabel->setFrameStyle( QFrame::StyledPanel | QFrame::Sunken ); - mainStatusBar->addPermanentWidget( statusLabel, 10 ); + + mainStatusBar->addWidget( new QLabel(" "), 0); // spacing + mainStatusBar->addWidget( statusLabel, 1 ); +// mainStatusBar->addPermanentWidget( permanentLabel, 0 ); } Modified: trunk/src/toolview/memcheckview.cpp =================================================================== --- trunk/src/toolview/memcheckview.cpp 2011-06-28 11:19:19 UTC (rev 534) +++ trunk/src/toolview/memcheckview.cpp 2011-06-28 11:20:25 UTC (rev 535) @@ -235,7 +235,7 @@ act_OpenClose_all->setText( tr( "Open/Close all" ) ); act_OpenClose_all->setToolTip( tr( "Open/Close all Valgrind::ERROR items" ) ); act_ShowSrcPaths->setText( tr( "Display simple" ) ); - act_ShowSrcPaths->setToolTip( tr( "Display complex / simplified view" ) ); + act_ShowSrcPaths->setToolTip( tr( "Display short / full source paths" ) ); act_OpenLog->setText( tr( "Open Log" ) ); act_OpenLog->setToolTip( tr( "Open Memcheck XML log" ) ); Modified: trunk/src/toolview/toolview.cpp =================================================================== --- trunk/src/toolview/toolview.cpp 2011-06-28 11:19:19 UTC (rev 534) +++ trunk/src/toolview/toolview.cpp 2011-06-28 11:20:25 UTC (rev 535) @@ -160,6 +160,7 @@ widgetStack->setObjectName( QString::fromUtf8( "widgetStack" ) ); QHBoxLayout* layout = new QHBoxLayout; + layout->setMargin( 0 ); layout->setSpacing( 0 ); layout->addWidget( widgetStack ); setLayout( layout ); |
From: <sv...@va...> - 2011-06-28 11:24:10
|
Author: cerion Date: 2011-06-28 12:19:19 +0100 (Tue, 28 Jun 2011) New Revision: 534 Log: implemented a stack-based singleton for read-only suppression config Modified: trunk/src/options/suppressions.cpp trunk/src/options/suppressions.h trunk/src/options/vk_suppressions_dialog.cpp Modified: trunk/src/options/suppressions.cpp =================================================================== --- trunk/src/options/suppressions.cpp 2011-06-27 15:01:58 UTC (rev 533) +++ trunk/src/options/suppressions.cpp 2011-06-28 11:19:19 UTC (rev 534) @@ -27,7 +27,6 @@ #include <QFile> -SuppRanges *SuppRanges::s_instance = 0; /*! class SuppRanges @@ -88,6 +87,9 @@ + + + /*! class Suppression */ @@ -123,14 +125,14 @@ } QRegExp re( list[0], Qt::CaseInsensitive ); - int idx = SuppRanges::instance()->kindTools.indexOf( re ); + int idx = SuppRanges::instance().getKindTools().indexOf( re ); if ( idx == -1 ) { vkPrintErr("Bad Tool (%s) for this suppression (%s).", qPrintable(list[0]), qPrintable(m_name)); return false; } else { - QStringList kindTypes = SuppRanges::instance()->kindTypes[idx]; + const QStringList kindTypes = SuppRanges::instance().getKindTypes()[idx]; if ( !kindTypes.contains( list[1], Qt::CaseInsensitive ) ) { vkPrintErr("Bad SupprType (%s) for Tool (%s) for this suppression (%s).", qPrintable(list[1]), qPrintable(list[0]), qPrintable(m_name)); @@ -163,7 +165,7 @@ return false; } - if ( !SuppRanges::instance()->frameTypes.contains( list[0], Qt::CaseInsensitive ) ) { + if ( !SuppRanges::instance().getFrameTypes().contains( list[0], Qt::CaseInsensitive ) ) { vkPrintErr( "Unsupported frame type (%s) for suppression '%s'.", qPrintable(list[0]), qPrintable(m_name) ); return false; Modified: trunk/src/options/suppressions.h =================================================================== --- trunk/src/options/suppressions.h 2011-06-27 15:01:58 UTC (rev 533) +++ trunk/src/options/suppressions.h 2011-06-28 11:19:19 UTC (rev 534) @@ -29,31 +29,35 @@ #define MAX_SUPP_FRAMES 20 - // ============================================================ -// Singleton class holding some handy reference data +// SuppRanges: read-only configuration data for Suppressions +// - implemented as a stack-based singleton class SuppRanges { +private: + SuppRanges(); + SuppRanges(SuppRanges const&); // Not implemented + SuppRanges& operator=(SuppRanges const&); // Not implemented + public: - static SuppRanges *instance() - { - if (!s_instance) - s_instance = new SuppRanges; - return s_instance; + static SuppRanges& instance() { + static SuppRanges theInstance; + return theInstance; } + ~SuppRanges() {}; + // limit access to read-only, so issues with global access + const QStringList& getKindTools() { return kindTools; } + const QList<QStringList>& getKindTypes() { return kindTypes; } + const QStringList& getFrameTypes() { return frameTypes; } + +private: QStringList kindTools; // Memcheck|... QList<QStringList> kindTypes; // list for every tool QStringList frameTypes; // obj|fun - -private: - SuppRanges(); - static SuppRanges *s_instance; }; - - // ============================================================ class Suppression { Modified: trunk/src/options/vk_suppressions_dialog.cpp =================================================================== --- trunk/src/options/vk_suppressions_dialog.cpp 2011-06-27 15:01:58 UTC (rev 533) +++ trunk/src/options/vk_suppressions_dialog.cpp 2011-06-28 11:19:19 UTC (rev 534) @@ -51,7 +51,7 @@ frame_cmb = new QComboBox(); frame_cmb->setMinimumWidth( width_col1 ); - frame_cmb->addItems( SuppRanges::instance()->frameTypes ); + frame_cmb->addItems( SuppRanges::instance().getFrameTypes() ); frame_le = new QLineEdit(); @@ -125,7 +125,7 @@ // Kind-Tool QLabel* tool_lbl = new QLabel("Kind-Tool:"); tool_cmb = new QComboBox(); - tool_cmb->addItems( SuppRanges::instance()->kindTools ); + tool_cmb->addItems( SuppRanges::instance().getKindTools() ); connect( tool_cmb, SIGNAL(currentIndexChanged(int)), this, SLOT(ToolChanged(int)) ); // Kind-Type @@ -249,7 +249,7 @@ void VkSuppressionsDialog::ToolChanged( int idx ) { type_cmb->clear(); - type_cmb->addItems( SuppRanges::instance()->kindTypes[idx] ); + type_cmb->addItems( SuppRanges::instance().getKindTypes()[idx] ); } void VkSuppressionsDialog::TypeChanged( int ) |
From: <sv...@va...> - 2011-06-27 15:06:48
|
Author: cerion Date: 2011-06-27 16:01:58 +0100 (Mon, 27 Jun 2011) New Revision: 533 Log: duh. Modified: trunk/src/options/valgrind_options_page.cpp Modified: trunk/src/options/valgrind_options_page.cpp =================================================================== --- trunk/src/options/valgrind_options_page.cpp 2011-06-27 14:30:50 UTC (rev 532) +++ trunk/src/options/valgrind_options_page.cpp 2011-06-27 15:01:58 UTC (rev 533) @@ -488,6 +488,17 @@ return; } + // first check we have a file to write to + LbWidget* lbSel = ( LbWidget* )m_itemList[VALGRIND::SUPPS_SEL]; + QListWidget* lwSuppFiles = (QListWidget*)lbSel->widget(); + if ( lwSuppFiles->count() == 0 ) { + suppfileNew(); + } + // still no supp file? user may have Cancelled... + if ( lwSuppFiles->count() == 0 ) { + return; + } + // Edit new supp: update model and suppfile first... if ( supplist.editSupp( -1, supp ) ) { // ... then update the view |
From: <sv...@va...> - 2011-06-27 14:35:43
|
Author: cerion Date: 2011-06-27 15:30:50 +0100 (Mon, 27 Jun 2011) New Revision: 532 Log: Added: 1. Suppressions editor 2. Right click on an error -> suppress that error 3. Right click on any listitem -> copy text/XML to clipboard Added: trunk/icons/arrow_down.png trunk/icons/arrow_up.png trunk/src/options/suppressions.cpp trunk/src/options/suppressions.h trunk/src/options/vk_suppressions_dialog.cpp trunk/src/options/vk_suppressions_dialog.h Modified: trunk/icons.qrc trunk/src/mainwindow.cpp trunk/src/objects/valgrind_object.cpp trunk/src/objects/valkyrie_object.cpp trunk/src/options/valgrind_options_page.cpp trunk/src/options/valgrind_options_page.h trunk/src/options/vk_options_dialog.cpp trunk/src/options/vk_options_dialog.h trunk/src/options/vk_options_page.h trunk/src/options/widgets/opt_lb_widget.cpp trunk/src/options/widgets/opt_lb_widget.h trunk/src/src.pro trunk/src/toolview/memcheckview.cpp trunk/src/toolview/memcheckview.h trunk/src/toolview/vglogview.cpp trunk/src/toolview/vglogview.h trunk/vk_config.pri Added: trunk/icons/arrow_down.png =================================================================== (Binary files differ) Property changes on: trunk/icons/arrow_down.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/icons/arrow_up.png =================================================================== (Binary files differ) Property changes on: trunk/icons/arrow_up.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Modified: trunk/icons.qrc =================================================================== --- trunk/icons.qrc 2011-06-24 12:31:13 UTC (rev 531) +++ trunk/icons.qrc 2011-06-27 14:30:50 UTC (rev 532) @@ -1,5 +1,5 @@ <RCC> - <qresource prefix="/vk_icons" > + <qresource prefix="/vk_icons"> <file>icons/msgbox_error.xpm</file> <file>icons/msgbox_info.xpm</file> <file>icons/msgbox_query.xpm</file> @@ -30,5 +30,7 @@ <file>icons/tree_open.png</file> <file>icons/text_less.png</file> <file>icons/text_more.png</file> + <file>icons/arrow_down.png</file> + <file>icons/arrow_up.png</file> </qresource> </RCC> Modified: trunk/src/mainwindow.cpp =================================================================== --- trunk/src/mainwindow.cpp 2011-06-24 12:31:13 UTC (rev 531) +++ trunk/src/mainwindow.cpp 2011-06-27 14:30:50 UTC (rev 532) @@ -113,6 +113,13 @@ updateEventFilters( this ); updateEventFilters( handBook ); + +#if 0 + // CAB: Handy shortcut for testing: load last project + QString proj_fname = actFile_RecentProjs[0]->data().toString(); + vkCfgProj->openProject( proj_fname ); + setCurrentProject( proj_fname ); +#endif } Modified: trunk/src/objects/valgrind_object.cpp =================================================================== --- trunk/src/objects/valgrind_object.cpp 2011-06-24 12:31:13 UTC (rev 531) +++ trunk/src/objects/valgrind_object.cpp 2011-06-27 14:30:50 UTC (rev 532) @@ -409,9 +409,9 @@ this->objectName(), "gen-suppressions", '\0', - "<yes|no|all>", - "yes|no|all", - "no", + "<no|all>", + "no|all", + "all", // Vg default is 'no', but we (generally) want this on. "Print suppressions for errors", "print suppressions for errors?", urlVgCore::genSuppressions, @@ -511,14 +511,14 @@ case VALGRIND::SHOW_BELOW: case VALGRIND::MAX_SFRAME: case VALGRIND::SMC_CHECK: + case VALGRIND::GEN_SUPP: opt->isValidArg( &errval, argval ); break; - + case VALGRIND::VERBOSITY: case VALGRIND::TRACK_FDS: case VALGRIND::TIME_STAMP: case VALGRIND::EM_WARNS: - case VALGRIND::GEN_SUPP: case VALGRIND::ERROR_LIMIT: case VALGRIND::DB_COMMAND: case VALGRIND::DB_ATTACH: @@ -724,7 +724,6 @@ case VALGRIND::TRACK_FDS: case VALGRIND::TIME_STAMP: case VALGRIND::EM_WARNS: - case VALGRIND::GEN_SUPP: case VALGRIND::ERROR_LIMIT: case VALGRIND::DB_ATTACH: case VALGRIND::DB_COMMAND: @@ -739,6 +738,12 @@ } break; + + // suppressions + case VALGRIND::GEN_SUPP: + // always add, irrespective of cfgVal / dfltVal + modFlags << "--" + opt->longFlag + "=" + cfgVal; + break; // all tools use an internal logging option, // so logging options should not be used Modified: trunk/src/objects/valkyrie_object.cpp =================================================================== --- trunk/src/objects/valkyrie_object.cpp 2011-06-24 12:31:13 UTC (rev 531) +++ trunk/src/objects/valkyrie_object.cpp 2011-06-27 14:30:50 UTC (rev 532) @@ -714,7 +714,7 @@ vg_flags.insert( ++( vg_flags.begin() ), ( "--xml-file=" + logfile ) ); vg_flags.insert( ++( vg_flags.begin() ), "--xml=yes" ); - + return activeTool->start( procId, vg_flags, logfile ); } Added: trunk/src/options/suppressions.cpp =================================================================== --- trunk/src/options/suppressions.cpp (rev 0) +++ trunk/src/options/suppressions.cpp 2011-06-27 14:30:50 UTC (rev 532) @@ -0,0 +1,469 @@ +/**************************************************************************** +** Suppressions implementation +** -------------------------------------------------------------------------- +** +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. +** <in...@op...> +** +** This file is part of Valkyrie, a front-end for Valgrind. +** +** This file may be used under the terms of the GNU General Public +** License version 2.0 as published by the Free Software Foundation +** and appearing in the file COPYING included in the packaging of +** this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +****************************************************************************/ + +#include "options/suppressions.h" +#include "options/vk_suppressions_dialog.h" +#include "utils/vk_config.h" +#include "utils/vk_messages.h" +#include "utils/vk_utils.h" + +#include <QDateTime> +#include <QFile> + + +SuppRanges *SuppRanges::s_instance = 0; + +/*! + class SuppRanges + */ +SuppRanges::SuppRanges() +{ + // init ref lists of allowable values + + // Tools + kindTools.append("Memcheck"); + kindTools.append("DRD"); + kindTools.append("Exp-PtrCheck"); + kindTools.append("Helgrind"); + + // Suppr types PER TOOL + for (int i=0; i<kindTools.count(); i++) + kindTypes.append( QStringList() ); + + int i=0; + QStringList* mc_types = &kindTypes[i++]; + mc_types->append("Value1"); // "Uninitialised-value error for value of 1, 2, 4, 8 or 16 bytes." + mc_types->append("Value2"); + mc_types->append("Value4"); + mc_types->append("Value8"); + mc_types->append("Value16"); + mc_types->append("Cond"); // "Uninitialised CPU condition code." + mc_types->append("Value0"); // "Old name for Cond - uninitialised CPU condition code" + mc_types->append("Addr1"); // "Invalid address during a memory access of 1, 2, 4, 8 or 16 bytes." + mc_types->append("Addr2"); + mc_types->append("Addr4"); + mc_types->append("Addr8"); + mc_types->append("Addr16"); + mc_types->append("Jump"); // "jump to an unaddressable location error." + mc_types->append("Param"); // "invalid system call parameter error." + mc_types->append("Free"); // "invalid or mismatching free." + mc_types->append("Overlap");// "src / dst overlap in memcpy or similar function." + mc_types->append("Leak"); // "memory leak." + + QStringList* hg_types = &kindTypes[i++]; + hg_types->append("Race"); + +#if 0 // TODO: support drd, ptr-check + QStringList* drd_types = &kindTypes[i++]; + drd_types->append("CondErr"); + drd_types->append("ConflictingAccess"); + + QStringList* exp_pchk_types = &kindTypes[i++]; + exp_pchk_types->append("Arith"); + exp_pchk_types->append("Heap"); + exp_pchk_types->append("SorG"); +#endif + + // Frame types + frameTypes.append("fun"); // "name of the function in which the error occurred" + frameTypes.append("obj"); // "full path of the .so file or executable containing the error location" +} + + + + +/*! + class Suppression + */ +Suppression::Suppression() +{} + +// free format text, e.g. "from test_socket_ssl" +bool Suppression::setName( QString str ) +{ + str = str.simplified(); + if ( str.isEmpty() ) + return false; + + m_name = str; + return true; +} + +// *** TODO: multiple tools e.g. "Memcheck,Addrcheck:Cond" *** +// e.g. "Memcheck:Cond" +bool Suppression::setKind( QString str ) +{ + vk_assert( !m_name.isEmpty() ); + + str = str.simplified(); + if ( str.isEmpty() ) + return false; + + QStringList list = str.split(":"); + if (list.count() != 2) { + vkPrintErr("Bad Kind (%s) for this suppression (%s).", + qPrintable(str), qPrintable(m_name)); + return false; + } + + QRegExp re( list[0], Qt::CaseInsensitive ); + int idx = SuppRanges::instance()->kindTools.indexOf( re ); + if ( idx == -1 ) { + vkPrintErr("Bad Tool (%s) for this suppression (%s).", + qPrintable(list[0]), qPrintable(m_name)); + return false; + } + else { + QStringList kindTypes = SuppRanges::instance()->kindTypes[idx]; + if ( !kindTypes.contains( list[1], Qt::CaseInsensitive ) ) { + vkPrintErr("Bad SupprType (%s) for Tool (%s) for this suppression (%s).", + qPrintable(list[1]), qPrintable(list[0]), qPrintable(m_name)); + return false; + } + } + m_kind = str; + return true; +} + +// free format text, e.g. "write(buf)" +bool Suppression::setKindAux( QString str ) +{ + str = str.simplified(); + + m_kind_aux = str; + return true; +} + +// e.g. "obj:/usr/X11R6/lib*/libX11.so.6.2" +// e.g. "fun:*libc_write" +bool Suppression::addFrame( QString str ) +{ + str = str.simplified(); + + QStringList list = str.split(":"); + if (list.count() != 2) { + vkPrintErr( "Bad Kind (%s) for suppression '%s'.", + qPrintable(str), qPrintable(m_name) ); + return false; + } + + if ( !SuppRanges::instance()->frameTypes.contains( list[0], Qt::CaseInsensitive ) ) { + vkPrintErr( "Unsupported frame type (%s) for suppression '%s'.", + qPrintable(list[0]), qPrintable(m_name) ); + return false; + } + + if ( list.at(1).isEmpty() ) { + vkPrintErr( "Empty frame contents ('%s') for suppression '%s'.", + qPrintable(str), qPrintable(m_name) ); + return false; + } + + m_frames.append( str ); + return true; +} + + +// suppression lines: name[1], kind[1], kindaux[0:1], frame[1:N] +bool Suppression::fromStringList( const QStringList& lines ) +{ + int i=0; + + if ( lines.count() < 3 ) { + vkPrintErr( "Expecting at least 3 lines: name, kind, frame" ); + return false; + } + + // name, kind + if ( !setName( lines[i++] ) ) return false; + if ( !setKind( lines[i++] ) ) return false; + + // kaux (optional) + QRegExp re( "Memcheck:Param", Qt::CaseInsensitive ); + if ( m_kind.contains( re ) && + !(lines.at(i).startsWith("obj:") || + lines.at(i).startsWith("fun:") ) ) { + // found an aux line + if ( !setKindAux( lines[i++] ) ) return false; + } + + int nFrames = lines.count() - i; + if ( nFrames < 1 ) { + vkPrintErr( "No frames found: must have at least 1 frame." ); + return false; + } + if ( nFrames > MAX_SUPP_FRAMES ) { + vkPrintErr( "Numer of frames (%d) greater than allowed (%d)", + nFrames, MAX_SUPP_FRAMES ); + return false; + } + + // frames + for (;i<lines.count(); i++) { + if ( !addFrame( lines[i] ) ) return false; + } + + return true; +} + + +QString Suppression::toString() const +{ + QString str = "{\n"; + str += " " + m_name + "\n"; + str += " " + m_kind + "\n"; + if ( !m_kind_aux.isEmpty() ) + str += " " + m_kind_aux + "\n"; + for (int i=0; i<m_frames.count(); ++i) { + str += " " + m_frames.at(i) + "\n"; + } + str += "}\n\n"; + + return str; +} + + + + +/*! + class SuppList + */ +bool SuppList::readSuppFile( QString& fname ) +{ + m_fname = fname; + + QFile file( fname ); + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { + // TODO: error + return false; + } + + bool suppParseError = false; + QTextStream in(&file); + + while (!in.atEnd()) { + QString line = in.readLine().simplified(); + if ( line.contains(QRegExp("^\\{$")) ) { // start of new supp + QStringList suppLines; + Suppression supp; + + while(!in.atEnd()) { + line = in.readLine().simplified(); + if ( line.startsWith("#") || line.isEmpty() ) + continue; + if ( line.contains(QRegExp("^\\}$")) ) // end of supp + break; + suppLines += line; + } + + if ( supp.fromStringList( suppLines ) ) { + m_supps.append( supp ); + } + else { + suppParseError = true; + vkPrintErr( "Error reading supps file: %s\n", qPrintable(fname)); + // carry on with rest of input + } + } + } + + if ( m_supps.count() == 0 ) { + //TODO: tell user (INFO) no supps found in this file. + } + + if ( suppParseError ) { + + int res = vkQuery( 0, "Confirm Continue", "&Ok;&Cancel", + "<p>Problems were found with a suppression file.<br/>" + "If you continue, the suppressions that were unsuccessfully " + "parsed will be deleted from the suppressions file.</p>" + "<p>Are you sure you want to continue?</p>" ); + + if (res == MsgBox::vkYes) { + // write parsed supps back to file. + writeSuppFile(); + } + else { + return false; + } + } + return true; +} + + +bool SuppList::writeSuppFile() +{ + if ( !initSuppsFile( m_fname ) ) { + return false; + } + + QFile file( m_fname ); + if (!file.open( QIODevice::WriteOnly | + QIODevice::Text | + QIODevice::Append )) { // append to init header + // TODO: error + return false; + } + + QTextStream out(&file); + + for (int i=0; i<m_supps.count(); ++i) { + out << m_supps.at(i).toString(); + } + + file.close(); + return true; +} + + + +const QStringList SuppList::suppNames() +{ + QStringList list; + foreach(Suppression supp, m_supps) { + list.append( supp.getName() ); + } + return list; +} + + +void SuppList::clear() +{ + m_supps.clear(); + m_fname = QString(); +} + + + +// truncate and initialise supp file +bool SuppList::initSuppsFile( const QString& fname ) +{ + QFile file( fname ); + if ( file.open( QIODevice::WriteOnly | QIODevice::Truncate ) ) + { + QTextStream stream( &file ); + stream << "# Valgrind suppressions file\n" + << "# Created by: Valkyrie (" + VkCfg::appVersion() + ")\n" + << "# Date: " + QDateTime::currentDateTimeUtc().toString() << "\n" + << "#\n" + << "# WARNING: other '# comments' will be discarded by Valkyrie.\n" + << "#\n" + << "# Format of the objects in this file (in regex style) is:\n" + << "#\n" + << "# {\n" + << "# TEXT -supp name\n" + << "# TOOL::KIND -Valgrind tools, supp kind, eg 'Memcheck:Param'\n" + << "# KAUX? -(optional) aux for some kinds, eg 'write(buf)'\n" + << "# ((obj|fun):<TEXT>\\n)+ -(min one) list of call-chain frames, one per line\n" + << "# }\n" + << "#\n" + << "# Note: Multiple tools per kind e.g. TOOL(,TOOL)*::KIND' is not (yet) supported.\n" + << "#\n" + << "# Note: For Memcheck, the the optional aux info is:\n" + << "# if (KIND == 'Param'): KAUX = system call param e.g. 'write(buf)'\n" << endl; + + file.close(); + return true; + } + else { + return false; + } +} + + + +/*! + New suppression + Returns false if user cancelled edit, else true +*/ +bool SuppList::newSupp() +{ + return editSupp( -1 ); +} + +/*! + Edit suppression + idx == -1: new supp (i.e. not yet managed by us) + supp: empty for !new supp + empty|filled for new supp + Returns false if user cancelled edit, else true +*/ +bool SuppList::editSupp( int idx, Suppression supp ) +{ + bool isNew = (idx == -1); + if ( !isNew ) { // if editing an existing supp: + vk_assert( supp.getName().isEmpty() ); // - it can't be empty + supp = m_supps.at( idx ); // - load supp from model at idx + } + + VkSuppressionsDialog dlg; + + // If supp has content, load it + if ( !supp.getName().isEmpty() ) { + dlg.setSupp( supp ); + } + + // run dialogbox + if ( dlg.exec() == QDialog::Accepted ) { + supp = dlg.getUpdatedSupp(); + + // update model and rewrite suppfile + if ( isNew ) + m_supps.append( supp ); + else { + m_supps.replace( idx, supp ); + } + + if (!writeSuppFile()) { + //TODO: error + vkPrintErr("Error: failure during log save"); + } + return true; + } + else { + // QDialog::Rejected: + return false; + } +} + +/*! + Delete suppression + Returns false if user cancelled delete, else true +*/ +bool SuppList::deleteSupp( int idx ) +{ + int res = vkQuery( 0, "Confirm Delete", "&Delete;&Cancel", + "<p>The suppression will be deleted from the file.</p>" + "<p>Are you sure you want to do this ?</p>" ); + + if ( res == MsgBox::vkYes ) { // Delete + // remove from our list, and write our list over the file. + m_supps.removeAt( idx ); + if (!writeSuppFile()) { + //TODO: error + vkPrintErr("Error: failure during log save"); + } + return true; + } + else { // Cancel + // MsgBox::vkNo + return false; + } +} + Added: trunk/src/options/suppressions.h =================================================================== --- trunk/src/options/suppressions.h (rev 0) +++ trunk/src/options/suppressions.h 2011-06-27 14:30:50 UTC (rev 532) @@ -0,0 +1,107 @@ +/**************************************************************************** +** Suppressions definition +** -------------------------------------------------------------------------- +** +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. +** <in...@op...> +** +** This file is part of Valkyrie, a front-end for Valgrind. +** +** This file may be used under the terms of the GNU General Public +** License version 2.0 as published by the Free Software Foundation +** and appearing in the file COPYING included in the packaging of +** this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +****************************************************************************/ + +#ifndef SUPPRESSIONS_H +#define SUPPRESSIONS_H + +#include <QList> +#include <QString> +#include <QStringList> +#include <QTextStream> + +// TODO: what's reasonable? what does Vg allow? +#define MAX_SUPP_FRAMES 20 + + + +// ============================================================ +// Singleton class holding some handy reference data +class SuppRanges +{ +public: + static SuppRanges *instance() + { + if (!s_instance) + s_instance = new SuppRanges; + return s_instance; + } + + QStringList kindTools; // Memcheck|... + QList<QStringList> kindTypes; // list for every tool + QStringList frameTypes; // obj|fun + +private: + SuppRanges(); + static SuppRanges *s_instance; +}; + + + + +// ============================================================ +class Suppression +{ +public: + Suppression(); + + bool fromStringList( const QStringList& lines ); + QString toString() const; + + // Setters + bool setName( QString str ); + bool setKind( QString str ); + bool setKindAux( QString str ); + bool addFrame( QString str ); + + // Getters + QString getName() const { return m_name; } + QString getKind() const { return m_kind; } + QString getKAux() const { return m_kind_aux; } + QStringList getFrames() const { return m_frames; } + +private: + QString m_name; // name of the suppression + QString m_kind; // kind, eg "Memcheck:Param" + QString m_kind_aux; // (optional) aux kind, eg "write(buf)" + QStringList m_frames; // (one or more) frames +}; + + +// ============================================================ +class SuppList +{ +public: + SuppList() {}; + + bool readSuppFile( QString& filename ); + bool writeSuppFile(); + const QStringList suppNames(); + void clear(); + bool initSuppsFile( const QString& fname ); + bool newSupp(); + bool editSupp( int idx, Suppression supp = Suppression() ); + bool deleteSupp( int idx ); + +private: + QList<Suppression> m_supps; + QString m_fname; +}; + + +#endif // SUPPRESSIONS_H Modified: trunk/src/options/valgrind_options_page.cpp =================================================================== --- trunk/src/options/valgrind_options_page.cpp 2011-06-24 12:31:13 UTC (rev 531) +++ trunk/src/options/valgrind_options_page.cpp 2011-06-27 14:30:50 UTC (rev 532) @@ -19,6 +19,7 @@ ****************************************************************************/ #include <QDir> +#include <QFileDialog> #include <QListWidget> #include <QTabWidget> @@ -62,7 +63,7 @@ group1->setObjectName( QString::fromUtf8( "ValgrindOptionsPage_group1" ) ); pageTopVLayout->addWidget( group1 ); - QTabWidget* tabWidget = new QTabWidget( this ); + tabWidget = new QTabWidget( this ); tabWidget->setObjectName( QString::fromUtf8( "ValgrindOptionsPage_tabWidget" ) ); pageTopVLayout->addWidget( tabWidget ); @@ -201,18 +202,95 @@ tabWidget->addTab( tabSupps, " Suppressions " ); ContextHelp::addHelp( tabSupps, urlValkyrie::suppsTab ); - // tabErep - vbox - QVBoxLayout* supp_vbox = new QVBoxLayout( tabSupps ); - supp_vbox->setObjectName( QString::fromUtf8( "supp_vbox" ) ); + // tabSupps - suppression files + QGroupBox* suppfile_groupbox = new QGroupBox(); + QHBoxLayout* suppfile_hbox = new QHBoxLayout(); + suppfile_hbox->setObjectName( QString::fromUtf8( "suppfile_hbox" ) ); + suppfile_hbox->setMargin(0); + // listbox(options) + insertOptionWidget( VALGRIND::SUPPS_SEL, tabSupps, false ); // listbox + LbWidget* lbSel = ( LbWidget* )m_itemList[VALGRIND::SUPPS_SEL]; + QListWidget* lwSuppFiles = (QListWidget*)lbSel->widget(); + connect( lwSuppFiles, SIGNAL(currentRowChanged(int)), this, SLOT(setSuppFileBtns()) ); + connect( lwSuppFiles, SIGNAL(currentRowChanged(int)), this, SLOT(suppLoad()) ); + // buttongroup + QWidget* butts1_groupbox = new QWidget(); + QVBoxLayout* butts1_vbox = new QVBoxLayout(); + butts1_vbox->setObjectName( QString::fromUtf8( "butts1_vbox" ) ); + butts1_vbox->setMargin(0); - // tabErep - options - insertOptionWidget( VALGRIND::SUPPS_SEL, tabSupps, true ); // listbox + QIcon icon_arrow_up; + icon_arrow_up.addPixmap( QPixmap( QString::fromUtf8( ":/vk_icons/icons/arrow_up.png" ) ) ); + QIcon icon_arrow_down; + icon_arrow_down.addPixmap( QPixmap( QString::fromUtf8( ":/vk_icons/icons/arrow_down.png" ) ) ); - LbWidget* lbSel = ( LbWidget* )m_itemList[VALGRIND::SUPPS_SEL]; - supp_vbox->addLayout( lbSel->vlayout() ); + btn_suppfile_up = new QPushButton( icon_arrow_up, "", butts1_groupbox ); + btn_suppfile_dwn = new QPushButton( icon_arrow_down, "", butts1_groupbox ); + btn_suppfile_new = new QPushButton("New", butts1_groupbox ); + btn_suppfile_add = new QPushButton("Add", butts1_groupbox ); + btn_suppfile_rmv = new QPushButton("Remove", butts1_groupbox ); + setSuppFileBtns(); + connect( btn_suppfile_up, SIGNAL(clicked()), this, SLOT( suppfileUp() ) ); + connect( btn_suppfile_dwn, SIGNAL(clicked()), this, SLOT( suppfileDown() ) ); + connect( btn_suppfile_new, SIGNAL(clicked()), this, SLOT( suppfileNew() ) ); + connect( btn_suppfile_add, SIGNAL(clicked()), this, SLOT( suppfileAdd() ) ); + connect( btn_suppfile_rmv, SIGNAL(clicked()), this, SLOT( suppfileRemove() ) ); + butts1_vbox->addWidget( btn_suppfile_up ); + butts1_vbox->addWidget( btn_suppfile_dwn ); + butts1_vbox->addWidget( btn_suppfile_new ); + butts1_vbox->addWidget( btn_suppfile_add ); + butts1_vbox->addWidget( btn_suppfile_rmv ); + butts1_vbox->addStretch( 1 ); + butts1_groupbox->setLayout( butts1_vbox ); + // setup horizontal layout + suppfile_hbox->addWidget( lbSel->widget() ); + suppfile_hbox->addWidget( butts1_groupbox ); + suppfile_groupbox->setLayout( suppfile_hbox ); + // tabSupps - suppressions + QGroupBox* supps_groupbox = new QGroupBox(); + QHBoxLayout* supps_hbox = new QHBoxLayout(); + supps_hbox->setObjectName( QString::fromUtf8( "supps_hbox" ) ); + supps_hbox->setMargin(0); + // listview + lwSupps = new QListWidget( supps_groupbox ); + lwSupps->setObjectName( QString::fromUtf8( "list_widget_supps" ) ); + lwSupps->setSelectionMode( QAbstractItemView::SingleSelection );//QListWidget::Single ); + ContextHelp::addHelp( lwSupps, urlValkyrie::suppsTab ); + connect( lwSupps, SIGNAL(currentRowChanged(int)), this, SLOT(setSuppBtns()) ); + connect( lwSupps, SIGNAL(itemDoubleClicked(QListWidgetItem*)), + this, SLOT(suppEdit(QListWidgetItem*)) ); + // buttongroup + QWidget* butts_groupbox = new QWidget(); + QVBoxLayout* butts_vbox = new QVBoxLayout(); + butts_vbox->setObjectName( QString::fromUtf8( "butts_vbox" ) ); + butts_vbox->setMargin(0); + btn_supp_new = new QPushButton("New", butts_groupbox ); + btn_supp_edt = new QPushButton("Edit", butts_groupbox ); + btn_supp_del = new QPushButton("Delete", butts_groupbox ); + suppLoad(); + connect( btn_supp_new, SIGNAL(clicked()), this, SLOT( suppNew() ) ); + connect( btn_supp_edt, SIGNAL(clicked()), this, SLOT( suppEdit() ) ); + connect( btn_supp_del, SIGNAL(clicked()), this, SLOT( suppDelete() ) ); + butts_vbox->addWidget( btn_supp_new ); + butts_vbox->addWidget( btn_supp_edt ); + butts_vbox->addWidget( btn_supp_del ); + butts_vbox->addStretch( 1 ); + butts_groupbox->setLayout( butts_vbox ); + // setup horizontal layout + supps_hbox->addWidget( lwSupps ); + supps_hbox->addWidget( butts_groupbox ); + supps_groupbox->setLayout( supps_hbox ); + // tabSupps - Add everything to our top vbox layout + QVBoxLayout* suppressions_vlayout = new QVBoxLayout(); + suppressions_vlayout->setObjectName( QString::fromUtf8( "suppfile_vlayout" ) ); + suppressions_vlayout->addWidget( suppfile_groupbox ); + suppressions_vlayout->addWidget( supps_groupbox ); + tabSupps->setLayout( suppressions_vlayout ); + + // ============================================================ // Disabled Widgets /* These widgets are disabled because Valkyrie uses @@ -245,12 +323,11 @@ m_itemList[VALGRIND::VERBOSITY ]->setEnabled( false ); m_itemList[VALGRIND::TRACK_FDS ]->setEnabled( false ); m_itemList[VALGRIND::EM_WARNS ]->setEnabled( false ); - m_itemList[VALGRIND::GEN_SUPP ]->setEnabled( false ); m_itemList[VALGRIND::ERROR_LIMIT]->setEnabled( false ); m_itemList[VALGRIND::DB_ATTACH ]->setEnabled( false ); m_itemList[VALGRIND::DB_COMMAND ]->setEnabled( false ); dbLedit->button()->setEnabled( false ); - + vk_assert( m_itemList.count() <= VALGRIND::NUM_OPTS ); } @@ -261,6 +338,211 @@ } + + + +//--------------------------------------------------------------------- +// Suppression routines +void ValgrindOptionsPage::setSuppFileBtns() +{ + QListWidget* lwSuppFiles = (QListWidget*)m_itemList[VALGRIND::SUPPS_SEL]->widget(); + + if ( lwSuppFiles->currentItem() != 0 ) { + btn_suppfile_rmv->setEnabled( true ); + btn_suppfile_up->setEnabled( lwSuppFiles->currentRow() > 0 ); + btn_suppfile_dwn->setEnabled( lwSuppFiles->currentRow() < lwSuppFiles->count()-1 ); + } + else { + btn_suppfile_rmv->setEnabled( false ); + btn_suppfile_up->setEnabled( false ); + btn_suppfile_dwn->setEnabled( false ); + } +} + +void ValgrindOptionsPage::suppfileUp() +{ + QListWidget* lwSuppFiles = (QListWidget*)m_itemList[VALGRIND::SUPPS_SEL]->widget(); + int currRow = lwSuppFiles->currentRow(); + + QListWidgetItem* item = lwSuppFiles->takeItem( currRow ); + lwSuppFiles->insertItem( currRow-1, item ); + lwSuppFiles->setCurrentItem( item ); +} + +void ValgrindOptionsPage::suppfileDown() +{ + QListWidget* lwSuppFiles = (QListWidget*)m_itemList[VALGRIND::SUPPS_SEL]->widget(); + int currRow = lwSuppFiles->currentRow(); + + QListWidgetItem* item = lwSuppFiles->takeItem( currRow ); + lwSuppFiles->insertItem( currRow+1, item ); + lwSuppFiles->setCurrentItem( item ); +} + +void ValgrindOptionsPage::suppfileNew() +{ + LbWidget* lbSel = ( LbWidget* )m_itemList[VALGRIND::SUPPS_SEL]; + QListWidget* lwSuppFiles = (QListWidget*)lbSel->widget(); + + QString supp_file = + QFileDialog::getSaveFileName( this, + tr( "Enter Supporessions Filename" ), + "./", tr("Suppression Files (*.supp)") ); + + if ( supp_file.isEmpty() ) { // user clicked Cancel + // ignore. + } + else { + // create clean suppfile, add filename to view and opt_list + if ( supplist.initSuppsFile( supp_file ) ) { + lwSuppFiles->addItem( supp_file ); + lwSuppFiles->setCurrentRow( lwSuppFiles->count()-1 ); + } + else { + vkPrintErr("Failed to write suppressions file '%s'", qPrintable(supp_file)); + // TODO: file write error: tell user + } + } +} + + +void ValgrindOptionsPage::suppfileAdd() +{ + LbWidget* lbSel = ( LbWidget* )m_itemList[VALGRIND::SUPPS_SEL]; + QListWidget* lwSuppFiles = (QListWidget*)lbSel->widget(); + + QString supp_file = + QFileDialog::getOpenFileName( this, + tr( "Choose Suppression File" ), + "./", tr("Suppression Files (*.supp)") ); + + if ( ! supp_file.isEmpty() ) { // user clicked Cancel ? + lwSuppFiles->addItem( supp_file ); + lwSuppFiles->setCurrentRow( lwSuppFiles->count()-1 ); + } +} + +void ValgrindOptionsPage::suppfileRemove() +{ + LbWidget* lbSel = ( LbWidget* )m_itemList[VALGRIND::SUPPS_SEL]; + QListWidget* lwSuppFiles = (QListWidget*)lbSel->widget(); + + QListWidgetItem* item = lwSuppFiles->currentItem(); + vk_assert( item ); + + lwSuppFiles->takeItem( lwSuppFiles->row( item ) ); + + setSuppFileBtns(); +} + + + +void ValgrindOptionsPage::setSuppBtns() +{ + QListWidget* lwFiles = (QListWidget*)m_itemList[VALGRIND::SUPPS_SEL]->widget(); + bool suppfileSelected = (lwFiles->currentItem() != 0); + bool suppItemSelected = (lwSupps->currentItem() != 0); + + btn_supp_new->setEnabled( suppfileSelected ); + btn_supp_edt->setEnabled( suppfileSelected && suppItemSelected ); + btn_supp_del->setEnabled( suppfileSelected && suppItemSelected ); +} + +void ValgrindOptionsPage::suppLoad() +{ + QListWidget* lwFiles = (QListWidget*)m_itemList[VALGRIND::SUPPS_SEL]->widget(); + bool suppfileSelected = (lwFiles->currentItem() != 0); + + // first clear the last entries + lwSupps->clear(); + supplist.clear(); + + if ( suppfileSelected ) { // show the suppression names from the file + QString fname = lwFiles->currentItem()->text(); + if (!supplist.readSuppFile( fname )) { + // TODO: error + vkPrintErr("Failed to read/parse supp file '%s'", qPrintable(fname)); + return; + } + lwSupps->addItems( supplist.suppNames() ); + lwSupps->setCurrentRow( 0 ); + } + + setSuppBtns(); +} + +// +void ValgrindOptionsPage::setCurrentTab( int idx ) +{ + tabWidget->setCurrentIndex( idx ); +} + + +// add supp from string, pass to editor, save if ok +void ValgrindOptionsPage::suppNewFromStr( const QString& str ) +{ + Suppression supp; + if ( !supp.fromStringList( str.split("\n") ) ) { + // TODO: err + vkPrintErr("Failed to parse supp from input string '%s'", qPrintable(str)); + return; + } + + // Edit new supp: update model and suppfile first... + if ( supplist.editSupp( -1, supp ) ) { + // ... then update the view + lwSupps->addItem( supplist.suppNames().last() ); + lwSupps->setCurrentRow( lwSupps->count()-1 ); + } +} + + +// create default supp, pass to editor, save if ok +void ValgrindOptionsPage::suppNew() +{ + // New supp: update model and suppfile first... + if ( supplist.newSupp() ) { + // then update the view + lwSupps->addItem( supplist.suppNames().last() ); + lwSupps->setCurrentRow( lwSupps->count()-1 ); + } +} + +// pass supp to editor, save to file +void ValgrindOptionsPage::suppEdit( QListWidgetItem* ) +{ + // currentRow() already updated, so just use that + suppEdit(); +} + +// pass supp to editor, save to file +void ValgrindOptionsPage::suppEdit() +{ + int suppIdx = lwSupps->currentRow(); + vk_assert( suppIdx != -1 ); + + // Edit supp: + if ( supplist.editSupp( suppIdx ) ) { + // then update the view + lwSupps->currentItem()->setText( supplist.suppNames().at(suppIdx) ); + lwSupps->setCurrentRow( suppIdx ); + } +} + +// delete supp from file, view, list +void ValgrindOptionsPage::suppDelete() +{ + int suppIdx = lwSupps->currentRow(); + vk_assert( suppIdx != -1 ); + + // Delete supp: update model and suppfile first... + if ( supplist.deleteSupp( suppIdx ) ) { + // then update the view + lwSupps->takeItem( suppIdx ); + } +} + + #if 0 //TODO { if ((( QListWidget* )lbSel->widget() )->count() < VG_CLO_MAX_SFILES ) { @@ -274,3 +556,5 @@ } } #endif + + Modified: trunk/src/options/valgrind_options_page.h =================================================================== --- trunk/src/options/valgrind_options_page.h 2011-06-24 12:31:13 UTC (rev 531) +++ trunk/src/options/valgrind_options_page.h 2011-06-27 14:30:50 UTC (rev 532) @@ -22,9 +22,12 @@ #define __VALGRIND_OPTIONS_PAGE_H #include <QGroupBox> +#include <QListWidget> +#include <QPushButton> #include <QStringList> #include "options/vk_options_page.h" +#include "options/suppressions.h" // ============================================================ @@ -34,15 +37,43 @@ public: ValgrindOptionsPage( VkObject* obj ); + void setCurrentTab( int idx ); + void suppNewFromStr( const QString& str ); + +public slots: + void suppNew(); + void suppEdit(); + private slots: void getDbBin(); + void setSuppFileBtns(); + void suppfileNew(); + void suppfileAdd(); + void suppfileRemove(); + void suppfileUp(); + void suppfileDown(); + void setSuppBtns(); + void suppLoad(); + void suppEdit( QListWidgetItem* ); + void suppDelete(); private: void setupOptions(); private: + QTabWidget* tabWidget; QGroupBox* group1; - + QListWidget* lwSupps; + QPushButton* btn_suppfile_up; + QPushButton* btn_suppfile_dwn; + QPushButton* btn_suppfile_new; + QPushButton* btn_suppfile_add; + QPushButton* btn_suppfile_rmv; + QPushButton* btn_supp_new; + QPushButton* btn_supp_edt; + QPushButton* btn_supp_del; + + SuppList supplist; }; Modified: trunk/src/options/vk_options_dialog.cpp =================================================================== --- trunk/src/options/vk_options_dialog.cpp 2011-06-24 12:31:13 UTC (rev 531) +++ trunk/src/options/vk_options_dialog.cpp 2011-06-27 14:30:50 UTC (rev 532) @@ -103,6 +103,14 @@ } +QWidget* VkOptionsDialog::setCurrentPage( int idx ) +{ + optionPages->setCurrentIndex( idx ); + contentsListWidget->setCurrentRow( idx ); + + return optionPages->currentWidget(); +} + /*! A return/enter keypress in an option widget isn't eaten up by that widgets' event handler - it's propogated to the QDialog parent. Modified: trunk/src/options/vk_options_dialog.h =================================================================== --- trunk/src/options/vk_options_dialog.h 2011-06-24 12:31:13 UTC (rev 531) +++ trunk/src/options/vk_options_dialog.h 2011-06-27 14:30:50 UTC (rev 532) @@ -37,6 +37,9 @@ VkOptionsDialog( QWidget* ); ~VkOptionsDialog(); + // setup and return new current page + QWidget* setCurrentPage( int idx ); + private: void setupLayout(); void keyPressEvent( QKeyEvent* event ); // overloaded Modified: trunk/src/options/vk_options_page.h =================================================================== --- trunk/src/options/vk_options_page.h 2011-06-24 12:31:13 UTC (rev 531) +++ trunk/src/options/vk_options_page.h 2011-06-27 14:30:50 UTC (rev 532) @@ -68,6 +68,8 @@ void rejectEdits(); bool applyEdits(); bool isModified() { return m_mod; } + + static QFrame* sep( QWidget* parent ); signals: void modified(); @@ -79,7 +81,6 @@ protected: OptionWidget* insertOptionWidget( int optid, QWidget* parent, bool mklabel ); - QFrame* sep( QWidget* parent ); protected: bool m_mod; Added: trunk/src/options/vk_suppressions_dialog.cpp =================================================================== --- trunk/src/options/vk_suppressions_dialog.cpp (rev 0) +++ trunk/src/options/vk_suppressions_dialog.cpp 2011-06-27 14:30:50 UTC (rev 532) @@ -0,0 +1,322 @@ +/**************************************************************************** +** VkSuppressionsDialog implementation +** -------------------------------------------------------------------------- +** +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. +** <in...@op...> +** +** This file is part of Valkyrie, a front-end for Valgrind. +** +** This file may be used under the terms of the GNU General Public +** License version 2.0 as published by the Free Software Foundation +** and appearing in the file COPYING included in the packaging of +** this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +****************************************************************************/ + +#include "help/help_context.h" +#include "help/help_urls.h" +#include "options/suppressions.h" +#include "options/vk_suppressions_dialog.h" +#include "options/vk_options_page.h" +#include "utils/vk_utils.h" + +#include <QApplication> +#include <QDialogButtonBox> +#include <QFontMetrics> +#include <QScrollArea> + + +#define SIZE_COL1 "XXXXXXXXX" // for a font-dependent size + + +/*! + class CallChainFrame +*/ +SuppFrame::SuppFrame( bool isFirstFrame, QWidget* parent ) + : QWidget( parent ) +{ + setSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::Preferred ); + + QFontMetrics fm( qApp->font() ); + int width_col1 = fm.width( SIZE_COL1 ); + width_col1 -= 5; // compensate for margin of central widget + + QHBoxLayout* topHLayout = new QHBoxLayout( this ); + topHLayout->setObjectName( QString::fromUtf8( "topHLayout" ) ); + topHLayout->setMargin(0); + + frame_cmb = new QComboBox(); + frame_cmb->setMinimumWidth( width_col1 ); + frame_cmb->addItems( SuppRanges::instance()->frameTypes ); + + frame_le = new QLineEdit(); + + frame_but = new QPushButton("-"); + if ( isFirstFrame ) frame_but->hide(); + frame_but->setFixedWidth( 30 ); + connect( frame_but, SIGNAL(clicked()), this, SLOT(buttClicked()) ); + + topHLayout->addWidget( frame_cmb ); + topHLayout->addWidget( frame_le ); + topHLayout->addWidget( frame_but ); +} + +void SuppFrame::buttClicked() +{ + emit removeFrame( this ); +} + + + + + +/*! + class VkSuppressionsDialog +*/ +VkSuppressionsDialog::VkSuppressionsDialog( QWidget *parent ) + : QDialog( parent ) +{ + setObjectName( QString::fromUtf8( "VkSuppressionsDialog" ) ); + setWindowTitle( "Valkyrie Suppressions Dialog" ); + + QIcon icon_vk; + icon_vk.addPixmap( QPixmap( QString::fromUtf8( ":/vk_icons/icons/valkyrie.xpm" ) ), QIcon::Normal, QIcon::Off ); + setWindowIcon( icon_vk ); + + setMinimumWidth( 500 ); // allow reasonable length paths + + setupLayout(); + + ContextHelp::addHelp( this, urlValkyrie::optsDlg ); +} + + +void VkSuppressionsDialog::setupLayout() +{ + QFontMetrics fm( qApp->font() ); + int width_col1 = fm.width( SIZE_COL1 ); + + // ------------------------------------------------------------ + QVBoxLayout* topVLayout = new QVBoxLayout( this ); + topVLayout->setObjectName( QString::fromUtf8( "topVLayout" ) ); + setLayout( topVLayout ); + + // ------------------------------------------------------------ + QWidget* layoutWidget = new QWidget( this ); + layoutWidget->setObjectName( QString::fromUtf8( "layoutWidget" ) ); + topVLayout->addWidget( layoutWidget, 0 ); + + // Note: not using opt_widget->hlayout()'s as button width won't match qlabel width. + QGridLayout* gridLayout = new QGridLayout( layoutWidget ); + gridLayout->setColumnStretch( 0, 0 ); + gridLayout->setColumnStretch( 1, 1 ); + gridLayout->setColumnMinimumWidth( 0, width_col1 ); + gridLayout->setMargin(0); + + // ------------------------------------------------------------ + // Name + QLabel* name_lbl = new QLabel("Name:"); + name_le = new QLineEdit(); + + // Kind-Tool + QLabel* tool_lbl = new QLabel("Kind-Tool:"); + tool_cmb = new QComboBox(); + tool_cmb->addItems( SuppRanges::instance()->kindTools ); + connect( tool_cmb, SIGNAL(currentIndexChanged(int)), this, SLOT(ToolChanged(int)) ); + + // Kind-Type + QLabel* type_lbl = new QLabel("Kind-Type:"); + type_cmb = new QComboBox(); + connect( type_cmb, SIGNAL(currentIndexChanged(int)), this, SLOT(TypeChanged(int)) ); + + // Kind-Aux + kaux_lbl = new QLabel("Kind-Aux:"); + kaux_le = new QLineEdit(); + + // Trigger Tool change setup Type and Aux + ToolChanged( 0 ); + + // (start of) Call chain + QLabel* cchn_lbl = new QLabel("Call Chain:"); + QPushButton* cchn_but = new QPushButton("Add Frame"); + connect( cchn_but, SIGNAL(clicked()), this, SLOT(addNewSuppFrame()) ); + + QWidget* pb_addFrame = new QWidget(); + QHBoxLayout* hLayout = new QHBoxLayout( pb_addFrame ); + hLayout->setMargin(0); + hLayout->addWidget( cchn_but ); + hLayout->addStretch(10); + + // ------------------------------------------------------------ + // layout + int i = 0; + // gridLayout->setRowMinimumHeight( i++, lineHeight / 2 ); // blank row + gridLayout->addWidget( name_lbl, i, 0, Qt::AlignRight ); + gridLayout->addWidget( name_le, i++, 1 ); + + gridLayout->addWidget( VkOptionsPage::sep( layoutWidget ), i++, 0, 1, 2 ); + + gridLayout->addWidget( tool_lbl, i, 0, Qt::AlignRight ); + gridLayout->addWidget( tool_cmb, i++, 1 ); + gridLayout->addWidget( type_lbl, i, 0, Qt::AlignRight ); + gridLayout->addWidget( type_cmb, i++, 1 ); + gridLayout->addWidget( kaux_lbl, i, 0, Qt::AlignRight ); + gridLayout->addWidget( kaux_le, i++, 1 ); + + gridLayout->addWidget( VkOptionsPage::sep( layoutWidget ), i++, 0, 1, 2 ); + + gridLayout->addWidget( cchn_lbl, i, 0, Qt::AlignRight ); + gridLayout->addWidget( pb_addFrame, i++, 1, 1, 2 ); + + // ------------------------------------------------------------ + // scrollarea for call chain + QScrollArea* scroll = new QScrollArea( this ); + scroll->setObjectName( QString::fromUtf8( "scroll" ) ); + topVLayout->addWidget( scroll, 1 ); + + callChainLayout = new QVBoxLayout( scroll ); + callChainLayout->setObjectName( QString::fromUtf8( "callChainLayout" ) ); + callChainLayout->setMargin(5); + // this needed else internal widgets resize to nothing! + callChainLayout->setSizeConstraint( QLayout::SetMinAndMaxSize ); + + QWidget* callChainWidget = new QWidget( scroll ); + callChainWidget->setObjectName( QString::fromUtf8( "callChainWidget" ) ); + callChainWidget->setLayout( callChainLayout ); + + scroll->setWidget( callChainWidget ); + scroll->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); + scroll->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOn ); + scroll->setMinimumHeight( 200 ); + scroll->setFrameStyle( QFrame::Box | QFrame::Plain ); + // allow internal widgets to resize when needed + scroll->setWidgetResizable(true); + + // call chain (always have at least ONE frame) + SuppFrame* suppFrm = new SuppFrame( true/*isFirst*/ ); + suppFrames.append( suppFrm ); + callChainLayout->addWidget( suppFrm ); + + // ------------------------------------------------------------ + // *** other suppFrames dynimically placed here *** + + // push frames to top of scrollarea + callChainLayout->addStretch( 1 ); + + // ------------------------------------------------------------ + // Standard buttons: Ok, Cancel + QDialogButtonBox* buttbox = new QDialogButtonBox(); + buttbox->setObjectName( QString::fromUtf8( "buttbox" ) ); + buttbox->setOrientation( Qt::Horizontal ); + buttbox->setStandardButtons( QDialogButtonBox::Ok | + QDialogButtonBox::Cancel ); + + QPushButton* pb_ok1 = buttbox->button( QDialogButtonBox::Ok ); + QPushButton* pb_cancel1 = buttbox->button( QDialogButtonBox::Cancel ); + connect( pb_ok1, SIGNAL( clicked() ), this, SLOT( accept() ) ); + connect( pb_cancel1, SIGNAL( clicked() ), this, SLOT( reject() ) ); + + topVLayout->addWidget( buttbox, 0 ); +} + +void VkSuppressionsDialog::addNewSuppFrame() +{ + if ( suppFrames.count() >= MAX_SUPP_FRAMES ) { + vkPrintErr("Maximum allowed number of frames reached."); + return; + } + + // add new frame just above our 'add frame' button + SuppFrame* frm = new SuppFrame( false ); + suppFrames.append( frm ); + // last widget in callchain is a 'stretch': insert before that. + callChainLayout->insertWidget( callChainLayout->count()-1, frm ); + connect( frm, SIGNAL(removeFrame(SuppFrame*)), + this, SLOT(removeSuppFrame(SuppFrame*)) ); +} + +void VkSuppressionsDialog::removeSuppFrame( SuppFrame* frm ) +{ + callChainLayout->removeWidget( frm ); + suppFrames.removeAll( frm ); + delete frm; +} + +void VkSuppressionsDialog::ToolChanged( int idx ) +{ + type_cmb->clear(); + type_cmb->addItems( SuppRanges::instance()->kindTypes[idx] ); +} + +void VkSuppressionsDialog::TypeChanged( int ) +{ + QRegExp re("^Param$", Qt::CaseInsensitive); + bool hasAux = type_cmb->currentText().contains(re); + kaux_lbl->setEnabled( hasAux ); + kaux_le->setEnabled( hasAux ); +} + + +void VkSuppressionsDialog::setSupp( const Suppression& supp ) +{ + // Name + name_le->setText( supp.getName() ); + + // Kind + QStringList kind = supp.getKind().split(":"); + vk_assert( kind.count() == 2 ); + tool_cmb->setCurrentIndex( tool_cmb->findText(kind[0], Qt::MatchExactly) ); + type_cmb->setCurrentIndex( type_cmb->findText(kind[1], Qt::MatchExactly) ); + + // Kaux + if ( !supp.getKAux().isEmpty() ) + kaux_le->setText( supp.getKAux() ); + + // Call-Chain + QStringList frames = supp.getFrames(); + vk_assert( frames.count() > 0 ); + for (int i=0; i<frames.count(); i++) { + // new widgets for new frames, apart from first + if ( i>0) addNewSuppFrame(); + + QStringList frame = frames.at(i).split(":"); + vk_assert( frame.count() == 2 ); + + QComboBox* cmb = suppFrames[i]->frame_cmb; + cmb->setCurrentIndex( cmb->findText( frame[0], Qt::MatchExactly ) ); + QLineEdit* le = suppFrames[i]->frame_le; + le->setText( frame[1] ); + } +} + +const Suppression VkSuppressionsDialog::getUpdatedSupp() +{ + Suppression supp; + + // Name + QString name = name_le->text(); + supp.setName( name.isEmpty() ? "<unknown>" : name ); + + // Kind + supp.setKind( tool_cmb->currentText() + ":" + type_cmb->currentText() ); + + // Kaux + if ( kaux_le->isEnabled() && !kaux_le->text().isEmpty() ) + supp.setKindAux( kaux_le->text() ); + + // Call Chain + for (int i=0; i<suppFrames.count(); i++) { + QString type = suppFrames[i]->frame_cmb->currentText(); + QString data = suppFrames[i]->frame_le->text(); + if ( i==0 && data.isEmpty() ) + data = "<unknown>"; + if ( !data.isEmpty() ) + supp.addFrame( type + ":" + data ); + } + + return supp; +} Added: trunk/src/options/vk_suppressions_dialog.h =================================================================== --- trunk/src/options/vk_suppressions_dialog.h (rev 0) +++ trunk/src/options/vk_suppressions_dialog.h 2011-06-27 14:30:50 UTC (rev 532) @@ -0,0 +1,85 @@ +/**************************************************************************** +** VkSuppressionsDialog definition +** -------------------------------------------------------------------------- +** +** Copyright (C) 2000-2011, OpenWorks LLP. All rights reserved. +** <in...@op...> +** +** This file is part of Valkyrie, a front-end for Valgrind. +** +** This file may be used under the terms of the GNU General Public +** License version 2.0 as published by the Free Software Foundation +** and appearing in the file COPYING included in the packaging of +** this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +****************************************************************************/ + +#ifndef VK_SUPPRESSIONS_DIALOG_H +#define VK_SUPPRESSIONS_DIALOG_H + +#include <QComboBox> +#include <QDialog> +#include <QLabel> +#include <QLineEdit> +#include <QPushButton> +#include <QVBoxLayout> + + +// ============================================================ +class SuppFrame : public QWidget +{ + Q_OBJECT +public: + SuppFrame( bool isFirst, QWidget* parent=0 ); + +signals: + void removeFrame( SuppFrame* w ); + +private: + SuppFrame(); + +private slots: + void buttClicked(); + +public: + QComboBox* frame_cmb; + QLineEdit* frame_le; + QPushButton* frame_but; +}; + + +// ============================================================ +class Suppression; +class VkSuppressionsDialog : public QDialog +{ + Q_OBJECT +public: + VkSuppressionsDialog(QWidget *parent = 0); + + void setSupp( const Suppression& supp ); + const Suppression getUpdatedSupp(); + +private: + void setupLayout(); + +private slots: + void addNewSuppFrame(); + void removeSuppFrame( SuppFrame* w ); + void ToolChanged( int idx ); + void TypeChanged( int idx ); + +private: + QVBoxLayout* callChainLayout; + + QLineEdit* name_le; + QComboBox* tool_cmb; + QComboBox* type_cmb; + QLabel* kaux_lbl; + QLineEdit* kaux_le; + QList<SuppFrame*> suppFrames; +}; + +#endif // VK_SUPPRESSIONS_DIALOG_H Modified: trunk/src/options/widgets/opt_lb_widget.cpp =================================================================== --- trunk/src/options/widgets/opt_lb_widget.cpp 2011-06-24 12:31:13 UTC (rev 531) +++ trunk/src/options/widgets/opt_lb_widget.cpp 2011-06-27 14:30:50 UTC (rev 532) @@ -32,53 +32,48 @@ /***************************************************************************/ /*! - Constructs a LbWidget object - has-a QListBox - - Note: This widget was specifically written to handle suppression files - stuff and nothing else. + class MyListWidget + - sends signals for row add/delete */ +void MyListWidget::rowsInserted(const QModelIndex &parent, int start, int end) +{ + vk_assert( start == end ); + QListWidget::rowsInserted(parent, start, end); + emit rowsChanged( true, start ); +} -static const char* sel_supp_xpm[] = { - "11 11 8 1", - " c None", - ". c #024266", - "+ c #5A9AB8", - "@ c #1B5F8E", - "# c #79B7CD", - "$ c #5A97B5", - "% c #AEDDE9", - "& c #8ECADC", - " . ", - " . .+. . ", - " .+.@#@.+. ", - " .#$%$#. ", - " .@$&%&$@. ", - ".+#%%%%%#+.", - " .@$&%&$@. ", - " .#$%$#. ", - " .+.@#@.+. ", - " . .+. . ", - " . " -}; +void MyListWidget::rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end) +{ + vk_assert( start == end ); + QListWidget::rowsAboutToBeRemoved(parent, start, end); + emit rowsChanged( false, start ); +} + +/*! + Constructs a LbWidget object + has-a QListWidget + + Note: This widget was specifically written to handle suppression files + stuff and nothing else. This because of the difference in stored + (with comma's, for opt) and displayed (list) +*/ LbWidget::LbWidget( QWidget* parent, VkOption* vkopt, bool mklabel ) : OptionWidget( parent, vkopt, mklabel ) { this->setObjectName( "lb_widget" ); - m_lbox = new QListWidget( parent ); + m_lbox = new MyListWidget( parent ); m_lbox->setObjectName( QString::fromUtf8( "list_box" ) ); m_widg = m_lbox; - m_lbox->setSelectionMode( QAbstractItemView::SingleSelection );//QListWidget::Single ); + m_lbox->setSelectionMode( QAbstractItemView::SingleSelection ); + connect( m_lbox, SIGNAL(rowsChanged(bool,int)), + this, SLOT(updateValueFromView(bool, int))); m_sep = VkCfg::sepChar(); update( m_currentValue ); - m_lbox->setContextMenuPolicy( Qt::CustomContextMenu ); - connect( m_lbox, SIGNAL( customContextMenuRequested( const QPoint& ) ), - this, SLOT( popupMenu( const QPoint& ) ) ); // not added if the url is empty ContextHelp::addHelp( m_widg, m_opt->urlAddress ); @@ -107,66 +102,35 @@ for ( int i = 0; i < sfiles.count(); i++ ) { m_lbox->addItem( sfiles[i] ); } -} - -/*! - Pretty print current value -*/ -QString LbWidget::printCurrValue() -{ - return "For one (or more) of:<br>" + currValue().replace( m_sep, "<br>" ); + // auto-select the top row + m_lbox->setCurrentRow( 0 ); } /*! - return all contents concat'd with m_sep -*/ -QString LbWidget::lbText() + Update underlying value from lbox + Triggered by signals rowsInserted, rowsToBeDeleted + - inserted row is easy: just concat the items + - to_be_deleted row isn't yet gone: skip that row. + */ +void LbWidget::updateValueFromView( bool isInserted, int row ) { QStringList items; - - for ( int i = 0; i < m_lbox->count(); i++ ) { + for ( int i=0; i < m_lbox->count(); i++ ) { + if (!isInserted && i == row) continue; // 'row' is to be removed items += m_lbox->item( i )->text(); } - - return ( items.count() == 0 ) ? "" : items.join( m_sep ); + QString listViewText = items.join( m_sep ); + + setCurrValue( listViewText ); } /*! - different menus and stuff for the different modes + Pretty print current value */ -void LbWidget::popupMenu( const QPoint& pos ) +QString LbWidget::printCurrValue() { - QListWidgetItem* lb_item = m_lbox->itemAt( pos ); - - QAction actRemove( QPixmap( sel_supp_xpm ), "Remove File", this ); - QAction actAdd( QPixmap( sel_supp_xpm ), "Add File", this ); - - if ( !lb_item ) { - actRemove.setEnabled( false ); - } - - QMenu menu( m_lbox ); - menu.addAction( &actRemove ); - menu.addAction( &actAdd ); - QAction* act = menu.exec( m_lbox->mapToGlobal( pos ) ); - - if ( act == &actRemove ) { - vk_assert( lb_item ); - m_lbox->takeItem( m_lbox->row( lb_item ) ); - setCurrValue( lbText() ); - } - else if ( act == &actAdd ) { - QString supp_file = - QFileDialog::getOpenFileName( m_lbox, - tr( "Choose Suppression File" ), - "./", tr("Suppression Files (*.supp)") ); - - if ( ! supp_file.isEmpty() ) { // user clicked Cancel ? - m_lbox->addItem( supp_file ); - setCurrValue( lbText() ); - } - } + return "For one (or more) of:<br>" + currValue().replace( m_sep, "<br>" ); } Modified: trunk/src/options/widgets/opt_lb_widget.h =================================================================== --- trunk/src/options/widgets/opt_lb_widget.h 2011-06-24 12:31:13 UTC (rev 531) +++ trunk/src/options/widgets/opt_lb_widget.h 2011-06-27 14:30:50 UTC (rev 532) @@ -26,6 +26,26 @@ // ============================================================ +// reimplementation of QListWidget, in order to catch row changes +class MyListWidget : public QListWidget +{ + Q_OBJECT +public: + MyListWidget( QWidget* parent = 0 ) : QListWidget( parent ) {} +private: + MyListWidget( const MyListWidget& lw ); + +signals: + void rowsChanged( bool, int ); + +protected slots: + void rowsInserted(const QModelIndex &parent, int start, int end); + void rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end); +}; + + + +// ============================================================ // listbox widget - for lists of files class LbWidget : public OptionWidget { @@ -37,16 +57,12 @@ QString printCurrValue(); // overloads base class private slots: - void popupMenu( const QPoint& ); void update( const QString& txt ); + void updateValueFromView( bool isInserted, int row ); private: - QString lbText(); - void lbChanged(); - -private: - QListWidget* m_lbox; - QChar m_sep; + MyListWidget* m_lbox; + QChar m_sep; }; #endif // __VK_OPTION_LB_WIDGET_H Modified: trunk/src/src.pro =================================================================== --- trunk/src/src.pro 2011-06-24 12:31:13 UTC (rev 531) +++ trunk/src/src.pro 2011-06-27 14:30:50 UTC (rev 532) @@ -52,11 +52,13 @@ objects/vk_objects.cpp \ options/helgrind_options_page.cpp \ options/memcheck_options_page.cpp \ + options/suppressions.cpp \ options/vk_option.cpp \ options/vk_options_dialog.cpp \ options/vk_options_page.cpp \ options/vk_parse_cmdline.cpp \ options/vk_popt.cpp \ + options/vk_suppressions_dialog.cpp \ options/valgrind_options_page.cpp \ options/valkyrie_options_page.cpp \ options/widgets/opt_base_widget.cpp \ @@ -91,6 +93,7 @@ objects/vk_objects.h \ options/helgrind_options_page.h \ options/memcheck_options_page.h \ + options/suppressions.h \ options/vk_option.h \ options/vk_options_dialog.h \ options/vk_options_page.h \ @@ -98,6 +101,7 @@ options/vk_popt.h \ options/valgrind_options_page.h \ options/valkyrie_options_page.h \ + options/vk_suppressions_dialog.h \ options/widgets/opt_base_widget.h \ options/widgets/opt_cb_widget.h \ options/widgets/opt_ck_widget.h \ Modified: trunk/src/toolview/memcheckview.cpp =================================================================== --- trunk/src/toolview/memcheckview.cpp 2011-06-24 12:31:13 UTC (rev 531) +++ trunk/src/toolview/memcheckview.cpp 2011-06-27 14:30:50 UTC (rev 532) @@ -18,6 +18,11 @@ ** ****************************************************************************/ +#include "mainwindow.h" +#include "options/suppressions.h" +#include "options/vk_options_dialog.h" +#include "options/valgrind_options_page.h" +#include "options/vk_suppressions_dialog.h" #include "toolview/memcheckview.h" #include "toolview/memcheck_logview.h" #include "utils/vk_config.h" @@ -26,11 +31,13 @@ #include <QAction> #include <QApplication> +#include <QClipboard> #include <QFileDialog> #include <QHeaderView> #include <QLabel> #include <QMenuBar> #include <QProcess> +#include <QTextStream> #include <QToolBar> #include <QVBoxLayout> @@ -80,6 +87,10 @@ // launch editor with src file loaded connect( treeView, SIGNAL( itemDoubleClicked( QTreeWidgetItem*, in... [truncated message content] |
From: <sv...@va...> - 2011-06-24 12:36:03
|
Author: cerion Date: 2011-06-24 13:31:13 +0100 (Fri, 24 Jun 2011) New Revision: 531 Log: re-enabled save-log functionality (hadn't been ported from qt3) fixes bug #250152 Modified: trunk/src/mainwindow.cpp trunk/src/objects/tool_object.cpp trunk/src/objects/tool_object.h Modified: trunk/src/mainwindow.cpp =================================================================== --- trunk/src/mainwindow.cpp 2011-06-24 10:51:00 UTC (rev 530) +++ trunk/src/mainwindow.cpp 2011-06-24 12:31:13 UTC (rev 531) @@ -728,7 +728,10 @@ /*! - set logfile name to be loaded + Set logfile name to be loaded + Used from toolviews 'cos no access to vk from there + Necessary to set cfg as does cmd line --view-cfg... + TODO: this is just plain nasty... */ void MainWindow::setLogFile( QString logFilename ) { @@ -940,6 +943,12 @@ cerr << "MainWindow::closeToolView(): " << tv->objectName().toLatin1().data() << endl; + // last process might not be done ... + if ( !valkyrie->queryToolDone( toolViewStack->currentToolId() ) ) { + cerr << "Warning: Last process not finished" << endl; + return; + } + toolViewStack->removeView( tv ); // current toolview will now have changed (maybe to NULL) Modified: trunk/src/objects/tool_object.cpp =================================================================== --- trunk/src/objects/tool_object.cpp 2011-06-24 10:51:00 UTC (rev 530) +++ trunk/src/objects/tool_object.cpp 2011-06-24 12:31:13 UTC (rev 531) @@ -47,6 +47,7 @@ #include "utils/vk_config.h" #include "utils/vk_utils.h" +#include <QFileDialog> #include <QKeySequence> #include <QString> #include <QStringList> @@ -91,14 +92,11 @@ */ ToolObject::ToolObject( const QString& toolname, VGTOOL::ToolID id ) : VkObject( toolname ), - toolView( 0 ), fileSaved( true ), processId( VGTOOL::PROC_NONE ), toolId( id ) + toolView( 0 ), vgRunSaved( true ), processId( VGTOOL::PROC_NONE ), + toolId( id ), vgreader( 0 ), vgproc( 0 ) { - // init vars - fileSaved = true; - vgproc = 0; - vgreader = 0; + // init logpoller logpoller = new VkLogPoller( this ); - connect( logpoller, SIGNAL( logUpdated() ), this, SLOT( readVgLog() ) ); } @@ -127,9 +125,9 @@ // logpoller auto deleted by Qt when 'this' dies - // unsaved log... delete our temp file - if ( !fileSaved && !saveFname.isEmpty() ) { - QDir().remove( saveFname ); + // cleanup temp-log + if ( QFile::exists( tmplogFname ) ) { + QFile::remove( tmplogFname ); } } @@ -231,8 +229,6 @@ QStringList vgflags, QString logfile ) { //cerr << "ToolObject::start(): " << procId << endl; - this->saveFname = logfile; - vk_assert( procId > VGTOOL::PROC_NONE ); vk_assert( procId < VGTOOL::PROC_MAX ); vk_assert( !isRunning() ); @@ -241,6 +237,7 @@ switch ( procId ) { case VGTOOL::PROC_VALGRIND: + tmplogFname = logfile; ok = runValgrind( vgflags ); break; case VGTOOL::PROC_PARSE_LOG: @@ -253,32 +250,7 @@ return ok; } -bool ToolObject::runValgrind( QStringList vgflags ) -{ - //VK_DEBUG( "Start Vg run" ); - setProcessId( VGTOOL::PROC_VALGRIND ); - fileSaved = false; - statusMsg( "Starting Valgrind ..." ); - - bool ok = startProcess( vgflags ); - - if ( !ok ) { - VK_DEBUG( "Error: Failed to start Valgrind" ); - vk_assert( this->getProcessId() == VGTOOL::PROC_NONE ); - statusMsg( "Error: Failed to start Valgrind" ); - fileSaved = true; - } - else { - //VK_DEBUG( "Started Valgrind" ); - vk_assert( this->getProcessId() == VGTOOL::PROC_VALGRIND ); - statusMsg( "Started Valgrind ..." ); - } - - return ok; -} - - /*! Parse log file given by [VALKYRIE::VIEW_LOG] entry. Called by valkyrie->runTool() if cmdline --view-log=<file> specified. @@ -288,9 +260,15 @@ bool ToolObject::parseLogFile() { vk_assert( toolView != 0 ); + // any vg run should have been cleaned up: + vk_assert( vgRunSaved ); + vk_assert( tmplogFname.isEmpty() ); + setProcessId( VGTOOL::PROC_PARSE_LOG ); + //TODO: pass this via flags from the toolview, or something. QString log_file = vkCfgProj->value( "valkyrie/view-log" ).toString(); + statusMsg( "Parsing '" + log_file + "'" ); // check this is a valid file, and has at least read perms @@ -301,15 +279,13 @@ vkError( toolView, "File Error", "%s: \n\"%s\"", parseErrString( errval ), qPrintable( escapeEntities( log_file ) ) ); + setProcessId( VGTOOL::PROC_NONE ); return false; } - + // log file ok log_file = ret_file; - - // fileSaved true, 'cos we're just parsing an existing file - fileSaved = true; - setProcessId( VGTOOL::PROC_PARSE_LOG ); - + vkCfgProj->setValue( "valkyrie/view-log", log_file ); + // Could be a very large file, so at least get ui up-to-date now qApp->processEvents( QEventLoop::AllEvents, 1000/*max msecs*/ ); @@ -319,7 +295,6 @@ if ( success ) { statusMsg( "Loaded Logfile '" + log_file + "'" ); - saveFname = log_file; } else { statusMsg( "Error Parsing Logfile '" + log_file + "'" ); @@ -334,18 +309,21 @@ } - /*! Run a VKProcess, as given by 'flags'. - Reads ouput from file, loading this to the listview. */ -bool ToolObject::startProcess( QStringList flags ) +bool ToolObject::runValgrind( QStringList flags ) { - //VK_DEBUG( "Start VgProcess" ); + //VK_DEBUG( "Start Vg run" ); vk_assert( toolView != 0 ); + setProcessId( VGTOOL::PROC_VALGRIND ); + statusMsg( "Starting Valgrind ..." ); + QString program = flags.at( 0 ); QStringList args = flags.mid( 1 ); + vgRunSaved = false; // reset later if start failed #if 0//def DEBUG_ON @@ -381,42 +359,38 @@ // 1) Vg may have finished already(!) // 2) QXmlSimpleReader won't start on an empty log: seems to need at least "<?x" // So just wait for a while until we find the valgrind output log... - int i = 0; + int nLoops=0; + for (;nLoops < WAIT_VG_START_LOOPS; nLoops++) { + if ( QFile::exists( tmplogFname ) ) { break; } + usleep( WAIT_VG_START_SLEEP * 1000 ); + } + bool vg_ok = (nLoops < WAIT_VG_START_LOOPS); - while ( i < WAIT_VG_START_LOOPS ) { - if ( QFile::exists( saveFname ) ) { - break; - } + if ( vg_ok ) { + //VK_DEBUG( "Started Valgrind" ); + statusMsg( "Started Valgrind ..." ); - usleep( WAIT_VG_START_SLEEP * 1000 ); - i++; + // poll log regularly to trigger parsing of the latest data via readVgLog() + // doesn't matter if processDone() or readVgLog() gets called first. + logpoller->start( 250 ); // msec } + else { + vgRunSaved = true; // nothing to save - // If no logfile found, we have a problem: - if ( i >= WAIT_VG_START_LOOPS ) { - VK_DEBUG( "Valgrind failed to start properly (process not running)" ); + VK_DEBUG( "Error: Failed Vg startup: '%s'", qPrintable( flags.join( " " ) ) ); + statusMsg( "Error: Failed to start Valgrind" ); vkError( toolView, "Process Startup Error", - "<p>Failed to start valgrind properly.<br>" - "Please verify Valgrind and Binary paths (via Options->Valkyrie).<br>" - "Try running Valgrind (with _exactly_ the same arguments) via the command-line" - "<br><br>%s", - qPrintable( flags.join( "<br> " ) ) ); - goto failed_startup; + "<p>Failed to start valgrind properly.<br>" + "Please verify Valgrind and Binary paths (via Options->Valkyrie).<br>" + "Try running Valgrind (with _exactly_ the same arguments) via the command-line" + "<br><br>%s", + qPrintable( flags.join( "<br> " ) ) ); + + stopProcess(); + vk_assert( this->getProcessId() == VGTOOL::PROC_NONE ); } - // poll log regularly to trigger parsing of the latest data via readVgLog() - logpoller->start( 250 ); // msec - - statusMsg( "Error Parsing Logfile '" + saveFname + "'" ); - - // doesn't matter if processDone() or readVgLog() gets called first. - //VK_DEBUG( "Started logpoller" ); - return true; - -failed_startup: - VK_DEBUG( "failed_startup: '%s'", qPrintable( flags.join( " " ) ) ); - stopProcess(); - return false; + return vg_ok; } @@ -510,6 +484,8 @@ /* are we done and dusted? anything we need to check/do before being deleted/closed? + return true -> all done. + return false -> not quite yet. */ bool ToolObject::queryDone() { @@ -523,59 +499,45 @@ // Note: process may have finished while waiting for user if ( ok == MsgBox::vkYes ) { - stopProcess(); // abort + stopProcess(); // abort vk_assert( !isRunning() ); } else if ( ok == MsgBox::vkNo ) { - return false; // continue + return false; // continue } } - if ( !queryFileSave() ) { - return false; // not saved: procrastinate. - } - - return true; -} - -/* if current output not saved, ask user if want to save - returns false if not saved, but user wants to procrastinate. -*/ -bool ToolObject::queryFileSave() -{ - vk_assert( toolView != 0 ); -#if 0 - vk_assert( !isRunning() ); - - /* currently loaded / parsed stuff is saved to tmp file - ask user - if they want to save it to a 'real' file */ - if ( !fileSaved ) { - int ok = vkQuery( toolView, "Unsaved File", + // if current output not saved, ask user if want to save + bool discardLog = true; + if ( !vgRunSaved ) { + int ok = vkQuery( toolView, "Unsaved Run Log", "&Save;&Discard;&Cancel", "<p>The current output is not saved, " " and will be deleted.<br/>" "Do you want to save it ?</p>" ); - if ( ok == MsgBox::vkYes ) { /* save */ - - if ( !fileSaveDialog() ) { - /* user clicked Cancel, but we already have the - auto-fname saved anyway, so get outta here. */ - return false; - } - + if ( ok == MsgBox::vkYes ) { // Save log + discardLog = fileSaveDialog(); // not saved -> procrastinate } - else if ( ok == MsgBox::vkCancel ) { /* procrastinate */ - return false; + else if ( ok == MsgBox::vkCancel ) { // Cancelled: procrastinate + discardLog = false; } - else { /* discard */ - QFile::remove( saveFname ); - fileSaved = true; + // else discard log + } + + if ( discardLog ) { + if ( QFile::exists( tmplogFname ) ) { + QFile::remove( tmplogFname ); } + tmplogFname = QString(); + vgRunSaved = true; // nothing more to save + + // TODO: clear View } -#endif - return true; + vk_assert( vgproc == 0 ); + vk_assert( !this->isRunning() ); + return discardLog; } @@ -742,7 +704,7 @@ vk_assert( toolView != 0 ); vk_assert( vgreader != 0 ); vk_assert( logpoller != 0 ); - vk_assert( !saveFname.isEmpty() ); + vk_assert( !tmplogFname.isEmpty() ); // Note: not calling qApp->processEvents(), since parser only // reads in a limited amount in one go anyway. @@ -756,7 +718,7 @@ // first time around... //VK_DEBUG( "Start parsing Valgrind XML log" ); - ok = vgreader->parse( saveFname, true/*incremental*/ ); + ok = vgreader->parse( tmplogFname, true/*incremental*/ ); if ( !ok ) { VK_DEBUG( "Error: parse() failed" ); @@ -863,123 +825,60 @@ /*! - Brings up a fileSaveDialog until successfully saved, - or user pressed Cancel. - If fname.isEmpty, ask user for a name first. - returns false on user pressing Cancel, else true. - - Save-dialog started in user-configured default log dir + 1. Brings up a Save File Dialog to choose a filename to save to + 2. Gets log to read from + 3. Copies log to given filename + returns false on: user pressing Cancel, src==dst, copy fail + else true. */ -bool ToolObject::fileSaveDialog( QString fname/*=QString()*/ ) +bool ToolObject::fileSaveDialog() { - cerr << "ToolObject::fileSaveDialog( '" << qPrintable( fname ) << "' )" << endl; + cerr << "ToolObject::fileSaveDialog()" << endl; vk_assert( toolView != 0 ); -#if 0 - // TODO - QFileDialog dlg; - dlg.setShowHiddenFiles( true ); + // --- Get filename to save to QString flt = "XML Files (*.xml);;Log Files (*.log.*);;All Files (*)"; QString cptn = "Save Log File As"; + // use dir used by view-log as most-likely starting point + QFileInfo fi( vkCfgProj->value( "valkyrie/view-log" ).toString() ); + QString start_path = fi.exists() ? fi.absolutePath() : "./"; - /* Ask fname if don't have one already */ - if ( fname.isEmpty() ) { - /* Start save-dialog in User-configured default log dir*/ - QString start_path = vkCfgProj->rdEntry( "default-logdir", "valkyrie" ); - fname = dlg.getSaveFileName( start_path, flt, toolView, "fsdlg", cptn ); + // get filename to save to: asks for overwrite confirmation + QString fname = QFileDialog::getSaveFileName( toolView, cptn, start_path, flt); + if ( fname.isEmpty() ) { // Cancelled + return false; + } - if ( fname.isEmpty() ) { - return false; - } + // --- Get appropriate source log + // TODO: this is horrible, but good enough for now. + // - relies on empty tmplogFname to indicate not a vg run but a loaded log + QString srcFname = tmplogFname; + if ( tmplogFname.isEmpty() ) { + srcFname = vkCfgProj->value( "valkyrie/view-log" ).toString(); } - /* try to save file until succeed, or user Cancels */ - while ( !saveParsedOutput( fname ) ) { - QString start_path = QFileInfo( fname ).dirPath(); - fname = dlg.getSaveFileName( start_path, flt, toolView, "fsdlg", cptn ); - - if ( fname.isEmpty() ) { /* Cancelled */ - return false; - } + // trying to copy src to src? + if ( QFileInfo( srcFname ) == QFileInfo( fname ) ) { + return false; } -#endif - return true; -} - - -/* Save to file - - we already have everything in saveFname logfile, so just copy that -*/ -bool ToolObject::saveParsedOutput( QString& )//fname ) -{ -#if 0 - //vkPrint("saveParsedOutput(%s)", fname.latin1() ); - vk_assert( toolView != 0 ); - vk_assert( !fname.isEmpty() ); - - /* make sure path is absolute */ - fname = QFileInfo( fname ).absFilePath(); - - /* if this filename already exists, check if we should over-write it */ + // --- Copy src log to given filename --- + // first delete if already exists if ( QFile::exists( fname ) ) { - int ok = vkQuery( toolView, 2, "Overwrite File", - "<p>Over-write existing file '%s' ?</p>", - fname.latin1() ); - - if ( ok == MsgBox::vkNo ) { - /* nogo: return and try again */ - return false; - } + QFile::remove( fname ); } + bool ok = QFile::copy( srcFname, fname ); - /* save log (=copy/rename) */ - bool ok; - - if ( !fileSaved ) { - /* first save after a run, so just rename saveFname => fname */ - if ( 0 ) vkPrint( "renaming: '%s' -> '%s'", - saveFname.latin1(), fname.latin1() ); - - if ( saveFname != fname ) { - ok = FileCopy( saveFname, fname ); - - if ( ok ) { - ok = QDir().remove( saveFname ); - } - } - else { - ok = true; // no need to do anything - } - - // OLD: - //ok = QDir().rename( saveFname, fname ); - // but we can't just rename, because that fails when the src - // and dst files are in different partitions. The longwinded - // but more reliable solution is to copy and then delete the - // original. - } - else { - /* we've saved once already: must now copy saveFname => fname */ - if ( 0 ) vkPrint( "copying: '%s' -> '%s'", - saveFname.latin1(), fname.latin1() ); - - ok = FileCopy( saveFname, fname ); - } - if ( ok ) { - saveFname = fname; - fileSaved = true; - statusMsg( "Saved", saveFname ); + vgRunSaved = true; + statusMsg( "Saved: " + srcFname ); } else { - /* nogo: return and try again */ + // nogo: return and try again vkInfo( toolView, "Save Failed", - "<p>Failed to save file to '%s'", fname.latin1() ); - statusMsg( "Failed Save", saveFname ); + "<p>Failed to save file to '%s'", qPrintable( fname ) ); + statusMsg( "Failed Save: " + srcFname ); } return ok; -#endif - return true; } Modified: trunk/src/objects/tool_object.h =================================================================== --- trunk/src/objects/tool_object.h 2011-06-24 10:51:00 UTC (rev 530) +++ trunk/src/objects/tool_object.h 2011-06-24 12:31:13 UTC (rev 531) @@ -80,17 +80,14 @@ protected: void setProcessId( int procId ); - int getProcessId(); + int getProcessId(); private: virtual ToolView* createToolView( QWidget* parent ) = 0; virtual void statusMsg( QString msg ) = 0; bool runValgrind( QStringList vgflags ); bool parseLogFile(); - bool startProcess( QStringList flags ); - bool queryFileSave(); - bool saveParsedOutput( QString& fname ); private slots: void stopProcess(); @@ -100,7 +97,7 @@ void checkParserFinished(); public slots: - bool fileSaveDialog( QString fname = QString() ); + bool fileSaveDialog(); public: VGTOOL::ToolID getToolId() { @@ -109,16 +106,16 @@ protected: ToolView* toolView; // the toolview window - QString saveFname; - bool fileSaved; private: + QString tmplogFname; + bool vgRunSaved; + // tools need to add own processId's: classic enum extend problem :-( int processId; VGTOOL::ToolID toolId; // which tool are we. -private: VgLogReader* vgreader; QProcess* vgproc; VkLogPoller* logpoller; |
From: <sv...@va...> - 2011-06-24 10:55:50
|
Author: cerion Date: 2011-06-24 11:51:00 +0100 (Fri, 24 Jun 2011) New Revision: 530 Log: add temp log dir tooltip warning Modified: trunk/src/options/valkyrie_options_page.cpp Modified: trunk/src/options/valkyrie_options_page.cpp =================================================================== --- trunk/src/options/valkyrie_options_page.cpp 2011-06-24 10:50:11 UTC (rev 529) +++ trunk/src/options/valkyrie_options_page.cpp 2011-06-24 10:51:00 UTC (rev 530) @@ -167,12 +167,19 @@ // ------------------------------------------------------------ // tooltips + // TODO: put these in the options. QString tip_editor = tr( "Tip: \"%n\" will be replaced with " "the source code line number.<br>" "Set the appropriate editor flag to support " "opening the source at this line." ); editLedit->button()->setToolTip( tip_editor ); editLedit->widget()->setToolTip( tip_editor ); + + QString tip_logdir = tr( "Tip: All files in this temporary directory are " + "deleted by Valkyrie on startup and exit.<br>" + "Don't save your own files here!" ); + dirLogSave->button()->setToolTip( tip_logdir ); + dirLogSave->widget()->setToolTip( tip_logdir ); } |
From: <sv...@va...> - 2011-06-24 10:55:03
|
Author: cerion Date: 2011-06-24 11:50:11 +0100 (Fri, 24 Jun 2011) New Revision: 529 Log: tiny cleanup Modified: trunk/src/objects/valgrind_object.cpp trunk/src/objects/valkyrie_object.cpp Modified: trunk/src/objects/valgrind_object.cpp =================================================================== --- trunk/src/objects/valgrind_object.cpp 2011-06-24 09:02:14 UTC (rev 528) +++ trunk/src/objects/valgrind_object.cpp 2011-06-24 10:50:11 UTC (rev 529) @@ -508,7 +508,6 @@ case VALGRIND::RUN_LIBC: case VALGRIND::NUM_CALLERS: case VALGRIND::DEMANGLE: - // case VALGRIND::INPUT_FD: // TODO case VALGRIND::SHOW_BELOW: case VALGRIND::MAX_SFRAME: case VALGRIND::SMC_CHECK: Modified: trunk/src/objects/valkyrie_object.cpp =================================================================== --- trunk/src/objects/valkyrie_object.cpp 2011-06-24 09:02:14 UTC (rev 528) +++ trunk/src/objects/valkyrie_object.cpp 2011-06-24 10:50:11 UTC (rev 529) @@ -707,16 +707,11 @@ QStringList vg_flags = getVgFlags( tId ); - // update the flags with the necessary options: xml etc. QString log_basename = activeTool->objectName() + "_log"; QString logfile = vk_mkstemp( VkCfg::tmpDir() + log_basename, "xml" ); vk_assert( !logfile.isEmpty() ); -//TODO: rm -// Vg < 3.6: -// vg_flags.insert( ++( vg_flags.begin() ), ( "--log-file=" + logfile ) ); - vg_flags.insert( ++( vg_flags.begin() ), ( "--xml-file=" + logfile ) ); vg_flags.insert( ++( vg_flags.begin() ), "--xml=yes" ); |
From: <sv...@va...> - 2011-06-24 09:07:04
|
Author: cerion Date: 2011-06-24 10:02:14 +0100 (Fri, 24 Jun 2011) New Revision: 528 Log: Rem previous dir when opening a logfile. - bug #250093 may have been referring to this. Modified: trunk/src/toolview/helgrindview.cpp trunk/src/toolview/memcheckview.cpp Modified: trunk/src/toolview/helgrindview.cpp =================================================================== --- trunk/src/toolview/helgrindview.cpp 2011-06-23 18:48:46 UTC (rev 527) +++ trunk/src/toolview/helgrindview.cpp 2011-06-24 09:02:14 UTC (rev 528) @@ -121,21 +121,27 @@ /*! Parse and load an xml logfile. + + TODO: fix. This starts a new 'run', so we should + trigger vk's "check last run over" before anything else... */ void HelgrindView::openLogFile() { // cerr << "HelgrindView::openLogFile()" << endl; + QString last_file = vkCfgProj->value( "valkyrie/view-log" ).toString(); + if ( last_file.isEmpty() ) last_file = "./"; + QString captn = "Select Log File"; QString filt = "XML Files (*.xml);;Log Files (*.log.*);;All Files (*)"; - QString log_file = QFileDialog::getOpenFileName( this, captn, "./", filt ); + QString log_file = QFileDialog::getOpenFileName( this, captn, last_file, filt ); // user might have clicked Cancel if ( log_file.isEmpty() ) { return; } - // updates config + // updates config (as does cmd line --view-cfg...) emit logFileChosen( log_file ); // informs tool_object to load the log_file given in config Modified: trunk/src/toolview/memcheckview.cpp =================================================================== --- trunk/src/toolview/memcheckview.cpp 2011-06-23 18:48:46 UTC (rev 527) +++ trunk/src/toolview/memcheckview.cpp 2011-06-24 09:02:14 UTC (rev 528) @@ -116,23 +116,29 @@ /*! Parse and load a memcheck xml logfile. + + TODO: fix. This starts a new 'run', so we should + trigger vk's "check last run over" before anything else... */ void MemcheckView::openLogFile() { // cerr << "MemcheckView::openLogFile()" << endl; + QString last_file = vkCfgProj->value( "valkyrie/view-log" ).toString(); + if ( last_file.isEmpty() ) last_file = "./"; + QString captn = "Select Log File"; QString filt = "XML Files (*.xml);;Log Files (*.log.*);;All Files (*)"; - QString log_file = QFileDialog::getOpenFileName( this, captn, "./", filt ); + QString log_file = QFileDialog::getOpenFileName( this, captn, last_file, filt ); // user might have clicked Cancel if ( log_file.isEmpty() ) { return; } - // updates config + // updates config (as does cmd line --view-cfg...) emit logFileChosen( log_file ); - + // informs tool_object to load the log_file given in config emit run( VGTOOL::PROC_PARSE_LOG ); } |
From: <sv...@va...> - 2011-06-23 18:53:36
|
Author: cerion Date: 2011-06-23 19:48:46 +0100 (Thu, 23 Jun 2011) New Revision: 527 Log: Fixed bug #250096 - hoz scrollbar instead of ellipsis Modified: trunk/src/toolview/memcheckview.cpp Modified: trunk/src/toolview/memcheckview.cpp =================================================================== --- trunk/src/toolview/memcheckview.cpp 2011-06-23 17:27:05 UTC (rev 526) +++ trunk/src/toolview/memcheckview.cpp 2011-06-23 18:48:46 UTC (rev 527) @@ -27,6 +27,7 @@ #include <QAction> #include <QApplication> #include <QFileDialog> +#include <QHeaderView> #include <QLabel> #include <QMenuBar> #include <QProcess> @@ -148,6 +149,11 @@ treeView->setObjectName( QString::fromUtf8( "treeview_Memcheck" ) ); treeView->setHeaderHidden( true ); treeView->setRootIsDecorated( false ); + + // give us a horizontal scrollbar rather than an ellipsis + treeView->header()->setResizeMode(0, QHeaderView::ResizeToContents); + treeView->header()->setStretchLastSection(false); + vLayout->addWidget( treeView ); } |
From: <sv...@va...> - 2011-06-23 17:31:55
|
Author: cerion Date: 2011-06-23 18:27:05 +0100 (Thu, 23 Jun 2011) New Revision: 526 Log: update version to 2.0.1.SVN Modified: trunk/README trunk/vk_config.pri Modified: trunk/README =================================================================== --- trunk/README 2011-06-23 17:08:13 UTC (rev 525) +++ trunk/README 2011-06-23 17:27:05 UTC (rev 526) @@ -1,7 +1,7 @@ Release Notes for Valkyrie ~~~~~~~~~~~~~~~~~~~~~~~~~~ -Valkyrie version 2.0.0.SVN supports Valgrind 3.6.x. +Valkyrie version 2.0.1.SVN supports Valgrind 3.6.x. Valkyrie supports the Valgrind tools Memcheck and Helgrind. Valkyrie is licensed under the GNU General Public License, version 2. Modified: trunk/vk_config.pri =================================================================== --- trunk/vk_config.pri 2011-06-23 17:08:13 UTC (rev 525) +++ trunk/vk_config.pri 2011-06-23 17:27:05 UTC (rev 526) @@ -6,7 +6,7 @@ ###################################################################### NAME = valkyrie -VERSION = 2.0.0 +VERSION = 2.0.1.SVN PACKAGE = $$NAME-$$VERSION ###################################################################### |
From: <sv...@va...> - 2011-06-23 17:13:04
|
Author: cerion Date: 2011-06-23 18:08:13 +0100 (Thu, 23 Jun 2011) New Revision: 525 Log: Fix bug #250093 - rem previous dir when changing binary Modified: trunk/src/options/valkyrie_options_page.cpp Modified: trunk/src/options/valkyrie_options_page.cpp =================================================================== --- trunk/src/options/valkyrie_options_page.cpp 2010-10-20 12:21:31 UTC (rev 524) +++ trunk/src/options/valkyrie_options_page.cpp 2011-06-23 17:08:13 UTC (rev 525) @@ -248,9 +248,16 @@ */ void ValkyrieOptionsPage::getBinary() { + QString currbin = m_itemList[VALKYRIE::BINARY]->currValue(); + QString currdir = "./"; + if ( !currbin.isEmpty() ) { + QFileInfo fi( currbin ); + currdir = fi.absolutePath(); + } + QString binfile = QFileDialog::getOpenFileName( this, tr("Select Executable To Debug"), - "./", tr("All Files (*)")); + currdir, tr("All Files (*)")); if ( !binfile.isEmpty() ) { // user might have clicked Cancel (( LeWidget* )m_itemList[VALKYRIE::BINARY] )->setValue( binfile ); |
From: <sv...@va...> - 2010-10-20 12:21:40
|
Author: sewardj Date: 2010-10-20 13:21:31 +0100 (Wed, 20 Oct 2010) New Revision: 524 Log: Finalise for 2.0.0. Modified: trunk/INSTALL trunk/README trunk/src/src.pro trunk/vk_config.pri Modified: trunk/INSTALL =================================================================== --- trunk/INSTALL 2010-10-20 11:54:25 UTC (rev 523) +++ trunk/INSTALL 2010-10-20 12:21:31 UTC (rev 524) @@ -1,8 +1,11 @@ Introduction ============ -Valkyrie uses qmake to be built. -qmake is part of a Qt distribution. +Valkyrie is a Qt4 application and uses qmake as part of the build +process. qmake is part of your Qt4 installation. You should check +that you have the correct qmake version, by running "qmake --version", +because in some cases the installed "qmake" is actually a Qt3 version. +It may be that the version you need is installed as "qmake-qt4". If you want to play around with the build config, check out: valyrie.pro - main qmake project file @@ -12,37 +15,36 @@ In particular, you may want to edit the following: - src/src.pro: SOURCES += /usr/share/qtcreator/gdbmacros/gdbmacros.cpp -Note: Qt want this in order to create lots of debug info. If you're not debugging, then you probably don't want this. Is also rather nasty to hardcode the path in like this, but I don't know of a good workaround... + Note: Qt wants this in order to create lots of debug info. If you're + not debugging, then you probably don't want this. Is also rather + nasty to hardcode the path in like this, but I don't know of a good + workaround... + - vk_config.pri: CONFIG += silent # make --quiet CONFIG += debug # release/debug -*) Build and run without "installing" -===================================== +Build and run without "installing" +================================== - qmake - make +qmake # or qmake-qt4, see comments above +make - The valkyrie binary is put here: ./bin/valkyrie make clean to clean up and start again -make distclean to _really_ clean up and start again. +make distclean to also remove all the Makefiles created by qmake. -*) Build and install -===================== +Build and install +================= - qmake PREFIX=<your_dir> - make - make install +qmake PREFIX=/path/to/installation/tree +make +make install That's it! - -Note: you may come across INSTALL_ROOT in src.pro - - it seems to be a qt special which can't easily(?) be set, hence the PREFIX solution. - Modified: trunk/README =================================================================== --- trunk/README 2010-10-20 11:54:25 UTC (rev 523) +++ trunk/README 2010-10-20 12:21:31 UTC (rev 524) @@ -25,8 +25,8 @@ Requirements ~~~~~~~~~~~~ -Qt (>= not_sure, perhaps 4.6) <http://www.trolltech.com> -Valgrind (>=v3.6.0) <http://www.valgrind.org> +Qt (version 4.6 or later, earlier 4.x might also work) <http://www.trolltech.com> +Valgrind (3.6.x series) <http://www.valgrind.org> Executive Summary @@ -43,7 +43,7 @@ To get started, simply invoke valkyrie thusly: valkyrie ./myprog -This will transparently call Valgrind and display it's output. +This will transparently call Valgrind and display its output. For more help on Valkyrie, use the built-in Help->Handbook. Modified: trunk/src/src.pro =================================================================== --- trunk/src/src.pro 2010-10-20 11:54:25 UTC (rev 523) +++ trunk/src/src.pro 2010-10-20 12:21:31 UTC (rev 524) @@ -2,7 +2,7 @@ # Valkyrie qmake project file: build application # # Note: By default PREFIX="/usr/local". To change this simply do: -# qmake "PREFIX=<your_dir>" +# qmake "PREFIX=/path/to/install/tree" ###################################################################### Modified: trunk/vk_config.pri =================================================================== --- trunk/vk_config.pri 2010-10-20 11:54:25 UTC (rev 523) +++ trunk/vk_config.pri 2010-10-20 12:21:31 UTC (rev 524) @@ -6,7 +6,7 @@ ###################################################################### NAME = valkyrie -VERSION = 2.0.0-SVN +VERSION = 2.0.0 PACKAGE = $$NAME-$$VERSION ###################################################################### @@ -37,5 +37,5 @@ CONFIG += qt CONFIG += warn_on # compiler should issue max warnings CONFIG += silent # make --quiet -CONFIG += debug # release/debug +CONFIG += release # release/debug |
From: <sv...@va...> - 2010-10-20 11:54:35
|
Author: sewardj Date: 2010-10-20 12:54:25 +0100 (Wed, 20 Oct 2010) New Revision: 523 Log: Don't show the config dialogue at startup, even if the target binary isn't set. Modified: trunk/src/main.cpp Modified: trunk/src/main.cpp =================================================================== --- trunk/src/main.cpp 2010-10-19 16:27:26 UTC (rev 522) +++ trunk/src/main.cpp 2010-10-20 11:54:25 UTC (rev 523) @@ -107,7 +107,7 @@ // Start up the gui vkWin = new MainWindow( &valkyrie ); - if ( vkCfgProj->value( + if ( 0 && vkCfgProj->value( valkyrie.getOption( VALKYRIE::BINARY )->configKey() ).toString().isEmpty() ) { vkWin->openOptions(); } |
From: <sv...@va...> - 2010-10-19 16:27:36
|
Author: sewardj Date: 2010-10-19 17:27:26 +0100 (Tue, 19 Oct 2010) New Revision: 522 Log: * don't require gdbmacros.cpp * fix up generation of vk_config.h so as to give something usable on Fedora 14. (possible bash vs dash issue?) Modified: trunk/src/src.pro Modified: trunk/src/src.pro =================================================================== --- trunk/src/src.pro 2010-10-18 21:33:15 UTC (rev 521) +++ trunk/src/src.pro 2010-10-19 16:27:26 UTC (rev 522) @@ -33,7 +33,7 @@ #TODO: This seems to work, but surely can't be right... what to do? #QtCreator wants this for debugging info -SOURCES += /usr/share/qtcreator/gdbmacros/gdbmacros.cpp +#SOURCES += /usr/share/qtcreator/gdbmacros/gdbmacros.cpp ###################################################################### @@ -134,9 +134,7 @@ VK_DEFINES_H = utils/vk_defines.h system(rm -f $${VK_DEFINES_H}) # make sure build fails if can't generate. -system("echo '\ -$${LITERAL_HASH}define VK_NAME \t \"$$NAME\"\n\ -$${LITERAL_HASH}define VK_VERSION \t \"$$VERSION\"\n\ -$${LITERAL_HASH}define VK_PACKAGE \t \"$$PACKAGE\"\n\ -$${LITERAL_HASH}define VK_DOC_PATH \t \"$$doc.path\"\n\ -' > $$VK_DEFINES_H") +system("echo '$${LITERAL_HASH}define VK_NAME \"$$NAME\"' > $$VK_DEFINES_H") +system("echo '$${LITERAL_HASH}define VK_VERSION \"$$VERSION\"' >> $$VK_DEFINES_H") +system("echo '$${LITERAL_HASH}define VK_PACKAGE \"$$PACKAGE\"' >> $$VK_DEFINES_H") +system("echo '$${LITERAL_HASH}define VK_DOC_PATH \"$$doc.path\"' >> $$VK_DEFINES_H") |