align status icon display with e.g. Talk more

- status icons have now a white background/border
- "Invisible"/"Offline" icons are now hidden
- UserModel.status property is now available in QML too when needed

Signed-off-by: Jyrki Gadinger <nilsding@nilsding.org>
This commit is contained in:
Jyrki Gadinger 2025-03-19 11:25:09 +01:00 committed by backportbot[bot]
parent fa6e4efbd9
commit 992ca67528
4 changed files with 15 additions and 4 deletions

View File

@ -162,9 +162,11 @@ Button {
id: currentAccountStatusIndicatorBackground
visible: UserModel.currentUser && UserModel.currentUser.isConnected
&& UserModel.currentUser.serverHasUserStatus
&& UserModel.currentUser.status !== UserStatus.Invisible
&& UserModel.currentUser.status !== UserStatus.Offline
width: Style.accountAvatarStateIndicatorSize + + Style.trayFolderStatusIndicatorSizeOffset
height: width
color: root.parentBackgroundColor
color: "white"
anchors.bottom: currentAccountAvatar.bottom
anchors.right: currentAccountAvatar.right
radius: width * Style.trayFolderStatusIndicatorRadiusFactor
@ -174,6 +176,8 @@ Button {
id: currentAccountStatusIndicator
visible: UserModel.currentUser && UserModel.currentUser.isConnected
&& UserModel.currentUser.serverHasUserStatus
&& UserModel.currentUser.status !== UserStatus.Invisible
&& UserModel.currentUser.status !== UserStatus.Offline
source: UserModel.currentUser ? UserModel.currentUser.statusIcon : ""
cache: false
x: currentAccountStatusIndicatorBackground.x + 1

View File

@ -50,9 +50,10 @@ AbstractButton {
visible: model.isConnected && model.serverHasUserStatus
width: accountStatusIndicator.sourceSize.width + 2
height: width
color: "white"
anchors.bottom: accountAvatar.bottom
anchors.right: accountAvatar.right
radius: width * Style.trayFolderStatusIndicatorRadiusFactor
radius: width * Style.trayFolderStatusIndicatorRadiusFactor
}
Image {

View File

@ -1349,8 +1349,9 @@ void UserModel::addUser(AccountStatePtr &user, const bool &isCurrent)
});
connect(u, &User::statusChanged, this, [this, row] {
emit dataChanged(index(row, 0), index(row, 0), {UserModel::StatusIconRole,
UserModel::StatusEmojiRole,
emit dataChanged(index(row, 0), index(row, 0), {UserModel::StatusRole,
UserModel::StatusIconRole,
UserModel::StatusEmojiRole,
UserModel::StatusMessageRole});
});
@ -1542,6 +1543,8 @@ QVariant UserModel::data(const QModelIndex &index, int role) const
return _users[index.row()]->server();
} else if (role == ServerHasUserStatusRole) {
return _users[index.row()]->serverHasUserStatus();
} else if (role == StatusRole) {
return QVariant::fromValue(_users[index.row()]->status());
} else if (role == StatusIconRole) {
return _users[index.row()]->statusIcon();
} else if (role == StatusEmojiRole) {
@ -1568,6 +1571,7 @@ QHash<int, QByteArray> UserModel::roleNames() const
roles[NameRole] = "name";
roles[ServerRole] = "server";
roles[ServerHasUserStatusRole] = "serverHasUserStatus";
roles[StatusRole] = "status";
roles[StatusIconRole] = "statusIcon";
roles[StatusEmojiRole] = "statusEmoji";
roles[StatusMessageRole] = "statusMessage";

View File

@ -51,6 +51,7 @@ class User : public QObject
Q_PROPERTY(QColor headerTextColor READ headerTextColor NOTIFY headerTextColorChanged)
Q_PROPERTY(QColor accentColor READ accentColor NOTIFY accentColorChanged)
Q_PROPERTY(bool serverHasUserStatus READ serverHasUserStatus CONSTANT)
Q_PROPERTY(UserStatus::OnlineStatus status READ status NOTIFY statusChanged)
Q_PROPERTY(QUrl statusIcon READ statusIcon NOTIFY statusChanged)
Q_PROPERTY(QString statusEmoji READ statusEmoji NOTIFY statusChanged)
Q_PROPERTY(QString statusMessage READ statusMessage NOTIFY statusChanged)
@ -238,6 +239,7 @@ public:
NameRole = Qt::UserRole + 1,
ServerRole,
ServerHasUserStatusRole,
StatusRole,
StatusIconRole,
StatusEmojiRole,
StatusMessageRole,