00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include <QFile>
00021
00022 #include <Q3ValueList>
00023 #include <Q3CString>
00024 #include <QList>
00025 #include <KoQueryTrader.h>
00026 #include <KoFilterManager.h>
00027 #include <kinstance.h>
00028 #include <kdebug.h>
00029
00030 int main( int , char ** )
00031 {
00032 KInstance instance( "filter_graph" );
00033
00034 Q3CString output = "digraph filters {\n";
00035
00036
00037
00038
00039
00040 QList<QString> vertices;
00041
00042
00043 Q3ValueList<KoDocumentEntry> parts( KoDocumentEntry::query() );
00044 Q3ValueList<KoDocumentEntry>::ConstIterator partIt( parts.begin() );
00045 Q3ValueList<KoDocumentEntry>::ConstIterator partEnd( parts.end() );
00046
00047 while ( partIt != partEnd ) {
00048
00049 QStringList nativeMimeTypes = ( *partIt ).service()->property( "X-KDE-ExtraNativeMimeTypes" ).toStringList();
00050 nativeMimeTypes += ( *partIt ).service()->property( "X-KDE-NativeMimeType" ).toString();
00051 QStringList::ConstIterator it = nativeMimeTypes.begin();
00052 QStringList::ConstIterator end = nativeMimeTypes.end();
00053 for ( ; it != end; ++it ) {
00054 QString key = *it;
00055
00056 if ( !key.isEmpty() ) {
00057 output += " \"";
00058 output += key.toLatin1();
00059 output += "\" [shape=box, style=filled, fillcolor=lightblue];\n";
00060 if ( ! vertices.contains( key ) )
00061 vertices.append( key );
00062 }
00063 }
00064 ++partIt;
00065 }
00066
00067 Q3ValueList<KoFilterEntry::Ptr> filters( KoFilterEntry::query() );
00068 Q3ValueList<KoFilterEntry::Ptr>::ConstIterator it = filters.begin();
00069 Q3ValueList<KoFilterEntry::Ptr>::ConstIterator end = filters.end();
00070
00071 for ( ; it != end; ++it ) {
00072 kDebug() << "import " << ( *it )->import << " export " << ( *it )->export_ << endl;
00073
00074 QStringList::ConstIterator importIt = ( *it )->import.begin();
00075 QStringList::ConstIterator importEnd = ( *it )->import.end();
00076 for ( ; importIt != importEnd; ++importIt ) {
00077
00078 if ( ! vertices.contains( *importIt ) ) {
00079 vertices.append( *importIt );
00080 output += " \"";
00081 output += ( *importIt ).toLatin1();
00082 output += "\";\n";
00083 }
00084 }
00085
00086 QStringList::ConstIterator exportIt = ( *it )->export_.begin();
00087 QStringList::ConstIterator exportEnd = ( *it )->export_.end();
00088
00089 for ( ; exportIt != exportEnd; ++exportIt ) {
00090
00091 if ( ! vertices.contains( *exportIt ) ) {
00092 output += " \"";
00093 output += ( *exportIt ).toLatin1();
00094 output += "\";\n";
00095 vertices.append( *exportIt );
00096 }
00097
00098 importIt = ( *it )->import.begin();
00099 for ( ; importIt != importEnd; ++importIt ) {
00100 output += " \"";
00101 output += ( *importIt ).toLatin1();
00102 output += "\" -> \"";
00103 output += ( *exportIt ).toLatin1();
00104 if ( KoFilterManager::filterAvailable( *it ) )
00105 output += "\";\n";
00106 else
00107 output += "\" [style=dotted];\n";
00108 }
00109 }
00110 }
00111
00112 output += "}\n";
00113
00114 QFile f( "graph.dot" );
00115 if ( f.open( QIODevice::WriteOnly ) )
00116 f.write( output.data(), output.size() - 1 );
00117 f.close();
00118 return 0;
00119 }