From 47d455dd55be855e4cc691c32f687f723d9247ee 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/kdegraphics@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- kpovmodeler/pmresourcelocator.cpp | 103 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 kpovmodeler/pmresourcelocator.cpp (limited to 'kpovmodeler/pmresourcelocator.cpp') 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 +#include + +PMResourceLocator* PMResourceLocator::s_pInstance = 0; +KStaticDeleter 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; +} + -- cgit v1.2.1