aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2015-06-25 18:53:41 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2015-06-25 18:53:41 +0000
commit33317ad580fd2f5981f53e866b8d1795132f32bb (patch)
tree52f862c45fbd58b79912a555dbfaca73b22c2ee2 /src
parentaf4b2444f18a4902d380313f9fc10b91e060692c (diff)
downloadqmmp-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.cpp13
-rw-r--r--src/qmmpui/groupedcontainer_p.h3
-rw-r--r--src/qmmpui/metadataformatter.cpp38
-rw-r--r--src/qmmpui/metadataformatter.h11
-rw-r--r--src/qmmpui/playlisttrack.cpp4
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);