diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | 47d455dd55be855e4cc691c32f687f723d9247ee (patch) | |
tree | 52e236aaa2576bdb3840ebede26619692fed6d7d /kfile-plugins/rgb | |
download | tdegraphics-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 'kfile-plugins/rgb')
-rw-r--r-- | kfile-plugins/rgb/Makefile.am | 22 | ||||
-rw-r--r-- | kfile-plugins/rgb/kfile_rgb.cpp | 208 | ||||
-rw-r--r-- | kfile-plugins/rgb/kfile_rgb.desktop | 61 | ||||
-rw-r--r-- | kfile-plugins/rgb/kfile_rgb.h | 41 |
4 files changed, 332 insertions, 0 deletions
diff --git a/kfile-plugins/rgb/Makefile.am b/kfile-plugins/rgb/Makefile.am new file mode 100644 index 00000000..8fc22e17 --- /dev/null +++ b/kfile-plugins/rgb/Makefile.am @@ -0,0 +1,22 @@ +## Makefile.am for rgb file meta info plugin + +# set the include path for X, qt and KDE +INCLUDES = $(all_includes) + +# these are the headers for your project +noinst_HEADERS = kfile_rgb.h + +kde_module_LTLIBRARIES = kfile_rgb.la + +kfile_rgb_la_SOURCES = kfile_rgb.cpp +kfile_rgb_la_LDFLAGS = $(all_libraries) -module $(KDE_PLUGIN) +kfile_rgb_la_LIBADD = $(LIB_KSYCOCA) + +# let automoc handle all of the meta source files (moc) +METASOURCES = AUTO + +messages: rc.cpp + $(XGETTEXT) kfile_rgb.cpp -o $(podir)/kfile_rgb.pot + +services_DATA = kfile_rgb.desktop +servicesdir = $(kde_servicesdir) diff --git a/kfile-plugins/rgb/kfile_rgb.cpp b/kfile-plugins/rgb/kfile_rgb.cpp new file mode 100644 index 00000000..b7b55035 --- /dev/null +++ b/kfile-plugins/rgb/kfile_rgb.cpp @@ -0,0 +1,208 @@ +/* This file is part of the KDE project + * Copyright (C) 2004 Melchior FRANZ <mfranz@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 version 2. + * + * 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; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + * + */ + +#include <config.h> +#include "kfile_rgb.h" + +#include <qfile.h> +#include <qvalidator.h> + +#include <kdebug.h> +#include <kgenericfactory.h> + + +typedef KGenericFactory<KRgbPlugin> RgbFactory; + +K_EXPORT_COMPONENT_FACTORY(kfile_rgb, RgbFactory("kfile_rgb")) + + +KRgbPlugin::KRgbPlugin(QObject *parent, const char *name, const QStringList &args) : + KFilePlugin(parent, name, args) +{ + KFileMimeTypeInfo* info = addMimeTypeInfo("image/x-rgb"); + + KFileMimeTypeInfo::GroupInfo* group = 0; + KFileMimeTypeInfo::ItemInfo* item; + + + group = addGroupInfo(info, "Comment", i18n("Comment")); + + item = addItemInfo(group, "ImageName", i18n("Name"), QVariant::String); + setAttributes(item, KFileMimeTypeInfo::Modifiable); + setHint(item, KFileMimeTypeInfo::Description); + + + group = addGroupInfo(info, "Technical", i18n("Technical Details")); + + item = addItemInfo(group, "Dimensions", i18n("Dimensions"), QVariant::Size); + setHint(item, KFileMimeTypeInfo::Size); + setUnit(item, KFileMimeTypeInfo::Pixels); + + item = addItemInfo(group, "BitDepth", i18n("Bit Depth"), QVariant::Int); + setUnit(item, KFileMimeTypeInfo::BitsPerPixel); + + item = addItemInfo(group, "ColorMode", i18n("Color Mode"), QVariant::String); + item = addItemInfo(group, "Compression", i18n("Compression"), QVariant::String); + item = addItemInfo(group, "SharedRows", + i18n("percentage of avoided vertical redundancy (the higher the better)", + "Shared Rows"), QVariant::String); + +} + + +bool KRgbPlugin::readInfo(KFileMetaInfo& info, uint /*what*/) +{ + QFile file(info.path()); + + if (!file.open(IO_ReadOnly)) { + kdDebug(7034) << "Couldn't open " << QFile::encodeName(info.path()) << endl; + return false; + } + + QDataStream dstream(&file); + + Q_UINT16 magic; + Q_UINT8 storage; + Q_UINT8 bpc; + Q_UINT16 dimension; + Q_UINT16 xsize; + Q_UINT16 ysize; + Q_UINT16 zsize; + Q_UINT32 pixmin; + Q_UINT32 pixmax; + Q_UINT32 dummy; + char imagename[80]; + Q_UINT32 colormap; + + dstream >> magic; + dstream >> storage; + dstream >> bpc; + dstream >> dimension; + dstream >> xsize; + dstream >> ysize; + dstream >> zsize; + dstream >> pixmin; + dstream >> pixmax; + dstream >> dummy; + dstream.readRawBytes(imagename, 80); + imagename[79] = '\0'; + dstream >> colormap; + Q_UINT8 u8; + for (uint i = 0; i < 404; i++) + dstream >> u8; + + if (magic != 474) + return false; + + KFileMetaInfoGroup group; + + group = appendGroup(info, "Technical"); + + if (dimension == 1) + ysize = 1; + appendItem(group, "Dimensions", QSize(xsize, ysize)); + appendItem(group, "BitDepth", zsize * 8 * bpc); + + if (zsize == 1) + appendItem(group, "ColorMode", i18n("Grayscale")); + else if (zsize == 2) + appendItem(group, "ColorMode", i18n("Grayscale/Alpha")); + else if (zsize == 3) + appendItem(group, "ColorMode", i18n("RGB")); + else if (zsize == 4) + appendItem(group, "ColorMode", i18n("RGB/Alpha")); + + if (!storage) + appendItem(group, "Compression", i18n("Uncompressed")); + else if (storage == 1) { + long compressed = file.size() - 512; + long verbatim = xsize * ysize * zsize; + appendItem(group, "Compression", i18n("Runlength Encoded") + + QString(", %1%").arg(compressed * 100.0 / verbatim, 0, 'f', 1)); + + long k; + Q_UINT32 offs; + QMap<Q_UINT32, uint> map; + QMap<Q_UINT32, uint>::Iterator it; + QMap<Q_UINT32, uint>::Iterator end = map.end(); + for (k = 0; k < (ysize * zsize); k++) { + dstream >> offs; + if ((it = map.find(offs)) != end) + map.replace(offs, it.data() + 1); + else + map[offs] = 0; + } + for (k = 0, it = map.begin(); it != end; ++it) + k += it.data(); + + if (k) + appendItem(group, "SharedRows", QString("%1%").arg(k * 100.0 + / (ysize * zsize), 0, 'f', 1)); + else + appendItem(group, "SharedRows", i18n("None")); + } else + appendItem(group, "Compression", i18n("Unknown")); + + + group = appendGroup(info, "Comment"); + appendItem(group, "ImageName", imagename); + + file.close(); + return true; +} + + +bool KRgbPlugin::writeInfo(const KFileMetaInfo& info) const +{ + QFile file(info.path()); + + if (!file.open(IO_WriteOnly|IO_Raw)) { + kdDebug(7034) << "couldn't open " << QFile::encodeName(info.path()) << endl; + return false; + } + + if (!file.at(24)) { + kdDebug(7034) << "couldn't set offset" << endl; + return false; + } + + QDataStream dstream(&file); + QString s = info["Comment"]["ImageName"].value().toString(); + s.truncate(79); + + unsigned i; + for (i = 0; i < s.length(); i++) + dstream << Q_UINT8(s.latin1()[i]); + for (; i < 80; i++) + dstream << Q_UINT8(0); + + file.close(); + return true; +} + + +// restrict to 79 ASCII characters +QValidator* KRgbPlugin::createValidator(const QString&, const QString &, + const QString &, QObject* parent, const char* name) const +{ + return new QRegExpValidator(QRegExp("[\x0020-\x007E]{79}"), parent, name); +} + + +#include "kfile_rgb.moc" diff --git a/kfile-plugins/rgb/kfile_rgb.desktop b/kfile-plugins/rgb/kfile_rgb.desktop new file mode 100644 index 00000000..3a02989d --- /dev/null +++ b/kfile-plugins/rgb/kfile_rgb.desktop @@ -0,0 +1,61 @@ +[Desktop Entry] +Type=Service +Name=SGI Image (RGB) +Name[br]=Skeudenn SGI (RGB) +Name[bs]=SGI slika (RGB) +Name[ca]=Imatge SGI (RGB) +Name[cs]=SGI obrázek (RGB) +Name[cy]=Delwedd SGI (RGB) +Name[da]=SGI-billede (RGB) +Name[de]=SGI-Bild (RGB) +Name[el]=Εικόνα SGI (RGB) +Name[es]=Imagen SGI (RGB) +Name[et]=SGI pildifail (RGB) +Name[eu]=SGI irudia RGB) +Name[fa]=تصویر SGI (RGB) +Name[fi]=SGI-kuva (RGB) +Name[fr]=Image SGI (RVB) +Name[ga]=Íomhá SGI (RGB) +Name[gl]=Imaxe SGI (RGB) +Name[he]=תמונת SGI (RGB) +Name[hr]=SGI slika (RGB) +Name[hu]=SGI-kép (RGB) +Name[is]=SGI mynd (TGB) +Name[it]=Immagine SGI (RGB) +Name[ja]=SGI 画像 (RGB) +Name[kk]=SGI кескіні (RGB) +Name[km]=រូបភាព SGI (RGB) +Name[lt]=SGI paveiksliukas (RGB) +Name[ms]=Imej SGI (RGB) +Name[nb]=Bildeindeks +Name[nds]=SGI-Bild (RGB) +Name[ne]=SGI छवि (RGB) +Name[nl]=SGI-afbeelding (RGB) +Name[nn]=SGI-bilete (RGB) +Name[pl]=Obrazek SGI (RGB) +Name[pt]=Imagem SGI (RGB) +Name[pt_BR]=Imagem SGI (RGB) +Name[ro]=Imagine SGI (RGB) +Name[ru]=Изображение SGI (RGB) +Name[rw]=SGI Ishusho (RGB) +Name[se]=SGI-govva (RGB) +Name[sk]=SGI obrázok (RGB) +Name[sl]=Slika SGI (RGB) +Name[sr]=SGI слика (RGB) +Name[sr@Latn]=SGI slika (RGB) +Name[sv]=SGI-bild (RGB) +Name[ta]=எஸ்ஜிஐ படிமம் (RGB) +Name[tg]=Тасвироти SGI (RGB) +Name[th]=ภาพ SGI (RGB) +Name[tr]=SGI Resmi(KYM) +Name[uk]=Зображення SGI (RGB) +Name[uz]=SGI-rasm (RGB) +Name[uz@cyrillic]=SGI-расм (RGB) +Name[zh_CN]=SGI 图像(RGB) +Name[zh_HK]=SGI 圖像 (RGB) +Name[zh_TW]=SGI 影像(RGB) +ServiceTypes=KFilePlugin +X-KDE-Library=kfile_rgb +MimeType=image/x-rgb +PreferredGroups=Comment,Technical +PreferredItems=Dimensions,BitDepth,ColorMode,Compression,SharedRows,ImageName diff --git a/kfile-plugins/rgb/kfile_rgb.h b/kfile-plugins/rgb/kfile_rgb.h new file mode 100644 index 00000000..dbbfef0e --- /dev/null +++ b/kfile-plugins/rgb/kfile_rgb.h @@ -0,0 +1,41 @@ +/* This file is part of the KDE project + * Copyright (C) 2004 Melcrhio FRANZ <mfranz@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 version 2. + * + * 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; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + * + */ + +#ifndef __KFILE_RGB_H__ +#define __KFILE_RGB_H__ + +#include <kfilemetainfo.h> + +class QStringList; + +class KRgbPlugin : public KFilePlugin +{ + Q_OBJECT + +public: + KRgbPlugin(QObject *parent, const char *name, const QStringList& args); + virtual bool readInfo(KFileMetaInfo& info, uint what); + virtual bool writeInfo(const KFileMetaInfo& info) const; + virtual QValidator* createValidator(const QString& mimetype, + const QString &group, const QString &key, + QObject* parent, const char* name) const; + +}; + +#endif |