|
From: Tapio V. <aa...@us...> - 2011-01-17 19:24:00
|
Module: editor
Branch: master
Commit: 9fb945a2850429d30f0fff3e95ad87ac95a67280
Author: Tapio Vierros <tap...@gm...>
Date: Mon Jan 17 21:22:06 2011 +0200
Inserting a music file populates textboxes from meta data.
Also removed previous test hack.
---
editorapp.cc | 36 +++++++++++++++++++++++++-----------
editorapp.hh | 4 ++++
2 files changed, 29 insertions(+), 11 deletions(-)
diff --git a/editorapp.cc b/editorapp.cc
index ca187e2..915fce7 100644
--- a/editorapp.cc
+++ b/editorapp.cc
@@ -1,5 +1,4 @@
#include <QtGui>
-#include <QtMultimediaKit/QMediaPlayer>
#include <iostream>
#include "editorapp.hh"
#include "notelabel.hh"
@@ -44,6 +43,8 @@ EditorApp::EditorApp(QWidget *parent): QMainWindow(parent), projectFileName()
updateNoteInfo(NULL);
song.reset(new Song);
+ player.reset(new QMediaPlayer);
+ connect(player.data(), SIGNAL(metaDataChanged()), this, SLOT(metaDataChanged()));
// Some icons to menus to make them prettier
ui.actionNew->setIcon(QIcon::fromTheme("document-new"));
@@ -58,19 +59,12 @@ EditorApp::EditorApp(QWidget *parent): QMainWindow(parent), projectFileName()
ui.actionLyricsFromFile->setIcon(QIcon::fromTheme("insert-text"));
ui.actionLyricsFromClipboard->setIcon(QIcon::fromTheme("insert-text"));
ui.actionAbout->setIcon(QIcon::fromTheme("help-about"));
-
- // FIXME: This is temporary test hack
- QMediaPlayer *player = new QMediaPlayer;
- //connect(player, SIGNAL(positionChanged(qint64)), this, SLOT(positionChanged(qint64)));
- player->setMedia(QUrl::fromLocalFile("/tmp/music.mp3"));
- player->setVolume(50);
- player->play();
}
-
void EditorApp::operationDone(const Operation &op)
{
//std::cout << "Push op: " << op.dump() << std::endl;
+ if (player) std::cout << player->isMetaDataAvailable() << std::endl;
opStack.push(op);
updateMenuStates();
redoStack.clear();
@@ -344,8 +338,13 @@ void EditorApp::on_actionMusicFile_triggered()
if (!fileName.isNull()) {
ui.valMusicFile->setText(fileName);
- ui.tabWidget->setCurrentIndex(1); // Swicth to song properties tab
- // TODO: Do something with the file
+ ui.tabWidget->setCurrentIndex(1); // Switch to song properties tab
+ // Metadata is updated when it becomes available (signal)
+ player->setMedia(QUrl::fromLocalFile(fileName));
+ // FIXME: Temporary test
+ player->setVolume(50);
+ player->play();
+ // TODO: Extract the raw data and fire up an analyzer
}
}
@@ -427,6 +426,21 @@ void EditorApp::updateSongMeta(bool readFromSongToUI)
}
}
+void EditorApp::metaDataChanged()
+{
+ if (!player.isNull()) {
+ if (player->metaData(QtMultimediaKit::Title).isValid())
+ song->title = player->metaData(QtMultimediaKit::Title).toString().toStdString();
+ if (player->metaData(QtMultimediaKit::AlbumArtist).isValid())
+ song->artist = player->metaData(QtMultimediaKit::AlbumArtist).toString().toStdString();
+ if (player->metaData(QtMultimediaKit::Genre).isValid())
+ song->genre = player->metaData(QtMultimediaKit::Genre).toString().toStdString();
+ if (player->metaData(QtMultimediaKit::Year).isValid())
+ song->year = player->metaData(QtMultimediaKit::Year).toString().toStdString();
+ updateSongMeta(true);
+ }
+}
+
void EditorApp::on_txtTitle_editingFinished() { updateSongMeta(); }
void EditorApp::on_txtArtist_editingFinished() { updateSongMeta(); }
void EditorApp::on_txtGenre_editingFinished() { updateSongMeta(); }
diff --git a/editorapp.hh b/editorapp.hh
index 719df6e..9a3a53f 100644
--- a/editorapp.hh
+++ b/editorapp.hh
@@ -1,11 +1,13 @@
#pragma once
+#include <QtMultimediaKit/QMediaPlayer>
#include "ui_editor.h"
#include "operation.hh"
#include "song.hh"
class NoteLabel;
class NoteGraphWidget;
+class QMediaPlayer;
class EditorApp: public QMainWindow
{
@@ -22,6 +24,7 @@ public:
public slots:
void operationDone(const Operation &op);
void updateNoteInfo(NoteLabel *note);
+ void metaDataChanged();
// Automatic slots
@@ -63,4 +66,5 @@ private:
OperationStack redoStack;
QScopedPointer<Song> song;
QString projectFileName;
+ QScopedPointer<QMediaPlayer> player;
};
|