File indexing completed on 2024-04-21 04:53:51
0001 /* 0002 This file is part of the KMPlayer application 0003 SPDX-FileCopyrightText: 2003 Koos Vriezen <koos.vriezen@xs4all.nl> 0004 0005 SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 #ifndef _KMPLAYER_TV_SOURCE_H_ 0009 #define _KMPLAYER_TV_SOURCE_H_ 0010 0011 #include <QPointer> 0012 #include <QString> 0013 #include <QFrame> 0014 0015 #include "kmplayer.h" 0016 #include "kmplayerconfig.h" 0017 #include "mediaobject.h" 0018 #include "kmplayer_lists.h" 0019 0020 const short id_node_tv_document = 40; 0021 const short id_node_tv_device = 41; 0022 const short id_node_tv_input = 42; 0023 const short id_node_tv_channel = 43; 0024 0025 class KMPlayerPrefSourcePageTV; // source, TV 0026 class TVDeviceScannerSource; 0027 class KMPlayerTVSource; 0028 class KUrlRequester; 0029 class KMPlayerApp; 0030 class QTabWidget; 0031 class QLineEdit; 0032 class QCheckBox; 0033 class QPushButton; 0034 0035 0036 class TVDevicePage : public QFrame 0037 { 0038 Q_OBJECT 0039 public: 0040 TVDevicePage (QWidget *parent, KMPlayer::NodePtr dev); 0041 ~TVDevicePage () override {} 0042 0043 QLineEdit * name; 0044 KUrlRequester * audiodevice; 0045 QLineEdit * sizewidth; 0046 QLineEdit * sizeheight; 0047 QCheckBox * noplayback; 0048 QTabWidget * inputsTab; 0049 KMPlayer::NodePtrW device_doc; 0050 Q_SIGNALS: 0051 void deleted (TVDevicePage *); 0052 private Q_SLOTS: 0053 void slotDelete (); 0054 }; 0055 0056 class KMPlayerPrefSourcePageTV : public QFrame 0057 { 0058 Q_OBJECT 0059 public: 0060 KMPlayerPrefSourcePageTV (QWidget *parent, KMPlayerTVSource *); 0061 ~KMPlayerPrefSourcePageTV () override {} 0062 QLineEdit * driver; 0063 KUrlRequester * device; 0064 QPushButton * scan; 0065 QTabWidget * notebook; 0066 protected: 0067 void showEvent (QShowEvent *) override; 0068 KMPlayerTVSource * m_tvsource; 0069 }; 0070 0071 class TVNode : public KMPlayer::GenericMrl 0072 { 0073 public: 0074 TVNode (KMPlayer::NodePtr &d, const QString &s, const char * t, short id, const QString &n=QString ()); 0075 void setNodeName (const QString &) override; 0076 }; 0077 0078 /* 0079 * Element for channels 0080 */ 0081 class TVChannel : public TVNode 0082 { 0083 public: 0084 TVChannel (KMPlayer::NodePtr & d, const QString & n, double f); 0085 TVChannel (KMPlayer::NodePtr & d); 0086 ~TVChannel () override {} 0087 void closed () override; 0088 }; 0089 0090 /* 0091 * Element for inputs 0092 */ 0093 class TVInput : public TVNode 0094 { 0095 public: 0096 TVInput (KMPlayer::NodePtr & d, const QString & n, int id); 0097 TVInput (KMPlayer::NodePtr & d); 0098 ~TVInput () override {} 0099 KMPlayer::Node *childFromTag (const QString &) override; 0100 void setNodeName (const QString &) override; 0101 void closed () override; 0102 }; 0103 0104 /* 0105 * Element for TV devices 0106 */ 0107 class TVDevice : public TVNode 0108 { 0109 public: 0110 TVDevice (KMPlayer::NodePtr & d, const QString & s); 0111 TVDevice (KMPlayer::NodePtr & d); 0112 ~TVDevice () override; 0113 KMPlayer::Node *childFromTag (const QString &) override; 0114 void closed () override; 0115 void message (KMPlayer::MessageType msg, void *content=nullptr) override; 0116 void *role (KMPlayer::RoleType msg, void *content=nullptr) override; 0117 void setNodeName (const QString &) override; 0118 void updateNodeName (); 0119 void updateDevicePage (); 0120 bool zombie; 0121 QPointer <TVDevicePage> device_page; 0122 }; 0123 0124 class TVDocument : public FileDocument 0125 { 0126 KMPlayerTVSource * m_source; 0127 public: 0128 TVDocument (KMPlayerTVSource *); 0129 KMPlayer::Node *childFromTag (const QString &) override; 0130 void defer () override; 0131 const char * nodeName () const override { return "tvdevices"; } 0132 void message (KMPlayer::MessageType msg, void *content=nullptr) override; 0133 }; 0134 0135 0136 /* 0137 * Source form scanning TV devices 0138 */ 0139 class TVDeviceScannerSource : public KMPlayer::Source, KMPlayer::ProcessUser 0140 { 0141 Q_OBJECT 0142 public: 0143 TVDeviceScannerSource (KMPlayerTVSource * src); 0144 ~TVDeviceScannerSource () override {}; 0145 void init () override; 0146 bool processOutput (const QString & line) override; 0147 QString filterOptions () override; 0148 bool hasLength () override; 0149 bool isSeekable () override; 0150 virtual bool scan (const QString & device, const QString & driver); 0151 0152 void starting (KMPlayer::IProcess *) override {} 0153 void stateChange (KMPlayer::IProcess *, KMPlayer::IProcess::State, KMPlayer::IProcess::State) override; 0154 void processDestroyed (KMPlayer::IProcess *p) override; 0155 KMPlayer::IViewer *viewer () override; 0156 KMPlayer::Mrl *getMrl () override; 0157 0158 void activate () override; 0159 void deactivate () override; 0160 void play (KMPlayer::Mrl *) override; 0161 public Q_SLOTS: 0162 void scanningFinished (); 0163 Q_SIGNALS: 0164 void scanFinished (TVDevice * tvdevice); 0165 private: 0166 KMPlayerTVSource * m_tvsource; 0167 TVDevice * m_tvdevice; 0168 KMPlayer::IProcess *m_process; 0169 KMPlayer::IViewer *m_viewer; 0170 KMPlayer::Source * m_old_source; 0171 QString m_driver; 0172 QString m_caps; 0173 QRegExp m_nameRegExp; 0174 QRegExp m_sizesRegExp; 0175 QRegExp m_inputRegExp; 0176 QRegExp m_inputRegExpV4l2; 0177 }; 0178 0179 /* 0180 * Source form TV devices, also implementing preference page for it 0181 */ 0182 class KMPlayerTVSource : public KMPlayer::Source, public KMPlayer::PreferencesPage 0183 { 0184 Q_OBJECT 0185 public: 0186 KMPlayerTVSource(KMPlayerApp* app); 0187 ~KMPlayerTVSource () override; 0188 QString filterOptions () override; 0189 bool hasLength () override; 0190 bool isSeekable () override; 0191 KMPlayer::NodePtr root () override; 0192 QString prettyName () override; 0193 void write (KSharedConfigPtr) override; 0194 void read (KSharedConfigPtr) override; 0195 void sync (bool) override; 0196 void prefLocation (QString & item, QString & icon, QString & tab) override; 0197 QFrame * prefPage (QWidget * parent) override; 0198 void readXML (); 0199 void setCurrent (KMPlayer::Mrl *) override; 0200 void activate () override; 0201 void deactivate () override; 0202 void play (KMPlayer::Mrl *) override; 0203 public Q_SLOTS: 0204 void menuClicked (int id); 0205 private Q_SLOTS: 0206 void slotScan (); 0207 void slotScanFinished (TVDevice * device); 0208 void slotDeviceDeleted (TVDevicePage *); 0209 private: 0210 void addTVDevicePage (TVDevice * dev, bool show=false); 0211 KMPlayer::NodePtrW m_cur_tvdevice; 0212 KMPlayer::NodePtrW m_cur_tvinput; 0213 KMPlayerApp* m_app; 0214 QMenu * m_channelmenu; 0215 QString tvdriver; 0216 KMPlayerPrefSourcePageTV * m_configpage; 0217 TVDeviceScannerSource * scanner; 0218 int tree_id; 0219 bool config_read; // whether tv.xml is read 0220 }; 0221 0222 #endif //_KMPLAYER_TV_SOURCE_H_