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"