📄 valgrind_options_page.cpp
字号:
tabWidget->addTab( tabSupps, " Suppressions " ); ContextHelp::add( tabSupps, urlValkyrie::suppsTab ); /* tabSupps - vbox */ QVBoxLayout* supp_vbox = new QVBoxLayout( tabSupps, 10, 25, "supp_vbox" ); m_itemList.insert( Valgrind::SUPPS_DIRS, /* listbox */ optionWidget( Valgrind::SUPPS_DIRS, tabSupps, true ) ); m_itemList.insert( Valgrind::SUPPS_AVAIL, /* listbox */ optionWidget( Valgrind::SUPPS_AVAIL, tabSupps, true ) ); m_itemList.insert( Valgrind::SUPPS_SEL, /* listbox */ optionWidget( Valgrind::SUPPS_SEL, tabSupps, true ) ); /* NOTE: suppression listbox widgets have knowledge about what they are and what they should do. Ick, fix asap! */ LbWidget* lbDirs = (LbWidget*)m_itemList[Valgrind::SUPPS_DIRS]; LbWidget* lbAvail = (LbWidget*)m_itemList[Valgrind::SUPPS_AVAIL]; LbWidget* lbSel = (LbWidget*)m_itemList[Valgrind::SUPPS_SEL]; /* lbDirs updates lbAvail */ connect( lbDirs, SIGNAL(listChanged()), this, SLOT(suppDirsChanged()) ); /* lbSel and lbAvail update each other */ connect( lbAvail, SIGNAL(itemSelected(const QString&)), this, SLOT(updateSuppsSel(const QString&)) ); connect( lbSel, SIGNAL(listChanged()), this, SLOT(updateSuppsAvail()) ); supp_vbox->addLayout( m_itemList[Valgrind::SUPPS_DIRS ]->vlayout(), 20 ); supp_vbox->addLayout( m_itemList[Valgrind::SUPPS_AVAIL]->vlayout(), 30 ); supp_vbox->addLayout( m_itemList[Valgrind::SUPPS_SEL ]->vlayout(), 20 ); supp_vbox->addStretch( m_space ); /* finalise page ------------------------------------------------- */ vk_assert( m_itemList.count() <= numItems ); QIntDictIterator<OptionWidget> it( m_itemList ); for ( ; it.current(); ++it ) { connect(it.current(), SIGNAL(valueChanged( bool, OptionWidget * )), this, SLOT(updateEditList( bool, OptionWidget * ))); } /* Disabled Widgets ---------------------------------------------- */ /* These widgets are disabled because Valkyrie uses --log-file-exactly internally: logging options would interfere with this. */ // error reporting tab m_itemList[Valgrind::LOG_FD ]->setEnabled( false ); m_itemList[Valgrind::LOG_PID ]->setEnabled( false ); m_itemList[Valgrind::LOG_FILE ]->setEnabled( false ); m_itemList[Valgrind::LOG_SOCKET ]->setEnabled( false );// m_itemList[Valgrind::LOG_QUAL ]->setEnabled( false ); /* Disabled because Valkyrie always requires xml output from Valgrind */ m_itemList[Valgrind::XML_OUTPUT ]->setEnabled( false ); /* Disabled for now: Only supporting memcheck so far. */ m_itemList[Valgrind::TOOL ]->setEnabled( false ); /* Disabled for now - can't deal with the multiple xml files this generates */ /* Note: Also disabled in Valgrind::checkOptArg() */ m_itemList[Valgrind::TRACE_CH ]->setEnabled( false ); /* Disabled for now - not yet implemented */ m_itemList[Valgrind::INPUT_FD ]->setEnabled( false ); /* Disabled for now - Valgrind presets these options for XML output - See valgrind/docs/internals/xml_output.txt */ 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 );}/* Called from OptionsWindow::categoryClicked() */void ValgrindOptionsPage::init(){ /* if usr gave suppfile on cmdline (updating lbSel) - update suppDirs, suppsAvail from each path in lbSel */ QChar sep = vkConfig->sepChar(); LbWidget* lbSel = (LbWidget*)m_itemList[Valgrind::SUPPS_SEL ]; QStringList currSupps = QStringList::split( sep, lbSel->currValue() ); LbWidget* lbDirs = (LbWidget*)m_itemList[Valgrind::SUPPS_DIRS]; QStringList suppDirs = QStringList::split( sep, lbDirs->currValue() ); for ( unsigned int i=0; i<currSupps.count(); i++ ) { QFileInfo fi( currSupps[i] ); QString path = fi.dirPath(); if ( suppDirs.find( path ) == suppDirs.end() ) suppDirs << path; } lbDirs->setCurrValue( suppDirs.join( sep ) ); /* apply changes to lbDirs */ applyEdits(); /* init suppsAvail */ suppDirsChanged();}/* called when user clicks "Apply" / "Ok" / "Reset" buttons. */void ValgrindOptionsPage::applyOption( int optId ){ vk_assert( optId >= 0 && optId < Valgrind::NUM_OPTS );// QString argval = m_itemList[optId]->currValue(); /* apply option */ switch ( optId ) { default: break; }}void ValgrindOptionsPage::getDbBin(){ vkPrintErr("TODO: ValgrindOptionsPage::getDbBin()\n");}void ValgrindOptionsPage::dummy(){ VK_DEBUG("slot dummy()\n"); }/* Scan dirs set in option "valgrind::supps-dirs" for available suppression files. Update other widgets with result.*/void ValgrindOptionsPage::suppDirsChanged(){ m_allAvailSuppFiles = QStringList(); LbWidget* lbDirs = (LbWidget*)m_itemList[Valgrind::SUPPS_DIRS]; QChar m_sep = vkConfig->sepChar(); /* Get list of dirs from "valgrind::supps-dirs" */ QStringList suppDirs = QStringList::split( m_sep, lbDirs->currValue() ); for ( unsigned int i=0; i<suppDirs.count(); i++ ) { /* for each suppDir, find all supp files */ QDir suppDir( suppDirs[i] ); QString path = suppDir.absPath() + '/'; QStringList entries = suppDir.entryList( "*.supp", QDir::Files ); for (unsigned int i=0; i<entries.count(); i++) { m_allAvailSuppFiles += (path + entries[i]); } } updateSuppsAvail();}/* Given available suppfiles from dirscan, remove those already selected in option "valgrind::supps-sel" Set suppsAvail list with result.*/void ValgrindOptionsPage::updateSuppsAvail(){ QChar m_sep = vkConfig->sepChar(); LbWidget* lbAvail = (LbWidget*)m_itemList[Valgrind::SUPPS_AVAIL]; LbWidget* lbSel = (LbWidget*)m_itemList[Valgrind::SUPPS_SEL ]; QStringList suppsAvail = m_allAvailSuppFiles; QStringList currSupps = QStringList::split( m_sep, lbSel->currValue() ); for ( unsigned int i=0; i<currSupps.count(); i++ ) { QStringList::iterator it = suppsAvail.find( currSupps[i] ); if ( it != suppsAvail.end() ) { suppsAvail.remove( it ); } } lbAvail->setCurrValue( suppsAvail.join( m_sep ) );}/* Called by selecting an item in suppsAvail listbox. Adds item to selected supps listbox (up to limit)*/void ValgrindOptionsPage::updateSuppsSel(const QString& suppr){ LbWidget* lbSel = (LbWidget*)m_itemList[Valgrind::SUPPS_SEL]; if (((QListBox*)lbSel->widget())->numRows() < VG_CLO_MAX_SFILES) { lbSel->insertItem(suppr); } else { /* valgrind doesn't accept any more suppression files */ vkError( this, "Error", "Valgrind won't accept more than %d suppression files", VG_CLO_MAX_SFILES ); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -