#include <QStringListModel>
#include <QDropEvent>
-
#define I_DEVICE_TOOLTIP \
I_DIR_OR_FOLDER( N_("Select a device or a VIDEO_TS directory"), \
N_("Select a device or a VIDEO_TS folder") )
ui.setupUi( this );
/* CONNECTs */
- CONNECT( ui.urlText, textChanged( const QString& ), this, updateMRL());
+ CONNECT( ui.urlComboBox->lineEdit(), textChanged( const QString& ), this, updateMRL());
+ CONNECT( ui.urlComboBox, currentIndexChanged( const QString& ), this, updateMRL());
if( var_InheritBool( p_intf, "qt-recentplay" ) )
{
mrlList = new QStringListModel(
getSettings()->value( "Open/netMRL" ).toStringList() );
- QCompleter *completer = new QCompleter( mrlList, this );
- ui.urlText->setCompleter( completer );
-
- CONNECT( ui.urlText, editingFinished(), this, updateCompleter() );
+ ui.urlComboBox->setModel( mrlList );
+ ui.urlComboBox->clearEditText();
+ CONNECT( ui.urlComboBox->lineEdit(), editingFinished(), this, updateModel() );
}
else
mrlList = NULL;
- ui.urlText->setValidator( new UrlValidator( this ) );
+ ui.urlComboBox->setValidator( new UrlValidator( this ) );
+ ui.urlComboBox->setFocus();
}
NetOpenPanel::~NetOpenPanel()
{ "udp", "udp" },
};
- QString url = ui.urlText->text();
+ QString url = ui.urlComboBox->lineEdit()->text();
if( !url.contains( "://") )
return; /* nothing to do this far */
emit mrlUpdated( qsl, "" );
}
-void NetOpenPanel::updateCompleter()
+void NetOpenPanel::updateModel()
{
assert( mrlList );
QStringList tempL = mrlList->stringList();
- if( !tempL.contains( ui.urlText->text() ) )
- tempL.append( ui.urlText->text() );
+ if( !tempL.contains( ui.urlComboBox->lineEdit()->text() ) )
+ tempL.append( ui.urlComboBox->lineEdit()->text() );
mrlList->setStringList( tempL );
}
if( module_exists( "v4l2" ) ){
addModuleAndLayouts( V4L2_DEVICE, v4l2, "Video for Linux 2", QGridLayout );
+ char const * const ppsz_v4lvdevices[] = {
+ "video*"
+ };
+
+ char const * const ppsz_v4ladevices[] = {
+ "dsp*",
+ "radio*"
+ };
+
+ #define POPULATE_WITH_DEVS(ppsz_devlist, targetCombo) \
+ QStringList targetCombo ## StringList = QStringList(); \
+ for ( int i = 0; i< sizeof(ppsz_devlist) / sizeof(*ppsz_devlist); i++ ) \
+ targetCombo ## StringList << QString( ppsz_devlist[ i ] ); \
+ QDir targetCombo ## Dir = QDir( "/dev/" ); \
+ targetCombo->addItems( \
+ targetCombo ## Dir\
+ .entryList( targetCombo ## StringList, QDir::System )\
+ .replaceInStrings( QRegExp("^"), "/dev/" ) \
+ );
+
/* V4l Main panel */
QLabel *v4l2VideoDeviceLabel = new QLabel( qtr( "Video device name" ) );
v4l2DevLayout->addWidget( v4l2VideoDeviceLabel, 0, 0 );
- v4l2VideoDevice = new QLineEdit;
+ v4l2VideoDevice = new QComboBox( this );
+ v4l2VideoDevice->setEditable( true );
+ POPULATE_WITH_DEVS( ppsz_v4lvdevices, v4l2VideoDevice );
+ v4l2VideoDevice->clearEditText();
v4l2DevLayout->addWidget( v4l2VideoDevice, 0, 1 );
QLabel *v4l2AudioDeviceLabel = new QLabel( qtr( "Audio device name" ) );
v4l2DevLayout->addWidget( v4l2AudioDeviceLabel, 1, 0 );
- v4l2AudioDevice = new QLineEdit;
+ v4l2AudioDevice = new QComboBox( this );
+ v4l2AudioDevice->setEditable( true );
+ POPULATE_WITH_DEVS( ppsz_v4ladevices, v4l2AudioDevice );
+ v4l2AudioDevice->clearEditText();
v4l2DevLayout->addWidget( v4l2AudioDevice, 1, 1 );
/* v4l2 Props panel */
- QLabel *v4l2StdLabel = new QLabel( qtr( "Standard" ) );
+ QLabel *v4l2StdLabel = new QLabel( qtr( "Video standard" ) );
v4l2PropLayout->addWidget( v4l2StdLabel, 0 , 0 );
v4l2StdBox = new QComboBox;
setfillVLCConfigCombo( "v4l2-standard", p_intf, v4l2StdBox );
v4l2PropLayout->addWidget( v4l2StdBox, 0 , 1 );
v4l2PropLayout->addItem( new QSpacerItem( 20, 20, QSizePolicy::Expanding ),
- 1, 0, 3, 1 );
+ 1, 0, 3, 2 );
/* v4l2 CONNECTs */
- CuMRL( v4l2VideoDevice, textChanged( const QString& ) );
- CuMRL( v4l2AudioDevice, textChanged( const QString& ) );
+ CuMRL( v4l2VideoDevice->lineEdit(), textChanged( const QString& ) );
+ CuMRL( v4l2VideoDevice, currentIndexChanged ( int ) );
+ CuMRL( v4l2AudioDevice->lineEdit(), textChanged( const QString& ) );
+ CuMRL( v4l2AudioDevice, currentIndexChanged ( int ) );
CuMRL( v4l2StdBox, currentIndexChanged ( int ) );
+ #undef POPULATE_WITH_DEVS
}
/*******
mrl += " :v4l-frequency=" + QString::number( v4lFreq->value() );
break;
case V4L2_DEVICE:
- fileList << "v4l2://" + v4l2VideoDevice->text();
- mrl += " :input-slave=alsa://" + v4l2AudioDevice->text();
+ fileList << "v4l2://" + v4l2VideoDevice->currentText();
+ mrl += " :input-slave=alsa://" + v4l2AudioDevice->currentText();
mrl += " :v4l2-standard=" + QString::number( v4l2StdBox->currentIndex() );
break;
case JACK_DEVICE:
<property name="text">
<string>Please enter a network URL:</string>
</property>
- <property name="buddy">
- <cstring>urlText</cstring>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QLineEdit" name="urlText">
- <property name="toolTip">
- <string>Enter the URL of the network stream here.</string>
- </property>
</widget>
</item>
<item row="2" column="0">
p, li { white-space: pre-wrap; }
p { margin: 0; -qt-block-indent: 0; text-indent: 0;}
body { font-family: 'sans'; font-size: 8pt; font-weight: 400; }
-p > span { color: #838383; }
+p > span { color: #838383; }
</style></head><body>
<p><span>http://www.example.com/stream.avi</span></p>
<p><span>rtp://@:1234</span></p>
</property>
</widget>
</item>
+ <item row="1" column="0">
+ <widget class="QComboBox" name="urlComboBox">
+ <property name="editable">
+ <bool>true</bool>
+ </property>
+ <property name="insertPolicy">
+ <enum>QComboBox::NoInsert</enum>
+ </property>
+ </widget>
+ </item>
</layout>
</widget>
</item>
</layout>
</widget>
<tabstops>
- <tabstop>urlText</tabstop>
+ <tabstop>urlComboBox</tabstop>
</tabstops>
<resources/>
<connections/>
/* Get author */
lua_getfield( L, -1, "author" );
- if( lua_isstring( L, -1 ) )
- p_ext->psz_author = strdup( luaL_optstring( L, -1, NULL ) );
+ p_ext->psz_author = luaL_strdupornull( L, -1 );
lua_pop( L, 1 );
/* Get description */
lua_getfield( L, -1, "description" );
- if( lua_isstring( L, -1 ) )
- p_ext->psz_description = strdup( luaL_optstring( L, -1, NULL ) );
+ p_ext->psz_description = luaL_strdupornull( L, -1 );
lua_pop( L, 1 );
/* Get short description */
lua_getfield( L, -1, "shortdesc" );
- if( lua_isstring( L, -1 ) )
- p_ext->psz_shortdescription = strdup( luaL_optstring( L, -1, NULL ) );
+ p_ext->psz_shortdescription = luaL_strdupornull( L, -1 );
lua_pop( L, 1 );
/* Get URL */
lua_getfield( L, -1, "url" );
- if( lua_isstring( L, -1 ) )
- p_ext->psz_url = strdup( luaL_optstring( L, -1, NULL ) );
+ p_ext->psz_url = luaL_strdupornull( L, -1 );
lua_pop( L, 1 );
/* Get version */
lua_getfield( L, -1, "version" );
- if( lua_isstring( L, -1 ) )
- p_ext->psz_version = strdup( luaL_optstring( L, -1, NULL ) );
+ p_ext->psz_version = luaL_strdupornull( L, -1 );
lua_pop( L, 1 );
}
else