00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
#ifndef KILEMETAINFO_H
00021
#define KILEMETAINFO_H
00022
00023
00024
00025
#define m_unit outouftheway_m_unit
00026
00027
#include <qdict.h>
00028
#include <qvariant.h>
00029
#include <qobject.h>
00030
#include <qstring.h>
00031
#include <kurl.h>
00032
00033
#undef m_unit
00034
00035
class QValidator;
00036
class KFilePlugin;
00037
class KFileMetaInfoGroup;
00038
00048 class KIO_EXPORT KFileMimeTypeInfo
00049 {
00050
00051
00052
friend class KFilePlugin;
00053
friend class KFileMetaInfoProvider;
00054
00055
public:
00056 KFileMimeTypeInfo() {}
00057
00062 enum Attributes
00063 {
00064 Addable = 1,
00065 Removable = 2,
00066 Modifiable = 4,
00067 Cumulative = 8,
00070 Cummulative = Cumulative,
00071 Averaged = 16,
00073 MultiLine = 32,
00077 SqueezeText = 64
00081 };
00082
00087 enum Hint {
00088 NoHint = 0,
00089 Name = 1,
00090 Author = 2,
00091 Description = 3,
00092 Width = 4,
00093 Height = 5,
00094 Size = 6,
00095 Bitrate = 7,
00096 Length = 8,
00097 Hidden = 9,
00098 Thumbnail = 10
00099
00100 };
00101
00109 enum Unit {
00110 NoUnit = 0,
00111 Seconds = 1,
00112 MilliSeconds = 2,
00113 BitsPerSecond = 3,
00114 Pixels = 4,
00115 Inches = 5,
00116 Centimeters = 6,
00117 Bytes = 7,
00118 FramesPerSecond = 8,
00119 DotsPerInch = 9,
00120 BitsPerPixel = 10,
00121 Hertz = 11,
00122 KiloBytes = 12,
00123 Millimeters = 13
00124 };
00125
00126
00127
class ItemInfo;
00128
00135 class KIO_EXPORT GroupInfo
00136 {
00137
00138
friend class KFilePlugin;
00139
friend class KFileMimeTypeInfo;
00140
public:
00151 QStringList supportedKeys()
const
00152
{
00153
return m_supportedKeys;
00154 }
00155
00162 const QString& name()
const
00163
{
00164
return m_name;
00165 }
00166
00174 const QString& translatedName()
const
00175
{
00176
return m_translatedName;
00177 }
00178
00186
const ItemInfo * itemInfo(
const QString& key )
const;
00187
00193 uint attributes()
const
00194
{
00195
return m_attr;
00196 }
00197
00202 bool supportsVariableKeys()
const
00203
{
00204
return m_variableItemInfo;
00205 }
00206
00214 const ItemInfo* variableItemInfo( )
const
00215
{
00216
return m_variableItemInfo;
00217 }
00218
00219
private:
00221 GroupInfo(
const QString& name,
const QString& translatedName);
00222
00224
KFileMimeTypeInfo::ItemInfo* addItemInfo(
const QString& key,
00225
const QString& translatedKey,
00226 QVariant::Type type);
00227
00229
void addVariableInfo( QVariant::Type type, uint attr );
00230
00231
QString m_name;
00232
QString m_translatedName;
00233
QStringList m_supportedKeys;
00234 uint m_attr;
00235
ItemInfo* m_variableItemInfo;
00236
QDict<ItemInfo> m_itemDict;
00237
00238 };
00239
00245 class KIO_EXPORT ItemInfo
00246 {
00247
friend class KFilePlugin;
00248
friend class GroupInfo;
00249
public:
00251 ItemInfo() {}
00252
00260 const QString& prefix()
const
00261
{
00262
return m_prefix;
00263 }
00264
00271 const QString& suffix()
const
00272
{
00273
return m_suffix;
00274 }
00275
00282 QVariant::Type type()
const
00283
{
00284
return m_type;
00285 }
00286
00291 const QString& key()
const
00292
{
00293
return m_key;
00294 }
00295
00307
QString string(
const QVariant& value,
bool mangle =
true )
const;
00308
00314 bool isVariableItem()
const
00315
{
00316
00317
return key().isNull();
00318 }
00319
00326 const QString& translatedKey()
const
00327
{
00328
return m_translatedKey;
00329 }
00330
00336 uint attributes()
const
00337
{
00338
return m_attr;
00339 }
00340
00346 uint hint()
const
00347
{
00348
return m_hint;
00349 }
00350
00356 uint unit()
const
00357
{
00358
return m_unit;
00359 }
00360
00361
private:
00363 ItemInfo(
const QString& key,
const QString& translatedKey,
00364 QVariant::Type type)
00365 : m_key(key), m_translatedKey(translatedKey),
00366 m_type(type),
00367 m_attr(0), m_unit(NoUnit), m_hint(NoHint),
00368 m_prefix(
QString::null), m_suffix(
QString::null)
00369 {}
00370
00371
QString m_key;
00372
QString m_translatedKey;
00373 QVariant::Type m_type;
00374 uint m_attr;
00375 uint m_unit;
00376 uint m_hint;
00377
QString m_prefix;
00378
QString m_suffix;
00379 };
00380
00381
00382 ~KFileMimeTypeInfo();
00383
00394
QValidator * createValidator(
const QString& group,
const QString& key,
00395
QObject *parent = 0,
const char *name = 0)
const;
00396
00403
QStringList supportedGroups() const;
00404
00411
QStringList translatedGroups() const;
00412
00419 QStringList preferredGroups()
const
00420
{
00421
return m_preferredGroups;
00422 }
00423
00428 QString mimeType() const {
return m_mimeType;}
00429
00437
const GroupInfo * groupInfo(
const QString& group )
const;
00438
00439
00440
00441
00442
00449
QStringList supportedKeys() const;
00450
00456 QStringList preferredKeys()
const
00457
{
00458
return m_preferredKeys;
00459 }
00460
00461
00462 GroupInfo * addGroupInfo(
const QString& name,
00463
const QString& translatedName);
00464
00465
QString m_translatedName;
00466
QStringList m_supportedKeys;
00467 uint m_attr;
00468
00469
QDict<ItemInfo> m_itemDict;
00470
00471
00472
protected:
00474 KFileMimeTypeInfo(
const QString& mimeType );
00475
00476
QDict<GroupInfo> m_groups;
00477
QString m_mimeType;
00478
QStringList m_preferredKeys;
00479
QStringList m_preferredGroups;
00480 };
00481
00482
00488 class KIO_EXPORT KFileMetaInfoItem
00489 {
00490
public:
00491
class Data;
00492
typedef KFileMimeTypeInfo::Hint Hint;
00493
typedef KFileMimeTypeInfo::Unit Unit;
00494
typedef KFileMimeTypeInfo::Attributes Attributes;
00495
00501
00502 KFileMetaInfoItem(
const KFileMimeTypeInfo::ItemInfo* mti,
00503
const QString& key,
const QVariant& value);
00504
00508 KFileMetaInfoItem(
const KFileMetaInfoItem & item );
00509
00519
const KFileMetaInfoItem& operator= (
const KFileMetaInfoItem & item );
00520
00524 KFileMetaInfoItem();
00525
00526 ~KFileMetaInfoItem();
00527
00532
QString key()
const;
00533
00539
QString translatedKey()
const;
00540
00545
const QVariant& value()
const;
00546
00554
QString string(
bool mangle =
true )
const;
00555
00561
bool setValue(
const QVariant& value );
00562
00567 QVariant::Type type()
const;
00568
00577
bool isEditable()
const;
00578
00587
bool isRemoved()
const;
00588
00597
bool isModified()
const;
00598
00605
QString prefix()
const;
00606
00613
QString suffix()
const;
00614
00619 uint hint()
const;
00620
00626 uint unit()
const;
00627
00633 uint attributes()
const;
00634
00642
bool isValid()
const;
00643
00644 KIO_EXPORT
friend QDataStream& operator >>(
QDataStream& s, KFileMetaInfoItem& );
00645 KIO_EXPORT
friend QDataStream& operator >>(
QDataStream& s,
KFileMetaInfoGroup& );
00646 KIO_EXPORT
friend QDataStream& operator <<(
QDataStream& s,
const KFileMetaInfoItem& );
00647
friend class KFileMetaInfoGroup;
00648
00649
protected:
00650
void setAdded();
00651
void setRemoved();
00652
00653
void ref();
00654
void deref();
00655
00656 Data *d;
00657 };
00658
00664 class KIO_EXPORT KFileMetaInfoGroup
00665 {
00666
friend class KFilePlugin;
00667
friend class KFileMetaInfo;
00668 KIO_EXPORT
friend QDataStream& operator >>(
QDataStream& s, KFileMetaInfoGroup& );
00669 KIO_EXPORT
friend QDataStream& operator <<(
QDataStream& s,
const KFileMetaInfoGroup& );
00670
00671
public:
00672
class Data;
00678
00679 KFileMetaInfoGroup(
const QString& name,
const KFileMimeTypeInfo* info );
00680
00684 KFileMetaInfoGroup(
const KFileMetaInfoGroup& original );
00685
00695
const KFileMetaInfoGroup& operator= (
const KFileMetaInfoGroup& info );
00696
00701 KFileMetaInfoGroup();
00702
00703 ~KFileMetaInfoGroup();
00704
00712
bool isValid()
const;
00713
00719
bool isEmpty()
const;
00720
00727
bool isModified()
const;
00728
00733 KFileMetaInfoItem operator[](
const QString& key )
const
00734
{
return item( key ); }
00735
00742 KFileMetaInfoItem item(
const QString& key )
const;
00743
00749 KFileMetaInfoItem item( uint hint )
const;
00750
00757 const QVariant value(
const QString& key )
const
00758
{
00759
const KFileMetaInfoItem &i = item( key );
00760
return i.
value();
00761 }
00762
00773
QStringList supportedKeys() const;
00774
00780
bool supportsVariableKeys() const;
00781
00786
bool contains( const
QString& key ) const;
00787
00792
QStringList keys() const;
00793
00798
QStringList preferredKeys() const;
00799
00806
00807
00808
00809
00810
00818 KFileMetaInfoItem addItem( const
QString& key );
00819
00828
bool removeItem(const
QString& key);
00829
00834
QStringList removedItems();
00835
00840
QString name() const;
00841
00847
QString translatedName() const;
00848
00853 uint attributes() const;
00854
00855 protected:
00856
void setAdded();
00857 KFileMetaInfoItem appendItem( const
QString& key, const
QVariant& value);
00858
00859 Data* d;
00860
void ref();
00861
void deref();
00862
00863 };
00864
00865
00868
00869
00887 class KIO_EXPORT
KFileMetaInfo
00888 {
00889
public:
00890
typedef KFileMimeTypeInfo::Hint Hint;
00891
typedef KFileMimeTypeInfo::Unit Unit;
00892
typedef KFileMimeTypeInfo::Attributes Attributes;
00893
class Data;
00894
00899 enum What
00900 {
00901 Fastest = 0x1,
00904 DontCare = 0x2,
00905
00906 TechnicalInfo = 0x4,
00909 ContentInfo = 0x8,
00911 ExtenedAttr = 0x10,
00913 Thumbnail = 0x20,
00915 Preferred = 0x40,
00916 Everything = 0xffff
00917
00918 };
00919
00940 KFileMetaInfo(
const QString& path,
00941
const QString& mimeType = QString::null,
00942 uint what = Fastest);
00943
00951 KFileMetaInfo(
const KURL& url,
00952
const QString& mimeType = QString::null,
00953 uint what = Fastest);
00954
00959 KFileMetaInfo();
00960
00967 KFileMetaInfo(
const KFileMetaInfo& original);
00968
00969 ~KFileMetaInfo();
00970
00981
const KFileMetaInfo& operator= (
const KFileMetaInfo& info );
00982
00983
00988
QStringList groups() const;
00989
00994
QStringList supportedGroups() const;
00995
01000
QStringList preferredGroups() const;
01001
01006
QStringList preferredKeys() const;
01007
01012
QStringList supportedKeys() const;
01013
01018
QStringList editableGroups() const;
01019
01020
01021
01027 KFileMetaInfoItem item(const
QString& key) const;
01033 KFileMetaInfoItem item(const KFileMetaInfoItem::Hint hint) const;
01034
01042 KFileMetaInfoItem saveItem( const
QString& key,
01043 const
QString& preferredGroup =
QString::null,
01044
bool createGroup = true );
01045
01051 KFileMetaInfoGroup group(const
QString& key) const;
01052
01058 KFileMetaInfoGroup operator[] (const
QString& key)
const
01059
{
01060
return group(key);
01061 }
01062
01071
bool addGroup(
const QString& name );
01072
01081
bool removeGroup(
const QString& name );
01082
01087
QStringList removedGroups();
01088
01095
bool applyChanges();
01096
01102
bool contains(
const QString& key )
const;
01103
01109
bool containsGroup(
const QString& key )
const;
01110
01111
01112
01113
01114
01115
01116
const QVariant value(
const QString& key )
const
01117
{
01118
return item(key).
value();
01119 }
01120
01121
01127
bool isValid() const;
01128
01134
bool isEmpty() const;
01135
01140
QString mimeType() const;
01141
01146
QString path() const;
01147
01152
KURL url() const;
01153
01154 KIO_EXPORT friend
QDataStream& operator >>(
QDataStream& s, KFileMetaInfo& );
01155 KIO_EXPORT friend
QDataStream& operator <<(
QDataStream& s, const KFileMetaInfo& );
01156 friend class
KFilePlugin;
01157
01158 protected:
01159 KFileMetaInfoGroup appendGroup(const
QString& name);
01160
01165 KFilePlugin * const plugin() const;
01166
01167
void ref();
01168
void deref();
01169
01170 Data* d;
01171
01172 private:
01173 KFileMetaInfoItem findEditableItem( KFileMetaInfoGroup& group,
01174 const
QString& key );
01175
01176
void init( const
KURL& url,
01177 const
QString& mimeType =
QString::null,
01178 uint what = Fastest);
01179 };
01180
01183
01184
01202 class KIO_EXPORT KFilePlugin : public
QObject
01203 {
01204 Q_OBJECT
01205
01206
public:
01213 KFilePlugin( QObject *parent,
const char *name,
01214
const QStringList& args );
01215
01216
virtual ~KFilePlugin();
01217
01226
virtual bool readInfo( KFileMetaInfo& info,
01227 uint what = KFileMetaInfo::Fastest ) = 0;
01228
01235 virtual bool writeInfo(
const KFileMetaInfo& info )
const
01236
{
01237 Q_UNUSED(info);
01238
return true;
01239 }
01240
01254 virtual QValidator* createValidator(
const QString& mimeType,
01255
const QString& group,
01256
const QString& key,
01257 QObject* parent,
01258
const char* name)
const
01259
{
01260 Q_UNUSED(mimeType); Q_UNUSED(group);Q_UNUSED(key);
01261 Q_UNUSED(parent);Q_UNUSED(name);
01262
return 0;
01263 }
01264
01265
protected:
01266
01267
KFileMimeTypeInfo::GroupInfo* addGroupInfo(KFileMimeTypeInfo* info,
01268
const QString& key,
const QString& translatedKey)
const;
01269
void setAttributes(
KFileMimeTypeInfo::GroupInfo* gi, uint attr)
const;
01270
void addVariableInfo(
KFileMimeTypeInfo::GroupInfo* gi, QVariant::Type type,
01271 uint attr)
const;
01272
KFileMimeTypeInfo::ItemInfo* addItemInfo(
KFileMimeTypeInfo::GroupInfo* gi,
01273
const QString& key,
01274
const QString& translatedKey,
01275 QVariant::Type type);
01276
void setAttributes(
KFileMimeTypeInfo::ItemInfo* item, uint attr);
01277
void setHint(
KFileMimeTypeInfo::ItemInfo* item, uint hint);
01278
void setUnit(
KFileMimeTypeInfo::ItemInfo* item, uint unit);
01279
void setPrefix(
KFileMimeTypeInfo::ItemInfo* item,
const QString& prefix);
01280
void setSuffix(
KFileMimeTypeInfo::ItemInfo* item,
const QString& suffix);
01281 KFileMetaInfoGroup appendGroup(KFileMetaInfo& info,
const QString& key);
01282
void appendItem(KFileMetaInfoGroup& group,
const QString& key,
QVariant value);
01283
01287
01288
01289
01290
01291
01292
01293 KFileMimeTypeInfo * addMimeTypeInfo(
const QString& mimeType );
01294
01295
QStringList m_preferredKeys;
01296
QStringList m_preferredGroups;
01297
01298
protected:
01299
virtual void virtual_hook(
int id,
void* data );
01300
private:
01301
class KFilePluginPrivate;
01302 KFilePluginPrivate *d;
01303 };
01304
01307
01308
01315
class KIO_EXPORT KFileMetaInfoProvider:
private QObject
01316 {
01317
friend class KFilePlugin;
01318
01319 Q_OBJECT
01320
public:
01321
virtual ~KFileMetaInfoProvider();
01322
01323
static KFileMetaInfoProvider *
self();
01324
01329
KFilePlugin * plugin(
const QString& mimeType );
01330
01336
KFilePlugin * plugin(
const QString& mimeType,
const QString& protocol );
01337
01338
const KFileMimeTypeInfo * mimeTypeInfo(
const QString& mimeType );
01339
const KFileMimeTypeInfo * mimeTypeInfo(
const QString& mimeType,
const QString& protocol );
01340
01341
QStringList preferredKeys(
const QString& mimeType )
const;
01342
QStringList preferredGroups(
const QString& mimeType )
const;
01343
01345
QStringList supportedMimeTypes() const;
01346
01347 protected:
01348 KFileMetaInfoProvider();
01349
01350 private:
01351
01352
01353
01354
01355 struct CachedPluginInfo
01356 {
01357 CachedPluginInfo() : plugin( 0 ), mimeTypeInfo( 0 ), ownsPlugin( false ) {}
01358 CachedPluginInfo(
KFilePlugin* p, KFileMimeTypeInfo* i,
bool owns )
01359 : plugin( p ), mimeTypeInfo( i ), ownsPlugin( owns ) {}
01360
01361 ~CachedPluginInfo() {
01362
if ( ownsPlugin )
delete plugin;
01363
delete mimeTypeInfo;
01364 }
01365
01366
01367
KFilePlugin* plugin;
01368 KFileMimeTypeInfo* mimeTypeInfo;
01369
01370
01371
01372
bool ownsPlugin;
01373 };
01374
01375
01376
01377
QDict<CachedPluginInfo> m_plugins;
01378
01379
01380
01381
01382
01383
QDict<KFileMimeTypeInfo> m_pendingMimetypeInfos;
01384
01385
private:
01386
static KFileMetaInfoProvider * s_self;
01387
01388
KFilePlugin* loadPlugin(
const QString& mimeType,
const QString& protocol );
01389
KFilePlugin* loadAndRegisterPlugin(
const QString& mimeType,
const QString& protocol );
01390 KFileMimeTypeInfo * addMimeTypeInfo(
const QString& mimeType );
01391
01392
class KFileMetaInfoProviderPrivate;
01393 KFileMetaInfoProviderPrivate *d;
01394
01395 };
01396
01397 KIO_EXPORT
QDataStream& operator <<(
QDataStream& s,
const KFileMetaInfoItem& );
01398 KIO_EXPORT
QDataStream& operator >>(
QDataStream& s, KFileMetaInfoItem& );
01399
01400 KIO_EXPORT
QDataStream& operator <<(
QDataStream& s,
const KFileMetaInfoGroup& );
01401 KIO_EXPORT
QDataStream& operator >>(
QDataStream& s, KFileMetaInfoGroup& );
01402
01403 KIO_EXPORT
QDataStream& operator <<(
QDataStream& s,
const KFileMetaInfo& );
01404 KIO_EXPORT
QDataStream& operator >>(
QDataStream& s, KFileMetaInfo& );
01405
01406
01407
#endif // KILEMETAINFO_H