diff options
Diffstat (limited to 'kio/kio/kuserprofile.h')
-rw-r--r-- | kio/kio/kuserprofile.h | 282 |
1 files changed, 282 insertions, 0 deletions
diff --git a/kio/kio/kuserprofile.h b/kio/kio/kuserprofile.h new file mode 100644 index 000000000..4591771f0 --- /dev/null +++ b/kio/kio/kuserprofile.h @@ -0,0 +1,282 @@ +/* This file is part of the KDE project + Copyright (C) 1998, 1999 Torben Weis <weis@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 __kuserprofile_h__ +#define __kuserprofile_h__ + +#include <qmap.h> +#include <qstring.h> +#include <qptrlist.h> +#include <qvaluelist.h> + +#include <kservice.h> + +/** + * This class holds the user-specific preferences of a service + * (whether it can be a default offer or not, how big is the preference + * for this offer, ...). Basically it is a reference to a + * KService, a number that represents the user's preference (bigger + * is better) and a flag whether the KService can be used as default. + * + * @see KService + * @short Holds the user's preference of a service. + */ +class KIO_EXPORT KServiceOffer +{ +public: + /** + * Create an invalid service offer. + */ + KServiceOffer(); + + /** + * Copy constructor. + * Shallow copy (the KService will not be copied). + */ + KServiceOffer( const KServiceOffer& ); + + /** + * Creates a new KServiceOffer. + * @param _service a pointer to the KService + * @param _pref the user's preference value, must be positive, + * bigger is better + * @param _default true if the service should be used as + * default + */ + KServiceOffer( KService::Ptr _service, + int _pref, bool _default ); + + /** + * A service is bigger that the other when it can be default + * (and the other is not) and its preference value it higher. + */ + bool operator< ( const KServiceOffer& ) const; + /** + * Is it allowed to use this service for default actions + * (e.g. Left Click in a file manager, or KRun in general). + * @return true if the service is a allowed as default + */ + bool allowAsDefault() const { return m_bAllowAsDefault; } + /** + * The bigger this number is, the better is this service. + * @return the preference number (negative numbers will be + * returned by invalid service offers) + */ + int preference() const { return m_iPreference; } + /** + * The service which this offer is about. + * @return the service this offer is about, can be 0 + * in valid offers or when not set + */ + KService::Ptr service() const { return m_pService; } + /** + * Check whether the entry is valid. A service is valid if + * its preference value is positive. + * @return true if the service offer is valid + */ + bool isValid() const { return m_iPreference >= 0; } + +private: + int m_iPreference; + bool m_bAllowAsDefault; + KService::Ptr m_pService; +private: + class KServiceOfferPrivate; +}; + +/** + * KServiceTypeProfile represents the user's preferences for services + * of a service type. + * It consists of a list of services (service offers) for the service type + * that is sorted by the user's preference. + * KTrader uses KServiceTypeProfile to sort its results, so usually + * you can just use KTrader to find the user's preferred service. + * + * @see KService + * @see KServiceType + * @see KServiceOffer + * @see KTrader + * @short Represents the user's preferences for services of a service type + */ +class KIO_EXPORT KServiceTypeProfile +{ +public: + typedef QValueList<KServiceOffer> OfferList; + + ~KServiceTypeProfile(); + + /** + * @deprecated Remove in KDE 4, unused. + * Returns the users preference of the given service. + * @param _service the name of the service to check + * @return the user's preference number of the given + * @p _service, or 0 the service is unknown. + */ + int preference( const QString& _service ) const; + + /** + * @deprecated Remove in KDE 4, unused. + * Checks whether the given @p _service can be used as default. + * @param _service the name of the service to check + * @return true if allowed as default + */ + bool allowAsDefault( const QString& _service ) const; + + /** + * Returns the list of all service offers for the service types + * that are represented by this profile. + * @return the list of KServiceOffer instances + */ + OfferList offers() const; + + /** + * Returns the preferred service for @p _serviceType and @p _genericServiceType + * ("Application", type of component, or null). + * + * @param serviceType the service type (e.g. a MIME type) + * @param genericServiceType the generic service type (e.g. "Application" or + * "KParts/ReadOnlyPart") + * @return the preferred service, or 0 if no service is available + */ + static KService::Ptr preferredService( const QString & serviceType, const QString & genericServiceType ); + + /** + * Returns the profile for the requested service type. + * @param servicetype the service type (e.g. a MIME type) + * @param genericServiceType the generic service type (e.g. "Application" + * or "KParts/ReadOnlyPart"). Can be QString::null, + * then the "Application" generic type will be used + * @return the KServiceTypeProfile with the given arguments, or 0 if not found + */ + static KServiceTypeProfile* serviceTypeProfile( const QString& servicetype, const QString & genericServiceType = QString::null ); + + /** + * Returns the offers associated with a given servicetype, sorted by preference. + * This is what KTrader uses to get the list of offers, before applying the + * constraints and preferences. + * + * If @p genericServiceType is specified, a list is returned with + * the offers associated with the combination of the two service types. + * This is almost like an "foo in ServiceTypes" constraint in the KTrader, + * but the difference is that to order the offers, we will look at entries + * specifically for those two service types. Typically, this is used for + * getting the list of embeddable components that can handle a given mimetype. + * In that case, @p servicetype is the mimetype and @p genericServiceType is "KParts/ReadOnlyPart". + * + * @param servicetype the service type (e.g. a MIME type) + * @param genericServiceType the generic service type (e.g. "Application" + * or "KParts/ReadOnlyPart"). Can be QString::null, + * then all generic types will be included + * @return the list of offers witht he given parameters + */ + static OfferList offers( const QString& servicetype, const QString& genericServiceType = QString::null ); + + /** + * Returns a list of all KServiceTypeProfiles. + * @return a list of all KServiceTypeProfiles + */ + static const QPtrList<KServiceTypeProfile>& serviceTypeProfiles() { return *s_lstProfiles; } + + /** + * Clear all cached information + */ + static void clear(); + + /** + * This method activates a special mode of KServiceTypeProfile, in which all/all + * and all/allfiles are excluded from the results of the queries. + * It is meant for the configuration module _only_. + * @internal + */ + static void setConfigurationMode() { s_configurationMode = true; } + + /** + * This method deactivates the special mode above of KServiceTypeProfile + * It is meant for the configuration module _only_. + * @internal + * @since 3.5.7 + */ + static void unsetConfigurationMode() { s_configurationMode = false; } + + /** + * @internal + */ + static bool configurationMode() { return s_configurationMode; } + +protected: + /** + * Constructor is called when the user profile is read for the + * first time. + * @param serviceType the service type (e.g. a MIME type) + * @param genericServiceType the generic service type (e.g. "Application" + * or "KParts/ReadOnlyPart"). Can be QString::null, + * then the "Application" generic type will be used + */ + KServiceTypeProfile( const QString& serviceType, + const QString& genericServiceType = QString::null ); + + /** + * Add a service to this profile. + * @param _service the name of the service + * @param _preference the user's preference value, must be positive, + * bigger is better + * @param _allow_as_default true if the service should be used as + * default + */ + void addService( const QString& _service, int _preference = 1, bool _allow_as_default = true ); + +private: + /** + * Represents the users assessment of a special service + */ + struct Service + { + /** + * The bigger this number is, the better is this service. + */ + int m_iPreference; + /** + * Is it allowed to use this service for default actions. + */ + bool m_bAllowAsDefault; + }; + + /** + * Map of all services for which we have assessments. + */ + QMap<QString,Service> m_mapServices; + + /** + * ServiceType of this profile. + */ + QString m_strServiceType; + + /** + * Secondary ServiceType of this profile. + */ + QString m_strGenericServiceType; + + static void initStatic(); + static QPtrList<KServiceTypeProfile>* s_lstProfiles; + static bool s_configurationMode; +private: + class KServiceTypeProfilePrivate* d; +}; + +#endif |