File indexing completed on 2024-05-12 08:50:35
0001 /* 0002 SPDX-FileCopyrightText: 2005 Max Howell <max.howell@methylblue.com> 0003 SPDX-FileCopyrightText: 2007 Ian Monroe <ian@monroe.nu> 0004 0005 SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0006 */ 0007 0008 #include "part.h" 0009 0010 #include "actions.h" 0011 #include "partToolBar.h" 0012 #include "videoWindow.h" 0013 0014 #include <KActionCollection> 0015 #include <KLocalizedString> 0016 #include <KPluginFactory> 0017 #include <KPluginMetaData> 0018 #include <KToggleAction> 0019 0020 #include <QAction> 0021 #include <QDebug> 0022 #include <QMenu> 0023 #include <QSlider> 0024 #include <QTimer> 0025 #include <QTimerEvent> 0026 #include <QVBoxLayout> 0027 #include <QWidgetAction> 0028 0029 K_PLUGIN_FACTORY_WITH_JSON(CodeineFactory, "../../misc/dragonplayer_part.json", registerPlugin<Dragon::Part>();) 0030 0031 namespace Dragon 0032 { 0033 Part::Part(QWidget *parentWidget, QObject *parent, const KPluginMetaData &metaData, const QVariantList & /*args*/) 0034 #if QT_VERSION_MAJOR < 6 0035 : ReadOnlyPart(parent) 0036 #else 0037 : ReadOnlyPart(parent, metaData) 0038 #endif 0039 0040 , m_statusBarExtension(new KParts::StatusBarExtension(this)) 0041 , m_playPause(nullptr) 0042 { 0043 #if QT_VERSION_MAJOR < 6 0044 setMetaData(metaData); 0045 #endif 0046 0047 KActionCollection *const ac = actionCollection(); 0048 0049 setWidget(new QWidget(parentWidget)); //, widgetName 0050 QVBoxLayout *layout = new QVBoxLayout(); 0051 layout->setContentsMargins(0, 0, 0, 0); 0052 0053 QToolBar *toolBar = new MouseOverToolBar(widget()); 0054 layout->addWidget(toolBar); 0055 layout->addWidget(new VideoWindow(widget())); 0056 0057 m_playPause = new Dragon::PlayAction(videoWindow(), &VideoWindow::playPause, ac); 0058 toolBar->addAction(m_playPause); 0059 { 0060 QWidget *slider = videoWindow()->newPositionSlider(); 0061 QWidgetAction *sliderAction = new QWidgetAction(ac); 0062 sliderAction->setText(i18n("Position Slider")); 0063 sliderAction->setObjectName(QLatin1String("position_slider")); 0064 sliderAction->setDefaultWidget(slider); 0065 ac->addAction(sliderAction->objectName(), sliderAction); 0066 toolBar->addAction(sliderAction); 0067 } 0068 connect(engine(), &VideoWindow::stateChanged, this, &Part::engineStateChanged); 0069 videoWindow()->setContextMenuPolicy(Qt::CustomContextMenu); 0070 connect(videoWindow(), &QWidget::customContextMenuRequested, this, &Part::videoContextMenu); 0071 0072 widget()->setLayout(layout); 0073 } 0074 0075 void Part::engineStateChanged(Phonon::State state) 0076 { 0077 m_playPause->setChecked(state == Phonon::PlayingState); 0078 } 0079 0080 bool Part::openUrl(const QUrl &url) 0081 { 0082 qDebug() << "playing " << url; 0083 m_url = url; 0084 bool ret = videoWindow()->load(m_url); 0085 videoWindow()->play(); 0086 return ret; 0087 } 0088 0089 bool Part::closeUrl() 0090 { 0091 m_url = QUrl(); 0092 videoWindow()->stop(); 0093 return true; 0094 } 0095 0096 void Part::videoContextMenu(const QPoint &pos) 0097 { 0098 QMenu menu; 0099 menu.addAction(m_playPause); 0100 menu.exec(pos); 0101 } 0102 0103 QAction *action(const char * /*actionName*/) 0104 { 0105 return nullptr; 0106 } 0107 /// fake mainWindow for VideoWindow 0108 QWidget *mainWindow() 0109 { 0110 return nullptr; 0111 } 0112 } 0113 0114 #include "part.moc" 0115 0116 #include "moc_part.cpp"