Added playlist actions (insert, delete, move up, move down), with only insert working...
[kworship.git] / kworship / archive / KwDataFile.cpp
blobcda1c772c9752c34693132341e0055db4eb65409
1 /***************************************************************************
2 * This file is part of KWorship. *
3 * Copyright 2008 James Hogan <james@albanarts.com> *
4 * *
5 * KWorship is free software: you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation, either version 2 of the License, or *
8 * (at your option) any later version. *
9 * *
10 * KWorship is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
14 * *
15 * You should have received a copy of the GNU General Public License *
16 * along with KWorship. If not, write to the Free Software Foundation, *
17 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
18 ***************************************************************************/
20 /**
21 * @file KwDataFile.cpp
22 * @brief A KWorship XML data file.
23 * @author James Hogan <james@albanarts.com>
26 #include "KwDataFile.h"
27 #include "KwResourceManager.h"
28 #include "KwPlaylistList.h"
30 #include <QDomDocument>
33 * Constructors + destructor
36 /// Default constructor.
37 KwDataFile::KwDataFile()
38 : m_domDocument(new QDomDocument())
40 QDomElement rootNode = m_domDocument->createElement("kworship");
41 m_domDocument->appendChild(rootNode);
44 /// Destructor.
45 KwDataFile::~KwDataFile()
47 delete m_domDocument;
51 * Individual playlist items
54 /** Insert a set of playlist items.
55 * @param items List of playlist items to insert.
56 * @param resources Resource manager.
58 void KwDataFile::insertPlaylistItems(const QList<KwPlaylistItem*>& items, KwResourceManager* resourceManager)
60 QDomElement root = m_domDocument->documentElement();
62 QDomElement children = m_domDocument->createElement("playlist_items");
63 root.appendChild(children);
65 foreach (const KwPlaylistItem* item, items)
67 item->exportToDom(*m_domDocument, children, resourceManager);
71 /** Create a set of playlist items from the data.
72 * @param resources Resource manager.
73 * @returns Newly created playlist items which the user must delete.
75 QList<KwPlaylistItem*> KwDataFile::extractPlaylistItems(KwResourceManager* resourceManager) const
77 QDomElement root = m_domDocument->documentElement();
78 QList<KwPlaylistItem*> items;
80 QDomElement list = root.firstChildElement("playlist_items");
81 while (!list.isNull())
83 QDomNodeList children = list.childNodes();
84 for (int i = 0; i < children.count(); ++i)
86 QDomElement child = children.item(i).toElement();
87 if (!child.isNull())
89 KwPlaylistItem* item = KwPlaylistItem::createFromDom(child, resourceManager);
90 if (0 != item)
92 items << item;
96 list = list.nextSiblingElement("playlist_items");
99 return items;
103 * Playlists
106 /// Insert a playlist.
107 void KwDataFile::insertPlaylist(const KwPlaylistList* playlist, KwResourceManager* resourceManager)
109 QDomElement root = m_domDocument->documentElement();
111 QDomElement playlistElement = m_domDocument->createElement("playlist");
112 root.appendChild(playlistElement);
114 playlist->exportToDom(*m_domDocument, playlistElement, resourceManager);
117 /// Create a playlist object from the data.
118 KwPlaylistList* KwDataFile::extractPlaylist(KwResourceManager* resourceManager) const
120 QDomElement root = m_domDocument->documentElement();
122 QDomElement playlistElement = root.firstChildElement("playlist");
123 if (!playlistElement.isNull())
125 QDomElement playlistItemElement = playlistElement.firstChildElement("playlist_item");
126 if (playlistItemElement.attribute("type") == "list")
128 return new KwPlaylistList(playlistItemElement, resourceManager);
132 return 0;
136 * Main resource interface
139 #include <QtDebug>
140 void KwDataFile::addResource(const KwResourceLink* link)
142 // Basically don't do anything, but perhaps report it
143 qDebug() << __PRETTY_FUNCTION__ << "(" << link << ") - Ignoring";
147 * Reading and writing
150 /// Read from device.
151 void KwDataFile::readFrom(QIODevice* device)
153 m_domDocument->setContent(device);
156 /// Write to stream.
157 void KwDataFile::writeTo(QTextStream& stream) const
159 m_domDocument->save(stream, 0);