File indexing completed on 2024-05-05 04:56:10
0001 /* 0002 SPDX-FileCopyrightText: 2002-2003 Koos Vriezen <koos.vriezen@gmail.com> 0003 0004 SPDX-License-Identifier: LGPL-2.0-only 0005 */ 0006 0007 #ifndef KMPLAYER_PART_H 0008 #define KMPLAYER_PART_H 0009 0010 #include <KPluginFactory> 0011 #include <KParts/BrowserExtension> 0012 #include <KParts/LiveConnectExtension> 0013 #include <kcoreaddons_version.h> 0014 #if KCOREADDONS_VERSION < QT_VERSION_CHECK(5, 77, 0) 0015 #include <KAboutData> 0016 #endif 0017 #include "kmplayerpartbase.h" 0018 #include "config-kmplayer.h" 0019 0020 0021 class QLabel; 0022 class KMPlayerPart; 0023 class JSCommandEntry; 0024 namespace KMPlayer { 0025 class PlayListNotify; 0026 } 0027 0028 class KMPlayerFactory : public KPluginFactory { 0029 Q_OBJECT 0030 Q_PLUGIN_METADATA(IID "org.kde.KPluginFactory" FILE "kmplayer_part.json") 0031 Q_INTERFACES(KPluginFactory) 0032 public: 0033 KMPlayerFactory(); 0034 ~KMPlayerFactory() override; 0035 0036 QObject* create(const char *iface, QWidget* parentWidget, QObject* parent, 0037 const QVariantList& args, const QString& keyword) Q_DECL_OVERRIDE; 0038 #if KCOREADDONS_VERSION < QT_VERSION_CHECK(5, 77, 0) 0039 static KAboutData& aboutData(); 0040 private: 0041 static KAboutData* s_about; 0042 #endif 0043 }; 0044 0045 /* 0046 * Document to get first frame for streams starting with a picture 0047 */ 0048 class GrabDocument : public KMPlayer::SourceDocument 0049 { 0050 public: 0051 GrabDocument (KMPlayerPart *part, const QString &url, const QString &file, 0052 KMPlayer::PlayListNotify *); 0053 0054 void activate () override; 0055 void undefer () override; 0056 void begin () override; 0057 void message (KMPlayer::MessageType msg, void *content) override; 0058 0059 QString m_grab_file; 0060 KMPlayerPart *m_part; 0061 }; 0062 0063 /* 0064 * Part notifications to hosting application 0065 */ 0066 class KMPlayerBrowserExtension : public KParts::BrowserExtension 0067 { 0068 Q_OBJECT 0069 public: 0070 KMPlayerBrowserExtension(KMPlayerPart *parent); 0071 ~KMPlayerBrowserExtension () override {} 0072 void urlChanged (const QString & url); 0073 void setLoadingProgress (int percentage); 0074 0075 void saveState (QDataStream & stream) override; 0076 void restoreState (QDataStream & stream) override; 0077 void requestOpenURL (const QUrl & url, const QString & target, const QString & service); 0078 }; 0079 0080 /* 0081 * Part javascript support 0082 */ 0083 class KMPlayerLiveConnectExtension : public KParts::LiveConnectExtension 0084 { 0085 Q_OBJECT 0086 public: 0087 KMPlayerLiveConnectExtension (KMPlayerPart * parent); 0088 ~KMPlayerLiveConnectExtension () override; 0089 0090 // LiveConnect interface 0091 bool get (const unsigned long, const QString &, 0092 KParts::LiveConnectExtension::Type &, unsigned long &, QString &) override; 0093 bool put (const unsigned long, const QString &, const QString &) override; 0094 bool call (const unsigned long, const QString &, 0095 const QStringList &, KParts::LiveConnectExtension::Type &, 0096 unsigned long &, QString &) override; 0097 void unregister (const unsigned long) override; 0098 void sendEvent(const unsigned long objid, const QString & event, const KParts::LiveConnectExtension::ArgList & args ) { 0099 Q_EMIT partEvent(objid, event, args); 0100 } 0101 0102 void enableFinishEvent (bool b = true) { m_enablefinish = b; } 0103 QString evaluate (const QString & script); 0104 Q_SIGNALS: 0105 void partEvent (const unsigned long, const QString &, 0106 const KParts::LiveConnectExtension::ArgList &); 0107 void requestGet (const uint32_t, const QString &, QString *); 0108 void requestCall (const uint32_t, const QString &, const QStringList &, QString *); 0109 public Q_SLOTS: 0110 void setSize (int w, int h); 0111 void started (); 0112 void finished (); 0113 void handleEvaluateRequest (const QString & script, bool store, QString & result); 0114 private: 0115 KMPlayerPart * player; 0116 QString script_result; 0117 QString m_allow; 0118 QStringList redir_funcs; 0119 const JSCommandEntry * lastJSCommandEntry; 0120 unsigned int object_counter; 0121 bool m_started; 0122 bool m_enablefinish; 0123 bool m_evaluating; 0124 bool m_skip_put; 0125 }; 0126 0127 0128 /* 0129 * Part that gets created when used a KPart 0130 */ 0131 class KMPlayerPart : public KMPlayer::PartBase 0132 { 0133 Q_OBJECT 0134 friend struct GroupPredicate; 0135 public: 0136 enum Features { 0137 Feat_Unknown = 0, 0138 Feat_Viewer = 0x01, Feat_Controls = 0x02, 0139 Feat_Label = 0x04, Feat_StatusBar = 0x08, 0140 Feat_InfoPanel = 0x10, Feat_VolumeSlider = 0x20, Feat_PlayList = 0x40, 0141 Feat_ImageWindow = 0x80, Feat_All = 0xff 0142 }; 0143 #if KCOREADDONS_VERSION >= QT_VERSION_CHECK(5, 77, 0) 0144 KMPlayerPart(QWidget* parentWidget, QObject* parent, const KPluginMetaData& metaData, const QVariantList &args); 0145 #else 0146 KMPlayerPart (QWidget *wparent, QObject *parent, const QVariantList &args); 0147 #endif 0148 ~KMPlayerPart () override; 0149 0150 KMPlayerBrowserExtension * browserextension() const 0151 { return m_browserextension; } 0152 KMPlayerLiveConnectExtension * liveconnectextension () const 0153 { return m_liveconnectextension; } 0154 bool hasFeature (int f) { return m_features & f; } 0155 bool allowRedir (const QUrl & url) const; 0156 void connectToPart (KMPlayerPart *); 0157 KMPlayerPart * master () const { return m_master; } 0158 void setMaster (KMPlayerPart * m) { m_master = m; } 0159 void setLoaded (int percentage) override; 0160 bool openNewURL (const QUrl & url); // for JS interface 0161 /// @param pic local file path to a placeholder image 0162 bool startUrl (const QUrl &url, const QString &pic=QString ());//clickToPlay 0163 0164 QString doEvaluate (const QString &script) override; 0165 0166 using KMPlayer::PartBase::openUrl; 0167 public Q_SLOTS: 0168 bool openUrl(const QUrl& url) override; 0169 void openUrl(const QUrl&, const QString& t, const QString& srv) override; 0170 bool closeUrl () override; 0171 void setMenuZoom (int id); 0172 protected: 0173 void processCreated (KMPlayer::Process *) override; 0174 void playingStarted () override; 0175 void playingStopped () override; 0176 protected Q_SLOTS: 0177 void viewerPartDestroyed (QObject *); 0178 void viewerPartProcessChanged (const char *); 0179 void viewerPartSourceChanged (KMPlayer::Source *, KMPlayer::Source *); 0180 void waitForImageWindowTimeOut (); 0181 void statusPosition (int pos, int length); 0182 void nppLoaded (); 0183 #ifndef KMPLAYER_WITH_CAIRO 0184 void pictureClicked (); 0185 #endif 0186 private: 0187 void setAutoControls (bool); 0188 KMPlayerPart * m_master; 0189 KMPlayerBrowserExtension * m_browserextension; 0190 KMPlayerLiveConnectExtension * m_liveconnectextension; 0191 QLabel* m_playtime_info; 0192 QString m_group; 0193 QString m_src_url; 0194 QString m_href_url; 0195 QString m_file_name; 0196 QString m_grab_file; 0197 QString m_target; 0198 int m_expected_view_width; 0199 int m_expected_view_height; 0200 int m_features; 0201 int last_time_left; 0202 bool m_started_emited : 1; 0203 bool m_wait_npp_loaded : 1; 0204 //bool m_noresize : 1; 0205 }; 0206 0207 0208 #endif