/************************************************************************** * Open Files and subtitles * **************************************************************************/ FileOpenPanel::FileOpenPanel( QWidget *_parent, intf_thread_t *_p_intf ) : OpenPanel( _parent, _p_intf ), dialogBox( NULL ) { /* Classic UI Setup */ ui.setupUi( this ); /* Set Filters for file selection */ /* QString fileTypes = ""; ADD_FILTER_MEDIA( fileTypes ); ADD_FILTER_VIDEO( fileTypes ); ADD_FILTER_AUDIO( fileTypes ); ADD_FILTER_PLAYLIST( fileTypes ); ADD_FILTER_ALL( fileTypes ); fileTypes.replace( QString(";*"), QString(" *")); */ /* lineFileEdit = ui.fileEdit; //TODO later: fill the fileCompleteList with previous items played. QCompleter *fileCompleter = new QCompleter( fileCompleteList, this ); fileCompleter->setModel( new QDirModel( fileCompleter ) ); lineFileEdit->setCompleter( fileCompleter );*/ if( config_GetInt( p_intf, "qt-embedded-open" ) ) { ui.tempWidget->hide(); BuildOldPanel(); } /* Subtitles */ /* Deactivate the subtitles control by default. */ ui.subFrame->setEnabled( false ); /* Build the subs size combo box */ setfillVLCConfigCombo( "freetype-rel-fontsize" , p_intf, ui.sizeSubComboBox ); /* Build the subs align combo box */ setfillVLCConfigCombo( "subsdec-align", p_intf, ui.alignSubComboBox ); /* Connects */ BUTTONACT( ui.fileBrowseButton, browseFile() ); BUTTONACT( ui.removeFileButton, removeFile() ); BUTTONACT( ui.subBrowseButton, browseFileSub() ); CONNECT( ui.subCheckBox, toggled( bool ), this, toggleSubtitleFrame( bool ) ); CONNECT( ui.fileListWidg, itemChanged( QListWidgetItem * ), this, updateMRL() ); CONNECT( ui.subInput, textChanged( const QString& ), this, updateMRL() ); CONNECT( ui.alignSubComboBox, currentIndexChanged( int ), this, updateMRL() ); CONNECT( ui.sizeSubComboBox, currentIndexChanged( int ), this, updateMRL() ); updateButtons(); }
void SoutDialog::addDest( ) { VirtualDestBox *db; QString caption; switch( ui.destBox->currentIndex() ) { case 0: db = new FileDestBox( this, p_intf ); caption = qtr( "File" ); break; case 1: db = new HTTPDestBox( this ); caption = qfu( "HTTP" ); break; case 2: db = new MMSHDestBox( this ); caption = qfu( "WMSP" ); break; case 3: db = new RTSPDestBox( this ); caption = qfu( "RTSP" ); break; case 4: db = new RTPDestBox( this, "ts" ); caption = "RTP/TS"; break; case 5: db = new RTPDestBox( this ); caption = "RTP/AVP"; break; case 6: db = new UDPDestBox( this ); caption = "UDP"; break; case 7: db = new ICEDestBox( this ); caption = "Icecast"; break; default: assert(0); } int index = ui.destTab->addTab( db, caption ); CONNECT( db, mrlUpdated(), this, updateMRL() ); ui.destTab->setCurrentIndex( index ); updateMRL(); }
SoutDialog::SoutDialog( QWidget *parent, intf_thread_t *_p_intf, const QString& inputMRL ) : QWizard( parent ) { p_intf = _p_intf; setWindowTitle( qtr( "Stream Output" ) ); setWindowRole( "vlc-stream-output" ); /* UI stuff */ ui.setupUi( this ); ui.inputBox->setMRL( inputMRL ); ui.helpEdit->setPlainText( qtr("This wizard will allow you to stream or " "convert your media for use locally, on your private network, " "or on the Internet.\n" "You should start by checking that source matches what you want " "your input to be and then press the \"Next\" " "button to continue.\n") ); ui.mrlEdit->setToolTip ( qtr( "Stream output string.\n" "This is automatically generated " "when you change the above settings,\n" "but you can change it manually." ) ) ; ui.destTab->setTabsClosable( true ); QTabBar* tb = ui.destTab->findChild<QTabBar*>(); if( tb != NULL ) tb->tabButton(0, QTabBar::RightSide)->hide(); CONNECT( ui.destTab, tabCloseRequested( int ), this, closeTab( int ) ); ui.destTab->setTabIcon( 0, QIcon( ":/buttons/playlist/playlist_add" ) ); ui.destBox->addItem( qtr( "File" ) ); ui.destBox->addItem( "HTTP" ); ui.destBox->addItem( "MS-WMSP (MMSH)" ); ui.destBox->addItem( "RTSP" ); ui.destBox->addItem( "RTP / MPEG Transport Stream" ); ui.destBox->addItem( "RTP Audio/Video Profile" ); ui.destBox->addItem( "UDP (legacy)" ); ui.destBox->addItem( "IceCast" ); BUTTONACT( ui.addButton, addDest() ); // /* Connect everything to the updateMRL function */ #define CB( x ) CONNECT( ui.x, toggled( bool ), this, updateMRL() ); #define CT( x ) CONNECT( ui.x, textChanged( const QString& ), this, updateMRL() ); #define CS( x ) CONNECT( ui.x, valueChanged( int ), this, updateMRL() ); #define CC( x ) CONNECT( ui.x, currentIndexChanged( int ), this, updateMRL() ); /* Misc */ CB( soutAll ); CB( localOutput ); CB( transcodeBox ); CONNECT( ui.profileSelect, optionsChanged(), this, updateMRL() ); setButtonText( QWizard::FinishButton, "Stream" ); #undef CC #undef CS #undef CT #undef CB }
void SoutDialog::closeTab( int i ) { if( i == 0 ) return; QWidget* temp = ui.destTab->widget( i ); ui.destTab->removeTab( i ); delete temp; updateMRL(); }
/************************************************************************** * Open Files and subtitles * **************************************************************************/ FileOpenPanel::FileOpenPanel( QWidget *_parent, intf_thread_t *_p_intf ) : OpenPanel( _parent, _p_intf ), dialogBox( NULL ) { /* Classic UI Setup */ ui.setupUi( this ); setAcceptDrops( true ); /* Set Filters for file selection */ /* QString fileTypes = ""; ADD_FILTER_MEDIA( fileTypes ); ADD_FILTER_VIDEO( fileTypes ); ADD_FILTER_AUDIO( fileTypes ); ADD_FILTER_PLAYLIST( fileTypes ); ADD_FILTER_ALL( fileTypes ); fileTypes.replace( QString(";*"), QString(" *")); */ /* lineFileEdit = ui.fileEdit; //TODO later: fill the fileCompleteList with previous items played. QCompleter *fileCompleter = new QCompleter( fileCompleteList, this ); fileCompleter->setModel( new QDirModel( fileCompleter ) ); lineFileEdit->setCompleter( fileCompleter );*/ if( var_InheritBool( p_intf, "qt-embedded-open" ) ) { ui.tempWidget->hide(); BuildOldPanel(); } /* Subtitles */ /* Deactivate the subtitles control by default. */ ui.subGroupBox->setEnabled( false ); /* Connects */ BUTTONACT( ui.fileBrowseButton, browseFile() ); BUTTONACT( ui.removeFileButton, removeFile() ); BUTTONACT( ui.subBrowseButton, browseFileSub() ); CONNECT( ui.subGroupBox, toggled( bool ), this, updateMRL() ); CONNECT( ui.fileListWidg, itemChanged( QListWidgetItem * ), this, updateMRL() ); CONNECT( ui.subInput, textChanged( const QString& ), this, updateMRL() ); updateButtons(); }
void SoutDialog::closeTab() { int i = ui.destTab->currentIndex(); if( i == 0 ) return; QWidget *temp = ui.destTab->currentWidget(); ui.destTab->removeTab( i ); delete temp; updateMRL(); }
inline void FileOpenPanel::BuildOldPanel() { /** BEGIN QFileDialog tweaking **/ /* Use a QFileDialog and customize it because we don't want to rewrite it all. Be careful to your eyes cause there are a few hacks. Be very careful and test correctly when you modify this. */ /* Make this QFileDialog a child of tempWidget from the ui. */ dialogBox = new FileOpenBox( ui.tempWidget, NULL, p_intf->p_sys->filepath, "" ); dialogBox->setFileMode( QFileDialog::ExistingFiles ); dialogBox->setAcceptMode( QFileDialog::AcceptOpen ); dialogBox->restoreState( getSettings()->value( "file-dialog-state" ).toByteArray() ); /* We don't want to see a grip in the middle of the window, do we? */ dialogBox->setSizeGripEnabled( false ); /* Add a tooltip */ dialogBox->setToolTip( qtr( "Select one or multiple files" ) ); dialogBox->setMinimumHeight( 250 ); // But hide the two OK/Cancel buttons. Enable them for debug. QDialogButtonBox *fileDialogAcceptBox = dialogBox->findChildren<QDialogButtonBox*>()[0]; fileDialogAcceptBox->hide(); /* Ugly hacks to get the good Widget */ //This lineEdit is the normal line in the fileDialog. QLineEdit *lineFileEdit = dialogBox->findChildren<QLineEdit*>()[0]; /* Make a list of QLabel inside the QFileDialog to access the good ones */ QList<QLabel *> listLabel = dialogBox->findChildren<QLabel*>(); /* Hide the FileNames one. Enable it for debug */ listLabel[1]->setText( qtr( "File names:" ) ); /* Change the text that was uncool in the usual box */ listLabel[2]->setText( qtr( "Filter:" ) ); dialogBox->layout()->setMargin( 0 ); dialogBox->layout()->setSizeConstraint( QLayout::SetNoConstraint ); /** END of QFileDialog tweaking **/ // Add the DialogBox to the layout ui.gridLayout->addWidget( dialogBox, 0, 0, 1, 3 ); CONNECT( lineFileEdit, textChanged( const QString& ), this, updateMRL() ); dialogBox->installEventFilter( this ); }
int NetOpenPanel::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = OpenPanel::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { switch (_id) { case 0: updateMRL(); break; case 1: updateCompleter(); break; default: ; } _id -= 2; } return _id; }
int OpenPanel::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QWidget::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { switch (_id) { case 0: mrlUpdated((*reinterpret_cast< const QStringList(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2]))); break; case 1: methodChanged((*reinterpret_cast< const QString(*)>(_a[1]))); break; case 2: updateMRL(); break; default: ; } _id -= 3; } return _id; }
int CaptureOpenPanel::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = OpenPanel::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { switch (_id) { case 0: updateMRL(); break; case 1: initialize(); break; case 2: updateButtons(); break; case 3: advancedDialog(); break; default: ; } _id -= 4; } return _id; }
int DiscOpenPanel::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = OpenPanel::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { switch (_id) { case 0: updateMRL(); break; case 1: browseDevice(); break; case 2: updateButtons(); break; case 3: eject(); break; default: ; } _id -= 4; } return _id; }
int FileOpenPanel::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = OpenPanel::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { switch (_id) { case 0: updateMRL(); break; case 1: browseFileSub(); break; case 2: browseFile(); break; case 3: removeFile(); break; case 4: updateButtons(); break; case 5: toggleSubtitleFrame((*reinterpret_cast< bool(*)>(_a[1]))); break; default: ; } _id -= 6; } return _id; }
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(); }
OpenDialog::OpenDialog( QWidget *parent, intf_thread_t *_p_intf, bool b_selectMode, int _action_flag, bool _b_pl) : QVLCDialog( parent, _p_intf ) { i_action_flag = _action_flag; b_pl =_b_pl; if( b_selectMode ) /* Select mode */ i_action_flag = SELECT; /* Basic Creation of the Window */ ui.setupUi( this ); setWindowTitle( qtr( "Open Media" ) ); setWindowRole( "vlc-open-media" ); setWindowModality( Qt::WindowModal ); /* Tab definition and creation */ fileOpenPanel = new FileOpenPanel( this, p_intf ); discOpenPanel = new DiscOpenPanel( this, p_intf ); netOpenPanel = new NetOpenPanel( this, p_intf ); captureOpenPanel = new CaptureOpenPanel( this, p_intf ); /* Insert the tabs */ ui.Tab->insertTab( OPEN_FILE_TAB, fileOpenPanel, QIcon( ":/type/file-asym" ), qtr( "&File" ) ); ui.Tab->insertTab( OPEN_DISC_TAB, discOpenPanel, QIcon( ":/type/disc" ), qtr( "&Disc" ) ); ui.Tab->insertTab( OPEN_NETWORK_TAB, netOpenPanel, QIcon( ":/type/network" ), qtr( "&Network" ) ); ui.Tab->insertTab( OPEN_CAPTURE_TAB, captureOpenPanel, QIcon( ":/type/capture-card" ), qtr( "Capture &Device" ) ); /* Hide the Slave input widgets */ ui.slaveLabel->hide(); ui.slaveText->hide(); ui.slaveBrowseButton->hide(); /* Buttons Creation */ /* Play Button */ playButton = ui.playButton; /* Cancel Button */ cancelButton = new QPushButton( qtr( "&Cancel" ) ); /* Select Button */ selectButton = new QPushButton( qtr( "&Select" ) ); /* Menu for the Play button */ QMenu * openButtonMenu = new QMenu( "Open" ); openButtonMenu->addAction( qtr( "&Enqueue" ), this, SLOT( enqueue() ), QKeySequence( "Alt+E" ) ); openButtonMenu->addAction( qtr( "&Play" ), this, SLOT( play() ), QKeySequence( "Alt+P" ) ); openButtonMenu->addAction( qtr( "&Stream" ), this, SLOT( stream() ) , QKeySequence( "Alt+S" ) ); openButtonMenu->addAction( qtr( "C&onvert" ), this, SLOT( transcode() ) , QKeySequence( "Alt+O" ) ); playButton->setMenu( openButtonMenu ); /* Add the three Buttons */ ui.buttonsBox->addButton( selectButton, QDialogButtonBox::AcceptRole ); ui.buttonsBox->addButton( cancelButton, QDialogButtonBox::RejectRole ); /* At creation time, modify the default buttons */ setMenuAction(); /* Force MRL update on tab change */ CONNECT( ui.Tab, currentChanged( int ), this, signalCurrent( int ) ); CONNECT( fileOpenPanel, mrlUpdated( const QStringList&, const QString& ), this, updateMRL( const QStringList&, const QString& ) ); CONNECT( netOpenPanel, mrlUpdated( const QStringList&, const QString& ), this, updateMRL( const QStringList&, const QString& ) ); CONNECT( discOpenPanel, mrlUpdated( const QStringList&, const QString& ), this, updateMRL( const QStringList&, const QString& ) ); CONNECT( captureOpenPanel, mrlUpdated( const QStringList&, const QString& ), this, updateMRL( const QStringList&, const QString& ) ); CONNECT( fileOpenPanel, methodChanged( const QString& ), this, newCachingMethod( const QString& ) ); CONNECT( netOpenPanel, methodChanged( const QString& ), this, newCachingMethod( const QString& ) ); CONNECT( discOpenPanel, methodChanged( const QString& ), this, newCachingMethod( const QString& ) ); CONNECT( captureOpenPanel, methodChanged( const QString& ), this, newCachingMethod( const QString& ) ); /* Advanced frame Connects */ CONNECT( ui.slaveCheckbox, toggled( bool ), this, updateMRL() ); CONNECT( ui.slaveText, textChanged( const QString& ), this, updateMRL() ); CONNECT( ui.cacheSpinBox, valueChanged( int ), this, updateMRL() ); CONNECT( ui.startTimeTimeEdit, timeChanged ( const QTime& ), this, updateMRL() ); BUTTONACT( ui.advancedCheckBox, toggleAdvancedPanel() ); BUTTONACT( ui.slaveBrowseButton, browseInputSlave() ); /* Buttons action */ BUTTONACT( playButton, selectSlots() ); BUTTONACT( selectButton, close() ); BUTTONACT( cancelButton, cancel() ); /* Hide the advancedPanel */ if( !getSettings()->value( "OpenDialog/advanced", false ).toBool()) { ui.advancedFrame->hide(); ui.advancedFrame->setEnabled( false ); } else ui.advancedCheckBox->setChecked( true ); /* Initialize caching */ storedMethod = ""; newCachingMethod( "file-caching" ); /* enforce section due to .ui bug */ ui.startTimeTimeEdit->setCurrentSection( QDateTimeEdit::SecondSection ); setMinimumSize( sizeHint() ); setMaximumWidth( 900 ); resize( getSettings()->value( "OpenDialog/size", QSize( 500, 400 ) ).toSize() ); }
/* Update the MRL items from the panels */ void OpenDialog::updateMRL( const QStringList& item, const QString& tempMRL ) { optionsMRL = tempMRL; itemsMRL = item; updateMRL(); }
SoutDialog::SoutDialog( QWidget *parent, intf_thread_t *_p_intf, const QString& inputMRL ) : QVLCDialog( parent, _p_intf ) { setWindowTitle( qtr( "Stream Output" ) ); setWindowRole( "vlc-stream-output" ); /* UI stuff */ ui.setupUi( this ); ui.inputBox->setMRL( inputMRL ); ui.helpEdit->setPlainText( qtr("This dialog will allow you to stream or " "convert your media for use locally, on your private network, " "or on the Internet.\n" "You should start by checking that source matches what you want " "your input to be and then press the \"Next\" " "button to continue.\n") ); ui.mrlEdit->setToolTip ( qtr( "Stream output string.\n" "This is automatically generated " "when you change the above settings,\n" "but you can change it manually." ) ) ; #if 0 /* This needs Qt4.5 to be cool */ ui.destTab->setTabsClosable( true ); #else closeTabButton = new QToolButton( this ); ui.destTab->setCornerWidget( closeTabButton ); closeTabButton->hide(); closeTabButton->setAutoRaise( true ); closeTabButton->setIcon( QIcon( ":/toolbar/clear" ) ); closeTabButton->setToolTip( qtr("Clear") ); BUTTONACT( closeTabButton, closeTab() ); #endif CONNECT( ui.destTab, currentChanged( int ), this, tabChanged( int ) ); ui.destTab->setTabIcon( 0, QIcon( ":/buttons/playlist/playlist_add" ) ); ui.destBox->addItem( qtr( "File" ) ); ui.destBox->addItem( "HTTP" ); ui.destBox->addItem( "MS-WMSP (MMSH)" ); ui.destBox->addItem( "RTSP" ); ui.destBox->addItem( "RTP / MPEG Transport Stream" ); ui.destBox->addItem( "RTP Audio/Video Profile" ); ui.destBox->addItem( "UDP (legacy)" ); ui.destBox->addItem( "IceCast" ); BUTTONACT( ui.addButton, addDest() ); // /* Connect everything to the updateMRL function */ #define CB( x ) CONNECT( ui.x, toggled( bool ), this, updateMRL() ); #define CT( x ) CONNECT( ui.x, textChanged( const QString& ), this, updateMRL() ); #define CS( x ) CONNECT( ui.x, valueChanged( int ), this, updateMRL() ); #define CC( x ) CONNECT( ui.x, currentIndexChanged( int ), this, updateMRL() ); /* Misc */ CB( soutAll ); CS( ttl ); CT( sapName ); CT( sapGroup ); CB( localOutput ); CB( transcodeBox ); CONNECT( ui.profileSelect, optionsChanged(), this, updateMRL() ); okButton = new QPushButton( qtr( "&Stream" ) ); QPushButton *cancelButton = new QPushButton( qtr( "&Cancel" ) ); okButton->setDefault( true ); ui.acceptButtonBox->addButton( okButton, QDialogButtonBox::AcceptRole ); ui.acceptButtonBox->addButton( cancelButton, QDialogButtonBox::RejectRole ); BUTTONACT( okButton, ok() ); BUTTONACT( cancelButton, cancel() ); BUTTONACT( ui.nextButton, next() ); BUTTONACT( ui.nextButton2, next() ); BUTTONACT( ui.prevButton, prev() ); BUTTONACT( ui.prevButton2, prev() ); #undef CC #undef CS #undef CT #undef CB }