xine-config.cpp

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

CPP
311
字号
//(C) 2005 Ian Monroe <ian@monroe.nu>/*************************************************************************** *                                                                         * *   This program is free software; you can redistribute it and/or modify  * *   it under the terms of the GNU General Public License as published by  * *   the Free Software Foundation; either version 2 of the License, or     * *   (at your option) any later version.                                   * *                                                                         * ***************************************************************************/#include "debug.h"#include "xine-config.h"#include "xinecfg.h"#include <kcombobox.h>#include <klocale.h>#include <knuminput.h>#include <kstandarddirs.h>#include <qgroupbox.h>#include <qlabel.h>#include <qpixmap.h>/////////////////////// XineGeneralEntry////////////////////XineGeneralEntry::XineGeneralEntry(const QString& key, xine_t *xine, XineConfigDialog* xcf)    : m_valueChanged(false)    , m_key(key)    , m_xine(xine){    debug() << "new entry " << m_key << endl;    connect(this, SIGNAL(viewChanged()), xcf, SIGNAL(viewChanged() ) );}void XineGeneralEntry::entryChanged(){    m_valueChanged = true;    emit viewChanged();}//////////////////// Function saveXineEntry/////////////////template<class T, class Functor>void saveXineEntry(Functor& storeEntry, T val, const QString& key, xine_t *xine){    if(xine) debug() << "its not null " << key << ' ' << val << endl;    xine_cfg_entry_t ent;    if(xine_config_lookup_entry(xine, key.ascii(), &ent))    {        storeEntry(&ent, val);        xine_config_update_entry(xine, &ent);    }    else        debug()<<"Error saving " << val << " with key " << key;}///////////////////// Functors//////////////////voidXineIntFunctor::operator()( xine_cfg_entry_t* ent, int val ){    ent->num_value = val;}voidXineStrFunctor::operator()( xine_cfg_entry_t* ent, const QString& val ){    ent->str_value = const_cast<char*>(val.ascii());}/////////////////////// XineStrEntry////////////////////XineStrEntry::XineStrEntry(QLineEdit* input, const QCString & key, xine_t *xine, XineConfigDialog* xcf)    : XineGeneralEntry(key,xine,xcf){    xine_cfg_entry_t ent;    if( xine_config_lookup_entry(m_xine,  m_key.ascii(), &ent) )    {        input->setText(ent.str_value);        m_val = ent.str_value;    }     connect( input, SIGNAL( textChanged( const QString & ) ), this, SLOT( entryChanged(const QString &) ) );}voidXineStrEntry::save(){    XineStrFunctor func;    saveXineEntry(func, m_val, m_key, m_xine);    m_valueChanged = false;}voidXineStrEntry::entryChanged(const QString & val){    m_val = val;    XineGeneralEntry::entryChanged();}/////////////////////// XineIntEntry////////////////////XineIntEntry::XineIntEntry(KIntSpinBox* input, const QCString & key, xine_t *xine, XineConfigDialog* xcf)  : XineGeneralEntry(key,xine,xcf){    xine_cfg_entry_t ent;    if(xine_config_lookup_entry(m_xine,  m_key.ascii(), &ent))        {            input->setValue(ent.num_value);            m_val = ent.num_value;        }     connect( input,  SIGNAL( valueChanged( int ) ), this, SLOT( entryChanged( int ) ) );}XineIntEntry::XineIntEntry(const QString& key, xine_t *xine, XineConfigDialog* xcf)    : XineGeneralEntry(key,xine,xcf){ }voidXineIntEntry::save(){    XineIntFunctor func;    saveXineEntry(func, m_val, m_key, m_xine);    m_valueChanged = false;}voidXineIntEntry::entryChanged(int val){    m_val = val;    XineGeneralEntry::entryChanged();}/////////////////////// XineEnumEntry////////////////////XineEnumEntry::XineEnumEntry(QComboBox* input, const QCString & key, xine_t *xine, XineConfigDialog* xcf)    : XineIntEntry(key,xine,xcf){    input->clear();    xine_cfg_entry_t ent;    if(xine_config_lookup_entry(m_xine,  m_key.ascii(), &ent))    {        for( int i = 0; ent.enum_values[i]; ++i )        {            input->insertItem( QString::fromLocal8Bit( ent.enum_values[i] ) );            input->setCurrentItem( ent.num_value );            m_val = ent.num_value;        }    }     connect( input,  SIGNAL( activated( int ) ), this, SLOT( entryChanged( int ) ) );}////////////////////////// XineConfigDialog///////////////////////XineConfigDialog::XineConfigDialog( const xine_t* const xine)        : PluginConfig()        , m_xine (const_cast<xine_t*>(xine)){    m_view = new XineConfigBase();    m_view->xineLogo->setPixmap( QPixmap( locate( "data", "amarok/images/xine_logo.png" ) ) );    //sound output combo box    m_view->deviceComboBox->insertItem(i18n("Autodetect"));    const char* const* drivers = xine_list_audio_output_plugins(m_xine);    for(int i =0; drivers[i]; ++i)    {        if(qstrcmp(drivers[i],"none") != 0) //returns 0 if equal            m_view->deviceComboBox->insertItem(drivers[i]);    }    connect( m_view->deviceComboBox, SIGNAL( activated( int ) ), SIGNAL( viewChanged() ) );    m_entries.setAutoDelete(true);    m_view->deviceComboBox->setCurrentItem( (XineCfg::outputPlugin() == "auto" ) ? "Autodetect" : XineCfg::outputPlugin() );    init();    showHidePluginConfigs();}XineConfigDialog::~XineConfigDialog(){    XineCfg::writeConfig();    delete m_view;}voidXineConfigDialog::init(){    #define add(X) m_entries.append(X)    add(new XineStrEntry(m_view->hostLineEdit, "media.network.http_proxy_host", m_xine, this));    add(new XineIntEntry(m_view->portIntBox,"media.network.http_proxy_port", m_xine, this));    add(new XineStrEntry(m_view->userLineEdit, "media.network.http_proxy_user", m_xine, this));    add(new XineStrEntry(m_view->passLineEdit, "media.network.http_proxy_password", m_xine, this));    //alsaGroupBox    add(new XineStrEntry(m_view->monoLineEdit, "audio.device.alsa_default_device", m_xine,this));    add(new XineStrEntry(m_view->stereoLineEdit, "audio.device.alsa_front_device", m_xine,this));    add(new XineStrEntry(m_view->chan4LineEdit, "audio.device.alsa_surround40_device", m_xine, this));    add(new XineStrEntry(m_view->chan5LineEdit, "audio.device.alsa_surround51_device", m_xine, this));    //ossGroupBox    add(new XineEnumEntry(m_view->ossDeviceComboBox, "audio.device.oss_device_name", m_xine,this));    add(new XineEnumEntry(m_view->speakerComboBox, "audio.output.speaker_arrangement", m_xine, this));    // audiocdGroupBox    add(new XineStrEntry(m_view->audiocd_device, "media.audio_cd.device", m_xine, this));    add(new XineStrEntry(m_view->cddb_server, "media.audio_cd.cddb_server", m_xine, this));    add(new XineIntEntry(m_view->cddb_port, "media.audio_cd.cddb_port", m_xine, this));    add(new XineStrEntry(m_view->cddb_cache_dir, "media.audio_cd.cddb_cachedir", m_xine, this));    #undef add}voidXineConfigDialog::showHidePluginConfigs() const{    if(m_view->deviceComboBox->currentText() == "alsa")    {        m_view->alsaGroupBox->show();        m_view->ossGroupBox->hide();        if(XineCfg::outputPlugin() == "alsa")            m_view->alsaGroupBox->setEnabled(true);        else            m_view->alsaGroupBox->setEnabled(false);    }    else if(m_view->deviceComboBox->currentText() == "oss")    {        m_view->alsaGroupBox->hide();        m_view->ossGroupBox->show();       if(XineCfg::outputPlugin() == "oss")            m_view->ossGroupBox->setEnabled(true);        else            m_view->ossGroupBox->setEnabled(false);    }    else    {        m_view->alsaGroupBox->hide();        m_view->ossGroupBox->hide();        m_view->alsaGroupBox->setEnabled(false);        m_view->ossGroupBox->setEnabled(false);    }}boolXineConfigDialog::hasChanged() const{    showHidePluginConfigs();    if(XineCfg::outputPlugin() != ((m_view->deviceComboBox->currentItem() == 0) ? "auto" : m_view->deviceComboBox->currentText()))        return true;    QPtrListIterator<XineGeneralEntry> it( m_entries );    XineGeneralEntry* entry;    while( (entry = it.current()) != 0 )    {        ++it;        if(entry->hasChanged())            return true;    }    return false;}boolXineConfigDialog::isDefault() const{    return false;}voidXineConfigDialog::reset(xine_t* xine) //SLOT{    debug() << &m_xine << " " << &xine << endl;    m_entries.clear();    m_xine = xine;    debug() << "m_entries now empty " << m_entries.isEmpty() << endl;    init();}voidXineConfigDialog::save()//SLOT{    if(hasChanged())    {        //its not Autodetect really, its just auto        XineCfg::setOutputPlugin((m_view->deviceComboBox->currentItem() == 0)            ? "auto" : m_view->deviceComboBox->currentText());        XineGeneralEntry* entry;        for(entry = m_entries.first(); entry; entry=m_entries.next())        {            if(entry->hasChanged())                entry->save();        }        emit settingsSaved();    }}#include "xine-config.moc"

⌨️ 快捷键说明

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