00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __kmimetype_h__
00021 #define __kmimetype_h__
00022
00023 #include <sys/types.h>
00024 #include <sys/stat.h>
00025
00026 #include <qstringlist.h>
00027 #include <qvaluelist.h>
00028 #include <qpixmap.h>
00029 #include <kicontheme.h>
00030
00031 #include <kurl.h>
00032 #include <kdemacros.h>
00033
00034 #include "ksycocatype.h"
00035 #include "kservicetype.h"
00036
00037 class KSimpleConfig;
00049 class KIO_EXPORT KMimeType : public KServiceType
00050 {
00051 K_SYCOCATYPE( KST_KMimeType, KServiceType )
00052
00053 public:
00054 typedef KSharedPtr<KMimeType> Ptr;
00055 typedef QValueList<Ptr> List;
00056 public:
00070 KMimeType( const QString & _fullpath, const QString& _type, const QString& _icon,
00071 const QString& _comment, const QStringList& _patterns );
00072
00077 KMimeType( const QString & _fullpath );
00078
00083 KMimeType( KDesktopFile *config );
00084
00090 KMimeType( QDataStream& _str, int offset );
00091
00092 virtual ~KMimeType();
00093
00102 virtual QString icon( const QString& , bool ) const { return m_strIcon; }
00103
00112 virtual QString icon( const KURL& , bool ) const { return m_strIcon; }
00113
00131 virtual QPixmap pixmap( KIcon::Group group, int force_size = 0, int state = 0,
00132 QString * path = 0L ) const;
00133
00150 virtual QPixmap pixmap( const KURL& _url, KIcon::Group _group, int _force_size = 0,
00151 int _state = 0, QString * _path = 0L ) const;
00152
00171 static QPixmap pixmapForURL( const KURL & _url, mode_t _mode = 0, KIcon::Group _group = KIcon::Desktop,
00172 int _force_size = 0, int _state = 0, QString * _path = 0L );
00173
00174
00187 static QString iconForURL( const KURL & _url, mode_t _mode = 0 );
00188
00198 static QString favIconForURL( const KURL& url );
00199
00204 QString comment() const { return m_strComment; }
00205
00213 virtual QString comment( const QString&, bool ) const { return m_strComment; }
00214
00222 virtual QString comment( const KURL&, bool ) const { return m_strComment; }
00223
00229 const QStringList& patterns() const { return m_lstPatterns; }
00230
00235 virtual void load( QDataStream &qs );
00236
00241 virtual void save( QDataStream &qs );
00242
00249 virtual QVariant property( const QString& _name ) const;
00250
00257 virtual QStringList propertyNames() const;
00258
00273 static Ptr mimeType( const QString& _name );
00274
00303 static Ptr findByURL( const KURL& _url, mode_t _mode = 0,
00304 bool _is_local_file = false, bool _fast_mode = false );
00305
00306 static Ptr findByURL( const KURL& _url, mode_t _mode,
00307 bool _is_local_file, bool _fast_mode,
00308 bool *accurate);
00335 static Ptr findByPath( const QString& path, mode_t mode = 0, bool fast_mode = false );
00336
00347 static Ptr findByContent( const QByteArray &data, int *accuracy=0 );
00348
00362 static Ptr findByFileContent( const QString &fileName, int *accuracy=0 );
00363
00364 struct Format{
00365 bool text : 1;
00366 enum { NoCompression=0, GZipCompression } compression : 4;
00367 unsigned dummy : 27;
00368 };
00369
00375 static Format findFormatByFileContent( const QString &fileName );
00376
00386 static List allMimeTypes();
00387
00395 static const QString & defaultMimeType();
00396
00404 static KMimeType::Ptr defaultMimeTypePtr();
00405
00422 QString parentMimeType() const;
00423
00430 bool is( const QString& mimeTypeName ) const;
00431
00437 static KMimeType::Ptr diagnoseFileName(const QString &file, QString &pattern);
00438
00439 protected:
00440 void loadInternal( QDataStream& );
00441 void init( KDesktopFile * );
00442
00447 static void errorMissingMimeType( const QString& _type );
00448
00452 static void buildDefaultType();
00453
00457 static void checkEssentialMimeTypes();
00461 static bool s_bChecked;
00462
00463 QStringList m_lstPatterns;
00464
00465 static Ptr s_pDefaultType;
00466
00467 protected:
00468 friend class KServiceTypeFactory;
00469 int patternsAccuracy() const;
00470
00471 protected:
00472 virtual void virtual_hook( int id, void* data );
00473 };
00474
00479 class KIO_EXPORT KFolderType : public KMimeType
00480 {
00481 K_SYCOCATYPE( KST_KFolderType, KMimeType )
00482
00483 public:
00484
00485
00486
00491 KFolderType( KDesktopFile *config) : KMimeType( config ) { }
00493 KFolderType( QDataStream& _str, int offset ) : KMimeType( _str, offset ) { }
00494
00495 virtual QString icon( const QString& _url, bool _is_local ) const;
00496 virtual QString icon( const KURL& _url, bool _is_local ) const;
00497 virtual QString comment( const QString& _url, bool _is_local ) const;
00498 virtual QString comment( const KURL& _url, bool _is_local ) const;
00499 protected:
00500 virtual void virtual_hook( int id, void* data );
00501 };
00502
00508 class KIO_EXPORT KDEDesktopMimeType : public KMimeType
00509 {
00510 K_SYCOCATYPE( KST_KDEDesktopMimeType, KMimeType )
00511
00512 public:
00513 enum ServiceType { ST_MOUNT, ST_UNMOUNT, ST_USER_DEFINED };
00514
00519 struct Service
00520 {
00521 Service() { m_display = true; }
00522 bool isEmpty() const { return m_strName.isEmpty(); }
00523 QString m_strName;
00524 QString m_strIcon;
00525 QString m_strExec;
00526 ServiceType m_type;
00527 bool m_display;
00528 };
00529
00530
00531
00536 KDEDesktopMimeType( KDesktopFile *config) : KMimeType( config ) { }
00538 KDEDesktopMimeType( QDataStream& _str, int offset ) : KMimeType( _str, offset ) { }
00539
00540 virtual QString icon( const QString& _url, bool _is_local ) const;
00541 virtual QString icon( const KURL& _url, bool _is_local ) const;
00542 virtual QPixmap pixmap( const KURL& _url, KIcon::Group _group, int _force_size = 0,
00543 int _state = 0, QString * _path = 0L ) const;
00544 virtual QString comment( const QString& _url, bool _is_local ) const;
00545 virtual QString comment( const KURL& _url, bool _is_local ) const;
00546
00552 static QValueList<Service> builtinServices( const KURL& _url );
00563 static QValueList<Service> userDefinedServices( const QString& path, bool bLocalFiles );
00564
00569 static void executeService( const QString& _path, KDEDesktopMimeType::Service& _service ) KDE_DEPRECATED;
00570
00576 static void executeService( const KURL::List& urls, KDEDesktopMimeType::Service& service );
00577
00589 static pid_t run( const KURL& _url, bool _is_local );
00590
00591 protected:
00592 virtual QPixmap pixmap(KIcon::Group a, int b, int c, QString *d) const
00593 { return KMimeType::pixmap(a, b, c, d); }
00594
00595 static pid_t runFSDevice( const KURL& _url, const KSimpleConfig &cfg );
00596 static pid_t runApplication( const KURL& _url, const QString & _serviceFile );
00597 static pid_t runLink( const KURL& _url, const KSimpleConfig &cfg );
00598 static pid_t runMimeType( const KURL& _url, const KSimpleConfig &cfg );
00599 protected:
00600 virtual void virtual_hook( int id, void* data );
00601 };
00602
00607 class KIO_EXPORT KExecMimeType : public KMimeType
00608 {
00609 K_SYCOCATYPE( KST_KExecMimeType, KMimeType )
00610
00611 public:
00612
00613
00614
00619 KExecMimeType( KDesktopFile *config) : KMimeType( config ) { }
00621 KExecMimeType( QDataStream& _str, int offset ) : KMimeType( _str, offset ) { }
00622 protected:
00623 virtual void virtual_hook( int id, void* data );
00624 };
00625
00626 #endif