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
Cumulative = 8,
00073
Cummulative = Cumulative,
00074
Averaged = 16,
00076
MultiLine = 32,
00080
SqueezeText = 64
00084 };
00085
00090 enum Hint {
00091
NoHint = 0,
00092
Name = 1,
00093
Author = 2,
00094
Description = 3,
00095
Width = 4,
00096
Height = 5,
00097
Size = 6,
00098
Bitrate = 7,
00099
Length = 8,
00100
Hidden = 9,
00101
Thumbnail = 10
00102
00103 };
00104
00112 enum Unit {
00113
NoUnit = 0,
00114
Seconds = 1,
00115
MilliSeconds = 2,
00116
BitsPerSecond = 3,
00117
Pixels = 4,
00118
Inches = 5,
00119
Centimeters = 6,
00120
Bytes = 7,
00121
FramesPerSecond = 8,
00122
DotsPerInch = 9,
00123
BitsPerPixel = 10,
00124
Hertz = 11,
00125
KiloBytes = 12,
00126
Millimeters = 13
00127 };
00128
00129
00130
class ItemInfo;
00131
00138 class GroupInfo
00139 {
00140
00141
friend class KFilePlugin;
00142
friend class KFileMimeTypeInfo;
00143
public:
00154 QStringList supportedKeys()
const
00155
{
00156
return m_supportedKeys;
00157 }
00158
00165 const QString&
name()
const
00166
{
00167
return m_name;
00168 }
00169
00177 const QString&
translatedName()
const
00178
{
00179
return m_translatedName;
00180 }
00181
00189
const ItemInfo *
itemInfo(
const QString& key )
const;
00190
00196 uint
attributes()
const
00197
{
00198
return m_attr;
00199 }
00200
00205 bool supportsVariableKeys()
const
00206
{
00207
return m_variableItemInfo;
00208 }
00209
00217 const ItemInfo*
variableItemInfo( )
const
00218
{
00219
return m_variableItemInfo;
00220 }
00221
00222
private:
00224
GroupInfo(
const QString& name,
const QString& translatedName);
00225
00227
KFileMimeTypeInfo::ItemInfo* addItemInfo(
const QString& key,
00228
const QString& translatedKey,
00229 QVariant::Type type);
00230
00232
void addVariableInfo( QVariant::Type type, uint attr );
00233
00234
QString m_name;
00235
QString m_translatedName;
00236
QStringList m_supportedKeys;
00237 uint m_attr;
00238
ItemInfo* m_variableItemInfo;
00239
QDict<ItemInfo> m_itemDict;
00240
00241 };
00242
00248 class ItemInfo
00249 {
00250
friend class KFilePlugin;
00251
friend class GroupInfo;
00252
public:
00254
ItemInfo() {}
00255
00263 const QString&
prefix()
const
00264
{
00265
return m_prefix;
00266 }
00267
00274 const QString&
suffix()
const
00275
{
00276
return m_suffix;
00277 }
00278
00285 QVariant::Type
type()
const
00286
{
00287
return m_type;
00288 }
00289
00294 const QString&
key()
const
00295
{
00296
return m_key;
00297 }
00298
00310
QString string(
const QVariant& value,
bool mangle =
true )
const;
00311
00317 bool isVariableItem()
const
00318
{
00319
00320
return key().isNull();
00321 }
00322
00329 const QString&
translatedKey()
const
00330
{
00331
return m_translatedKey;
00332 }
00333
00339 uint
attributes()
const
00340
{
00341
return m_attr;
00342 }
00343
00349 uint
hint()
const
00350
{
00351
return m_hint;
00352 }
00353
00359 uint
unit()
const
00360
{
00361
return m_unit;
00362 }
00363
00364
private:
00366
ItemInfo(
const QString& key,
const QString& translatedKey,
00367 QVariant::Type type)
00368 : m_key(key), m_translatedKey(translatedKey),
00369 m_type(type),
00370 m_attr(0), m_unit(NoUnit), m_hint(NoHint),
00371 m_prefix(
QString::null), m_suffix(
QString::null)
00372 {}
00373
00374
QString m_key;
00375
QString m_translatedKey;
00376 QVariant::Type m_type;
00377 uint m_attr;
00378 uint m_unit;
00379 uint m_hint;
00380
QString m_prefix;
00381
QString m_suffix;
00382 };
00383
00384
00385 ~
KFileMimeTypeInfo();
00386
00397
QValidator *
createValidator(
const QString& group,
const QString& key,
00398
QObject *parent = 0,
const char *name = 0)
const;
00399
00406
QStringList supportedGroups() const;
00407
00414
QStringList translatedGroups() const;
00415
00422 QStringList preferredGroups()
const
00423
{
00424
return m_preferredGroups;
00425 }
00426
00431 QString mimeType() const {
return m_mimeType;}
00432
00440
const GroupInfo *
groupInfo(
const QString& group )
const;
00441
00442
00443
00444
00445
00452
QStringList supportedKeys() const;
00453
00459 QStringList preferredKeys()
const
00460
{
00461
return m_preferredKeys;
00462 }
00463
00464
00465 GroupInfo * addGroupInfo(
const QString& name,
00466
const QString& translatedName);
00467
00468
QString m_translatedName;
00469
QStringList m_supportedKeys;
00470 uint m_attr;
00471
00472
QDict<ItemInfo> m_itemDict;
00473
00474
00475
protected:
00477
KFileMimeTypeInfo(
const QString& mimeType );
00478
00479
QDict<GroupInfo> m_groups;
00480
QString m_mimeType;
00481
QStringList m_preferredKeys;
00482
QStringList m_preferredGroups;
00483 };
00484
00485
00491 class KFileMetaInfoItem
00492 {
00493
public:
00494
class Data;
00495
typedef KFileMimeTypeInfo::Hint Hint;
00496
typedef KFileMimeTypeInfo::Unit Unit;
00497
typedef KFileMimeTypeInfo::Attributes Attributes;
00498
00504
00505
KFileMetaInfoItem(
const KFileMimeTypeInfo::ItemInfo* mti,
00506
const QString&
key,
const QVariant&
value);
00507
00511
KFileMetaInfoItem(
const KFileMetaInfoItem & item );
00512
00522
const KFileMetaInfoItem&
operator= (
const KFileMetaInfoItem & item );
00523
00527
KFileMetaInfoItem();
00528
00529 ~
KFileMetaInfoItem();
00530
00535
QString key()
const;
00536
00542
QString translatedKey()
const;
00543
00548
const QVariant&
value()
const;
00549
00557
QString string(
bool mangle =
true )
const;
00558
00564
bool setValue(
const QVariant& value );
00565
00570 QVariant::Type
type()
const;
00571
00580
bool isEditable()
const;
00581
00590
bool isRemoved()
const;
00591
00600
bool isModified()
const;
00601
00608
QString prefix()
const;
00609
00616
QString suffix()
const;
00617
00622 uint
hint()
const;
00623
00629 uint
unit()
const;
00630
00636 uint
attributes()
const;
00637
00645
bool isValid()
const;
00646
00647
friend QDataStream& operator >>(
QDataStream& s,
KFileMetaInfoItem& );
00648
friend QDataStream& operator >>(
QDataStream& s,
KFileMetaInfoGroup& );
00649
friend QDataStream& operator <<(
QDataStream& s,
const KFileMetaInfoItem& );
00650
friend class KFileMetaInfoGroup;
00651
00652
protected:
00653
void setAdded();
00654
void setRemoved();
00655
00656
void ref();
00657
void deref();
00658
00659 Data *d;
00660 };
00661
00667 class KFileMetaInfoGroup
00668 {
00669
friend class KFilePlugin;
00670
friend class KFileMetaInfo;
00671
friend QDataStream& operator >>(
QDataStream& s,
KFileMetaInfoGroup& );
00672
friend QDataStream& operator <<(
QDataStream& s,
const KFileMetaInfoGroup& );
00673
00674
public:
00675
class Data;
00681
00682
KFileMetaInfoGroup(
const QString&
name,
const KFileMimeTypeInfo* info );
00683
00687
KFileMetaInfoGroup(
const KFileMetaInfoGroup& original );
00688
00698
const KFileMetaInfoGroup&
operator= (
const KFileMetaInfoGroup& info );
00699
00704
KFileMetaInfoGroup();
00705
00706 ~
KFileMetaInfoGroup();
00707
00715
bool isValid()
const;
00716
00722
bool isEmpty()
const;
00723
00730
bool isModified()
const;
00731
00736 KFileMetaInfoItem operator[](
const QString& key )
const
00737
{
return item( key ); }
00738
00745
KFileMetaInfoItem item(
const QString& key )
const;
00746
00752
KFileMetaInfoItem item( uint hint )
const;
00753
00760 const QVariant value(
const QString& key )
const
00761
{
00762
const KFileMetaInfoItem &i =
item( key );
00763
return i.
value();
00764 }
00765
00776
QStringList supportedKeys() const;
00777
00783
bool supportsVariableKeys() const;
00784
00789
bool contains( const
QString& key ) const;
00790
00795
QStringList keys() const;
00796
00801
QStringList preferredKeys() const;
00802
00809
00810
00811
00812
00813
00821
KFileMetaInfoItem addItem( const
QString& key );
00822
00831
bool removeItem(const
QString& key);
00832
00837
QStringList removedItems();
00838
00843
QString name() const;
00844
00850
QString translatedName() const;
00851
00856 uint attributes() const;
00857
00858 protected:
00859
void setAdded();
00860
KFileMetaInfoItem appendItem( const
QString& key, const
QVariant& value);
00861
00862 Data* d;
00863
void ref();
00864
void deref();
00865
00866 };
00867
00868
00871
00872
00890 class
KFileMetaInfo
00891 {
00892
public:
00893
typedef KFileMimeTypeInfo::Hint Hint;
00894
typedef KFileMimeTypeInfo::Unit Unit;
00895
typedef KFileMimeTypeInfo::Attributes Attributes;
00896
class Data;
00897
00902 enum What
00903 {
00904 Fastest = 0x1,
00907 DontCare = 0x2,
00908
00909 TechnicalInfo = 0x4,
00912 ContentInfo = 0x8,
00914 ExtenedAttr = 0x10,
00916 Thumbnail = 0x20,
00918 Preferred = 0x40,
00919 Everything = 0xffff
00920
00921 };
00922
00943 KFileMetaInfo(
const QString& path,
00944
const QString& mimeType = QString::null,
00945 uint what = Fastest);
00946
00954 KFileMetaInfo(
const KURL& url,
00955
const QString& mimeType = QString::null,
00956 uint what = Fastest);
00957
00962 KFileMetaInfo();
00963
00970 KFileMetaInfo(
const KFileMetaInfo& original);
00971
00972 ~KFileMetaInfo();
00973
00984
const KFileMetaInfo&
operator= (
const KFileMetaInfo& info );
00985
00986
00991
QStringList groups() const;
00992
00997
QStringList supportedGroups() const;
00998
01003
QStringList preferredGroups() const;
01004
01009
QStringList preferredKeys() const;
01010
01015
QStringList supportedKeys() const;
01016
01021
QStringList editableGroups() const;
01022
01023
01024
01030
KFileMetaInfoItem item(const
QString& key) const;
01036
KFileMetaInfoItem item(const
KFileMetaInfoItem::Hint hint) const;
01037
01045
KFileMetaInfoItem saveItem( const
QString& key,
01046 const
QString& preferredGroup =
QString::null,
01047
bool createGroup = true );
01048
01054
KFileMetaInfoGroup group(const
QString& key) const;
01055
01061 KFileMetaInfoGroup operator[] (const
QString& key)
const
01062
{
01063
return group(key);
01064 }
01065
01074
bool addGroup(
const QString& name );
01075
01084
bool removeGroup(
const QString& name );
01085
01090
QStringList removedGroups();
01091
01098
bool applyChanges();
01099
01105
bool contains(
const QString& key )
const;
01106
01112
bool containsGroup(
const QString& key )
const;
01113
01114
01115
01116
01117
01118
01119
const QVariant value(
const QString& key )
const
01120
{
01121
return item(key).
value();
01122 }
01123
01124
01130
bool isValid() const;
01131
01137
bool isEmpty() const;
01138
01143
QString mimeType() const;
01144
01149
QString path() const;
01150
01155
KURL url() const;
01156
01157 friend
QDataStream& operator >>(
QDataStream& s, KFileMetaInfo& );
01158 friend
QDataStream& operator <<(
QDataStream& s, const KFileMetaInfo& );
01159 friend class
KFilePlugin;
01160
01161 protected:
01162
KFileMetaInfoGroup appendGroup(const
QString& name);
01163
01168 KFilePlugin * const plugin() const;
01169
01170
void ref();
01171
void deref();
01172
01173 Data* d;
01174
01175 private:
01176
KFileMetaInfoItem findEditableItem(
KFileMetaInfoGroup& group,
01177 const
QString& key );
01178
01179
void init( const
KURL& url,
01180 const
QString& mimeType =
QString::null,
01181 uint what = Fastest);
01182 };
01183
01186
01187
01205 class KFilePlugin : public
QObject
01206 {
01207 Q_OBJECT
01208
01209
public:
01216 KFilePlugin( QObject *parent,
const char *name,
01217
const QStringList& args );
01218
01219
virtual ~KFilePlugin();
01220
01229
virtual bool readInfo( KFileMetaInfo& info,
01230 uint what = KFileMetaInfo::Fastest ) = 0;
01231
01238 virtual bool writeInfo(
const KFileMetaInfo& info )
const
01239
{
01240 Q_UNUSED(info);
01241
return true;
01242 }
01243
01257 virtual QValidator* createValidator(
const QString& mimeType,
01258
const QString& group,
01259
const QString& key,
01260 QObject* parent,
01261
const char* name)
const
01262
{
01263 Q_UNUSED(mimeType); Q_UNUSED(group);Q_UNUSED(key);
01264 Q_UNUSED(parent);Q_UNUSED(name);
01265
return 0;
01266 }
01267
01268
protected:
01269
01270
KFileMimeTypeInfo::GroupInfo* addGroupInfo(
KFileMimeTypeInfo* info,
01271
const QString& key,
const QString& translatedKey)
const;
01272
void setAttributes(
KFileMimeTypeInfo::GroupInfo* gi, uint attr)
const;
01273
void addVariableInfo(
KFileMimeTypeInfo::GroupInfo* gi, QVariant::Type type,
01274 uint attr)
const;
01275
KFileMimeTypeInfo::ItemInfo* addItemInfo(
KFileMimeTypeInfo::GroupInfo* gi,
01276
const QString& key,
01277
const QString& translatedKey,
01278 QVariant::Type type);
01279
void setAttributes(
KFileMimeTypeInfo::ItemInfo* item, uint attr);
01280
void setHint(
KFileMimeTypeInfo::ItemInfo* item, uint hint);
01281
void setUnit(
KFileMimeTypeInfo::ItemInfo* item, uint unit);
01282
void setPrefix(
KFileMimeTypeInfo::ItemInfo* item,
const QString& prefix);
01283
void setSuffix(
KFileMimeTypeInfo::ItemInfo* item,
const QString& suffix);
01284
KFileMetaInfoGroup appendGroup(KFileMetaInfo& info,
const QString& key);
01285
void appendItem(
KFileMetaInfoGroup& group,
const QString& key,
QVariant value);
01286
01290
01291
01292
KFileMimeTypeInfo * addMimeTypeInfo(
const QString& mimeType );
01293
01294
QStringList m_preferredKeys;
01295
QStringList m_preferredGroups;
01296
01297
protected:
01298
virtual void virtual_hook(
int id,
void* data );
01299
private:
01300
class KFilePluginPrivate;
01301 KFilePluginPrivate *d;
01302 };
01303
01306
01307
01314
class KFileMetaInfoProvider:
private QObject
01315 {
01316
friend class KFilePlugin;
01317
01318 Q_OBJECT
01319
public:
01320
virtual ~KFileMetaInfoProvider();
01321
01322
static KFileMetaInfoProvider *
self();
01323
01328
KFilePlugin * plugin(
const QString& mimeType );
01329
01330
const KFileMimeTypeInfo * mimeTypeInfo(
const QString& mimeType );
01331
01332
QStringList preferredKeys(
const QString& mimeType )
const;
01333
QStringList preferredGroups(
const QString& mimeType )
const;
01334
01336
QStringList supportedMimeTypes() const;
01337
01338 protected:
01339 KFileMetaInfoProvider();
01340
01341
QDict<
KFilePlugin> m_plugins;
01342
QDict<
KFileMimeTypeInfo> m_mimeTypeDict;
01343
01344 private:
01345 static KFileMetaInfoProvider * s_self;
01346
01347
KFileMimeTypeInfo * addMimeTypeInfo( const
QString& mimeType );
01348
01349 class KFileMetaInfoProviderPrivate;
01350 KFileMetaInfoProviderPrivate *d;
01351
01352 };
01353
01354
QDataStream& operator <<(
QDataStream& s, const
KFileMetaInfoItem& );
01355
QDataStream& operator >>(
QDataStream& s, KFileMetaInfoItem& );
01356
01357
QDataStream& operator <<(
QDataStream& s, const
KFileMetaInfoGroup& );
01358
QDataStream& operator >>(
QDataStream& s, KFileMetaInfoGroup& );
01359
01360
QDataStream& operator <<(
QDataStream& s, const KFileMetaInfo& );
01361
QDataStream& operator >>(
QDataStream& s, KFileMetaInfo& );
01362
01363
01364 #endif