summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Merry <dev@randomguy3.me.uk>2011-11-03 13:02:32 +0000
committerAlex Merry <dev@randomguy3.me.uk>2011-11-03 13:02:32 +0000
commitd9d05249a08845fa67afb2a5d5c38d6eacec67eb (patch)
treee1ce72cddfa5022253995f36f14744b4351e2df7
parentaac6b1fa7a85badf7bbb458dcd75a708cae16cc3 (diff)
Player interface test widget stuff
-rw-r--r--CMakeLists.txt2
-rw-r--r--mpris2/playertestwidget.cpp168
-rw-r--r--mpris2/playertestwidget.h61
-rw-r--r--mpris2/roottestwidget.cpp4
-rw-r--r--mpris2/roottestwidget.h2
-rw-r--r--window.cpp41
-rw-r--r--window.h6
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;
};
diff --git a/window.cpp b/window.cpp
index 62efd5f..368d80a 100644
--- a/window.cpp
+++ b/window.cpp
@@ -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();
}
diff --git a/window.h b/window.h
index bef703d..6aba199 100644
--- a/window.h
+++ b/window.h
@@ -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