summaryrefslogtreecommitdiffstats
path: root/kpovmodeler/pmresourcelocator.cpp
diff options
context:
space:
mode:
authortoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
committertoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
commit47d455dd55be855e4cc691c32f687f723d9247ee (patch)
tree52e236aaa2576bdb3840ebede26619692fed6d7d /kpovmodeler/pmresourcelocator.cpp
downloadtdegraphics-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.cpp103
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
+**************************************************************************
+
+**************************************************************************
+* *
+* 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;
+}
+