📄 dialogs_provider.cpp
字号:
/***************************************************************************** * dialogs_provider.cpp : Dialog Provider ***************************************************************************** * Copyright (C) 2006-2008 the VideoLAN team * $Id$ * * Authors: Clément Stenac <zorglub@videolan.org> * Jean-Baptiste Kempf <jb@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 <QEvent>#include <QApplication>#include <QSignalMapper>#include <QFileDialog>#include <vlc_common.h>#include "qt4.hpp"#include "dialogs_provider.hpp"#include "main_interface.hpp"#include "menus.hpp"#include <vlc_intf_strings.h>#include "input_manager.hpp"/* The dialogs */#include "dialogs/playlist.hpp"#include "dialogs/bookmarks.hpp"#include "dialogs/preferences.hpp"#include "dialogs/mediainfo.hpp"#include "dialogs/messages.hpp"#include "dialogs/extended.hpp"#include "dialogs/vlm.hpp"#include "dialogs/sout.hpp"#include "dialogs/open.hpp"#include "dialogs/help.hpp"#include "dialogs/gototime.hpp"#include "dialogs/podcast_configuration.hpp"DialogsProvider* DialogsProvider::instance = NULL;DialogsProvider::DialogsProvider( intf_thread_t *_p_intf ) : QObject( NULL ), p_intf( _p_intf ){ b_isDying = false; fixed_timer = new QTimer( this ); fixed_timer->start( 150 /* milliseconds */ ); menusMapper = new QSignalMapper(); CONNECT( menusMapper, mapped(QObject *), this, menuAction( QObject *) ); menusUpdateMapper = new QSignalMapper(); CONNECT( menusUpdateMapper, mapped(QObject *), this, menuUpdateAction( QObject *) ); SDMapper = new QSignalMapper(); CONNECT( SDMapper, mapped (QString), this, SDMenuAction( QString ) );}DialogsProvider::~DialogsProvider(){ msg_Dbg( p_intf, "Destroying the Dialog Provider" ); PlaylistDialog::killInstance(); MediaInfoDialog::killInstance(); MessagesDialog::killInstance(); ExtendedDialog::killInstance(); BookmarksDialog::killInstance(); HelpDialog::killInstance();#ifdef UPDATE_CHECK UpdateDialog::killInstance();#endif fixed_timer->stop(); delete menusMapper; delete menusUpdateMapper; delete SDMapper;}void DialogsProvider::quit(){ /* Stop the playlist */ playlist_Stop( THEPL ); b_isDying = true; vlc_object_kill( p_intf->p_libvlc ); QApplication::closeAllWindows(); QApplication::quit();}void DialogsProvider::customEvent( QEvent *event ){ if( event->type() == DialogEvent_Type ) { DialogEvent *de = static_cast<DialogEvent*>(event); switch( de->i_dialog ) { case INTF_DIALOG_FILE_SIMPLE: case INTF_DIALOG_FILE: openDialog(); break; case INTF_DIALOG_FILE_GENERIC: openFileGenericDialog( de->p_arg ); break; case INTF_DIALOG_DISC: openDiscDialog(); break; case INTF_DIALOG_NET: openNetDialog(); break; case INTF_DIALOG_SAT: case INTF_DIALOG_CAPTURE: openCaptureDialog(); break; case INTF_DIALOG_DIRECTORY: PLAppendDir(); break; case INTF_DIALOG_PLAYLIST: playlistDialog(); break; case INTF_DIALOG_MESSAGES: messagesDialog(); break; case INTF_DIALOG_FILEINFO: mediaInfoDialog(); break; case INTF_DIALOG_PREFS: prefsDialog(); break; case INTF_DIALOG_BOOKMARKS: bookmarksDialog(); break; case INTF_DIALOG_EXTENDED: extendedDialog(); break;#ifdef ENABLE_VLM case INTF_DIALOG_VLM: vlmDialog(); break;#endif case INTF_DIALOG_INTERACTION: doInteraction( de->p_arg ); break; case INTF_DIALOG_POPUPMENU: QVLCMenu::PopupMenu( p_intf, (de->i_arg != 0) ); break; case INTF_DIALOG_AUDIOPOPUPMENU: QVLCMenu::AudioPopupMenu( p_intf ); break; case INTF_DIALOG_VIDEOPOPUPMENU: QVLCMenu::VideoPopupMenu( p_intf ); break; case INTF_DIALOG_MISCPOPUPMENU: QVLCMenu::MiscPopupMenu( p_intf ); break; case INTF_DIALOG_WIZARD: case INTF_DIALOG_STREAMWIZARD: openThenStreamingDialogs(); break;#ifdef UPDATE_CHECK case INTF_DIALOG_UPDATEVLC: updateDialog(); break;#endif case INTF_DIALOG_EXIT: quit(); break; default: msg_Warn( p_intf, "unimplemented dialog" ); } }}/**************************************************************************** * Individual simple dialogs ****************************************************************************/void DialogsProvider::playlistDialog(){ PlaylistDialog::getInstance( p_intf )->toggleVisible();}void DialogsProvider::prefsDialog(){ PrefsDialog::getInstance( p_intf )->toggleVisible();}void DialogsProvider::extendedDialog(){ ExtendedDialog::getInstance( p_intf )->toggleVisible();}void DialogsProvider::messagesDialog(){ MessagesDialog::getInstance( p_intf )->toggleVisible();}void DialogsProvider::gotoTimeDialog(){ GotoTimeDialog::getInstance( p_intf )->toggleVisible();}#ifdef ENABLE_VLMvoid DialogsProvider::vlmDialog(){ VLMDialog::getInstance( p_intf )->toggleVisible();}#endifvoid DialogsProvider::helpDialog(){ HelpDialog::getInstance( p_intf )->toggleVisible();}#ifdef UPDATE_CHECKvoid DialogsProvider::updateDialog(){ UpdateDialog::getInstance( p_intf )->toggleVisible();}#endifvoid DialogsProvider::aboutDialog(){ AboutDialog::getInstance( p_intf )->toggleVisible();}void DialogsProvider::mediaInfoDialog(){ MediaInfoDialog::getInstance( p_intf )->toggleVisible();}void DialogsProvider::mediaCodecDialog(){ MediaInfoDialog::getInstance( p_intf )->showTab( 2 );}void DialogsProvider::bookmarksDialog(){ BookmarksDialog::getInstance( p_intf )->toggleVisible();}void DialogsProvider::podcastConfigureDialog(){ PodcastConfigDialog::getInstance( p_intf )->toggleVisible();}/**************************************************************************** * All the open/add stuff * Open Dialog first - Simple Open then ****************************************************************************/void DialogsProvider::openDialog( int i_tab ){ OpenDialog::getInstance( p_intf->p_sys->p_mi , p_intf )->showTab( i_tab );}void DialogsProvider::openDialog(){ openDialog( OPEN_FILE_TAB );}void DialogsProvider::openFileGenericDialog( intf_dialog_args_t *p_arg ){ if( p_arg == NULL ) { msg_Warn( p_intf, "openFileGenericDialog() called with NULL arg" ); return; } /* Replace the extensions to a Qt format */ int i = 0; QString extensions = qfu( p_arg->psz_extensions ); while ( ( i = extensions.indexOf( "|", i ) ) != -1 ) { if( ( extensions.count( "|" ) % 2 ) == 0 ) extensions.replace( i, 1, ");;" ); else extensions.replace( i, 1, "(" ); } extensions.replace(QString(";*"), QString(" *")); extensions.append( ")" ); /* Save */ if( p_arg->b_save ) { QString file = QFileDialog::getSaveFileName( NULL, p_arg->psz_title, qfu( p_intf->p_sys->psz_filepath ), extensions ); if( !file.isEmpty() ) { p_arg->i_results = 1; p_arg->psz_results = (char **)malloc( p_arg->i_results * sizeof( char * ) ); p_arg->psz_results[0] = strdup( qtu( file ) ); } else p_arg->i_results = 0; } else /* non-save mode */ { QStringList files = QFileDialog::getOpenFileNames( NULL, p_arg->psz_title, qfu( p_intf->p_sys->psz_filepath ), extensions ); p_arg->i_results = files.count(); p_arg->psz_results = (char **)malloc( p_arg->i_results * sizeof( char * ) ); i = 0; foreach( QString file, files ) p_arg->psz_results[i++] = strdup( qtu( file ) ); } /* Callback */ if( p_arg->pf_callback ) p_arg->pf_callback( p_arg ); /* Clean afterwards */ if( p_arg->psz_results ) { for( i = 0; i < p_arg->i_results; i++ ) free( p_arg->psz_results[i] ); free( p_arg->psz_results ); } free( p_arg->psz_title ); free( p_arg->psz_extensions ); free( p_arg );}void DialogsProvider::openFileDialog(){ openDialog( OPEN_FILE_TAB );}void DialogsProvider::openDiscDialog(){ openDialog( OPEN_DISC_TAB );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -