X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fgui%2Fqt4%2Fdialogs%2Finteraction.cpp;h=45e33516fff9020c2605fca84e4af9d101ee9381;hb=223419069363b3eab712cff2d0ac671a94d8fc65;hp=e9fe3d41034b0d69d17ffbb25c6305b96389f765;hpb=14e11ab1c8a1579bfd177dd3813e7c77b30eba51;p=vlc diff --git a/modules/gui/qt4/dialogs/interaction.cpp b/modules/gui/qt4/dialogs/interaction.cpp index e9fe3d4103..45e33516ff 100644 --- a/modules/gui/qt4/dialogs/interaction.cpp +++ b/modules/gui/qt4/dialogs/interaction.cpp @@ -18,77 +18,186 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif +#include "dialogs/errors.hpp" #include "dialogs/interaction.hpp" -#include "util/qvlcframe.hpp" -#include -#include "qt4.hpp" +#include "main_interface.hpp" + +#include +#include +#include +#include +#include +#include + +#include InteractionDialog::InteractionDialog( intf_thread_t *_p_intf, - interaction_dialog_t *_p_dialog ) : QWidget( 0 ), + interaction_dialog_t *_p_dialog ) : QObject( 0 ), p_intf( _p_intf), p_dialog( _p_dialog ) { - QVBoxLayout *layout = new QVBoxLayout; - uiLogin = NULL; - uiProgress = NULL; - uiInput = NULL; - + QVBoxLayout *layout = NULL; + int i_ret = -1; + panel = NULL; + dialog = NULL; if( p_dialog->i_flags & DIALOG_BLOCKING_ERROR ) { - + i_ret = QMessageBox::critical( NULL, qfu( p_dialog->psz_title ), + qfu( p_dialog->psz_description ), + QMessageBox::Ok, 0, 0 ); } else if( p_dialog->i_flags & DIALOG_NONBLOCKING_ERROR ) { - // Create instance of the errors dialog + if( config_GetInt( p_intf, "qt-error-dialogs" ) != 0 ) + ErrorsDialog::getInstance( p_intf )->addError( + qfu( p_dialog->psz_title ), qfu( p_dialog->psz_description ) ); + i_ret = 0; + // QApplication::style()->standardPixmap(QStyle::SP_MessageBoxCritical) + } + else if( p_dialog->i_flags & DIALOG_WARNING ) + { + if( config_GetInt( p_intf, "qt-error-dialogs" ) != 0 ) + ErrorsDialog::getInstance( p_intf )->addWarning( + qfu( p_dialog->psz_title ),qfu( p_dialog->psz_description ) ); + i_ret = 0; } else if( p_dialog->i_flags & DIALOG_YES_NO_CANCEL ) { - description = new QLabel( 0 ); - description->setText( qfu(p_dialog->psz_description) ); - layout->addWidget(description); + p_dialog->i_status = SENT_DIALOG; + i_ret = QMessageBox::question( NULL, + qfu( p_dialog->psz_title), qfu( p_dialog->psz_description ), + p_dialog->psz_default_button ? + qfu( p_dialog->psz_default_button ) : QString::null, + p_dialog->psz_alternate_button ? + qfu( p_dialog->psz_alternate_button ) : QString::null, + p_dialog->psz_other_button ? + qfu( p_dialog->psz_other_button ) : QString::null, 0, + p_dialog->psz_other_button ? 2 : -1 ); } else if( p_dialog->i_flags & DIALOG_LOGIN_PW_OK_CANCEL ) { - uiLogin = new Ui::LoginDialog; - uiLogin->setupUi( this ); - uiLogin->description->setText( qfu(p_dialog->psz_description) ); + dialog = new QWidget( 0 ); layout = new QVBoxLayout( dialog ); + layout->setMargin( 2 ); + panel = new QWidget( 0 ); + QGridLayout *grid = new QGridLayout; + + description = new QLabel( qfu( p_dialog->psz_description ) ); + grid->addWidget( description, 0, 0, 1, 2 ); + + grid->addWidget( new QLabel( qtr( "Login") ), 1, 0 ); + loginEdit = new QLineEdit; + grid->addWidget( loginEdit, 1, 1 ); + + grid->addWidget( new QLabel( qtr("Password") ), 2, 0); + passwordEdit = new QLineEdit; + passwordEdit->setEchoMode( QLineEdit::Password ); + grid->addWidget( passwordEdit, 2, 1 ); + + panel->setLayout( grid ); + layout->addWidget( panel ); } else if( p_dialog->i_flags & DIALOG_USER_PROGRESS ) { + dialog = new QWidget( 0 );layout = new QVBoxLayout( dialog ); + layout->setMargin( 2 ); + description = new QLabel( qfu( p_dialog->psz_description ) ); + layout->addWidget( description ); + progressBar = new QProgressBar; + progressBar->setMaximum( 1000 ); + progressBar->setTextVisible( true ); + progressBar->setOrientation( Qt::Horizontal ); + layout->addWidget( progressBar ); + } + else if( p_dialog->i_flags & DIALOG_INTF_PROGRESS ) + { + progressBar = p_intf->p_sys->p_mi->pgBar; + progressBar->show(); } else if( p_dialog->i_flags & DIALOG_PSZ_INPUT_OK_CANCEL ) { + dialog = new QWidget( 0 );layout = new QVBoxLayout( dialog ); + layout->setMargin( 2 ); + description = new QLabel( qfu( p_dialog->psz_description ) ); + layout->addWidget( description ); + + inputEdit = new QLineEdit; + layout->addWidget( inputEdit ); + } + else + msg_Err( p_intf, "unknown dialog type %i", p_dialog->i_flags ); + + /* We used a message box */ + if( i_ret != -1 ) + { + if( i_ret == 0 ) Finish( DIALOG_OK_YES ); + else if ( i_ret == 1 ) Finish( DIALOG_NO ); + else Finish( DIALOG_CANCELLED ); } else - msg_Err( p_intf, "unknown dialog type" ); - - QVLCFrame::doButtons( this, layout, - defaultButton, p_dialog->psz_default_button, - altButton, p_dialog->psz_alternate_button, - otherButton, p_dialog->psz_other_button ); - if( p_dialog->psz_default_button ) - connect( defaultButton, SIGNAL( clicked() ), this, SLOT( defaultB() ) ); - if( p_dialog->psz_alternate_button ) - connect( altButton, SIGNAL( clicked() ), this, SLOT( altB() ) ); - if( p_dialog->psz_other_button ) - connect( otherButton, SIGNAL( clicked() ), this, SLOT( otherB() ) ); - - setLayout( layout ); - setWindowTitle( qfu( p_dialog->psz_title ) ); + /* Custom box, finish it */ + { + QDialogButtonBox *buttonBox = new QDialogButtonBox; + + if( p_dialog->psz_default_button ) + { + defaultButton = new QPushButton; + defaultButton->setFocus(); + defaultButton->setText( qfu( p_dialog->psz_default_button ) ); + buttonBox->addButton( defaultButton, QDialogButtonBox::AcceptRole ); + } + if( p_dialog->psz_alternate_button ) + { + altButton = new QPushButton; + altButton->setText( qfu( p_dialog->psz_alternate_button ) ); + buttonBox->addButton( altButton, QDialogButtonBox::RejectRole ); + } + if( p_dialog->psz_other_button ) + { + otherButton = new QPushButton; + otherButton->setText( qfu( p_dialog->psz_other_button ) ); + buttonBox->addButton( otherButton, QDialogButtonBox::ActionRole ); + } + layout->addWidget( buttonBox ); + if( p_dialog->psz_default_button ) + BUTTONACT( defaultButton, defaultB() ); + if( p_dialog->psz_alternate_button ) + BUTTONACT( altButton, altB() ); + if( p_dialog->psz_other_button ) + BUTTONACT( otherButton, otherB() ); + dialog->setLayout( layout ); + dialog->setWindowTitle( qfu( p_dialog->psz_title ) ); + } } -void InteractionDialog::Update() +void InteractionDialog::update() { + if( p_dialog->i_flags & DIALOG_USER_PROGRESS || + p_dialog->i_flags & DIALOG_INTF_PROGRESS ) + { + assert( progressBar ); + progressBar->setValue( (int)( p_dialog->val.f_float * 10 ) ); + description->setText( qfu( p_dialog->psz_description ) ); + } + + if( ( p_dialog->i_flags & DIALOG_INTF_PROGRESS ) && + ( p_dialog->val.f_float >= 100.0 ) ) + progressBar->hide(); + if( ( p_dialog->i_flags & DIALOG_USER_PROGRESS ) && + ( p_dialog->val.f_float >= 100.0 ) ) + altButton->setText( qtr( "&Close" ) ); } InteractionDialog::~InteractionDialog() { - if( uiInput ) delete uiInput; - if( uiProgress) delete uiProgress; - if( uiLogin ) delete uiLogin; +// delete panel; + delete dialog; } void InteractionDialog::defaultB() @@ -106,22 +215,27 @@ void InteractionDialog::otherB() void InteractionDialog::Finish( int i_ret ) { - vlc_mutex_lock( &p_dialog->p_interaction->object_lock ); + vlc_object_lock( p_dialog->p_interaction ); if( p_dialog->i_flags & DIALOG_LOGIN_PW_OK_CANCEL ) { - p_dialog->psz_returned[0] = strdup( - uiLogin->loginEdit->text().toUtf8().data() ); - p_dialog->psz_returned[1] = strdup( - uiLogin->passwordEdit->text().toUtf8().data() ); + p_dialog->psz_returned[0] = strdup( qtu( loginEdit->text() ) ); + p_dialog->psz_returned[1] = strdup( qtu( passwordEdit->text() ) ); } else if( p_dialog->i_flags & DIALOG_PSZ_INPUT_OK_CANCEL ) { - p_dialog->psz_returned[0] = strdup( - uiInput->inputEdit->text().toUtf8().data() ); + p_dialog->psz_returned[0] = strdup( qtu( inputEdit->text() ) ); } p_dialog->i_status = ANSWERED_DIALOG; p_dialog->i_return = i_ret; + + /* Alert the Dialog_*_Progress that the user had clicked on "cancel" */ + if( p_dialog->i_flags & DIALOG_USER_PROGRESS || + p_dialog->i_flags & DIALOG_INTF_PROGRESS ) + p_dialog->b_cancelled = true; + hide(); - vlc_mutex_unlock( &p_dialog->p_interaction->object_lock ); + vlc_object_unlock( p_dialog->p_interaction ); + playlist_Signal( THEPL ); } +