[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [ruqola] src: Convert as pointer + qobject + add properties
From:       Montel Laurent <null () kde ! org>
Date:       2017-08-31 20:20:44
Message-ID: E1dnVxE-000493-4R () code ! kde ! org
[Download RAW message or body]

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 <QJsonObject>
 
-User::User()
+User::User(QObject *parent)
+    : QObject(parent)
 {
 }
 
@@ -33,7 +34,10 @@ QString User::name() const
 
 void User::setName(const QString &name)
 {
-    mName = name;
+    if (mName != name) {
+        mName = name;
+        Q_EMIT nameChanged();
+    }
 }
 
 QString User::userId() const
@@ -53,7 +57,10 @@ QString User::status() const
 
 void User::setStatus(const QString &status)
 {
-    mStatus = status;
+    if (mStatus != status) {
+        mStatus = status;
+        Q_EMIT statusChanged();
+    }
 }
 
 bool User::operator ==(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 <QObject>
 #include <QDebug>
 #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 statusChanged)
 public:
 
     enum class PresenceStatus {
@@ -39,7 +41,7 @@ public:
     };
     Q_ENUM(PresenceStatus)
 
-    User();
+    explicit User(QObject *parent = nullptr);
 
     QString name() const;
     void setName(const QString &name);
@@ -49,7 +51,6 @@ public:
 
     QString status() const;
     void setStatus(const QString &status);
-    bool operator ==(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 ==(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) const
 
 QVariant UsersModel::data(const QModelIndex &index, int role) const
 {
-    User user = 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 = 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 = 0; i < mUsers.count(); ++i) {
-        if (mUsers.at(i).userId() == userId) {
-            qCDebug(RUQOLA_LOG) << " User removed " << mUsers.at(i).name();
+        if (mUsers.at(i)->userId() == 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 = array.value(QStringLiteral("id")).toString();
     for (int i = 0; i < mUsers.count(); ++i) {
-        if (mUsers.at(i).userId() == id) {
-            User user = mUsers.at(i);
+        if (mUsers.at(i)->userId() == id) {
+            User *user = mUsers.at(i);
             const QJsonObject fields = array.value(QStringLiteral("fields")).toObject();
             const QString newStatus = fields.value(QStringLiteral("status")).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<User> mUsers;
+    QVector<User *> mUsers;
 };
 
 #endif // USERMODEL_H

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic