From 3213fd10c91b8b4eaa9675175bdbf83ef2238ee1 Mon Sep 17 00:00:00 2001
From: ronso0 <ronso0@mixxx.org>
Date: Wed, 26 Jun 2024 14:48:22 +0200
Subject: [PATCH] (fix) Library: show Properties action in Missing and Hidden

---
 src/library/librarytablemodel.cpp                |  3 ++-
 src/library/missing_hidden/hiddentablemodel.cpp  |  4 +++-
 src/library/missing_hidden/missingtablemodel.cpp |  2 +-
 src/library/playlisttablemodel.cpp               |  3 ++-
 src/library/trackmodel.h                         |  1 +
 src/library/trackset/crate/cratetablemodel.cpp   |  3 ++-
 src/widget/wtrackmenu.cpp                        | 12 ++++++++----
 7 files changed, 19 insertions(+), 9 deletions(-)

diff --git a/src/library/librarytablemodel.cpp b/src/library/librarytablemodel.cpp
index 47b8cd6e41e..aec9a8777d6 100644
--- a/src/library/librarytablemodel.cpp
+++ b/src/library/librarytablemodel.cpp
@@ -98,5 +98,6 @@ TrackModel::Capabilities LibraryTableModel::getCapabilities() const {
             Capability::Hide |
             Capability::ResetPlayed |
             Capability::RemoveFromDisk |
-            Capability::Analyze;
+            Capability::Analyze |
+            Capability::Properties;
 }
diff --git a/src/library/missing_hidden/hiddentablemodel.cpp b/src/library/missing_hidden/hiddentablemodel.cpp
index ff87e84387d..b6026c1a759 100644
--- a/src/library/missing_hidden/hiddentablemodel.cpp
+++ b/src/library/missing_hidden/hiddentablemodel.cpp
@@ -97,7 +97,9 @@ Qt::ItemFlags HiddenTableModel::flags(const QModelIndex& index) const {
 TrackModel::Capabilities HiddenTableModel::getCapabilities() const {
     return Capability::Purge |
             Capability::Unhide |
-            Capability::RemoveFromDisk;
+            Capability::RemoveFromDisk |
+            Capability::EditMetadata |
+            Capability::Properties;
 }
 
 QString HiddenTableModel::modelKey(bool noSearch) const {
diff --git a/src/library/missing_hidden/missingtablemodel.cpp b/src/library/missing_hidden/missingtablemodel.cpp
index 1b6c077e509..400f3fc4d27 100644
--- a/src/library/missing_hidden/missingtablemodel.cpp
+++ b/src/library/missing_hidden/missingtablemodel.cpp
@@ -88,7 +88,7 @@ Qt::ItemFlags MissingTableModel::flags(const QModelIndex &index) const {
 }
 
 TrackModel::Capabilities MissingTableModel::getCapabilities() const {
-    return Capability::Purge;
+    return Capability::Purge | Capability::Properties;
 }
 
 QString MissingTableModel::modelKey(bool noSearch) const {
diff --git a/src/library/playlisttablemodel.cpp b/src/library/playlisttablemodel.cpp
index 069a460d903..b6fa62f1f07 100644
--- a/src/library/playlisttablemodel.cpp
+++ b/src/library/playlisttablemodel.cpp
@@ -373,7 +373,8 @@ TrackModel::Capabilities PlaylistTableModel::getCapabilities() const {
             Capability::ResetPlayed |
             Capability::RemoveFromDisk |
             Capability::Hide |
-            Capability::Analyze;
+            Capability::Analyze |
+            Capability::Properties;
 
     if (m_iPlaylistId !=
             m_pTrackCollectionManager->internalCollection()
diff --git a/src/library/trackmodel.h b/src/library/trackmodel.h
index 53bf53ddbc9..7825405ea4b 100644
--- a/src/library/trackmodel.h
+++ b/src/library/trackmodel.h
@@ -52,6 +52,7 @@ class TrackModel {
         RemoveCrate = 1u << 15u,
         RemoveFromDisk = 1u << 16u,
         Analyze = 1u << 17u,
+        Properties = 1u << 18u,
     };
     Q_DECLARE_FLAGS(Capabilities, Capability)
 
diff --git a/src/library/trackset/crate/cratetablemodel.cpp b/src/library/trackset/crate/cratetablemodel.cpp
index ebc16b629f9..076c5448816 100644
--- a/src/library/trackset/crate/cratetablemodel.cpp
+++ b/src/library/trackset/crate/cratetablemodel.cpp
@@ -133,7 +133,8 @@ TrackModel::Capabilities CrateTableModel::getCapabilities() const {
             Capability::ResetPlayed |
             Capability::Hide |
             Capability::RemoveFromDisk |
-            Capability::Analyze;
+            Capability::Analyze |
+            Capability::Properties;
 
     if (m_selectedCrate.isValid()) {
         Crate crate;
diff --git a/src/widget/wtrackmenu.cpp b/src/widget/wtrackmenu.cpp
index a60d7bfaa48..f9df992a90b 100644
--- a/src/widget/wtrackmenu.cpp
+++ b/src/widget/wtrackmenu.cpp
@@ -345,14 +345,16 @@ void WTrackMenu::createActions() {
                 &WTrackMenu::slotRemoveFromDisk);
     }
 
-    if (featureIsEnabled(Feature::Properties)) {
+    if (featureIsEnabled(Feature::Metadata)) {
         m_pStarRatingAction = new WStarRatingAction(this);
         m_pStarRatingAction->setObjectName("RatingAction");
         connect(m_pStarRatingAction,
                 &WStarRatingAction::ratingSet,
                 this,
                 &WTrackMenu::slotSetRating);
+    }
 
+    if (featureIsEnabled(Feature::Properties)) {
         m_pPropertiesAct = new QAction(tr("Properties"), this);
         // This is just for having the shortcut displayed next to the action
         // when the menu is invoked from the tracks table.
@@ -631,7 +633,7 @@ void WTrackMenu::setupActions() {
         addMenu(m_pBPMMenu);
     }
 
-    if (featureIsEnabled(Feature::Properties)) {
+    if (featureIsEnabled(Feature::Metadata)) {
         addAction(m_pStarRatingAction);
     }
 
@@ -1101,12 +1103,14 @@ void WTrackMenu::updateMenus() {
         m_pSelectInLibraryAct->setEnabled(enabled);
     }
 
-    if (featureIsEnabled(Feature::Properties)) {
+    if (featureIsEnabled(Feature::Metadata)) {
         // Might be needed to resize Menu to fit the star rating
         // QResizeEvent resizeEvent(QSize(), m_pStarRatingAction->sizeHint());
         // qApp->sendEvent(m_pStarRatingAction, &resizeEvent);
         m_pStarRatingAction->setRating(getCommonTrackRating());
+    }
 
+    if (featureIsEnabled(Feature::Properties)) {
         m_pPropertiesAct->setEnabled(true);
     }
 
@@ -2753,7 +2757,7 @@ bool WTrackMenu::featureIsEnabled(Feature flag) const {
     case Feature::FindOnWeb:
         return true;
     case Feature::Properties:
-        return m_pTrackModel->hasCapabilities(TrackModel::Capability::EditMetadata);
+        return m_pTrackModel->hasCapabilities(TrackModel::Capability::Properties);
     case Feature::SearchRelated:
         return m_pLibrary != nullptr;
     case Feature::SelectInLibrary: