diff --git a/src/elisaapplication.h b/src/elisaapplication.h --- a/src/elisaapplication.h +++ b/src/elisaapplication.h @@ -40,6 +40,8 @@ class MediaPlayList; class AudioWrapper; class ManageAudioPlayer; +class ManageMediaPlayerControl; +class ManageHeaderBar; class ElisaApplicationPrivate; class ELISALIB_EXPORT ElisaApplication : public QObject @@ -88,6 +90,14 @@ READ audioControl NOTIFY audioControlChanged) + Q_PROPERTY(ManageMediaPlayerControl *playerControl + READ playerControl + NOTIFY playerControlChanged) + + Q_PROPERTY(ManageHeaderBar *manageHeaderBar + READ manageHeaderBar + NOTIFY manageHeaderBarChanged) + public: explicit ElisaApplication(QObject *parent = nullptr); @@ -117,6 +127,10 @@ ManageAudioPlayer *audioControl() const; + ManageMediaPlayerControl *playerControl() const; + + ManageHeaderBar *manageHeaderBar() const; + Q_SIGNALS: void argumentsChanged(); @@ -139,6 +153,10 @@ void audioControlChanged(); + void playerControlChanged(); + + void manageHeaderBarChanged(); + void enqueue(const QStringList &files); public Q_SLOTS: @@ -171,6 +189,10 @@ private: + void initializeModels(); + + void initializePlayer(); + void setupActions(const QString &actionName); QStringList checkFileListAndMakeAbsolute(const QStringList &filesList, const QString &workingDirectory) const; diff --git a/src/elisaapplication.cpp b/src/elisaapplication.cpp --- a/src/elisaapplication.cpp +++ b/src/elisaapplication.cpp @@ -29,6 +29,8 @@ #include "mediaplaylist.h" #include "audiowrapper.h" #include "manageaudioplayer.h" +#include "managemediaplayercontrol.h" +#include "manageheaderbar.h" #include "elisa_settings.h" #include @@ -106,6 +108,10 @@ std::unique_ptr mAudioControl; + std::unique_ptr mPlayerControl; + + std::unique_ptr mManageHeaderBar; + }; ElisaApplication::ElisaApplication(QObject *parent) : QObject(parent), d(std::make_unique(this)) @@ -271,6 +277,12 @@ void ElisaApplication::initialize() { + initializeModels(); + initializePlayer(); +} + +void ElisaApplication::initializeModels() +{ d->mMusicManager = std::make_unique(); Q_EMIT musicManagerChanged(); d->mAllAlbumsProxyModel = std::make_unique(); @@ -285,10 +297,6 @@ Q_EMIT singleAlbumProxyModelChanged(); d->mMediaPlayList = std::make_unique(); Q_EMIT mediaPlayListChanged(); - d->mAudioWrapper = std::make_unique(); - Q_EMIT audioPlayerChanged(); - d->mAudioControl = std::make_unique(); - Q_EMIT audioControlChanged(); d->mMusicManager->setElisaApplication(this); @@ -324,16 +332,25 @@ ElisaUtils::PlayListEnqueueMode, ElisaUtils::PlayListEnqueueTriggerPlay)>(&MediaPlayList::enqueue)); +} + +void ElisaApplication::initializePlayer() +{ + d->mAudioWrapper = std::make_unique(); + Q_EMIT audioPlayerChanged(); + d->mAudioControl = std::make_unique(); + Q_EMIT audioControlChanged(); + d->mPlayerControl = std::make_unique(); + Q_EMIT playerControlChanged(); + d->mManageHeaderBar = std::make_unique(); + Q_EMIT manageHeaderBarChanged(); + d->mAudioControl->setAlbumNameRole(MediaPlayList::AlbumRole); d->mAudioControl->setArtistNameRole(MediaPlayList::ArtistRole); d->mAudioControl->setTitleRole(MediaPlayList::TitleRole); d->mAudioControl->setUrlRole(MediaPlayList::ResourceRole); d->mAudioControl->setIsPlayingRole(MediaPlayList::IsPlayingRole); d->mAudioControl->setPlayListModel(d->mMediaPlayList.get()); - d->mAudioControl->setCurrentTrack(d->mMediaPlayList->currentTrack()); - - - d->mAudioWrapper->setSource(d->mAudioControl->playerSource()); QObject::connect(d->mAudioControl.get(), &ManageAudioPlayer::playerPlay, d->mAudioWrapper.get(), &AudioWrapper::play); QObject::connect(d->mAudioControl.get(), &ManageAudioPlayer::playerPause, d->mAudioWrapper.get(), &AudioWrapper::pause); @@ -355,6 +372,20 @@ QObject::connect(d->mAudioWrapper.get(), &AudioWrapper::seekableChanged, d->mAudioControl.get(), &ManageAudioPlayer::setPlayerIsSeekable); QObject::connect(d->mAudioWrapper.get(), &AudioWrapper::positionChanged, d->mAudioControl.get(), &ManageAudioPlayer::setPlayerPosition); + d->mPlayerControl->setPlayListModel(d->mMediaPlayList.get()); + QObject::connect(d->mMediaPlayList.get(), &MediaPlayList::currentTrackChanged, d->mPlayerControl.get(), &ManageMediaPlayerControl::setCurrentTrack); + QObject::connect(d->mAudioWrapper.get(), &AudioWrapper::playing, d->mPlayerControl.get(), &ManageMediaPlayerControl::playerPlaying); + QObject::connect(d->mAudioWrapper.get(), &AudioWrapper::paused, d->mPlayerControl.get(), &ManageMediaPlayerControl::playerPaused); + QObject::connect(d->mAudioWrapper.get(), &AudioWrapper::stopped, d->mPlayerControl.get(), &ManageMediaPlayerControl::playerStopped); + + d->mManageHeaderBar->setTitleRole(MediaPlayList::TitleRole); + d->mManageHeaderBar->setAlbumRole(MediaPlayList::AlbumRole); + d->mManageHeaderBar->setArtistRole(MediaPlayList::ArtistRole); + d->mManageHeaderBar->setImageRole(MediaPlayList::ImageRole); + d->mManageHeaderBar->setIsValidRole(MediaPlayList::IsValidRole); + d->mManageHeaderBar->setPlayListModel(d->mMediaPlayList.get()); + QObject::connect(d->mMediaPlayList.get(), &MediaPlayList::currentTrackChanged, d->mManageHeaderBar.get(), &ManageHeaderBar::setCurrentTrack); + if (!d->mArguments.isEmpty()) { Q_EMIT enqueue(d->mArguments); } @@ -433,4 +464,14 @@ return d->mAudioControl.get(); } +ManageMediaPlayerControl *ElisaApplication::playerControl() const +{ + return d->mPlayerControl.get(); +} + +ManageHeaderBar *ElisaApplication::manageHeaderBar() const +{ + return d->mManageHeaderBar.get(); +} + #include "moc_elisaapplication.cpp" diff --git a/src/qml/ContentView.qml b/src/qml/ContentView.qml --- a/src/qml/ContentView.qml +++ b/src/qml/ContentView.qml @@ -373,9 +373,9 @@ visible: Layout.minimumWidth != 0 - artistName: myHeaderBarManager.artist - albumName: myHeaderBarManager.album - albumArtUrl: myHeaderBarManager.image + artistName: elisa.manageHeaderBar.artist + albumName: elisa.manageHeaderBar.album + albumArtUrl: elisa.manageHeaderBar.image } } } diff --git a/src/qml/ElisaMainWindow.qml b/src/qml/ElisaMainWindow.qml --- a/src/qml/ElisaMainWindow.qml +++ b/src/qml/ElisaMainWindow.qml @@ -132,34 +132,21 @@ playListControler: elisa.mediaPlayList audioPlayerManager: elisa.audioControl player: elisa.audioPlayer - headerBarManager: myHeaderBarManager - manageMediaPlayerControl: myPlayControlManager - onRaisePlayer: - { + headerBarManager: elisa.manageHeaderBar + manageMediaPlayerControl: elisa.playerControl + onRaisePlayer: { mainWindow.show() mainWindow.raise() mainWindow.requestActivate() } + } } Connections { target: elisa.audioPlayer - onVolumeChanged: headerBar.playerControl.volume = elisa.audioPlayer.volume onMutedChanged: headerBar.playerControl.muted = elisa.audioPlayer.muted - - onPlaying: { - myPlayControlManager.playerPlaying() - } - - onPaused: { - myPlayControlManager.playerPaused() - } - - onStopped: { - myPlayControlManager.playerStopped() - } } Connections { @@ -170,26 +157,6 @@ } } - ManageHeaderBar { - id: myHeaderBarManager - - playListModel: elisa.mediaPlayList - currentTrack: elisa.mediaPlayList.currentTrack - - artistRole: MediaPlayList.ArtistRole - titleRole: MediaPlayList.TitleRole - albumRole: MediaPlayList.AlbumRole - imageRole: MediaPlayList.ImageRole - isValidRole: MediaPlayList.IsValidRole - } - - ManageMediaPlayerControl { - id: myPlayControlManager - - playListModel: elisa.mediaPlayList - currentTrack: elisa.mediaPlayList.currentTrack - } - PassiveNotification { id: messageNotification } @@ -215,11 +182,11 @@ anchors.fill: parent - tracksCount: myHeaderBarManager.remainingTracks - album: myHeaderBarManager.album - title: myHeaderBarManager.title - artist: myHeaderBarManager.artist - image: myHeaderBarManager.image + tracksCount: elisa.manageHeaderBar.remainingTracks + album: elisa.manageHeaderBar.album + title: elisa.manageHeaderBar.title + artist: elisa.manageHeaderBar.artist + image: elisa.manageHeaderBar.image ratingVisible: false @@ -229,10 +196,10 @@ playerControl.volume: persistentSettings.playControlItemVolume playerControl.muted: persistentSettings.playControlItemMuted playerControl.position: elisa.audioPlayer.position - playerControl.skipBackwardEnabled: myPlayControlManager.skipBackwardControlEnabled - playerControl.skipForwardEnabled: myPlayControlManager.skipForwardControlEnabled - playerControl.playEnabled: myPlayControlManager.playControlEnabled - playerControl.isPlaying: myPlayControlManager.musicPlaying + playerControl.skipBackwardEnabled: elisa.playerControl.skipBackwardControlEnabled + playerControl.skipForwardEnabled: elisa.playerControl.skipForwardControlEnabled + playerControl.playEnabled: elisa.playerControl.playControlEnabled + playerControl.isPlaying: elisa.playerControl.musicPlaying playerControl.onSeek: elisa.audioPlayer.seek(position) @@ -322,9 +289,7 @@ elisa.mediaPlayList.randomPlay = Qt.binding(function() { return contentView.playList.randomPlayChecked }) elisa.mediaPlayList.repeatPlay = Qt.binding(function() { return contentView.playList.repeatPlayChecked }) - myPlayControlManager.randomOrContinuePlay = Qt.binding(function() { return contentView.playList.randomPlayChecked || contentView.playList.repeatPlayChecked }) - myPlayControlManager.playListModel = Qt.binding(function() { return elisa.mediaPlayList }) - myPlayControlManager.currentTrack = Qt.binding(function() { return elisa.mediaPlayList.currentTrack }) + elisa.playerControl.randomOrContinuePlay = Qt.binding(function() { return contentView.playList.randomPlayChecked || contentView.playList.repeatPlayChecked }) if (persistentSettings.playListState) { elisa.mediaPlayList.persistentState = persistentSettings.playListState @@ -336,8 +301,6 @@ elisa.audioPlayer.muted = Qt.binding(function() { return headerBar.playerControl.muted }) elisa.audioPlayer.volume = Qt.binding(function() { return headerBar.playerControl.volume }) - volume: headerBar.playerControl.volume - mprisloader.active = true } }