⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 interaction.cpp

📁 VLC Player Source Code
💻 CPP
字号:
/***************************************************************************** * interaction.cpp : Interaction stuff **************************************************************************** * Copyright (C) 2006 the VideoLAN team * $Id$ * * Authors: Clément Stenac <zorglub@videolan.org> * * 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. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * 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. *****************************************************************************/#ifdef HAVE_CONFIG_H# include "config.h"#endif#include "dialogs/errors.hpp"#include "dialogs/interaction.hpp"#include "main_interface.hpp"#include <QLabel>#include <QLineEdit>#include <QPushButton>#include <QProgressBar>#include <QMessageBox>#include <QDialogButtonBox>#include <assert.h>InteractionDialog::InteractionDialog( intf_thread_t *_p_intf,                         interaction_dialog_t *_p_dialog ) : QObject( 0 ),                          p_intf( _p_intf), p_dialog( _p_dialog ){    QVBoxLayout *layout = NULL;    description = NULL;    int i_ret = -1;    panel = NULL;    dialog = NULL;    altButton = 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 )    {        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;    }    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 )    {        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 )    {        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_INTF_PROGRESS ) ||             ( 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_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 );        return;    }    /* 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 if ( i_ret == 2 ) return ;        else Finish( DIALOG_CANCELLED );    }    else    /* Custom box, finish it */    {        assert( dialog );        /* Start the DialogButtonBox config */        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 );        /* End the DialogButtonBox */        /* CONNECTs */        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() );        /* set the layouts and thte title */        dialog->setLayout( layout );        dialog->setWindowTitle( qfu( p_dialog->psz_title ) );    }}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 ) );        if( description )            description->setText( qfu( p_dialog->psz_description ) );    }    else return;    if( ( p_dialog->i_flags & DIALOG_INTF_PROGRESS ) &&        ( p_dialog->val.f_float >= 100.0 ) )    {        progressBar->hide();        msg_Dbg( p_intf, "Progress Done" );    }    if( ( p_dialog->i_flags & DIALOG_USER_PROGRESS ) &&        ( p_dialog->val.f_float >= 100.0 ) )    {        assert( altButton );        altButton->setText( qtr( "&Close" ) );    }}InteractionDialog::~InteractionDialog(){//    delete panel;    delete dialog;}void InteractionDialog::defaultB(){    Finish( DIALOG_OK_YES );}void InteractionDialog::altB(){    Finish( DIALOG_NO );}void InteractionDialog::otherB(){    Finish( DIALOG_CANCELLED );}void InteractionDialog::Finish( int i_ret ){    vlc_object_lock( p_dialog->p_interaction );    if( p_dialog->i_flags & DIALOG_LOGIN_PW_OK_CANCEL )    {        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( 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_object_unlock( p_dialog->p_interaction );    playlist_Signal( THEPL );}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -