--- /dev/null
+#ifndef XMLCONTROLER_H
+#define XMLCONTROLER_H
+
+#include <QObject>
+#include <QtXml>
+
+#include "contactwidgetitem.h"
+#include "itemobserver.h"
+
+class XmlControler : public QObject
+{
+ Q_OBJECT
+public:
+ static XmlControler* getInstance();
+ ~XmlControler();
+
+ void setItemObserver( ItemObserver *observer );
+ void setItemSelectObserver( ItemSelectObserver *observer );
+
+ bool newXml( const QString &filename );
+ bool newXml( QIODevice *device );
+
+ bool readXml( const QString &filename );
+ bool readXml( QIODevice *device );
+
+ bool writeXml( QIODevice *device );
+ bool writeXml();
+
+ void closeXmlFile();
+
+ bool createGroup(const QString &groupname);
+ bool createContact(const QString &group, ItemListPtr contacts);
+ bool createContact(const QString &group, Item *contact);
+ bool createContact(QDomNode *group, Item *contact);
+
+ bool removeGroup(const QString &groupname);
+ bool removeContact(const QString &group, Item *contact);
+ bool removeContact(QDomNode group, Item *contact);
+ bool removeContact( Item *contact );
+ bool removeContactFromGroup( ItemListPtr items, const QString &groupname );
+ bool removeContactFromGroup( ItemListPtr items );
+
+ void getAllContactItems();
+ void getAllContactItemsFromGroup( QString groupname );
+
+ QStringList getAllGroupNames();
+
+
+private:
+ static XmlControler* instance;
+ XmlControler( QObject *parent = 0 );
+
+ bool createAllContacts();
+ QDomNode findGroup(const QString &groupname);
+ QDomNode findContact(const QString &groupname, Item *contact);
+ QDomNode findContact(QDomNode group, Item *contact);
+
+ bool cleanAllContacts();
+ bool cleanAllContactsGroup();
+
+private:
+ ItemObserver *itemObserver;
+ ItemSelectObserver *itemSelectObserver;
+
+ QDomDocument m_DomDoc;
+
+ ItemListPtr all_contacts_items;
+ ItemListPtr all_contacts_items_group;
+
+ QFile *m_XmlFileOut;
+ QFile *m_XmlFileIn;
+ QString m_filename;
+
+ bool foundgroup;
+ bool foundcontact;
+
+ QString old_groupname;
+
+Q_SIGNALS:
+
+public Q_SLOTS:
+
+};
+
+#endif // XMLCONTROLER_H