=== modified file 'mixxx/src/library/cratefeature.cpp' --- mixxx/src/library/cratefeature.cpp 2013-04-22 19:29:54 +0000 +++ mixxx/src/library/cratefeature.cpp 2013-05-24 20:18:33 +0000 @@ -4,6 +4,7 @@ #include #include #include +#include #include "library/cratefeature.h" #include "library/parser.h" @@ -30,6 +31,15 @@ connect(m_pCreateCrateAction, SIGNAL(triggered()), this, SLOT(slotCreateCrate())); + m_pAddToAutoDJAction = new QAction(tr("Add to Auto DJ Queue (bottom)"), this); + connect(m_pAddToAutoDJAction, SIGNAL(triggered()), + this, SLOT(slotAddToAutoDJ())); + + m_pAddToAutoDJTopAction = new QAction(tr("Add to Auto DJ Queue (top)"), this); + connect(m_pAddToAutoDJTopAction, SIGNAL(triggered()), + this, SLOT(slotAddToAutoDJTop())); + + m_pDeleteCrateAction = new QAction(tr("Remove"),this); connect(m_pDeleteCrateAction, SIGNAL(triggered()), this, SLOT(slotDeleteCrate())); @@ -75,6 +85,8 @@ //delete QActions delete m_pCreateCrateAction; delete m_pDeleteCrateAction; + delete m_pAddToAutoDJAction; + delete m_pAddToAutoDJTopAction; delete m_pRenameCrateAction; delete m_pDuplicateCrateAction; delete m_pLockCrateAction; @@ -184,6 +196,8 @@ QMenu menu(NULL); menu.addAction(m_pCreateCrateAction); menu.addSeparator(); + menu.addAction(m_pAddToAutoDJAction); + menu.addAction(m_pAddToAutoDJTopAction); menu.addAction(m_pRenameCrateAction); menu.addAction(m_pDuplicateCrateAction); menu.addAction(m_pDeleteCrateAction); @@ -261,6 +275,14 @@ } } +void CrateFeature::slotAddToAutoDJ() { + addToAutoDJ(false); +} + +void CrateFeature::slotAddToAutoDJTop() { + addToAutoDJ(true); +} + void CrateFeature::slotRenameCrate() { QString oldName = m_lastRightClickedIndex.data().toString(); int crateId = m_crateDao.getCrateIdByName(oldName); @@ -374,6 +396,27 @@ } } +void CrateFeature::addToAutoDJ(bool bTop){ + if(m_lastRightClickedIndex.isValid()){ + int crateId = m_crateDao.getCrateIdByName( + m_lastRightClickedIndex.data().toString()); + if (crateId >= 0) { + QList ids=m_crateDao.getTrackListFrom(crateId); + if(ids.isEmpty()) + return; + // we need the playlist DAO since the Auto-DJ is a playlist + PlaylistDAO &playlistDAO = m_pTrackCollection->getPlaylistDAO(); + // Get the ID of the Auto-DJ playlist + int autoDJId = playlistDAO.getPlaylistIdFromName(AUTODJ_TABLE); + if (bTop) { + playlistDAO.insertTracksIntoPlaylist(ids, autoDJId, 2); + } else { + playlistDAO.appendTracksToPlaylist(ids, autoDJId); + } + } + } +} + void CrateFeature::buildCrateList() { m_crateList.clear(); QSqlTableModel crateListTableModel(this, m_pTrackCollection->getDatabase()); === modified file 'mixxx/src/library/cratefeature.h' --- mixxx/src/library/cratefeature.h 2013-02-23 10:40:40 +0000 +++ mixxx/src/library/cratefeature.h 2013-05-24 12:03:20 +0000 @@ -40,6 +40,8 @@ void slotCreateCrate(); void slotDeleteCrate(); + void slotAddToAutoDJ(); + void slotAddToAutoDJTop(); void slotRenameCrate(); void slotDuplicateCrate(); void slotToggleCrateLock(); @@ -49,6 +51,7 @@ void htmlLinkClicked(const QUrl & link); private: + void addToAutoDJ(bool bTop); QString getRootViewHtml() const; QModelIndex constructChildModel(int selected_id); void clearChildModel(); @@ -58,6 +61,8 @@ CrateDAO& m_crateDao; QAction *m_pCreateCrateAction; QAction *m_pDeleteCrateAction; + QAction *m_pAddToAutoDJAction; + QAction *m_pAddToAutoDJTopAction; QAction *m_pRenameCrateAction; QAction *m_pLockCrateAction; QAction *m_pDuplicateCrateAction; === modified file 'mixxx/src/library/dao/cratedao.cpp' --- mixxx/src/library/dao/cratedao.cpp 2013-04-22 16:37:38 +0000 +++ mixxx/src/library/dao/cratedao.cpp 2013-05-24 20:17:20 +0000 @@ -178,7 +178,7 @@ } void CrateDAO::copyCrateTracks(int sourceCrateId, int targetCrateId) { - // Query Tracks from the source Playlist + // Query Tracks from the source Crate QSqlQuery query(m_database); query.prepare("SELECT track_id FROM crate_tracks " "WHERE crate_id = :cid"); @@ -300,3 +300,23 @@ // emit(trackRemoved(crateId, trackId)); // emit(changed(crateId)); } + +QList CrateDAO::getTrackListFrom(int crateId) +{ + // Query Tracks from the source Crate + QSqlQuery query(m_database); + query.prepare("SELECT track_id FROM crate_tracks " + "WHERE crate_id = :cid"); + query.bindValue(":cid", crateId); + + if (!query.exec()) { + LOG_FAILED_QUERY(query); + return QList (); + } + + QList trackIds; + while (query.next()) { + trackIds.append(query.value(0).toInt()); + } + return trackIds; +} === modified file 'mixxx/src/library/dao/cratedao.h' --- mixxx/src/library/dao/cratedao.h 2013-02-23 10:40:40 +0000 +++ mixxx/src/library/dao/cratedao.h 2013-05-24 20:14:55 +0000 @@ -46,6 +46,8 @@ bool removeTracksFromCrate(QList ids, int crateId); // remove tracks from all crates void removeTracksFromCrates(QList ids); + // get a list of tracks from the @param crateId. Order of tracks is unspecified + QList getTrackListFrom(int crateId); signals: void added(int crateId);