#pragma once #include #include #include #include #include #include #include #include #include "library/trackset/basetracksetfeature.h" #include "library/trackset/crate/cratestorage.h" #include "library/trackset/crate/cratetablemodel.h" #include "library/treeitemmodel.h" #include "preferences/usersettings.h" #include "track/track_decl.h" #include "util/parented_ptr.h" // forward declaration(s) class Library; class WLibrarySidebar; class CrateFeature : public BaseTrackSetFeature { Q_OBJECT public: CrateFeature(Library* pLibrary, UserSettingsPointer pConfig); ~CrateFeature() override = default; QVariant title() override; QIcon getIcon() override; bool dropAcceptChild(const QModelIndex& index, QList urls, QObject* pSource) override; bool dragMoveAcceptChild(const QModelIndex& index, QUrl url) override; void bindLibraryWidget(WLibrary* libraryWidget, KeyboardEventFilter* keyboard) override; void bindSidebarWidget(WLibrarySidebar* pSidebarWidget) override; TreeItemModel* getChildModel() override; public slots: void activateChild(const QModelIndex& index) override; void onRightClick(const QPoint& globalPos) override; void onRightClickChild(const QPoint& globalPos, QModelIndex index) override; void slotCreateCrate(); #ifdef __ENGINEPRIME__ signals: void exportAllCrates(); void exportCrate(CrateId crateId); #endif private slots: void slotDeleteCrate(); void slotRenameCrate(); void slotDuplicateCrate(); void slotAutoDjTrackSourceChanged(); void slotToggleCrateLock(); void slotImportPlaylist(); void slotImportPlaylistFile(const QString& playlist_file); void slotCreateImportCrate(); void slotExportPlaylist(); // Copy all of the tracks in a crate to a new directory (like a thumbdrive). void slotExportTrackFiles(); #ifdef __ENGINEPRIME__ void slotExportAllCrates(); void slotExportCrate(); #endif void slotAnalyzeCrate(); void slotCrateTableChanged(CrateId crateId); void slotCrateContentChanged(CrateId crateId); void htmlLinkClicked(const QUrl& link); void slotTrackSelected(TrackPointer pTrack); void slotResetSelectedTrack(); void slotUpdateCrateLabels(const QSet& updatedCrateIds); private: void initActions(); void connectLibrary(Library* pLibrary); void connectTrackCollection(); bool activateCrate(CrateId crateId); std::unique_ptr newTreeItemForCrateSummary( const CrateSummary& crateSummary); void updateTreeItemForCrateSummary( TreeItem* pTreeItem, const CrateSummary& crateSummary) const; QModelIndex rebuildChildModel(CrateId selectedCrateId = CrateId()); void updateChildModel(const QSet& updatedCrateIds); CrateId crateIdFromIndex(const QModelIndex& index) const; QModelIndex indexFromCrateId(CrateId crateId) const; bool readLastRightClickedCrate(Crate* pCrate) const; QString formatRootViewHtml() const; const QIcon m_cratesIcon; const QIcon m_lockedCrateIcon; TrackCollection* const m_pTrackCollection; CrateTableModel m_crateTableModel; QModelIndex m_lastRightClickedIndex; TrackPointer m_pSelectedTrack; parented_ptr m_pCreateCrateAction; parented_ptr m_pDeleteCrateAction; parented_ptr m_pRenameCrateAction; parented_ptr m_pLockCrateAction; parented_ptr m_pDuplicateCrateAction; parented_ptr m_pAutoDjTrackSourceAction; parented_ptr m_pImportPlaylistAction; parented_ptr m_pCreateImportPlaylistAction; parented_ptr m_pExportPlaylistAction; parented_ptr m_pExportTrackFilesAction; #ifdef __ENGINEPRIME__ parented_ptr m_pExportAllCratesAction; parented_ptr m_pExportCrateAction; #endif parented_ptr m_pAnalyzeCrateAction; QPointer m_pSidebarWidget; };