/***************************************************************************** * ModuleConfigControl implementation *****************************************************************************/ ModuleConfigControl::ModuleConfigControl( vlc_object_t *p_this, module_config_t *p_item, HWND parent, HINSTANCE hInst, int * py_pos ) : ConfigControl( p_this, p_item, parent, hInst ) { module_t **p_list; module_t *p_parser; label = CreateWindow( _T("STATIC"), _FROMMB(p_item->psz_text), WS_CHILD | WS_VISIBLE | SS_LEFT, 5, *py_pos, 200, 15, parent, NULL, hInst, NULL ); *py_pos += 15 + 10; combo = CreateWindow( _T("COMBOBOX"), _T(""), WS_CHILD | WS_VISIBLE | CBS_AUTOHSCROLL | CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL, 20, *py_pos, 180, 5*15 + 6, parent, NULL, hInst, NULL); *py_pos += 15 + 10; /* build a list of available modules */ p_list = module_list_get( NULL ); ComboBox_AddString( combo, _T("Default") ); ComboBox_SetItemData( combo, 0, (void *)NULL ); ComboBox_SetCurSel( combo, 0 ); //ComboBox_SetText( combo, _T("Default") ); for( size_t i_index = 0; p_list[i_index]; i_index++ ) { p_parser = p_list[i_index]; if( module_provides( p_parser, p_item->psz_type ) ) { ComboBox_AddString( combo, _FROMMB(module_GetLongName( p_parser ) )); ComboBox_SetItemData( combo, i_index, (void *) module_get_object( p_parser ) ); if( p_item->value.psz && !strcmp( p_item->value.psz, module_get_object( p_parser )) ) { ComboBox_SetCurSel( combo, i_index ); //ComboBox_SetText( combo, _FROMMB( module_GetLongName(p_parser)) ); } } } module_list_free( p_list ); }
void ModuleConfigControl::finish( ) { combo->setEditable( false ); /* build a list of available modules */ size_t count; module_t **p_list = module_list_get( &count ); combo->addItem( qtr("Default") ); for( size_t i = 0; i < count; i++ ) { module_t *p_parser = p_list[i]; if( !strcmp( module_get_object( p_parser ), "main" ) ) continue; unsigned confsize; module_config_t *p_config; p_config = module_config_get (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_get_object( p_parser ) ) ); if( p_item->value.psz && !strcmp( p_item->value.psz, module_get_object( p_parser ) ) ) combo->setCurrentIndex( combo->count() - 1 ); } module_config_free (p_config); } module_list_free( p_list ); if( p_item->psz_longtext ) { QString tipText = qtr(p_item->psz_longtext); combo->setToolTip( formatTooltip(tipText) ); if( label ) label->setToolTip( formatTooltip(tipText) ); } if( label ) label->setBuddy( combo ); }
AdvPrefsPanel::AdvPrefsPanel( intf_thread_t *_p_intf, QWidget *_parent, PrefsItemData * data ) : QWidget( _parent ), p_intf( _p_intf ) { /* Find our module */ module_t *p_module = NULL; if( data->i_type == TYPE_CATEGORY ) return; else if( data->i_type == TYPE_MODULE ) p_module = module_find( data->psz_name ); else { p_module = module_get_main(); assert( p_module ); } unsigned confsize; module_config_t *const p_config = module_config_get (p_module, &confsize), *p_item = p_config, *p_end = p_config + confsize; if( data->i_type == TYPE_SUBCATEGORY || data->i_type == TYPE_CATSUBCAT ) { while (p_item < p_end) { if( p_item->i_type == CONFIG_SUBCATEGORY && ( ( data->i_type == TYPE_SUBCATEGORY && p_item->value.i == data->i_object_id ) || ( data->i_type == TYPE_CATSUBCAT && p_item->value.i == data->i_subcat_id ) ) ) break; p_item++; } } /* Widgets now */ global_layout = new QVBoxLayout(); global_layout->setMargin( 2 ); QString head; QString help; help = QString( data->help ); if( data->i_type == TYPE_SUBCATEGORY || data->i_type == TYPE_CATSUBCAT ) { head = QString( data->name ); p_item++; // Why that ? } else { head = QString( qtr( module_GetLongName( p_module ) ) ); } QLabel *titleLabel = new QLabel( head ); QFont titleFont = QApplication::font(); titleFont.setPointSize( titleFont.pointSize() + 6 ); titleLabel->setFont( titleFont ); // Title <hr> QFrame *title_line = new QFrame; title_line->setFrameShape(QFrame::HLine); title_line->setFrameShadow(QFrame::Sunken); QLabel *helpLabel = new QLabel( help, this ); helpLabel->setWordWrap( true ); global_layout->addWidget( titleLabel ); global_layout->addWidget( title_line ); global_layout->addWidget( helpLabel ); QGroupBox *box = NULL; QGridLayout *boxlayout = NULL; QScrollArea *scroller= new QScrollArea; scroller->setFrameStyle( QFrame::NoFrame ); QWidget *scrolled_area = new QWidget; QGridLayout *layout = new QGridLayout(); int i_line = 0, i_boxline = 0; bool has_hotkey = false; if( p_item ) do { if( ( ( data->i_type == TYPE_SUBCATEGORY && p_item->value.i != data->i_object_id ) || ( data->i_type == TYPE_CATSUBCAT && p_item->value.i != data->i_subcat_id ) ) && ( p_item->i_type == CONFIG_CATEGORY || p_item->i_type == CONFIG_SUBCATEGORY ) ) break; if( p_item->b_internal ) continue; if( p_item->i_type == CONFIG_SECTION ) { if( box ) { box->setLayout( boxlayout ); box->show(); layout->addWidget( box, i_line, 0, 1, -1 ); i_line++; } box = new QGroupBox( qtr( p_item->psz_text ), this ); box->hide(); boxlayout = new QGridLayout(); } /* Only one hotkey control */ if( p_item->i_type == CONFIG_ITEM_KEY ) { if( has_hotkey ) continue; has_hotkey = true; } ConfigControl *control; if( ! box ) control = ConfigControl::createControl( VLC_OBJECT( p_intf ), p_item, this, layout, i_line ); else control = ConfigControl::createControl( VLC_OBJECT( p_intf ), p_item, this, boxlayout, i_boxline ); if( !control ) continue; if( box ) i_boxline++; else i_line++; controls.append( control ); } while( !( ( data->i_type == TYPE_SUBCATEGORY || data->i_type == TYPE_CATSUBCAT ) && ( p_item->i_type == CONFIG_CATEGORY || p_item->i_type == CONFIG_SUBCATEGORY ) ) && ( ++p_item < p_end ) ); if( box && i_boxline > 0 ) { box->setLayout( boxlayout ); box->show(); layout->addWidget( box, i_line, 0, 1, -1 ); } scrolled_area->setSizePolicy( QSizePolicy::Preferred,QSizePolicy::Fixed ); scrolled_area->setLayout( layout ); scroller->setWidget( scrolled_area ); scroller->setWidgetResizable( true ); global_layout->addWidget( scroller ); setLayout( global_layout ); }
/* go over the module config items and search text in psz_text * also search the module name and head */ bool PrefsItemData::contains( const QString &text, Qt::CaseSensitivity cs ) { /* Find our module */ module_t *p_module = NULL; if( this->i_type == TYPE_CATEGORY ) return false; else if( this->i_type == TYPE_MODULE ) p_module = module_find( this->psz_name ); else { p_module = module_get_main(); assert( p_module ); } unsigned confsize; module_config_t *const p_config = module_config_get (p_module, &confsize), *p_item = p_config, *p_end = p_config + confsize; if( this->i_type == TYPE_SUBCATEGORY || this->i_type == TYPE_CATSUBCAT ) { while ( p_item < p_end ) { if( p_item->i_type == CONFIG_SUBCATEGORY && ( ( this->i_type == TYPE_SUBCATEGORY && p_item->value.i == this->i_object_id ) || ( this->i_type == TYPE_CATSUBCAT && p_item->value.i == this->i_subcat_id ) ) ) break; p_item++; } } QString head; if( this->i_type == TYPE_SUBCATEGORY || this->i_type == TYPE_CATSUBCAT ) { head.clear(); p_item++; // Why that ? +1 } else { head = QString( qtr( module_GetLongName( p_module ) ) ); } if (name.contains( text, cs ) || head.contains( text, cs ) || help.contains( text, cs )) return true; if( p_item ) do { if ( ( ( this->i_type == TYPE_SUBCATEGORY && p_item->value.i != this->i_object_id ) || ( this->i_type == TYPE_CATSUBCAT && p_item->value.i != this->i_subcat_id ) ) && ( p_item->i_type == CONFIG_CATEGORY || p_item->i_type == CONFIG_SUBCATEGORY ) ) break; if( p_item->b_internal ) continue; if ( p_item->psz_text && qtr( p_item->psz_text ).contains( text, cs ) ) return true; } while ( !( ( this->i_type == TYPE_SUBCATEGORY || this->i_type == TYPE_CATSUBCAT ) && ( p_item->i_type == CONFIG_CATEGORY || p_item->i_type == CONFIG_SUBCATEGORY ) ) && ( ++p_item < p_end ) ); return false; }