diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-01-20 01:29:50 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-01-20 01:29:50 +0000 |
commit | 8362bf63dea22bbf6736609b0f49c152f975eb63 (patch) | |
tree | 0eea3928e39e50fae91d4e68b21b1e6cbae25604 /lib/kofficecore/KoPictureCollection.cpp | |
download | koffice-8362bf63dea22bbf6736609b0f49c152f975eb63.tar.gz koffice-8362bf63dea22bbf6736609b0f49c152f975eb63.zip |
Added old abandoned KDE3 version of koffice
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/koffice@1077364 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'lib/kofficecore/KoPictureCollection.cpp')
-rw-r--r-- | lib/kofficecore/KoPictureCollection.cpp | 324 |
1 files changed, 324 insertions, 0 deletions
diff --git a/lib/kofficecore/KoPictureCollection.cpp b/lib/kofficecore/KoPictureCollection.cpp new file mode 100644 index 00000000..8941f32e --- /dev/null +++ b/lib/kofficecore/KoPictureCollection.cpp @@ -0,0 +1,324 @@ +/* This file is part of the KDE project + Copyright (C) 1998, 1999 Reginald Stadlbauer <[email protected]> + Copyright (c) 2001, 2004 David Faure <[email protected]> + Copyright (C) 2002, 2004 Nicolas GOUTTE <[email protected]> + + 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., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. +*/ + +#include <qdom.h> + +#include <kdebug.h> +#include <kurl.h> + +#include <KoStoreDevice.h> +#include <KoXmlWriter.h> + +#include "KoPicture.h" +#include "KoPictureCollection.h" + +//#define DEBUG_PICTURES + +KoPicture KoPictureCollection::findPicture(const KoPictureKey& key) const +{ +#ifdef DEBUG_PICTURES + kdDebug(30003) << "KoPictureCollection::findPicture " << key.toString() << endl; +#endif + ConstIterator it = find( key ); + if ( it == end() ) + { + KoPicture picture; + picture.setKey(key); + return picture; + } + + return *it; +} + + +KoPicture KoPictureCollection::insertPicture(const KoPictureKey& key, const KoPicture& picture) +{ +#ifdef DEBUG_PICTURES + kdDebug(30003) << "KoPictureCollection::insertPicture " << key.toString() << endl; +#endif + KoPicture c = findPicture(key); + if (c.isNull()) + { +#ifdef DEBUG_PICTURES + kdDebug(30003) << "KoPictureCollection::insertPicture not found -> inserting" << endl; +#endif + c=picture; + c.setKey(key); // Be sure that the key is correctly set in the KoPicture! + insert(key, c); + } + return c; +} + +KoPicture KoPictureCollection::insertPicture(const KoPicture& picture) +{ + return insertPicture(picture.getKey(), picture); +} + +KoPicture KoPictureCollection::downloadPicture(const KURL& url, QWidget *window) +{ +#ifdef DEBUG_PICTURES + kdDebug(30003) << "KoPictureCollection::downloadPicture " << url.prettyURL() << endl; +#endif + + // If it is a local file, we can check the last modification date, so we should better use loadPicture + if (url.isLocalFile()) + return loadPicture(url.path()); + + + // We have really a remote file, so we cannot check the last modification date + // Therefore we have to always download the file + + KoPicture pic; +#ifdef DEBUG_PICTURES + kdDebug(30003) << "Trying to download picture from file " << url.prettyURL() << endl; +#endif + + if (pic.setKeyAndDownloadPicture(url, window)) + insertPicture(pic.getKey(), pic); + else + kdWarning(30003) << "Could not download KoPicture from " << url.prettyURL() << endl; + + return pic; +} + +KoPicture KoPictureCollection::loadPicture(const QString& fileName) +{ +#ifdef DEBUG_PICTURES + kdDebug(30003) << "KoPictureCollection::loadPicture " << fileName << endl; +#endif + // Check the last modified date of the file, as it is now. + KoPictureKey key; + key.setKeyFromFile(fileName); + + KoPicture c = findPicture(key); + if (c.isNull()) + { +#ifdef DEBUG_PICTURES + kdDebug(30003) << "Trying to load picture from file " << fileName << endl; +#endif + if (c.loadFromFile(fileName)) + insertPicture(key, c); + else + kdWarning(30003) << "Could not load KoPicture from " << fileName << endl; + } + return c; +} + +QString KoPictureCollection::getFileName(const Type pictureType, KoPicture& picture, int& counter) +{ + QString storeURL; + // ### TODO: remove "cliparts" when KPresenter is ready for it + if (pictureType==CollectionClipart) + storeURL="cliparts/clipart"; + else + storeURL="pictures/picture"; + storeURL+=QString::number(++counter); + storeURL+='.'; + storeURL+=picture.getExtension(); + return storeURL; +} + +QString KoPictureCollection::getOasisFileName(const KoPicture& picture) const +{ + QString storeURL( "Pictures/"); + if ( !picture.uniquePictureId().isEmpty() ) + storeURL+=picture.uniquePictureId(); + else + storeURL+=picture.getKey().toString(); + storeURL+='.'; + storeURL+=picture.getExtension(); + return storeURL; +} + +bool KoPictureCollection::saveToStore(const Type pictureType, KoStore *store, const QValueList<KoPictureKey>& keys) +{ + int counter=0; + QValueList<KoPictureKey>::const_iterator it = keys.begin(); + for ( ; it != keys.end(); ++it ) + { + KoPicture c = findPicture( *it ); + if (c.isNull()) + kdWarning(30003) << "Picture " << (*it).toString() << " not found in collection !" << endl; + else + { + QString storeURL=getFileName(pictureType, c, counter); + + if (store->open(storeURL)) + { + KoStoreDevice dev(store); + if ( ! c.save(&dev) ) + return false; // e.g. bad image? + if ( !store->close() ) + return false; // e.g. disk full + } + } + } + return true; +} + +bool KoPictureCollection::saveOasisToStore( KoStore *store, QValueList<KoPictureKey> keys, KoXmlWriter* manifestWriter ) +{ + QValueList<KoPictureKey>::Iterator it = keys.begin(); + for ( ; it != keys.end(); ++it ) + { + KoPicture c = findPicture( *it ); + if (c.isNull()) + kdWarning(30003) << "Picture " << (*it).toString() << " not found in collection !" << endl; + else + { + QString storeURL( getOasisFileName(c) ); + if (store->open(storeURL)) + { + KoStoreDevice dev(store); + if ( ! c.save(&dev) ) + return false; // e.g. bad image? + if ( !store->close() ) + return false; // e.g. disk full + manifestWriter->addManifestEntry( storeURL, c.getMimeType() ); + } + } + } + return true; +} + +QDomElement KoPictureCollection::saveXML(const Type pictureType, QDomDocument &doc, QValueList<KoPictureKey> keys) +{ + QString strElementName("PICTURES"); + if (pictureType==CollectionImage) + strElementName="PIXMAPS"; + else if (pictureType==CollectionClipart) + strElementName="CLIPARTS"; + QDomElement cliparts = doc.createElement( strElementName ); + int counter=0; + QValueList<KoPictureKey>::Iterator it = keys.begin(); + for ( ; it != keys.end(); ++it ) + { + KoPicture picture = findPicture( *it ); + if ( picture.isNull() ) + kdWarning(30003) << "Picture " << (*it).toString() << " not found in collection !" << endl; + else + { + QString pictureName=getFileName(pictureType, picture, counter); + QDomElement keyElem = doc.createElement( "KEY" ); + cliparts.appendChild(keyElem); + (*it).saveAttributes(keyElem); + keyElem.setAttribute("name", pictureName); + } + } + return cliparts; +} + +void KoPictureCollection::readXML( QDomElement& pixmapsElem, QMap <KoPictureKey, QString>& map ) +{ + for( QDomNode n = pixmapsElem.firstChild(); + !n.isNull(); + n = n.nextSibling() ) + { + QDomElement keyElement = n.toElement(); + if (keyElement.isNull()) continue; + if (keyElement.tagName()=="KEY") + { + KoPictureKey key; + key.loadAttributes(keyElement); + map.insert(key, keyElement.attribute("name")); + } + } +} + + +KoPictureCollection::StoreMap KoPictureCollection::readXML( QDomElement& pixmapsElem ) +{ + StoreMap map; + readXML(pixmapsElem, map); + return map; +} + +void KoPictureCollection::readFromStore( KoStore * store, const StoreMap & storeMap ) +{ +#ifdef DEBUG_PICTURES + kdDebug(30003) << "KoPictureCollection::readFromStore " << store << endl; +#endif + StoreMap::ConstIterator it = storeMap.begin(); + for ( ; it != storeMap.end(); ++it ) + { + KoPicture c = findPicture(it.key()); + if (!c.isNull()) + { + // Do not load a file that we already have! + //kdDebug(30003) << store << endl; + continue; + } + QString u(it.data()); + if (u.isEmpty()) + { + // old naming I suppose ? + u=it.key().toString(); + } + + KoPicture picture; + + if (!store->open( u )) + { + u.prepend( "file:" ); + if (!store->open( u )) + { + kdWarning(30003) << "Could load neither from store nor from file: " << it.data() << endl; + return; + } + } + + const int pos=u.findRev('.'); + if (pos==-1) + { + kdError(30003) << "File with no extension! Not supported!" << endl; + return; + } + const QString extension(u.mid(pos+1)); + + KoStoreDevice dev(store); + picture.load(&dev, extension); + store->close(); + + if (!picture.isNull()) + insertPicture(it.key(), picture); + } +} + +KoPicture KoPictureCollection::findOrLoad(const QString& fileName, const QDateTime& dateTime) +{ + // As now all KoPictureKey objects have a valid QDateTime, we must do it without a date/time check. + ConstIterator it = find( KoPictureKey ( fileName, dateTime ) ); + if ( it == end() ) + { + return loadPicture( fileName ); + } + return *it; +} + +void KoPictureCollection::assignUniqueIds() +{ + uint idx = 0; + Iterator it; + for ( it = begin(); it != end(); ++it, ++idx ) + { + it.data().assignPictureId(idx); + } +} |