editfilterdialog.cpp
来自「Amarok是一款在LINUX或其他类UNIX操作系统中运行的音频播放器软件。 」· C++ 代码 · 共 792 行 · 第 1/2 页
CPP
792 行
// greater than... result = m_strPrefixNOT + keyword + ":>"; if (keyword == "length") result += QString::number( m_spinMin1->value() * 60 + m_spinMin2->value() ) + unit; else result += m_spinMin1->text() + unit; break; case 2: // equal to... if (keyword == "length") result = m_strPrefixNOT + "length:" + QString::number( m_spinMin1->value() * 60 + m_spinMin2->value() ) + unit; else { if (m_strPrefixNOT.isEmpty()) result = keyword + ":>" + QString::number(m_spinMin1->value() - 1) + unit + " " + keyword + ":<" + QString::number(m_spinMin1->value() + 1) + unit; else result = keyword + ":<" + QString::number(m_spinMin1->value()) + unit + " OR " + keyword + ":>" + QString::number(m_spinMin1->value()) + unit; } break; case 3: // between... if (keyword == "length") { if (m_strPrefixNOT.isEmpty()) result = "length:>" + QString::number( m_spinMin1->value() * 60 + m_spinMin2->value() - 1) + unit + " length:<" + QString::number( m_spinMax1->value() * 60 + m_spinMax2->value() + 1) + unit; else result = "length:<" + QString::number( m_spinMin1->value() * 60 + m_spinMin2->value()) + unit + " OR length:>" + QString::number( m_spinMax1->value() * 60 + m_spinMax2->value()) + unit; } else { if (m_strPrefixNOT.isEmpty()) result = keyword + ":>" + QString::number(m_spinMin1->value() - 1) + unit + " " + keyword + ":<" + QString::number(m_spinMax1->value() + 1) + unit; else result = keyword + ":<" + QString::number(m_spinMin1->value() - 1) + unit + " OR " + keyword + ":>" + QString::number(m_spinMax1->value() + 1) + unit; } break; } return result;}void EditFilterDialog::setMinMaxValueSpins(){ // setting some spin box options and limit values m_spinMin1->setValue( 0 ); m_spinMin1->setMinValue( 0 ); m_spinMin1->setMaxValue( 100000000 ); m_spinMin2->setMinValue( 0 ); m_spinMin2->setMaxValue( 59 ); m_spinMin2->hide(); m_spinMax1->setValue( 0 ); m_spinMax1->setMinValue( 0 ); m_spinMax1->setMaxValue( 100000000 ); m_spinMax2->setMinValue( 0 ); m_spinMax2->setMaxValue( 59 ); m_spinMax2->hide(); // fix tooltip QToolTip::add( m_spinMin1, "" ); QToolTip::add( m_spinMin2, i18n("Seconds") ); QToolTip::add( m_spinMax1, "" ); QToolTip::add( m_spinMax2, i18n("Seconds") );}// SLOTSvoid EditFilterDialog::selectedKeyword(int index) // SLOT{ debug() << "you selected index " << index << ": '" << m_comboKeyword->text(index) << "'" << endl; m_groupBox2->setEnabled( false ); m_comboUnitSize->setEnabled( false ); m_filesizeLabel->setEnabled( false ); m_prefixNOT->setEnabled( true ); setMinMaxValueSpins(); const QString key = m_vector[index]; if( index == 0 ) { // Simple Search m_groupBox2->setEnabled( true ); m_prefixNOT->setEnabled( false ); textWanted(); } else if( key=="bitrate" ) { // bitrate: set useful values for the spinboxes m_spinMin1->setValue( 128 ); m_spinMax1->setValue( 384 ); valueWanted(); } else if( key=="samplerate" ) { // samplerate: set useful values for the spinboxes m_spinMin1->setValue( 8000 ); m_spinMax1->setValue( 48000 ); valueWanted(); } else if( key=="length" ) { // length: set useful values for the spinboxes m_spinMin2->show(); m_spinMax2->show(); m_spinMin1->setValue( 1 ); m_spinMax1->setValue( 5 ); QToolTip::add( m_spinMin1, i18n("Minutes") ); QToolTip::add( m_spinMax1, i18n("Minutes") ); // fix the maximum values to reduce spinboxes size m_spinMin1->setMaxValue( 240 ); m_spinMax1->setMaxValue( 240 ); valueWanted(); } else if( key=="size" || key=="filesize" ) { // size: set useful values for the spinboxes m_filesizeLabel->setEnabled( true ); m_comboUnitSize->setEnabled( true ); m_spinMin1->setValue( 1 ); m_spinMax1->setValue( 3 ); m_comboUnitSize->setCurrentItem( 2 ); valueWanted(); } else if( key=="year" ) { // year: set useful values for the spinboxes m_spinMin1->setValue( 1900 ); m_spinMax1->setValue( QDate::currentDate().year() ); valueWanted(); } else if( key=="track" || key=="disc" || key=="discnumber" ) { // track/disc: set useful values for the spinboxes m_spinMin1->setValue( 1 ); m_spinMax1->setValue( 15 ); valueWanted(); } else if( key=="playcount" || key=="lastplayed" || key=="rating" || key=="score" || key=="bpm" ) { valueWanted(); } else if( key=="label" ) textWanted( CollectionDB::instance()->labelList() ); else if( key=="album" ) textWanted( CollectionDB::instance()->albumList() ); else if( key=="artist" ) textWanted( CollectionDB::instance()->artistList() ); else if( key=="composer" ) textWanted( CollectionDB::instance()->composerList() ); else if( key=="genre" ) textWanted( CollectionDB::instance()->genreList() ); else if( key=="type" || key=="filetype" ) { QStringList types; types << "mp3" << "flac" << "ogg" << "aac" << "m4a" << "mp4" << "mp2" << "ac3" << "wav" << "asf" << "wma"; textWanted( types ); } else textWanted(); // assign the correct value to the m_strPrefixNOT assignPrefixNOT(); // assign the right index m_selectedIndex = index;}void EditFilterDialog::minSpinChanged(int value) // SLOT{ if (value > m_spinMax1->value()) m_spinMax1->setValue(value);}void EditFilterDialog::maxSpinChanged(int value) // SLOT{ if (m_spinMin1->value() > value) m_spinMin1->setValue(value);}void EditFilterDialog::textWanted() // SLOT{ m_editKeyword->setEnabled( true ); m_groupBox->setEnabled( false ); m_editKeyword->completionObject()->clear();}void EditFilterDialog::textWanted( const QStringList &completion ) // SLOT{ m_editKeyword->setEnabled( true ); m_groupBox->setEnabled( false ); m_editKeyword->completionObject()->clear(); m_editKeyword->completionObject()->insertItems( completion ); m_editKeyword->completionObject()->setIgnoreCase( true ); m_editKeyword->setCompletionMode( KGlobalSettings::CompletionPopup );}void EditFilterDialog::valueWanted() // SLOT{ m_editKeyword->setEnabled( false ); m_groupBox->setEnabled( true );}void EditFilterDialog::chooseCondition( int condition ) // SLOT{ if( condition == 3 ) // included between chooseMinMaxValue(); else chooseOneValue();}void EditFilterDialog::chooseOneValue() // SLOT{ m_andLabel->setEnabled( false); m_spinMax1->setEnabled( false ); m_spinMax2->setEnabled( false );}void EditFilterDialog::chooseMinMaxValue() // SLOT{ m_andLabel->setEnabled( true ); m_spinMax1->setEnabled( true ); m_spinMax2->setEnabled( true );}void EditFilterDialog::slotCheckAll() // SLOT{ exclusiveSelectOf( 0 );}void EditFilterDialog::slotCheckAtLeastOne() // SLOT{ exclusiveSelectOf( 1 );}void EditFilterDialog::slotCheckExactly() // SLOT{ exclusiveSelectOf( 2 );}void EditFilterDialog::slotCheckExclude() // SLOT{ exclusiveSelectOf( 3 );}void EditFilterDialog::slotCheckAND() // SLOT{ m_checkAND->setChecked( true ); m_checkOR->setChecked( false );}void EditFilterDialog::slotCheckOR() // SLOT{ m_checkAND->setChecked( false ); m_checkOR->setChecked( true );}void EditFilterDialog::assignPrefixNOT() // SLOT{ if (m_prefixNOT->isChecked()) m_strPrefixNOT = "-"; else m_strPrefixNOT = "";}void EditFilterDialog::slotDefault() // SLOT{ // now append the filter rule if not empty if (m_editKeyword->text().isEmpty() && (m_selectedIndex == 0)) { KMessageBox::sorry( 0, i18n("<p>Sorry but the filter rule cannot be set. The text field is empty. " "Please type something into it and retry.</p>"), i18n("Empty Text Field")); m_editKeyword->setFocus(); return; } if (!m_appended) { // it's the first rule m_appended = true; m_groupBox3->setEnabled( true ); } m_previousFilterText = m_filterText; if (!m_filterText.isEmpty()) { m_filterText += " "; if (m_checkOR->isChecked()) m_filterText += "OR "; } QStringList list = QStringList::split( " ", m_editKeyword->text() ); const QString key = m_vector[m_selectedIndex]; if( m_selectedIndex == 0 ) { // Simple Search debug() << "selected text: '" << m_editKeyword->text() << "'" << endl; if (m_actionCheck[0]->isChecked()) { // all words m_filterText += m_editKeyword->text(); } else if (m_actionCheck[1]->isChecked()) { // at least one word m_filterText += *(list.begin()); for ( QStringList::Iterator it = ++list.begin(); it != list.end(); ++it ) m_filterText += " OR " + *it; } else if (m_actionCheck[2]->isChecked()) { // exactly the words m_filterText += "\"" + m_editKeyword->text() + "\""; } else if (m_actionCheck[3]->isChecked()) { // exclude words for ( QStringList::Iterator it = list.begin(); it != list.end(); ++it ) m_filterText += " -" + *it; } } else if( key=="bitrate" || key=="disc" || key=="discnumber" || key=="length" || key=="playcount" || key=="rating" || key=="samplerate" || key=="score" || key=="filesize" || key=="size" || key=="track" || key=="year" ) { m_filterText += keywordConditionString( m_vector[m_selectedIndex] ); } else { m_filterText += m_vector[m_selectedIndex] + ":\"" + m_editKeyword->text() + "\""; } emit filterChanged( m_filterText ); m_editKeyword->clear();}void EditFilterDialog::slotUser1() // SLOT{ m_previousFilterText = m_filterText; m_filterText = ""; // no filter appended cause all cleared m_appended = false; m_groupBox3->setEnabled( false ); emit filterChanged( m_filterText );}void EditFilterDialog::slotUser2() // SLOT{ m_filterText = m_previousFilterText; if (m_filterText.isEmpty()) { // no filter appended cause all cleared m_appended = false; m_groupBox3->setEnabled( false ); } emit filterChanged( m_filterText );}void EditFilterDialog::slotOk() // SLOT{ // If there's a filter typed in but unadded, add it. // This makes it easier to just add one condition - you only need to press OK. if ( !m_editKeyword->text().isEmpty() ) slotDefault(); // Don't let OK do anything if they haven't set any filters. if (m_appended) accept();}#include "editfilterdialog.moc"
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?