示例#1
0
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;
}
示例#2
0
void BrowseTableModel::removeTrack(const QModelIndex& index) {
    if (!index.isValid()) {
        return;
    }
    QStringList trackLocations;
    trackLocations.append(getTrackLocation(index));
    removeTracks(trackLocations);
}
示例#3
0
void BrowseTableModel::removeTracks(const QModelIndexList& indices) {
    QStringList trackLocations;
    foreach (QModelIndex index, indices) {
        if (!index.isValid()) {
            continue;
        }
        trackLocations.append(getTrackLocation(index));
    }
    removeTracks(trackLocations);
}
示例#4
0
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);
}
示例#5
0
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;
    }
}
示例#6
0
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;
                }
            }
        }
    }
}
示例#7
0
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;
    }
}
示例#8
0
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;
    }
}