diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2008-05-26 21:26:46 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2008-05-26 21:26:46 +0000 |
| commit | 0ded49767b9cb8a9b870f10bde72c434453ea43b (patch) | |
| tree | 73c7f4d337acc0d0f8dd10c200b415223ef7db4d /src | |
| parent | a0bf7877cd6b08b686133861237f5a1e02dad2b3 (diff) | |
| download | qmmp-0ded49767b9cb8a9b870f10bde72c434453ea43b.tar.gz qmmp-0ded49767b9cb8a9b870f10bde72c434453ea43b.tar.bz2 qmmp-0ded49767b9cb8a9b870f10bde72c434453ea43b.zip | |
added PlayListItem class, removed MediaFile
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@388 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src')
| -rw-r--r-- | src/qmmpui/songinfo.cpp | 5 | ||||
| -rw-r--r-- | src/qmmpui/songinfo.h | 1 | ||||
| -rw-r--r-- | src/ui/CMakeLists.txt | 4 | ||||
| -rw-r--r-- | src/ui/eqwidget.cpp | 2 | ||||
| -rw-r--r-- | src/ui/eqwidget.h | 2 | ||||
| -rw-r--r-- | src/ui/fileloader.cpp | 6 | ||||
| -rw-r--r-- | src/ui/fileloader.h | 6 | ||||
| -rw-r--r-- | src/ui/listwidget.cpp | 8 | ||||
| -rw-r--r-- | src/ui/listwidget.h | 2 | ||||
| -rw-r--r-- | src/ui/mainwindow.cpp | 27 | ||||
| -rw-r--r-- | src/ui/mainwindow.h | 2 | ||||
| -rw-r--r-- | src/ui/playlist.cpp | 4 | ||||
| -rw-r--r-- | src/ui/playlist.h | 6 | ||||
| -rw-r--r-- | src/ui/playlistformat.cpp | 14 | ||||
| -rw-r--r-- | src/ui/playlistformat.h | 12 | ||||
| -rw-r--r-- | src/ui/playlistitem.cpp | 181 | ||||
| -rw-r--r-- | src/ui/playlistitem.h | 70 | ||||
| -rw-r--r-- | src/ui/playlistmodel.cpp | 213 | ||||
| -rw-r--r-- | src/ui/playlistmodel.h | 46 | ||||
| -rw-r--r-- | src/ui/playlisttitlebar.cpp | 2 | ||||
| -rw-r--r-- | src/ui/ui.pro | 22 |
21 files changed, 437 insertions, 198 deletions
diff --git a/src/qmmpui/songinfo.cpp b/src/qmmpui/songinfo.cpp index 178f6eee6..15d134723 100644 --- a/src/qmmpui/songinfo.cpp +++ b/src/qmmpui/songinfo.cpp @@ -115,6 +115,11 @@ const QString SongInfo::path () const return m_path; } +const QString SongInfo::fileName () const +{ + return m_path.section('/',-1); +} + const uint SongInfo::year () const { return m_numValues[YEAR]; diff --git a/src/qmmpui/songinfo.h b/src/qmmpui/songinfo.h index 0180f35a5..af49b0b67 100644 --- a/src/qmmpui/songinfo.h +++ b/src/qmmpui/songinfo.h @@ -61,6 +61,7 @@ public: const QString comment () const; const QString genre () const; const QString path () const; + const QString fileName () const; const uint year () const; const uint track () const; const uint length () const; diff --git a/src/ui/CMakeLists.txt b/src/ui/CMakeLists.txt index 094ef2db7..9ec364004 100644 --- a/src/ui/CMakeLists.txt +++ b/src/ui/CMakeLists.txt @@ -60,7 +60,7 @@ SET(ui_SRCS logscale.cpp mainvisual.cpp mainwindow.cpp - mediafile.cpp + playlistitem.cpp monostereo.cpp mp3player.cpp number.cpp @@ -116,7 +116,7 @@ SET(ui_MOC_HDRS logscale.h mainvisual.h mainwindow.h - mediafile.h + playlistitem.h monostereo.h number.h pixmapwidget.h diff --git a/src/ui/eqwidget.cpp b/src/ui/eqwidget.cpp index d86ab45d2..4375934cc 100644 --- a/src/ui/eqwidget.cpp +++ b/src/ui/eqwidget.cpp @@ -41,7 +41,7 @@ EqWidget::EqWidget ( QWidget *parent ) : PixmapWidget ( parent ) { m_skin = Skin::getPointer(); - setWindowFlags ( Qt::Dialog | Qt::FramelessWindowHint ); + setWindowFlags (Qt::Dialog | Qt::FramelessWindowHint ); setPixmap ( m_skin->getEqPart ( Skin::EQ_MAIN ) ); //setPixmap(QPixmap(275,116)); m_titleBar = new EqTitleBar ( this ); diff --git a/src/ui/eqwidget.h b/src/ui/eqwidget.h index 03719cb52..b6bf77ebf 100644 --- a/src/ui/eqwidget.h +++ b/src/ui/eqwidget.h @@ -35,7 +35,7 @@ class ToggleButton; class EQGraph; class Button; class EQPreset; -class MediaFile; +class PlayListItem; class EqWidget : public PixmapWidget { diff --git a/src/ui/fileloader.cpp b/src/ui/fileloader.cpp index fcc8f6feb..6cf71e3b2 100644 --- a/src/ui/fileloader.cpp +++ b/src/ui/fileloader.cpp @@ -20,7 +20,7 @@ #include <qmmp/decoder.h> #include "fileloader.h" -#include "mediafile.h" +#include "playlistitem.h" FileLoader::FileLoader(QObject *parent) : QThread(parent),m_files_to_load(),m_directory() @@ -44,7 +44,7 @@ void FileLoader::addFiles(const QStringList &files) foreach(QString s, files) { if (s.startsWith("http://") || Decoder::supports(s)) - emit newMediaFile(new MediaFile(s)); + emit newPlayListItem(new PlayListItem(s)); if (m_finished) return; } } @@ -63,7 +63,7 @@ void FileLoader::addDirectory(const QString& s) list << fileInfo; if (Decoder::supports(fileInfo.absoluteFilePath ())) - emit newMediaFile(new MediaFile(fileInfo.absoluteFilePath ())); + emit newPlayListItem(new PlayListItem(fileInfo.absoluteFilePath ())); if (m_finished) return; } dir.setFilter(QDir::Dirs | QDir::NoDotAndDotDot); diff --git a/src/ui/fileloader.h b/src/ui/fileloader.h index c23d1ed35..a67ec3567 100644 --- a/src/ui/fileloader.h +++ b/src/ui/fileloader.h @@ -24,12 +24,12 @@ #include <QDir> #include <QThread> -class MediaFile; +class PlayListItem; /*! * This class represents fileloader object that * processes file list in separate thread and emits - * \b newMediaFile(MediaFile*) signal for every newly + * \b newPlayListItem(PlayListItem*) signal for every newly * created media file. @author Ilya Kotov <forkotov02@hotmail.ru> */ @@ -57,7 +57,7 @@ public: */ void setDirectoryToLoad(const QString&); signals: - void newMediaFile(MediaFile*); + void newPlayListItem(PlayListItem*); protected: void addFiles(const QStringList &files); void addDirectory(const QString& s); diff --git a/src/ui/listwidget.cpp b/src/ui/listwidget.cpp index 4087c7831..14d4d16d5 100644 --- a/src/ui/listwidget.cpp +++ b/src/ui/listwidget.cpp @@ -27,7 +27,7 @@ #include <QUrl> #include <QApplication> -#include "mediafile.h" +#include "playlistitem.h" #include "textscroller.h" #include "listwidget.h" #include "skin.h" @@ -305,8 +305,8 @@ void ListWidget::updateList() } if (m_model->currentItem()) { - TextScroller::getPointer()->setText("*** "+m_model->currentItem()->title()); - parentWidget()->parentWidget()->setWindowTitle(m_model->currentItem()->title()); + TextScroller::getPointer()->setText("*** "+m_model->currentItem()->text()); + parentWidget()->parentWidget()->setWindowTitle(m_model->currentItem()->text()); } cut(); update(); @@ -476,5 +476,3 @@ void ListWidget::recenterCurrent() m_first = qMax (m_model->currentRow() - m_rows/2 + 1, 0); } } - - diff --git a/src/ui/listwidget.h b/src/ui/listwidget.h index 2f20a3bf8..6b012a930 100644 --- a/src/ui/listwidget.h +++ b/src/ui/listwidget.h @@ -35,7 +35,7 @@ class QAction; class PlayList; class PlayListModel; class Skin; -class MediaFile; +class PlayListItem; class ListWidget : public QWidget { diff --git a/src/ui/mainwindow.cpp b/src/ui/mainwindow.cpp index 4de1dfd4f..ff77f6b38 100644 --- a/src/ui/mainwindow.cpp +++ b/src/ui/mainwindow.cpp @@ -331,24 +331,9 @@ void MainWindow::showOutputState(const OutputState &st) m_generalHandler->setState(General::Playing); if (m_playListModel->currentItem()) { - SongInfo info; - FileTag *tag = m_playListModel->currentItem()->tag(); - if (tag && !tag->isEmpty()) - { - info.setValue(SongInfo::TITLE, tag->title()); - info.setValue(SongInfo::ARTIST, tag->artist()); - info.setValue(SongInfo::ALBUM, tag->album()); - info.setValue(SongInfo::COMMENT, tag->comment()); - info.setValue(SongInfo::GENRE, tag->genre()); - info.setValue(SongInfo::YEAR, tag->year()); - info.setValue(SongInfo::TRACK, tag->track()); - } - else - info.setValue(SongInfo::TITLE, m_playlist->currentItem()->title()); - info.setValue(SongInfo::LENGTH, (uint) m_playlist->currentItem()->length()); - info.setValue(SongInfo::STREAM, - m_playlist->currentItem()->path().startsWith("http://")); - info.setValue(SongInfo::PATH, m_playlist->currentItem()->path()); + SongInfo info = *m_playListModel->currentItem(); + if(info.isEmpty()) + info.setValue(SongInfo::TITLE, m_playlist->currentItem()->text()); m_generalHandler->setSongInfo(info); } break; @@ -429,7 +414,7 @@ void MainWindow::showDecoderState(const DecoderState &st) void MainWindow::changeTitle(const QString &title) { if (m_playlist->currentItem()) - m_playlist->currentItem()->changeTitle(title); + m_playlist->currentItem()->setText(title); m_playlist->listWidget()->updateList(); SongInfo info; info.setValue(SongInfo::TITLE, title); @@ -485,7 +470,7 @@ void MainWindow::addFile() return; // foreach(QString s, files) - // m_playListModel->load(new MediaFile(s)); + // m_playListModel->load(new PlayListItem(s)); m_playListModel->addFiles(files); m_lastDir = files.at(0); @@ -503,7 +488,7 @@ void MainWindow::addFile() return; /* foreach(QString s, files) - m_playListModel->load(new MediaFile(s)); + m_playListModel->load(new PlayListItem(s)); */ m_playListModel->addFiles(files); m_lastDir = files.at(0); diff --git a/src/ui/mainwindow.h b/src/ui/mainwindow.h index bdf437862..4835d5fdf 100644 --- a/src/ui/mainwindow.h +++ b/src/ui/mainwindow.h @@ -27,7 +27,7 @@ #include <qmmp/decoderfactory.h> #include "display.h" -#include "mediafile.h" +#include "playlistitem.h" #include "titlebar.h" /** diff --git a/src/ui/playlist.cpp b/src/ui/playlist.cpp index a664d421b..ce1385749 100644 --- a/src/ui/playlist.cpp +++ b/src/ui/playlist.cpp @@ -31,7 +31,7 @@ #include "skin.h" #include "listwidget.h" #include "button.h" -#include "mediafile.h" +#include "playlistitem.h" #include "playlistmodel.h" #include "playlisttitlebar.h" #include "playlistslider.h" @@ -463,7 +463,7 @@ void PlayList::setInfo (const OutputState &st,int length_current, int length_tot } } -MediaFile *PlayList::currentItem() +PlayListItem *PlayList::currentItem() { if ( m_playListModel ) return m_playListModel->currentItem(); diff --git a/src/ui/playlist.h b/src/ui/playlist.h index 4e8bdc1f8..0dd4016f4 100644 --- a/src/ui/playlist.h +++ b/src/ui/playlist.h @@ -32,7 +32,7 @@ class QMenu; class Skin; class ListWidget; -class MediaFile; +class PlayListItem; class Button; class PlayListModel; class PlayListTitleBar; @@ -50,11 +50,11 @@ class PlayList : public QWidget PlayList ( QWidget *parent = 0 ); ~PlayList(); - void load ( MediaFile * ); + void load ( PlayListItem * ); void setModel ( PlayListModel * ); void readSettings(); void setInfo ( const OutputState &,int,int ); - MediaFile *currentItem(); + PlayListItem *currentItem(); ListWidget* listWidget() const{return m_listWidget;} signals: diff --git a/src/ui/playlistformat.cpp b/src/ui/playlistformat.cpp index dc80d95c8..0486d7f78 100644 --- a/src/ui/playlistformat.cpp +++ b/src/ui/playlistformat.cpp @@ -29,7 +29,7 @@ #include "playlistformat.h" -#include "mediafile.h" +#include "playlistitem.h" bool PLSPlaylistFormat::hasFormat(const QString & f) { @@ -89,12 +89,12 @@ QStringList PLSPlaylistFormat::decode(const QString & contents) return QStringList(); } -QString PLSPlaylistFormat::encode(const QList< MediaFile * > & contents) +QString PLSPlaylistFormat::encode(const QList< PlayListItem * > & contents) { QStringList out; out << QString("[playlist]"); int counter = 1; - foreach(MediaFile* f,contents) + foreach(PlayListItem* f,contents) { QString begin = "File" + QString::number(counter) + "="; out.append(begin + f->path()); @@ -156,11 +156,11 @@ QStringList M3UPlaylistFormat::decode(const QString & contents) return QStringList(); } -QString M3UPlaylistFormat::encode(const QList< MediaFile * > & contents) +QString M3UPlaylistFormat::encode(const QList< PlayListItem * > & contents) { QStringList out; out << QString("#EXTM3U"); - foreach(MediaFile* f,contents) + foreach(PlayListItem* f,contents) { QString info = "#EXTINF:" + QString::number(f->length()) + "," + f->title(); out.append(info); @@ -212,7 +212,7 @@ QStringList XSPFPlaylistFormat::decode(const QString & contents) // Needs more work - it's better use libSpiff there and put it as plugin. -QString XSPFPlaylistFormat::encode(const QList< MediaFile * > & files) +QString XSPFPlaylistFormat::encode(const QList< PlayListItem * > & files) { QDomDocument doc; QDomElement root = doc.createElement("playlist"); @@ -227,7 +227,7 @@ QString XSPFPlaylistFormat::encode(const QList< MediaFile * > & files) QDomElement tracklist = doc.createElement("trackList"); int counter = 1; - foreach(MediaFile* f,files) + foreach(PlayListItem* f,files) { QDomElement track = doc.createElement("track"); diff --git a/src/ui/playlistformat.h b/src/ui/playlistformat.h index a87018d63..4e1de00f1 100644 --- a/src/ui/playlistformat.h +++ b/src/ui/playlistformat.h @@ -23,7 +23,7 @@ #include <QStringList> -class MediaFile; +class PlayListItem; /*! * Abstract interface for playlist formats. * @@ -40,10 +40,10 @@ public: virtual QStringList decode(const QString& contents) = 0; /*! - * Takes the list of MediaFile objects, should return string of + * Takes the list of PlayListItem objects, should return string of * encoded playlist file */ - virtual QString encode(const QList<MediaFile*>& contents) = 0; + virtual QString encode(const QList<PlayListItem*>& contents) = 0; /*! * Returns list of file extensions that current format supports @@ -71,7 +71,7 @@ public: virtual QStringList getExtensions()const; virtual bool hasFormat(const QString&); virtual QStringList decode(const QString& contents); - virtual QString encode(const QList<MediaFile*>& contents); + virtual QString encode(const QList<PlayListItem*>& contents); virtual QString name()const; protected: QStringList m_supported_formats; @@ -90,7 +90,7 @@ class M3UPlaylistFormat : public PlaylistFormat virtual QStringList getExtensions()const; virtual bool hasFormat(const QString&); virtual QStringList decode(const QString& contents); - virtual QString encode(const QList<MediaFile*>& contents); + virtual QString encode(const QList<PlayListItem*>& contents); virtual QString name()const; protected: QStringList m_supported_formats; @@ -107,7 +107,7 @@ class XSPFPlaylistFormat : public PlaylistFormat virtual QStringList getExtensions()const; virtual bool hasFormat(const QString&); virtual QStringList decode(const QString& contents); - virtual QString encode(const QList<MediaFile*>& contents); + virtual QString encode(const QList<PlayListItem*>& contents); virtual QString name()const; protected: QStringList m_supported_formats; diff --git a/src/ui/playlistitem.cpp b/src/ui/playlistitem.cpp new file mode 100644 index 000000000..ed92e4268 --- /dev/null +++ b/src/ui/playlistitem.cpp @@ -0,0 +1,181 @@ +/*************************************************************************** + * Copyright (C) 2008 by Ilya Kotov * + * forkotov02@hotmail.ru * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include <QSettings> +#include <QDir> + +#include <qmmp/decoder.h> + +#include "playlistitem.h" + +PlayListItem::PlayListItem() : SongInfo(), m_flag(FREE) +{ + m_tag = 0; +} + +PlayListItem::PlayListItem(const QString& path) : SongInfo(), m_flag(FREE) +{ + m_selected = FALSE; + m_current = FALSE; + m_tag = 0; + setValue(SongInfo::PATH, path); + setValue(SongInfo::STREAM, path.startsWith("http://")); //TODO do this inside SongInfo + QSettings settings ( QDir::homePath() +"/.qmmp/qmmprc", QSettings::IniFormat ); + m_use_meta = settings.value ("PlayList/load_metadata", TRUE).toBool(); + //format + m_format = settings.value("PlayList/title_format", "%p - %t").toString(); + if (m_use_meta && !path.startsWith("http://")) + { + m_tag = Decoder::createTag(path); + readMetadata(); + } + else + m_title = path.startsWith("http://") ? path: path.section('/',-1); + +} + +PlayListItem::~PlayListItem() +{ +} + +void PlayListItem::setSelected(bool yes) +{ + m_selected = yes; +} + +bool PlayListItem::isSelected() const +{ + return m_selected; +} + +void PlayListItem::setCurrent(bool yes) +{ + m_current = yes; +} + +bool PlayListItem::isCurrent() const +{ + return m_current; +} + +void PlayListItem::setFlag(FLAGS f) +{ + m_flag = f; +} + +PlayListItem::FLAGS PlayListItem::flag() const +{ + return m_flag; +} + +void PlayListItem::updateTags(const FileTag *tag) +{ + if (m_tag) + { + delete m_tag; + m_tag = 0; + } + if (!tag->isEmpty()) + m_tag = new FileTag(*tag); + readMetadata(); +} + +void PlayListItem::updateTags() +{ + if (path().startsWith("http://")) + return; + if (m_tag) + { + delete m_tag; + m_tag = 0; + } + m_tag = Decoder::createTag(path()); + readMetadata(); +} + +const QString PlayListItem::text() const +{ + return m_title; +} + +void PlayListItem::setText(const QString &title) +{ + m_title = title; +} + +void PlayListItem::readMetadata() +{ + //clear(); + m_title.clear(); + if(m_tag) //read length first + setValue(SongInfo::LENGTH, m_tag->length()); + if (m_use_meta && m_tag && !m_tag->isEmpty()) + { + //fill SongInfo + setValue(SongInfo::TITLE, m_tag->title()); + setValue(SongInfo::ARTIST, m_tag->artist()); + setValue(SongInfo::ALBUM, m_tag->album()); + setValue(SongInfo::COMMENT, m_tag->comment()); + setValue(SongInfo::GENRE, m_tag->genre()); + setValue(SongInfo::YEAR, m_tag->year()); + setValue(SongInfo::TRACK, m_tag->track()); + //generate playlist string + m_title = m_format; + m_title = printTag(m_title, "%p", artist()); + m_title = printTag(m_title, "%a", album()); + m_title = printTag(m_title, "%t", title()); + m_title = printTag(m_title, "%n", QString("%1").arg(track())); + m_title = printTag(m_title, "%g", genre()); + m_title = printTag(m_title, "%f", path().section('/',-1)); + m_title = printTag(m_title, "%F", path()); + m_title = printTag(m_title, "%y", QString("%1").arg(year ())); + } + if (m_title.isEmpty()) + m_title = path().startsWith("http://") ? path(): path().section('/',-1); + if(m_tag) + delete m_tag; + m_tag = 0; +} + +QString PlayListItem::printTag(QString str, QString regExp, QString tagStr) +{ + if (!tagStr.isEmpty()) + str.replace(regExp, tagStr); + else + { + //remove unused separators + int regExpPos = str.indexOf(regExp); + if (regExpPos < 0) + return str; + int nextPos = str.indexOf("%", regExpPos + 1); + if (nextPos < 0) + { + //last separator + regExpPos = m_format.lastIndexOf(regExp); + nextPos = m_format.lastIndexOf("%", regExpPos - 1); + QString lastSep = m_format.right (m_format.size() - nextPos - 2); + str.remove(lastSep); + str.remove(regExp); + } + else + str.remove ( regExpPos, nextPos - regExpPos); + } + return str; +} + diff --git a/src/ui/playlistitem.h b/src/ui/playlistitem.h new file mode 100644 index 000000000..621788a48 --- /dev/null +++ b/src/ui/playlistitem.h @@ -0,0 +1,70 @@ +/*************************************************************************** + * Copyright (C) 2008 by Ilya Kotov * + * forkotov02@hotmail.ru * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef PLAYLISTITEM_H +#define PLAYLISTITEM_H + +#include <qmmpui/songinfo.h> + +class FileTag; +/** + @author Ilya Kotov <forkotov02@hotmail.ru> +*/ +class PlayListItem : public SongInfo +{ +public: + /*! + * Current state of media file. + * FREE - instance is free and may be deleted + * EDITING - instance is currently busy in some kind of operation(tags editing etc.) + * and can't be deleted at the moment. Set flag SCHEDULED_FOR_DELETION for it + * instead of delete operator call. + */ + enum FLAGS{FREE = 0,EDITING,SCHEDULED_FOR_DELETION}; + PlayListItem(); + PlayListItem(const QString& path); + + ~PlayListItem(); + + //playlist support + void setSelected(bool yes); + bool isSelected() const; + void setCurrent(bool yes); + bool isCurrent() const; + FLAGS flag()const; + void setFlag(FLAGS); + const QString text() const; + void setText(const QString &title); + //modify functions + void updateTags(const FileTag *tag); + void updateTags(); + +private: + void readMetadata(); + QString printTag(QString str, QString regExp, QString tagStr); + QString m_title; + FileTag *m_tag; + bool m_selected; + bool m_current; + bool m_use_meta; + QString m_format; + FLAGS m_flag; +}; + +#endif diff --git a/src/ui/playlistmodel.cpp b/src/ui/playlistmodel.cpp index 85adfe6d8..22371d283 100644 --- a/src/ui/playlistmodel.cpp +++ b/src/ui/playlistmodel.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2006 by Ilya Kotov * + * Copyright (C) 2006-2008 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -35,7 +35,7 @@ #include "fileloader.h" #include "playlistmodel.h" -#include "mediafile.h" +#include "playlistitem.h" #include "playlistformat.h" #include "playstate.h" @@ -43,24 +43,24 @@ #define INVALID_ROW -1 -TagUpdater::TagUpdater(QObject* o,MediaFile* f):m_observable(o),m_file(f) +TagUpdater::TagUpdater(QObject* o,PlayListItem* item):m_observable(o),m_item(item) { - m_file->setFlag(MediaFile::EDITING); + m_item->setFlag(PlayListItem::EDITING); connect (m_observable, SIGNAL(destroyed (QObject * )),SLOT(updateTag())); connect (m_observable, SIGNAL(destroyed (QObject * )),SLOT(deleteLater())); } void TagUpdater::updateTag() { - if(m_file->flag() == MediaFile::SCHEDULED_FOR_DELETION) + if(m_item->flag() == PlayListItem::SCHEDULED_FOR_DELETION) { - delete m_file; - m_file = NULL; + delete m_item; + m_item = NULL; } else { - m_file->updateTags(); - m_file->setFlag(MediaFile::FREE); + m_item->updateTags(); + m_item->setFlag(PlayListItem::FREE); } } @@ -101,15 +101,15 @@ PlayListModel::~PlayListModel() } } -void PlayListModel::load ( MediaFile *file ) +void PlayListModel::load ( PlayListItem *item ) { - if (m_files.isEmpty()) - m_currentItem = file; + if (m_items.isEmpty()) + m_currentItem = item; - m_total_length += file->length(); - m_files << file; + m_total_length += item->length(); + m_items << item; - if (m_files.size() == 1) + if (m_items.size() == 1) emit firstAdded(); //if (!m_block_update_signals) @@ -118,15 +118,15 @@ void PlayListModel::load ( MediaFile *file ) int PlayListModel::count() { - return m_files.size(); + return m_items.size(); } -MediaFile* PlayListModel::currentItem() +PlayListItem* PlayListModel::currentItem() { - if ( m_files.isEmpty() ) + if ( m_items.isEmpty() ) return 0; else - return m_files.at ( qMin(m_files.size() - 1, m_current)); + return m_items.at ( qMin(m_items.size() - 1, m_current)); } int PlayListModel::currentRow() @@ -139,7 +139,7 @@ bool PlayListModel::setCurrent ( int c ) if ( c > count()-1 || c < 0) return FALSE; m_current = c; - m_currentItem = m_files.at(c); + m_currentItem = m_items.at(c); emit currentChanged(); emit listChanged(); return TRUE; @@ -176,17 +176,17 @@ void PlayListModel::clear() m_running_loaders.clear(); m_current = 0; - while ( !m_files.isEmpty() ) + while ( !m_items.isEmpty() ) { - MediaFile* mf = m_files.takeFirst(); + PlayListItem* mf = m_items.takeFirst(); - if(mf->flag() == MediaFile::FREE) + if(mf->flag() == PlayListItem::FREE) { delete mf; } - else if(mf->flag() == MediaFile::EDITING) + else if(mf->flag() == PlayListItem::EDITING) { - mf->setFlag(MediaFile::SCHEDULED_FOR_DELETION); + mf->setFlag(PlayListItem::SCHEDULED_FOR_DELETION); } } @@ -197,41 +197,41 @@ void PlayListModel::clear() void PlayListModel::clearSelection() { - for ( int i = 0; i<m_files.size(); ++i ) - m_files.at ( i )->setSelected ( FALSE ); + for ( int i = 0; i<m_items.size(); ++i ) + m_items.at ( i )->setSelected ( FALSE ); emit listChanged(); } QList <QString> PlayListModel::getTitles ( int b,int l ) { QList <QString> m_titles; - for ( int i = b; ( i < b + l ) && ( i < m_files.size() ); ++i ) - m_titles << m_files.at ( i )->title(); + for ( int i = b; ( i < b + l ) && ( i < m_items.size() ); ++i ) + m_titles << m_items.at ( i )->text(); return m_titles; } QList <QString> PlayListModel::getTimes ( int b,int l ) { QList <QString> m_times; - for ( int i = b; ( i < b + l ) && ( i < m_files.size() ); ++i ) - m_times << QString ( "%1" ).arg ( m_files.at ( i )->length() /60 ) +":" - +QString ( "%1" ).arg ( m_files.at ( i )->length() %60/10 ) + - QString ( "%1" ).arg ( m_files.at ( i )->length() %60%10 ); + for ( int i = b; ( i < b + l ) && ( i < m_items.size() ); ++i ) + m_times << QString ( "%1" ).arg ( m_items.at ( i )->length() /60 ) +":" + +QString ( "%1" ).arg ( m_items.at ( i )->length() %60/10 ) + + QString ( "%1" ).arg ( m_items.at ( i )->length() %60%10 ); return m_times; } bool PlayListModel::isSelected ( int row ) { - if (m_files.count() > row && row >= 0) - return m_files.at ( row )->isSelected(); + if (m_items.count() > row && row >= 0) + return m_items.at ( row )->isSelected(); return false; } void PlayListModel::setSelected ( int row, bool yes ) { - if (m_files.count() > row && row >= 0) - m_files.at ( row )->setSelected ( yes ); + if (m_items.count() > row && row >= 0) + m_items.at ( row )->setSelected ( yes ); } void PlayListModel::removeSelected() @@ -250,22 +250,22 @@ void PlayListModel::removeSelection(bool inverted) int select_after_delete = -1; - while ( !m_files.isEmpty() && i<m_files.size() ) + while ( !m_items.isEmpty() && i<m_items.size() ) { - if ( m_files.at ( i )->isSelected() ^ inverted ) + if ( m_items.at ( i )->isSelected() ^ inverted ) { - MediaFile* f = m_files.takeAt ( i ); + PlayListItem* f = m_items.takeAt ( i ); m_total_length -= f->length(); if (m_total_length < 0) m_total_length = 0; - if(f->flag() == MediaFile::FREE) + if(f->flag() == PlayListItem::FREE) { delete f; f = NULL; } - else if(f->flag() == MediaFile::EDITING) - f->setFlag(MediaFile::SCHEDULED_FOR_DELETION); + else if(f->flag() == PlayListItem::EDITING) + f->setFlag(PlayListItem::SCHEDULED_FOR_DELETION); select_after_delete = i; @@ -276,11 +276,11 @@ void PlayListModel::removeSelection(bool inverted) i++; } - if (!m_files.isEmpty()) - m_currentItem = m_files.at(m_current); + if (!m_items.isEmpty()) + m_currentItem = m_items.at(m_current); - if (select_after_delete >= m_files.count()) - select_after_delete = m_files.count() - 1; + if (select_after_delete >= m_items.count()) + select_after_delete = m_items.count() - 1; setSelected(select_after_delete,true); @@ -291,32 +291,32 @@ void PlayListModel::removeSelection(bool inverted) void PlayListModel::invertSelection() { - for ( int i = 0; i<m_files.size(); ++i ) - m_files.at ( i )->setSelected ( !m_files.at ( i )->isSelected() ); + for ( int i = 0; i<m_items.size(); ++i ) + m_items.at ( i )->setSelected ( !m_items.at ( i )->isSelected() ); emit listChanged(); } void PlayListModel::selectAll() { - for ( int i = 0; i<m_files.size(); ++i ) - m_files.at ( i )->setSelected ( TRUE ); + for ( int i = 0; i<m_items.size(); ++i ) + m_items.at ( i )->setSelected ( TRUE ); emit listChanged(); } void PlayListModel::showDetails() { - for ( int i = 0; i<m_files.size(); ++i ) + for ( int i = 0; i<m_items.size(); ++i ) { - if ( m_files.at ( i )->isSelected() ) + if ( m_items.at ( i )->isSelected() ) { - DecoderFactory *fact = Decoder::findByPath ( m_files.at ( i )->path() ); + DecoderFactory *fact = Decoder::findByPath ( m_items.at ( i )->path() ); if ( fact ) { - QObject* o = fact->showDetails ( 0, m_files.at ( i )->path() ); + QObject* o = fact->showDetails ( 0, m_items.at ( i )->path() ); if(o) { - TagUpdater *updater = new TagUpdater(o,m_files.at(i)); - m_editing_files.append(m_files.at(i)); + TagUpdater *updater = new TagUpdater(o,m_items.at(i)); + m_editing_items.append(m_items.at(i)); connect (updater, SIGNAL(destroyed (QObject * )),SIGNAL(listChanged())); } } @@ -327,7 +327,6 @@ void PlayListModel::showDetails() } - void PlayListModel::readSettings() { QSettings settings(QDir::homePath()+"/.qmmp/qmmprc", QSettings::IniFormat); @@ -338,7 +337,7 @@ void PlayListModel::readSettings() QStringList files; QByteArray line; - m_files.clear(); + m_items.clear(); while (!file.atEnd ()) { @@ -355,7 +354,7 @@ void PlayListModel::readSettings() for (int i = 0;i < preload;i++) { - load(new MediaFile(files.takeAt(0))); + load(new PlayListItem(files.takeAt(0))); } if (files.isEmpty()) @@ -377,7 +376,7 @@ void PlayListModel::writeSettings() { QFile file ( QDir::homePath() +"/.qmmp/playlist.txt" ); file.open ( QIODevice::WriteOnly ); - foreach ( MediaFile* m, m_files ) + foreach ( PlayListItem* m, m_items ) file.write ( m->path().toUtf8 () +"\n" ); file.close (); QSettings settings(QDir::homePath()+"/.qmmp/qmmprc", QSettings::IniFormat); @@ -389,9 +388,9 @@ void PlayListModel::addFile(const QString& path) if (path.isEmpty ()) return; if (path.startsWith("http://")) - load(new MediaFile(path)); + load(new PlayListItem(path)); else if (Decoder::supports(path)) - load(new MediaFile(path)); + load(new PlayListItem(path)); m_play_state->prepare(); } @@ -401,7 +400,7 @@ FileLoader * PlayListModel::createFileLoader() FileLoader* f_loader = new FileLoader(this); // f_loader->setStackSize(20 * 1024 * 1024); m_running_loaders << f_loader; - connect(f_loader,SIGNAL(newMediaFile(MediaFile*)),this,SLOT(load(MediaFile*)),Qt::QueuedConnection); + connect(f_loader,SIGNAL(newPlayListItem(PlayListItem*)),this,SLOT(load(PlayListItem*)),Qt::QueuedConnection); connect(f_loader,SIGNAL(finished()),this,SLOT(preparePlayState())); connect(f_loader,SIGNAL(finished()),f_loader,SLOT(deleteLater())); return f_loader; @@ -502,15 +501,15 @@ void PlayListModel::moveItems( int from, int to ) if (i + to - from < 0) break; else - m_files.move(i,i + to - from); + m_items.move(i,i + to - from); else for (int i = selected_rows.count() - 1; i >= 0; i--) - if (selected_rows[i] + to -from >= m_files.count()) + if (selected_rows[i] + to -from >= m_items.count()) break; else - m_files.move(selected_rows[i],selected_rows[i] + to - from); + m_items.move(selected_rows[i],selected_rows[i] + to - from); - m_current = m_files.indexOf(m_currentItem); + m_current = m_items.indexOf(m_currentItem); emit listChanged(); } @@ -535,7 +534,7 @@ int PlayListModel::topmostInSelection( int row) int PlayListModel::bottommostInSelection( int row ) { - if (row >= m_files.count() - 1) + if (row >= m_items.count() - 1) return row; for (int i = row + 1;i < count() ;i++) @@ -560,9 +559,9 @@ const SimpleSelection& PlayListModel::getSelection(int row ) QList<int> PlayListModel::getSelectedRows() const { QList<int>selected_rows; - for (int i = 0;i<m_files.count();i++) + for (int i = 0;i<m_items.count();i++) { - if (m_files[i]->isSelected()) + if (m_items[i]->isSelected()) { selected_rows.append(i); } @@ -570,14 +569,14 @@ QList<int> PlayListModel::getSelectedRows() const return selected_rows; } -QList< MediaFile * > PlayListModel::getSelectedItems() const +QList< PlayListItem * > PlayListModel::getSelectedItems() const { - QList<MediaFile*>selected_items; - for (int i = 0;i<m_files.count();i++) + QList<PlayListItem*>selected_items; + for (int i = 0;i<m_items.count();i++) { - if (m_files[i]->isSelected()) + if (m_items[i]->isSelected()) { - selected_items.append(m_files[i]); + selected_items.append(m_items[i]); } } return selected_items; @@ -585,8 +584,8 @@ QList< MediaFile * > PlayListModel::getSelectedItems() const void PlayListModel::addToQueue() { - QList<MediaFile*> selected_items = getSelectedItems(); - foreach(MediaFile* file,selected_items) + QList<PlayListItem*> selected_items = getSelectedItems(); + foreach(PlayListItem* file,selected_items) {/* if (isQueued(file)) m_queued_songs.removeAt(m_queued_songs.indexOf(file)); @@ -598,7 +597,7 @@ void PlayListModel::addToQueue() emit listChanged(); } -void PlayListModel::setQueued(MediaFile* file) +void PlayListModel::setQueued(PlayListItem* file) { if (isQueued(file)) m_queued_songs.removeAt(m_queued_songs.indexOf(file)); @@ -608,7 +607,7 @@ void PlayListModel::setQueued(MediaFile* file) emit listChanged(); } -bool PlayListModel::isQueued(MediaFile* f) const +bool PlayListModel::isQueued(PlayListItem* f) const { return m_queued_songs.contains(f); } @@ -626,19 +625,19 @@ bool PlayListModel::isEmptyQueue() const void PlayListModel::randomizeList() { - for (int i = 0;i < m_files.size();i++) - m_files.swap(qrand()%m_files.size(),qrand()%m_files.size()); + for (int i = 0;i < m_items.size();i++) + m_items.swap(qrand()%m_items.size(),qrand()%m_items.size()); - m_current = m_files.indexOf(m_currentItem); + m_current = m_items.indexOf(m_currentItem); emit listChanged(); } void PlayListModel::reverseList() { - for (int i = 0;i < m_files.size()/2;i++) - m_files.swap(i,m_files.size() - i - 1); + for (int i = 0;i < m_items.size()/2;i++) + m_items.swap(i,m_items.size() - i - 1); - m_current = m_files.indexOf(m_currentItem); + m_current = m_items.indexOf(m_currentItem); emit listChanged(); } @@ -646,71 +645,71 @@ void PlayListModel::reverseList() // First we'll implement bundle of static compare procedures // to sort items in different ways -static bool _titleLessComparator(MediaFile* s1,MediaFile* s2) +static bool _titleLessComparator(PlayListItem* s1,PlayListItem* s2) { return s1->title() < s2->title(); } -static bool _titleGreaterComparator(MediaFile* s1,MediaFile* s2) +static bool _titleGreaterComparator(PlayListItem* s1,PlayListItem* s2) { return s1->title() > s2->title(); } -static bool _pathAndFilenameLessComparator(MediaFile* s1,MediaFile* s2) +static bool _pathAndFilenameLessComparator(PlayListItem* s1,PlayListItem* s2) { return s1->path() < s2->path(); } -static bool _pathAndFilenameGreaterComparator(MediaFile* s1,MediaFile* s2) +static bool _pathAndFilenameGreaterComparator(PlayListItem* s1,PlayListItem* s2) { return s1->path() > s2->path(); } -static bool _filenameLessComparator(MediaFile* s1,MediaFile* s2) +static bool _filenameLessComparator(PlayListItem* s1,PlayListItem* s2) { QFileInfo i_s1(s1->path()); QFileInfo i_s2(s2->path()); return i_s1.baseName() < i_s2.baseName(); } -static bool _filenameGreaterComparator(MediaFile* s1,MediaFile* s2) +static bool _filenameGreaterComparator(PlayListItem* s1,PlayListItem* s2) { QFileInfo i_s1(s1->path()); QFileInfo i_s2(s2->path()); return i_s1.baseName() > i_s2.baseName(); } -static bool _dateLessComparator(MediaFile* s1,MediaFile* s2) +static bool _dateLessComparator(PlayListItem* s1,PlayListItem* s2) { return s1->year() < s2->year(); } -static bool _dateGreaterComparator(MediaFile* s1,MediaFile* s2) +static bool _dateGreaterComparator(PlayListItem* s1,PlayListItem* s2) { return s1->year() > s2->year(); } -static bool _trackLessComparator(MediaFile* s1,MediaFile* s2) +static bool _trackLessComparator(PlayListItem* s1,PlayListItem* s2) { return s1->track() < s2->track(); } -static bool _trackGreaterComparator(MediaFile* s1,MediaFile* s2) +static bool _trackGreaterComparator(PlayListItem* s1,PlayListItem* s2) { return s1->track() > s2->track(); } // This is main sort method -void PlayListModel::doSort(int sort_mode,QList<MediaFile*>& list_to_sort) +void PlayListModel::doSort(int sort_mode,QList<PlayListItem*>& list_to_sort) { - QList<MediaFile*>::iterator begin; - QList<MediaFile*>::iterator end; + QList<PlayListItem*>::iterator begin; + QList<PlayListItem*>::iterator end; begin = list_to_sort.begin(); end = list_to_sort.end(); - bool (*compareLessFunc)(MediaFile*,MediaFile*) = 0; - bool (*compareGreaterFunc)(MediaFile*,MediaFile*) = 0; + bool (*compareLessFunc)(PlayListItem*,PlayListItem*) = 0; + bool (*compareGreaterFunc)(PlayListItem*,PlayListItem*) = 0; switch (sort_mode) { @@ -752,26 +751,26 @@ void PlayListModel::doSort(int sort_mode,QList<MediaFile*>& list_to_sort) sorted_asc = false; } - m_current = m_files.indexOf(m_currentItem); + m_current = m_items.indexOf(m_currentItem); } void PlayListModel::sortSelection(int mode) { - QList<MediaFile*>selected_items = getSelectedItems(); + QList<PlayListItem*>selected_items = getSelectedItems(); QList<int>selected_rows = getSelectedRows(); doSort(mode,selected_items); for (int i = 0;i < selected_rows.count();i++) - m_files.replace(selected_rows[i],selected_items[i]); + m_items.replace(selected_rows[i],selected_items[i]); - m_current = m_files.indexOf(m_currentItem); + m_current = m_items.indexOf(m_currentItem); emit listChanged(); } void PlayListModel::sort(int mode) { - doSort(mode,m_files); + doSort(mode,m_items); emit listChanged(); } @@ -843,7 +842,7 @@ void PlayListModel::savePlaylist(const QString & f_name) if (file.open(QIODevice::WriteOnly)) { QTextStream ts(&file); - ts << prs->encode(m_files); + ts << prs->encode(m_items); file.close(); } else diff --git a/src/ui/playlistmodel.h b/src/ui/playlistmodel.h index 8fff71e72..c8d826021 100644 --- a/src/ui/playlistmodel.h +++ b/src/ui/playlistmodel.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2006 by Ilya Kotov * + * Copyright (C) 2006-2008 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -34,7 +34,7 @@ class FileLoader; @author Ilya Kotov <forkotov02@hotmail.ru> */ -class MediaFile; +class PlayListItem; class PlayState; class PlaylistFormat; class PlayListModel; @@ -71,9 +71,9 @@ class TagUpdater : public QObject { Q_OBJECT QObject* m_observable; - MediaFile* m_file; + PlayListItem* m_item; public: - TagUpdater(QObject* o,MediaFile* f); + TagUpdater(QObject* o, PlayListItem* item); protected slots: void updateTag(); }; @@ -88,14 +88,14 @@ public: ~PlayListModel(); int count(); - MediaFile* currentItem(); - int row(MediaFile* f)const + PlayListItem* currentItem(); + int row(PlayListItem* item)const { - return m_files.indexOf(f); + return m_items.indexOf(item); } - MediaFile* item(int row)const + PlayListItem* item(int row)const { - return m_files.at(row); + return m_items.at(row); } int currentRow(); bool setCurrent (int); @@ -113,7 +113,7 @@ public: /*! * Returns \b true if \b f file is in play queue, else return \b false */ - bool isQueued(MediaFile* f) const; + bool isQueued(PlayListItem* item) const; bool isRepeatableList()const { @@ -133,9 +133,9 @@ public: /*! * Returns index of \b f file in queue.e */ - int queuedIndex(MediaFile* f)const + int queuedIndex(PlayListItem* item)const { - return m_queued_songs.indexOf(f); + return m_queued_songs.indexOf(item); } /*! @@ -149,13 +149,13 @@ public: */ QList<int> getSelectedRows()const; /*! - * Returns vector of \b MediaFile pointers that are selected. + * Returns vector of \b PlayListItem pointers that are selected. */ - QList<MediaFile*> getSelectedItems()const; + QList<PlayListItem*> getSelectedItems()const; - QList<MediaFile*> items()const + QList<PlayListItem*> items()const { - return m_files; + return m_items; } /*! @@ -223,7 +223,7 @@ signals: void firstAdded(); public slots: - void load(MediaFile *); + void load(PlayListItem *); void clear(); void clearSelection(); void removeSelected(); @@ -285,7 +285,7 @@ public slots: /*! * Sets \b f media file to queue. */ - void setQueued(MediaFile* f); + void setQueued(PlayListItem* f); void preparePlayState(); @@ -294,7 +294,7 @@ private: /*! * This internal method performs sorting of \b list_to_sort list of items. */ - void doSort(int mode,QList<MediaFile*>& list_to_sort); + void doSort(int mode,QList<PlayListItem*>& list_to_sort); /*! * Returns topmost row in current selection */ @@ -324,9 +324,9 @@ private: private: - QList <MediaFile*> m_files; - QList <MediaFile*> m_editing_files; - MediaFile* m_currentItem; + QList <PlayListItem*> m_items; + QList <PlayListItem*> m_editing_items; + PlayListItem* m_currentItem; int m_current; void readSettings(); @@ -347,7 +347,7 @@ private: /*! * Songs in play queue. */ - QList<MediaFile*>m_queued_songs; + QList<PlayListItem*>m_queued_songs; QMap<QString,PlaylistFormat* > m_registered_pl_formats; diff --git a/src/ui/playlisttitlebar.cpp b/src/ui/playlisttitlebar.cpp index c7697331f..79e3a74d7 100644 --- a/src/ui/playlisttitlebar.cpp +++ b/src/ui/playlisttitlebar.cpp @@ -254,7 +254,7 @@ void PlayListTitleBar::showCurrent() { if (m_model) { - MediaFile* info = m_model->currentItem(); + PlayListItem* info = m_model->currentItem(); if (info) { m_text = QString("%1. ").arg(m_model->currentRow()+1); diff --git a/src/ui/ui.pro b/src/ui/ui.pro index e9c1db1fa..51d23ede9 100644 --- a/src/ui/ui.pro +++ b/src/ui/ui.pro @@ -20,7 +20,6 @@ HEADERS += mainwindow.h \ positionbar.h \ number.h \ playlist.h \ - mediafile.h \ listwidget.h \ playlistmodel.h \ pixmapwidget.h \ @@ -63,7 +62,8 @@ HEADERS += mainwindow.h \ visualmenu.h \ titlebarcontrol.h \ shadedvisual.h \ - shadedbar.h + shadedbar.h \ + playlistitem.h SOURCES += mainwindow.cpp \ mp3player.cpp \ @@ -75,7 +75,6 @@ SOURCES += mainwindow.cpp \ positionbar.cpp \ number.cpp \ playlist.cpp \ - mediafile.cpp \ listwidget.cpp \ playlistmodel.cpp \ pixmapwidget.cpp \ @@ -116,12 +115,13 @@ SOURCES += mainwindow.cpp \ visualmenu.cpp \ titlebarcontrol.cpp \ shadedvisual.cpp \ - shadedbar.cpp + shadedbar.cpp \ + playlistitem.cpp #Some conf to redirect intermediate stuff in separate dirs -UI_DIR=./.build/ui/ -MOC_DIR=./.build/moc/ -OBJECTS_DIR=./.build/obj +UI_DIR =./.build/ui/ +MOC_DIR =./.build/moc/ +OBJECTS_DIR =./.build/obj QT += network xml @@ -138,10 +138,10 @@ TEMPLATE = app target.path = /bin DEFINES += QMMP_VERSION=$$QMMP_VERSION -contains(CONFIG, SVN_VERSION) { -DEFINES += QMMP_STR_VERSION=\\\"$$QMMP_VERSION-svn\\\" -} else { -DEFINES += QMMP_STR_VERSION=\\\"$$QMMP_VERSION\\\" +contains(CONFIG, SVN_VERSION){ + DEFINES += QMMP_STR_VERSION=\\\"$$QMMP_VERSION-svn\\\" +}else { + DEFINES += QMMP_STR_VERSION=\\\"$$QMMP_VERSION\\\" } desktop.files = qmmp.desktop |
