diff options
Diffstat (limited to 'src/widget')
-rw-r--r-- | src/widget/wtrackmenu.cpp | 50 | ||||
-rw-r--r-- | src/widget/wtrackmenu.h | 13 | ||||
-rw-r--r-- | src/widget/wtrackproperty.cpp | 5 | ||||
-rw-r--r-- | src/widget/wtrackproperty.h | 13 | ||||
-rw-r--r-- | src/widget/wtracktableview.cpp | 1 | ||||
-rw-r--r-- | src/widget/wtracktableview.h | 2 | ||||
-rw-r--r-- | src/widget/wtracktext.cpp | 5 | ||||
-rw-r--r-- | src/widget/wtracktext.h | 11 |
8 files changed, 58 insertions, 42 deletions
diff --git a/src/widget/wtrackmenu.cpp b/src/widget/wtrackmenu.cpp index df14cf72c8..4312ca939b 100644 --- a/src/widget/wtrackmenu.cpp +++ b/src/widget/wtrackmenu.cpp @@ -10,6 +10,8 @@ #include "library/crate/cratefeaturehelper.h" #include "library/dao/trackdao.h" #include "library/dao/trackschema.h" +#include "library/dlgtagfetcher.h" +#include "library/dlgtrackinfo.h" #include "library/dlgtrackmetadataexport.h" #include "library/externaltrackcollection.h" #include "library/library.h" @@ -58,6 +60,13 @@ WTrackMenu::WTrackMenu(QWidget* parent, setupActions(); } +WTrackMenu::~WTrackMenu() { + // ~QPointer() needs the definition of the wrapped type + // upon deletion! Otherwise the behavior is undefined. + // The wrapped types of some QPointer members are only + // forward declared in the header file. +} + void WTrackMenu::popup(const QPoint& pos, QAction* at) { if (getTrackPointers().empty()) { return; @@ -610,18 +619,11 @@ void WTrackMenu::loadTracks(QModelIndexList indexList) { } void WTrackMenu::loadTrack(TrackId trackId) { - // Create a QList of single track to maintain common functions - // for single and multi track selection. - TrackIdList singleItemTrackIdList; - singleItemTrackIdList.push_back(trackId); - // Use setTrackIds to set a list of single element. - loadTracks(singleItemTrackIdList); + loadTracks(TrackIdList{trackId}); } void WTrackMenu::loadTrack(QModelIndex index) { - QModelIndexList singleItemTrackIndexList; - singleItemTrackIndexList.push_back(index); - loadTracks(singleItemTrackIndexList); + loadTracks(QModelIndexList{index}); } TrackIdList WTrackMenu::getTrackIds() const { @@ -630,11 +632,16 @@ TrackIdList WTrackMenu::getTrackIds() const { const QModelIndexList indices = getTrackIndices(); trackIds.reserve(indices.size()); for (const auto& index : indices) { - trackIds.push_back(m_pTrackModel->getTrackId(index)); + const auto trackId = m_pTrackModel->getTrackId(index); + if (trackId.isValid()) { + trackIds.push_back(trackId); + } } } else { - const TrackPointerList trackPointers = getTrackPointers(); - for (const auto& pTrack : trackPointers) { + trackIds.reserve(m_pTrackPointerList.size()); + for (const auto& pTrack : m_pTrackPointerList) { + const auto trackId = pTrack->getId(); + DEBUG_ASSERT(trackId.isValid()); trackIds.push_back(pTrack->getId()); } } @@ -642,16 +649,19 @@ TrackIdList WTrackMenu::getTrackIds() const { } TrackPointerList WTrackMenu::getTrackPointers() const { - if (m_pTrackModel) { - const QModelIndexList indices = getTrackIndices(); - TrackPointerList trackPointers; - trackPointers.reserve(indices.size()); - for (const auto& index : indices) { - trackPointers.push_back(m_pTrackModel->getTrack(index)); + if (!m_pTrackModel) { + return m_pTrackPointerList; + } + const QModelIndexList indices = getTrackIndices(); + TrackPointerList trackPointers; + trackPointers.reserve(indices.size()); + for (const auto& index : indices) { + const auto pTrack = m_pTrackModel->getTrack(index); + if (pTrack) { + trackPointers.push_back(pTrack); } - return trackPointers; } - return m_pTrackPointerList; + return trackPointers; } QModelIndexList WTrackMenu::getTrackIndices() const { diff --git a/src/widget/wtrackmenu.h b/src/widget/wtrackmenu.h index baeeb2d466..8d45d87087 100644 --- a/src/widget/wtrackmenu.h +++ b/src/widget/wtrackmenu.h @@ -1,19 +1,19 @@ #pragma once #include <QMenu> +#include <QModelIndex> +#include <QPointer> #include "library/dao/playlistdao.h" -#include "library/dlgtagfetcher.h" -#include "library/dlgtrackinfo.h" -#include "library/trackmodel.h" +#include "preferences/usersettings.h" +#include "track/track.h" class ControlProxy; class DlgTagFetcher; class DlgTrackInfo; class ExternalTrackCollection; -class QAction; -class QWidget; class TrackCollectionManager; +class TrackModel; class WColorPickerAction; class WCoverArtMenu; @@ -50,8 +50,7 @@ class WTrackMenu : public QMenu { TrackCollectionManager* pTrackCollectionManager, Features flags = Feature::All, TrackModel* trackModel = nullptr); - - ~WTrackMenu() override = default; + ~WTrackMenu() override; void loadTrack(TrackId trackId); void loadTrack(QModelIndex index); diff --git a/src/widget/wtrackproperty.cpp b/src/widget/wtrackproperty.cpp index b657b5db19..d1e1cdfcf6 100644 --- a/src/widget/wtrackproperty.cpp +++ b/src/widget/wtrackproperty.cpp @@ -2,6 +2,7 @@ #include <QUrl> #include "control/controlobject.h" +#include "widget/wtrackmenu.h" #include "widget/wtrackproperty.h" #include "util/dnd.h" @@ -29,6 +30,10 @@ WTrackProperty::WTrackProperty(QWidget* pParent, setAcceptDrops(true); } +WTrackProperty::~WTrackProperty() { + // Required to allow forward declaration of WTrackMenu in header +} + void WTrackProperty::setup(const QDomNode& node, const SkinContext& context) { WLabel::setup(node, context); diff --git a/src/widget/wtrackproperty.h b/src/widget/wtrackproperty.h index 47b7f9ce23..138026d758 100644 --- a/src/widget/wtrackproperty.h +++ b/src/widget/wtrackproperty.h @@ -1,5 +1,4 @@ -#ifndef WTRACKPROPERTY_H -#define WTRACKPROPERTY_H +#pragma once #include <QDragEnterEvent> #include <QDropEvent> @@ -11,7 +10,9 @@ #include "util/parented_ptr.h" #include "widget/trackdroptarget.h" #include "widget/wlabel.h" -#include "widget/wtrackmenu.h" + +class TrackCollectionManager; +class WTrackMenu; class WTrackProperty : public WLabel, public TrackDropTarget { Q_OBJECT @@ -21,8 +22,7 @@ class WTrackProperty : public WLabel, public TrackDropTarget { UserSettingsPointer pConfig, TrackCollectionManager* pTrackCollectionManager, const char* group); - - ~WTrackProperty() override = default; + ~WTrackProperty() override; void setup(const QDomNode& node, const SkinContext& context) override; @@ -52,6 +52,3 @@ signals: const parented_ptr<WTrackMenu> m_pTrackMenu; }; - - -#endif /* WTRACKPROPERTY_H */ diff --git a/src/widget/wtracktableview.cpp b/src/widget/wtracktableview.cpp index 17db5f2af0..c7c6742dcf 100644 --- a/src/widget/wtracktableview.cpp +++ b/src/widget/wtracktableview.cpp @@ -21,6 +21,7 @@ #include "util/assert.h" #include "util/dnd.h" #include "util/time.h" +#include "widget/wtrackmenu.h" #include "widget/wtracktableviewheader.h" namespace { diff --git a/src/widget/wtracktableview.h b/src/widget/wtracktableview.h index 3ea2d38256..3d7a41dfd0 100644 --- a/src/widget/wtracktableview.h +++ b/src/widget/wtracktableview.h @@ -12,13 +12,13 @@ #include "util/duration.h" #include "util/parented_ptr.h" #include "widget/wlibrarytableview.h" -#include "widget/wtrackmenu.h" class ControlProxy; class DlgTagFetcher; class DlgTrackInfo; class TrackCollectionManager; class ExternalTrackCollection; +class WTrackMenu; const QString WTRACKTABLEVIEW_VSCROLLBARPOS_KEY = "VScrollBarPos"; /** ConfigValue key for QTable vertical scrollbar position */ const QString LIBRARY_CONFIGVALUE = "[Library]"; /** ConfigValue "value" (wtf) for library stuff */ diff --git a/src/widget/wtracktext.cpp b/src/widget/wtracktext.cpp index 359f98412c..edf135a4ee 100644 --- a/src/widget/wtracktext.cpp +++ b/src/widget/wtracktext.cpp @@ -3,6 +3,7 @@ #include <QUrl> #include "control/controlobject.h" +#include "widget/wtrackmenu.h" #include "widget/wtracktext.h" #include "util/dnd.h" @@ -30,6 +31,10 @@ WTrackText::WTrackText(QWidget* pParent, setAcceptDrops(true); } +WTrackText::~WTrackText() { + // Required to allow forward declaration of WTrackMenu in header +} + void WTrackText::slotTrackLoaded(TrackPointer track) { if (track) { m_pCurrentTrack = track; diff --git a/src/widget/wtracktext.h b/src/widget/wtracktext.h index c726d63fd0..81f7b77c56 100644 --- a/src/widget/wtracktext.h +++ b/src/widget/wtracktext.h @@ -1,5 +1,4 @@ -#ifndef WTRACKTEXT_H -#define WTRACKTEXT_H +#pragma once #include <QDragEnterEvent> #include <QDropEvent> @@ -10,7 +9,9 @@ #include "util/parented_ptr.h" #include "widget/trackdroptarget.h" #include "widget/wlabel.h" -#include "widget/wtrackmenu.h" + +class TrackCollectionManager; +class WTrackMenu; class WTrackText : public WLabel, public TrackDropTarget { Q_OBJECT @@ -20,6 +21,7 @@ class WTrackText : public WLabel, public TrackDropTarget { UserSettingsPointer pConfig, TrackCollectionManager* pTrackCollectionManager, const char* group); + ~WTrackText() override; signals: void trackDropped(QString fileName, QString group) override; @@ -45,6 +47,3 @@ class WTrackText : public WLabel, public TrackDropTarget { TrackPointer m_pCurrentTrack; const parented_ptr<WTrackMenu> m_pTrackMenu; }; - - -#endif /* WTRACKTEXT_H */ |