From ce4a32fe52ef09d8f5ff1dd22c001110902b60a2 Mon Sep 17 00:00:00 2001 From: toma Date: Wed, 25 Nov 2009 17:56:58 +0000 Subject: Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features. BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdelibs@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- kded/kbuildimageiofactory.cpp | 122 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 kded/kbuildimageiofactory.cpp (limited to 'kded/kbuildimageiofactory.cpp') diff --git a/kded/kbuildimageiofactory.cpp b/kded/kbuildimageiofactory.cpp new file mode 100644 index 000000000..933ac338a --- /dev/null +++ b/kded/kbuildimageiofactory.cpp @@ -0,0 +1,122 @@ +/* This file is part of the KDE libraries + * Copyright (C) 2000 Waldo Bastian + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License version 2 as published by the Free Software Foundation. + * + * 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., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + **/ + +#include "ksycoca.h" +#include "ksycocadict.h" +#include "kresourcelist.h" + +#include +#include +#include +#include +#include + +#include +#include + +KBuildImageIOFactory::KBuildImageIOFactory() : + KImageIOFactory() +{ + m_resourceList = new KSycocaResourceList(); + m_resourceList->add( "services", "*.kimgio" ); +} + +// return all service types for this factory +// i.e. first arguments to m_resourceList->add() above +QStringList KBuildImageIOFactory::resourceTypes() +{ + return QStringList() << "services"; +} + +KBuildImageIOFactory::~KBuildImageIOFactory() +{ + delete m_resourceList; +} + +KSycocaEntry * +KBuildImageIOFactory::createEntry( const QString& file, const char *resource ) +{ + QString fullPath = locate( resource, file); + + KImageIOFormat *format = new KImageIOFormat(fullPath); + return format; +} + +void +KBuildImageIOFactory::addEntry(KSycocaEntry *newEntry, const char *resource) +{ + KSycocaFactory::addEntry(newEntry, resource); + + KImageIOFormat *format = (KImageIOFormat *) newEntry; + rPath += format->rPaths; + + // Since Qt doesn't allow us to unregister image formats + // we have to make sure not to add them a second time. + // This typically happens when the sycoca database is updated + // incremenatally + for( KImageIOFormatList::ConstIterator it = formatList->begin(); + it != formatList->end(); + ++it ) + { + KImageIOFormat *_format = (*it); + if (format->mType == _format->mType) + { + // Already in list + format = 0; + break; + } + } + if (format) + formatList->append( format ); +} + + +void +KBuildImageIOFactory::saveHeader(QDataStream &str) +{ + KSycocaFactory::saveHeader(str); + + str << mReadPattern << mWritePattern << rPath; +} + +void +KBuildImageIOFactory::save(QDataStream &str) +{ + rPath.sort(); + // Remove duplicates from rPath: + QString last; + for(QStringList::Iterator it = rPath.begin(); + it != rPath.end(); ) + { + QStringList::Iterator it2 = it++; + if (*it2 == last) + { + // remove duplicate + rPath.remove(it2); + } + else + { + last = *it2; + } + } + mReadPattern = createPattern( KImageIO::Reading ); + mWritePattern = createPattern( KImageIO::Writing ); + + KSycocaFactory::save(str); +} + -- cgit v1.2.1