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 + -
显示快捷键?