diff --git a/modules/gui/qt4/dialogs/open.cpp b/modules/gui/qt4/dialogs/open.cpp index 8cc64a40daed01b2ad0065fd07bb2f74055cfee0..975e94bb49423bc22cff47639e2a6f5ba332509d 100644 --- a/modules/gui/qt4/dialogs/open.cpp +++ b/modules/gui/qt4/dialogs/open.cpp @@ -1,7 +1,7 @@ /***************************************************************************** * open.cpp : Advanced open dialog ***************************************************************************** - * Copyright (C) 2006-2007 the VideoLAN team + * Copyright ( C ) 2006-2007 the VideoLAN team * $Id$ * * Authors: Jean-Baptiste Kempf @@ -9,7 +9,7 @@ * 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 * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. + * ( at your option ) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -33,21 +33,46 @@ OpenDialog *OpenDialog::instance = NULL; -OpenDialog::OpenDialog( QWidget *parent, intf_thread_t *_p_intf, bool modal, +OpenDialog* OpenDialog::getInstance( QWidget *parent, intf_thread_t *p_intf, + int _action_flag, bool modal ) +{ + /* Creation */ + if( !instance ) + instance = new OpenDialog( parent, p_intf, modal, _action_flag ); + else + { + /* Request the instance but change small details: + - Button menu + - Modality on top of the parent dialog */ + instance->i_action_flag = _action_flag; + instance->setMenuAction(); + if( modal ) instance->setWindowModality( Qt::WindowModal ); + } + return instance; +} + +OpenDialog::OpenDialog( QWidget *parent, + intf_thread_t *_p_intf, + bool modal, int _action_flag ) : QVLCDialog( parent, _p_intf ) { - setModal( modal ); i_action_flag = _action_flag; + if( modal ) /* Select mode */ + { + setWindowModality( Qt::WindowModal ); + i_action_flag = SELECT; + } + /* Basic Creation of the Window */ ui.setupUi( this ); - setWindowTitle( qtr("Open" ) ); - resize( 410, 300); + setWindowTitle( qtr( "Open" ) ); + resize( 410, 300 ); /* Tab definition and creation */ - fileOpenPanel = new FileOpenPanel( ui.Tab, p_intf ); - discOpenPanel = new DiscOpenPanel( ui.Tab, p_intf ); - netOpenPanel = new NetOpenPanel( ui.Tab, p_intf ); + fileOpenPanel = new FileOpenPanel( ui.Tab, p_intf ); + discOpenPanel = new DiscOpenPanel( ui.Tab, p_intf ); + netOpenPanel = new NetOpenPanel( ui.Tab, p_intf ); captureOpenPanel = new CaptureOpenPanel( ui.Tab, p_intf ); /* Insert the tabs */ @@ -55,19 +80,13 @@ OpenDialog::OpenDialog( QWidget *parent, intf_thread_t *_p_intf, bool modal, ui.Tab->insertTab( OPEN_DISC_TAB, discOpenPanel, qtr( "&Disc" ) ); ui.Tab->insertTab( OPEN_NETWORK_TAB, netOpenPanel, qtr( "&Network" ) ); ui.Tab->insertTab( OPEN_CAPTURE_TAB, captureOpenPanel, - qtr( "Capture &Device" ) ); + qtr( "Capture &Device" ) ); /* Hide the Slave input widgets */ ui.slaveLabel->hide(); ui.slaveText->hide(); ui.slaveBrowseButton->hide(); - /* Hide the advancedPanel */ - if(! config_GetInt( p_intf, "qt-adv-options") ) - ui.advancedFrame->hide(); - else - ui.advancedCheckBox->setChecked( true ); - /* Buttons Creation */ QSizePolicy buttonSizePolicy( QSizePolicy::Expanding, QSizePolicy::Minimum ); buttonSizePolicy.setHorizontalStretch( 0 ); @@ -77,7 +96,7 @@ OpenDialog::OpenDialog( QWidget *parent, intf_thread_t *_p_intf, bool modal, playButton = new QToolButton( this ); playButton->setText( qtr( "&Play" ) ); playButton->setSizePolicy( buttonSizePolicy ); - playButton->setMinimumSize( QSize(90, 0) ); + playButton->setMinimumSize( QSize( 90, 0 ) ); playButton->setPopupMode( QToolButton::MenuButtonPopup ); playButton->setToolButtonStyle( Qt::ToolButtonTextOnly ); @@ -86,10 +105,15 @@ OpenDialog::OpenDialog( QWidget *parent, intf_thread_t *_p_intf, bool modal, cancelButton->setText( qtr( "&Cancel" ) ); cancelButton->setSizePolicy( buttonSizePolicy ); + /* Select Button */ + selectButton = new QPushButton; + selectButton->setText( qtr( "Select" ) ); + selectButton->setSizePolicy( buttonSizePolicy ); + /* Menu for the Play button */ QMenu * openButtonMenu = new QMenu( "Open" ); openButtonMenu->addAction( qtr( "&Enqueue" ), this, SLOT( enqueue() ), - QKeySequence( "Alt+E") ); + QKeySequence( "Alt+E" ) ); openButtonMenu->addAction( qtr( "&Play" ), this, SLOT( play() ), QKeySequence( "Alt+P" ) ); openButtonMenu->addAction( qtr( "&Stream" ), this, SLOT( stream() ) , @@ -99,103 +123,110 @@ OpenDialog::OpenDialog( QWidget *parent, intf_thread_t *_p_intf, bool modal, playButton->setMenu( openButtonMenu ); - ui.buttonsBox->addButton( playButton, QDialogButtonBox::AcceptRole ); + /* Add the three Buttons */ + ui.buttonsBox->addButton( playButton, QDialogButtonBox::ActionRole ); + 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() ); + CONNECT( ui.Tab, currentChanged( int ), this, signalCurrent() ); - CONNECT( fileOpenPanel, mrlUpdated( QString ), this, updateMRL(QString) ); - CONNECT( netOpenPanel, mrlUpdated( QString ), this, updateMRL(QString) ); - CONNECT( discOpenPanel, mrlUpdated( QString ), this, updateMRL(QString) ); - CONNECT( captureOpenPanel, mrlUpdated( QString ), this, updateMRL(QString) ); + CONNECT( fileOpenPanel, mrlUpdated( QString ), this, updateMRL( QString ) ); + CONNECT( netOpenPanel, mrlUpdated( QString ), this, updateMRL( QString ) ); + CONNECT( discOpenPanel, mrlUpdated( QString ), this, updateMRL( QString ) ); + CONNECT( captureOpenPanel, mrlUpdated( QString ), this, updateMRL( QString ) ); CONNECT( fileOpenPanel, methodChanged( QString ), - this, newCachingMethod(QString) ); + this, newCachingMethod( QString ) ); CONNECT( netOpenPanel, methodChanged( QString ), - this, newCachingMethod(QString) ); + this, newCachingMethod( QString ) ); CONNECT( discOpenPanel, methodChanged( QString ), - this, newCachingMethod(QString) ); + this, newCachingMethod( QString ) ); CONNECT( captureOpenPanel, methodChanged( QString ), - this, newCachingMethod(QString) ); + this, newCachingMethod( QString ) ); /* Advanced frame Connects */ - CONNECT( ui.slaveText, textChanged(QString), this, updateMRL() ); - CONNECT( ui.cacheSpinBox, valueChanged(int), this, updateMRL() ); - CONNECT( ui.startTimeSpinBox, valueChanged(int), this, updateMRL() ); + CONNECT( ui.slaveText, textChanged( QString ), this, updateMRL() ); + CONNECT( ui.cacheSpinBox, valueChanged( int ), this, updateMRL() ); + CONNECT( ui.startTimeSpinBox, valueChanged( int ), this, updateMRL() ); BUTTONACT( ui.advancedCheckBox , toggleAdvancedPanel() ); /* Buttons action */ BUTTONACT( playButton, selectSlots() ); + BUTTONACT( selectButton, close() ); BUTTONACT( cancelButton, cancel() ); - /* At creation time, modify the default buttons */ - if ( i_action_flag ) setMenuAction(); + /* Hide the advancedPanel */ + if( !config_GetInt( p_intf, "qt-adv-options" ) ) + ui.advancedFrame->hide(); + else + ui.advancedCheckBox->setChecked( true ); /* Initialize caching */ storedMethod = ""; newCachingMethod( "file-caching" ); - - mainHeight = advHeight = 0; } OpenDialog::~OpenDialog() -{ -} +{} /* Finish the dialog and decide if you open another one after */ void OpenDialog::setMenuAction() { - switch ( i_action_flag ) + if( i_action_flag == SELECT ) { - case OPEN_AND_STREAM: - playButton->setText( qtr( "&Stream" ) ); - break; - case OPEN_AND_SAVE: - playButton->setText( qtr( "&Convert / Save" ) ); - break; - case OPEN_AND_ENQUEUE: - playButton->setText( qtr( "&Enqueue" ) ); - break; - case OPEN_AND_PLAY: - default: - playButton->setText( qtr( "&Play" ) ); - } + playButton->hide(); + selectButton->show(); + } + else + { + switch ( i_action_flag ) + { + case OPEN_AND_STREAM: + playButton->setText( qtr( "&Stream" ) ); + break; + case OPEN_AND_SAVE: + playButton->setText( qtr( "&Convert / Save" ) ); + break; + case OPEN_AND_ENQUEUE: + playButton->setText( qtr( "&Enqueue" ) ); + break; + case OPEN_AND_PLAY: + default: + playButton->setText( qtr( "&Play" ) ); + } + playButton->show(); + selectButton->hide(); + } } void OpenDialog::showTab( int i_tab=0 ) { - this->show(); ui.Tab->setCurrentIndex( i_tab ); + show(); } -void OpenDialog::signalCurrent() { - if (ui.Tab->currentWidget() != NULL) - (dynamic_cast( ui.Tab->currentWidget() ))->updateMRL(); +/* Function called on signal currentChanged triggered */ +void OpenDialog::signalCurrent() +{ + if( ui.Tab->currentWidget() != NULL ) + ( dynamic_cast( ui.Tab->currentWidget() ) )->updateMRL(); } void OpenDialog::toggleAdvancedPanel() { - //FIXME does not work under Windows - if( ui.advancedFrame->isVisible() ) { + if( ui.advancedFrame->isVisible() ) + { ui.advancedFrame->hide(); -#ifndef WIN32 - setMinimumHeight( 1 ); - resize( width(), mainHeight ); -#endif - } else { -#ifndef WIN32 - if( mainHeight == 0 ) - mainHeight = height(); -#endif - + //FIXME: Clear Bug here. Qt ? + resize( size().width(), size().height() - ui.advancedFrame->height() ); + } + else + { ui.advancedFrame->show(); -#ifndef WIN32 - if( advHeight == 0 ) { - advHeight = height() - mainHeight; - } - resize( width(), mainHeight + advHeight ); -#endif } } @@ -205,16 +236,26 @@ void OpenDialog::toggleAdvancedPanel() /* If Cancel is pressed or escaped */ void OpenDialog::cancel() { + /* Clear the panels */ for( int i = 0; i < OPEN_TAB_MAX; i++ ) - dynamic_cast(ui.Tab->widget( i ))->clear(); - toggleVisible(); - if( isModal() ) reject(); + dynamic_cast( ui.Tab->widget( i ) )->clear(); + + /* Clear the variables */ + mrl.clear(); + mainMRL.clear(); + + /* If in Select Mode, reject instead of hiding */ + if( windowModality() != Qt::NonModal ) reject(); + else hide(); } /* If EnterKey is pressed */ void OpenDialog::close() { - selectSlots(); + if( windowModality() != Qt::NonModal ) + accept(); + else + selectSlots(); } /* Play button */ @@ -247,24 +288,13 @@ void OpenDialog::enqueue() finish( true ); } -void OpenDialog::transcode() -{ - stream( true ); -} - -void OpenDialog::stream( bool b_transcode_only ) -{ - /* not finished FIXME */ - /* Should go through the finish function */ - THEDP->streamingDialog( mrl, b_transcode_only ); -} void OpenDialog::finish( bool b_enqueue = false ) { toggleVisible(); mrl = ui.advancedLineInput->text(); - if( !isModal() ) + if( windowModality() == Qt::NonModal ) { QStringList tempMRL = SeparateEntries( mrl ); for( size_t i = 0; i < tempMRL.size(); i++ ) @@ -300,6 +330,17 @@ void OpenDialog::finish( bool b_enqueue = false ) accept(); } +void OpenDialog::transcode() +{ + stream( true ); +} + +void OpenDialog::stream( bool b_transcode_only ) +{ + mrl = ui.advancedLineInput->text(); + toggleVisible(); + THEDP->streamingDialog( mrl, b_transcode_only ); +} /* Update the MRL */ void OpenDialog::updateMRL( QString tempMRL ) diff --git a/modules/gui/qt4/dialogs/open.hpp b/modules/gui/qt4/dialogs/open.hpp index 8b90be4abeea35a20f1cae504ad866d4d8441f81..7bdf45ffac30dc93b6b10ecd8f329e09ff3a51dd 100644 --- a/modules/gui/qt4/dialogs/open.hpp +++ b/modules/gui/qt4/dialogs/open.hpp @@ -40,25 +40,12 @@ class OpenDialog : public QVLCDialog Q_OBJECT; public: static OpenDialog * getInstance( QWidget *parent, intf_thread_t *p_intf, - int _action_flag = 0 ) - { - if( !instance ) - instance = new OpenDialog( parent, p_intf, false, _action_flag ); - else - { - instance->i_action_flag = _action_flag; - instance->setMenuAction(); - } - return instance; - } - OpenDialog( QWidget *parent, intf_thread_t *, bool modal, - int _action_flag = 0 ); + int _action_flag = 0, bool modal = false ); + virtual ~OpenDialog(); void showTab( int ); - - QString mrl; - QString mainMRL; + QString getMRL(){ return mrl; } public slots: void selectSlots(); @@ -66,24 +53,30 @@ public slots: void stream( bool b_transode_only = false ); void enqueue(); void transcode(); + private: + OpenDialog( QWidget *parent, intf_thread_t *, bool modal, + int _action_flag = 0 ); + static OpenDialog *instance; input_thread_t *p_input; + QString mrl; + QString mainMRL; + QString storedMethod; + Ui::Open ui; FileOpenPanel *fileOpenPanel; NetOpenPanel *netOpenPanel; DiscOpenPanel *discOpenPanel; CaptureOpenPanel *captureOpenPanel; - QString storedMethod; - QString mrlSub; - int advHeight, mainHeight; int i_action_flag; QStringList SeparateEntries( QString ); - QPushButton *cancelButton; + QPushButton *cancelButton, *selectButton; QToolButton *playButton; + void finish( bool ); private slots: diff --git a/modules/gui/qt4/dialogs_provider.cpp b/modules/gui/qt4/dialogs_provider.cpp index dcebe338f8fce17a00aa646054a37aa69db5ac56..07e9cff34dc67f3c93cfbc9626def3900cadf36b 100644 --- a/modules/gui/qt4/dialogs_provider.cpp +++ b/modules/gui/qt4/dialogs_provider.cpp @@ -127,6 +127,7 @@ void DialogsProvider::customEvent( QEvent *event ) QVLCMenu::MiscPopupMenu( p_intf ); break; case INTF_DIALOG_WIZARD: case INTF_DIALOG_STREAMWIZARD: + openThenStreamingDialogs(); break; #ifdef UPDATE_CHECK case INTF_DIALOG_UPDATEVLC: updateDialog(); break; @@ -249,8 +250,7 @@ void DialogsProvider::PLAppendDialog() /* Unimplemmented yet - Usefull ? */ void DialogsProvider::MLAppendDialog() -{ -} +{} /** * Simple open @@ -414,14 +414,13 @@ void DialogsProvider::saveAPlaylist() * Sout emulation ****************************************************************************/ -//FIXME !! void DialogsProvider::streamingDialog( QString mrl, bool b_transcode_only ) { SoutDialog *s = new SoutDialog( p_intf->p_sys->p_mi, p_intf, b_transcode_only ); if( s->exec() == QDialog::Accepted ) { - msg_Err( p_intf, "mrl %s", qta( s->getMrl() ) ); + msg_Err( p_intf, "Sout mrl %s", qta( s->getMrl() ) ); /* Just do it */ int i_len = strlen( qtu( s->getMrl() ) ) + 10; char *psz_option = (char*)malloc( i_len ); diff --git a/modules/gui/qt4/dialogs_provider.hpp b/modules/gui/qt4/dialogs_provider.hpp index 2d3533bd14d53ad18257b9a08971867292a22a25..9b66638739a82cadc2322d75537c4d9de21f7004 100644 --- a/modules/gui/qt4/dialogs_provider.hpp +++ b/modules/gui/qt4/dialogs_provider.hpp @@ -84,7 +84,8 @@ enum { OPEN_AND_PLAY, OPEN_AND_STREAM, OPEN_AND_SAVE, - OPEN_AND_ENQUEUE + OPEN_AND_ENQUEUE, + SELECT }; class QEvent; diff --git a/modules/gui/qt4/ui/open.ui b/modules/gui/qt4/ui/open.ui index fa24a0e390215847d646f5bda9216d0fe589e58a..3a0101ea9099f0144d4f6f4b44ce2677d08355be 100644 --- a/modules/gui/qt4/ui/open.ui +++ b/modules/gui/qt4/ui/open.ui @@ -14,9 +14,7 @@ - - 5 - 1 + 0 0 @@ -25,18 +23,25 @@ Dialog - - 9 - 6 + + 9 + + + 9 + + + 9 + + + 9 + - - 5 - 0 + 0 0 @@ -59,9 +64,7 @@ - - 1 - 5 + 0 0 @@ -70,10 +73,22 @@ QFrame::StyledPanel - + + 9 + + + 9 + + 9 - + + 9 + + + 6 + + 6 @@ -86,9 +101,7 @@ - - 0 - 0 + 0 0 @@ -110,9 +123,7 @@ - - 0 - 5 + 0 0 @@ -180,9 +191,7 @@ - - 0 - 0 + 0 0 @@ -222,12 +231,21 @@ - - 0 - 6 + + 0 + + + 0 + + + 0 + + + 0 +