summaryrefslogtreecommitdiffstats
path: root/kpovmodeler/pmdocumentationmap.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kpovmodeler/pmdocumentationmap.cpp')
-rw-r--r--kpovmodeler/pmdocumentationmap.cpp193
1 files changed, 193 insertions, 0 deletions
diff --git a/kpovmodeler/pmdocumentationmap.cpp b/kpovmodeler/pmdocumentationmap.cpp
new file mode 100644
index 00000000..9c898c4c
--- /dev/null
+++ b/kpovmodeler/pmdocumentationmap.cpp
@@ -0,0 +1,193 @@
+/*
+**************************************************************************
+ 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 "pmdocumentationmap.h"
+
+#include <kconfig.h>
+#include <kstandarddirs.h>
+
+#include <qfile.h>
+#include <qdom.h>
+
+#include "pmdebug.h"
+
+PMDocumentationMap* PMDocumentationMap::s_pInstance = 0;
+KStaticDeleter<PMDocumentationMap> PMDocumentationMap::s_staticDeleter;
+
+QString PMDocumentationVersion::documentation( const QString& className ) const
+{
+ if( m_map.contains( className ) )
+ return m_map[className];
+ return m_index;
+}
+
+void PMDocumentationVersion::loadData( QDomElement& e )
+{
+ QString className;
+ QString target;
+
+ m_version = e.attribute( "number", "3.1" );
+ m_index = e.attribute( "index", "index.htm" );
+
+ QDomNode m = e.firstChild( );
+ while( !m.isNull( ) )
+ {
+ if( m.isElement( ) )
+ {
+ QDomElement me = m.toElement( );
+ className = me.attribute( "className", "" );
+ target = me.attribute( "target", "" );
+ if( !className.isEmpty( ) && !target.isEmpty( ) )
+ m_map.insert( className, target );
+ }
+ m = m.nextSibling( );
+ }
+}
+
+PMDocumentationMap::PMDocumentationMap( )
+{
+ m_pCurrentVersion = 0;
+ m_mapLoaded = false;
+}
+
+PMDocumentationMap::~PMDocumentationMap( )
+{
+ m_maps.setAutoDelete( true );
+ m_maps.clear( );
+}
+
+void PMDocumentationMap::saveConfig( KConfig* cfg )
+{
+ cfg->setGroup( "Povray" );
+ cfg->writePathEntry( "DocumentationPath", m_documentationPath );
+ cfg->writeEntry( "DocumentationVersion", m_currentVersion );
+}
+
+void PMDocumentationMap::restoreConfig( KConfig* cfg )
+{
+ cfg->setGroup( "Povray" );
+ m_documentationPath = cfg->readPathEntry( "DocumentationPath" );
+ m_currentVersion = cfg->readEntry( "DocumentationVersion", "3.1" );
+}
+
+void PMDocumentationMap::setDocumentationVersion( const QString& v )
+{
+ m_currentVersion = v;
+ if( m_mapLoaded )
+ findVersion( );
+}
+
+QValueList<QString> PMDocumentationMap::availableVersions( )
+{
+ if( !m_mapLoaded )
+ loadMap( );
+
+ QValueList<QString> result;
+ QPtrListIterator<PMDocumentationVersion> it( m_maps );
+
+ for( ; it.current( ); ++it )
+ result.push_back( it.current( )->version( ) );
+
+ return result;
+}
+
+QString PMDocumentationMap::documentation( const QString& objectName )
+{
+ if( !m_mapLoaded )
+ loadMap( );
+
+ QString url;
+
+ if( !m_documentationPath.isEmpty( ) )
+ if( !m_documentationPath.endsWith( QString( "/" ) ) )
+ m_documentationPath += "/";
+
+ if( !m_documentationPath.isEmpty( ) && m_pCurrentVersion )
+ url = m_documentationPath
+ + m_pCurrentVersion->documentation( objectName );
+
+ return url;
+}
+
+void PMDocumentationMap::loadMap( )
+{
+ if( !m_mapLoaded )
+ {
+ m_mapLoaded = true;
+
+ QString fileName = locate( "data", "kpovmodeler/povraydocmap.xml" );
+ if( fileName.isEmpty( ) )
+ {
+ kdError( PMArea ) << "Povray documentation map not found" << endl;
+ return;
+ }
+
+ QFile file( fileName );
+ if( !file.open( IO_ReadOnly ) )
+ {
+ kdError( PMArea ) << "Could not open the povray documentation map file"
+ << endl;
+ return;
+ }
+
+ QDomDocument doc( "DOCMAP" );
+ doc.setContent( &file );
+
+ QDomElement e = doc.documentElement( );
+ QDomNode c = e.firstChild( );
+
+ QString str;
+
+ while( !c.isNull( ) )
+ {
+ if( c.isElement( ) )
+ {
+ QDomElement ce = c.toElement( );
+ PMDocumentationVersion* v = new PMDocumentationVersion( );
+ m_maps.append( v );
+ v->loadData( ce );
+ }
+ c = c.nextSibling( );
+ }
+
+ findVersion( );
+ }
+}
+
+void PMDocumentationMap::findVersion( )
+{
+ QPtrListIterator< PMDocumentationVersion > it( m_maps );
+ bool found = false;
+
+ m_pCurrentVersion = 0;
+
+ for( ; it.current( ) && !found; ++it )
+ {
+ if( it.current( )->version( ) == m_currentVersion )
+ {
+ found = true;
+ m_pCurrentVersion = it.current( );
+ }
+ }
+}
+
+PMDocumentationMap* PMDocumentationMap::theMap( )
+{
+ if( !s_pInstance )
+ s_staticDeleter.setObject( s_pInstance, new PMDocumentationMap( ) );
+ return s_pInstance;
+}