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