00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
#ifndef KILEMETAINFO_H
00023
#define KILEMETAINFO_H
00024
00025
00026
00027
#define m_unit outouftheway_m_unit
00028
00029
#include <qdict.h>
00030
#include <qvariant.h>
00031
#include <qobject.h>
00032
#include <qstring.h>
00033
#include <kurl.h>
00034
00035
#undef m_unit
00036
00037
class QValidator;
00038
class KFilePlugin;
00039
class KFileMetaInfoGroup;
00040
00051 class KFileMimeTypeInfo
00052 {
00053
00054
00055
friend class KFilePlugin;
00056
friend class KFileMetaInfoProvider;
00057
00058
public:
00059
KFileMimeTypeInfo() {}
00060
00065 enum Attributes
00066 {
00067
Addable = 1,
00068
Removable = 2,
00069
Modifiable = 4,
00070
Cummulative = 8,
00073
Averaged = 16,
00075
MultiLine = 32,
00079
SqueezeText = 64
00083 };
00084
00089 enum Hint {
00090
NoHint = 0,
00091
Name = 1,
00092
Author = 2,
00093
Description = 3,
00094
Width = 4,
00095
Height = 5,
00096
Size = 6,
00097
Bitrate = 7,
00098
Length = 8,
00099
Hidden = 9,
00100
Thumbnail = 10
00101
00102 };
00103
00111 enum Unit {
00112
NoUnit = 0,
00113
Seconds = 1,
00114
MilliSeconds = 2,
00115
BitsPerSecond = 3,
00116
Pixels = 4,
00117
Inches = 5,
00118
Centimeters = 6,
00119
Bytes = 7,
00120
FramesPerSecond = 8,
00121
DotsPerInch = 9,
00122
BitsPerPixel = 10,
00123
Hertz = 11,
00124
KiloBytes = 12
00125 };
00126
00127
00128
class ItemInfo;
00129
00136 class GroupInfo
00137 {
00138
00139
friend class KFilePlugin;
00140
friend class KFileMimeTypeInfo;
00141
public:
00152 QStringList supportedKeys()
const
00153
{
00154
return m_supportedKeys;
00155 }
00156
00163 const QString&
name()
const
00164
{
00165
return m_name;
00166 }
00167
00175 const QString&
translatedName()
const
00176
{
00177
return m_translatedName;
00178 }
00179
00187
const ItemInfo *
itemInfo(
const QString& key )
const;
00188
00194 uint
attributes()
const
00195
{
00196
return m_attr;
00197 }
00198
00203 bool supportsVariableKeys()
const
00204
{
00205
return m_variableItemInfo;
00206 }
00207
00215 const ItemInfo*
variableItemInfo( )
const
00216
{
00217
return m_variableItemInfo;
00218 }
00219
00220
private:
00222
GroupInfo(
const QString& name,
const QString& translatedName);
00223
00225
KFileMimeTypeInfo::ItemInfo* addItemInfo(
const QString& key,
00226
const QString& translatedKey,
00227 QVariant::Type type);
00228
00230
void addVariableInfo( QVariant::Type type, uint attr );
00231
00232
QString m_name;
00233
QString m_translatedName;
00234
QStringList m_supportedKeys;
00235 uint m_attr;
00236
ItemInfo* m_variableItemInfo;
00237
QDict<ItemInfo> m_itemDict;
00238
00239 };
00240
00246 class ItemInfo
00247 {
00248
friend class KFilePlugin;
00249
friend class GroupInfo;
00250
public:
00252
ItemInfo() {}
00253
00261 const QString&
prefix()
const
00262
{
00263
return m_prefix;
00264 }
00265
00272 const QString&
suffix()
const
00273
{
00274
return m_suffix;
00275 }
00276
00283 QVariant::Type
type()
const
00284
{
00285
return m_type;
00286 }
00287
00292 const QString&
key()
const
00293
{
00294
return m_key;
00295 }
00296
00308
QString string(
const QVariant& value,
bool mangle =
true )
const;
00309
00315 bool isVariableItem()
const
00316
{
00317
00318
return key().
isNull();
00319 }
00320
00327 const QString&
translatedKey()
const
00328
{
00329
return m_translatedKey;
00330 }
00331
00337 uint
attributes()
const
00338
{
00339
return m_attr;
00340 }
00341
00347 uint
hint()
const
00348
{
00349
return m_hint;
00350 }
00351
00357 uint
unit()
const
00358
{
00359
return m_unit;
00360 }
00361
00362
private:
00364
ItemInfo(
const QString& key,
const QString& translatedKey,
00365 QVariant::Type type)
00366 : m_key(key), m_translatedKey(translatedKey),
00367 m_type(type),
00368 m_attr(0), m_unit(NoUnit), m_hint(NoHint),
00369 m_prefix(
QString::null), m_suffix(
QString::null)
00370 {}
00371
00372
QString m_key;
00373
QString m_translatedKey;
00374 QVariant::Type m_type;
00375 uint m_attr;
00376 uint m_unit;
00377 uint m_hint;
00378
QString m_prefix;
00379
QString m_suffix;
00380 };
00381
00382
00383 ~
KFileMimeTypeInfo();
00384
00395
QValidator *
createValidator(
const QString& group,
const QString& key,
00396
QObject *parent = 0,
const char *name = 0)
const;
00397
00404
QStringList supportedGroups() const;
00405
00412
QStringList translatedGroups() const;
00413
00420 QStringList preferredGroups()
const
00421
{
00422
return m_preferredGroups;
00423 }
00424
00429 QString mimeType() const {
return m_mimeType;}
00430
00438
const GroupInfo *
groupInfo(
const QString& group )
const;
00439
00440
00441
00442
00443
00450
QStringList supportedKeys() const;
00451
00457 QStringList preferredKeys()
const
00458
{
00459
return m_preferredKeys;
00460 }
00461
00462
00463 GroupInfo * addGroupInfo(
const QString& name,
00464
const QString& translatedName);
00465
00466
QString m_translatedName;
00467
QStringList m_supportedKeys;
00468 uint m_attr;
00469
00470
QDict<ItemInfo> m_itemDict;
00471
00472
00473
protected:
00475
KFileMimeTypeInfo(
const QString& mimeType );
00476
00477
QDict<GroupInfo> m_groups;
00478
QString m_mimeType;
00479
QStringList m_preferredKeys;
00480
QStringList m_preferredGroups;
00481 };
00482
00483
00489 class KFileMetaInfoItem
00490 {
00491
public:
00492
class Data;
00493
typedef KFileMimeTypeInfo::Hint Hint;
00494
typedef KFileMimeTypeInfo::Unit Unit;
00495
typedef KFileMimeTypeInfo::Attributes Attributes;
00496
00502
00503
KFileMetaInfoItem(
const KFileMimeTypeInfo::ItemInfo* mti,
00504
const QString&
key,
const QVariant&
value);
00505
00509
KFileMetaInfoItem(
const KFileMetaInfoItem & item );
00510
00520
const KFileMetaInfoItem&
operator= (
const KFileMetaInfoItem & item );
00521
00525
KFileMetaInfoItem();
00526
00527 ~
KFileMetaInfoItem();
00528
00533
QString key()
const;
00534
00540
QString translatedKey()
const;
00541
00546
const QVariant&
value()
const;
00547
00555
QString string(
bool mangle =
true )
const;
00556
00562
bool setValue(
const QVariant& value );
00563
00568 QVariant::Type
type()
const;
00569
00578
bool isEditable()
const;
00579
00588
bool isRemoved()
const;
00589
00598
bool isModified()
const;
00599
00606
QString prefix()
const;
00607
00614
QString suffix()
const;
00615
00620 uint
hint()
const;
00621
00627 uint
unit()
const;
00628
00634 uint
attributes()
const;
00635
00643
bool isValid()
const;
00644
00645
friend QDataStream& operator >>(
QDataStream& s,
KFileMetaInfoItem& );
00646
friend QDataStream& operator >>(
QDataStream& s,
KFileMetaInfoGroup& );
00647
friend QDataStream& operator <<(
QDataStream& s,
const KFileMetaInfoItem& );
00648
friend class KFileMetaInfoGroup;
00649
00650
protected:
00651
void setAdded();
00652
void setRemoved();
00653
00654
void ref();
00655
void deref();
00656
00657 Data *d;
00658 };
00659
00665 class KFileMetaInfoGroup
00666 {
00667
friend class KFilePlugin;
00668
friend class KFileMetaInfo;
00669
friend QDataStream& operator >>(
QDataStream& s,
KFileMetaInfoGroup& );
00670
friend QDataStream& operator <<(
QDataStream& s,
const KFileMetaInfoGroup& );
00671
00672
public:
00673
class Data;
00679
00680
KFileMetaInfoGroup(
const QString&
name,
const KFileMimeTypeInfo* info );
00681
00685
KFileMetaInfoGroup(
const KFileMetaInfoGroup& original );
00686
00696
const KFileMetaInfoGroup&
operator= (
const KFileMetaInfoGroup& info );
00697
00702
KFileMetaInfoGroup();
00703
00704 ~
KFileMetaInfoGroup();
00705
00713
bool isValid()
const;
00714
00720
bool isEmpty()
const;
00721
00728
bool isModified()
const;
00729
00734 KFileMetaInfoItem operator[](
const QString& key )
const
00735
{
return item( key ); }
00736
00743
KFileMetaInfoItem item(
const QString& key )
const;
00744
00750
KFileMetaInfoItem item( uint hint )
const;
00751
00758 const QVariant value(
const QString& key )
const
00759
{
00760
const KFileMetaInfoItem &i =
item( key );
00761
return i.
value();
00762 }
00763
00774
QStringList supportedKeys() const;
00775
00781
bool supportsVariableKeys() const;
00782
00787
bool contains( const
QString& key ) const;
00788
00793
QStringList keys() const;
00794
00799
QStringList preferredKeys() const;
00800
00807
00808
00809
00810
00811
00819
KFileMetaInfoItem addItem( const
QString& key );
00820
00829
bool removeItem(const
QString& key);
00830
00835
QStringList removedItems();
00836
00841
QString name() const;
00842
00848
QString translatedName() const;
00849
00854 uint attributes() const;
00855
00856 protected:
00857
void setAdded();
00858
KFileMetaInfoItem appendItem( const
QString& key, const
QVariant& value);
00859
00860 Data* d;
00861
void ref();
00862
void deref();
00863
00864 };
00865
00866
00869
00870
00888 class
KFileMetaInfo
00889 {
00890
public:
00891
typedef KFileMimeTypeInfo::Hint Hint;
00892
typedef KFileMimeTypeInfo::Unit Unit;
00893
typedef KFileMimeTypeInfo::Attributes Attributes;
00894
class Data;
00895
00900 enum What
00901 {
00902 Fastest = 0x1,
00905 DontCare = 0x2,
00906
00907 TechnicalInfo = 0x4,
00910 ContentInfo = 0x8,
00912 ExtenedAttr = 0x10,
00914 Thumbnail = 0x20,
00916 Preferred = 0x40,
00917 Everything = 0xffff
00918
00919 };
00920
00941 KFileMetaInfo(
const QString& path,
00942
const QString& mimeType = QString::null,
00943 uint what = Fastest);
00944
00952 KFileMetaInfo(
const KURL& url,
00953
const QString& mimeType = QString::null,
00954 uint what = Fastest);
00955
00960 KFileMetaInfo();
00961
00968 KFileMetaInfo(
const KFileMetaInfo& original);
00969
00970 ~KFileMetaInfo();
00971
00982
const KFileMetaInfo&
operator= (
const KFileMetaInfo& info );
00983
00984
00989
QStringList groups() const;
00990
00995
QStringList supportedGroups() const;
00996
01001
QStringList preferredGroups() const;
01002
01007
QStringList preferredKeys() const;
01008
01013
QStringList supportedKeys() const;
01014
01019
QStringList editableGroups() const;
01020
01021
01022
01028
KFileMetaInfoItem item(const
QString& key) const;
01034
KFileMetaInfoItem item(const
KFileMetaInfoItem::Hint hint) const;
01035
01043
KFileMetaInfoItem saveItem( const
QString& key,
01044 const
QString& preferredGroup =
QString::null,
01045
bool createGroup = true );
01046
01052
KFileMetaInfoGroup group(const
QString& key) const;
01053
01059 KFileMetaInfoGroup operator[] (const
QString& key)
const
01060
{
01061
return group(key);
01062 }
01063
01072
bool addGroup(
const QString& name );
01073
01082
bool removeGroup(
const QString& name );
01083
01088
QStringList removedGroups();
01089
01096
bool applyChanges();
01097
01103
bool contains(
const QString& key )
const;
01104
01110
bool containsGroup(
const QString& key )
const;
01111
01112
01113
01114
01115
01116
01117
const QVariant value(
const QString& key )
const
01118
{
01119
return item(key).
value();
01120 }
01121
01122
01128
bool isValid() const;
01129
01135
bool isEmpty() const;
01136
01141
QString mimeType() const;
01142
01147
QString path() const;
01148
01153
KURL url() const;
01154
01155 friend
QDataStream& operator >>(
QDataStream& s, KFileMetaInfo& );
01156 friend
QDataStream& operator <<(
QDataStream& s, const KFileMetaInfo& );
01157 friend class
KFilePlugin;
01158
01159 protected:
01160
KFileMetaInfoGroup appendGroup(const
QString& name);
01161
01166 KFilePlugin * const plugin() const;
01167
01168
void ref();
01169
void deref();
01170
01171 Data* d;
01172
01173 private:
01174
KFileMetaInfoItem findEditableItem(
KFileMetaInfoGroup& group,
01175 const
QString& key );
01176
01177
void init( const
KURL& url,
01178 const
QString& mimeType =
QString::null,
01179 uint what = Fastest);
01180 };
01181
01184
01185
01203 class KFilePlugin : public
QObject
01204 {
01205 Q_OBJECT
01206
01207
public:
01214 KFilePlugin( QObject *parent,
const char *name,
01215
const QStringList& args );
01216
01217
virtual ~KFilePlugin();
01218
01227
virtual bool readInfo( KFileMetaInfo& info,
01228 uint what = KFileMetaInfo::Fastest ) = 0;
01229
01236 virtual bool writeInfo(
const KFileMetaInfo& info )
const
01237
{
01238 Q_UNUSED(info);
01239
return true;
01240 }
01241
01255 virtual QValidator* createValidator(
const QString& mimeType,
01256
const QString& group,
01257
const QString& key,
01258 QObject* parent,
01259
const char* name)
const
01260
{
01261 Q_UNUSED(mimeType); Q_UNUSED(group);Q_UNUSED(key);
01262 Q_UNUSED(parent);Q_UNUSED(name);
01263
return 0;
01264 }
01265
01266
protected:
01267
01268
KFileMimeTypeInfo::GroupInfo* addGroupInfo(
KFileMimeTypeInfo* info,
01269
const QString& key,
const QString& translatedKey)
const;
01270
void setAttributes(
KFileMimeTypeInfo::GroupInfo* gi, uint attr)
const;
01271
void addVariableInfo(
KFileMimeTypeInfo::GroupInfo* gi, QVariant::Type type,
01272 uint attr)
const;
01273
KFileMimeTypeInfo::ItemInfo* addItemInfo(
KFileMimeTypeInfo::GroupInfo* gi,
01274
const QString& key,
01275
const QString& translatedKey,
01276 QVariant::Type type);
01277
void setAttributes(
KFileMimeTypeInfo::ItemInfo* item, uint attr);
01278
void setHint(
KFileMimeTypeInfo::ItemInfo* item, uint hint);
01279
void setUnit(
KFileMimeTypeInfo::ItemInfo* item, uint unit);
01280
void setPrefix(
KFileMimeTypeInfo::ItemInfo* item,
const QString& prefix);
01281
void setSuffix(
KFileMimeTypeInfo::ItemInfo* item,
const QString& suffix);
01282
KFileMetaInfoGroup appendGroup(KFileMetaInfo& info,
const QString& key);
01283
void appendItem(
KFileMetaInfoGroup& group,
const QString& key,
QVariant value);
01284
01288
01289
01290
KFileMimeTypeInfo * addMimeTypeInfo(
const QString& mimeType );
01291
01292
QStringList m_preferredKeys;
01293
QStringList m_preferredGroups;
01294
01295
protected:
01296
virtual void virtual_hook(
int id,
void* data );
01297
private:
01298
class KFilePluginPrivate;
01299 KFilePluginPrivate *d;
01300 };
01301
01304
01305
01312
class KFileMetaInfoProvider:
private QObject
01313 {
01314
friend class KFilePlugin;
01315
01316 Q_OBJECT
01317
public:
01318
virtual ~KFileMetaInfoProvider();
01319
01320
static KFileMetaInfoProvider *
self();
01321
01326
KFilePlugin * plugin(
const QString& mimeType );
01327
01328
const KFileMimeTypeInfo * mimeTypeInfo(
const QString& mimeType );
01329
01330
QStringList preferredKeys(
const QString& mimeType )
const;
01331
QStringList preferredGroups(
const QString& mimeType )
const;
01332
01334
QStringList supportedMimeTypes() const;
01335
01336 protected:
01337 KFileMetaInfoProvider();
01338
01339
QDict<
KFilePlugin> m_plugins;
01340
QDict<
KFileMimeTypeInfo> m_mimeTypeDict;
01341
01342 private:
01343 static KFileMetaInfoProvider * s_self;
01344
01345
KFileMimeTypeInfo * addMimeTypeInfo( const
QString& mimeType );
01346
01347 class KFileMetaInfoProviderPrivate;
01348 KFileMetaInfoProviderPrivate *d;
01349
01350 };
01351
01352
QDataStream& operator <<(
QDataStream& s, const
KFileMetaInfoItem& );
01353
QDataStream& operator >>(
QDataStream& s, KFileMetaInfoItem& );
01354
01355
QDataStream& operator <<(
QDataStream& s, const
KFileMetaInfoGroup& );
01356
QDataStream& operator >>(
QDataStream& s, KFileMetaInfoGroup& );
01357
01358
QDataStream& operator <<(
QDataStream& s, const KFileMetaInfo& );
01359
QDataStream& operator >>(
QDataStream& s, KFileMetaInfo& );
01360
01361
01362 #endif