diff options
author | Alex Merry <dev@randomguy3.me.uk> | 2011-11-03 13:02:32 +0000 |
---|---|---|
committer | Alex Merry <dev@randomguy3.me.uk> | 2011-11-03 13:02:32 +0000 |
commit | d9d05249a08845fa67afb2a5d5c38d6eacec67eb (patch) | |
tree | e1ce72cddfa5022253995f36f14744b4351e2df7 | |
parent | aac6b1fa7a85badf7bbb458dcd75a708cae16cc3 (diff) |
Player interface test widget stuff
-rw-r--r-- | CMakeLists.txt | 2 | ||||
-rw-r--r-- | mpris2/playertestwidget.cpp | 168 | ||||
-rw-r--r-- | mpris2/playertestwidget.h | 61 | ||||
-rw-r--r-- | mpris2/roottestwidget.cpp | 4 | ||||
-rw-r--r-- | mpris2/roottestwidget.h | 2 | ||||
-rw-r--r-- | window.cpp | 41 | ||||
-rw-r--r-- | window.h | 6 |
7 files changed, 273 insertions, 11 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 559ead2..a2b5dd1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,6 +13,7 @@ set (mpristester_SRCS mpris2/interfacetest.cpp mpris2/rootinterfacetest.cpp mpris2/roottestwidget.cpp + mpris2/playertestwidget.cpp mpris2/playerinterfacetest.cpp mpris2/testconsole.cpp ) @@ -23,6 +24,7 @@ qt4_wrap_cpp (mpristester_SRCS mpris2/rootinterfacetest.h mpris2/roottestwidget.h mpris2/playerinterfacetest.h + mpris2/playertestwidget.h mpris2/testconsole.h ) qt4_wrap_ui (mpristester_SRCS diff --git a/mpris2/playertestwidget.cpp b/mpris2/playertestwidget.cpp new file mode 100644 index 0000000..8ed42fe --- /dev/null +++ b/mpris2/playertestwidget.cpp @@ -0,0 +1,168 @@ +/* + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) 2011 Alex Merry <alex.merry@cs.ox.ac.uk> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + + +#include "playertestwidget.h" +#include "playerinterfacetest.h" +#include <qtimer.h> +#include <qdbusextratypes.h> + +using namespace Mpris2; + +PlayerTestWidget::PlayerTestWidget(PlayerInterfaceTest* test, QWidget* parent) + : QWidget(parent) +{ + ui.setupUi(this); + metadataModel = new MetadataModel(this); + ui.metadataTableView->setModel(metadataModel); + this->test = test; + connect(test, SIGNAL(propertiesChanged(QStringList)), + this, SLOT(propertiesChanged(QStringList))); + estPosTimer = new QTimer(this); + estPosTimer->setInterval(500); + estPosTimer->setSingleShot(false); + connect(estPosTimer, SIGNAL(timeout()), + this, SLOT(updateEstPos())); + + connect(ui.nextBtn, SIGNAL(clicked(bool)), + test, SLOT(testNext())); + connect(ui.prevBtn, SIGNAL(clicked(bool)), + test, SLOT(testPrevious())); + connect(ui.pauseBtn, SIGNAL(clicked(bool)), + test, SLOT(testPause())); + connect(ui.playBtn, SIGNAL(clicked(bool)), + test, SLOT(testPlay())); + connect(ui.playPauseBtn, SIGNAL(clicked(bool)), + test, SLOT(testPlayPause())); + connect(ui.stopBtn, SIGNAL(clicked(bool)), + test, SLOT(testStop())); + connect(ui.seekBtn, SIGNAL(clicked(bool)), + this, SLOT(testSeek())); + connect(ui.setPosBtn, SIGNAL(clicked(bool)), + this, SLOT(testSetPos())); + connect(ui.openUriBtn, SIGNAL(clicked(bool)), + this, SLOT(testOpenUri())); +} + +PlayerTestWidget::~PlayerTestWidget() +{ +} + +void PlayerTestWidget::runInitialTest() +{ + test->initialTest(); +} + +void PlayerTestWidget::runIncrementalTest() +{ + test->incrementalTest(); +} + +void PlayerTestWidget::propertiesChanged(const QStringList& properties) +{ + Q_UNUSED(properties) + + if (test->properties().contains("PlaybackStatus")) { + ui.playbackStatusLbl->setText(test->properties().value("PlaybackStatus").toString()); + ui.playbackStatusLbl->setEnabled(true); + } + if (test->properties().contains("LoopStatus")) { + ui.loopStatusLbl->setText(test->properties().value("LoopStatus").toString()); + ui.loopStatusLbl->setEnabled(true); + } + if (test->properties().contains("CanGoNext")) { + ui.canGoNextLbl->setText(test->properties().value("CanGoNext").toBool() ? "Yes" : "No"); + ui.canGoNextLbl->setEnabled(true); + } + if (test->properties().contains("CanGoPrevious")) { + ui.canGoPrevLbl->setText(test->properties().value("CanGoPrevious").toBool() ? "Yes" : "No"); + ui.canGoPrevLbl->setEnabled(true); + } + if (test->properties().contains("CanPlay")) { + ui.canPlayLbl->setText(test->properties().value("CanPlay").toBool() ? "Yes" : "No"); + ui.canPlayLbl->setEnabled(true); + } + if (test->properties().contains("CanPause")) { + ui.canPauseLbl->setText(test->properties().value("CanPause").toBool() ? "Yes" : "No"); + ui.canPauseLbl->setEnabled(true); + } + if (test->properties().contains("CanSeek")) { + ui.canSeekLbl->setText(test->properties().value("CanSeek").toBool() ? "Yes" : "No"); + ui.canSeekLbl->setEnabled(true); + } + if (test->properties().contains("CanControl")) { + ui.canControlLbl->setText(test->properties().value("CanControl").toBool() ? "Yes" : "No"); + ui.canControlLbl->setEnabled(true); + } + if (test->properties().contains("Shuffle")) { + ui.shuffleLbl->setText(test->properties().value("Shuffle").toBool() ? "Yes" : "No"); + ui.shuffleLbl->setEnabled(true); + } + if (test->properties().contains("Rate")) { + ui.rateLbl->setText(QString::number(test->properties().value("Rate").toDouble(), 'g', 2)); + ui.rateLbl->setEnabled(true); + } + if (test->properties().contains("MinimumRate")) { + ui.minRateLbl->setText(QString::number(test->properties().value("MinimumRate").toDouble(), 'g', 2)); + ui.minRateLbl->setEnabled(true); + } + if (test->properties().contains("MaximumRate")) { + ui.maxRateLbl->setText(QString::number(test->properties().value("MaximumRate").toDouble(), 'g', 2)); + ui.maxRateLbl->setEnabled(true); + } + if (test->properties().contains("Volume")) { + ui.volumeLbl->setText(QString::number(test->properties().value("Volume").toDouble(), 'g', 2)); + ui.volumeLbl->setEnabled(true); + } + if (test->properties().contains("Position")) { + ui.lastKnownPosLbl->setText(QString::number(test->properties().value("Position").toLongLong())); + ui.lastKnownPosLbl->setEnabled(true); + } + if (test->predictedPosition() >= 0) { + ui.estPosLbl->setText(QString::number(test->predictedPosition())); + ui.estPosLbl->setEnabled(true); + if (!estPosTimer->isActive()) + estPosTimer->start(); + } + if (test->properties().contains("Metadata")) { + metadataModel->setMetadata(test->properties().value("Metadata").toMap()); + } +} + +void PlayerTestWidget::updateEstPos() +{ + ui.estPosLbl->setText(QString::number(test->predictedPosition())); +} + +void PlayerTestWidget::testSeek() +{ + qint64 offset = (qint64)ui.seekSpinBox->value() * 1000; + test->testSeek(offset); +} + +void PlayerTestWidget::testSetPos() +{ + qint64 pos = (qint64)ui.setPosSpinBox->value() * 1000; + test->testSetPosition(QDBusObjectPath(ui.setPosTrackIdEdit->text()), pos); +} + +void PlayerTestWidget::testOpenUri() +{ + test->testOpenUri(ui.openUriEdit->text()); +} diff --git a/mpris2/playertestwidget.h b/mpris2/playertestwidget.h new file mode 100644 index 0000000..9c2f6b4 --- /dev/null +++ b/mpris2/playertestwidget.h @@ -0,0 +1,61 @@ +/* + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) 2011 Alex Merry <alex.merry@cs.ox.ac.uk> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + + +#ifndef MPRIS2_PLAYERTESTWIDGET_H +#define MPRIS2_PLAYERTESTWIDGET_H + +#include <QtGui/QWidget> +#include "ui_playertest.h" +#include "../metadatamodel.h" + +class QTimer; +namespace Mpris2 { + + class PlayerInterfaceTest; + + class PlayerTestWidget : public QWidget + { + Q_OBJECT + + public: + PlayerTestWidget(PlayerInterfaceTest *test, QWidget *parent = 0); + virtual ~PlayerTestWidget(); + + public slots: + void runInitialTest(); + void runIncrementalTest(); + void testSeek(); + void testSetPos(); + void testOpenUri(); + + private slots: + void propertiesChanged(const QStringList& properties); + void updateEstPos(); + + private: + Ui_PlayerTestForm ui; + PlayerInterfaceTest *test; + QTimer *estPosTimer; + MetadataModel *metadataModel; + }; + +} + +#endif // MPRIS2_PLAYERTESTWIDGET_H diff --git a/mpris2/roottestwidget.cpp b/mpris2/roottestwidget.cpp index 42c9d52..ebdd144 100644 --- a/mpris2/roottestwidget.cpp +++ b/mpris2/roottestwidget.cpp @@ -52,11 +52,7 @@ void RootTestWidget::runIncrementalTest() void RootTestWidget::propertiesChanged(const QStringList& properties) { Q_UNUSED(properties) - updateProperties(); -} -void RootTestWidget::updateProperties() -{ if (test->properties().contains("Identity")) { ui.identityLbl->setText(test->properties().value("Identity").toString()); ui.identityLbl->setEnabled(true); diff --git a/mpris2/roottestwidget.h b/mpris2/roottestwidget.h index 73fcaed..513ecb9 100644 --- a/mpris2/roottestwidget.h +++ b/mpris2/roottestwidget.h @@ -42,8 +42,6 @@ namespace Mpris2 void propertiesChanged(const QStringList& properties); private: - void updateProperties(); - Ui_RootTestForm ui; RootInterfaceTest* test; }; @@ -28,14 +28,18 @@ #include <QDBusReply> #include <QDebug> #include <QMetaObject> +#include "mpris2/playertestwidget.h" static const QString playerPrefix = QLatin1String("org.mpris.MediaPlayer2."); Window::Window(QWidget* parent) : QMainWindow(parent), m_playerActionGroup(new QActionGroup(this)), + m_tabWidget(0), m_rootTest(0), - m_rootWidget(0) + m_rootWidget(0), + m_playerTest(0), + m_playerWidget(0) { m_ui.setupUi(this); @@ -114,11 +118,19 @@ void Window::clear() setCentralWidget(new QWidget()); + m_tabWidget->deleteLater(); + m_tabWidget = 0; + m_rootTest->deleteLater(); m_rootTest = 0; m_rootWidget->deleteLater(); m_rootWidget = 0; + m_playerTest->deleteLater(); + m_playerTest = 0; + m_playerWidget->deleteLater(); + m_playerWidget = 0; + m_currentPlayer.clear(); } @@ -128,11 +140,13 @@ void Window::setPlayer(const QString& dbusAddress) qDebug() << "Connecting to player" << dbusAddress; + m_tabWidget = new QTabWidget(this); + m_rootTest = new Mpris2::RootInterfaceTest(dbusAddress, this); connect(&m_timer, SIGNAL(timeout()), m_rootTest, SLOT(incrementalTest())); - m_rootWidget = new QWidget(this); + m_rootWidget = new QWidget(m_tabWidget); QBoxLayout *layout = new QVBoxLayout(m_rootWidget); layout->addWidget(new Mpris2::RootTestWidget(m_rootTest)); Mpris2::TestConsole* console = new Mpris2::TestConsole(); @@ -143,12 +157,29 @@ void Window::setPlayer(const QString& dbusAddress) connect(m_rootTest, SIGNAL(interfaceInfo(Mpris2::InterfaceTest::LocationType,QString,QString)), console, SLOT(interfaceInfo(Mpris2::InterfaceTest::LocationType,QString,QString))); layout->addWidget(console); - this->setCentralWidget(m_rootWidget); - layout->update(); + m_tabWidget->addTab(m_rootWidget, "Root iface"); + + m_playerTest = new Mpris2::PlayerInterfaceTest(dbusAddress, this); + connect(&m_timer, SIGNAL(timeout()), + m_playerTest, SLOT(incrementalTest())); + + m_playerWidget = new QWidget(m_tabWidget); + layout = new QVBoxLayout(m_playerWidget); + layout->addWidget(new Mpris2::PlayerTestWidget(m_playerTest)); + console = new Mpris2::TestConsole(); + connect(m_playerTest, SIGNAL(interfaceError(Mpris2::InterfaceTest::LocationType,QString,QString)), + console, SLOT(interfaceError(Mpris2::InterfaceTest::LocationType,QString,QString))); + connect(m_playerTest, SIGNAL(interfaceWarning(Mpris2::InterfaceTest::LocationType,QString,QString)), + console, SLOT(interfaceWarning(Mpris2::InterfaceTest::LocationType,QString,QString))); + connect(m_playerTest, SIGNAL(interfaceInfo(Mpris2::InterfaceTest::LocationType,QString,QString)), + console, SLOT(interfaceInfo(Mpris2::InterfaceTest::LocationType,QString,QString))); + layout->addWidget(console); + m_tabWidget->addTab(m_playerWidget, "Player iface"); - this->update(); + this->setCentralWidget(m_tabWidget); QMetaObject::invokeMethod(m_rootTest, "initialTest", Qt::QueuedConnection); + QMetaObject::invokeMethod(m_playerTest, "initialTest", Qt::QueuedConnection); m_timer.start(); } @@ -23,6 +23,7 @@ #include <QMainWindow> #include <QTimer> +#include "mpris2/playerinterfacetest.h" class QActionGroup; class QAction; @@ -56,8 +57,13 @@ private: QString m_currentPlayer; + QTabWidget* m_tabWidget; + Mpris2::RootInterfaceTest* m_rootTest; QWidget* m_rootWidget; + + Mpris2::PlayerInterfaceTest* m_playerTest; + QWidget* m_playerWidget; }; #endif // WINDOW_H |