File indexing completed on 2024-12-01 06:46:31
0001 /* 0002 This file is part of the KDE libraries 0003 SPDX-FileCopyrightText: 2000 Torben Weis <weis@kde.org> 0004 SPDX-FileCopyrightText: 2006 David Faure <faure@kde.org> 0005 0006 SPDX-License-Identifier: LGPL-2.0-or-later 0007 */ 0008 0009 #include "kserviceoffer.h" 0010 0011 #include <QDebug> 0012 0013 class KServiceOfferPrivate 0014 { 0015 public: 0016 KServiceOfferPrivate() 0017 : preference(-1) 0018 , mimeTypeInheritanceLevel(0) 0019 , pService(nullptr) 0020 { 0021 } 0022 0023 int preference; 0024 int mimeTypeInheritanceLevel; 0025 KService::Ptr pService; 0026 }; 0027 0028 KServiceOffer::KServiceOffer() 0029 : d(new KServiceOfferPrivate) 0030 { 0031 } 0032 0033 KServiceOffer::KServiceOffer(const KServiceOffer &_o) 0034 : d(new KServiceOfferPrivate) 0035 { 0036 *d = *_o.d; 0037 } 0038 0039 KServiceOffer::KServiceOffer(const KService::Ptr &_service, int _pref, int mimeTypeInheritanceLevel) 0040 : d(new KServiceOfferPrivate) 0041 { 0042 d->pService = _service; 0043 d->preference = _pref; 0044 d->mimeTypeInheritanceLevel = mimeTypeInheritanceLevel; 0045 } 0046 0047 KServiceOffer::~KServiceOffer() = default; 0048 0049 KServiceOffer &KServiceOffer::operator=(const KServiceOffer &rhs) 0050 { 0051 if (this == &rhs) { 0052 return *this; 0053 } 0054 0055 *d = *rhs.d; 0056 return *this; 0057 } 0058 0059 bool KServiceOffer::operator<(const KServiceOffer &_o) const 0060 { 0061 // First check mimetype inheritance level. 0062 // Direct mimetype association is preferred above association via parent mimetype 0063 // So, the smaller the better. 0064 if (d->mimeTypeInheritanceLevel != _o.d->mimeTypeInheritanceLevel) { 0065 return d->mimeTypeInheritanceLevel < _o.d->mimeTypeInheritanceLevel; 0066 } 0067 0068 // Finally, use preference to sort them 0069 // The bigger the better, but we want the better FIRST 0070 return _o.d->preference < d->preference; 0071 } 0072 0073 int KServiceOffer::preference() const 0074 { 0075 return d->preference; 0076 } 0077 0078 void KServiceOffer::setPreference(int p) 0079 { 0080 d->preference = p; 0081 } 0082 0083 KService::Ptr KServiceOffer::service() const 0084 { 0085 return d->pService; 0086 } 0087 0088 bool KServiceOffer::isValid() const 0089 { 0090 return d->preference >= 0; 0091 } 0092 0093 void KServiceOffer::setMimeTypeInheritanceLevel(int level) 0094 { 0095 d->mimeTypeInheritanceLevel = level; 0096 } 0097 0098 int KServiceOffer::mimeTypeInheritanceLevel() const 0099 { 0100 return d->mimeTypeInheritanceLevel; 0101 } 0102 0103 QDebug operator<<(QDebug dbg, const KServiceOffer &offer) 0104 { 0105 QDebugStateSaver saver(dbg); 0106 dbg.nospace() << offer.service()->storageId() << " " << offer.preference(); 0107 if (offer.mimeTypeInheritanceLevel() > 0) { 0108 dbg << " (inheritance level " << offer.mimeTypeInheritanceLevel() << ")"; 0109 } 0110 return dbg; 0111 }