[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