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"