diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | 47d455dd55be855e4cc691c32f687f723d9247ee (patch) | |
tree | 52e236aaa2576bdb3840ebede26619692fed6d7d /kpovmodeler/pmresourcelocator.cpp | |
download | tdegraphics-47d455dd55be855e4cc691c32f687f723d9247ee.tar.gz tdegraphics-47d455dd55be855e4cc691c32f687f723d9247ee.zip |
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/kdegraphics@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kpovmodeler/pmresourcelocator.cpp')
-rw-r--r-- | kpovmodeler/pmresourcelocator.cpp | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/kpovmodeler/pmresourcelocator.cpp b/kpovmodeler/pmresourcelocator.cpp new file mode 100644 index 00000000..7c778b31 --- /dev/null +++ b/kpovmodeler/pmresourcelocator.cpp @@ -0,0 +1,103 @@ +/* +************************************************************************** + description + -------------------- + copyright : (C) 2002 by Andreas Zehender + email : zehender@kde.org +************************************************************************** + +************************************************************************** +* * +* 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 of the License, or * +* (at your option) any later version. * +* * +**************************************************************************/ + +#include "pmresourcelocator.h" +#include "pmpovrayrenderwidget.h" +#include "pmdebug.h" + +#include <qfileinfo.h> +#include <qdir.h> + +PMResourceLocator* PMResourceLocator::s_pInstance = 0; +KStaticDeleter<PMResourceLocator> PMResourceLocator::s_staticDeleter; + +PMResourceLocator::PMResourceLocator( ) + : m_cache( 100, 109, true ) +{ + m_cache.setAutoDelete( true ); +} + +PMResourceLocator::~PMResourceLocator( ) +{ + m_cache.clear( ); +} + +QString PMResourceLocator::findFile( const QString& file ) +{ + if( !s_pInstance ) + s_staticDeleter.setObject( s_pInstance, new PMResourceLocator( ) ); + return s_pInstance->lookUp( file ); +} + +void PMResourceLocator::clearCache( ) +{ + if( s_pInstance ) + s_pInstance->m_cache.clear( ); +} + +QString PMResourceLocator::lookUp( const QString& file ) +{ + if( file.isEmpty( ) ) + return QString::null; + + kdDebug( PMArea ) << "LookUp: " << file << endl; + + QString* ps = m_cache.find( file ); + if( ps ) + return *ps; + + bool found = false; + QString fullPath = QString::null; + + if( file[0] == '/' ) + { + // absolute path, library paths are not used + QFileInfo info( file ); + if( info.exists( ) && info.isReadable( ) && info.isFile( ) ) + { + found = true; + fullPath = file; + } + } + else + { + QStringList plist = PMPovrayRenderWidget::povrayLibraryPaths( ); + QStringList::ConstIterator it = plist.begin( ); + for( ; ( it != plist.end( ) ) && !found; ++it ) + { + QDir dir( *it ); + QFileInfo info( dir, file ); + if( info.exists( ) && info.isReadable( ) && info.isFile( ) ) + { + found = true; + fullPath = info.absFilePath( ); + } + } + } + + if( found ) + { + QString* ni = new QString( fullPath ); + if( !m_cache.insert( file, ni ) ) + delete ni; + kdDebug( PMArea ) << "File \"" << file << "\" found in " + << fullPath << endl; + } + + return fullPath; +} + |