#include "dialogs/open.hpp"
#include "dialogs_provider.hpp" /* Open Subtitle file */
#include "util/qt_dirs.hpp"
+#include <vlc_intf_strings.h>
+#include <vlc_modules.h>
#include <QFileDialog>
#include <QDialogButtonBox>
#include <QScrollArea>
#include <QUrl>
#include <QStringListModel>
+#include <QDropEvent>
-#define I_DEVICE_TOOLTIP N_("Select the device or the VIDEO_TS directory")
+
+#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") )
static const char *psz_devModule[] = { "v4l", "v4l2", "pvr", "dvb", "bda",
"dshow", "screen", "jack" };
/* Classic UI Setup */
ui.setupUi( this );
+ setAcceptDrops( true );
+
/* Set Filters for file selection */
/* QString fileTypes = "";
ADD_FILTER_MEDIA( fileTypes );
QCompleter *fileCompleter = new QCompleter( fileCompleteList, this );
fileCompleter->setModel( new QDirModel( fileCompleter ) );
lineFileEdit->setCompleter( fileCompleter );*/
- if( config_GetInt( p_intf, "qt-embedded-open" ) )
+ if( var_InheritBool( p_intf, "qt-embedded-open" ) )
{
ui.tempWidget->hide();
BuildOldPanel();
getSettings()->setValue( "file-dialog-state", dialogBox->saveState() );
}
+void FileOpenPanel::dragEnterEvent( QDragEnterEvent *event )
+{
+ event->acceptProposedAction();
+}
+
+void FileOpenPanel::dragMoveEvent( QDragMoveEvent *event )
+{
+ event->acceptProposedAction();
+}
+
+void FileOpenPanel::dragLeaveEvent( QDragLeaveEvent *event )
+{
+ event->accept();
+}
+
+void FileOpenPanel::dropEvent( QDropEvent *event )
+{
+ if( event->possibleActions() & Qt::CopyAction )
+ event->setDropAction( Qt::CopyAction );
+ else
+ return;
+
+ const QMimeData *mimeData = event->mimeData();
+ foreach( const QUrl &url, mimeData->urls() )
+ {
+ if( url.isValid() )
+ {
+ QListWidgetItem *item = new QListWidgetItem(
+ toNativeSeparators( url.toLocalFile() ),
+ ui.fileListWidg );
+ item->setFlags( Qt::ItemIsEditable | Qt::ItemIsEnabled );
+ ui.fileListWidg->addItem( item );
+ }
+ }
+ updateMRL();
+ updateButtons();
+ event->accept();
+}
+
void FileOpenPanel::browseFile()
{
QStringList files = QFileDialog::getOpenFileNames( this, qtr( "Select one or multiple files" ), p_intf->p_sys->filepath) ;
fileList << ui.fileListWidg->item( i )->text();
}
else
+ {
fileList = dialogBox->selectedFiles();
+ for( int i = 0; i < fileList.count(); i++ )
+ fileList[i] = toNativeSeparators( fileList[i] );
+ }
/* Options */
if( ui.subCheckBox->isChecked() && !ui.subInput->text().isEmpty() ) {
ui.setupUi( this );
/* Get the default configuration path for the devices */
- psz_dvddiscpath = config_GetPsz( p_intf, "dvd" );
- psz_vcddiscpath = config_GetPsz( p_intf, "vcd" );
- psz_cddadiscpath = config_GetPsz( p_intf, "cd-audio" );
+ psz_dvddiscpath = var_InheritString( p_intf, "dvd" );
+ psz_vcddiscpath = var_InheritString( p_intf, "vcd" );
+ psz_cddadiscpath = var_InheritString( p_intf, "cd-audio" );
/* State to avoid overwritting the users changes with the configuration */
- b_firstdvd = true;
- b_firstvcd = true;
- b_firstcdda = true;
+ m_discType = None;
ui.browseDiscButton->setToolTip( qtr( I_DEVICE_TOOLTIP ));
ui.deviceCombo->setToolTip( qtr(I_DEVICE_TOOLTIP) );
ui.chapterSpin->setValue( 0 );
ui.subtitlesSpin->setValue( -1 );
ui.audioSpin->setValue( -1 );
- b_firstcdda = true;
- b_firstdvd = true;
- b_firstvcd = true;
+ m_discType = None;
}
#ifdef WIN32
{
if ( ui.dvdRadioButton->isChecked() )
{
- if( b_firstdvd )
+ if( m_discType != Dvd )
{
setDrive( psz_dvddiscpath );
- b_firstdvd = false;
+ m_discType = Dvd;
}
ui.titleLabel->setText( qtr("Title") );
ui.chapterLabel->show();
}
else if ( ui.vcdRadioButton->isChecked() )
{
- if( b_firstvcd )
+ if( m_discType != Vcd )
{
setDrive( psz_vcddiscpath );
- b_firstvcd = false;
+ m_discType = Vcd;
}
ui.titleLabel->setText( qtr("Entry") );
ui.chapterLabel->hide();
}
else /* CDDA */
{
- if( b_firstcdda )
+ if( m_discType != Cdda )
{
setDrive( psz_cddadiscpath );
- b_firstcdda = false;
+ m_discType = Cdda;
}
ui.titleLabel->setText( qtr("Track") );
ui.chapterLabel->hide();
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( config_GetInt( p_intf, "qt-recentplay" ) )
+ 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.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 */
const struct caching_map *r = (const struct caching_map *)
bsearch( qtu(proto), schemes, sizeof(schemes) / sizeof(schemes[0]),
sizeof(schemes[0]), strcmp_void );
- if( r != NULL && module_exists( r->caching ) )
+ if( r )
emit methodChanged( qfu( r->caching ) + qfu( "-caching" ) );
QStringList qsl;
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 );
}
+void UrlValidator::fixup( QString& str ) const
+{
+ str = str.trimmed();
+}
+
+QValidator::State UrlValidator::validate( QString& str, int& pos ) const
+{
+ if( str.contains( ' ' ) )
+ return QValidator::Invalid;
+ if( !str.contains( "://" ) )
+ return QValidator::Intermediate;
+ return QValidator::Acceptable;
+}
+
/**************************************************************************
* Open Capture device ( DVB, PVR, V4L, and similar ) *
**************************************************************************/
bdac = new QRadioButton( "DVB-C" );
bdat = new QRadioButton( "DVB-T" );
bdaa = new QRadioButton( "ATSC" );
+ bdaq = new QRadioButton( "Clear QAM" );
bdaDevLayout->addWidget( bdaTypeLabel, 0, 0 );
bdaDevLayout->addWidget( bdas, 0, 1 );
bdaDevLayout->addWidget( bdac, 0, 2 );
bdaDevLayout->addWidget( bdat, 0, 3 );
bdaDevLayout->addWidget( bdaa, 0, 4 );
+ bdaDevLayout->addWidget( bdaq, 0, 5 );
/* bda Props */
QLabel *bdaFreqLabel =
BUTTONACT( bdat, updateButtons() );
BUTTONACT( bdac, updateButtons() );
BUTTONACT( bdaa, updateButtons() );
+ BUTTONACT( bdaq, updateButtons() );
BUTTONACT( bdas, updateMRL() );
BUTTONACT( bdat, updateMRL() );
BUTTONACT( bdac, updateMRL() );
BUTTONACT( bdaa, updateMRL() );
+ BUTTONACT( bdaq, updateMRL() );
}
#else /* WIN32 */
jackPropLayout->addWidget( jackPace, 2, 1 );
/* Auto Connect */
- jackConnect = new QCheckBox( qtr( "Auto connnection" ));
+ jackConnect = new QCheckBox( qtr( "Auto connection" ));
jackPropLayout->addWidget( jackConnect, 2, 2 );
/* Jack CONNECTs */
qtr( "Desired frame rate for the capture." ) );
screenPropLayout->addWidget( screenFPSLabel, 0, 0 );
- screenFPS = new QSpinBox;
- screenFPS->setValue( 1 );
+ screenFPS = new QDoubleSpinBox;
+ screenFPS->setValue( 1. );
+ screenFPS->setRange( .01, 100. );
screenFPS->setAlignment( Qt::AlignRight );
+ /* xgettext: frames per second */
+ screenFPS->setSuffix( qtr( " f/s" ) );
screenPropLayout->addWidget( screenFPS, 0, 1 );
/* Screen connect */
- CuMRL( screenFPS, valueChanged( int ) );
+ CuMRL( screenFPS, valueChanged( double ) );
/* General connects */
CONNECT( ui.deviceCombo, activated( int ) ,
else if( bdat->isChecked() ) mrl = "dvb-t://";
else if( bdac->isChecked() ) mrl = "dvb-c://";
else if( bdaa->isChecked() ) mrl = "atsc://";
+ else if( bdaq->isChecked() ) mrl = "cqam://";
else return;
mrl += "frequency=" + QString::number( bdaFreq->value() );
if( bdac->isChecked() || bdat->isChecked() || bdaa->isChecked() )
mrl+= " :dshow-vdev=" +
colon_escape( QString("%1").arg( vdevDshowW->getValue() ) );
mrl+= " :dshow-adev=" +
- colon_escape( QString("%1").arg( adevDshowW->getValue() ) );
+ colon_escape( QString("%1").arg( adevDshowW->getValue() ) )+" ";
if( dshowVSizeLine->isModified() )
- mrl += " :dshow-size=" + dshowVSizeLine->text();
+ mrl += ":dshow-size=" + dshowVSizeLine->text();
emit methodChanged( "dshow-caching" );
break;
#else
#endif
case SCREEN_DEVICE:
fileList << "screen://";
- mrl = " :screen-fps=" + QString::number( screenFPS->value() );
+ mrl = " :screen-fps=" + QString::number( screenFPS->value(), 'f' );
emit methodChanged( "screen-caching" );
updateButtons();
break;
bdaBandBox->show();
bdaBandLabel->show();
}
+ else if( bdaq->isChecked() )
+ {
+ bdaSrate->hide();
+ bdaSrateLabel->hide();
+ bdaBandBox->hide();
+ bdaBandLabel->hide();
+ }
break;
#else
case DVB_DEVICE: