File indexing completed on 2024-04-28 04:48:38

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     : ReadOnlyPart(parent, metaData)
0035 
0036     , m_statusBarExtension(new KParts::StatusBarExtension(this))
0037     , m_playPause(nullptr)
0038 {
0039     KActionCollection *const ac = actionCollection();
0040 
0041     setWidget(new QWidget(parentWidget)); //, widgetName
0042     QVBoxLayout *layout = new QVBoxLayout();
0043     layout->setContentsMargins(0, 0, 0, 0);
0044 
0045     QToolBar *toolBar = new MouseOverToolBar(widget());
0046     layout->addWidget(toolBar);
0047     layout->addWidget(new VideoWindow(widget()));
0048 
0049     m_playPause = new Dragon::PlayAction(videoWindow(), &VideoWindow::playPause, ac);
0050     toolBar->addAction(m_playPause);
0051     {
0052         QWidget *slider = videoWindow()->newPositionSlider();
0053         QWidgetAction *sliderAction = new QWidgetAction(ac);
0054         sliderAction->setText(i18n("Position Slider"));
0055         sliderAction->setObjectName(QLatin1String("position_slider"));
0056         sliderAction->setDefaultWidget(slider);
0057         ac->addAction(sliderAction->objectName(), sliderAction);
0058         toolBar->addAction(sliderAction);
0059     }
0060     connect(engine(), &VideoWindow::stateChanged, this, &Part::engineStateChanged);
0061     videoWindow()->setContextMenuPolicy(Qt::CustomContextMenu);
0062     connect(videoWindow(), &QWidget::customContextMenuRequested, this, &Part::videoContextMenu);
0063 
0064     widget()->setLayout(layout);
0065 }
0066 
0067 void Part::engineStateChanged(Phonon::State state)
0068 {
0069     m_playPause->setChecked(state == Phonon::PlayingState);
0070 }
0071 
0072 bool Part::openUrl(const QUrl &url)
0073 {
0074     qDebug() << "playing " << url;
0075     m_url = url;
0076     bool ret = videoWindow()->load(m_url);
0077     videoWindow()->play();
0078     return ret;
0079 }
0080 
0081 bool Part::closeUrl()
0082 {
0083     m_url = QUrl();
0084     videoWindow()->stop();
0085     return true;
0086 }
0087 
0088 void Part::videoContextMenu(const QPoint &pos)
0089 {
0090     QMenu menu;
0091     menu.addAction(m_playPause);
0092     menu.exec(pos);
0093 }
0094 
0095 QAction *action(const char * /*actionName*/)
0096 {
0097     return nullptr;
0098 }
0099 /// fake mainWindow for VideoWindow
0100 QWidget *mainWindow()
0101 {
0102     return nullptr;
0103 }
0104 }
0105 
0106 #include "part.moc"
0107 
0108 #include "moc_part.cpp"