diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2015-06-25 18:53:41 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2015-06-25 18:53:41 +0000 |
| commit | 33317ad580fd2f5981f53e866b8d1795132f32bb (patch) | |
| tree | 52f862c45fbd58b79912a555dbfaca73b22c2ee2 /src | |
| parent | af4b2444f18a4902d380313f9fc10b91e060692c (diff) | |
| download | qmmp-33317ad580fd2f5981f53e866b8d1795132f32bb.tar.gz qmmp-33317ad580fd2f5981f53e866b8d1795132f32bb.tar.bz2 qmmp-33317ad580fd2f5981f53e866b8d1795132f32bb.zip | |
formatter: added track number field
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@5184 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src')
| -rw-r--r-- | src/qmmpui/groupedcontainer.cpp | 13 | ||||
| -rw-r--r-- | src/qmmpui/groupedcontainer_p.h | 3 | ||||
| -rw-r--r-- | src/qmmpui/metadataformatter.cpp | 38 | ||||
| -rw-r--r-- | src/qmmpui/metadataformatter.h | 11 | ||||
| -rw-r--r-- | src/qmmpui/playlisttrack.cpp | 4 |
5 files changed, 44 insertions, 25 deletions
diff --git a/src/qmmpui/groupedcontainer.cpp b/src/qmmpui/groupedcontainer.cpp index 9b62d61d6..b0fb1e540 100644 --- a/src/qmmpui/groupedcontainer.cpp +++ b/src/qmmpui/groupedcontainer.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2013-2014 by Ilya Kotov * + * Copyright (C) 2013-2015 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -60,7 +60,7 @@ void GroupedContainer::addTrack(PlayListTrack *track) m_groups.append(group); m_items.append(group); m_items.append(track); - //TODO calc track number + track->setTrackNumber(trackCount() - 1); } void GroupedContainer::addTracks(QList<PlayListTrack *> tracks) @@ -358,6 +358,7 @@ bool GroupedContainer::move(QList<int> indexes, int from, int to) else { m_items.move(i,i + to - from); + swapTrackNumbers(i,i + to - from); group->trackList.move(i - firstIndex - 1, i + to - from - firstIndex - 1); } @@ -372,6 +373,7 @@ bool GroupedContainer::move(QList<int> indexes, int from, int to) else { m_items.move(indexes[i], indexes[i] + to - from); + swapTrackNumbers(indexes[i], indexes[i] + to - from); group->trackList.move(indexes[i] - firstIndex - 1, indexes[i] + to - from - firstIndex - 1); } @@ -430,6 +432,13 @@ void GroupedContainer::randomizeList() m_update = true; } +void GroupedContainer::swapTrackNumbers(int index1, int index2) +{ + int number = m_items.at(index1)->trackNumber(); + m_items.at(index1)->setTrackNumber(m_items.at(index2)->trackNumber()); + m_items.at(index2)->setTrackNumber(number); +} + void GroupedContainer::updateCache() const { if(!m_update) diff --git a/src/qmmpui/groupedcontainer_p.h b/src/qmmpui/groupedcontainer_p.h index 449493144..0f9c61a5b 100644 --- a/src/qmmpui/groupedcontainer_p.h +++ b/src/qmmpui/groupedcontainer_p.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2013-2014 by Ilya Kotov * + * Copyright (C) 2013-2015 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -65,6 +65,7 @@ public: void randomizeList(); private: + void swapTrackNumbers(int index1, int index2); void updateCache() const; QList<PlayListGroup *> m_groups; diff --git a/src/qmmpui/metadataformatter.cpp b/src/qmmpui/metadataformatter.cpp index aa24eb387..16e4336bc 100644 --- a/src/qmmpui/metadataformatter.cpp +++ b/src/qmmpui/metadataformatter.cpp @@ -27,6 +27,7 @@ Syntax: %t - title, %n - track number, %NN - 2-digit track number, +%I - track index, %g - genre, %c - comment, %C - composer, @@ -58,6 +59,7 @@ MetaDataFormatter::MetaDataFormatter(const QString &pattern) m_fieldNames.insert("NN", Param::TWO_DIGIT_TRACK); m_fieldNames.insert("l", Param::DURATION); m_fieldNames.insert("f", Param::FILE_NAME); + m_fieldNames.insert("I", Param::TRACK_INDEX); if(!pattern.isEmpty()) setPattern(pattern); @@ -88,12 +90,12 @@ const QString MetaDataFormatter::pattern() const QString MetaDataFormatter::format(const PlayListTrack *item) const { - return format(*item, item->length()); + return format(*item, item->length(), item->trackNumber()); } -QString MetaDataFormatter::format(const QMap<Qmmp::MetaData, QString> &metaData, qint64 length) const +QString MetaDataFormatter::format(const QMap<Qmmp::MetaData, QString> &metaData, qint64 length, int track) const { - return evalute(&m_nodes, &metaData, length).trimmed(); + return evalute(&m_nodes, &metaData, length, track).trimmed(); } QString MetaDataFormatter::formatLength(qint64 length) @@ -298,7 +300,7 @@ void MetaDataFormatter::parseEscape(QList<MetaDataFormatter::Node> *nodes, QStri nodes->append(node); } -QString MetaDataFormatter::evalute(const QList<Node> *nodes, const QMap<Qmmp::MetaData, QString> *metaData, qint64 length) const +QString MetaDataFormatter::evalute(const QList<Node> *nodes, const QMap<Qmmp::MetaData, QString> *metaData, qint64 length, int track) const { QString out; for(int i = 0; i < nodes->count(); ++i) @@ -307,32 +309,32 @@ QString MetaDataFormatter::evalute(const QList<Node> *nodes, const QMap<Qmmp::Me if(node.command == Node::PRINT_TEXT) { Param p = node.params.first(); - out.append(printParam(&p, metaData, length)); + out.append(printParam(&p, metaData, length, track)); } else if(node.command == Node::IF_KEYWORD) { - QString var1 = printParam(&node.params[0], metaData, length); + QString var1 = printParam(&node.params[0], metaData, length, track); if(var1.isEmpty() || var1 == "0") - out.append(printParam(&node.params[2], metaData, length)); + out.append(printParam(&node.params[2], metaData, length, track)); else - out.append(printParam(&node.params[1], metaData, length)); + out.append(printParam(&node.params[1], metaData, length, track)); } else if(node.command == Node::AND_OPERATOR) { - QString var1 = printParam(&node.params[0], metaData, length); - QString var2 = printParam(&node.params[1], metaData, length); + QString var1 = printParam(&node.params[0], metaData, length, track); + QString var2 = printParam(&node.params[1], metaData, length, track); if(!var1.isEmpty() && !var2.isEmpty()) out.append("1"); } else if(node.command == Node::OR_OPERATOR) { - QString var1 = printParam(&node.params[0], metaData, length); + QString var1 = printParam(&node.params[0], metaData, length, track); if(!var1.isEmpty()) out.append("1"); else { - QString var2 = printParam(&node.params[1], metaData, length); + QString var2 = printParam(&node.params[1], metaData, length, track); if(!var2.isEmpty()) out.append("1"); } @@ -341,18 +343,18 @@ QString MetaDataFormatter::evalute(const QList<Node> *nodes, const QMap<Qmmp::Me return out; } -QString MetaDataFormatter::printParam(MetaDataFormatter::Param *p, const QMap<Qmmp::MetaData, QString> *metaData, qint64 length) const +QString MetaDataFormatter::printParam(MetaDataFormatter::Param *p, const QMap<Qmmp::MetaData, QString> *metaData, qint64 length, int track) const { switch (p->type) { case Param::FIELD: - return printField(p->field, metaData, length); + return printField(p->field, metaData, length, track); break; case Param::TEXT: return p->text; break; case Param::NODES: - return evalute(&p->children, metaData, length); + return evalute(&p->children, metaData, length, track); break; default: break; @@ -360,7 +362,7 @@ QString MetaDataFormatter::printParam(MetaDataFormatter::Param *p, const QMap<Qm return QString(); } -QString MetaDataFormatter::printField(int field, const QMap<Qmmp::MetaData, QString> *metaData, qint64 length) const +QString MetaDataFormatter::printField(int field, const QMap<Qmmp::MetaData, QString> *metaData, qint64 length, int track) const { if(field >= Qmmp::TITLE && field <= Qmmp::URL) { @@ -392,6 +394,10 @@ QString MetaDataFormatter::printField(int field, const QMap<Qmmp::MetaData, QStr { return metaData->value(Qmmp::URL).section('/',-1); } + else if(field == Param::TRACK_INDEX) + { + return QString::number(track + 1); + } return QString(); } diff --git a/src/qmmpui/metadataformatter.h b/src/qmmpui/metadataformatter.h index d46224c1b..1a270fba6 100644 --- a/src/qmmpui/metadataformatter.h +++ b/src/qmmpui/metadataformatter.h @@ -68,7 +68,7 @@ public: * @param metaData Metadata array. * @param length Length in seconds. */ - QString format(const QMap<Qmmp::MetaData, QString> &metaData, qint64 length = 0) const; + QString format(const QMap<Qmmp::MetaData, QString> &metaData, qint64 length = 0, int track = 0) const; /*! * Returns formatted length (example: 05:02:03). * \param length Length in seconds. @@ -104,7 +104,8 @@ private: { TWO_DIGIT_TRACK = Qmmp::URL + 1, DURATION, - FILE_NAME + FILE_NAME, + TRACK_INDEX }; int field; @@ -117,9 +118,9 @@ private: void parseText(QList<Node> *nodes, QString::const_iterator *i, QString::const_iterator end); void parseEscape(QList<Node> *nodes, QString::const_iterator *i, QString::const_iterator end); - QString evalute(const QList<Node> *nodes, const QMap<Qmmp::MetaData, QString> *metaData, qint64 length) const; - QString printParam(Param *p, const QMap<Qmmp::MetaData, QString> *metaData, qint64 length) const; - QString printField(int field, const QMap<Qmmp::MetaData, QString> *metaData, qint64 length) const; + QString evalute(const QList<Node> *nodes, const QMap<Qmmp::MetaData, QString> *metaData, qint64 length, int track) const; + QString printParam(Param *p, const QMap<Qmmp::MetaData, QString> *metaData, qint64 length, int track) const; + QString printField(int field, const QMap<Qmmp::MetaData, QString> *metaData, qint64 length, int track) const; QString dumpNode(Node node) const; diff --git a/src/qmmpui/playlisttrack.cpp b/src/qmmpui/playlisttrack.cpp index e7193b37f..e8fbc7ec1 100644 --- a/src/qmmpui/playlisttrack.cpp +++ b/src/qmmpui/playlisttrack.cpp @@ -180,7 +180,9 @@ const QStringList PlayListTrack::formattedTitles() for(int column = 0; column < m_helper->columnCount(); column++) { - if(m_formattedTitles[column].isEmpty() || m_titleFormats[column] != m_helper->titleFormatter(column)->pattern()) + if(m_formattedTitles[column].isEmpty() || + m_titleFormats[column] != m_helper->titleFormatter(column)->pattern() || + m_titleFormats[column].contains("%I")) { m_titleFormats[column] = m_helper->titleFormatter(column)->pattern(); formatTitle(column); |
