From kde-commits Thu Aug 31 20:20:44 2017 From: Montel Laurent Date: Thu, 31 Aug 2017 20:20:44 +0000 To: kde-commits Subject: [ruqola] src: Convert as pointer + qobject + add properties Message-Id: X-MARC-Message: https://marc.info/?l=kde-commits&m=150421085409954 Git commit b8ce24cbcaaf4e70720cc9e581741ddba68c4480 by Montel Laurent. Committed on 31/08/2017 at 20:19. Pushed by mlaurent into branch 'master'. Convert as pointer + qobject + add properties M +10 -3 src/user.cpp M +12 -4 src/user.h M +25 -23 src/usermodel.cpp M +2 -2 src/usermodel.h https://commits.kde.org/ruqola/b8ce24cbcaaf4e70720cc9e581741ddba68c4480 diff --git a/src/user.cpp b/src/user.cpp index a92ecd2..c1948f1 100644 --- a/src/user.cpp +++ b/src/user.cpp @@ -22,7 +22,8 @@ = #include = -User::User() +User::User(QObject *parent) + : QObject(parent) { } = @@ -33,7 +34,10 @@ QString User::name() const = void User::setName(const QString &name) { - mName =3D name; + if (mName !=3D name) { + mName =3D name; + Q_EMIT nameChanged(); + } } = QString User::userId() const @@ -53,7 +57,10 @@ QString User::status() const = void User::setStatus(const QString &status) { - mStatus =3D status; + if (mStatus !=3D status) { + mStatus =3D status; + Q_EMIT statusChanged(); + } } = bool User::operator =3D=3D(const User &other) const diff --git a/src/user.h b/src/user.h index 4c3944d..5b5b9b6 100644 --- a/src/user.h +++ b/src/user.h @@ -25,9 +25,11 @@ #include #include #include "libruqola_private_export.h" -class LIBRUQOLACORE_TESTS_EXPORT User +class LIBRUQOLACORE_TESTS_EXPORT User : public QObject { - Q_GADGET + Q_OBJECT + Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged) + Q_PROPERTY(QString status READ status WRITE setStatus NOTIFY statusCha= nged) public: = enum class PresenceStatus { @@ -39,7 +41,7 @@ public: }; Q_ENUM(PresenceStatus) = - User(); + explicit User(QObject *parent =3D nullptr); = QString name() const; void setName(const QString &name); @@ -49,7 +51,6 @@ public: = QString status() const; void setStatus(const QString &status); - bool operator =3D=3D(const User &other) const; = QStringList listRooms() const; void setListRooms(const QStringList &listRooms); @@ -58,6 +59,13 @@ public: void updateUser(const QJsonObject &object); = QString iconFromStatus() const; + + bool operator =3D=3D(const User &other) const; + +Q_SIGNALS: + void nameChanged(); + void statusChanged(); + private: QString mStatus; QString mUserId; diff --git a/src/usermodel.cpp b/src/usermodel.cpp index 369f05a..3bd84d5 100644 --- a/src/usermodel.cpp +++ b/src/usermodel.cpp @@ -29,6 +29,7 @@ UsersModel::UsersModel(QObject *parent) = UsersModel::~UsersModel() { + qDeleteAll(mUsers); } = int UsersModel::rowCount(const QModelIndex &parent) const @@ -39,21 +40,22 @@ int UsersModel::rowCount(const QModelIndex &parent) con= st = QVariant UsersModel::data(const QModelIndex &index, int role) const { - User user =3D mUsers.at(index.row()); - - switch (role) { - case UserName: - return user.name(); - case UserId: - return user.userId(); - case UserStatus: - return user.status(); - case UserListRooms: - return user.listRooms(); - case UserIcon: - return user.iconFromStatus(); - default: - qCWarning(RUQOLA_LOG) << "Unknow usersmodel roles: " << role; + User *user =3D mUsers.at(index.row()); + if (user) { + switch (role) { + case UserName: + return user->name(); + case UserId: + return user->userId(); + case UserStatus: + return user->status(); + case UserListRooms: + return user->listRooms(); + case UserIcon: + return user->iconFromStatus(); + default: + qCWarning(RUQOLA_LOG) << "Unknow usersmodel roles: " << role; + } } return {}; } @@ -62,17 +64,17 @@ void UsersModel::removeUser(const QString &userId) { qCDebug(RUQOLA_LOG) << " User removed " << userId; for (int i =3D 0; i < mUsers.count(); ++i) { - if (mUsers.at(i).userId() =3D=3D userId) { - qCDebug(RUQOLA_LOG) << " User removed " << mUsers.at(i).name(); + if (mUsers.at(i)->userId() =3D=3D userId) { + qCDebug(RUQOLA_LOG) << " User removed " << mUsers.at(i)->name(= ); beginRemoveRows(QModelIndex(), i, i); - mUsers.remove(i); + delete mUsers.takeAt(i); endRemoveRows(); break; } } } = -void UsersModel::addUser(const User &user) +void UsersModel::addUser(User *user) { qCDebug(RUQOLA_LOG) << " User added " << user; //TODO verify if duplicate ? @@ -87,12 +89,12 @@ void UsersModel::updateUser(const QJsonObject &array) { const QString id =3D array.value(QStringLiteral("id")).toString(); for (int i =3D 0; i < mUsers.count(); ++i) { - if (mUsers.at(i).userId() =3D=3D id) { - User user =3D mUsers.at(i); + if (mUsers.at(i)->userId() =3D=3D id) { + User *user =3D mUsers.at(i); const QJsonObject fields =3D array.value(QStringLiteral("field= s")).toObject(); const QString newStatus =3D fields.value(QStringLiteral("statu= s")).toString(); - user.setStatus(newStatus); - mUsers.replace(i, user); + user->setStatus(newStatus); + //mUsers.replace(i, user); Q_EMIT dataChanged(createIndex(1, 1), createIndex(i, 1)); break; } diff --git a/src/usermodel.h b/src/usermodel.h index ed5d562..90325c8 100644 --- a/src/usermodel.h +++ b/src/usermodel.h @@ -43,12 +43,12 @@ public: int rowCount(const QModelIndex &parent) const override; QVariant data(const QModelIndex &index, int role) const override; = - void addUser(const User &user); + void addUser(User *user); void removeUser(const QString &userId); = void updateUser(const QJsonObject &array); private: - QVector mUsers; + QVector mUsers; }; = #endif // USERMODEL_H