KFilePlugin Class Reference
#include <kfilemetainfo.h>
Inheritance diagram for KFilePlugin:

Detailed Description
Base class for a meta information plugin.Meta information plugins are used to extract useful information from files of a given type. These plugins are used in Konqueror's file properties dialog, for example.
If you want to write your own plugin, you need to derive from this class.
In the constructor of your class, you need to call addMimeTypeInfo() to tell the KFile framework which mimetype(s) your plugin supports. For each mimetype, use the addGroupInfo() and addItemInfo() methods to declare the meta information items the plugin calculates and to group them accordingly. For groups, use setAttributes() to customize your group (see KFileMimeTypeInfo::Attributes). For items, use setAttributes() to define the behaviour of the item; use setHint() to define the meaning of the item; use setUnit() to define the Unit, such as KFileMimeTypeInfo::Seconds or KFileMimeTypeInfo::KiloBytes. In short, the constructor defines the data structure of the meta information supported by your plugin.
Example:
FooPlugin::FooPlugin(QObject *parent, const char *name, const QStringList &args) : KFilePlugin(parent, name, args) { KFileMimeTypeInfo* info = addMimeTypeInfo( "application/x-foo" ); // our new group KFileMimeTypeInfo::GroupInfo* group = 0L; group = addGroupInfo(info, "FooInfo", i18n("Foo Information")); KFileMimeTypeInfo::ItemInfo* item; // our new items in the group item = addItemInfo(group, "Items", i18n("Items"), QVariant::Int); item = addItemInfo(group, "Size", i18n("Size"), QVariant::Int); setUnit(item, KFileMimeTypeInfo::KiloBytes); // strings are possible, too: //addItemInfo(group, "Document Type", i18n("Document type"), QVariant::String); }
Some meta information items are likely to be available in several different file formats, such as "Author"
, "Title"
(for documents), and "Length"
(for multimedia files). Be sure to use the naming scheme from existing plugins for your meta information items if possible. If, for example, the meta information of a group of files is shown in a table view, this will allow two files to share the same column (say "Length") even if they are of a different file type.
You must overwrite the readInfo() method. In this method you need to extract the meta information of the given file. You can use a third-party library to achieve this task. This might be the best way for binary files, since a change in the file format is likely to be supported by subsequent releases of that library. Alternatively, for text-based file formats, you can use QTextStream to parse the file. For simple file formats, QRegExp can be of great help, too.
After you extracted the relevant information, use appendGroup() and appendItem() to fill the meta information data structure (as defined in the constructor) with values. Note that you can leave out groups or items which are not appropriate for a particular file.
Example:
bool FooPlugin::readInfo( KFileMetaInfo& info, uint what) { int numItems = 0; int size = 0; // do your calculations here, e.g. using a third-party // library or by writing an own parser using e.g. QTextStream // calculate numItems and size ... // note: use the same key strings as in the constructor KFileMetaInfoGroup group = appendGroup(info, "FooInfo"); appendItem(group, "Items", numItems); appendItem(group, "Size", size); return true; }
If you want to define mutable meta information items, you need to overwrite the writeInfo() method. In this method, you can use third-party library (appropriate mostly for binary files, see above) or QTextStream to write the information back to the file. If you use QTextStream, be sure to write all file contents back.
For some items, it might be that not all possible values are allowed. You can overwrite the createValidator() method to define constraints for a meta information item. For example, the "Year"
field for an MP3 file could reject values outside the range 1500 - 2050 (at least for now). The validator is used to check values before the writeInfo() method is called so that writeInfo() is only provided correct values.
In your plugin, you need to create a factory for the KFilePlugin
Example:
typedef KGenericFactory<FooPlugin> FooFactory; K_EXPORT_COMPONENT_FACTORY(kfile_foo, FooFactory("kfile_foo"));
To make your plugin available within KDE, you also need to provide a .desktop file which describes your plugin. The required fields in the file are:
Type:
must be"Service"
Name:
the name of the pluginServiceTypes:
must contain"KFilePlugin"
X-KDE-Library
: the name of the library containing the KFile pluginMimeType:
the mimetype(s) which are supported by the pluginPreferredGroups:
a comma-separated list of the most important groups. This list defines the order in which the meta information groups should be displayedPreferredItems:
a comma-separated list of the most important items. This list defines the order in which the meta information items should be displayed
Example:
[Desktop Entry] Encoding=UTF-8 Type=Service Name=Foo Info ServiceTypes=KFilePlugin X-KDE-Library=kfile_foo MimeType=application/x-foo PreferredGroups=FooInfo PreferredItems=Items,Size
Definition at line 1383 of file kfilemetainfo.h.
Public Member Functions | |
KFilePlugin (QObject *parent, const char *name, const QStringList &args) | |
virtual | ~KFilePlugin () |
virtual bool | readInfo (KFileMetaInfo &info, uint what=KFileMetaInfo::Fastest)=0 |
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 |
Protected Member Functions | |
KFileMimeTypeInfo * | addMimeTypeInfo (const QString &mimeType) |
KFileMimeTypeInfo::GroupInfo * | addGroupInfo (KFileMimeTypeInfo *info, const QString &key, const QString &translatedKey) const |
void | setAttributes (KFileMimeTypeInfo::GroupInfo *gi, uint attr) const |
void | addVariableInfo (KFileMimeTypeInfo::GroupInfo *gi, QVariant::Type type, uint attr) const |
KFileMimeTypeInfo::ItemInfo * | addItemInfo (KFileMimeTypeInfo::GroupInfo *gi, const QString &key, const QString &translatedKey, QVariant::Type type) |
void | setAttributes (KFileMimeTypeInfo::ItemInfo *item, uint attr) |
void | setHint (KFileMimeTypeInfo::ItemInfo *item, uint hint) |
void | setUnit (KFileMimeTypeInfo::ItemInfo *item, uint unit) |
void | setPrefix (KFileMimeTypeInfo::ItemInfo *item, const QString &prefix) |
void | setSuffix (KFileMimeTypeInfo::ItemInfo *item, const QString &suffix) |
KFileMetaInfoGroup | appendGroup (KFileMetaInfo &info, const QString &key) |
void | appendItem (KFileMetaInfoGroup &group, const QString &key, QVariant value) |
virtual void | virtual_hook (int id, void *data) |
Protected Attributes | |
QStringList | m_preferredKeys |
QStringList | m_preferredGroups |
Constructor & Destructor Documentation
|
Creates a new KFilePlugin instance. You need to implement a constructor with the same argument list as this is required by KGenericFactory
Definition at line 765 of file kfilemetainfo.cpp. |
|
Destructor.
Definition at line 772 of file kfilemetainfo.cpp. |
Member Function Documentation
|
Creates a meta information group for KFileMimeTypeInfo object returned by addMimeTypeInfo().
Definition at line 786 of file kfilemetainfo.cpp. |
|
Adds a meta information item to a GroupInfo object as returned by addGroupInfo().
Definition at line 803 of file kfilemetainfo.cpp. |
|
Call this from within your constructor to tell the KFile framework what mimetypes your plugin supports.
Definition at line 777 of file kfilemetainfo.cpp. |
|
Call this method from within readInfo() to indicate that you wish to fill meta information items of the group identified by
Definition at line 878 of file kfilemetainfo.cpp. |
|
Call this method from within readInfo() to fill the meta information item identified by
Definition at line 883 of file kfilemetainfo.cpp. |
|
This method should create an appropriate validator for the specified item if it's editable or return a null pointer if not. If you don't have any editable items, you don't need to implement this method.
If you you don't need any validation, e.g. you accept any input, you can simply return
Definition at line 1451 of file kfilemetainfo.h. |
|
Read the info from the file in this method and insert it into the provided KFileMetaInfo object.
You can get the path to the file with KFileMetaInfo::path(). Use appendGroup() and appendItem() to fill
|
|
Sets some attributes for a meta information item. The attributes describe if the item is mutable, how it should be computed for a list of files, and how it should be displayed
Definition at line 811 of file kfilemetainfo.cpp. |
|
Sets attributes of the GroupInfo object returned by addGroupInfo().
Definition at line 792 of file kfilemetainfo.cpp. |
|
Defines the meaning of the meta information item. Some applications make use of this information, so be sure to check KFileMimeTypeInfo::Hint to see if an item's meaning is in the list.
Definition at line 816 of file kfilemetainfo.cpp. |
|
Sets a prefix string which is displayed before the item's value. Use this string if no predefined unit fits the item's unit. Be sure to translate the string with i18n()
Definition at line 868 of file kfilemetainfo.cpp. |
|
Sets a suffix string which is displayed before the item's value. Use this string if no predefined unit fits the item's unit. Be sure to translate the string with i18n()
Definition at line 873 of file kfilemetainfo.cpp. |
|
Sets the unit used in the meta information item. This unit is used to format the value and to make large values human-readable. For example, if the item's unit is KFileMimeTypeInfo::Seconds and the value is 276, it will be displayed as 4:36.
Definition at line 821 of file kfilemetainfo.cpp. |
|
Helper method to allow binary compatible extensions when needing "new virtual methods".
Definition at line 782 of file kfilemetainfo.cpp. |
|
Similar to the readInfo() but for writing the info back to the file. If you don't have any writable keys, don't implement this method
Definition at line 1431 of file kfilemetainfo.h. |
The documentation for this class was generated from the following files: