podcastsettings.cpp

来自「Amarok是一款在LINUX或其他类UNIX操作系统中运行的音频播放器软件。 」· C++ 代码 · 共 226 行

CPP
226
字号
// (c) 2005-2006 Seb Ruiz <me@sebruiz.net>// (c) 2006 Bart Cerneels <shanachie@yucom.be>// See COPYING file for licensing information.#include "mediabrowser.h"#include "podcastsettingsbase.h"#include "podcastsettings.h"#include <klineedit.h>#include <knuminput.h>#include <kmessagebox.h>    //global changes confirmation#include <kurlrequester.h>#include <klocale.h>#include <kurl.h>#include <kwin.h>#include <qcheckbox.h>#include <qpushbutton.h>#include <qradiobutton.h>#include <qlabel.h>PodcastSettings::PodcastSettings( const QDomNode &channelSettings, const QString &title )    : m_title( title ){    m_saveLocation = channelSettings.namedItem( "savelocation").toElement().text();    m_autoScan = channelSettings.namedItem( "autoscan").toElement().text() == "true";    m_fetch = channelSettings.namedItem("fetch").toElement().text() == "automatic"?AUTOMATIC:STREAM;    m_addToMediaDevice = channelSettings.namedItem( "autotransfer").toElement().text() == "true";    m_purge = channelSettings.namedItem( "purge").toElement().text() == "true";    m_purgeCount = channelSettings.namedItem( "purgecount").toElement().text().toInt();}// default settingsPodcastSettings::PodcastSettings( const QString &title )    : m_title( title ){    m_saveLocation = Amarok::saveLocation( "podcasts/" );    m_saveLocation += Amarok::vfatPath( m_title );    m_autoScan = true;    m_fetch = STREAM;    m_addToMediaDevice = false;    m_purge = false;    m_purgeCount = 0;}PodcastSettings::PodcastSettings( const QString &title, const QString &save, const bool autoScan,                                  const int fetchType, const bool autotransfer, const bool purge, const int purgecount ){    m_title = title;    if( save.isEmpty() )    {        m_saveLocation = Amarok::saveLocation( "podcasts/" );        m_saveLocation += Amarok::vfatPath( m_title );    }    else        m_saveLocation = save;    m_autoScan = autoScan;    m_fetch = fetchType;    m_addToMediaDevice = autotransfer;    m_purge = purge;    m_purgeCount = purgecount;}PodcastSettingsDialog::PodcastSettingsDialog( PodcastSettings *settings, QWidget* parent )                            : KDialogBase(  parent, 0, true, i18n("change options", "Configure %1").arg( settings->m_title )                            , KDialogBase::User1|KDialogBase::Ok|KDialogBase::Cancel                            , KDialogBase::Ok, true                            , KGuiItem(i18n("Reset"), "reset" ) )        , m_settings( settings ){    init();    setSettings( settings );}PodcastSettingsDialog::PodcastSettingsDialog( const QPtrList<PodcastSettings> &list, const QString &caption, QWidget* parent )    : KDialogBase(  parent, 0, true, i18n("change options", "Configure %1").arg( caption )            , KDialogBase::User1|KDialogBase::Ok|KDialogBase::Cancel                    , KDialogBase::Ok, true                    , KGuiItem(i18n("Reset"), "reset" ) )        , m_settingsList( list ){    init();    m_settings = m_settingsList.first();    if( !m_settings->m_saveLocation.endsWith( "/" ) )        m_settings->m_saveLocation = m_settings->m_saveLocation.section( "/", 0, -2 );    setSettings( m_settings );}voidPodcastSettingsDialog::init(){        m_ps = new PodcastSettingsDialogBase(this);        KWin::setState( winId(), NET::SkipTaskbar );        setMainWidget(m_ps);        m_ps->m_saveLocation->setMode( KFile::Directory | KFile::ExistingOnly );        m_ps->m_addToMediaDeviceCheck->setEnabled( MediaBrowser::isAvailable() );        enableButtonOK( false );         // Connects for modification check        connect( m_ps->m_purgeCountSpinBox->child( "qt_spinbox_edit" ),  SIGNAL(textChanged( const QString& )), SLOT(checkModified()) );        connect( m_ps->m_saveLocation,   SIGNAL(textChanged( const QString& )), SLOT(checkModified()) );        connect( m_ps->m_autoFetchCheck, SIGNAL(clicked()),                     SLOT(checkModified()) );        connect( m_ps->m_streamRadio,    SIGNAL(clicked()),                     SLOT(checkModified()) );        connect( m_ps->m_addToMediaDeviceCheck, SIGNAL(clicked()),              SLOT(checkModified()) );        connect( m_ps->m_downloadRadio,  SIGNAL(clicked()),                     SLOT(checkModified()) );        connect( m_ps->m_purgeCheck,     SIGNAL(clicked()),                     SLOT(checkModified()) );}boolPodcastSettingsDialog::hasChanged(){    bool fetchTypeChanged = true;    if( m_ps->m_streamRadio->isChecked()   && m_settings->m_fetch == STREAM   ||        m_ps->m_downloadRadio->isChecked() && m_settings->m_fetch == AUTOMATIC  )        fetchTypeChanged = false;    return( m_settings->m_saveLocation     != requesterSaveLocation()             ||            m_settings->m_autoScan         != m_ps->m_autoFetchCheck->isChecked() ||            m_settings->m_addToMediaDevice != m_ps->m_addToMediaDeviceCheck->isChecked() ||            m_settings->m_purge            != m_ps->m_purgeCheck->isChecked()     ||            m_settings->m_purgeCount       != m_ps->m_purgeCountSpinBox->value()  ||            fetchTypeChanged );}voidPodcastSettingsDialog::checkModified() //slot{    enableButtonOK( hasChanged() );}void PodcastSettingsDialog::slotOk()       //slot{    enableButtonOK( false ); //visual feedback    if ( !m_settingsList.isEmpty() )    {        foreachType( QPtrList<PodcastSettings>, m_settingsList)        {            (*it)->m_saveLocation     = requesterSaveLocation().append( Amarok::vfatPath( (*it)->title() ) );            (*it)->m_autoScan         = m_ps->m_autoFetchCheck->isChecked();            (*it)->m_addToMediaDevice = m_ps->m_addToMediaDeviceCheck->isChecked();            (*it)->m_purge            = m_ps->m_purgeCheck->isChecked();            (*it)->m_purgeCount       = m_ps->m_purgeCountSpinBox->value();            if( m_ps->m_streamRadio->isChecked() )                (*it)->m_fetch = STREAM;            else                (*it)->m_fetch = AUTOMATIC;        }    }    else    {        m_settings->m_saveLocation     = requesterSaveLocation();        m_settings->m_autoScan         = m_ps->m_autoFetchCheck->isChecked();        m_settings->m_addToMediaDevice = m_ps->m_addToMediaDeviceCheck->isChecked();        m_settings->m_purge            = m_ps->m_purgeCheck->isChecked();        m_settings->m_purgeCount       = m_ps->m_purgeCountSpinBox->value();        if( m_ps->m_streamRadio->isChecked() )            m_settings->m_fetch = STREAM;        else            m_settings->m_fetch = AUTOMATIC;    }    KDialogBase::slotOk();}// KUrlRequester doesn't provide us with convenient functions for adding trailing slashesQString PodcastSettingsDialog::requesterSaveLocation(){    QString url = m_ps->m_saveLocation->url();    if( url.endsWith( "/" ) )        return url;    else        return url + '/';}void PodcastSettingsDialog::setSettings( PodcastSettings *settings ){    QString saveLocation = settings->m_saveLocation;    m_ps->m_saveLocation->setURL( saveLocation );    m_ps->m_autoFetchCheck->setChecked( settings->m_autoScan );    if( settings->m_fetch == STREAM )    {        m_ps->m_streamRadio->setChecked( true );        m_ps->m_downloadRadio->setChecked( false );    }    else if( settings->m_fetch == AUTOMATIC )    {        m_ps->m_streamRadio->setChecked( false );        m_ps->m_downloadRadio->setChecked( true );    }    m_ps->m_addToMediaDeviceCheck->setChecked( settings->m_addToMediaDevice );    m_ps->m_purgeCheck->setChecked( settings->m_purge );    m_ps->m_purgeCountSpinBox->setValue( settings->m_purgeCount );    if( !settings->m_purge )    {        m_ps->m_purgeCountSpinBox->setEnabled( false );        m_ps->m_purgeCountLabel->setEnabled( false );    }}//reset to default settings buttonvoid PodcastSettingsDialog::slotUser1()    //slot{    setSettings( new PodcastSettings(m_settings->m_title) );    checkModified();}bool PodcastSettingsDialog::configure(){    return exec() == QDialog::Accepted;}#include "podcastsettings.moc"

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?