summaryrefslogtreecommitdiffstats
path: root/src/widget
diff options
context:
space:
mode:
Diffstat (limited to 'src/widget')
-rw-r--r--src/widget/wtrackmenu.cpp50
-rw-r--r--src/widget/wtrackmenu.h13
-rw-r--r--src/widget/wtrackproperty.cpp5
-rw-r--r--src/widget/wtrackproperty.h13
-rw-r--r--src/widget/wtracktableview.cpp1
-rw-r--r--src/widget/wtracktableview.h2
-rw-r--r--src/widget/wtracktext.cpp5
-rw-r--r--src/widget/wtracktext.h11
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 */