summaryrefslogtreecommitdiffstats
path: root/kipi-plugins/kameraklient/cameralist.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kipi-plugins/kameraklient/cameralist.cpp')
-rw-r--r--kipi-plugins/kameraklient/cameralist.cpp172
1 files changed, 172 insertions, 0 deletions
diff --git a/kipi-plugins/kameraklient/cameralist.cpp b/kipi-plugins/kameraklient/cameralist.cpp
new file mode 100644
index 0000000..2477a3f
--- /dev/null
+++ b/kipi-plugins/kameraklient/cameralist.cpp
@@ -0,0 +1,172 @@
+/* ============================================================
+ * File : cameralist.cpp
+ * Author: Renchi Raju <renchi@pooh.tam.uiuc.edu>
+ * Date : 2003-02-03
+ * Description :
+ *
+ * Copyright 2003 by Renchi Raju <renchi@pooh.tam.uiuc.edu>
+
+ * 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, 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.
+ *
+ * ============================================================ */
+
+// Qt
+#include <qdom.h>
+#include <qfile.h>
+#include <qstring.h>
+#include <qtextstream.h>
+// Local
+#include "cameralist.h"
+#include "cameratype.h"
+
+namespace KIPIKameraKlientPlugin
+{
+
+CameraList* CameraList::instance_ = 0;
+
+CameraList* CameraList::instance() {
+ return instance_;
+}
+
+class CameraListPrivate {
+ public:
+ QPtrList<CameraType> clist;
+ QString file;
+ bool modified;
+};
+
+CameraList::CameraList(QObject *parent, const QString& file) : QObject(parent) {
+ d = new CameraListPrivate;
+ d->clist.setAutoDelete(true);
+ d->file = file;
+ d->modified = false;
+ instance_ = this;
+}
+
+CameraList::~CameraList() {
+ close();
+ d->clist.clear();
+ delete d;
+ instance_ = 0;
+}
+
+bool CameraList::load() {
+ d->modified = false;
+ QFile cfile(d->file);
+ if(!cfile.open(IO_ReadOnly)) {
+ return false;
+ }
+ QDomDocument doc("cameralist");
+ if(!doc.setContent(&cfile)) {
+ return false;
+ }
+ QDomElement docElem = doc.documentElement();
+ if(docElem.tagName()!="cameralist") {
+ return false;
+ }
+ for(QDomNode n = docElem.firstChild(); !n.isNull(); n = n.nextSibling()) {
+ QDomElement e = n.toElement();
+ if (e.isNull()) {
+ continue;
+ }
+ if (e.tagName() != "item") {
+ continue;
+ }
+ QString model = e.attribute("model");
+ QString port = e.attribute("port");
+ CameraType *ctype = new CameraType(model, port);
+ insertPrivate(ctype);
+ }
+ return true;
+}
+
+bool CameraList::close() {
+ // If not modified don't save the file
+ if (!d->modified) {
+ return true;
+ }
+ QDomDocument doc("cameralist");
+ doc.setContent(QString("<!DOCTYPE XMLCameraList><cameralist version=\"1.0\" client=\"kipiplugin_kameraklietnt\"/>"));
+ QDomElement docElem=doc.documentElement();
+ for (CameraType *ctype = d->clist.first(); ctype; ctype = d->clist.next()) {
+ QDomElement elem = doc.createElement("item");
+ elem.setAttribute("model", ctype->model());
+ elem.setAttribute("port", ctype->port());
+ docElem.appendChild(elem);
+ }
+ QFile cfile(d->file);
+ if (!cfile.open(IO_WriteOnly)) {
+ return false;
+ }
+ QTextStream stream(&cfile);
+ stream.setEncoding(QTextStream::UnicodeUTF8);
+ stream << doc.toString();
+ cfile.close();
+ return true;
+}
+
+void CameraList::insert(CameraType* ctype) {
+ if(!ctype) {
+ return;
+ }
+ d->modified = true;
+ insertPrivate(ctype);
+}
+
+void CameraList::remove(CameraType* ctype) {
+ if (!ctype) {
+ return;
+ }
+ d->modified = true;
+ removePrivate(ctype);
+}
+
+void CameraList::insertPrivate(CameraType* ctype) {
+ if (!ctype) {
+ return;
+ }
+ d->clist.append(ctype);
+ emit signalCameraListChanged();
+}
+
+void CameraList::removePrivate(CameraType* ctype) {
+ if (!ctype) {
+ return;
+ }
+ d->clist.remove(ctype);
+ emit signalCameraListChanged();
+}
+
+QPtrList<CameraType>* CameraList::cameraList() {
+ return &d->clist;
+}
+
+CameraType* CameraList::find(const QString& model) {
+ for (CameraType *ctype = d->clist.first(); ctype; ctype = d->clist.next()) {
+ if (ctype->model() == model) {
+ return ctype;
+ }
+ }
+ return 0;
+}
+
+void CameraList::clear() {
+ CameraType *ctype = d->clist.first();
+ while (ctype) {
+ remove(ctype);
+ ctype = d->clist.first();
+ }
+}
+
+} // NameSpace KIPIKameraKlientPlugin
+
+#include "cameralist.moc"