⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 preferences.cpp

📁 video linux conference
💻 CPP
字号:
/***************************************************************************** * preferences.cpp: preferences window for the kde gui ***************************************************************************** * Copyright (C) 2001 VideoLAN * $Id: preferences.cpp 10237 2005-03-09 13:07:26Z courmisch $ * * Authors: Sigmund Augdal <sigmunau@idi.ntnu.no> Mon Aug 12 2002 * * 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. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA. *****************************************************************************/#include <kdialogbase.h>#include <qmap.h>#include <qcheckbox.h>#include <qframe.h>#include <qgroupbox.h>#include <qlayout.h>#include <qlabel.h>#include <qlistview.h>#include <qnamespace.h>#include <qobjectlist.h>#include <qslider.h>#include <qspinbox.h>#include <qtooltip.h>#include <qvbox.h>#include <kbuttonbox.h>#include <klineedit.h>#include <klocale.h>#include <knuminput.h>#include <kurlrequester.h>#include <kfiledialog.h>#include <kcombobox.h>#include "QConfigItem.h"#include "pluginsbox.h"#include "preferences.h"/*  construct a new configuration window for the given module*/KPreferences::KPreferences(intf_thread_t *p_intf, const char *psz_module_name,                           QWidget *parent, const QString &caption) :    KDialogBase ( TreeList, caption, Ok| Apply|Cancel|User1, Ok, parent,                  _("VLC preferences"), true, false, i18n(_("&Save")) ){    module_t *p_parser = NULL;    vlc_list_t *p_list;    module_config_t *p_item;    int i_index;    QVBox *category_table = NULL;    QString *category_label;    this->p_intf = p_intf;    /* List all modules */    p_list = vlc_list_find( p_intf, VLC_OBJECT_MODULE, FIND_ANYWHERE );    for( i_index = 0; i_index < p_list->i_count; i_index++ )    {        p_parser = (module_t *)p_list->p_values[i_index].p_object ;        p_item = p_parser->p_config;        while( p_item && p_item->i_type != CONFIG_HINT_END )        {            switch( p_item->i_type )            {            case CONFIG_HINT_CATEGORY:                /* force the content to the top of the page */                if ( category_table )                {                    QWidget *space = new QWidget( category_table );                    category_table->setStretchFactor( space, 10 );                    category_table = NULL;                }                                /*                 * Now we can start taking care of the new category                 */                if( p_item->i_type == CONFIG_HINT_CATEGORY )                {                    category_label = new QString( p_item->psz_text );                    QStringList path;                    if ( strcmp( p_parser->psz_object_name, "main" ) )                    {                        path += _( "Plugins" );                        path += p_parser->psz_capability;                        path += p_parser->psz_object_name;                    }                    path += *category_label;                    QFrame *page = addPage( path );                    QVBoxLayout *toplayout = new QVBoxLayout( page);                    QScrollView *sv = new QScrollView(page);                    sv->setResizePolicy(QScrollView::AutoOneFit);                    sv->setFrameStyle(QScrollView::NoFrame);                    toplayout->addWidget(sv);                    category_table = new QVBox(sv->viewport());                    sv->addChild(category_table);                    category_table->setSpacing(spacingHint());                }                break;            case CONFIG_ITEM_MODULE:            {                vlc_mutex_lock( p_item->p_lock );                KPluginsBox *item_frame =                    new KPluginsBox( p_intf, p_item->psz_text,                                     p_item->psz_value ? p_item->psz_value :"",                                     category_table,                                     spacingHint(),                                     this );                QConfigItem *ci = new QConfigItem(this,                                                  p_item->psz_name,                                                  p_item->i_type,                                                  p_item->psz_value);                connect(item_frame, SIGNAL(selectionChanged(const QString &)),                        ci, SLOT(setValue(const QString &)));                /* build a list of available plugins */                for( int i_index = 0; i_index < p_list->i_count; i_index++ )                {                    module_t *p_parser = (module_t *)p_list->p_values[i_index].p_object ;                    if( !strcmp( p_parser->psz_capability,                                 p_item->psz_type ) )                    {                        new QListViewItem(item_frame->getListView(),                                          p_parser->psz_object_name,                                          p_parser->psz_longname);                    }                }                vlc_mutex_unlock( p_item->p_lock );            }            break;            case CONFIG_ITEM_STRING:            {                QHBox *hb = new QHBox(category_table);                hb->setSpacing(spacingHint());                new QLabel(p_item->psz_text, hb);                /* add input box with default value */                vlc_mutex_lock( p_item->p_lock );                QConfigItem *ci = new QConfigItem(this, p_item->psz_name,                                                  p_item->i_type,                                                  p_item->psz_value ?                                                  p_item->psz_value : "");                if ( p_item->ppsz_list )                {                    char **ppsz_list = p_item->ppsz_list;                    KComboBox *p_combobox = new KComboBox( true, hb );                    QToolTip::add(p_combobox, p_item->psz_longtext);                    connect(p_combobox, SIGNAL(activated ( const QString & )),                            ci, SLOT(setValue( const QString &)));                    while ( *ppsz_list )                    {                        p_combobox->insertItem( *ppsz_list );                        if ( !strcmp( *ppsz_list, p_item->psz_value ?                                                  p_item->psz_value : "" ) )                        {#if KDE_VERSION_MAJOR >= 3                            p_combobox->setCurrentText( *ppsz_list );#else                            p_combobox->setCurrentItem( p_combobox->count() );#endif                        }                        ppsz_list++;                    }                }                else                {                    KLineEdit *kl = new KLineEdit( p_item->psz_value ?                                                   p_item->psz_value : "", hb);                    connect(kl, SIGNAL(textChanged ( const QString & )),                            ci, SLOT(setValue( const QString &)));                    QToolTip::add(kl, p_item->psz_longtext);                    kl->setMaxLength(40);                }                vlc_mutex_unlock( p_item->p_lock );            }            break;            case CONFIG_ITEM_FILE:            case CONFIG_ITEM_DIRECTORY:            {                QHBox *hb = new QHBox(category_table);                hb->setSpacing(spacingHint());                new QLabel(p_item->psz_text, hb);                /* add input box with default value */                vlc_mutex_lock( p_item->p_lock );//            KLineEdit *kl = new KLineEdit( p_item->psz_value ?//                                           p_item->psz_value : "", hb);                QConfigItem *ci = new QConfigItem(this, p_item->psz_name,                                                  p_item->i_type,                                                  p_item->psz_value ?                                                  p_item->psz_value : "");//            QPushButton *bbrowse = new QPushButton( _("Browse"), hb );                KURLRequester *kfile = new KURLRequester( p_item->psz_value ?                                                          p_item->psz_value : "",                                                          hb );                if ( p_item->i_type == CONFIG_ITEM_DIRECTORY )                {                    kfile->fileDialog()->setMode(KFile::Directory|KFile::ExistingOnly|KFile::LocalOnly);                }                connect(kfile, SIGNAL(textChanged ( const QString & )),                        ci, SLOT(setValue( const QString &)));                QToolTip::add(kfile, p_item->psz_longtext);                vlc_mutex_unlock( p_item->p_lock );            }            break;            case CONFIG_ITEM_INTEGER:                /* add input box with default value */            {                QHBox *hb = new QHBox(category_table);                hb->setSpacing(spacingHint());                new QLabel(p_item->psz_text, hb);                QConfigItem *ci = new QConfigItem(this, p_item->psz_name,                                                  p_item->i_type,                                                  p_item->i_value);                if ( p_item->i_min == 0 && p_item->i_max == 0 )                {                    QSpinBox *item_adj = new QSpinBox(-1, 99999, 1, hb);                    item_adj->setValue( p_item->i_value );                    connect(item_adj, SIGNAL(valueChanged( int)),                            ci, SLOT(setValue(int)));                    QToolTip::add(item_adj, p_item->psz_longtext);                }                else                {                    KIntNumInput *p_ii = new KIntNumInput( p_item->i_value, hb );                    p_ii->setRange( p_item->i_min, p_item->i_max, 1, true );                     connect( p_ii, SIGNAL( valueChanged( int ) ),                             ci, SLOT( setValue( int ) ) );                    QToolTip::add( p_ii, p_item->psz_longtext );                }            }            break;            case CONFIG_ITEM_FLOAT:            {                QHBox *hb = new QHBox(category_table);                hb->setSpacing(spacingHint());                new QLabel(p_item->psz_text, hb);                KDoubleNumInput *kdi= new KDoubleNumInput(p_item->f_value, hb);                if ( p_item->f_min == 0 && p_item->f_max == 0 )                {                    kdi->setRange(-1, 99999, 0.01, false);                }                else                {                    kdi->setRange( p_item->f_min, p_item->f_max, 0.01, true );                }                QConfigItem *ci = new QConfigItem(this, p_item->psz_name,                                                  p_item->i_type,                                                  p_item->f_value);                connect(kdi, SIGNAL(valueChanged(double)),                        ci, SLOT(setValue(double)));                QToolTip::add(kdi, p_item->psz_longtext);            }            break;            case CONFIG_ITEM_BOOL:                /* add check button */            {                QCheckBox *bool_checkbutton =                    new QCheckBox(QString(p_item->psz_text), category_table);                QConfigItem *ci = new QConfigItem(this, p_item->psz_name,                                                  p_item->i_type,                                                  p_item->i_value);                bool_checkbutton->setChecked(p_item->i_value);                connect(bool_checkbutton, SIGNAL(stateChanged( int)),                        ci, SLOT(setValue(int)));                QToolTip::add(bool_checkbutton, p_item->psz_longtext);            }            break;            }                        p_item++;        }    }    /* force the content to the top of the page, even on the last page */    if ( category_table )    {        QWidget *space = new QWidget( category_table );        category_table->setStretchFactor( space, 10 );        category_table = NULL;    }                    vlc_list_release( p_list );    exec();}/*  empty destructor, qt takes care of this (I think)*/KPreferences::~KPreferences(){}/*  return true if the give module is configureable*/bool KPreferences::isConfigureable(QString module){    module_t *p_parser;    vlc_list_t *p_list;    int i_index;    p_list = vlc_list_find( this->p_intf, VLC_OBJECT_MODULE, FIND_ANYWHERE );    for( i_index = 0; i_index < p_list->i_count; i_index++ )    {        p_parser = (module_t *)p_list->p_values[i_index].p_object ;        if( !module.compare( p_parser->psz_object_name ) )        {            bool ret = p_parser->i_config_items != 0;            vlc_list_release( p_list );            return ret;        }    }    vlc_list_release( p_list );    return false;}/*  run when the Apply button is pressed, and by the methods for the ok  and save buttons*/void KPreferences::slotApply(){    QObjectList * l = queryList( "QConfigItem" );    QObjectListIt it( *l );             // iterate over the config items    QObject * obj;    while ( (obj=it.current()) != 0 ) {        ++it;        QConfigItem *p_config = (QConfigItem *)obj;        if ( p_config->changed() )        {            msg_Dbg( p_intf, const_cast<char *>(p_config->name()));            msg_Dbg( p_intf, "%d", p_config->getType());            switch( p_config->getType() ) {            case CONFIG_ITEM_DIRECTORY:            case CONFIG_ITEM_STRING:            case CONFIG_ITEM_FILE:            case CONFIG_ITEM_MODULE:                if (p_config->sValue()) {                    config_PutPsz( p_intf, p_config->name(),                                   strdup(p_config->sValue().latin1()));                }                else {                    config_PutPsz( p_intf, p_config->name(), NULL );                }                break;            case CONFIG_ITEM_INTEGER:            case CONFIG_ITEM_BOOL:                config_PutInt( p_intf, p_config->name(), p_config->iValue() );                break;            case CONFIG_ITEM_FLOAT:                config_PutFloat( p_intf, p_config->name(), p_config->fValue() );                break;            }            p_config->resetChanged();        }    }    delete l;}/*  run when the Ok button is pressed*/void KPreferences::slotOk(){    slotApply();    accept();}/*  run when the save button is pressed*/void KPreferences::slotUser1(){    slotApply();    config_SaveConfigFile( p_intf, NULL );}

⌨️ 快捷键说明

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