diff --git a/MainDisplay.cpp b/MainDisplay.cpp index 2bad17b..c210b6e 100644 --- a/MainDisplay.cpp +++ b/MainDisplay.cpp @@ -3,6 +3,8 @@ #include "TitleBar.h" #include "TextBar.h" +#include + MainDisplay::MainDisplay (QWidget *parent) : SkinDisplay(parent) { XMMSHandler *xmmsh = XMMSHandler::getInstance (); @@ -161,6 +163,7 @@ MainDisplay::SetupPushButtons (void) m_eject = new Button (this, Skin::BTN_EJECT_0, Skin::BTN_EJECT_1); m_eject->move(136, 89); + connect (m_eject, SIGNAL(clicked()), xmmsh, SLOT(fileOpen())); } diff --git a/PlaylistList.cpp b/PlaylistList.cpp index 81de50f..b8404b9 100644 --- a/PlaylistList.cpp +++ b/PlaylistList.cpp @@ -101,7 +101,9 @@ PlaylistList::playlistChanged (QHash h) while (!m_items->isEmpty()) delete m_items->takeFirst(); - xmmsh->requestPlaylistList (); + if (signal != XMMS_PLAYLIST_CHANGED_CLEAR) { + xmmsh->requestPlaylistList (); + } } break; } diff --git a/ShadedDisplay.cpp b/ShadedDisplay.cpp index 77f2f5b..81f97d0 100644 --- a/ShadedDisplay.cpp +++ b/ShadedDisplay.cpp @@ -50,6 +50,7 @@ ShadedDisplay::ShadedDisplay (QWidget *parent) : SkinDisplay (parent) m_eject = new Button (this); m_eject->move(216, 4); m_eject->resize (9, 7); + connect (m_eject, SIGNAL(clicked()), xmmsh, SLOT(fileOpen())); connect (xmmsh, SIGNAL(playbackStatusChanged(uint)), this, SLOT(setStatus(uint))); diff --git a/XMMSHandler.cpp b/XMMSHandler.cpp index 0b984c5..17994f4 100644 --- a/XMMSHandler.cpp +++ b/XMMSHandler.cpp @@ -5,6 +5,9 @@ #include #include +#include +#include +#include XMMSHandler *XMMSHandler::singleton = NULL; @@ -46,6 +49,61 @@ XMMSHandler::XMMSHandler (void) : sigc::trackable () r = m_xmmsc->broadcast_playback_status (); r->connect (sigc::mem_fun (this, &XMMSHandler::playback_status)); + + r = m_xmmsc->broadcast_medialib_entry_changed (); + r->connect (sigc::mem_fun (this, &XMMSHandler::medialib_entry_changed)); +} + +void +XMMSHandler::fileOpen (void) +{ + QStringList files = + QFileDialog::getOpenFileNames (NULL, + "Select files to play", + QDir::homePath(), + "Music (*.mp3 *.ogg *.flac *.wav *.mpc *.mp4)"); + + if (files.count() > 0) { + playlistClear (); + } + + for (int i = 0; i < files.count(); i++) { + playlistAddURL ("file://" + files.value(i)); + } + +} + + + +void +XMMSHandler::medialib_entry_changed (XMMSResultValue *res) +{ + uint i; + res->getValue (&i); + + m_currentid = i; + + if (i > 0) { + XMMSResultDict *r = m_xmmsc->medialib_get_info (i); + r->connect (sigc::mem_fun (this, &XMMSHandler::medialib_info)); + } + + if (res->getClass() == XMMSC_RESULT_CLASS_DEFAULT) { + delete res; + } +} + +void +XMMSHandler::playlistAddURL (QString s) +{ + qDebug ("%s", s.toAscii ().constData ()); + delete m_xmmsc->playlist_add (s.toAscii ().constData ()); +} + +void +XMMSHandler::playlistClear (void) +{ + delete m_xmmsc->playlist_clear (); } void diff --git a/XMMSHandler.h b/XMMSHandler.h index e714cf1..11a40f7 100644 --- a/XMMSHandler.h +++ b/XMMSHandler.h @@ -20,15 +20,20 @@ class XMMSHandler : public QObject, public sigc::trackable { void playlist_changed (XMMSResultDict *res); void playback_status (XMMSResultValue *res); void playlist_list (XMMSResultValueList *res); + void medialib_entry_changed (XMMSResultValue *res); void requestMediainfo (uint id); void requestPlaylistList (void); void requestTrackChange (int pos); + void playlistAddURL (QString); + void playlistClear (void); + const XMMSClient *getXMMS () { return m_xmmsc; } public slots: void setPlaytime (); + void fileOpen (void); void play () { delete m_xmmsc->playback_start (); } void stop () { delete m_xmmsc->playback_stop (); }