1 /***************************************************************************** 2 * dialogs_provider.hpp : Dialogs provider 3 **************************************************************************** 4 * Copyright (C) 2006-2008 the VideoLAN team 5 * $Id: 6476dbe124ff690b0d6e72d76be963ec85136452 $ 6 * 7 * Authors: Clément Stenac <zorglub@videolan.org> 8 * Jean-Baptiste Kempf <jb@videolan.org> 9 * 10 * This program is free software; you can redistribute it and/or modify 11 * it under the terms of the GNU General Public License as published by 12 * the Free Software Foundation; either version 2 of the License, or 13 * (at your option) any later version. 14 * 15 * This program is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU General Public License for more details. 19 * 20 * You should have received a copy of the GNU General Public License 21 * along with this program; if not, write to the Free Software 22 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. 23 *****************************************************************************/ 24 25 #ifndef QVLC_DIALOGS_PROVIDER_H_ 26 #define QVLC_DIALOGS_PROVIDER_H_ 27 28 #ifdef HAVE_CONFIG_H 29 # include "config.h" 30 #endif 31 32 #include <assert.h> 33 34 #include "qt.hpp" 35 36 #include "dialogs/open.hpp" 37 #include <QObject> 38 #include <QStringList> 39 40 #define TITLE_EXTENSIONS_MEDIA qtr( "Media Files" ) 41 #define TITLE_EXTENSIONS_VIDEO qtr( "Video Files" ) 42 #define TITLE_EXTENSIONS_AUDIO qtr( "Audio Files" ) 43 #define TITLE_EXTENSIONS_PLAYLIST qtr( "Playlist Files" ) 44 #define TITLE_EXTENSIONS_SUBTITLE qtr( "Subtitle Files" ) 45 #define TITLE_EXTENSIONS_ALL qtr( "All Files" ) 46 #define EXTENSIONS_ALL "*" 47 #define ADD_EXT_FILTER( string, type ) \ 48 string = string + QString("%1 ( %2 );;") \ 49 .arg( TITLE_##type ) \ 50 .arg( QString( type ) ); 51 52 enum { 53 EXT_FILTER_MEDIA = 0x01, 54 EXT_FILTER_VIDEO = 0x02, 55 EXT_FILTER_AUDIO = 0x04, 56 EXT_FILTER_PLAYLIST = 0x08, 57 EXT_FILTER_SUBTITLE = 0x10, 58 }; 59 60 class QEvent; 61 class QSignalMapper; 62 class VLCMenuBar; 63 64 class DialogsProvider : public QObject 65 { 66 Q_OBJECT 67 friend class VLCMenuBar; 68 69 public: getInstance()70 static DialogsProvider *getInstance() 71 { 72 assert( instance ); 73 return instance; 74 } getInstance(intf_thread_t * p_intf)75 static DialogsProvider *getInstance( intf_thread_t *p_intf ) 76 { 77 if( !instance ) 78 instance = new DialogsProvider( p_intf ); 79 return instance; 80 } killInstance()81 static void killInstance() 82 { 83 delete instance; 84 instance = NULL; 85 } 86 87 QStringList showSimpleOpen( const QString& help = QString(), 88 int filters = EXT_FILTER_MEDIA | 89 EXT_FILTER_VIDEO | EXT_FILTER_AUDIO | 90 EXT_FILTER_PLAYLIST, 91 const QUrl& path = QUrl() ); isDying()92 bool isDying() { return b_isDying; } 93 static QString getDirectoryDialog( intf_thread_t *p_intf); 94 static QStringList getOpenURL(QWidget *parent = NULL, 95 const QString &caption = QString(), 96 const QUrl &dir = QUrl(), 97 const QString &filter = QString(), 98 QString *selectedFilter = NULL ); 99 static QString getSaveFileName(QWidget *parent = NULL, 100 const QString &caption = QString(), 101 const QUrl &dir = QUrl(), 102 const QString &filter = QString(), 103 QString *selectedFilter = NULL ); 104 105 protected: 106 QSignalMapper *menusMapper; 107 QSignalMapper *menusUpdateMapper; 108 void customEvent( QEvent *); 109 110 private: 111 DialogsProvider( intf_thread_t *); 112 virtual ~DialogsProvider(); 113 static DialogsProvider *instance; 114 115 intf_thread_t *p_intf; 116 117 QMenu* popupMenu; 118 QMenu* videoPopupMenu; 119 QMenu* audioPopupMenu; 120 QMenu* miscPopupMenu; 121 122 QWidget* root; 123 bool b_isDying; 124 125 void openDialog( int ); 126 void addFromSimple( bool, bool ); 127 128 public slots: 129 void playlistDialog(); 130 void bookmarksDialog(); 131 void mediaInfoDialog(); 132 void mediaCodecDialog(); 133 void prefsDialog(); 134 void extendedDialog(); 135 void synchroDialog(); 136 void messagesDialog(); 137 void sendKey( int key ); 138 #ifdef ENABLE_VLM 139 void vlmDialog(); 140 #endif 141 void helpDialog(); 142 #ifdef UPDATE_CHECK 143 void updateDialog(); 144 #endif 145 void aboutDialog(); 146 void gotoTimeDialog(); 147 void podcastConfigureDialog(); 148 void toolbarDialog(); 149 void pluginDialog(); 150 void epgDialog(); 151 void setPopupMenu(); 152 void destroyPopupMenu(); 153 154 void openFileGenericDialog( intf_dialog_args_t * ); 155 156 void simpleOpenDialog(); 157 158 void openDialog(); 159 void openDiscDialog(); 160 void openFileDialog(); 161 void openUrlDialog(); 162 void openNetDialog(); 163 void openCaptureDialog(); 164 165 void PLAppendDialog( int tab = OPEN_FILE_TAB ); 166 void MLAppendDialog( int tab = OPEN_FILE_TAB ); 167 168 void PLOpenDir(); 169 void PLAppendDir(); 170 171 void streamingDialog( QWidget *parent, const QStringList& mrls, bool b_stream = true, 172 QStringList options = QStringList("") ); 173 void openAndStreamingDialogs(); 174 void openAndTranscodingDialogs(); 175 176 void openAPlaylist(); 177 void savePlayingToPlaylist(); 178 179 void loadSubtitlesFile(); 180 181 void quit(); 182 private slots: 183 void menuAction( QObject *); 184 void menuUpdateAction( QObject * ); 185 signals: 186 void toolBarConfUpdated(); 187 void releaseMouseEvents(); 188 }; 189 190 class DialogEvent : public QEvent 191 { 192 public: 193 static const QEvent::Type DialogEvent_Type; DialogEvent(int _i_dialog,int _i_arg,intf_dialog_args_t * _p_arg)194 DialogEvent( int _i_dialog, int _i_arg, intf_dialog_args_t *_p_arg ) : 195 QEvent( DialogEvent_Type ) 196 { 197 i_dialog = _i_dialog; 198 i_arg = _i_arg; 199 p_arg = _p_arg; 200 } 201 202 int i_arg, i_dialog; 203 intf_dialog_args_t *p_arg; 204 }; 205 206 207 #endif 208