📄 preferences_widgets.cpp
字号:
combo = _combo; label = _label; module_config_t *p_module_config = config_FindConfig( p_this, getName() ); finish( p_module_config, bycat );}void StringListConfigControl::finish(module_config_t *p_module_config, bool bycat ){ combo->setEditable( false ); if(!p_module_config) return; for( int i_index = 0; i_index < p_module_config->i_list; i_index++ ) { combo->addItem( qfu((p_module_config->ppsz_list_text && p_module_config->ppsz_list_text[i_index])? p_module_config->ppsz_list_text[i_index] : p_module_config->ppsz_list[i_index] ), QVariant( qfu(p_module_config->ppsz_list[i_index] )) ); if( p_item->value.psz && !strcmp( p_module_config->value.psz, p_module_config->ppsz_list[i_index] ) ) combo->setCurrentIndex( combo->count() - 1 ); } combo->setToolTip( formatTooltip(qtr(p_module_config->psz_longtext)) ); if( label ) label->setToolTip( formatTooltip(qtr(p_module_config->psz_longtext)) );}QString StringListConfigControl::getValue(){ return combo->itemData( combo->currentIndex() ).toString();}void setfillVLCConfigCombo( const char *configname, intf_thread_t *p_intf, QComboBox *combo, QWidget *parent ){ module_config_t *p_config = config_FindConfig( VLC_OBJECT(p_intf), configname ); if( p_config ) { if(p_config->pf_update_list) { vlc_value_t val; val.i_int = p_config->value.i; p_config->pf_update_list(VLC_OBJECT(p_intf), configname, val, val, NULL); // assume in any case that dirty was set to true // because lazy programmes will use the same callback for // this, like the one behind the refresh push button? p_config->b_dirty = false; } for ( int i_index = 0; i_index < p_config->i_list; i_index++ ) { combo->addItem( qfu( p_config->ppsz_list_text[i_index] ), QVariant( p_config->pi_list[i_index] ) ); if( p_config->value.i == p_config->pi_list[i_index] ) { combo->setCurrentIndex( i_index ); } } combo->setToolTip( qfu( p_config->psz_longtext ) ); }}/********* Module **********/ModuleConfigControl::ModuleConfigControl( vlc_object_t *_p_this, module_config_t *_p_item, QWidget *_parent, bool bycat, QGridLayout *l, int &line) : VStringConfigControl( _p_this, _p_item, _parent ){ label = new QLabel( qtr(p_item->psz_text) ); combo = new QComboBox(); combo->setMinimumWidth( MINWIDTH_BOX ); finish( bycat ); if( !l ) { QHBoxLayout *layout = new QHBoxLayout(); layout->addWidget( label ); layout->addWidget( combo, LAST_COLUMN ); widget->setLayout( layout ); } else { l->addWidget( label, line, 0 ); l->addWidget( combo, line, LAST_COLUMN, Qt::AlignRight ); }}ModuleConfigControl::ModuleConfigControl( vlc_object_t *_p_this, module_config_t *_p_item, QLabel *_label, QComboBox *_combo, bool bycat ) : VStringConfigControl( _p_this, _p_item ){ combo = _combo; label = _label; finish( bycat );}void ModuleConfigControl::finish( bool bycat ){ vlc_list_t *p_list; module_t *p_parser; combo->setEditable( false ); /* build a list of available modules */ p_list = vlc_list_find( p_this, VLC_OBJECT_MODULE, FIND_ANYWHERE ); combo->addItem( qtr("Default") ); for( int i_index = 0; i_index < p_list->i_count; i_index++ ) { p_parser = (module_t *)p_list->p_values[i_index].p_object ; if( bycat ) { if( !strcmp( module_GetObjName( p_parser ), "main" ) ) continue; unsigned confsize; module_config_t *p_config; p_config = module_GetConfig (p_parser, &confsize); for (size_t i = 0; i < confsize; i++) { /* Hack: required subcategory is stored in i_min */ const module_config_t *p_cfg = p_config + i; if( p_cfg->i_type == CONFIG_SUBCATEGORY && p_cfg->value.i == p_item->min.i ) combo->addItem( qtr( module_GetLongName( p_parser )), QVariant( module_GetObjName( p_parser ) ) ); if( p_item->value.psz && !strcmp( p_item->value.psz, module_GetObjName( p_parser ) ) ) combo->setCurrentIndex( combo->count() - 1 ); } module_PutConfig (p_config); } else if( module_IsCapable( p_parser, p_item->psz_type ) ) { combo->addItem( qtr(module_GetLongName( p_parser ) ), QVariant( module_GetObjName( p_parser ) ) ); if( p_item->value.psz && !strcmp( p_item->value.psz, module_GetObjName( p_parser ) ) ) combo->setCurrentIndex( combo->count() - 1 ); } } vlc_list_release( p_list ); combo->setToolTip( formatTooltip(qtr(p_item->psz_longtext)) ); if( label ) label->setToolTip( formatTooltip(qtr(p_item->psz_longtext)) );}QString ModuleConfigControl::getValue(){ return combo->itemData( combo->currentIndex() ).toString();}/********* Module list **********/ModuleListConfigControl::ModuleListConfigControl( vlc_object_t *_p_this, module_config_t *_p_item, QWidget *_parent, bool bycat, QGridLayout *l, int &line) : VStringConfigControl( _p_this, _p_item, _parent ){ groupBox = NULL; /* Special Hack */ if( !p_item->psz_text ) return; groupBox = new QGroupBox ( qtr(p_item->psz_text) ); text = new QLineEdit; QGridLayout *layoutGroupBox = new QGridLayout( groupBox ); finish( bycat ); int boxline = 0; for( QVector<checkBoxListItem*>::iterator it = modules.begin(); it != modules.end(); it++ ) { layoutGroupBox->addWidget( (*it)->checkBox, boxline++, 0 ); } layoutGroupBox->addWidget( text, boxline, 0 ); if( !l ) { QVBoxLayout *layout = new QVBoxLayout(); layout->addWidget( groupBox, line, 0 ); widget->setLayout( layout ); } else { l->addWidget( groupBox, line, 0, 1, -1 ); } text->setToolTip( formatTooltip( qtr( p_item->psz_longtext) ) );}ModuleListConfigControl::~ModuleListConfigControl(){ for( QVector<checkBoxListItem*>::iterator it = modules.begin(); it != modules.end(); it++ ) { delete *it; } delete groupBox;}#define CHECKBOX_LISTS \{ \ QCheckBox *cb = new QCheckBox( qtr( module_GetLongName( p_parser ) ) );\ checkBoxListItem *cbl = new checkBoxListItem; \\ CONNECT( cb, stateChanged( int ), this, onUpdate( int ) );\ cb->setToolTip( formatTooltip( qtr( module_GetHelp( p_parser ))));\ cbl->checkBox = cb; \\ cbl->psz_module = strdup( module_GetObjName( p_parser ) ); \ modules.push_back( cbl ); \\ if( p_item->value.psz && strstr( p_item->value.psz, cbl->psz_module ) ) \ cbl->checkBox->setChecked( true ); \}void ModuleListConfigControl::finish( bool bycat ){ vlc_list_t *p_list; module_t *p_parser; /* build a list of available modules */ p_list = vlc_list_find( p_this, VLC_OBJECT_MODULE, FIND_ANYWHERE ); for( int i_index = 0; i_index < p_list->i_count; i_index++ ) { p_parser = (module_t *)p_list->p_values[i_index].p_object ; if( bycat ) { if( !strcmp( module_GetObjName( p_parser ), "main" ) ) continue; unsigned confsize; module_config_t *p_config = module_GetConfig (p_parser, &confsize); for (size_t i = 0; i < confsize; i++) { module_config_t *p_cfg = p_config + i; /* Hack: required subcategory is stored in i_min */ if( p_cfg->i_type == CONFIG_SUBCATEGORY && p_cfg->value.i == p_item->min.i ) { CHECKBOX_LISTS; } } module_PutConfig (p_config); } else if( module_IsCapable( p_parser, p_item->psz_type ) ) { CHECKBOX_LISTS; } } vlc_list_release( p_list ); text->setToolTip( formatTooltip(qtr(p_item->psz_longtext)) ); assert( groupBox ); groupBox->setToolTip( formatTooltip(qtr(p_item->psz_longtext)) );}#undef CHECKBOX_LISTSQString ModuleListConfigControl::getValue(){ assert( text ); return text->text();}void ModuleListConfigControl::hide(){ for( QVector<checkBoxListItem*>::iterator it = modules.begin(); it != modules.end(); it++ ) { (*it)->checkBox->hide(); } groupBox->hide();}void ModuleListConfigControl::show(){ for( QVector<checkBoxListItem*>::iterator it = modules.begin(); it != modules.end(); it++ ) { (*it)->checkBox->show(); } groupBox->show();}void ModuleListConfigControl::onUpdate( int value ){ text->clear(); bool first = true; for( QVector<checkBoxListItem*>::iterator it = modules.begin(); it != modules.end(); it++ ) { if( (*it)->checkBox->isChecked() ) { if( first ) { text->setText( text->text() + (*it)->psz_module ); first = false; } else { text->setText( text->text() + ":" + (*it)->psz_module ); } } }}/************************************************************************** * Integer-based controls *************************************************************************//*********** Integer **************/IntegerConfigControl::IntegerConfigControl( vlc_object_t *_p_this, module_config_t *_p_item, QWidget *_parent, QGridLayout *l, int &line ) : VIntConfigControl( _p_this, _p_item, _parent ){ label = new QLabel( qtr(p_item->psz_text) ); spin = new QSpinBox; spin->setMinimumWidth( MINWIDTH_BOX ); spin->setAlignment( Qt::AlignRight ); spin->setMaximumWidth( MINWIDTH_BOX ); finish(); if( !l ) { QHBoxLayout *layout = new QHBoxLayout(); layout->addWidget( label, 0 ); layout->addWidget( spin, LAST_COLUMN ); widget->setLayout( layout ); } else { l->addWidget( label, line, 0 ); l->addWidget( spin, line, LAST_COLUMN, Qt::AlignRight ); }}IntegerConfigControl::IntegerConfigControl( vlc_object_t *_p_this, module_config_t *_p_item, QLabel *_label, QSpinBox *_spin ) : VIntConfigControl( _p_this, _p_item ){ spin = _spin; label = _label; finish();}void IntegerConfigControl::finish(){ spin->setMaximum( 2000000000 ); spin->setMinimum( -2000000000 ); spin->setValue( p_item->value.i ); spin->setToolTip( formatTooltip(qtr(p_item->psz_longtext)) ); if( label ) label->setToolTip( formatTooltip(qtr(p_item->psz_longtext)) );}int IntegerConfigControl::getValue(){ return spin->value();}/********* Integer range **********/IntegerRangeConfigControl::IntegerRangeConfigControl( vlc_object_t *_p_this, module_config_t *_p_item, QWidget *_parent, QGridLayout *l, int &line ) : IntegerConfigControl( _p_this, _p_item, _parent, l, line ){ finish();}IntegerRangeConfigControl::IntegerRangeConfigControl( vlc_object_t *_p_this, module_config_t *_p_item, QLabel *_label, QSpinBox *_spin ) : IntegerConfigControl( _p_this, _p_item, _label, _spin ){ finish();}void IntegerRangeConfigControl::finish(){ spin->setMaximum( p_item->max.i ); spin->setMinimum( p_item->min.i );}IntegerRangeSliderConfigControl::IntegerRangeSliderConfigControl( vlc_object_t *_p_this, module_config_t *_p_item, QLabel *_label, QSlider *_slider ): VIntConfigControl( _p_this, _p_item ){ slider = _slider; label = _label; slider->setMaximum( p_item->max.i ); slider->setMinimum( p_item->min.i ); slider->setValue( p_item->value.i ); slider->setToolTip( formatTooltip(qtr(p_item->psz_longtext)) ); if( label ) label->setToolTip( formatTooltip(qtr(p_item->psz_longtext)) );}int IntegerRangeSliderConfigControl::getValue(){ return slider->value();}/********* Integer / choice list **********/IntegerListConfigControl::IntegerListConfigControl( vlc_object_t *_p_this, module_config_t *_p_item, QWidget *_parent, bool bycat, QGridLayout *l, int &line) : VIntConfigControl( _p_this, _p_item, _parent ){ label = new QLabel( qtr(p_item->psz_text) ); combo = new QComboBox(); combo->setMinimumWidth( MINWIDTH_BOX ); module_config_t *p_module_config = config_FindConfig( p_this, p_item->psz_name ); if(p_module_config && p_module_config->pf_update_list) { vlc_value_t val; val.i_int = p_module_config->value.i; p_module_config->pf_update_list(p_this, p_item->psz_name, val, val, NULL); // assume in any case that dirty was set to true // because lazy programmes will use the same callback for // this, like the one behind the refresh push button? p_module_config->b_dirty = false; } finish( p_module_config, bycat ); if( !l ) { QHBoxLayout *layout = new QHBoxLayout(); layout->addWidget( label ); layout->addWidget( combo, LAST_COLUMN ); widget->setLayout( layout ); } else { l->addWidget( label, line, 0 ); l->addWidget( combo, line, LAST_COLUMN, Qt::AlignRight ); } if( p_item->i_action ) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -