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
00033 #include "ksycocatype.h"
00034 #include "kservicetype.h"
00035
00036 class KSimpleConfig;
00043 class KMimeType : public KServiceType
00044 {
00045 K_SYCOCATYPE( KST_KMimeType, KServiceType )
00046
00047 public:
00048 typedef KSharedPtr<KMimeType> Ptr;
00049 typedef QValueList<Ptr> List;
00050 public:
00057 KMimeType( const QString & _fullpath, const QString& _type, const QString& _icon,
00058 const QString& _comment, const QStringList& _patterns );
00059
00063 KMimeType( const QString & _fullpath );
00064
00068 KMimeType( KDesktopFile *config );
00069
00075 KMimeType( QDataStream& _str, int offset );
00076
00077 virtual ~KMimeType();
00078
00087 virtual QString icon( const QString& , bool ) const { return m_strIcon; }
00088
00093 virtual QString icon( const KURL& , bool ) const { return m_strIcon; }
00094
00109 virtual QPixmap pixmap( KIcon::Group _group, int _force_size = 0, int _state = 0,
00110 QString * _path = 0L ) const;
00111
00125 virtual QPixmap pixmap( const KURL& _url, KIcon::Group _group, int _force_size = 0,
00126 int _state = 0, QString * _path = 0L ) const;
00127
00140 static QPixmap pixmapForURL( const KURL & _url, mode_t _mode = 0, KIcon::Group _group = KIcon::Desktop,
00141 int _force_size = 0, int _state = 0, QString * _path = 0L );
00142
00143
00150 static QString iconForURL( const KURL & _url, mode_t _mode = 0 );
00151
00159 static QString favIconForURL( const KURL& url );
00160
00164 QString comment() const { return m_strComment; }
00165
00172 virtual QString comment( const QString&, bool ) const { return m_strComment; }
00173
00178 virtual QString comment( const KURL&, bool ) const { return m_strComment; }
00179
00183 const QStringList& patterns() const { return m_lstPatterns; }
00184
00188 virtual void load( QDataStream& );
00189
00193 virtual void save( QDataStream& );
00194
00195 virtual QVariant property( const QString& _name ) const;
00196 virtual QStringList propertyNames() const;
00197
00208 static Ptr mimeType( const QString& _name );
00209
00236 static Ptr findByURL( const KURL& _url, mode_t _mode = 0,
00237 bool _is_local_file = false, bool _fast_mode = false );
00243 static Ptr findByPath( const QString& path, mode_t mode = 0, bool fast_mode = false );
00244
00253 static Ptr findByContent( const QByteArray &data, int *accuracy=0 );
00263 static Ptr findByFileContent( const QString &fileName, int *accuracy=0 );
00264
00273 static List allMimeTypes();
00274
00280 static const QString & defaultMimeType();
00281
00282 protected:
00283 void loadInternal( QDataStream& );
00284 void init( KDesktopFile * );
00285
00289 static void errorMissingMimeType( const QString& _type );
00290
00294 static void buildDefaultType();
00295
00299 static void checkEssentialMimeTypes();
00303 static bool s_bChecked;
00304
00305 QStringList m_lstPatterns;
00306
00307 static Ptr s_pDefaultType;
00308 protected:
00309 virtual void virtual_hook( int id, void* data );
00310 };
00311
00316 class KFolderType : public KMimeType
00317 {
00318 K_SYCOCATYPE( KST_KFolderType, KMimeType )
00319
00320 public:
00321
00322
00323
00324 KFolderType( KDesktopFile *config) : KMimeType( config ) { }
00325 KFolderType( QDataStream& _str, int offset ) : KMimeType( _str, offset ) { }
00326
00327 virtual QString icon( const QString& _url, bool _is_local ) const;
00328 virtual QString icon( const KURL& _url, bool _is_local ) const;
00329 virtual QString comment( const QString& _url, bool _is_local ) const;
00330 virtual QString comment( const KURL& _url, bool _is_local ) const;
00331 protected:
00332 virtual void virtual_hook( int id, void* data );
00333 };
00334
00339 class KDEDesktopMimeType : public KMimeType
00340 {
00341 K_SYCOCATYPE( KST_KDEDesktopMimeType, KMimeType )
00342
00343 public:
00344 enum ServiceType { ST_MOUNT, ST_UNMOUNT, ST_USER_DEFINED };
00345
00350 struct Service
00351 {
00352 Service() { m_display = true; }
00353 QString m_strName;
00354 QString m_strIcon;
00355 QString m_strExec;
00356 ServiceType m_type;
00357 bool m_display;
00358 };
00359
00360
00361
00362 KDEDesktopMimeType( KDesktopFile *config) : KMimeType( config ) { }
00363 KDEDesktopMimeType( QDataStream& _str, int offset ) : KMimeType( _str, offset ) { }
00364
00365 virtual QString icon( const QString& _url, bool _is_local ) const;
00366 virtual QString icon( const KURL& _url, bool _is_local ) const;
00367 virtual QPixmap pixmap( const KURL& _url, KIcon::Group _group, int _force_size = 0,
00368 int _state = 0, QString * _path = 0L ) const;
00369 virtual QString comment( const QString& _url, bool _is_local ) const;
00370 virtual QString comment( const KURL& _url, bool _is_local ) const;
00371
00376 static QValueList<Service> builtinServices( const KURL& _url );
00384 static QValueList<Service> userDefinedServices( const QString& path, bool bLocalFiles );
00385
00390 static void executeService( const QString& _path, KDEDesktopMimeType::Service& _service );
00391
00395 static void executeService( const KURL::List& urls, KDEDesktopMimeType::Service& service );
00396
00408 static pid_t run( const KURL& _url, bool _is_local );
00409
00410 protected:
00411 virtual QPixmap pixmap(KIcon::Group a, int b, int c, QString *d) const
00412 { return KMimeType::pixmap(a, b, c, d); }
00413
00414 static pid_t runFSDevice( const KURL& _url, const KSimpleConfig &cfg );
00415 static pid_t runApplication( const KURL& _url, const QString & _serviceFile );
00416 static pid_t runLink( const KURL& _url, const KSimpleConfig &cfg );
00417 static pid_t runMimeType( const KURL& _url, const KSimpleConfig &cfg );
00418 protected:
00419 virtual void virtual_hook( int id, void* data );
00420 };
00421
00425 class KExecMimeType : public KMimeType
00426 {
00427 K_SYCOCATYPE( KST_KExecMimeType, KMimeType )
00428
00429 public:
00430
00431
00432
00433 KExecMimeType( KDesktopFile *config) : KMimeType( config ) { }
00434 KExecMimeType( QDataStream& _str, int offset ) : KMimeType( _str, offset ) { }
00435 protected:
00436 virtual void virtual_hook( int id, void* data );
00437 };
00438
00439 #endif