File indexing completed on 2024-04-14 03:54:37

0001 /*
0002     This file is part of the KDE libraries
0003     SPDX-FileCopyrightText: 1999 Waldo Bastian <bastian@kde.org>
0004 
0005     SPDX-License-Identifier: LGPL-2.0-only
0006 */
0007 
0008 #ifndef KSYCOCAENTRY_H
0009 #define KSYCOCAENTRY_H
0010 
0011 #include <kservice_export.h>
0012 #include <ksycocatype.h>
0013 
0014 #include <QDataStream>
0015 #include <QExplicitlySharedDataPointer>
0016 #include <QStringList>
0017 #include <QVariant>
0018 
0019 #include <memory>
0020 
0021 class KSycocaEntryPrivate;
0022 
0023 /**
0024  * Base class for all Sycoca entries.
0025  *
0026  * You can't create an instance of KSycocaEntry, but it provides
0027  * the common functionality for servicetypes and services.
0028  *
0029  * @internal
0030  * @see http://techbase.kde.org/Development/Architecture/KDE3/System_Configuration_Cache
0031  */
0032 class KSERVICE_EXPORT KSycocaEntry : public QSharedData
0033 {
0034 public:
0035     /*
0036      * constructs a invalid KSycocaEntry object
0037      */
0038     KSycocaEntry();
0039 
0040     virtual ~KSycocaEntry();
0041 
0042     /**
0043      * Returns true if this sycoca entry is of the given type.
0044      */
0045     bool isType(KSycocaType t) const;
0046     /**
0047      * internal
0048      */
0049     KSycocaType sycocaType() const;
0050 
0051     /**
0052      * A shared data pointer for KSycocaEntry.
0053      */
0054     typedef QExplicitlySharedDataPointer<KSycocaEntry> Ptr;
0055     /**
0056      * A list of shared data pointers for KSycocaEntry.
0057      */
0058     typedef QList<Ptr> List;
0059 
0060     /**
0061      * @return the name of this entry
0062      */
0063     QString name() const;
0064 
0065     /**
0066      * @return the path of this entry
0067      * The path can be absolute or relative.
0068      * The corresponding factory should know relative to what.
0069      */
0070     QString entryPath() const;
0071 
0072     /**
0073      * @return the unique ID for this entry
0074      * In practice, this is storageId() for KService and name() for everything else.
0075      * \since 4.2.1
0076      */
0077     QString storageId() const;
0078 
0079     /**
0080      * @return true if valid
0081      */
0082     bool isValid() const;
0083 
0084     /**
0085      * @return true if deleted
0086      */
0087     bool isDeleted() const;
0088 
0089     /**
0090      * Sets whether or not this service is deleted
0091      */
0092     void setDeleted(bool deleted);
0093 
0094     /**
0095      * @returns true, if this is a separator
0096      */
0097     bool isSeparator() const;
0098 
0099 protected:
0100     KSERVICE_NO_EXPORT explicit KSycocaEntry(KSycocaEntryPrivate &d);
0101     std::unique_ptr<KSycocaEntryPrivate> const d_ptr;
0102 
0103 private:
0104     // All these need access to offset()
0105     friend class KSycocaFactory;
0106     friend class KBuildServiceFactory;
0107     friend class KServiceFactory;
0108     friend class KService;
0109     friend class KSycocaDict;
0110     friend class KSycocaDictTest;
0111 
0112     /**
0113      * @internal
0114      * @return the position of the entry in the sycoca file
0115      */
0116     KSERVICE_NO_EXPORT int offset() const;
0117 
0118     Q_DISABLE_COPY(KSycocaEntry)
0119 
0120     Q_DECLARE_PRIVATE(KSycocaEntry)
0121 };
0122 
0123 #endif