11#include " library/analysis/analysisfeature.h"
22
33#include < QList>
4+ #include < QMenu>
45#include < QtDebug>
56
67#include " analyzer/analyzerscheduledtrack.h"
1314#include " util/dnd.h"
1415#include " util/logger.h"
1516#include " widget/wlibrary.h"
17+ #include " widget/wlibrarysidebar.h"
1618
1719namespace {
1820
@@ -118,9 +120,20 @@ void AnalysisFeature::bindLibraryWidget(WLibrary* libraryWidget,
118120 // Let the DlgAnalysis know whether or not analysis is active.
119121 emit analysisActive (static_cast <bool >(m_pTrackAnalysisScheduler));
120122
123+ m_pStopAction = make_parented<QAction>(tr (" Stop Analysis" ), this );
124+ connect (m_pStopAction.get (),
125+ &QAction::triggered,
126+ m_pAnalysisView,
127+ &DlgAnalysis::stopAnalysis);
128+
121129 libraryWidget->registerView (kViewName , m_pAnalysisView);
122130}
123131
132+ void AnalysisFeature::bindSidebarWidget (WLibrarySidebar* pSidebarWidget) {
133+ // store the sidebar widget pointer for later use in onRightClickChild
134+ m_pSidebarWidget = pSidebarWidget;
135+ }
136+
124137TreeItemModel* AnalysisFeature::sidebarModel () const {
125138 return m_pSidebarModel;
126139}
@@ -140,6 +153,14 @@ void AnalysisFeature::activate() {
140153 emit enableCoverArtDisplay (true );
141154}
142155
156+ void AnalysisFeature::onRightClick (const QPoint& globalPos) {
157+ if (m_pAnalysisView->isAnalysisActive ()) {
158+ QMenu menu (m_pSidebarWidget);
159+ menu.addAction (m_pStopAction.get ());
160+ menu.exec (globalPos);
161+ }
162+ }
163+
143164void AnalysisFeature::analyzeTracks (const QList<AnalyzerScheduledTrack>& tracks) {
144165 if (!m_pTrackAnalysisScheduler) {
145166 const int numAnalyzerThreads = numberOfAnalyzerThreads ();
0 commit comments