File indexing completed on 2024-04-21 04:53:49
0001 /* 0002 SPDX-FileCopyrightText: 2002 Koos Vriezen 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #ifndef KMPLAYER_H 0008 #define KMPLAYER_H 0009 0010 0011 #include "config-kmplayer.h" 0012 0013 #include <QModelIndex> 0014 #include <QFrame> 0015 0016 #include <KXmlGuiWindow> 0017 #include <KSharedConfig> 0018 0019 #include "kmplayerconfig.h" 0020 #include "kmplayerpartbase.h" 0021 0022 0023 class KUrlRequester; 0024 class QAction; 0025 class QCheckBox; 0026 class QLabel; 0027 class QMenu; 0028 class QMenuItem; 0029 class QTreeWidgetItem; 0030 class KMPlayerBroadcastConfig; 0031 class KMPlayerFFServerConfig; 0032 class QSystemTrayIcon; 0033 class KRecentFilesAction; 0034 class KSharedConfig; 0035 template<class T> class KSharedPtr; 0036 0037 namespace KMPlayer { 0038 class View; 0039 class PartBase; 0040 class Source; 0041 class PlayItem; 0042 } // namespace 0043 0044 0045 class KMPlayerApp : public KXmlGuiWindow 0046 { 0047 Q_OBJECT 0048 friend struct IntroSource; 0049 0050 public: 0051 KMPlayerApp (QWidget* parent=nullptr); 0052 ~KMPlayerApp () override; 0053 void openDocumentFile (const QUrl& url = QUrl()); 0054 void addUrl (const QUrl& url); 0055 KMPlayer::PartBase * player () const { return m_player; } 0056 void resizePlayer (int percentage); 0057 KRecentFilesAction * recentFiles () const { return fileOpenRecent; } 0058 KMPlayer::View *view () const { return m_view; } 0059 bool broadcasting () const; 0060 void showBroadcastConfig (); 0061 void hideBroadcastConfig (); 0062 KMPlayerBroadcastConfig * broadcastConfig () const { return m_broadcastconfig; } 0063 /* After createGUI() some menu's have to readded again */ 0064 void initMenu (); 0065 void restoreFromConfig (); 0066 protected: 0067 void saveOptions (); 0068 void readOptions (); 0069 void saveProperties (KConfigGroup&) override; 0070 void readProperties (const KConfigGroup&) override; 0071 void initActions (); 0072 void initStatusBar (); 0073 void initView (); 0074 bool queryClose () override; 0075 0076 public Q_SLOTS: 0077 void slotFileNewWindow (); 0078 void slotFileOpen (); 0079 void slotFileOpenRecent(const QUrl& url); 0080 void slotSaveAs (); 0081 void slotFileClose (); 0082 void slotFileQuit (); 0083 void slotPreferences (); 0084 void slotViewToolBar (); 0085 void slotViewStatusBar (); 0086 void slotViewMenuBar (); 0087 void slotStatusMsg (const QString &text); 0088 void slotSourceChanged (KMPlayer::Source *, KMPlayer::Source *); 0089 private Q_SLOTS: 0090 void openDVD (); 0091 void openVCD (); 0092 void openAudioCD (); 0093 void openPipe (); 0094 void openVDR (); 0095 void fullScreen (); 0096 void configChanged (); 0097 void keepSizeRatio (); 0098 void loadingProgress (int percentage); 0099 void positioned (int pos, int length); 0100 void zoom50 (); 0101 void zoom100 (); 0102 void zoom150 (); 0103 void editMode (); 0104 void syncEditMode (); 0105 void broadcastClicked (); 0106 void broadcastStarted (); 0107 void broadcastStopped (); 0108 void playerStarted (); 0109 void slotMinimalMode (); 0110 void slotConfigureKeys(); 0111 void slotConfigureToolbars (); 0112 void slotClearHistory (); 0113 void windowVideoConsoleToggled (bool show); 0114 void playListItemActivated (const QModelIndex&); 0115 void playListItemDropped (QDropEvent *e, KMPlayer::PlayItem *after); 0116 void playListItemMoved (); 0117 void menuDropInList (); 0118 void menuDropInGroup (); 0119 void menuCopyDrop (); 0120 void menuDeleteNode (); 0121 void menuMoveUpNode (); 0122 void menuMoveDownNode (); 0123 void preparePlaylistMenu (KMPlayer::PlayItem *, QMenu *); 0124 void slotGeneratorMenu (); 0125 void slotGenerator (); 0126 0127 private: 0128 void aboutToCloseWindow (); 0129 void minimalMode (bool deco=true); 0130 QSystemTrayIcon *m_systray; 0131 KMPlayer::PartBase * m_player; 0132 KMPlayer::View * m_view; 0133 KMPlayer::NodePtr recents; 0134 KMPlayer::NodePtr playlist; 0135 KMPlayer::NodePtrW manip_node; 0136 KMPlayer::NodePtrW current_generator; 0137 KMPlayer::NodeStoreList generators; 0138 0139 QLabel* playtime_info; 0140 QAction * dropAdd; 0141 QAction * dropAddGroup; 0142 QAction * dropCopy; 0143 QAction * dropDelete; 0144 QAction * fileNewWindow; 0145 QAction * fileOpen; 0146 KRecentFilesAction * fileOpenRecent; 0147 QAction * fileClose; 0148 QAction * fileQuit; 0149 QAction * editVolumeInc; 0150 QAction * editVolumeDec; 0151 QAction * toggleView; 0152 QAction * viewSyncEditMode; 0153 QAction * viewEditMode; 0154 QAction * viewFullscreen; 0155 QAction * viewToolBar; 0156 QAction * viewStatusBar; 0157 QAction * viewMenuBar; 0158 QAction * viewKeepRatio; 0159 QMenuItem * m_sourcemenu; 0160 QMenu * m_dropmenu; 0161 QMenu * m_generatormenu; 0162 KMPlayerFFServerConfig * m_ffserverconfig; 0163 KMPlayerBroadcastConfig * m_broadcastconfig; 0164 QList<QUrl> m_drop_list; 0165 KMPlayer::PlayItem *m_drop_after; 0166 int edit_tree_id; 0167 int manip_tree_id; 0168 int last_time_left; 0169 int recents_id; 0170 int playlist_id; 0171 bool m_showToolbar; 0172 bool m_showStatusbar; 0173 bool m_showMenubar; 0174 bool m_played_intro; 0175 bool m_played_exit; 0176 bool m_minimal_mode; 0177 bool m_auto_resize; 0178 }; 0179 0180 0181 /* 0182 * Preference page for DVD 0183 */ 0184 class KMPlayerPrefSourcePageDVD : public QFrame 0185 { 0186 Q_OBJECT 0187 public: 0188 KMPlayerPrefSourcePageDVD (QWidget * parent); 0189 ~KMPlayerPrefSourcePageDVD () override {} 0190 0191 QCheckBox * autoPlayDVD; 0192 KUrlRequester * dvddevice; 0193 }; 0194 0195 /* 0196 * Source from DVD 0197 */ 0198 class KMPlayerDVDSource : public KMPlayer::Source, public KMPlayer::PreferencesPage 0199 { 0200 Q_OBJECT 0201 public: 0202 KMPlayerDVDSource(KMPlayerApp* app); 0203 ~KMPlayerDVDSource () override; 0204 bool processOutput (const QString & line) override; 0205 QString filterOptions () override; 0206 void setIdentified (bool b = true) override; 0207 QString prettyName () override; 0208 void write (KSharedConfigPtr) override; 0209 void read (KSharedConfigPtr) override; 0210 void sync (bool) override; 0211 void prefLocation (QString & item, QString & icon, QString & tab) override; 0212 QFrame * prefPage (QWidget * parent) override; 0213 void activate () override; 0214 void deactivate () override; 0215 0216 private: 0217 void setCurrent (KMPlayer::Mrl *) override; 0218 void play (KMPlayer::Mrl *) override; 0219 KMPlayerApp* m_app; 0220 KMPlayer::NodePtr disks; 0221 KMPlayerPrefSourcePageDVD * m_configpage; 0222 int m_current_title; 0223 bool m_start_play; 0224 }; 0225 0226 0227 /* 0228 * Preference page for VCD 0229 */ 0230 class KMPlayerPrefSourcePageVCD : public QFrame 0231 { 0232 Q_OBJECT 0233 public: 0234 KMPlayerPrefSourcePageVCD (QWidget * parent); 0235 ~KMPlayerPrefSourcePageVCD () override {} 0236 KUrlRequester * vcddevice; 0237 QCheckBox *autoPlayVCD; 0238 }; 0239 0240 0241 /* 0242 * Source from VCD 0243 */ 0244 class KMPlayerVCDSource : public KMPlayer::Source, public KMPlayer::PreferencesPage 0245 { 0246 Q_OBJECT 0247 public: 0248 KMPlayerVCDSource(KMPlayerApp* app); 0249 ~KMPlayerVCDSource () override; 0250 bool processOutput (const QString & line) override; 0251 void setIdentified (bool b = true) override; 0252 QString prettyName () override; 0253 void write (KSharedConfigPtr) override; 0254 void read (KSharedConfigPtr) override; 0255 void sync (bool) override; 0256 void prefLocation (QString & item, QString & icon, QString & tab) override; 0257 QFrame * prefPage (QWidget * parent) override; 0258 void activate () override; 0259 void deactivate () override; 0260 private: 0261 void setCurrent (KMPlayer::Mrl *) override; 0262 KMPlayerApp* m_app; 0263 KMPlayerPrefSourcePageVCD * m_configpage; 0264 bool m_start_play; 0265 }; 0266 0267 0268 /* 0269 * Source from AudoCD 0270 */ 0271 class KMPlayerAudioCDSource : public KMPlayer::Source 0272 { 0273 Q_OBJECT 0274 public: 0275 KMPlayerAudioCDSource(KMPlayerApp* app); 0276 ~KMPlayerAudioCDSource () override; 0277 bool processOutput (const QString & line) override; 0278 void setIdentified (bool b = true) override; 0279 QString prettyName () override; 0280 void activate () override; 0281 void deactivate () override; 0282 private: 0283 void setCurrent (KMPlayer::Mrl *) override; 0284 KMPlayerApp* m_app; 0285 }; 0286 0287 0288 /* 0289 * Source from stdin (for the backends, not kmplayer) 0290 */ 0291 class KMPlayerPipeSource : public KMPlayer::Source 0292 { 0293 Q_OBJECT 0294 public: 0295 KMPlayerPipeSource (KMPlayerApp * app); 0296 ~KMPlayerPipeSource () override; 0297 bool hasLength () override; 0298 bool isSeekable () override; 0299 void setCommand (const QString & cmd); 0300 QString prettyName () override; 0301 void activate () override; 0302 void deactivate () override; 0303 private: 0304 KMPlayerApp * m_app; 0305 }; 0306 0307 #endif // KMPLAYER_H