diff options
Diffstat (limited to 'kig/kfile')
-rw-r--r-- | kig/kfile/Makefile.am | 24 | ||||
-rw-r--r-- | kig/kfile/kfile_drgeo.cpp | 99 | ||||
-rw-r--r-- | kig/kfile/kfile_drgeo.desktop | 55 | ||||
-rw-r--r-- | kig/kfile/kfile_drgeo.h | 41 | ||||
-rw-r--r-- | kig/kfile/kfile_kig.cpp | 153 | ||||
-rw-r--r-- | kig/kfile/kfile_kig.desktop | 54 | ||||
-rw-r--r-- | kig/kfile/kfile_kig.h | 41 |
7 files changed, 467 insertions, 0 deletions
diff --git a/kig/kfile/Makefile.am b/kig/kfile/Makefile.am new file mode 100644 index 00000000..b8de2d3d --- /dev/null +++ b/kig/kfile/Makefile.am @@ -0,0 +1,24 @@ +INCLUDES = $(all_includes) + +noinst_HEADERS = \ + kfile_drgeo.h \ + kfile_kig.h + +kde_module_LTLIBRARIES = \ + kfile_drgeo.la \ + kfile_kig.la + +kfile_drgeo_la_SOURCES = kfile_drgeo.cpp +kfile_drgeo_la_LDFLAGS = $(all_libraries) -module $(KDE_PLUGIN) +kfile_drgeo_la_LIBADD = $(LIB_KIO) + +kfile_kig_la_SOURCES = kfile_kig.cpp +kfile_kig_la_LDFLAGS = $(all_libraries) -module $(KDE_PLUGIN) +kfile_kig_la_LIBADD = $(LIB_KIO) + +METASOURCES = AUTO + +services_DATA = \ + kfile_drgeo.desktop \ + kfile_kig.desktop +servicesdir = $(kde_servicesdir) diff --git a/kig/kfile/kfile_drgeo.cpp b/kig/kfile/kfile_drgeo.cpp new file mode 100644 index 00000000..26ed7923 --- /dev/null +++ b/kig/kfile/kfile_drgeo.cpp @@ -0,0 +1,99 @@ +/*************************************************************************** + * Copyright (C) 2004 by Pino Toscano * + * toscano.pino@tiscali.it * + * * + * 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. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include "kfile_drgeo.h" + +#include <qdom.h> +#include <qfile.h> + +#include <kgenericfactory.h> + +typedef KGenericFactory<DrgeoPlugin> drgeoFactory; + +K_EXPORT_COMPONENT_FACTORY( kfile_drgeo, drgeoFactory( "kfile_drgeo" ) ) + +DrgeoPlugin::DrgeoPlugin( QObject *parent, const char *name, const QStringList &args ) + : KFilePlugin( parent, name, args ) +{ + info = addMimeTypeInfo( "application/x-drgeo" ); + + KFileMimeTypeInfo::GroupInfo* group = addGroupInfo( info, "DrgeoInfo", i18n( "Summary" ) ); + KFileMimeTypeInfo::ItemInfo* item; + item = addItemInfo( group, "NumOfFigures", i18n( "Figures" ), QVariant::Int ); + item = addItemInfo( group, "NumOfTexts", i18n( "Texts" ), QVariant::Int ); + item = addItemInfo( group, "NumOfMacros", i18n( "Macros" ), QVariant::Int ); + + group_contents = addGroupInfo( info, "DrgeoContents", i18n( "Translators: what this drgeo " + "file contains", "Contents" ) ); +} + +bool DrgeoPlugin::readInfo( KFileMetaInfo& metainfo, uint /*what*/ ) +{ + KFileMetaInfoGroup metagroup = appendGroup( metainfo, "DrgeoContents"); + + KFileMimeTypeInfo::ItemInfo* item; + + QFile f( metainfo.path() ); + QDomDocument doc( "drgenius" ); + if ( !doc.setContent( &f ) ) + return false; + QDomElement main = doc.documentElement(); + int numfig = 0; + int numtext = 0; + int nummacro = 0; + QString sectname; + // reading figures... + for ( QDomNode n = main.firstChild(); ! n.isNull(); n = n.nextSibling() ) + { + QDomElement e = n.toElement(); + if ( e.isNull() ) continue; + else if ( e.tagName() == "drgeo" ) + { + numfig++; + sectname = QString( "Figure" ) + QString::number( numfig ); + item = addItemInfo( group_contents, sectname, i18n( "Figure" ), QVariant::String ); + appendItem( metagroup, sectname, e.attribute( "name" ) ); + } + else if ( e.tagName() == "text" ) + { + numtext++; + sectname = QString( "Text" ) + QString::number( numtext ); + item = addItemInfo( group_contents, sectname, i18n( "Text" ), QVariant::String ); + appendItem( metagroup, sectname, e.attribute( "name" ) ); + } + else if ( e.tagName() == "macro" ) + { + nummacro++; + sectname = QString( "Macro" ) + QString::number( nummacro ); + item = addItemInfo( group_contents, sectname, i18n( "Macro" ), QVariant::String ); + appendItem( metagroup, sectname, e.attribute( "name" ) ); + } + } + + metagroup = appendGroup( metainfo, "DrgeoInfo"); + appendItem( metagroup, "NumOfFigures", numfig ); + appendItem( metagroup, "NumOfTexts", numtext ); + appendItem( metagroup, "NumOfMacros", nummacro ); + + return true; +} + +#include "kfile_drgeo.moc" + diff --git a/kig/kfile/kfile_drgeo.desktop b/kig/kfile/kfile_drgeo.desktop new file mode 100644 index 00000000..1b9ea997 --- /dev/null +++ b/kig/kfile/kfile_drgeo.desktop @@ -0,0 +1,55 @@ +[Desktop Entry] +Type=Service +Name=Dr. Geo Info +Name[af]=Dr. Geo inligting +Name[be]=Звесткі Dr. Geo +Name[bn]=ড. জিও সংক্রান্ত তথ্য +Name[br]=Titouroù diwar-benn Dr. Geo +Name[ca]=Informació Dr. Geo +Name[cs]=Dr. Geo info +Name[csb]=Wëdowiédzô Dr Geo +Name[cy]=Gwybodaeth Dr. Geo +Name[da]=Dr. Geo info +Name[el]=Πληροφορίες για το Dr. Geo +Name[eo]=Dr. Geo info +Name[es]=Información de Dr. Geo +Name[et]=Dr. Geo info +Name[eu]=Dr. Geo informazioa +Name[fa]=اطلاعات دکتر جیو +Name[fi]=Dr. Geo +Name[fr]=Informations de Dr. Geo +Name[ga]=Eolas faoi Dr. Geo +Name[gl]=Información de Dr. Geo +Name[he]=מידע על Dr. Geo +Name[hi]=डॉ. जिओ जानकारी +Name[hu]=Dr. Geo-jellemzők +Name[is]=Dr. Geo upplýsingar +Name[it]=Informazioni Dr. Geo +Name[ja]=Dr. Geo 情報 +Name[ka]=Dr. Geo - მონაცემები +Name[km]=ព័ត៌មាន Dr. Geo +Name[mk]=Dr. Geo инфо +Name[nb]=Dr. Geo-info +Name[ne]=डा. जिव जानकारी +Name[nn]=Dr. Geo-info +Name[pa]=Dr. Geo ਜਾਣਕਾਰੀ +Name[pl]=Informacja Dr. Geo +Name[pt]=Informação do Dr. Geo +Name[pt_BR]=Informações do Dr. Geo +Name[ru]=Файл Dr. Geo +Name[sl]=Podatki Dr. Geo +Name[sr]=Dr. Geo информације +Name[sr@Latn]=Dr. Geo informacije +Name[sv]=Dr. Geo-information +Name[ta]=டா. ஜியோ தகவல் +Name[tg]=Ахборот дар бораи Геометрия +Name[tr]=Dr. Geo Bilgisi +Name[uk]=Інформація для Dr. Geo +Name[vi]=Tiến sĩ Thông tin Hình học +Name[zh_CN]=Dr. Geo 信息 +Name[zh_TW]=Dr. Geo 資訊 +ServiceTypes=KFilePlugin +X-KDE-Library=kfile_drgeo +MimeType=application/x-drgeo +PreferredGroups=DrgeoInfo +PreferredItems=NumOfFigures;NumOfTexts;NumOfMacros diff --git a/kig/kfile/kfile_drgeo.h b/kig/kfile/kfile_drgeo.h new file mode 100644 index 00000000..b6e388da --- /dev/null +++ b/kig/kfile/kfile_drgeo.h @@ -0,0 +1,41 @@ +/*************************************************************************** + * Copyright (C) 2004 by Pino Toscano * + * toscano.pino@tiscali.it * + * * + * 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. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef KIG_KFILE_KFILE_DRGEO_H +#define KIG_KFILE_KFILE_DRGEO_H + +#include <kfilemetainfo.h> + +class QStringList; + +class DrgeoPlugin: public KFilePlugin +{ + Q_OBJECT + +public: + DrgeoPlugin( QObject *parent, const char *name, const QStringList& args ); + + virtual bool readInfo( KFileMetaInfo& metainfo, uint what); +protected: + KFileMimeTypeInfo* info; + KFileMimeTypeInfo::GroupInfo* group_contents; +}; + +#endif diff --git a/kig/kfile/kfile_kig.cpp b/kig/kfile/kfile_kig.cpp new file mode 100644 index 00000000..eca2f79d --- /dev/null +++ b/kig/kfile/kfile_kig.cpp @@ -0,0 +1,153 @@ +/*************************************************************************** + * Copyright (C) 2004 by Pino Toscano * + * toscano.pino@tiscali.it * + * * + * 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. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include "kfile_kig.h" + +#include <qdom.h> +#include <qfile.h> +#include <qregexp.h> + +#include <karchive.h> +#include <kgenericfactory.h> +#include <kglobal.h> +#include <klocale.h> +#include <kstandarddirs.h> +#include <ktar.h> + +typedef KGenericFactory<KigPlugin> kigFactory; + +K_EXPORT_COMPONENT_FACTORY( kfile_kig, kigFactory( "kfile_kig" ) ) + +KigPlugin::KigPlugin( QObject *parent, const char *name, const QStringList &args ) + : KFilePlugin( parent, name, args ) +{ + KFileMimeTypeInfo::ItemInfo* item; + + info = addMimeTypeInfo( "application/x-kig" ); + + group = addGroupInfo( info, "KigInfo", i18n( "Summary" ) ); + item = addItemInfo( group, "Version", i18n( "Version" ), QVariant::String ); + item = addItemInfo( group, "CompatVersion", i18n( "Compatibility Version" ), QVariant::String ); + item = addItemInfo( group, "CoordSystem", i18n( "Coordinate System" ), QVariant::String ); + item = addItemInfo( group, "Grid", i18n( "Grid" ), QVariant::String ); + item = addItemInfo( group, "Axes", i18n( "Axes" ), QVariant::String ); + item = addItemInfo( group, "Compressed", i18n( "Compressed" ), QVariant::String ); +} + +bool KigPlugin::readInfo( KFileMetaInfo& metainfo, uint /*what*/ ) +{ + KFileMetaInfoGroup metagroup = appendGroup( metainfo, "KigInfo"); + + QString sfile = metainfo.path(); + bool iscompressed = false; + QFile f( sfile ); + if ( !sfile.endsWith( ".kig", false ) ) + { + iscompressed = true; + + QString tempdir = KGlobal::dirs()->saveLocation( "tmp" ); + if ( tempdir.isEmpty() ) + return false; + + QString tempname = sfile.section( '/', -1 ); + if ( sfile.endsWith( ".kigz", false ) ) + { + tempname.remove( QRegExp( "\\.[Kk][Ii][Gg][Zz]$" ) ); + } + else + return false; + // reading compressed file + KTar* ark = new KTar( sfile, "application/x-gzip" ); + ark->open( IO_ReadOnly ); + const KArchiveDirectory* dir = ark->directory(); + QStringList entries = dir->entries(); + QStringList kigfiles = entries.grep( QRegExp( "\\.kig$" ) ); + if ( kigfiles.count() != 1 ) + return false; + const KArchiveEntry* kigz = dir->entry( kigfiles[0] ); + if ( !kigz->isFile() ) + return false; + dynamic_cast<const KArchiveFile*>( kigz )->copyTo( tempdir ); + + f.setName( tempdir + kigz->name() ); + } + + if ( !f.open( IO_ReadOnly ) ) + return false; + + QDomDocument doc( "KigDocument" ); + if ( !doc.setContent( &f ) ) + return false; + + f.close(); + + // removing temp file + if ( iscompressed ) + f.remove(); + + QDomElement main = doc.documentElement(); + + // reading the version... + QString version = main.attribute( "Version" ); + if ( version.isEmpty() ) version = main.attribute( "version" ); + if ( version.isEmpty() ) version = i18n( "Translators: Not Available", "n/a" ); + appendItem( metagroup, "Version", version ); + + // reading the compatibility version... + QString compatversion = main.attribute( "CompatibilityVersion" ); + if ( compatversion.isEmpty() ) + compatversion = i18n( "%1 represents Kig version", + "%1 (as the version)" ).arg( version ); + appendItem( metagroup, "CompatVersion", compatversion ); + + // reading the Coordinate System... + QCString coordsystem; + for ( QDomNode n = main.firstChild(); ! n.isNull(); n = n.nextSibling() ) + { + QDomElement e = n.toElement(); + if ( e.isNull() ) continue; + if ( e.tagName() == "CoordinateSystem" ) + coordsystem = e.text().latin1(); + } + appendItem( metagroup, "CoordSystem", coordsystem ); + + // has Kig document the grid? + bool btmp = true; + QString stmp = main.attribute( "grid" ); + if ( !( stmp.isEmpty() || ( stmp != "0" ) ) ) + btmp = ( stmp != "0" ); + QString stmp2 = btmp ? i18n( "Yes" ) : i18n( "No" ); + appendItem( metagroup, "Grid", stmp2 ); + + // has Kig document the axes? + btmp = true; + stmp = main.attribute( "axes" ); + if ( !( stmp.isEmpty() || ( stmp != "0" ) ) ) + btmp = ( stmp != "0" ); + stmp2 = btmp ? i18n( "Yes" ) : i18n( "No" ); + appendItem( metagroup, "Axes", stmp2 ); + + stmp2 = iscompressed ? i18n( "Yes" ) : i18n( "No" ); + appendItem( metagroup, "Compressed", stmp2 ); + + return true; +} + +#include "kfile_kig.moc" diff --git a/kig/kfile/kfile_kig.desktop b/kig/kfile/kfile_kig.desktop new file mode 100644 index 00000000..03ee474b --- /dev/null +++ b/kig/kfile/kfile_kig.desktop @@ -0,0 +1,54 @@ +[Desktop Entry] +Type=Service +Name=Kig Info +Name[af]=Kig inligting +Name[be]=Звесткі Kig +Name[bn]=কিগ সংক্রান্ত তথ্য +Name[br]=Titouroù diwar-benn Kig +Name[ca]=Informació Kig +Name[cs]=Kig info +Name[csb]=Wëdowiédzô Kig +Name[cy]=Gwybodaeth Kig +Name[da]=Kig info +Name[el]=Πληροφορίες για το Kig +Name[eo]=Kig info +Name[es]=Información de Kig +Name[et]=Kigi info +Name[eu]=Kig informazioa +Name[fa]=اطلاعات Kig +Name[fr]=Informations de Kig +Name[ga]=Eolas faoi Kig +Name[gl]=Información de Kig +Name[he]=Kig מידע +Name[hi]=केआईजी जानकारी +Name[hu]=Kig-jellemzők +Name[is]=Kig upplýsingar +Name[it]=Informazioni Kig +Name[ja]=Kig 情報 +Name[ka]=Kig - მონაცემები +Name[km]=ព័ត៌មាន Kig +Name[mk]=Kig инфо +Name[nb]=Kig-info +Name[ne]=किग जानकारी +Name[nn]=Kig-info +Name[pa]=ਕਿਗ ਜਾਣਕਾਰੀ +Name[pl]=Informacja Kig +Name[pt]=Informação do Kig +Name[pt_BR]=Informações do Kig +Name[ru]=Файл Kig +Name[sl]=Podatki Kig +Name[sr]=Kig информације +Name[sr@Latn]=Kig informacije +Name[sv]=Kig-information +Name[ta]=கிக் தகவல் +Name[tg]=Ахборот дар бораи Kig +Name[tr]=Kig Bilgisi +Name[uk]=Інформація для Kig +Name[vi]=Thông tin Kig +Name[zh_CN]=Kig 信息 +Name[zh_TW]=Kig 資訊 +ServiceTypes=KFilePlugin +X-KDE-Library=kfile_kig +MimeType=application/x-kig +PreferredGroups=KigInfo +PreferredItems=Version;CoordSytem diff --git a/kig/kfile/kfile_kig.h b/kig/kfile/kfile_kig.h new file mode 100644 index 00000000..8580ec48 --- /dev/null +++ b/kig/kfile/kfile_kig.h @@ -0,0 +1,41 @@ +/*************************************************************************** + * Copyright (C) 2004 by Pino Toscano * + * toscano.pino@tiscali.it * + * * + * 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. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef KIG_KFILE_KFILE_KIG_H +#define KIG_KFILE_KFILE_KIG_H + +#include <kfilemetainfo.h> + +class QStringList; + +class KigPlugin: public KFilePlugin +{ + Q_OBJECT + +public: + KigPlugin( QObject *parent, const char *name, const QStringList& args ); + + virtual bool readInfo( KFileMetaInfo& metainfo, uint what); +protected: + KFileMimeTypeInfo* info; + KFileMimeTypeInfo::GroupInfo* group; +}; + +#endif |