File indexing completed on 2024-04-14 14:27:22

0001 /*
0002     This file is part of the KDE project
0003     SPDX-FileCopyrightText: 1998, 1999 Torben Weis <weis@kde.org>
0004     SPDX-FileCopyrightText: 1999 Waldo Bastian <bastian@kde.org>
0005 
0006     SPDX-License-Identifier: LGPL-2.0-or-later
0007 */
0008 
0009 #ifndef __kservicetype_h__
0010 #define __kservicetype_h__
0011 
0012 #include <ksycocaentry.h>
0013 
0014 #include <QMap>
0015 #include <QString>
0016 #include <QStringList>
0017 #include <QVariant>
0018 
0019 #include <KConfig>
0020 
0021 class KDesktopFile;
0022 class KServiceTypePrivate;
0023 
0024 /**
0025  * @class KServiceType kservicetype.h <KServiceType>
0026  *
0027  * A service type is, well, a type of service, where a service is an application or plugin.
0028  * For instance, "KOfficeFilter", which is the type of all koffice filters, is a service type.
0029  * In order to discover services of a given type, using KServiceTypeTrader.
0030  * Service types are stored as desktop files in $KDEDIR/share/servicetypes.
0031  * @see KService, KServiceTypeTrader
0032  * @deprecated Since  5.90, this class is an implementation detail of KService.
0033  * Use @ref KService or @ref KApplicationTrader instead.
0034  */
0035 class KSERVICE_EXPORT KServiceType : public KSycocaEntry // TODO KDE5: inherit kshared, but move KSycocaEntry to KServiceTypePrivate
0036 {
0037 public:
0038     /**
0039      * A shared data pointer for KServiceType.
0040      */
0041     typedef QExplicitlySharedDataPointer<KServiceType> Ptr;
0042     /**
0043      * A list of shared data pointers for KServiceType.
0044      */
0045     typedef QList<Ptr> List;
0046 
0047     /**
0048      * Construct a service type and take all information from a desktop file.
0049      * @param config the configuration file
0050      * @deprecated Since 5.90, see class API docs
0051      */
0052     KSERVICE_DEPRECATED_VERSION(5, 90, "See class API docs")
0053     explicit KServiceType(KDesktopFile *config);
0054 
0055     ~KServiceType() override;
0056 
0057     /**
0058      * Returns the descriptive comment associated, if any.
0059      * @return the comment, or QString()
0060      */
0061     QString comment() const;
0062 
0063     /**
0064      * Checks whether this service type inherits another one.
0065      * @return true if this service type inherits another one
0066      * @see parentServiceType()
0067      */
0068     bool isDerived() const;
0069 
0070     /**
0071      * If this service type inherits from another service type,
0072      * return the name of the parent.
0073      * @return the parent service type, or QString:: null if not set
0074      * @see isDerived()
0075      */
0076     QString parentServiceType() const;
0077 
0078     /**
0079      * Checks whether this service type is or inherits from @p servTypeName.
0080      * @return true if this servicetype is or inherits from @p servTypeName
0081      */
0082     bool inherits(const QString &servTypeName) const;
0083 
0084     /**
0085      * Returns the type of the property definition with the given @p _name.
0086      *
0087      * @param _name the name of the property
0088      * @return the property type, or null if not found
0089      * @see propertyDefNames
0090      */
0091     QVariant::Type propertyDef(const QString &_name) const;
0092 
0093     /**
0094      * Returns the list of all property definitions for this servicetype.
0095      * Those are properties of the services implementing this servicetype.
0096      * For instance,
0097      * @code
0098      * [PropertyDef::X-KDevelop-Version]
0099      * Type=int
0100      * @endcode
0101      * means that all kdevelop plugins have in their .desktop file a line like
0102      * @code
0103      * X-KDevelop-Version=<some value>
0104      * @endcode
0105      */
0106     QStringList propertyDefNames() const;
0107 
0108     /// @internal (for KBuildServiceTypeFactory)
0109     QMap<QString, QVariant::Type> propertyDefs() const;
0110 
0111     /**
0112      * @internal
0113      * Pointer to parent service type
0114      */
0115     Ptr parentType();
0116     /**
0117      * @internal  only used by kbuildsycoca
0118      * Register offset into offers list
0119      */
0120     void setServiceOffersOffset(int offset);
0121     /**
0122      * @internal
0123      */
0124     int serviceOffersOffset() const;
0125 
0126     /**
0127      * Returns a pointer to the servicetype '_name' or @c nullptr if the
0128      *         service type is unknown.
0129      * VERY IMPORTANT : don't store the result in a KServiceType * !
0130      * @param _name the name of the service type to search
0131      * @return the pointer to the service type, or @c nullptr
0132      */
0133     static Ptr serviceType(const QString &_name);
0134 
0135     /**
0136      * Returns a list of all the supported servicetypes. Useful for
0137      *         showing the list of available servicetypes in a listbox,
0138      *         for example.
0139      * More memory consuming than the ones above, don't use unless
0140      * really necessary.
0141      * @return the list of all services
0142      */
0143     static List allServiceTypes();
0144 
0145 private:
0146     friend class KServiceTypeFactory;
0147     /**
0148      * @internal construct a service from a stream.
0149      * The stream must already be positioned at the correct offset
0150      */
0151     KServiceType(QDataStream &_str, int offset);
0152 
0153     Q_DECLARE_PRIVATE(KServiceType)
0154 };
0155 
0156 // QDataStream& operator>>( QDataStream& _str, KServiceType& s );
0157 // QDataStream& operator<<( QDataStream& _str, KServiceType& s );
0158 
0159 #endif