#pragma once #include #include #include #include #include #include "analyzer/analyzerprogress.h" #include "preferences/usersettings.h" #include "track/track_decl.h" #include "track/trackid.h" #include "util/db/dbconnectionpool.h" #include "util/parented_ptr.h" class AnalysisFeature; class ControlObject; class CrateFeature; class ExternalTrackCollection; class LibraryControl; class LibraryFeature; class LibraryTableModel; class KeyboardEventFilter; class MixxxLibraryFeature; class PlayerManager; class PlaylistFeature; class RecordingManager; class SidebarModel; class TrackCollection; class TrackCollectionManager; class TrackModel; class WSearchLineEdit; class WLibrarySidebar; class WLibrary; // A Library class is a container for all the model-side aspects of the library. // A library widget can be attached to the Library object by calling bindLibraryWidget. class Library: public QObject { Q_OBJECT public: static const QString kConfigGroup; Library(QObject* parent, UserSettingsPointer pConfig, mixxx::DbConnectionPoolPtr pDbConnectionPool, TrackCollectionManager* pTrackCollectionManager, PlayerManager* pPlayerManager, RecordingManager* pRecordingManager); ~Library() override; void stopPendingTasks(); const mixxx::DbConnectionPoolPtr& dbConnectionPool() const { return m_pDbConnectionPool; } TrackCollectionManager* trackCollections() const; // Deprecated: Obtain directly from TrackCollectionManager TrackCollection& trackCollection(); void bindSearchboxWidget(WSearchLineEdit* pSearchboxWidget); void bindSidebarWidget(WLibrarySidebar* sidebarWidget); void bindLibraryWidget(WLibrary* libraryWidget, KeyboardEventFilter* pKeyboard); void addFeature(LibraryFeature* feature); QStringList getDirs(); int getTrackTableRowHeight() const { return m_iTrackTableRowHeight; } const QFont& getTrackTableFont() const { return m_trackTableFont; } //static Library* buildDefaultLibrary(); enum class RemovalType { KeepTracks, HideTracks, PurgeTracks }; static const int kDefaultRowHeightPx; void setFont(const QFont& font); void setRowHeight(int rowHeight); void setEditMedatataSelectedClick(bool enable); public slots: void slotShowTrackModel(QAbstractItemModel* model); void slotSwitchToView(const QString& view); void slotLoadTrack(TrackPointer pTrack); void slotLoadTrackToPlayer(TrackPointer pTrack, const QString& group, bool play); void slotLoadLocationToPlayer(const QString& location, const QString& group); void slotRefreshLibraryModels(); void slotCreatePlaylist(); void slotCreateCrate(); void slotRequestAddDir(const QString& directory); void slotRequestRemoveDir(const QString& directory, Library::RemovalType removalType); void slotRequestRelocateDir(const QString& previousDirectory, const QString& newDirectory); void onSkinLoadFinished(); signals: void showTrackModel(QAbstractItemModel* model); void switchToView(const QString& view); void loadTrack(TrackPointer pTrack); void loadTrackToPlayer(TrackPointer pTrack, const QString& group, bool play = false); void restoreSearch(const QString&); void search(const QString& text); void disableSearch(); // emit this signal to enable/disable the cover art widget void enableCoverArtDisplay(bool); void trackSelected(TrackPointer pTrack); void setTrackTableFont(const QFont& font); void setTrackTableRowHeight(int rowHeight); void setSelectedClick(bool enable); private slots: void onPlayerManagerTrackAnalyzerProgress(TrackId trackId, AnalyzerProgress analyzerProgress); void onPlayerManagerTrackAnalyzerIdle(); private: const UserSettingsPointer m_pConfig; // The Mixxx database connection pool const mixxx::DbConnectionPoolPtr m_pDbConnectionPool; const QPointer m_pTrackCollectionManager; parented_ptr m_pSidebarModel; parented_ptr m_pLibraryControl; QList m_features; const static QString m_sTrackViewName; const static QString m_sAutoDJViewName; MixxxLibraryFeature* m_pMixxxLibraryFeature; PlaylistFeature* m_pPlaylistFeature; CrateFeature* m_pCrateFeature; AnalysisFeature* m_pAnalysisFeature; QFont m_trackTableFont; int m_iTrackTableRowHeight; bool m_editMetadataSelectedClick; QScopedPointer m_pKeyNotation; };