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 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
00369 struct Format{
00370 bool text : 1;
00371 enum { NoCompression=0, GZipCompression } compression : 4;
00372 int dummy : 27;
00373 };
00374 static Format findFormatByFileContent( const QString &fileName );
00375
00385 static List allMimeTypes();
00386
00394 static const QString & defaultMimeType();
00395
00403 static KMimeType::Ptr defaultMimeTypePtr();
00404
00421 QString parentMimeType() const;
00422
00429 bool is( const QString& mimeTypeName ) const;
00430
00436 static KMimeType::Ptr diagnoseFileName(const QString &file, QString &pattern);
00437
00438 protected:
00439 void loadInternal( QDataStream& );
00440 void init( KDesktopFile * );
00441
00446 static void errorMissingMimeType( const QString& _type );
00447
00451 static void buildDefaultType();
00452
00456 static void checkEssentialMimeTypes();
00460 static bool s_bChecked;
00461
00462 QStringList m_lstPatterns;
00463
00464 static Ptr s_pDefaultType;
00465
00466 protected:
00467 friend class KServiceTypeFactory;
00468 int patternsAccuracy() const;
00469
00470 protected:
00471 virtual void virtual_hook( int id, void* data );
00472 };
00473
00478 class KFolderType : public KMimeType
00479 {
00480 K_SYCOCATYPE( KST_KFolderType, KMimeType )
00481
00482 public:
00483
00484
00485
00490 KFolderType( KDesktopFile *config) : KMimeType( config ) { }
00492 KFolderType( QDataStream& _str, int offset ) : KMimeType( _str, offset ) { }
00493
00494 virtual QString icon( const QString& _url, bool _is_local ) const;
00495 virtual QString icon( const KURL& _url, bool _is_local ) const;
00496 virtual QString comment( const QString& _url, bool _is_local ) const;
00497 virtual QString comment( const KURL& _url, bool _is_local ) const;
00498 protected:
00499 virtual void virtual_hook( int id, void* data );
00500 };
00501
00507 class KDEDesktopMimeType : public KMimeType
00508 {
00509 K_SYCOCATYPE( KST_KDEDesktopMimeType, KMimeType )
00510
00511 public:
00512 enum ServiceType { ST_MOUNT, ST_UNMOUNT, ST_USER_DEFINED };
00513
00518 struct Service
00519 {
00520 Service() { m_display = true; }
00521 bool isEmpty() const { return m_strName.isEmpty(); }
00522 QString m_strName;
00523 QString m_strIcon;
00524 QString m_strExec;
00525 ServiceType m_type;
00526 bool m_display;
00527 };
00528
00529
00530
00535 KDEDesktopMimeType( KDesktopFile *config) : KMimeType( config ) { }
00537 KDEDesktopMimeType( QDataStream& _str, int offset ) : KMimeType( _str, offset ) { }
00538
00539 virtual QString icon( const QString& _url, bool _is_local ) const;
00540 virtual QString icon( const KURL& _url, bool _is_local ) const;
00541 virtual QPixmap pixmap( const KURL& _url, KIcon::Group _group, int _force_size = 0,
00542 int _state = 0, QString * _path = 0L ) const;
00543 virtual QString comment( const QString& _url, bool _is_local ) const;
00544 virtual QString comment( const KURL& _url, bool _is_local ) const;
00545
00551 static QValueList<Service> builtinServices( const KURL& _url );
00562 static QValueList<Service> userDefinedServices( const QString& path, bool bLocalFiles );
00563
00568 static void executeService( const QString& _path, KDEDesktopMimeType::Service& _service ) KDE_DEPRECATED;
00569
00575 static void executeService( const KURL::List& urls, KDEDesktopMimeType::Service& service );
00576
00588 static pid_t run( const KURL& _url, bool _is_local );
00589
00590 protected:
00591 virtual QPixmap pixmap(KIcon::Group a, int b, int c, QString *d) const
00592 { return KMimeType::pixmap(a, b, c, d); }
00593
00594 static pid_t runFSDevice( const KURL& _url, const KSimpleConfig &cfg );
00595 static pid_t runApplication( const KURL& _url, const QString & _serviceFile );
00596 static pid_t runLink( const KURL& _url, const KSimpleConfig &cfg );
00597 static pid_t runMimeType( const KURL& _url, const KSimpleConfig &cfg );
00598 protected:
00599 virtual void virtual_hook( int id, void* data );
00600 };
00601
00606 class KExecMimeType : public KMimeType
00607 {
00608 K_SYCOCATYPE( KST_KExecMimeType, KMimeType )
00609
00610 public:
00611
00612
00613
00618 KExecMimeType( KDesktopFile *config) : KMimeType( config ) { }
00620 KExecMimeType( QDataStream& _str, int offset ) : KMimeType( _str, offset ) { }
00621 protected:
00622 virtual void virtual_hook( int id, void* data );
00623 };
00624
00625 #endif