summaryrefslogtreecommitdiffstats
path: root/tdeio/tdeio/kservicetype.h
diff options
context:
space:
mode:
Diffstat (limited to 'tdeio/tdeio/kservicetype.h')
-rw-r--r--tdeio/tdeio/kservicetype.h251
1 files changed, 251 insertions, 0 deletions
diff --git a/tdeio/tdeio/kservicetype.h b/tdeio/tdeio/kservicetype.h
new file mode 100644
index 000000000..b1cad7284
--- /dev/null
+++ b/tdeio/tdeio/kservicetype.h
@@ -0,0 +1,251 @@
+/* This file is part of the KDE project
+ Copyright (C) 1998, 1999 Torben Weis <weis@kde.org>
+ 1999 Waldo Bastian <bastian@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef __kservicetype_h__
+#define __kservicetype_h__
+
+#include "tdesycocaentry.h"
+#include "kservice.h"
+
+#include <tqstring.h>
+#include <tqstringlist.h>
+#include <tqptrlist.h>
+#include <tqmap.h>
+#include <tqshared.h>
+#include <tqdatastream.h>
+#include <tqvariant.h>
+
+#include <ksimpleconfig.h>
+
+/**
+ * A service type is the generic notion for a mimetype, a type of service
+ * instead of a type of file.
+ * For instance, KOfficeFilter is a service type.
+ * It is associated to services according to the user profile (kuserprofile.h).
+ * Service types are stored as desktop files in $TDEHOME/share/servicetypes.
+ * @see KService
+ */
+class TDEIO_EXPORT KServiceType : public KSycocaEntry
+{
+ K_SYCOCATYPE( KST_KServiceType, KSycocaEntry )
+
+public:
+ typedef KSharedPtr<KServiceType> Ptr;
+ typedef TQValueList<Ptr> List;
+public:
+
+ /**
+ * Constructor. You may pass in arguments to create a servicetype with
+ * specific properties.
+ * @param _fullpath the path of the service type's desktop file
+ * @param _name the name of the service type
+ * @param _icon the icon name of the service type (can be null)
+ * @param _comment a comment (can be null)
+ */
+ KServiceType( const TQString & _fullpath, const TQString& _name,
+ const TQString& _icon, const TQString& _comment);
+
+ /**
+ * Construct a service type and take all informations from a config file.
+ * @param _fullpath path of the desktop file, set to "" if calling from
+ * a inherited constructor.
+ */
+ KServiceType( const TQString & _fullpath );
+
+ /**
+ * Construct a service type and take all informations from a deskop file.
+ * @param config the configuration file
+ */
+ KServiceType( KDesktopFile *config);
+
+ /**
+ * @internal construct a service from a stream.
+ * The stream must already be positionned at the correct offset
+ */
+ KServiceType( TQDataStream& _str, int offset );
+
+ virtual ~KServiceType();
+
+ /**
+ * Returns the icon associated with this service type. Some
+ * derived classes offer special functions which take for
+ * example an URL and returns a special icon for this
+ * URL. An example is KMimeType, KFolderType and
+ * others.
+ * @return the name of the icon, can be TQString::null.
+ */
+ TQString icon() const { return m_strIcon; }
+
+ /**
+ * Returns the descriptive comment associated, if any.
+ * @return the comment, or TQString::null
+ */
+ TQString comment() const { return m_strComment; }
+
+ /**
+ * Returns the name of this service type.
+ * @return the name of the service type
+ */
+ TQString name() const { return m_strName; }
+
+ /**
+ * Returns the relative path to the desktop entry file responsible for
+ * this servicetype.
+ * For instance inode/directory.desktop, or kpart.desktop
+ * @return the path of the desktop file
+ */
+ TQString desktopEntryPath() const { return entryPath(); }
+
+ /**
+ * Checks whether this service type inherits another one.
+ * @return true if this service type inherits another one
+ * @see parentServiceType()
+ */
+ bool isDerived() const { return m_bDerived; }
+
+ /**
+ * If this service type inherits from another service type,
+ * return the name of the parent.
+ * @return the parent service type, or TQString:: null if not set
+ * @see isDerived()
+ */
+ TQString parentServiceType() const;
+
+ /**
+ * Checks whether this service type is or inherits from @p servTypeName.
+ * @return true if this servicetype is or inherits from @p servTypeName
+ * @since 3.1
+ */
+ bool inherits( const TQString& servTypeName ) const;
+
+ /**
+ * Returns the requested property. Some often used properties
+ * have convenience access functions like name(),
+ * comment() etc.
+ *
+ * @param _name the name of the property
+ * @return the property, or invalid if not found
+ */
+ virtual TQVariant property( const TQString& _name ) const;
+
+ /**
+ * Returns the list of all properties of this service type.
+ * @return the list of properties
+ */
+ virtual TQStringList propertyNames() const;
+
+ /**
+ * Checks whether the service type is valid.
+ * @return true if the service is valid (e.g. name is not empty)
+ */
+ bool isValid() const { return m_bValid; }
+
+ /**
+ * Returns the type of the property with the given @p _name.
+ *
+ * @param _name the name of the property
+ * @return the property type, or null if not found
+ */
+ virtual TQVariant::Type propertyDef( const TQString& _name ) const;
+
+ virtual TQStringList propertyDefNames() const;
+ virtual const TQMap<TQString,TQVariant::Type>& propertyDefs() const { return m_mapPropDefs; }
+
+ /**
+ * @internal
+ * Save ourselves to the data stream.
+ */
+ virtual void save( TQDataStream& );
+
+ /**
+ * @internal
+ * Load ourselves from the data stream.
+ */
+ virtual void load( TQDataStream& );
+
+ /**
+ * @internal
+ * Pointer to parent serice type
+ */
+ // gcc 2.95.x doesn't understand KServiceType::Ptr here
+ /* KServiceType:: */ Ptr parentType();
+ /**
+ * @internal
+ * Register service that provides this service type
+ */
+ void addService(KService::Ptr service);
+ /**
+ * @internal
+ * List serices that provide this service type
+ */
+ KService::List services();
+
+ /**
+ * Returns a pointer to the servicetype '_name' or 0L if the
+ * service type is unknown.
+ * VERY IMPORTANT : don't store the result in a KServiceType * !
+ * @param _name the name of the service type to search
+ * @return the pointer to the service type, or 0
+ */
+ static Ptr serviceType( const TQString& _name );
+
+ /**
+ * Returns all services supporting the given servicetype name.
+ * This doesn't take care of the user profile.
+ * In fact it is used by KServiceTypeProfile,
+ * which is used by KTrader, and that's the one you should use.
+ * @param _servicetype the name of the service type to search
+ * @return the list of all services of the given type
+ */
+ static KService::List offers( const TQString& _servicetype );
+
+ /**
+ * Returns a list of all the supported servicetypes. Useful for
+ * showing the list of available servicetypes in a listbox,
+ * for example.
+ * More memory consuming than the ones above, don't use unless
+ * really necessary.
+ * @return the list of all services
+ */
+ static List allServiceTypes();
+
+protected:
+ void init( KDesktopFile *config );
+
+protected:
+ TQString m_strName;
+ TQString m_strIcon;
+ TQString m_strComment;
+ TQMap<TQString,TQVariant> m_mapProps;
+ TQMap<TQString,TQVariant::Type> m_mapPropDefs;
+
+ bool m_bValid:1;
+ bool m_bDerived:1;
+protected:
+ virtual void virtual_hook( int id, void* data );
+private:
+ class KServiceTypePrivate;
+ KServiceTypePrivate* d;
+};
+
+//TQDataStream& operator>>( TQDataStream& _str, KServiceType& s );
+//TQDataStream& operator<<( TQDataStream& _str, KServiceType& s );
+
+#endif