summaryrefslogtreecommitdiffabout
path: root/libkcal/customproperties.cpp
authorzautrix <zautrix>2004-06-26 19:01:18 (UTC)
committer zautrix <zautrix>2004-06-26 19:01:18 (UTC)
commitb9aad1f15dc600e4dbe4c62d3fcced6363188ba3 (patch) (side-by-side diff)
tree2c3d4004fb21c72cba65793859f9bcd8ffd3a49c /libkcal/customproperties.cpp
downloadkdepimpi-b9aad1f15dc600e4dbe4c62d3fcced6363188ba3.zip
kdepimpi-b9aad1f15dc600e4dbe4c62d3fcced6363188ba3.tar.gz
kdepimpi-b9aad1f15dc600e4dbe4c62d3fcced6363188ba3.tar.bz2
Initial revision
Diffstat (limited to 'libkcal/customproperties.cpp') (more/less context) (show whitespace changes)
-rw-r--r--libkcal/customproperties.cpp114
1 files changed, 114 insertions, 0 deletions
diff --git a/libkcal/customproperties.cpp b/libkcal/customproperties.cpp
new file mode 100644
index 0000000..adc1710
--- a/dev/null
+++ b/libkcal/customproperties.cpp
@@ -0,0 +1,114 @@
+/*
+ This file is part of libkcal.
+ Copyright (c) 2002 David Jarvie <software@astrojar.org.uk>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+#include "customproperties.h"
+
+using namespace KCal;
+
+CustomProperties::CustomProperties()
+{
+}
+
+CustomProperties::CustomProperties(const CustomProperties &cp)
+ : mProperties(cp.mProperties)
+{
+}
+
+CustomProperties::~CustomProperties()
+{
+}
+
+void CustomProperties::setCustomProperty(const QCString &app, const QCString &key,
+ const QString &value)
+{
+ if (value.isNull() || key.isEmpty() || app.isEmpty())
+ return;
+ QCString property = "X-KDE-" + app + "-" + key;
+ if (!checkName(property))
+ return;
+ mProperties[property] = value;
+}
+
+void CustomProperties::removeCustomProperty(const QCString &app, const QCString &key)
+{
+ removeNonKDECustomProperty(QCString("X-KDE-" + app + "-" + key));
+}
+
+QString CustomProperties::customProperty(const QCString &app, const QCString &key) const
+{
+ return nonKDECustomProperty(QCString("X-KDE-" + app + "-" + key));
+}
+
+void CustomProperties::setNonKDECustomProperty(const QCString &name, const QString &value)
+{
+ if (value.isNull() || !checkName(name))
+ return;
+ mProperties[name] = value;
+}
+
+void CustomProperties::removeNonKDECustomProperty(const QCString &name)
+{
+ QMap<QCString, QString>::Iterator it = mProperties.find(name);
+ if (it != mProperties.end())
+ mProperties.remove(it);
+}
+
+QString CustomProperties::nonKDECustomProperty(const QCString &name) const
+{
+ QMap<QCString, QString>::ConstIterator it = mProperties.find(name);
+ if (it == mProperties.end())
+ return QString::null;
+ return it.data();
+}
+
+void CustomProperties::setCustomProperties(const QMap<QCString, QString> &properties)
+{
+ for (QMap<QCString, QString>::ConstIterator it = properties.begin(); it != properties.end(); ++it) {
+ // Validate the property name and convert any null string to empty string
+ if (checkName(it.key())) {
+ mProperties[it.key()] = it.data().isNull() ? QString("") : it.data();
+ }
+ }
+}
+
+QMap<QCString, QString> CustomProperties::customProperties() const
+{
+ return mProperties;
+}
+
+bool CustomProperties::checkName(const QCString &name)
+{
+ // Check that the property name starts with 'X-' and contains
+ // only the permitted characters
+ const char* n = name;
+ int len = name.length();
+ if (len < 2 || n[0] != 'X' || n[1] != '-')
+ return false;
+ for (int i = 2; i < len; ++i) {
+ char ch = n[i];
+ if (ch >= 'A' && ch <= 'Z'
+ || ch >= 'a' && ch <= 'z'
+ || ch >= '0' && ch <= '9'
+ || ch == '-')
+ continue;
+ return false; // invalid character found
+ }
+ return true;
+}