* open.cpp : Panels for the open dialogs
****************************************************************************
* Copyright (C) 2006-2007 the VideoLAN team
+ * Copyright (C) 2007 Société des arts technologiques
+ * Copyright (C) 2007 Savoir-faire Linux
* $Id$
*
* Authors: Clément Stenac <zorglub@videolan.org>
* Jean-Baptiste Kempf <jb@videolan.org>
+ * Pierre-Luc Beaudoin <pierre-luc.beaudoin@savoirfairelinux.com>
*
* 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
#include <QStackedLayout>
#include <QListView>
-#ifdef HAVE_LIMITS_H
-# include <limits.h>
-#endif
-
/**************************************************************************
* Open Files and subtitles *
**************************************************************************/
// Make this QFileDialog a child of tempWidget from the ui.
dialogBox = new FileOpenBox( ui.tempWidget, NULL,
qfu( p_intf->p_libvlc->psz_homedir ), fileTypes );
-/* dialogBox->setFileMode( QFileDialog::ExistingFiles );*/
+
+ dialogBox->setFileMode( QFileDialog::ExistingFiles );
dialogBox->setAcceptMode( QFileDialog::AcceptOpen );
/* retrieve last known path used in file browsing */
char *psz_filepath = config_GetPsz( p_intf, "qt-filedialog-path" );
if( psz_filepath )
{
- dialogBox->setDirectory( QString::fromUtf8( psz_filepath ) );
+ dialogBox->setDirectory( qfu( psz_filepath ) );
delete psz_filepath;
}
dialogBox->setSizeGripEnabled( false );
/* Add a tooltip */
-// dialogBox->setToolTip( qtr( "Select one or multiple files, or a folder" ) );
+ dialogBox->setToolTip( qtr( "Select one or multiple files, or a folder" ) );
// Add it to the layout
ui.gridLayout->addWidget( dialogBox, 0, 0, 1, 3 );
/* Ugly hacks to get the good Widget */
//This lineEdit is the normal line in the fileDialog.
+#if QT43
+ lineFileEdit = findChildren<QLineEdit*>()[2];
+#else
lineFileEdit = findChildren<QLineEdit*>()[3];
- lineFileEdit->hide();
+#endif
+// lineFileEdit->hide();
/* Make a list of QLabel inside the QFileDialog to access the good ones */
QList<QLabel *> listLabel = findChildren<QLabel*>();
/* Change the text that was uncool in the usual box */
listLabel[5]->setText( qtr( "Filter:" ) );
+
+ QListView *fileListView = findChildren<QListView*>().first();
#if WIN32
- /* QFileDialog is quite buggy make it brerable on win32 by tweaking
+ /* QFileDialog is quite buggy make it brerable on win32 by tweaking
the followin */
- QListView *fileListView = findChildren<QListView*>().first();
fileListView->setLayoutMode(QListView::Batched);
fileListView->setViewMode(QListView::ListMode);
fileListView->setResizeMode(QListView::Adjust);
BUTTONACT( ui.subBrowseButton, browseFileSub() );
BUTTONACT( ui.subCheckBox, toggleSubtitleFrame());
+#if QT43
+ CONNECT( fileListView, clicked( QModelIndex ), this, updateMRL() );
+#else
CONNECT( ui.fileInput, editTextChanged( QString ), this, updateMRL() );
+#endif
CONNECT( ui.subInput, editTextChanged( QString ), this, updateMRL() );
CONNECT( ui.alignSubComboBox, currentIndexChanged( int ), this,
updateMRL() );
void FileOpenPanel::updateMRL()
{
+ msg_Dbg( p_intf, "I was here" );
QString mrl = ui.fileInput->currentText();
if( ui.subCheckBox->isChecked() ) {
}
-
/**************************************************************************
* Open Network streams and URL pages *
**************************************************************************/
QString addr = ui.addressText->text();
QString proto = ui.protocolCombo->itemData( idx ).toString();
- ui.timeShift->setEnabled( idx >= 4 );
- ui.ipv6->setEnabled( idx == 4 );
- ui.addressText->setEnabled( idx != 4 );
- ui.portSpin->setEnabled( idx >= 4 );
+ ui.timeShift->setEnabled( idx >= 5 );
+ ui.ipv6->setEnabled( idx == 5 );
+ ui.addressText->setEnabled( idx != 5 );
+ ui.portSpin->setEnabled( idx >= 5 );
/* If we already have a protocol in the address, replace it */
if( addr.contains( "://")) {
QString addr = ui.addressText->text();
int proto = ui.protocolCombo->currentIndex();
- if( addr.contains( "://") && proto != 4 ) {
+ if( addr.contains( "://") && proto != 5 ) {
mrl = addr;
} else {
switch( proto ) {
case 0:
- case 1:
mrl = "http://" + addr;
+ case 1:
+ mrl = "https://" + addr;
emit methodChanged("http-caching");
break;
case 3:
#define CuMRL( widget, slot ) CONNECT( widget , slot , this, updateMRL() );
-#define setMaxBound( spinbox ) spinbox->setRange ( 0, INT_MAX );
-
/*******
* V4L *
*******/
v4lFreq = new QSpinBox;
v4lFreq->setAlignment( Qt::AlignRight );
v4lFreq->setSuffix(" kHz");
+ setSpinBoxFreq( v4lFreq );
v4lPropLayout->addWidget( v4lFreq, 1 , 1 );
/* v4l CONNECTs */
CuMRL( v4lFreq, valueChanged ( int ) );
CuMRL( v4lNormBox, currentIndexChanged ( int ) );
+ /*******
+ * JACK *
+ *******/
+ addModuleAndLayouts( JACK_DEVICE, jack, "JACK Audio Connection Kit" );
+
+ /* Jack Main panel */
+ /* Channels */
+ QLabel *jackChannelsLabel = new QLabel( qtr( "Channels :" ) );
+ jackDevLayout->addWidget( jackChannelsLabel, 1, 0 );
+
+ jackChannels = new QSpinBox;
+ setSpinBoxFreq( jackChannels );
+ jackChannels->setMaximum(255);
+ jackChannels->setValue(2);
+ jackChannels->setAlignment( Qt::AlignRight );
+ jackDevLayout->addWidget( jackChannels, 1, 1 );
+
+ /* Jack Props panel */
+
+ /* Selected ports */
+ QLabel *jackPortsLabel = new QLabel( qtr( "Selected ports :" ) );
+ jackPropLayout->addWidget( jackPortsLabel, 0 , 0 );
+
+ jackPortsSelected = new QLineEdit( qtr( ".*") );
+ jackPortsSelected->setAlignment( Qt::AlignRight );
+ jackPropLayout->addWidget( jackPortsSelected, 0, 1 );
+
+ /* Caching */
+ QLabel *jackCachingLabel = new QLabel( qtr( "Input caching :" ) );
+ jackPropLayout->addWidget( jackCachingLabel, 1 , 0 );
+ jackCaching = new QSpinBox;
+ setSpinBoxFreq( jackCaching );
+ jackCaching->setSuffix( " ms" );
+ jackCaching->setValue(1000);
+ jackCaching->setAlignment( Qt::AlignRight );
+ jackPropLayout->addWidget( jackCaching, 1 , 1 );
+
+ /* Pace */
+ jackPace = new QCheckBox(qtr( "Use VLC pace" ));
+ jackPropLayout->addWidget( jackPace, 2, 1 );
+
+ /* Auto Connect */
+ jackConnect = new QCheckBox( qtr( "Auto connnection" ));
+ jackPropLayout->addWidget( jackConnect, 3, 1 );
+
+ /* Jack CONNECTs */
+ CuMRL( jackChannels, valueChanged( int ) );
+ CuMRL( jackCaching, valueChanged( int ) );
+ CuMRL( jackPace, stateChanged( int ) );
+ CuMRL( jackConnect, stateChanged( int ) );
+ CuMRL( jackPortsSelected, textChanged( QString ) );
+
/************
* PVR *
************/
pvrFreq = new QSpinBox;
pvrFreq->setAlignment( Qt::AlignRight );
pvrFreq->setSuffix(" kHz");
- setMaxBound( pvrFreq );
+ setSpinBoxFreq( pvrFreq );
pvrPropLayout->addWidget( pvrFreq, 1, 1 );
QLabel *pvrBitrLabel = new QLabel( qtr( "Bitrate" ) );
pvrBitr = new QSpinBox;
pvrBitr->setAlignment( Qt::AlignRight );
pvrBitr->setSuffix(" kHz");
- setMaxBound( pvrBitr );
+ setSpinBoxFreq( pvrBitr );
pvrPropLayout->addWidget( pvrBitr, 2, 1 );
/* PVR CONNECTs */
bdaFreq->setAlignment( Qt::AlignRight );
bdaFreq->setSuffix(" kHz");
bdaFreq->setSingleStep( 1000 );
- setMaxBound( bdaFreq )
+ setSpinBoxFreq( bdaFreq )
bdaPropLayout->addWidget( bdaFreq, 0, 1 );
bdaSrateLabel = new QLabel( qtr( "Transponder symbol rate" ) );
bdaSrate = new QSpinBox;
bdaSrate->setAlignment( Qt::AlignRight );
bdaSrate->setSuffix(" kHz");
- setMaxBound( bdaSrate );
+ setSpinBoxFreq( bdaSrate );
bdaPropLayout->addWidget( bdaSrate, 1, 1 );
bdaBandLabel = new QLabel( qtr( "Bandwidth" ) );
dvbFreq = new QSpinBox;
dvbFreq->setAlignment( Qt::AlignRight );
dvbFreq->setSuffix(" kHz");
- setMaxBound( dvbFreq );
+ setSpinBoxFreq( dvbFreq );
dvbPropLayout->addWidget( dvbFreq, 0, 1 );
QLabel *dvbSrateLabel = new QLabel( qtr( "Transponder symbol rate" ) );
dvbSrate = new QSpinBox;
dvbSrate->setAlignment( Qt::AlignRight );
dvbSrate->setSuffix(" kHz");
- setMaxBound( dvbSrate );
+ setSpinBoxFreq( dvbSrate );
dvbPropLayout->addWidget( dvbSrate, 1, 1 );
/* DVB CONNECTs */
BUTTONACT( dvbt, updateButtons() );
BUTTONACT( dvbc, updateButtons() );
+ /**********
+ * Screen *
+ **********/
+ addModuleAndLayouts( SCREEN_DEVICE, screen, "Desktop" );
+ QLabel *screenLabel = new QLabel( "This option will open your own "
+ "desktop in order to save or stream it.");
+ screenLabel->setWordWrap( true );
+ screenDevLayout->addWidget( screenLabel, 0, 0 );
+
/* General connects */
connect( ui.deviceCombo, SIGNAL( activated( int ) ),
stackedDevLayout, SLOT( setCurrentIndex( int ) ) );
connect( ui.deviceCombo, SIGNAL( activated( int ) ),
stackedPropLayout, SLOT( setCurrentIndex( int ) ) );
CONNECT( ui.deviceCombo, activated( int ), this, updateMRL() );
+ CONNECT( ui.deviceCombo, activated( int ), this, updateButtons() );
#undef addModule
}
QString mrl = "";
int i_devicetype = ui.deviceCombo->itemData(
ui.deviceCombo->currentIndex() ).toInt();
- msg_Dbg( p_intf, "Capture Type: %i", i_devicetype );
switch( i_devicetype )
{
case V4L_DEVICE:
mrl += " :v4l-norm=" + QString("%1").arg( v4lNormBox->currentIndex() );
mrl += " :v4l-frequency=" + QString("%1").arg( v4lFreq->value() );
break;
+ case JACK_DEVICE:
+ mrl = "jack://";
+ mrl += "channels=" + QString("%1").arg( jackChannels->value() );
+ mrl += ":ports=" + jackPortsSelected->text();
+ mrl += " --jack-input-caching=" + QString("%1").arg( jackCaching->value() );
+ if ( jackPace->isChecked() )
+ {
+ mrl += " --jack-input-use-vlc-pace";
+ }
+ if ( jackConnect->isChecked() )
+ {
+ mrl += " --jack-input-auto-connect";
+ }
+ break;
case PVR_DEVICE:
mrl = "pvr://";
mrl += " :pvr-device=" + pvrDevice->text();
QString("%1").arg( bdaBandBox->itemData(
bdaBandBox->currentIndex() ).toInt() );
break;
- case DSHOW_DEVICE:
+ case DSHOW_DEVICE:
+ break;
+ case SCREEN_DEVICE:
+ mrl = "screen://";
+ updateButtons();
break;
}
emit mrlUpdated( mrl );
}
+/**
+ * Update the Buttons (show/hide) for the GUI as all device type don't
+ * use the same ui. elements.
+ **/
void CaptureOpenPanel::updateButtons()
{
+ /* Be sure to display the ui Elements in case they were hidden by
+ * some Device Type (like Screen://) */
+ ui.optionsBox->show();
+ ui.advancedButton->show();
+ /* Get the current Device Number */
int i_devicetype = ui.deviceCombo->itemData(
- ui.deviceCombo->currentIndex() ).toInt();
+ ui.deviceCombo->currentIndex() ).toInt();
msg_Dbg( p_intf, "Capture Type: %i", i_devicetype );
switch( i_devicetype )
{
bdaBandLabel->show();
}
break;
+ case SCREEN_DEVICE:
+ ui.optionsBox->hide();
+ ui.advancedButton->hide();
+ break;
}
}