File indexing completed on 2024-12-01 12:40:35

0001 /*
0002     This file is part of the KDE libraries
0003     SPDX-FileCopyrightText: 2010 Teo Mrnjavac <teo@kde.org>
0004 
0005     SPDX-License-Identifier: LGPL-2.1-or-later
0006 */
0007 
0008 #ifndef KABOUT_APPLICATION_PERSON_MODEL_H
0009 #define KABOUT_APPLICATION_PERSON_MODEL_H
0010 
0011 #include <KAboutData>
0012 
0013 #include <QAbstractListModel>
0014 #include <QIcon>
0015 #include <QNetworkReply>
0016 #include <QPixmap>
0017 #include <QUrl>
0018 
0019 namespace KDEPrivate
0020 {
0021 enum {
0022     AVATAR_HEIGHT = 50,
0023     AVATAR_WIDTH = 50,
0024     MAIN_LINKS_HEIGHT = 32,
0025     SOCIAL_LINKS_HEIGHT = 26,
0026     MAX_SOCIAL_LINKS = 9,
0027 };
0028 class KAboutApplicationPersonProfile;
0029 
0030 class KAboutApplicationPersonModel : public QAbstractListModel
0031 {
0032     Q_OBJECT
0033     Q_PROPERTY(bool hasAnyAvatars READ hasAnyAvatars NOTIFY hasAnyAvatarsChanged)
0034     Q_PROPERTY(bool showRemoteAvatars READ showRemoteAvatars WRITE setShowRemoteAvatars NOTIFY showRemoteAvatarsChanged)
0035 public:
0036     explicit KAboutApplicationPersonModel(const QList<KAboutPerson> &personList, QObject *parent = nullptr);
0037 
0038     int rowCount(const QModelIndex &parent = QModelIndex()) const override;
0039     int columnCount(const QModelIndex &parent = QModelIndex()) const override
0040     {
0041         Q_UNUSED(parent)
0042         return 1;
0043     }
0044     QVariant data(const QModelIndex &index, int role) const override;
0045 
0046     Qt::ItemFlags flags(const QModelIndex &index) const override;
0047 
0048     bool hasAvatarPixmaps() const
0049     {
0050         return m_hasAvatarPixmaps;
0051     }
0052     bool hasAnyAvatars() const
0053     {
0054         return m_hasAnyAvatars;
0055     }
0056     Q_SIGNAL void hasAnyAvatarsChanged();
0057 
0058     const QString &providerName() const
0059     {
0060         return m_providerName;
0061     }
0062 
0063     bool showRemoteAvatars() const
0064     {
0065         return m_showRemoteAvatars;
0066     }
0067     void setShowRemoteAvatars(bool value)
0068     {
0069         if (m_showRemoteAvatars != value) {
0070             m_showRemoteAvatars = value;
0071             Q_EMIT showRemoteAvatarsChanged();
0072         }
0073     }
0074     Q_SIGNAL void showRemoteAvatarsChanged();
0075 private Q_SLOTS:
0076     void onAvatarJobFinished();
0077 
0078 private:
0079     const QList<KAboutPerson> m_personList;
0080     QList<KAboutApplicationPersonProfile> m_profileList;
0081 
0082     bool m_hasAnyAvatars = false;
0083     bool m_hasAvatarPixmaps = false;
0084     bool m_showRemoteAvatars = false;
0085 
0086     QString m_providerName;
0087 
0088     QList<QNetworkReply *> m_ongoingAvatarFetches;
0089 };
0090 
0091 class KAboutApplicationPersonProfile
0092 {
0093 public:
0094     KAboutApplicationPersonProfile()
0095         : m_name()
0096         , m_task()
0097         , m_email()
0098         , m_ocsUsername()
0099     {
0100     } // needed for QVariant
0101 
0102     KAboutApplicationPersonProfile(const QString &name, const QString &task, const QString &email, const QString &ocsUsername = QString())
0103         : m_name(name)
0104         , m_task(task)
0105         , m_email(email)
0106         , m_ocsUsername(ocsUsername)
0107     {
0108     }
0109 
0110     void setHomepage(const QUrl &url)
0111     {
0112         m_homepage = url;
0113     }
0114     void setAvatar(const QPixmap &pixmap)
0115     {
0116         m_avatar = pixmap;
0117     }
0118     void setLocation(const QString &location)
0119     {
0120         m_location = location;
0121     }
0122     void setOcsProfileUrl(const QString &url)
0123     {
0124         m_ocsProfileUrl = url;
0125     }
0126 
0127     const QString &name() const
0128     {
0129         return m_name;
0130     }
0131     const QString &task() const
0132     {
0133         return m_task;
0134     }
0135     const QString &email() const
0136     {
0137         return m_email;
0138     }
0139     const QString &ocsUsername() const
0140     {
0141         return m_ocsUsername;
0142     }
0143     const QString &ocsProfileUrl() const
0144     {
0145         return m_ocsProfileUrl;
0146     }
0147     const QUrl &homepage() const
0148     {
0149         return m_homepage;
0150     }
0151     const QPixmap &avatar() const
0152     {
0153         return m_avatar;
0154     }
0155     const QString &location() const
0156     {
0157         return m_location;
0158     }
0159 
0160 private:
0161     QString m_name;
0162     QString m_task;
0163     QString m_email;
0164     QString m_ocsUsername;
0165     QString m_ocsProfileUrl;
0166     QUrl m_homepage;
0167     QPixmap m_avatar;
0168     QString m_location;
0169 };
0170 
0171 } // namespace KDEPrivate
0172 
0173 Q_DECLARE_METATYPE(KDEPrivate::KAboutApplicationPersonProfile)
0174 #endif // KABOUT_APPLICATION_PERSON_MODEL_H