QMimeData* BrowseTableModel::mimeData(const QModelIndexList &indexes) const { QMimeData *mimeData = new QMimeData(); QList<QUrl> urls; // Ok, so the list of indexes we're given contains separates indexes for // each column, so even if only one row is selected, we'll have like 7 // indexes. We need to only count each row once: QList<int> rows; foreach (QModelIndex index, indexes) { if (index.isValid()) { if (!rows.contains(index.row())) { rows.push_back(index.row()); QUrl url = DragAndDropHelper::urlFromLocation(getTrackLocation(index)); if (!url.isValid()) { qDebug() << "ERROR invalid url" << url; continue; } urls.append(url); } } } mimeData->setUrls(urls); return mimeData; }
void BrowseTableModel::removeTrack(const QModelIndex& index) { if (!index.isValid()) { return; } QStringList trackLocations; trackLocations.append(getTrackLocation(index)); removeTracks(trackLocations); }
void BrowseTableModel::removeTracks(const QModelIndexList& indices) { QStringList trackLocations; foreach (QModelIndex index, indices) { if (!index.isValid()) { continue; } trackLocations.append(getTrackLocation(index)); } removeTracks(trackLocations); }
TrackPointer BrowseTableModel::getTrack(const QModelIndex& index) const { QString track_location = getTrackLocation(index); if (m_pRecordingManager->getRecordingLocation() == track_location) { QMessageBox::critical( 0, tr("Mixxx Library"), tr("Could not load the following file because" " it is in use by Mixxx or another application.") + "\n" +track_location); return TrackPointer(); } return m_pTrackCollection->getTrackDAO() .getOrAddTrack(track_location, true, NULL); }
Qt::ItemFlags BrowseTableModel::flags(const QModelIndex &index) const { Qt::ItemFlags defaultFlags = QAbstractItemModel::flags(index); // Enable dragging songs from this data model to elsewhere (like the // waveform widget to load a track into a Player). defaultFlags |= Qt::ItemIsDragEnabled; QString track_location = getTrackLocation(index); int column = index.column(); if (isTrackInUse(track_location) || column == COLUMN_FILENAME || column == COLUMN_BITRATE || column == COLUMN_DURATION || column == COLUMN_TYPE) { return defaultFlags; } else { return defaultFlags | Qt::ItemIsEditable; } }
void BrowseTableModel::trackLoaded(QString group, TrackPointer pTrack) { if (group == m_previewDeckGroup) { for (int row = 0; row < rowCount(); ++row) { QModelIndex i = index(row, COLUMN_PREVIEW); if (i.data().toBool()) { QStandardItem* item = itemFromIndex(i); item->setText("0"); } } if (pTrack) { for (int row = 0; row < rowCount(); ++row) { QModelIndex i = index(row, COLUMN_PREVIEW); QString location = getTrackLocation(i); if (location == pTrack->getLocation()) { QStandardItem* item = itemFromIndex(i); item->setText("1"); break; } } } } }
bool BrowseTableModel::setData(const QModelIndex &index, const QVariant &value, int role) { Q_UNUSED(role); if (!index.isValid()) { return false; } qDebug() << "BrowseTableModel::setData(" << index.data() << ")"; int row = index.row(); int col = index.column(); QString track_location = getTrackLocation(index); AudioTagger tagger(track_location); // set tagger information tagger.setArtist(this->index(row, COLUMN_ARTIST).data().toString()); tagger.setTitle(this->index(row, COLUMN_TITLE).data().toString()); tagger.setAlbum(this->index(row, COLUMN_ALBUM).data().toString()); tagger.setKey(this->index(row, COLUMN_KEY).data().toString()); tagger.setBpm(this->index(row, COLUMN_BPM).data().toString()); tagger.setComment(this->index(row, COLUMN_COMMENT).data().toString()); tagger.setTracknumber( this->index(row, COLUMN_TRACK_NUMBER).data().toString()); tagger.setYear(this->index(row, COLUMN_YEAR).data().toString()); tagger.setGenre(this->index(row, COLUMN_GENRE).data().toString()); tagger.setComposer(this->index(row, COLUMN_COMPOSER).data().toString()); // check if one the item were edited if (col == COLUMN_ARTIST) { tagger.setArtist(value.toString()); } else if (col == COLUMN_TITLE) { tagger.setTitle(value.toString()); } else if (col == COLUMN_ALBUM) { tagger.setAlbum(value.toString()); } else if (col == COLUMN_BPM) { tagger.setBpm(value.toString()); } else if (col == COLUMN_KEY) { tagger.setKey(value.toString()); } else if (col == COLUMN_TRACK_NUMBER) { tagger.setTracknumber(value.toString()); } else if (col == COLUMN_COMMENT) { tagger.setComment(value.toString()); } else if (col == COLUMN_GENRE) { tagger.setGenre(value.toString()); } else if (col == COLUMN_COMPOSER) { tagger.setComposer(value.toString()); } else if (col == COLUMN_YEAR) { tagger.setYear(value.toString()); } QStandardItem* item = itemFromIndex(index); if (tagger.save()) { // Modify underlying interalPointer object item->setText(value.toString()); item->setToolTip(item->text()); return true; } else { // reset to old value in error item->setText(index.data().toString()); item->setToolTip(item->text()); QMessageBox::critical( 0, tr("Mixxx Library"), tr("Could not update file metadata.") + "\n" +track_location); return false; } }
bool BrowseTableModel::setData(const QModelIndex &index, const QVariant &value, int role) { Q_UNUSED(role); if (!index.isValid()) { return false; } qDebug() << "BrowseTableModel::setData(" << index.data() << ")"; int row = index.row(); int col = index.column(); mixxx::TrackMetadata trackMetadata; // set tagger information trackMetadata.refAlbumInfo().setTitle(this->index(row, COLUMN_ALBUM).data().toString()); trackMetadata.refAlbumInfo().setArtist(this->index(row, COLUMN_ALBUMARTIST).data().toString()); trackMetadata.refTrackInfo().setArtist(this->index(row, COLUMN_ARTIST).data().toString()); trackMetadata.refTrackInfo().setTitle(this->index(row, COLUMN_TITLE).data().toString()); trackMetadata.refTrackInfo().setKey(this->index(row, COLUMN_KEY).data().toString()); trackMetadata.refTrackInfo().setBpm(mixxx::Bpm(this->index(row, COLUMN_BPM).data().toDouble())); trackMetadata.refTrackInfo().setComment(this->index(row, COLUMN_COMMENT).data().toString()); trackMetadata.refTrackInfo().setTrackNumber(this->index(row, COLUMN_TRACK_NUMBER).data().toString()); trackMetadata.refTrackInfo().setYear(this->index(row, COLUMN_YEAR).data().toString()); trackMetadata.refTrackInfo().setGenre(this->index(row, COLUMN_GENRE).data().toString()); trackMetadata.refTrackInfo().setComposer(this->index(row, COLUMN_COMPOSER).data().toString()); trackMetadata.refTrackInfo().setGrouping(this->index(row, COLUMN_GROUPING).data().toString()); // check if one the item were edited if (col == COLUMN_ARTIST) { trackMetadata.refTrackInfo().setArtist(value.toString()); } else if (col == COLUMN_TITLE) { trackMetadata.refTrackInfo().setTitle(value.toString()); } else if (col == COLUMN_ALBUM) { trackMetadata.refAlbumInfo().setTitle(value.toString()); } else if (col == COLUMN_BPM) { trackMetadata.refTrackInfo().setBpm(mixxx::Bpm(value.toDouble())); } else if (col == COLUMN_KEY) { trackMetadata.refTrackInfo().setKey(value.toString()); } else if (col == COLUMN_TRACK_NUMBER) { trackMetadata.refTrackInfo().setTrackNumber(value.toString()); } else if (col == COLUMN_COMMENT) { trackMetadata.refTrackInfo().setComment(value.toString()); } else if (col == COLUMN_GENRE) { trackMetadata.refTrackInfo().setGenre(value.toString()); } else if (col == COLUMN_COMPOSER) { trackMetadata.refTrackInfo().setComposer(value.toString()); } else if (col == COLUMN_YEAR) { trackMetadata.refTrackInfo().setYear(value.toString()); } else if (col == COLUMN_ALBUMARTIST) { trackMetadata.refAlbumInfo().setArtist(value.toString()); } else if (col == COLUMN_GROUPING) { trackMetadata.refTrackInfo().setGrouping(value.toString()); } else { qWarning() << "BrowseTableModel::setData(): no tagger column"; return false; } QStandardItem* item = itemFromIndex(index); QString track_location(getTrackLocation(index)); if (mixxx::MetadataSource::ExportResult::Succeeded == mixxx::MetadataSourceTagLib(track_location).exportTrackMetadata(trackMetadata).first) { // Modify underlying interalPointer object item->setText(value.toString()); item->setToolTip(item->text()); return true; } else { // reset to old value in error item->setText(index.data().toString()); item->setToolTip(item->text()); QMessageBox::critical( 0, tr("Mixxx Library"), tr("Could not update file metadata.") + "\n" +track_location); return false; } }